Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ogfaT-0006cC-KR for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Oct 2022 05:07:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ogfaS-0004Ki-E0 for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Oct 2022 05:07:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ogfaR-0004KT-1Z for pgsql-hackers@lists.postgresql.org; Fri, 07 Oct 2022 05:07:51 +0000 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ogfa9-0001dL-A4 for pgsql-hackers@lists.postgresql.org; Fri, 07 Oct 2022 05:07:49 +0000 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-131ea99262dso4498391fac.9 for ; Thu, 06 Oct 2022 22:07:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=w9WrHmpPUem/HL5NycJmlq5tX/YW1xVheEtsZrnjBLw=; b=Uu5CN9K0ZFC9UmCLCe5aO2tqDVZYSIMgEGOGmBt56w9HnAQfz9khuMSW1daCi54g6x Kv4AZtKhAHLnYMAXIwdmH/t0PMeNXbAsNigAHefAmjv9MrPtBEVqFt3pJ+APuKj9YEAq TzlwC2zojxDK8asUXCVLzBhBs2HurLETkTIvNeHytSatSYOkUFQyIyajaZ0ubox8GYyB SOlRXgCKUIngrloz5XpeH9A66XU1rSBNCmnoSLTjGUICEjwF/C9AGpfEkbo/Pk6zoGpX 0AsGwySkWZkCK/5z2Vuy4NxW5PLLJop2x7quYTFwRcif78RcBmLyY6xlx0VanOfedJHG gzjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=w9WrHmpPUem/HL5NycJmlq5tX/YW1xVheEtsZrnjBLw=; b=TtSZrGkoO2AxlI5jObZVH++KPHBganQ+TLDNSiIE/QGn7dddIHbfjgby/cdGonh+CM xaYrKnQxW/7Q3a25wyVzGkWtEYYtW1AaQmzkB2OgOj4sdWRh/gXZhb92IT+AWPdlGiTq rEgjfYW+rhwh43mT7ZWhPJVKAuHx14VqXGUfK5Nvx7b1TGhlGfP2a2pxx/xjlErW2MyA uHkeCS4I+E4V4Fvjq3DUYRF0k/R8vVwne7zW7Rp9eq/iZQd1djG3qnlkManvigEvMSJ1 T6k8DCt4I8M0DzrBn6sasvWlGNpX0DgJ5P+NsyvHO/rCunZDhbitO8zFY9RAQ0iSoMcp mpnQ== X-Gm-Message-State: ACrzQf3EACLxUUqgtCMfwuU1xKMOoWkubjEWheqUAEQsEMHcdILtmVQr VT9+fx0WH+hzFmp+hUftigvJHMY3vOcP0NmAdzCEkUYFmvp8Og== X-Google-Smtp-Source: AMsMyM4Bh/StkP9418DECs4e1PhJ2k5D7I9V5ZO0T6xarQG4MhKW0GB0reU7OYSTPKbjGBlf0SQx63l3mcS3150A/FU= X-Received: by 2002:a05:6870:f283:b0:135:430c:baa8 with SMTP id u3-20020a056870f28300b00135430cbaa8mr536205oap.160.1665119252103; Thu, 06 Oct 2022 22:07:32 -0700 (PDT) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: vignesh C Date: Fri, 7 Oct 2022 10:37:20 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Zheng Li Cc: Ajin Cherian , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000088741505ea6ac90f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000088741505ea6ac90f Content-Type: text/plain; charset="UTF-8" On Fri, 7 Oct 2022 at 08:10, Zheng Li wrote: > > > Thanks for the new patch-set. > > Could you add the changes to patch 1 and patch 2, rather than adding a > > new patch? > > Otherwise, we'll have a separate patch for each command and it will > > take double work to keep it updated > > for each new command added. > > OK. Here is the consolidated patch set. TEXT SEARCH and TRANSFORM > commands are consolidated into patch 1 and patch 2. > I was wondering if keeping the changes for each command separate makes > it easier to review. Maybe just for some commands that need special > handling. I agree, let's keep the changes for the commands in patch 1 and patch 2 if we are following the same parsing mechanism that is being followed for the existing commands. If any command needs to be handled in a more complex manner which is different from the existing parsing mechanism then we can think of keeping it in a separate patch. CFBOT at [1] was failing as some additional changes were required to handle the meson build errors and warnings. The attached patch has the changes for the same. [1] - https://cirrus-ci.com/task/5343002330660864 Regards, Vignesh --00000000000088741505ea6ac90f Content-Type: text/x-patch; charset="US-ASCII"; name="v25-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8y0yww20 RnJvbSAxMzA2NjdmOTI2MDFjYTgwMDgxOWYzMjQwZWQyNWRkYTM4MWFiNzZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6Mzc6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNSA0LzRdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwg ICAgIHwgNDY1ICsrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDQ2NSBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2ZGNi MDEyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRs X3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lvbiB0ZXN0cyBm b3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0 YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1p bmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAkZGRsID0g IkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdmFyY2hhciwg dmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9 ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBteXB1 YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUs IGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQ VUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6ZWQgdGhlIHRh YmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cgZnJvbSBiZWlu ZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vic2NyaWJl ci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VOVCgxKSA9IDAg RlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUgTk9UIElOICgn cycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIKKyk7CisKKyMg VGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMiwg J2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBpZCA9IDI7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgRFJP UCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBFCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxU RVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMnLCAnMycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGRl ZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJlciBub2RlLgor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3Rf cmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQsICdkYXRhNCcp OyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMoJHJlc3VsdCwg J2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgZG9u J3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIg Q09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWx1ZSBJ UyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3VsdCwgcSh0KSwg J0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBleGlzdGluZyBy ZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRvdXQsICRzdGRl cnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VUIE5PVCBOVUxM OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0 ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIg PX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJlbGF0aW9uIFwi dGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxl ZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBEUk9QIE5P VCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor IyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFpbGVkIGJlZm9y ZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7CitpcygkcmVzdWx0 LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBsaWNhdGVkIik7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQ7Jyk7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3OyIpOworaXMo JHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVwbGljYXRlZCcp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dHRUQ7Jyk7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg4 LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0ZWQnKTsKKwor IyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJjaGFyKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwgJ2EnKSIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2 YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIpLCAnRE1MIENo YW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSU5I RVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwgJ2EnLCAxKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgc29tZSBkYXRh IHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBDUkVBVEUgVEFC TEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwgJ2EnKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRt cDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8gYSB0YWJsZSBk ZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9QIFRBQkxFCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVU5MT0dHRUQg VEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVU5M T0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVz IHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUg VU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8gdW5sb2dnZWQg dGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBkYXRhIHRv IGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVY SVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUg dGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3ZSBzdWNjZWVk CisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRt cCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUg YSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIsIGJ1dCBu b3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBp bnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFU RSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgV0hFUkUg dGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVBVEUgVEFCTEUg d2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGgg bmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBiaWdnZXIgdGhh biAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uc3RyYWludHMu CisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1QgTlVMTCk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2 YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIG5vdC1udWxs IGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24gbnVsbCBjb25z dHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00gdG1wOyIpOwor aXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0cmFpbnQgcmVw bGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJvZHVjdF9hbWUg dGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3ByaWNlX2NoZWNr Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFpbnQiOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg bmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUgVEFCTEUgd2l0 aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25zdHJhaW50Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1 bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklNQVJZIEtFWQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRz dGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5 Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURFIFVTSU5HIGdp c3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8 KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJ CQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Cisk c3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNp b24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVGRVJFTkNFUwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBwcm9k dWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxVRVMgKDEsICdm b28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklN QVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpIik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgxLCAxMCkiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgaW5zZXJ0 IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJh aW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisKKyMgREVGRVJS QUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVycmFibGUg Y2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0 bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0IHNob3Vs ZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBp ZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJP TSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9PiAwLCBzdGRl cnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5 Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcg dGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIE5PVCBE RUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgy LCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9 PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VS Uk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1w X3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVSUkFCTEUgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxMWSBERUZFUlJF RAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCwgbmFt ZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVj ayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBh IHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVECiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAg U0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOwor REVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3Qg Q1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNldCB0d28gY2hl Y2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVzcGVjdGl2ZWx5 LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxF IHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRpc2NvdW50ZWRf cHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwKKwkJCQkJICAg b25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAg IHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJl bGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJzdCBjb25kaXRp b24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAgIG9uX2Vycm9y X3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQg PT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAi dG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRpdGlvbikgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEggc3Ryb3JhZ2Vf cGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19j bGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVyIHJlcGxpY2F0 ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF IHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVhdGluZyBhIHRh Ymxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVjdG9yaWVzIGZv ciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNlZGlyLCAkdGFi bGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRpcjsKKyR0 YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0YWJsZXNwYWNl X2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CiskYmFzZWRp ciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIgPSAiJGJhc2Vk aXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9D QVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BBQ0UgbXl0Ymxz cGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NS RUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBU WVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUg bXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwg J2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUg T0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15ZW51bXR5cGUg QVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgnbmV3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUgVEFCTEUgT0Yg cmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUWVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBUWVBFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgZmxvYXQ4X3Jh bmdlIEFTIFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBmbG9hdDhtaSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAodmFsIGZs b2F0OF9yYW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi aW5zZXJ0IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4xMTExMTNlMycp KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwgJ0NSRUFURSBU QUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVBVEUgQkFTRSBE QVRBIFRZUEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NSRUFURSBGVU5D VElPTiBpbnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMgJ2ludDRpbicK KyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgRlVOQ1RJT04g aW50NDJfb3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50NG91dCcKKyAg IExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQRSBpbnQ0MiAo CisgICBpbnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAorICAgb3V0cHV0 ID0gaW50NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQgPSA0MiwKKyAg IHBhc3NlZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7CitJTlNFUlQg SU5UTyB0bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoNDIpLCAn Q1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bhc3MgIkRETCBy ZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKKyRu b2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjMyLjAKCg== --00000000000088741505ea6ac90f Content-Type: text/x-patch; charset="US-ASCII"; name="v25-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v25-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8y0yww92 RnJvbSA5ZGMyOGFlMzEwYWUwYmQ4Yzc2NjhhMDhiNjAxOTMxY2M0ZmFlZDQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6MTA6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNSAyLzRdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IFdoaWxlIGNyZWF0aW5nIGEgcHVibGljYXRpb24sIHdlIHJlZ2lzdGVyIGEgY29tbWFuZCBlbmQK dHJpZ2dlciB0aGF0IGRlcGFyc2VzIHRoZSBEREwgYXMgYSBKU09OIGJsb2IsIGFuZCBXQUwgbG9n cyBpdC4gVGhlIGV2ZW50CnRyaWdnZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGF0IHRoZSB0 aW1lIG9mIGRyb3AgcHVibGljYXRpb24uIFRoZQpXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCBkb3duc3RyZWFtIHNpbWlsYXIgdG8gb3RoZXIgRE1MCmNvbW1hbmRzLiBUaGUg c3Vic2NyaWJlciB0aGVuIGNvbnZlcnRzIEpTT04gYmFjayB0byB0aGUgRERMIGNvbW1hbmQgc3Ry aW5nCmFuZCBleGVjdXRlcyBpdC4gSW4gdGhlIHN1YnNjcmliZXIsIHdlIGFsc28gYWRkIHRoZSBu ZXdseSBhZGRlZCByZWwgdG8KcGdfc3Vic2NyaXB0aW9uX3JlbCBzbyB0aGF0IHRoZSBETUwgY2hh bmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZQpyZXBsaWNhdGVkIHdpdGhvdXQgaGF2aW5nIHRv IG1hbnVhbGx5IHJ1bgoiQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9O Ii4KClRoaXMgaXMgYSBQT0MgcGF0Y2ggdG8gc2hvdyBob3cgdXNpbmcgZXZlbnQgdHJpZ2dlcnMg YW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcyB3ZSBjYW4gaW1wbGVtZW50IERETCByZXBsaWNh dGlvbi4gU28sIHRoZSBpbXBsZW1lbnRhdGlvbiBpcwpyZXN0cmljdGVkIHRvIENSRUFURSBUQUJM RS9BTFRFUiBUQUJMRS9EUk9QIFRBQkxFIGNvbW1hbmRzLgoKLSBGb3Igbm9uLXJld3JpdGUgQUxU RVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBvYmplY3QgY29tbWFuZDoKd2UgZGVw YXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciBhbmQgV0FM IGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUg V0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBjcmVhdGVkL2FsdGVyZWQgdGFi bGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9mCkFMVEVSIFRBQkxFIGNvbW1hbmQg ZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8gUEFSVElUSU9ORUQgVEFCTEUKLi4u KSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2ZW4ndCBiZWVuIHN1cHBvcnRlZCBi eSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwgc3VwcG9ydCB0aGF0IGxhdGVyLgoK Tm90ZSB0aGF0IHRoZSByZXBsaWNhdGlvbiBmb3IgQUxURVIgSU5ERVggY29tbWFuZCBpcyBzdGls bCB1bmRlcgpwcm9ncmVzcy4KCi0gRm9yIERST1Agb2JqZWN0OgpUaGUgJ2NvbW1hbmQgc3RhcnQn IGV2ZW50IGhhbmRsZXIgbG9ncyBhIGRkbCBtZXNzYWdlIHdpdGggdGhlIHJlbGlkcyBvZgp0aGUg dGFibGVzIHRoYXQgYXJlIGRyb3BwZWQgd2hpY2ggdGhlIG91dHB1dCBwbHVnaW4gKHBnb3V0cHV0 KSBzdG9yZXMgaW4KaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFmdGVyIHZlcmlmeWluZyB0 aGF0IGl0IGlzIGZvciBhIHRhYmxlIHRoYXQgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24uIExh dGVyIHRoZSAnY29tbWFuZCBlbmQnIGV2ZW50IGhhbmRsZXIgc2VuZHMgdGhlCmFjdHVhbCBkcm9w IG1lc3NhZ2UuIFBnb3V0cHV0IG9uIHJlY2VpdmluZyB0aGUgY29tbWFuZCBlbmQsIG9ubHkgc2Vu ZHMgb3V0CnRoZSBkcm9wIGNvbW1hbmQgb25seSBpZiBpdCBpcyBmb3Igb25lIG9mIHRoZSByZWxp ZHMgbWFya2VkIGZvciBkZWxldGluZy4KVGhlIHJlYXNvbiB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMg YmVjYXVzZSwgb25jZSB0aGUgbG9naWNhbCBkZWNvZGVyCnJlY2VpdmVzIHRoZSAnY29tbWFuZCBl bmQnIG1lc3NhZ2UsICB0aGUgcmVsaWQgb2YgdGhlIHRhYmxlIGlzIG5vIGxvbmdlcgp2YWxpZCBh cyBpdCBoYXMgYmVlbiBkZWxldGVkIGFzIHBhcnQgb2YgaW52YWxpZGF0aW9ucyByZWNlaXZlZCBm b3IgdGhlCmRyb3AgdGFibGUgY29tbWFuZC4gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHZl cmlmeSBpZiB0aGUgdGFibGUgaXMKcGFydCBvZiB0aGUgcHVibGljYXRpb24gbGlzdCBvciBub3Qu IFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgSSBoYXZlIGFkZGVkCnR3byBtb3JlIGVsZW1lbnRzIHRv IHRoZSBkZGwgeGxvZyBhbmQgZGRsIG1lc3NhZ2UsIChyZWxpZCBhbmQgY21kdHlwZSkuCgpXZSBj b3VsZCBoYXZlIGFsc28gaGFuZGxlZCBhbGwgdGhpcyBvbiB0aGUgc3Vic2NyaWJlciBzaWRlIGFz IHdlbGwsIGJ1dAp0aGF0IHdvdWxkIG1lYW4gc2VuZGluZyBzcHVyaW91cyBkZGwgbWVzc2FnZXMg Zm9yIHRhYmxlcyB0aGF0IGFyZSBub3QgcGFydApvZiB0aGUgcHVibGljYXRpb24uCgotIEZvciB0 YWJsZV9yZXdyaXRlIEFMVEVSIFRBQkxFIGNvbW1hbmQ6CihBTFRFUiBDT0xVTU4gVFlQRSwgQURE IENPTFVNTiBERUZBVUxULCBTRVQgTE9HR0VELCBTRVQgQUNDRVNTIE1FVEhPRCkKCndlIGRlcGFy c2UgdGhlIGNvbW1hbmQgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nIGF0CnRh YmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlci4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGFsdGVyZWQgdGFibGUgaXMgcHVibGlz aGVkLiBUaGVuLCB0aGUgV0FMU2VuZGVyIHdpbGwKY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0 ZSBJTlNFUlRzIHRvIFVQREFURXMgYW5kIHNlbmQgdGhlbSB0bwpzdWJzY3JpYmVyIHNvIHRoYXQg dGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZQpj b25zaXN0ZW50LiBOb3RlIHRoYXQgdGhlIHRhYmxlcyB0aGF0IHB1Ymxpc2ggcmV3cml0ZSBkZGwg bXVzdCBoYXZlIGEKcmVwbGljYSBpZGVudGl0eSBjb25maWd1cmVkIGluIG9yZGVyIHRvIGJlIGFi bGUgdG8gcmVwbGljYXRlIHRoZSB1cGNvbWluZwpyZXdyaXRlIFVQREFURXMuCgpXZSBkbyB0aGlz IHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CigxKSBUaGUgZGF0YSBiZWZvcmUgdGhlIHJld3Jp dGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIgd2hpY2gK ZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRv IGxldCB0aGUKc3Vic2NyaWJlciBleGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbCB0byBy ZXdyaXRlIGFsbCB0aGUgZGF0YSBhdApmaXJzdC4KCigyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRp bmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCnB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlcihkdWUgdG8gZGlmZmVyZW50IGZ1bmN0aW9ucy9vcGVyYXRvcnMgdXNlZCBkdXJpbmcK cmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8g a2VlcCB0aGUgZGF0YQpjb25zaXN0ZW50LgoKVE8gSU1QUk9WRToKVGhpcyBhcHByb2FjaCBjb3Vs ZCBiZSBpbXByb3ZlZCBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyIHRyeSB0byB1cGRhdGUKdGhl IGV4dHJhIGRhdGEgaXRzZWxmIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBkZGwgYW5k IHVzZSB0aGUKdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0 YS4gVG8gYWNoaWV2ZSB0aGlzLCB3ZQpjb3VsZCBtb2RpZnkgdGhlIGRlcGFyc2VkIGpzb24gc3Ry aW5nIHRvIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgcmV3cml0ZQpwYXJ0IGFuZCBhZGQgc29tZSBs b2dpYyBpbiBzdWJzY3JpYmVyIHRvIHVwZGF0ZSB0aGUgZXh0cmEgZGF0YS4KQmVzaWRlcywgd2Ug bWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdy aXRlCmRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nIHJld3Jp dGUgY2hhbmdlcyBmb3IgQUxURVIKVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUg dGFibGUgZG9lc24ndCBhY3R1YWxseSBiZSBjaGFuZ2VkLiBXZQpjb3VsZCB1c2UgdGhlIGRlcGFy c2VyIGFuZCBldmVudCB0cmlnZ2VyIHRvIGZpbHRlciB0aGVzZSBkZGxzIGFuZCBza2lwCnNlbmRp bmcgcmV3cml0ZSBjaGFuZ2VzIGZvciB0aGVtLgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArCiAuLi4vYWNjZXNzL3JtZ3JkZXNjL2xvZ2lj YWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbWVzb24uYnVpbGQgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJs aWNhdGlvbi5jICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYyAgICAgICAgICB8IDI1MCArKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMgICAgICAgIHwgMTU3ICsrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICB8ICA4NiArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgfCAgNDEgKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICB8ICA5MyArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQ4ICsrCiAuLi4vcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMzYgKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgfCAyMzIgKysrKysrKysrKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgMTkyICsrKysrKystCiBzcmMvYmFj a2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcHNxbC9k ZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUvYWNj ZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZGxtZXNzYWdlLmggICAgICAgICAgfCAgNjAgKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZWNvZGUuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmggICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v dXRwdXRfcGx1Z2luLmggICAgICAgfCAgMjcgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bn b3V0cHV0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9y ZGVyYnVmZmVyLmggICAgICAgfCAgMzkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNx bC5vdXQgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJs aWNhdGlvbi5vdXQgICAgIHwgNDIwICsrKysrKysrKy0tLS0tLS0tLQogMzMgZmlsZXMgY2hhbmdl ZCwgMTY4NCBpbnNlcnRpb25zKCspLCAyMjkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmZDg2Li5iOGUy OWU4ZGYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3 IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2MubyBcCiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rl c2MubyBcCisJbG9naWNhbGRkbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRlc2Mu byBcCiAJcmVsbWFwZGVzYy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xv Z2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ODFkZWU1MjlkMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCSAgcm1nciBkZXNjcmlwdG9yIHJvdXRp bmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAgICpyZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNv cmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19N QVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCXsKKwkJeGxf bG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBy ZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVjLT5tZXNzYWdlOworCQljaGFyCSAgICptZXNz YWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJlZml4X3NpemU7CisJCWNoYXIJICAgKnNl cCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxyZWMtPnByZWZpeF9zaXplXSAhPSAnXDAnKTsK KworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInByZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6dSBi eXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJlYy0+bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJl Yy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3NhZ2UgcGF5bG9hZCBhcyBhIHNlcmllcyBvZiBo ZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0gMDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6 ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAo dW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsKKwkJCXNlcCA9ICIgIjsKKwkJfQorCX0KK30K KworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJ aWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkK KwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAppbmRleCBmM2E2ZTBhNTcxLi4zYTcwYzk3NGRlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCkBAIC05LDYgKzksNyBAQCBy bWdyX2Rlc2Nfc291cmNlcyA9IGZpbGVzKAogICAnZ2lzdGRlc2MuYycsCiAgICdoYXNoZGVzYy5j JywKICAgJ2hlYXBkZXNjLmMnLAorICAnbG9naWNhbGRkbG1zZ2Rlc2MuYycsCiAgICdsb2dpY2Fs bXNnZGVzYy5jJywKICAgJ214YWN0ZGVzYy5jJywKICAgJ25idGRlc2MuYycsCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggNTk5NjcwOThiMy4uNzIxZDAyM2FhNSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0UHVi bGljYXRpb24oT2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3Jt LT5wdWJ1cGRhdGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRl bGV0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0 ZTsKKwlwdWItPnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+cHVi dmlhcm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA0NDFmMjlkNjg0Li43YzhjMWY1 Mzk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBA QAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5o IgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFy c2VfdXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3Av ZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTM3LDYgKzE1NDAs NyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29t bWFuZC0+ZC5hbHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFu ZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVy VGFibGUucmV3cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0g TklMOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAt MTU3MCw3ICsxNTc0LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJ ZCkKICAqIGludGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8g aGFuZGxlIGF0IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRl clRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRU cmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNz IGFkZHJlc3MsIGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xs ZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOwpAQCAtMTU5MCw2ICsxNTk0LDcgQEAgRXZlbnRUcmlnZ2Vy Q29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJl c3MpCiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNv cHlPYmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBw ZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJs ZS5zdWJjbWRzLCBuZXdzdWIpOwogCkBAIC0yMTc1LDMgKzIxODAsMjQ2IEBAIHN0cmluZ2lmeV9h ZGVmcHJpdnNfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7CQkJ CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfc3RhcnQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFuZCBhbmQg bG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFy dChQR19GVU5DVElPTl9BUkdTKQoreworCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCWNo YXIJCSpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURy b3BTdG10CSpzdG10OworCUxpc3RDZWxsCSpjZWxsMTsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5U X1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmln Z2VyIG1hbmFnZXIiKTsKKworCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZv LT5jb250ZXh0OworCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisK KwkvKiBleHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChj ZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJcmVscGVyc2lzdDsKKwkJTm9kZQkqb2Jq ZWN0ID0gbGZpcnN0KGNlbGwxKTsKKwkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQlSZWxhdGlv biByZWxhdGlvbiA9IE5VTEw7CisKKwkJYWRkcmVzcyA9IGdldF9vYmplY3RfYWRkcmVzcyhzdG10 LT5yZW1vdmVUeXBlLAorCQkJCQkJCQkJIG9iamVjdCwKKwkJCQkJCQkJCSAmcmVsYXRpb24sCisJ CQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9jaywKKwkJCQkJCQkJCSB0cnVlKTsKKworCQlyZWxw ZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgor CQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRh YmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVy YXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0 YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBz aWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUg U0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdl IHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCA9 PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9M b2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJIGNvbW1h bmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCisJCWlmIChyZWxhdGlvbikKKwkJCXRhYmxlX2Ns b3NlKHJlbGF0aW9uLCBOb0xvY2spOworCX0KKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwp OworfQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlCisgKgorICog RGVwYXJzZSB0aGUgZGRsIHRhYmxlIHJld3JpdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitE YXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNo YXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZj aW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2Vy Iik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CisJQXNzZXJ0KGNtZCAmJiBjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKTsKKworCXJlbHBlcnNp c3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKTsKKwor CS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdl dCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5l cmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVz CisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBz aWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBT RVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3 aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJF TFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkv KiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGlu ZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxE RExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIERDVF9UYWJs ZUFsdGVyLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOwor CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kCisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQg YW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRf ZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTGlzdENlbGwgICAqbGM7CisJc2xpc3RfaXRlciAg aXRlcjsKKwlEZXBhcnNlZENvbW1hbmRUeXBlIHR5cGU7CisJT2lkIHJlbGlkOworCisJaWYgKCFD QUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVk IGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlzdCkKKwl7CisJCWNoYXIJCQkJcmVscGVyc2lzdCA9IFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQgPSBsZmly c3QobGMpOworCQljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJCS8qIFJld3JpdGUgRERMIGhh cyBiZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQu YWx0ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlSZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJl bmFtZVN0bXQgKiljbWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1l U3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVs YXRpb25UeXBlICE9IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChj bWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NU X0FsdGVyVGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7 CisJCQl0eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5 IFNDVF9TaW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mu b2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVs X3JlbGtpbmQocmVsaWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVs aWQpOworCisJCS8qCisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3 aG9zZSB0YXJnZXQgdGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAq IFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVu bG9nZ2VkIHRhYmxlcworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0 bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiBy ZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlm IChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkv KgorCQkgKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBk ZWNvZGluZyBvZiB0aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJz ZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5V TEwpCisJCQljb250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJl bGlkLCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEp OworCX0KKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PlNRTERyb3BMaXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJv cFN0bXQJCQkgICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQlj aGFyCQkJCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCQlj b25zdCBjaGFyCQkJICAgKnRtcHR5cGU7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0 YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQJID0gKERyb3BTdG10ICopIHRyaWdkYXRhLT5w YXJzZXRyZWU7CisKKwkJb2JqID0gc2xpc3RfY29udGFpbmVyKFNRTERyb3BPYmplY3QsIG5leHQs IGl0ZXIuY3VyKTsKKworCQlpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0g MCkKKwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOworCQllbHNlIGlmIChzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAic2VxdWVuY2UiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVj dHR5cGUsICJzY2hlbWEiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJp bmRleCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikg PT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicHJvY2VkdXJlIikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBjbGFzcyIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGZhbWlseSIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImNhc3QiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJ0eXBlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAiZG9tYWluIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHJpZ2dl ciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImNvbnZlcnNpb24iKSA9 PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwb2xpY3kiKSA9PSAwCXx8CisJ CQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJydWxlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAo b2JqLT5vYmplY3R0eXBlLCAiZXh0ZW5zaW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5v YmplY3R0eXBlLCAiZm9yZWlnbi1kYXRhIHdyYXBwZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggZGljdGlvbmFyeSIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIHBhcnNlciIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIHRlbXBsYXRl IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHJhbnNmb3JtIikgPT0g MCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24gZGF0YSB3 cmFwcGVyLgorCQkgKi8KKwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAiZm9yZWlnbi1k YXRhIHdyYXBwZXIiLCAyMCkgPT0gMCkKKwkJeworCQkJdG1wdHlwZSA9IHBzdHJkdXAoImZvcmVp Z24gZGF0YSB3cmFwcGVyIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2Jq LT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJ CX0KKwkJZWxzZQorCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRl bnRpdHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwor CQlpZiAoY29tbWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1l c3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJ IGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0 RGF0dW0oTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4 IGE4Yjc1ZWIxYmUuLjVhNWI5NzliMDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jCkBAIC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgi CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jb2xsYXRlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVk ZSAicGFyc2VyL3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUg InV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05Niw2ICs5OCw3IEBA IHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlv bnMtPnB1YnVwZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlw dWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFs c2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBv cHRpb25zICovCkBAIC0xNDMsNiArMTQ2LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJ CQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlw dWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxp c2hfb3B0LCAiZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJ CQllbHNlCiAJCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5U QVhfRVJST1IpLApAQCAtNzI3LDYgKzczMiw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlz dChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJsZXMsCiAJfQogfQogCisvKgorICogQ3JlYXRlIGV2 ZW50IHRyaWdnZXIgd2hpY2ggaXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgorICovCitzdGF0 aWMgdm9pZAorQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVudG5hbWUsIENv bW1hbmRUYWcgKmNvbW1hbmRzLAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmplY3RBZGRyZXNz IHB1YmFkZHJlc3MsCisJCQkJCQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJCQlpOworCUxpc3QJ CQkgICAqdGFncyA9IE5JTDsKKwlPaWQJCQkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRkcmVzcwkJ cmVmZXJlbmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFyCQkJ CXRyaWdnZXJfbmFtZVtOQU1FREFUQUxFTl07CisJY2hhcgkJCQl0cmlnZ2VyX2Z1bmNfbmFtZVtO QU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9uYW1lX3ByZWZpeCA9 ICJwZ19kZXBhcnNlX3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICAgKnRyaWdnZXJf ZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9 IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9uYW1l LCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJCSBldmVudG5h bWUsIHB1Ym9pZCk7CisJc25wcmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2Vy X2Z1bmNfbmFtZSksIHRyaWdnZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1lKTsKKworCWRk bF90cmlnZ2VyLT50cmlnbmFtZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJpZ2dl ci0+ZXZlbnRuYW1lID0gZXZlbnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5c3Rl bUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29tbWFu ZHM7IGkrKykKKwl7CisJCVN0cmluZyAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENvbW1h bmRUYWdOYW1lKGNvbW1hbmRzW2ldKSkpOworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcpOwor CX0KKworCWRkbF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgi dGFnIiwgKE5vZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVudFRy aWdnZXIoZGRsX3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJpZ2dl cnMgYXMgaW50ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlCisJICogcHVibGljYXRpb24uCisJICov CisJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxhdGlvbklkLCB0 cmlnZ2VyX2lkKTsKKwlyZWNvcmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZwdWJhZGRyZXNz LCBERVBFTkRFTkNZX0lOVEVSTkFMKTsKK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRp b24uCiAgKi8KQEAgLTc5Nyw2ICs4NDksOCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHViZGVsZXRlKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVu Y2F0ZSAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZh bHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHViZGRsKTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290 IC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBA IC04NTcsNiArOTExLDEwNiBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRl IGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkg KgorCSAqIFRPRE86IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciBzeW50YXggdG8gYWxsb3cgcmVw bGljYXRpb24gb2YgRERMCisJICogc3RhdGVtZW50cy4KKwkgKgorCSAqIFhYWDogVGhpcyBjb2Rl IGlzIGp1c3QgdG8gc2hvdyB0aGUgcmVwbGljYXRpb24gb2YgQ1JFQVRFL0FMVEVSL0RST1AKKwkg KiBUQUJMRSB3b3Jrcy4gV2UgbmVlZCB0byBlbmhhbmNlIHRoaXMgb25jZSB0aGUgYXBwcm9hY2gg Zm9yIERETAorCSAqIHJlcGxpY2F0aW9uIGlzIGZpbmFsaXplZC4KKwkgKi8KKwlpZiAocHViYWN0 aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFH X0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdf QUxURVJfVEFCTEV9OworCisJCUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURU QUdfQ1JFQVRFX1RSQU5TRk9STSwKKwkJCUNNRFRBR19EUk9QX1RSQU5TRk9STSwKKwkJCUNNRFRB R19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlDTURUQUdfQUxURVJfRk9SRUlHTl9E QVRBX1dSQVBQRVIsCisJCQlDTURUQUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNN RFRBR19DUkVBVEVfRVhURU5TSU9OLAorCQkJQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwKKwkJCUNN RFRBR19EUk9QX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklH VVJBVElPTiwKKwkJCUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJ Q01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19DUkVBVEVf VEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9ESUNU SU9OQVJZLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRB R19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hf UEFSU0VSLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9URU1QTEFURSwKKwkJCUNNRFRB R19EUk9QX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFHX0NSRUFURV9QT0xJQ1ksCisJ CQlDTURUQUdfQUxURVJfUE9MSUNZLAorCQkJQ01EVEFHX0RST1BfUE9MSUNZLAorCQkJQ01EVEFH X0NSRUFURV9DT05WRVJTSU9OLAorCQkJQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURU QUdfRFJPUF9DT05WRVJTSU9OLAorCQkJQ01EVEFHX0NSRUFURV9ET01BSU4sCisJCQlDTURUQUdf QUxURVJfRE9NQUlOLAorCQkJQ01EVEFHX0RST1BfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0lO REVYLAorCQkJQ01EVEFHX0NSRUFURV9UWVBFLAorCQkJQ01EVEFHX0RST1BfVFlQRSwKKwkJCUNN RFRBR19BTFRFUl9UWVBFLAorCQkJQ01EVEFHX0NSRUFURV9DQVNULAorCQkJQ01EVEFHX0FMVEVS X0NBU1QsCisJCQlDTURUQUdfRFJPUF9DQVNULAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwK KwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJB VE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdf QUxURVJfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1IsCisJCQlDTURU QUdfRFJPUF9PUEVSQVRPUiwKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLAorCQkJQ01E VEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0NSRUFURV9QUk9DRURVUkUsCisJ CQlDTURUQUdfQUxURVJfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJ Q01EVEFHX0NSRUFURV9GVU5DVElPTiwKKwkJCUNNRFRBR19BTFRFUl9GVU5DVElPTiwKKwkJCUNN RFRBR19EUk9QX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9UUklHR0VSLAorCQkJQ01EVEFH X0FMVEVSX1RSSUdHRVIsCisJCQlDTURUQUdfRFJPUF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVf VEFCTEUsCisJCQlDTURUQUdfQUxURVJfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNF LAorCQkJQ01EVEFHX0FMVEVSX1NFUVVFTkNFLAorCQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJ CQlDTURUQUdfQ1JFQVRFX1NDSEVNQSwKKwkJCUNNRFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURU QUdfRFJPUF9TQ0hFTUEsCisJCQlDTURUQUdfQ1JFQVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1Bf SU5ERVgsCisJCQlDTURUQUdfQUxURVJfSU5ERVgsCisJCQlDTURUQUdfR1JBTlQsCisJCQlDTURU QUdfUkVWT0tFLAorCQkJQ01EVEFHX0NSRUFURV9SVUxFLAorCQkJQ01EVEFHX0FMVEVSX1JVTEUs CisJCQlDTURUQUdfRFJPUF9SVUxFLAorCQkJQ01EVEFHX1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJ RVcKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2Vy ICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVu ZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1 Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2Vy ICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwg c3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNl bGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdn ZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJl d3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15 c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2sp OwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhvb2soUHVibGljYXRpb25SZWxhdGlvbklkLCBw dWJvaWQsIDApOwpAQCAtOTk1LDYgKzExNDksOSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCiAJCXZhbHVl c1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25fcHVi dHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVi ZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGwpOworCQlyZXBsYWNlc1tB bnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4 IDFmNzc0YWMwNjUuLjdmYzZmNDE2MDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC01 MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5m byAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRy aWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxl U3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRl clRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKIAogCS8q CiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3VyZSB0aGUgbmV4dCBzdWJjb21t YW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZp bGUKaW5kZXggYzRlMmZkZWI3MS4uZjNlZWI2NzMxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9 IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJZGVjb2RlLm8gXAorCWRkbG1l c3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXAogCWxvZ2ljYWxmdW5jcy5vIFwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTA5MzUyM2U5YQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCkBAIC0wLDAg KzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbG1lc3NhZ2UuYworICoJICBM b2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBOT1RF UworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhMT0cgbG9nZ2luZyBvZiBEREwg Y29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8gdGhlIGxvZ2ljYWwgZGVjb2Rp bmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRoZXkKKyAqIGFyZSBzYW1lIGFz IE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBtZXNzYWdlcywgdGhlc2UgRERM IG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBtb2RlLk5vdGUgYnkgZGVmYXVs dCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVz c2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRv CisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9u cy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0 cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRo b3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBv cHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0 ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxv Z2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlz Y2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGlu ZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExN ZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkgKiBFbnN1cmUgd2UgaGF2ZSBh IHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJc1RyYW5zYWN0aW9uU3RhdGUo KSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhscmVjLmRiSWQgPSBNeURhdGFi YXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsgc2VlIGxvZ2ljYWxkZGxtc2df ZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHByZWZpeCkgKyAxOworCXhscmVj Lm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSByZWxpZDsKKwl4bHJlYy5jbWR0 eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOworCVhMb2dSZWdpc3RlckRhdGEo KGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZSk7CisJWExvZ1JlZ2lzdGVy RGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMucHJlZml4X3NpemUpOworCVhM b2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3NhZ2UpLCBzaXplKTsKKworCS8q IGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNM VURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9MT0dJQ0FMRERMTVNHX0lELCBY TE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICogUmVkbyBpcyBiYXNpY2FsbHkg anVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKyAqLwordm9pZAor bG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCXVpbnQ4CQlp bmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGlu Zm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKFBBTklDLCAibG9naWNhbGRk bG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKKworCS8qIFRoaXMgaXMgb25s eSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2VlIGRlY29kZS5jLiAqLworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggMmNjMGFjOWViMC4u MWYyYzc1MTc1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCkBA IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1dGlscy5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgor I2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjAzLDYgKzYwNCw0NiBAQCBsb2dpY2FsbXNnX2Rl Y29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikK IAkJCQkJCQkgIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSk7CiB9CiAK Ky8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNHX0lEIHJlY29yZHMgZm9yIERlY29kZVJl Y29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQorewor CVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CisJWExvZ1JlYWRl clN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVjR2V0 WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+WExSX0lORk9fTUFT SzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2luKHIpOworCXhsX2xv Z2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxf RERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX0xPR0lDQUxERExNU0df SUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9yZGVyQnVmZmVyUHJvY2Vzc1hpZChj dHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0cik7CisKKwkvKgorCSAq IElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJlIGp1c3QgZmFzdC1mb3J3YXJkaW5n LCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKwkgKi8K KwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIpIDwgU05BUEJVSUxEX0ZVTExfU05B UFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJldHVybjsKKworCW1lc3NhZ2UgPSAo eGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsKKworCWlmIChtZXNz YWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSB8fAorCQlGaWx0ZXJCeU9yaWdp bihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlmIChTbmFwQnVpbGRQcm9jZXNzQ2hh bmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJUmVvcmRlckJ1ZmZlclF1ZXVlRERM TWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRwdHIsCisJCQkJCQkJCQkgbWVzc2Fn ZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdlIGlzIHByZWZpeCAqLworCQkJCQkJ CQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlICsg bWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+cmVsaWQsIG1lc3NhZ2Ut PmNtZHR5cGUpOworfQorCiAvKgogICogQ29uc29saWRhdGVkIGNvbW1pdCByZWNvcmQgaGFuZGxp bmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29tbWl0CiAgKiByZWNvcmRzLgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwppbmRleCA2MjVhN2Y0MjczLi45 ODk2OWM3YWVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpA QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNzMsNiAr NzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpj YWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZvaWQgbWVzc2FnZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJ ICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2FjdGlvbmFsLAogCQkJCQkJCSAg IGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNh Y2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdl X2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQg c3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBz dGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBT aXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJl YW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgICBp bnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJlb3JkZXJCdWZmZXJDaGFuZ2Ug KmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExp c3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRl ID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9j Yl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsK KwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAKIAkv KgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQv Y29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQo TGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2Nv bW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAh PSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkg fHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdlX2NiICE9IE5VTEwpIHx8CiAJ CShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0gTlVMTCk7CiAKIAkvKgpAQCAt MjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdp bl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1pdCA9IHN0cmVhbV9jb21taXRf Y2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFuZ2UgPSBzdHJlYW1fY2hhbmdl X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVzc2FnZSA9IHN0cmVhbV9tZXNz YWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1fZGRsbWVzc2FnZSA9IHN0cmVh bV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUg PSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIwLDYgKzEyMzMsNDQgQEAg bWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQog CitzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwK KwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIg Km1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZh dGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4 dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisK KwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisK KwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwor CXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1lID0gImRkbG1lc3NhZ2UiOwor CXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxi YWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAo dm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0 YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0 cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hp ZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgt PndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6 IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxtZXNzYWdlX2NiKGN0eCwgdHhu LCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJCQkJIG1lc3NhZ2Vf c2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwll cnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2 b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24pCkBAIC0xNTM1LDYg KzE1ODYsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxs YmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxtZXNzYWdlX2NiX3dy YXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxs YmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJ QXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdyZSBvbmx5IHN1cHBvc2VkIHRv IGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQuICovCisJQXNzZXJ0KGN0eC0+ c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgKi8KKwlpZiAoY3R4 LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJ LyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlz dGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJlYW1fZGRsbWVzc2Fn ZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2su Y2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFy ZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRl eHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNl dCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3Jp dGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOwor CWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwg d29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdl X2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwKKwkJCQkJCQkJCQljbWR0 eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250ZXh0 IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwor fQorCiBzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZl ciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCSAgIGludCBucmVsYXRpb25z LCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L21lc29uLmJ1aWxkCmluZGV4IDc3MzU4M2ExMmIuLmU3YzcwYWEyNjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZApAQCAtMSw0ICsxLDUgQEAKIGJhY2tl bmRfc291cmNlcyArPSBmaWxlcygKKyAgJ2RkbG1lc3NhZ2UuYycsCiAgICdkZWNvZGUuYycsCiAg ICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZTJkMi4uZjM1NDA2Mjc1YiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYyLDYgKzY2Miw1MiBAQCBsb2dpY2FscmVw X3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGxzbiwKIAlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7CiB9CiAKKy8qCisgKiBS ZWFkIERETCBNRVNTQUdFIGZyb20gc3RyZWFtCisgKi8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFk X2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLAorCQkJCQkJICAgY29u c3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6KQoreworCXVpbnQ4IGZsYWdzOwor CWNoYXIgKm1zZzsKKworCS8vVE9ETyBkb3VibGUgY2hlY2sgd2hlbiBkbyB3ZSBuZWVkIHRvIGdl dCBUcmFuc2FjdGlvbklkLgorCisJZmxhZ3MgPSBwcV9nZXRtc2dpbnQoaW4sIDEpOworCWlmIChm bGFncyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGZsYWdzICV1IGluIGRkbCBt ZXNzYWdlIiwgZmxhZ3MpOworCSpsc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJKnByZWZpeCA9 IHBxX2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwltc2cg PSAoY2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKworCXJldHVybiBtc2c7Cit9CisK Ky8qCisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAqLwordm9pZAorbG9naWNhbHJl cF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9IDA7CisKKwlwcV9zZW5kYnl0ZShvdXQs IExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFKTsKKworCS8qIHRyYW5zYWN0aW9uIElEIChpZiBu b3QgdmFsaWQsIHdlJ3JlIG5vdCBzdHJlYW1pbmcpICovCisJaWYgKFRyYW5zYWN0aW9uSWRJc1Zh bGlkKHhpZCkpCisJCXBxX3NlbmRpbnQzMihvdXQsIHhpZCk7CisKKwlwcV9zZW5kaW50OChvdXQs IGZsYWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsc24pOworCXBxX3NlbmRzdHJpbmcob3V0LCBw cmVmaXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6KTsKKwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNz YWdlLCBzeik7Cit9CisKIC8qCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUg b3V0cHV0IHN0cmVhbS4KICAqLwpAQCAtMTIxOCw2ICsxMjY0LDggQEAgbG9naWNhbHJlcF9tZXNz YWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKQogCQkJcmV0dXJuICJUWVBFIjsKIAkJ Y2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJCXJldHVybiAiTUVTU0FHRSI7CisJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNhc2Ug TE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBBUkUi OwogCQljYXNlIExPR0lDQUxfUkVQX01TR19QUkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwppbmRleCA2ZGZmOTkxNWE1Li4zYzM3Njkw YzMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGlj YXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vc2xvdC5oIgpAQCAtNTE1LDYgKzUxNiwxNCBAQCBSZW9yZGVyQnVmZmVyUmV0dXJuQ2hhbmdl KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsCiAJCQkJcGZy ZWUoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsKIAkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVT U0FHRToKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCAhPSBOVUxMKQorCQkJCXBm cmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cu cHJlZml4ID0gTlVMTDsKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgIT0gTlVM TCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5k YXRhLmRkbG1zZy5tZXNzYWdlID0gTlVMTDsKKwkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVG RkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlpZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFs aWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpA QCAtODY5LDYgKzg3OCwzNiBAQCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZm ZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAl9CiB9CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9u YWwgRERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJlIHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAq Lwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpw cmVmaXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlLAor CQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1v cnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJ QXNzZXJ0KHhpZCAhPSBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CisKKwlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKHJiLT5jb250ZXh0KTsKKworCWNoYW5nZSA9IFJlb3JkZXJCdWZm ZXJHZXRDaGFuZ2UocmIpOworCWNoYW5nZS0+YWN0aW9uID0gUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RETE1FU1NBR0U7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXggPSBwc3RyZHVwKHByZWZp eCk7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCA9IHJlbGlkOworCWNoYW5nZS0+ZGF0YS5k ZGxtc2cuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3Np emUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlID0gcGFsbG9j KG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSwgbWVz c2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShyYiwgeGlk LCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNOIG9yZGVy aW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCkBAIC0xOTY4LDYg KzIwMDcsMjkgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwog fQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTiBm b3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK1Jl b3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0 cmVhbWluZykKK3sKKwlpZiAoc3RyZWFtaW5nKQorCQlyYi0+c3RyZWFtX2RkbG1lc3NhZ2UocmIs IHR4biwgY2hhbmdlLT5sc24sCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwK KwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsCisJCQkJCQkJICBjaGFuZ2UtPmRh dGEuZGRsbXNnLmNtZHR5cGUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vf c2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJZWxzZQorCQly Yi0+ZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJICAgY2hhbmdlLT5kYXRh LmRkbG1zZy5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsCisJCQkJ CSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRk bG1zZy5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7 Cit9CisKIC8qCiAgKiBGdW5jdGlvbiB0byBzdG9yZSB0aGUgY29tbWFuZCBpZCBhbmQgc25hcHNo b3QgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudAogICogc3RyZWFtIHNvIHRoYXQgd2UgY2FuIHJl dXNlIHRoZSBzYW1lIHdoaWxlIHNlbmRpbmcgdGhlIG5leHQgc3RyZWFtLgpAQCAtMjM0OCw2ICsy NDEwLDEwIEBAIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCVJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UocmIsIHR4 biwgY2hhbmdlLCBzdHJlYW1pbmcpOwogCQkJCQlicmVhazsKIAorCQkJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQkJCVJlb3JkZXJCdWZmZXJBcHBseURETE1lc3Nh Z2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOworCQkJCQlicmVhazsKKwogCQkJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUg aW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2FsbHkgKi8KIAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1 dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0YS5pbnZhbC5uaW52YWxpZGF0aW9ucywKQEAgLTM3 NzEsNiArMzgzNyw0MCBAQCBSZW9yZGVyQnVmZmVyU2VyaWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZm ZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cu bWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXpl OwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1F U1NBR0U6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9 IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJl Zml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVv ZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJ UmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIsIHN6KTsKKworCQkJCWRhdGEgPSAoKGNo YXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJ CQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVkIGFib3ZlICovCisJCQkJb25kaXNrID0g KFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5vdXRidWY7CisKKwkJCQkvKiB3cml0ZSB0 aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQlt ZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6 ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwg c2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KGRhdGEs ICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRhICs9 IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZp eCwKKwkJCQkJICAgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJ CQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHko ZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXpl KTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplOworCiAJCQkJ YnJlYWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoK QEAgLTQwODUsNiArNDE4NSwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVm ZmVyQ2hhbmdlICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2Vfc2l6ZSArCiAJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKTsKIAor CQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdF OgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxt c2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5k ZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKFNpemUpICsg c2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJF T1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00MzYwLDYgKzQ0NjksMzMgQEAg UmVvcmRlckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJ CWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJ CX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQlT aXplCQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZw cmVmaXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXpl KTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsIGRhdGEsIHNpemVvZihP aWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRh LmRkbG1zZy5jbWR0eXBlLCBkYXRhLCBzaXplb2YoaW50KSk7CisJCQkJZGF0YSArPSBzaXplb2Yo aW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxv YyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEu ZGRsbXNnLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJl Zml4X3NpemU7CisKKwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRh ICs9IHNpemVvZihTaXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlD b250ZXh0QWxsb2MocmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5t c2cubWVzc2FnZV9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBk YXRhLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSAr PSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCAyMDdhNTgwNWJhLi4yMWI4MmYzNDRmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTE1Niw2ICsxNTYsNyBA QAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgog I2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6 ZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgpAQCAtMTc5LDcgKzE4MCwxMCBA QAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJz ZS5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5o IgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAg LTI0NjQsNiArMjQ2OCwyMzAgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykK IAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQogCisvKiBSZW1vdmUgdGhlIGRhdGEgcG9wdWxh dGlvbiBmcm9tIHRoZSBjb21tYW5kICovCitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVf dGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKWNvbW1hbmQpOworCisJc3dpdGNo IChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JFQVRFX1RBQkxFX0FTOgorCQljYXNl IENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlDcmVhdGVUYWJsZUFzU3RtdCAqY2FzdG10 ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJaWYgKGNhc3RtdC0+ b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBz a2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3Rl bmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hl ciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7 CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJ CQlTZWxlY3RTdG10ICpzc3RtdCA9IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJ CQlpZiAoc3N0bXQtPmludG9DbGF1c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAq IEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGlu Y29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICog cHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+c2tp cERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFr OworCX0KK30KKworLyoKKyAqIEhhbmRsZSBDUkVBVEUgVEFCTEUgY29tbWFuZAorICoKKyAqIENh bGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUgZm9yIENSRUFURSBUQUJFTCBjb21tYW5kIHRvIHNl dCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJFTF9TVEFURV9SRUFEWSBzbyBETUwgY2hhbmdlcyBv biB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRob3V0CisgKiBoYXZpbmcgdG8g bWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3JpcHRpb24gLi4uIHJlZnJlc2ggcHVibGljYXRpb24i CisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfY3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQp Cit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCVJhbmdlVmFyCSAqcnYgPSBOVUxMOworCU9p ZAkJCXJlbGlkOworCU9pZAkJCXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJY2hhciAJCSAq c2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkJICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRU YWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCisJc3dpdGNoIChjb21t YW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JFQVRFX1RBQkxFOgorCQkJeworCQkJCUNyZWF0 ZVN0bXQgKmNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29tbWFuZC0+c3RtdDsKKwkJCQlydiA9IGNz dG10LT5yZWxhdGlvbjsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ fQorCisJaWYgKCFydikKKwkJcmV0dXJuOworCisJc2NoZW1hbmFtZSA9IHJ2LT5zY2hlbWFuYW1l OworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChzY2hlbWFuYW1lICE9IE5VTEwpCisJ CXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5hbWUsIGZhbHNlKTsKKwor CWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJcmVsaWQgPSBnZXRfcmVsbmFtZV9y ZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UKKwkJcmVsaWQgPSBSZWxuYW1lR2V0 UmVsaWQocmVsbmFtZSk7CisKKwlpZiAocmVsaWQgIT0gSW52YWxpZE9pZCkKKwl7CisJCUFkZFN1 YnNjcmlwdGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5vaWQsIHJlbGlkLAorCQkJCQkJCQlT VUJSRUxfU1RBVEVfUkVBRFksCisJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRyKTsKKwkJZXJlcG9y dChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgidGFibGUgXCIlc1wiIGFkZGVkIHRvIHN1 YnNjcmlwdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkgcmVsbmFtZSwgTXlTdWJzY3JpcHRpb24tPm5h bWUpKSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX2RkbChTdHJpbmdJbmZv IHMpCit7CisJWExvZ1JlY1B0ciBsc247CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwlj aGFyICptZXNzYWdlID0gTlVMTDsKKwljaGFyCSAgICpkZGxfY29tbWFuZDsKKwlTaXplCQlzejsK KwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0Q2VsbCAgICpwYXJzZXRyZWVfaXRlbTsK KwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlj b25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsK KworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRsbWVzc2FnZShzLCAmbHNuLCAmcHJlZml4 LCAmc3opOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbW1hbmQg Ki8KKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwlkZGxfY29tbWFuZCA9IGRkbF9kZXBh cnNlX2pzb25fdG9fc3RyaW5nKG1lc3NhZ2UpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IGRkbF9j b21tYW5kOworCisJLyogRGVzdE5vbmUgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gKi8KKwlyZWNl aXZlciA9IENyZWF0ZURlc3RSZWNlaXZlcihEZXN0Tm9uZSk7CisJcGFyc2V0cmVlX2xpc3QgPSBw Z19wYXJzZV9xdWVyeShkZGxfY29tbWFuZCk7CisKKwlmb3JlYWNoKHBhcnNldHJlZV9pdGVtLCBw YXJzZXRyZWVfbGlzdCkKKwl7CisJCUxpc3QJICAgKnBsYW50cmVlX2xpc3Q7CisJCUxpc3QJICAg KnF1ZXJ5dHJlZV9saXN0OworCQlSYXdTdG10CSAgICpjb21tYW5kID0gKFJhd1N0bXQgKikgbGZp cnN0KHBhcnNldHJlZV9pdGVtKTsKKwkJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCQlNZW1vcnlD b250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4dCA9IE5VTEw7CisJCVBvcnRhbAkJcG9ydGFsOwor CQlib29sCQkgc25hcHNob3Rfc2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNv bW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNp Z25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1h bmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICog U2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9u ZS4KKwkJICovCisJCWlmIChhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7 CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNu YXBzaG90X3NldCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3Ig ZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0 aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5n LgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENy ZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5n IHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpF Uyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9j b250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4 ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJ CQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmll cyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0 aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNo b3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0 YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBk b24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5 dGhpbmcKKwkJICogd2UgYXJlIHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0 IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUg dGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJ CQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAor CQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFy dCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQo cG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25hcHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBi YWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRh bCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJ IHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERy b3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkv KgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwp IGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgor CQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5 IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLwor CQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVi dWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0 aW9uX3N0ZXAoKTsKK30KKwogCiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBt ZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0yNTI5LDYgKzI3NTcsMTAgQEAgYXBwbHlfZGlzcGF0Y2go U3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlicmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01T R19ERExNRVNTQUdFOgorCQkJYXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJCWNh c2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1f c3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9w Z291dHB1dC5jCmluZGV4IDJlY2FhNWI5MDcuLjVlNWIxY2ExMmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpAQCAtNTMsNiArNTMsMTEgQEAgc3RhdGlj IHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJ CQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJ CQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJIFNpemUg c3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgcGdvdXRwdXRfZGRsbWVzc2Fn ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4g KnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4 LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9v cmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJICAgUmVw T3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVf dHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdf b3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5n ZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVu Y2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPmRkbG1lc3Nh Z2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5jb21taXRfY2IgPSBwZ291dHB1dF9j b21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVfY2IgPSBwZ291dHB1dF9iZWdpbl9wcmVw YXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1 dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ291dHB1dF9z dHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwog CWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9k ZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2FnZTsKIAljYi0+c3RyZWFtX3RydW5jYXRl X2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdv LXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVh bV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJLyog VGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wuICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9 IE9VVFBVVF9QTFVHSU5fQklOQVJZX09VVFBVVDsKKwlvcHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0 cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBp bml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8q IEluaXQgcHVibGljYXRpb24gc3RhdGUuICovCiAJCWRhdGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsK KwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJCXB1YmxpY2F0aW9uc192YWxpZCA9IGZh bHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhQVUJMSUNBVElPTk9JRCwKIAkJ CQkJCQkJCSAgcHVibGljYXRpb25faW52YWxpZGF0aW9uX2NiLApAQCAtMTM3Nyw5ICsxMzg2LDIy IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZSBhY3Rpb24gPSBjaGFuZ2Ut PmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3QgPSBOVUxMOwogCVR1cGxlVGFibGVT bG90ICpuZXdfc2xvdCA9IE5VTEw7CisJYm9vbAkJCXRhYmxlX3Jld3JpdGUgPSBmYWxzZTsKIAog CXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjdHgsIGZhbHNlKTsKIAorCS8qCisJICogRm9y IGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8gcmVwbGljYXRlIHRoZW0gaWYgdGhlIHJl d3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdyaXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQg dGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlIGFuZAorCSAqIGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0 ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUpCisJeworCQl0YWJs ZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVs YXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRhcmdldHJlbCA9IHJlbGF0aW9uOworCX0K KwogCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24ocmVsYXRpb24pKQogCQlyZXR1cm47CiAK QEAgLTE0MTMsNiArMTQzNSwxMyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQlBc3NlcnQoZmFsc2UpOwogCX0K IAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJsZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mg d2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBtZXNzYWdlLgorCSAqLworCWlmICh0YWJs ZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCXJldHVybjsKKwog CS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5nIGFuZCByZXNldHRpbmcgb3VyIG93biBj b250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNvbnRleHQpOwog CkBAIC0xNDQyLDggKzE0NzEsOCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQl9CiAKIAkJCS8qIENoZWNrIHJv dyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEws ICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkgJmFjdGlvbikpCisJCQlpZiAoIXRhYmxl X3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZu ZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJCWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ2 Myw4ICsxNDkyLDE5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1heWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hh bmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUo Y3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRh cmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1 bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhlIHJld3JpdGUgaW5zZXJ0cyB0byB1cGRh dGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAqIGNhbiByZXBsYXkgaXQuIFRoaXMgaXMg bmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5k IHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYgKHRhYmxlX3Jld3JpdGUp CisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAor CQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJcmVsZW50 cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+ b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCBy ZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogCQkJ YnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKQEAgLTE1OTQsNiAr MTYzNCw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3IgPSBOVUxMOwogCX0KIAorCWlmICh0YWJs ZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwogCS8qIENsZWFudXAgKi8K IAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlNZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+ Y29udGV4dCk7CkBAIC0xNjcxLDggKzE3MTQsOCBAQCBwZ291dHB1dF90cnVuY2F0ZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogc3RhdGljIHZv aWQKIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCi0JCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNh Y3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAotCQkJCSBjb25zdCBjaGFyICpt ZXNzYWdlKQorCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWws CisJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkK IHsKIAlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3Bs dWdpbl9wcml2YXRlOwogCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CkBAIC0xNzEyLDYgKzE3NTUsMTM3IEBAIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUo Y3R4LCB0cnVlKTsKIH0KIAorc3RhdGljIHZvaWQKK3Bnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCVhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1l c3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91 dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRw dXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVJlbGF0aW9uCXJlbGF0 aW9uID0gTlVMTDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwor CVJlbGF0aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsKKworCS8qCisJICogUmVtZW1iZXIgdGhlIHhp ZCBmb3IgdGhlIG1lc3NhZ2UgaW4gc3RyZWFtaW5nIG1vZGUuIFNlZQorCSAqIHBnb3V0cHV0X2No YW5nZS4KKwkgKi8KKwlpZiAoaW5fc3RyZWFtaW5nKQorCQl4aWQgPSB0eG4tPnhpZDsKKworCXN3 aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2UgRENUX1RhYmxlRHJvcFN0YXJ0OgorCQkJLyoKKwkJ CSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQgdG8gYSBkZWxldGVkX3JlbGlkIGxpc3Qg aWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEgcHVibGljYXRpb24gdGhhdCBzdXBwb3J0 cyBkZGwgcHVibGljYXRpb24uIFdlCisJCQkgKiBuZWVkIHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVu ZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJCQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJv cCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZvciBhIHJlbGlkCisJCQkgKiB0aGF0IGlz IG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25seSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJ ICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24o cmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5 bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlpZiAocmVsZW50cnktPnB1YmFjdGlvbnMu cHViZGRsKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVs ZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQly ZXR1cm47CisJCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoKKwkJCWlmICghbGlzdF9tZW1iZXJfb2lk KGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCkpCisJCQkJcmV0dXJuOworCQkJZWxzZQorCQkJ CWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGlzdF9kZWxldGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVs aWRzLCByZWxpZCk7CisJCQlicmVhazsKKwkJY2FzZSBEQ1RfVGFibGVBbHRlcjoKKwkJCS8qCisJ CQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRk bCBtZXNzYWdlIHRvCisJCQkgKiBzdWJzY3JpYmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVwY29taW5n IHJld3JpdGUgSU5TRVJUIHRvIFVQREFURSBhbmQKKwkJCSAqIHNlbmQgdGhlbSB0byBzdWJzY3Jp YmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbiBwdWJsaXNoZXIgYW5kCisJCQkgKiBzdWJzY3Jp YmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdh eSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgorCQkJICogKDEpIFRoZSBkYXRhIGJlZm9y ZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAq IHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGlu IHN1YnNjcmliZXIKKwkJCSAqIHdoaWNoIGRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28g Z2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBsZXQKKwkJCSAqIHRoZSBzdWJzY3JpYmVyIGV4ZWN1 dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3JpdGUgYWxsIHRoZQorCQkJICogZGF0 YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJl d3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9uZworCQkJICogcHVibGlzaGVyIGFuZCBz dWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkCisJCQkg KiBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQ REFURXMgdG8ga2VlcAorCQkJICogdGhlIGRhdGEgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBU TyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJl ciBvbmx5CisJCQkgKiByZXdyaXRlIHRoZSBleHRyYSBkYXRhIGluc3RlYWQgb2YgZG9pbmcgZnVs bHkgcmV3cml0ZSBhbmQgdXNlIHRoZQorCQkJICogdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRv IHJld3JpdGUgdGhlIHJlc3QgZGF0YS4gQmVzaWRlcywgd2UgbWF5CisJCQkgKiBub3QgbmVlZCB0 byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3cml0ZSBkZGwsIGZvcgor CQkJICogZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFu Z2VzIGZvciBBTFRFUgorCQkJICogVEFCTEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUg dGFibGUgZG9lc24ndCBhY3R1YWxseSBiZQorCQkJICogY2hhbmdlZC4KKwkJCSAqLworCQkJcmVs YXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCQkJQXNzZXJ0KHJlbGF0aW9u KTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOwor CisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2gg ZGRsIG1lc3NhZ2Ugb3IgdGhlIGRkbAorCQkJICogbmVlZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0 cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkICE9IHJlbGlkKQorCQkJewor CQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJl YWs7CisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJl bGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9uID09IE5VTEwpCisJCQkJYnJlYWs7CisK KwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJ aWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQl7CisJCQkJUmVsYXRpb25DbG9z ZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1Rf T2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUgJWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFr OworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0 YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJCXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4 LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNh bHJlcF93cml0ZV9kZGxtZXNzYWdlKGN0eC0+b3V0LAorCQkJCQkJCQl4aWQsCisJCQkJCQkJCW1l c3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJCQkJCXN6LAorCQkJCQkJCQltZXNzYWdl KTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOworCisJaWYgKHJlbGF0aW9uKQorCQlS ZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBk YXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4gYW5kIHRoZSB1c2VyIGhhcwogICogcmVx dWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBvcmlnaW4sIGZhbHNlIG90aGVy d2lzZS4KQEAgLTE5OTMsNyArMjE2Nyw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERh dGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxz ZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOwor CQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1 bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAJCWVudHJ5LT5u ZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1lbXNldChlbnRy eS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwpAQCAtMjA1MSw2ICsy MjI2LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24g cmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVi dHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsID0gZmFsc2U7CiAK IAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xlYW51cHMuIChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIg aWYgbmVlZGVkKS4KQEAgLTIxNjQsNiArMjM0MCw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091 dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJCWVudHJ5LT5wdWJhY3Rpb25z LnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlOwogCQkJCWVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVudHJ5 LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsK KwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRkbDsK IAogCQkJCS8qCiAJCQkJICogV2Ugd2FudCB0byBwdWJsaXNoIHRoZSBjaGFuZ2VzIGFzIHRoZSB0 b3AtbW9zdCBhbmNlc3RvcgpAQCAtMjM0OSw2ICsyNTI2LDcgQEAgcmVsX3N5bmNfY2FjaGVfcHVi bGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVpZCwgdWludDMyIGhhc2h2YWx1ZSkKIAl7 CiAJCWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxzZTsKIAl9CisKIH0KIAogLyogU2VuZCBS ZXBsaWNhdGlvbiBvcmlnaW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4IDAw ZGMwZjI0MDMuLmYxYjRkMDkzY2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAt NTY4Myw2ICs1NjgzLDcgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiBy ZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlwdWJkZXNjLT5wdWJhY3Rpb25z LnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMu cHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5w dWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9u cy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRsOwogCiAJCS8qCiAJCSAqIENoZWNrIGlmIGFsbCBj b2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwppbmRleCBiZDliMDY2ZTRlLi45N2Y0MzRhN2U4IDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTM4OTcs NiArMzg5Nyw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1Ymxp Y2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRlbGV0ZTsKIAlpbnQJ CQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRsOwogCWludAkJCWlfcHVidmlhcm9vdDsK IAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzkxMiwyMyArMzkxMywyMyBAQCBnZXRQdWJsaWNh dGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJcmVzZXRQUUV4cEJ1 ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1YmxpY2F0aW9ucy4gKi8KLQlpZiAoZm91dC0+ cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUw MDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRh Ymxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJ CQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0 ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBw LnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIp OwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5w dWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwg ZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNl cnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5w dWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlv biBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNF TEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVy LCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBw LnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgor CQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJk ZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMg cHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAogCXJlcyA9 IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0YSwgUEdSRVNfVFVQTEVTX09LKTsKQEAg LTM5NDQsNiArMzk0NSw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51 bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ1cGRhdGUi KTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJkZWxldGUiKTsKIAlpX3B1YnRy dW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5jYXRlIik7CisJaV9wdWJkZGwgPSBQUWZu dW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFyb290ID0gUFFmbnVtYmVyKHJlcywgInB1 YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMgKiBzaXplb2YoUHVibGlj YXRpb25JbmZvKSk7CkBAIC0zOTY3LDYgKzM5NjksOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2 ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVz LCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidHJ1bmNhdGUg PQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ0cnVuY2F0ZSksICJ0IikgPT0g MCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGks IGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAg LTQwNDYsNiArNDA1MCwxNSBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3Qg UHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAorCWlmIChw dWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiZGRsIik7 CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKHF1ZXJ5LCAn XCcnKTsKIAogCWlmIChwdWJpbmZvLT5wdWJ2aWFyb290KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggNDI3ZjVk NDVmNi4uNjg1NjgzZWViMCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBAIC02MjAsNiArNjIwLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0 cnVuY2F0ZTsKIAlib29sCQlwdWJ2aWFyb290OworCWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRp b25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMg Yi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwppbmRleCA2YjhjMTdiYjRjLi43OTJmNDM4 OTU5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYworKysgYi9zcmMv YmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNv bW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCiAjaW5jbHVkZSAicm1n cmRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5kYnlkZWZzLmgiCmRpZmYgLS1naXQgYS9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGM2 NDVkNjY0MTguLjJlOTRmY2E3NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j CisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02MTU5LDcgKzYxNTksNyBAQCBsaXN0 UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsK IAlQR3Jlc3VsdCAgICpyZXM7CiAJcHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9wdDsKLQlz dGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisJc3RhdGljIGNvbnN0IGJv b2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChwc2V0LnN2ZXJzaW9uIDwg MTAwMDAwKQogCXsKQEAgLTYxOTQsNiArNjE5NCwxMCBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0 IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICIsXG4g IHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIp KTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDApCisJCWFwcGVuZFBRRXhwQnVmZmVyKCZi dWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbCBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0ZXh0X25v b3AoIkRETHMiKSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZS T00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CkBAIC02Mjg0LDYgKzYyODgsNyBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBHcmVzdWx0ICAgKnJl czsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1YnZpYXJvb3Q7CisJYm9v bAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsKIAlwcmludFRhYmxlQ29u dGVudCBjb250OwpAQCAtNjMwMCw2ICs2MzA1LDcgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29u c3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVuY2F0ZSA9IChwc2V0LnN2ZXJzaW9uID49 IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNldC5zdmVyc2lvbiA+PSAxMzAwMDApOwor CWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKTsKIAogCWluaXRQUUV4cEJ1 ZmZlcigmYnVmKTsKIApAQCAtNjMxMyw2ICs2MzE5LDkgQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJICIsIHB1YnZpYXJvb3QiKTsKKwlpZiAoaGFzX3B1YmRk bCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgIiwgcHViZGRsIik7CiAJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9NIHBnX2NhdGFsb2cucGdf cHVibGljYXRpb25cbiIpOwogCkBAIC02MzY0LDYgKzYzNzMsOCBAQCBkZXNjcmliZVB1YmxpY2F0 aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJbmNvbHMrKzsKIAkJaWYgKGhhc19wdWJ2aWFy b290KQogCQkJbmNvbHMrKzsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQluY29scysrOwogCiAJCWlu aXRQUUV4cEJ1ZmZlcigmdGl0bGUpOwogCQlwcmludGZQUUV4cEJ1ZmZlcigmdGl0bGUsIF8oIlB1 YmxpY2F0aW9uICVzIiksIHB1Ym5hbWUpOwpAQCAtNjM3OCw2ICs2Mzg5LDggQEAgZGVzY3JpYmVQ dWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRIZWFkZXIo JmNvbnQsIGdldHRleHRfbm9vcCgiVHJ1bmNhdGVzIiksIHRydWUsIGFsaWduKTsKIAkJaWYgKGhh c19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29w KCJWaWEgcm9vdCIpLCB0cnVlLCBhbGlnbik7CisJCWlmIChoYXNfcHViZGRsKQorCQkJcHJpbnRU YWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJERExzIiksIHRydWUsIGFsaWduKTsK IAogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDIpLCBmYWxz ZSwgZmFsc2UpOwogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGks IDMpLCBmYWxzZSwgZmFsc2UpOwpAQCAtNjM4OCw2ICs2NDAxLDggQEAgZGVzY3JpYmVQdWJsaWNh dGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQ UWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxzZSk7CiAJCWlmIChoYXNfcHVidmlhcm9v dCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOCksIGZh bHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNv bnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2UsIGZhbHNlKTsKIAogCQlpZiAoIXB1YmFs bHRhYmxlcykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0Lmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCAwMDBiY2JmZGFmLi4zN2RmZDQ1 MWY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NP TU1JVF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBj b21taXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4i LCByZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMi LCBnZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVM TCwgZ2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNh bE1lc3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19p ZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJN X0xPR0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVk bywgbG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxM LCBOVUxMLCBsb2dpY2FsZGRsbXNnX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4 IDJjODcxMDZlZWYuLmNlMWIxN2Y1YWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4 MjksNCArMTE4MjksMTMgQEAKIHsgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBqc29u IGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5 cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwK K3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFy c2UnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcs IHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJv c3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcgfSwKK3sgb2lkID0+ ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ugc3RhcnQn LAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0Jywg cHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9z cmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnIH0sCit7IG9pZCA9 PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxl IHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3Jp dGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAogXQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IGVjZjVhMjhlMDAuLmRhZmQ0ODM3NmEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTU0LDYgKzU0LDkgQEAgQ0FU QUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1YmxpY2F0aW9uUmVsYXRpb25JZCkKIAogCS8qIHRy dWUgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJlIHB1Ymxpc2hlZCB1c2luZyByb290IHNjaGVtYSAq LwogCWJvb2wJCXB1YnZpYXJvb3Q7CisKKwkvKiB0cnVlIGlmIHRhYmxlIGNyZWF0aW9ucyBhcmUg cHVibGlzaGVkICovCisJYm9vbAkJcHViZGRsOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsK IAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiArNzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQ dWJsaWNhdGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwog CWJvb2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25BY3Rpb25z OwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuaAppbmRleCAxMDA5MWMzYWFmLi5mZDJlZTdmZmU0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3MSw4IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJp Z2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJu IHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7CiBleHRlcm4g dm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsCi0J CQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJCQkJCQkJT2JqZWN0QWRk cmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dl ckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYThkY2E4 NjNiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2Uu aAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisg KgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisjZGVm aW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIK KyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRl ci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGtl ZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBEZXBh cnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQs CisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRl LAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBHZW5l cmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCQkJCWRiSWQ7CQkJLyog ZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCQkJCXByZWZpeF9zaXplOwkvKiBs ZW5ndGggb2YgcHJlZml4ICovCisJT2lkCQkJCQkJcmVsaWQ7CQkJLyogaWQgb2YgdGhlIHRhYmxl ICovCisJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlwZTsJCS8qIHR5cGUgb2Ygc3FsIGNvbW1h bmQgKi8KKwlTaXplCQkJCQltZXNzYWdlX3NpemU7CSAgLyogc2l6ZSBvZiB0aGUgbWVzc2FnZSAq LworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10ZXJtaW5hdGVkIHByZWZpeCBv ZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNzYWdlW0ZMRVhJQkxFX0FSUkFZ X01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisKKyNkZWZpbmUgU2l6ZU9mTG9n aWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UsIG1lc3NhZ2Up KQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpw cmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJ ICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXplKTsKKworLyogUk1HUiBBUEkq LworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgwMAordm9pZAkJbG9naWNhbGRk bG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3ZvaWQJCWxvZ2ljYWxkZGxtc2df ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOworY29uc3QgY2hh ciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RlY29kZS5oCmluZGV4IDc0MWJmNjVjZjcuLjQyN2E3Yjk5N2QgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lkIGhlYXAyX2RlY29k ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBl eHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29kZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBs b2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIGV4dGVybiB2b2lk IExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IDdlYWE0Yzk3ZWQuLjVkNjE3NDg0ZmIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC02MSw2ICs2MSw3IEBAIHR5cGVkZWYg ZW51bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxfUkVQX01TR19SRUxBVElPTiA9ICdSJywK IAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRSA9 ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRSA9ICdMJywKIAlMT0dJQ0FMX1JFUF9N U0dfQkVHSU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRSA9ICdQJywK IAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVEID0gJ0snLApAQCAtMjI5LDcgKzIzMCwx MSBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3RydW5jYXRlKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNh dGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9vbCAqcmVzdGFy dF9zZXFzKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZv IG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAotCQkJCQkJCQkJIGJvb2wg dHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKKwkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZp eCwKKwkJCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6 ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gY2hhciAqbG9naWNhbHJlcF9yZWFk X2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLCBjb25zdCBjaGFyICoq cHJlZml4LCBTaXplICpzeik7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJp bmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJp dG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVw X3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3Bs dWdpbi5oCmluZGV4IGI3ZDI4ZDcwNDUuLjc2M2U0M2Y2YmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTkwLDYgKzkwLDE4IEBAIHR5cGVkZWYgdm9pZCAoKkxv Z2ljYWxEZWNvZGVNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAogCQkJCQkJCQkJCVNpemUgbWVzc2FnZV9zaXplLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogCisvKgorICogQ2FsbGVkIGZvciB0aGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVz c2FnZXMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IpIChz dHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCSAgIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJ CQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJ CQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNp emUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAv KgogICogRmlsdGVyIGNoYW5nZXMgYnkgb3JpZ2luLgogICovCkBAIC0yMDEsNiArMjEzLDE5IEBA IHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUs CiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsYmFjayBm b3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzIGZyb20gaW4tcHJvZ3Jl c3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0 cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJ CQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJ CQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJCQkgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIHRydW5jYXRl cyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KICAqLwpAQCAtMjIxLDYgKzI0Niw3IEBA IHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVu Y2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNvZGVDb21taXRDQiBjb21taXRfY2I7CiAJ TG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVERExNZXNz YWdlQ0IgZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVjb2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0 ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVTaHV0ZG93bkNCIHNodXRkb3duX2NiOwog CkBAIC0yMzksNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tz CiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXRfY2I7CiAJTG9naWNh bERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2VfY2I7CiAJTG9naWNhbERlY29kZVN0 cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlMb2dpY2FsRGVjb2RlU3RyZWFtRERM TWVzc2FnZUNCIHN0cmVhbV9kZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVu Y2F0ZUNCIHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0cHV0UGx1Z2luQ2FsbGJhY2tzOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAwMjAyNzU1MGUyLi44M2UwYjFlMmU1IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAgLTI1LDYgKzI1LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUEdPdXRwdXREYXRhCiAJdWludDMyCQlwcm90b2NvbF92ZXJzaW9uOwogCUxpc3QJICAg KnB1YmxpY2F0aW9uX25hbWVzOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uczsKKwlMaXN0CSAgICpk ZWxldGVkX3JlbGlkczsKIAlib29sCQliaW5hcnk7CiAJYm9vbAkJc3RyZWFtaW5nOwogCWJvb2wJ CW1lc3NhZ2VzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1 ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IDAy YjU5YTE5MzEuLjBiMWE5MTYxYzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVm ZmVyLmgKQEAgLTExLDYgKzExLDggQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMu aCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgorI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NpbnZh bC5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNo ZS5oIgpAQCAtNTYsNiArNTgsNyBAQCB0eXBlZGVmIGVudW0gUmVvcmRlckJ1ZmZlckNoYW5nZVR5 cGUKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5TRVJULAogCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9VUERBVEUsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RFTEVURSwKKwlSRU9SREVSX0JVRkZF Ul9DSEFOR0VfRERMTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzMCw2ICsxMzMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAor CQkvKiBEREwgTWVzc2FnZS4gKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsK KwkJCVNpemUJCW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQly ZWxpZDsKKwkJCURlcGFyc2VkQ29tbWFuZFR5cGUJY21kdHlwZTsKKwkJfQkJCWRkbG1zZzsKKwog CQkvKiBOZXcgc25hcHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9U ICovCiAJCVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC00MzUsNiArNDQ4LDE2IEBAIHR5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJ CQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAq bWVzc2FnZSk7CiAKKy8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRl ZiB2b2lkICgqUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAor CQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVj UHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVz c2FnZSk7CisKIC8qIGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVm IHZvaWQgKCpSZW9yZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwK IAkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01MDEsNiArNTI0LDE3IEBA IHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJ CQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hh ciAqbWVzc2FnZSk7CiAKKy8qIHN0cmVhbSBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUg Ki8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0IpICgKKwkJ CQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJ CQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJ CQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIHN6 LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBzdHJlYW0gdHJ1bmNh dGUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3Ry ZWFtVHJ1bmNhdGVDQikgKAogCQkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyICpyYiwKQEAgLTU1 Miw2ICs1ODYsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJBcHBseVRy dW5jYXRlQ0IgYXBwbHlfdHJ1bmNhdGU7CiAJUmVvcmRlckJ1ZmZlckNvbW1pdENCIGNvbW1pdDsK IAlSZW9yZGVyQnVmZmVyTWVzc2FnZUNCIG1lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlckRETE1lc3Nh Z2VDQiBkZGxtZXNzYWdlOwogCiAJLyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4g c3RyZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNTcxLDYgKzYwNiw3 IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0 cmVhbV9jb21taXQ7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7 CiAJUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVy QnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxtZXNzYWdlOwogCVJlb3JkZXJCdWZm ZXJTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZTsKIAogCS8qCkBAIC02NTAsNiArNjg2 LDkgQEAgZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgIFNuYXBzaG90IHNuYXAsIFhMb2dS ZWNQdHIgbHNuLAogCQkJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnBy ZWZpeCwKIAkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVy ICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCSAgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1l c3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2 b2lkIFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sIFhMb2dSZWNQdHIgZW5kX2xzbiwK IAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUsIFJlcE9yaWdpbklkIG9yaWdpbl9pZCwg WExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4 IGE3ZjU3MDBlZGMuLmJmYzczYzIzMjggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dApA QCAtNTk3MCw5ICs1OTcwLDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCByb3dzKQogCiBcZFJwICJu by5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0rLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNh dGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCiBcZFJzICJuby5zdWNoLnN1YnNjcmlwdGlvbiIKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNDI3Zjg3ZWEwNy4u MmI3Y2QwZDU5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNh dGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQK QEAgLTMwLDIwICszMCwyMCBAQCBFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRp b25zCiBMSU5FIDE6IC4uLnViX3h4eCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9 ICd0cnVlJywgcHVibGlzaF92aS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFxkUnAKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBO YW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBp Yl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1 bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAg ICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9k ZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJs aWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRp bmcgdGFibGVzCkBAIC04NywxMCArODcsMTAgQEAgUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsK IC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRp b24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAg LTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUg dG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBc ZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJs aWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdG T1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxl CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBA IC0xMjMsMTAgKzEyMywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEg Rk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3JfdGJsX3NjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdCwgVEFCTEUgcHVi X3Rlc3QudGVzdHB1Yl9ub3BrOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRl c3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xMzUsMTAg KzEzNSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRk IGEgdGFibGUgb2YgdGhlIHNhbWUgc2NoZW1hIHRvIHRoZSBzY2hlbWEgcHVibGljYXRpb24KIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIEFERCBUQUJMRSBwdWJfdGVzdC50ZXN0 cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBA IC0xNDcsMTAgKzE0NywxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFi bGUgdG8gZHJvcCB0aGUgdGFibGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1h IERST1AgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qi CiAKQEAgLTE2MSwxMCArMTYxLDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3RwdWJfbm9wayIg aXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQg dGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9m b3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHVi X25vcGsiCiAKQEAgLTE4NiwxMCArMTg2LDEwIEBAIFB1YmxpY2F0aW9uczoKICAgICAidGVzdHB1 Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAg ICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkg KzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJf dGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0ZXN0cHVi X3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1 Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl90YmwzIgogCkBAIC0yMzQsMTAgKzIzNCwxMCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0 ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3RlZCBhcyBiZWluZyBpbiBwdWJs aWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y cGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnArIHRlc3RwdWJfZm9ycGFydGVk Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3Jw YXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFy dGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgog CkBAIC0yNTIsMTAgKzI1MiwxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0cHViX3BhcnRlZCBERVRBQ0gg UEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEg PSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4 NCwxMCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHVi X3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdp bnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50 ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpA QCAtMzAwLDEwICszMDAsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDAp OwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9y Zl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3Qn Ojp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMxOSwxMCArMzE5LDEwIEBAIFB1YmxpY2F0aW9uczoK IAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFO RCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICszMzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRl c3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVS RSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3Rw dWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+ IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzY2LDEwICszNjYsMTAgQEAgU0VUIGNsaWVudF9t aW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4 MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAo ZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAg ICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIg V0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBU QUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUg V0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInRlc3RwdWJfcmZfc2NoZW1h MS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAtNDk3LDEwICs0OTcsMTAgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJf cmZfc2NoZW1hMjsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRVMgSU4gU0NI RU1BIHRlc3RwdWJfcmZfc2NoZW1hMiwgVEFCTEUgdGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJf cmZfdGJsNiBXSEVSRSAoaSA8IDk5KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJw KyB0ZXN0cHViNgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjYKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0 cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0 LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEgg KHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHVi X3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTg5MSwxMCAr ODkxLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBi IGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJs X2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2Jv dGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMg QUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsK IFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+ IDEpCiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90 YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwog RVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJw KyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRl c3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNDAsMTAgKzExNDAs MTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVzdHB1 Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJf bm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAg UkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQog CiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTIzNCwyMCArMTIz NCwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9kZWZh dWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFN RSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUgICAg IHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRv IGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5B TUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0 IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVs dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBw dWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2NoZW1h cyBhbmQgdGFibGVzCkBAIC0xMjYzLDE5ICsxMjYzLDE5IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVO VF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21lc3Nh Z2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9S IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAK IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIy X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjg5LDQ0ICsxMjg5LDQ0IEBAIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRf U0NIRU1BIiwgQ1VSCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFC TEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNF9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRf U0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAK IFxkUnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAiQ1VSUkVOVF9TQ0hF TUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAgKzEzNjAsMTAgQEAgRVJST1I6ICBzY2hl bWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEg c2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogRFJPUCBTQ0hFTUEgcHVi X3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEz NzEsMjAgKzEzNzEsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBz Y2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogQUxURVIgU0NI RU1BIHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVzdDIiCiAKIEFMVEVSIFNDSEVNQSBwdWJf dGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjJfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20g c2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQwNCwxMCArMTQw NCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJP UjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDE2LDEwICsxNDE2LDEwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogRVJST1I6ICBzY2hlbWEgInB1Yl90 ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRlc3RwdWIxX2ZvcnNjaGVt YSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEw ICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBk cm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAt MTQzOCwxMCArMTQzOCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBF UlJPUjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhl IHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQ0OSwyOSArMTQ0 OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJS T1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0g YWx0ZXIgcHVibGljYXRpb24gc2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rl c3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0ODAs MTAgKzE0ODAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRfc2NoZW1h OwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMgbm90IGV4aXN0CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5 MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBz Y2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIK IApAQCAtMTU3NCwxOCArMTU3NCwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJP Uic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogKDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKQEAg LTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1h X2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRi bDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRibDEiCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgotLSAKMi4zMi4wCgo= --00000000000088741505ea6ac90f Content-Type: text/x-patch; charset="US-ASCII"; name="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v25-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8y0yww71 RnJvbSBmMTRkYmIyNjUzMmExZjc1MjYzZDJmOGU1Zjg2YjJhNDg2ODdmMjQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBTZXAgMjAyMiAxMjowNToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjI1 IDMvNF0gU3VwcG9ydCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8KClRoZSBtYWluIGlkZWEg b2YgcmVwbGljYXRpbmcgdGhlIENSRUFURSBUQUJMRSBBUyBpcyB0aGF0IHdlIGRlcHJhc2UgdGhl IENSRUFURQpUQUJMRSBBUyBpbnRvIGEgc2ltcGxlIENSRUFURSBUQUJMRSh3aXRob3V0IHN1YnF1 ZXJ5KSBjb21tYW5kIGFuZCBXQUwgbG9nIGl0CmFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQg YmVmb3JlIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSB0YWJsZSBhbmQgcmVwbGljYXRlCnRoZSBpbmNv bWluZyB3cml0ZXMgbGF0ZXIgYXMgbm9ybWFsIElOU0VSVHMuIEluIHRoaXMgYXBwb3JhY2gsIHdl IGRvbid0IGV4ZWN1dGUKdGhlIHN1YnF1ZXJ5IG9uIHN1YnNjcmliZXIgc28gdGhhdCBkb24ndCBu ZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG9iamVjdHMKcmVmZXJlbmNlZCBpbiB0aGUgc3VicXVl cnkgYWxzbyBleGlzdHMgaW4gc3Vic2NyaWJlci4gQW5kIFRoaXMgYXBwcm9hY2ggd29ya3MKZm9y IGFsbCBraW5kIG9mIGNvbW1hbmRzKGUuZy4gQ1JBRVRFIFRBQkxFIEFTIFtTRUxFQ1RdW0VYRUNV VEVdW1ZBTFVFU10pCgpJbnRyb2R1Y2luZyBhIG5ldyB0eXBlIG9mIGV2ZW50IHRyaWdnZXIgInRh YmxlX2luaXRfd3JpdGUiLiB3aGljaCB3b3VsZCBiZSBmaXJlZApmb3IgQ1JFQVRFIFRBQkxFIEFT L1NFTEVDVCBJTlRPIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQKYmVmb3JlIGFueSBvdGhl ciBtb2RpZmljYXRpb24uIHdlIGRlcGFyc2UgdGhlIGNvbW1hbmQgaW4gdGhlIHRhYmxlX2luaXRf d3JpdGUgZXZlbnQKdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcu IFRoZSB3YWxzZW5kZXIgd2lsbCBzZW5kIHRoZQpzdHJpbmcgdG8gc3Vic2NyaWJlci4gQW5kIGlu Y29taW5nIElOU0VSVHMgd2lsbCBhbHNvIGJlIHJlcGxpY2F0ZWQuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgICAgIHwgIDIzICsrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYyAgIHwgMTcyICsrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgICA5ICsrCiBzcmMvYmFja2VuZC90Y29wL3V0 aWxpdHkuYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICB8ICAgMyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICB8ICAgNCAr CiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgICB8ICAgOSArLQogc3JjL2lu Y2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgfCAgIDMgKy0KIDEwIGZpbGVzIGNoYW5n ZWQsIDIzMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVh cy5jCmluZGV4IDE1MmMyOWI1NTEuLjBkODBjNmM5NzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgi CisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1hbmRz L21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFzX2ludGVy bmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdRdWVyeShp bnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0cmlnZ2Vy IGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbworCQkgKiB0 aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkgY3JlYXRl ZCB0YWJsZSBpbgorCQkgKiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRkcik7CisJ fQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYwppbmRleCAwZDQzZTk4N2QyLi4yMjE5ZTJlNGRlIDEwMDc1NQotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKQEAgLTc3NjQsNiArNzc2NCwyNiBAQCBkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCiAJcmV0dXJuIGNyZWF0ZVRyYW5zZm9y bTsKIH0KIAorLyoKKyAqIERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgorICog ZGVwYXJzZV9DcmVhdGVTdG10IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRoZSBm aW5hbCBDcmVhdGVTdG10IGZvcgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29tbWFu ZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFz c2VydChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0gY21k LT5kLmN0YXMucmVhbF9jcmVhdGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzLm9i amVjdElkOworCisJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKK30KKwogCiAvKgogICogSGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCkBA IC04MDQ2LDYgKzgwNjYsOSBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21t YW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQogCQljYXNlIFNDVF9HcmFudDoKIAkJCXRyZWUg PSBkZXBhcnNlX0dyYW50U3RtdChjbWQpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRh YmxlQXM6CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJl YWs7CiAJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9w RmFtaWx5KGNtZCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpp bmRleCA3YzhjMWY1Mzk0Li4yNTU1OGFhMWM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jCkBAIC0xMzMsNyArMTMzLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50 VHJpZ1N0bXQgKnN0bXQpCiAJaWYgKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFu ZF9zdGFydCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5k X2VuZCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0g MCAmJgotCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJ CXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQo RVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBldmVudCBuYW1lIFwiJXNcIiIsCkBAIC0xNTksNyArMTYwLDggQEAgQ3Jl YXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUg dGFnIGxpc3QsIGlmIGFueS4gKi8KIAlpZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9zdGFydCIpID09IDAgfHwKIAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9lbmQiKSA9PSAwIHx8Ci0JCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ry b3AiKSA9PSAwKQorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8 fAorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQog CQkmJiB0YWdzICE9IE5VTEwpCiAJCXZhbGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAll bHNlIGlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAg LTU4NSw3ICs1ODcsOCBAQCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUs CiAJCWRiZ3RhZyA9IENyZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09 IEVWVF9ERExDb21tYW5kU3RhcnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8 Ci0JCQlldmVudCA9PSBFVlRfU1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJ CQlldmVudCA9PSBFVlRfVGFibGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdf ZXZlbnRfdHJpZ2dlcl9vayhkYmd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNv bW1hbmQgdGFnIFwiJXNcIiIsIEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODY4LDYg Kzg3MSwxNjMgQEAgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lk IHRhYmxlT2lkLCBpbnQgcmVhc29uKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAK KworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJl IHRvIHJlY2VpdmUgZGF0YSBvbiBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5k IGFib3V0CisgKiAgICAgdG8gYmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y3h0OworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQg dHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29t bWFuZCA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+dHlw ZSA9IFNDVF9DcmVhdGVUYWJsZUFzOworCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5n X2V4dGVuc2lvbjsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRy ZXNzOworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFy c2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQK KyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21t YW5kLgorICoKKyAqIEZJWE1FIHRoaXMgQVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJp bGl0eSB0aGF0IGFuIHhhY3Qvc3VieGFjdCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2gu ICBQcm9iYWJseSBpdCdzIGJlc3QgdG8gYWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdn ZXJzKCkgdG8gZml4IHRoaXMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRl RW5kKHZvaWQpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJcGFyZW50 ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJ cGZyZWUoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kID0gcGFyZW50OworfQorCisvKgor ICogcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0 aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJs aWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlj aGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hhciAgIAkJ CSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZv KSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsK KworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNz ZXJ0KGNtZCk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQpOworCisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxv ZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFi bGUuCisJICoKKwkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJs ZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJsZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBh bHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJs ZSB0byBkaXJlY3RseSByZXBsYXkgdGhlIFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29t aW5nCisJICogcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJ ICovCisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBv aW50ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBX QUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5n ID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJp bmcgIT0gTlVMTCkKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2lt cGxlLmFkZHJlc3Mub2JqZWN0SWQsIERDVF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5n LCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5V TEwpOworfQorCisvKgorICogRmlyZSB0YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8K K3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmpl Y3RBZGRyZXNzIGFkZHJlc3MpCit7CisJTGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJE YXRhIHRyaWdkYXRhOworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNl ZSBFdmVudFRyaWdnZXJERExDb21tYW5kU3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkg ZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUgZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkg Ki8KKwlpZiAoIUlzVW5kZXJQb3N0bWFzdGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28g ZG8gbm90aGluZyBpZiBvdXIgc3RhdGUgaXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBp ZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBz dGFydCBvZiB0aGUgY3VycmVudCBEREwKKwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRo ZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBidXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNl IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwIG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRp ZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICgh Y3VycmVudEV2ZW50VHJpZ2dlclN0YXRlKQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlm IG5vIGNvbW1hbmQgd2FzIGNvbGxlY3RlZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y3VycmVudENvbW1hbmQpCisJCXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dl ckNvbW1vblNldHVwKGNvbW1hbmQtPnBhcnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5p dFdyaXRlLAorCQkJCQkJCQkJICAidGFibGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmln ZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJl YWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQgYW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVhbF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJl c3MgPSBhZGRyZXNzOworCisJLyogUnVuIHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJ bnZva2UocnVubGlzdCwgJnRyaWdkYXRhKTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVl KHJ1bmxpc3QpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdn ZXJzIGRpZCB3aWxsIGJlIHZpc2libGUgdG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLwor CUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVu dCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBldmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OSw3ICsx MzA5LDggQEAgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAo RXZlbnRDYWNoZUxvb2t1cChFVlRfU1FMRHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxv b2t1cChFVlRfVGFibGVSZXdyaXRlKSAhPSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVW VF9ERExDb21tYW5kRW5kKSAhPSBOSUwpOworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29t bWFuZEVuZCkgIT0gTklMKSB8fAorCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3Jp dGUpICE9IE5JTCk7CiB9CiAKIC8qCkBAIC0xODY4LDYgKzIwMjksNyBAQCBwZ19ldmVudF90cmln Z2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZh bWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29u ZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlk ZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg4NSw2ICsyMDQ3LDggQEAgcGdfZXZl bnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBj bWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJ CWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBj bWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMg ZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21tYW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKaW5kZXggNWE1Yjk3OWIwMy4uYjYwMDU1MGJlMSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTk5OCw2ICs5OTgsMTEgQEAgQ3JlYXRl UHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0 bXQpCiAJCQlDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVwogCQl9OwogCisJCUNvbW1h bmRUYWcJaW5pdF9jb21tYW5kc1tdID0geworCQkJQ01EVEFHX0NSRUFURV9UQUJMRV9BUywKKwkJ CUNNRFRBR19TRUxFQ1RfSU5UTworCQl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRf ZW5kIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRs X2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21t YW5kcyksIG15c2VsZiwgcHVib2lkKTsKQEAgLTEwMDksNiArMTAxNCwxMCBAQCBDcmVhdGVQdWJs aWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkK IAkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRl RERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMs CiAJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsK KworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlD cmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21t YW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQp OwogCX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5j CmluZGV4IDI0N2QwODE2YWQuLmM2MzQ5MmI0OWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rj b3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY1LDgg KzE2NjUsMTAgQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQli cmVhazsKIAogCQkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlU3RhcnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRh YmxlQXMocHN0YXRlLCAoQ3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJ CQlwYXJhbXMsIHF1ZXJ5RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVF bmQoKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9ldnRjYWNoZS5jCmluZGV4IGY3ZjcxNjVmN2YuLjdmYjhjYjI5MWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRU cmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0 cmNtcChldnRldmVudCwgInRhYmxlX3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFi bGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRl IikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250 aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggY2UxYjE3ZjVhYi4uODFmYmZkNGFh YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTgzOCw0ICsxMTgzOCw3IEBACiB7IG9p ZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRh YmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jl d3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMgPT4g JycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAoreyBv aWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0 YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0 X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScgfSwK IF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCBmZDJlZTdmZmU0Li5hOWUw ZjcxZjZhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC01NSw2ICs1NSwx MCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5kKE5vZGUgKnBhcnNldHJl ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUgKnBhcnNldHJlZSk7CiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQg dGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7Citl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJu IGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJv cHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2Rl cGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRl eCBiNTMyOTRiZjU3Li4zZDI5NGEwMzcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2Rl cGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgK QEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NU X0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0 ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1Rf Q3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTEwMSw2ICsx MDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPYmplY3RU eXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJeworCQkJT2JqZWN0 QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJfQkJCWN0YXM7CiAJ fQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OwkvKiB3aGVuIG5lc3Rl ZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNjhmYS4uMWU2NDgzMTdhZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExDb21t YW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1RhYmxl UmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2ZW50 VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAKMi4zMi4wCgo= --00000000000088741505ea6ac90f Content-Type: text/x-patch; charset="US-ASCII"; name="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v25-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8y0ywwa3 RnJvbSBjOTg2YTA0ZTljYWEzNGNiYmNjYTQxYmQxYTJkODAyNjQxZDcwODU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjggU2VwIDIwMjIgMDk6NDY6MzEgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNSAxLzRdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpDUkVBVEUvQUxURVIvRFJP UCBFWFRFTlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JFQVRF L0FMVEVSL0RST1AgUlVMRQpHUkFOVApSRVZPS0UKUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVwpD UkVBVEUvQUxURVIvRFJPUCBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OL1BBUlNFUi9ESUNUSU9O QVJZL1RFTVBMQVRFCkNSRUFURS9EUk9QIFRSQU5TRk9STQoKKE5vdGUgIzEpIE5vdGUgdGhhdCBz b21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJ T05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQg bW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgTm90ZSB0 aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEg bG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9u IHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUg b24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMg bW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgoKKE5vdGUgIzMpIFJlbW92ZWQgYW4gdW5kZXNp cmFibGUgJ29uJyBmcm9tIHRoZSBpZGVudGl0eSBzdHJpbmcgZm9yIFRSQU5TRk9STQppbiBnZXRP YmplY3RJZGVudGl0eVBhcnRzLiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGRlcGFyc2Ugb2YgRFJP UApUUkFOU0ZPUk0gY29tbWFuZCB3b3JrIHNpbmNlICdvbicgaXMgbm90IHByZXNlbnQgaW4gdGhl IGN1cnJlbnQKRFJPUCBUUkFOU0ZPUk0gc3ludGF4LiBGb3IgZXhhbXBsZSwgdGhlIGNvcnJlY3Qg c3ludGF4IGlzCmRyb3AgdHJhbnNmb3JtIHRyZiBmb3IgaW50IGxhbmd1YWdlIHNxbDsKaW5zdGVh ZCBvZgpkcm9wIHRyYW5zZm9ybSB0cmYgZm9yIGludCBvbiBsYW5ndWFnZSBzcWw7Ci0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyAgICAgICAgICAgICAgICAgfCAgICA0ICsKIHNyYy9i YWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jICAgICAgICAgIHwgICAgMiArLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgICAgICAgICAgIHwgODA4MiArKysrKysrKysrKysr KysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgICAgICAgICAgIHwgIDc2 MyArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgICAy ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgICAgICAgICAgICAgIHwgICAzMyAr CiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYyAgICAgICAgICB8ICAgIDMgKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgICAgICAgICAgICAgIHwgICA1MiArCiBz cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAgICAgICAgICB8ICAyMjAgKy0KIHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgICAgNiArCiBzcmMv aW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2lu Y2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgICAgICAgICAgfCAgIDIzICsKIHNyYy9pbmNs dWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVk ZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUv dXRpbHMvYnVpbHRpbnMuaCAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0 aWxzL3J1bGV1dGlscy5oICAgICAgICAgICAgICAgIHwgICAxNiArCiBzcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dCB8ICAgIDIgKy0KIHNyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgIHwgICAgNCArCiAxOSBmaWxlcyBjaGFuZ2VkLCA5 MTQ3IGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9h Y2xjaGsuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKaW5kZXggYWE1YTJlZDk0OC4u N2RjMTkwZGRlYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCkBAIC0zODUsNyArMzg1LDExIEBAIEV4ZWN1 dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10KQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJncmFu dG9yIG11c3QgYmUgY3VycmVudCB1c2VyIikpKTsKKworCQlpc3RtdC5ncmFudG9yX3VpZCA9IGdy YW50b3I7CiAJfQorCWVsc2UKKwkJaXN0bXQuZ3JhbnRvcl91aWQgPSBJbnZhbGlkT2lkOwogCiAJ LyoKIAkgKiBUdXJuIHRoZSByZWd1bGFyIEdyYW50U3RtdCBpbnRvIHRoZSBJbnRlcm5hbEdyYW50 IGZvcm0uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCmluZGV4IDI4NGNhNTU0NjkuLjA4 NGFjZWJiZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCkBAIC02MDAxLDcgKzYw MDEsNyBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRzKGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVj dCwKIAkJCQl0cmFuc2Zvcm1UeXBlID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRyYW5zZm9y bS0+dHJmdHlwZSk7CiAJCQkJdHJhbnNmb3JtTGFuZyA9IGdldF9sYW5ndWFnZV9uYW1lKHRyYW5z Zm9ybS0+dHJmbGFuZywgZmFsc2UpOwogCi0JCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVyLCAi Zm9yICVzIG9uIGxhbmd1YWdlICVzIiwKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsICJm b3IgJXMgbGFuZ3VhZ2UgJXMiLAogCQkJCQkJCQkgdHJhbnNmb3JtVHlwZSwKIAkJCQkJCQkJIHRy YW5zZm9ybUxhbmcpOwogCQkJCWlmIChvYmpuYW1lKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0 OGY3MzQ4ZjkxLi4xNzFkZmIyODAwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjks OCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAljcmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8g XAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29uLm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJk Lm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUg bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMC4uMGQ0M2U5ODdkMgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTAsMCArMSw4MDgyIEBA CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9u cyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAg cmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgor ICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyBy ZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nl c3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICog ZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3Ig bWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWlu IG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlv biBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFs b2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxl IHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5l LiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkg YXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5j bHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVk ZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdHRyaWJ1dGUu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVw ZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3Jl aWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVj dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmFu Z2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfZGlj dC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ190c190ZW1wbGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1 ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNp bmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgorI2luY2x1ZGUg Im5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1 ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgi CisjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUgInV0aWxzL2J1 aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1dGlscy9n dWMuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNo ZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVsLmgi CisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUu aCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25iIHN0cmluZyAq LworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVmb3JlIHRoZXkg YXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1hbmQgaXMKKyAq IHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0cyBiZWxvdy4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJvb2wsCisJT2Jq VHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJT2JqVHlwZUZs b2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgT2JqVHJl ZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOworCWludAkJCW51bVBhcmFtczsKKwlTdHJpbmdJbmZv CWZtdGluZm87CisJYm9vbAkJcHJlc2VudDsKK30gT2JqVHJlZTsKKwordHlwZWRlZiBzdHJ1Y3Qg T2JqRWxlbQoreworCWNoYXIJICAgKm5hbWU7CisJT2JqVHlwZQkJb2JqdHlwZTsKKworCXVuaW9u CisJeworCQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRl Z2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZQkgICAqb2JqZWN0OworCQlMaXN0CSAgICph cnJheTsKKwl9IHZhbHVlOworCXNsaXN0X25vZGUJbm9kZTsKK30gT2JqRWxlbTsKKworYm9vbCB2 ZXJib3NlID0gdHJ1ZTsKKworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJheSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfYm9v bF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgYm9vbCB2YWx1ZSk7CitzdGF0aWMg dm9pZCBhcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGZsb2F0 OCB2YWx1ZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqbmFtZSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0 cmVlLCBjaGFyICpuYW1lLCBPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgY2hhciAqYXBwZW5kX29i amVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOworc3Rh dGljIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVs ZW0pOworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQo T2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAq KnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOwor c3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOwor c3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0 YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9p ZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJv bGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVl ICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQg bnVtb2JqcywuLi4pOworc3RhdGljIE9iakVsZW0gKm5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZh bHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0 cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRl Zl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJ CQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMs CisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xh dXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVs LCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipl eHBycyk7CitzdGF0aWMgY29uc3QgY2hhciAqc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBv Ymp0eXBlKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJl bGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCQkJCQkgIENvbHVt bkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpOworc3RhdGljIE9ialRy ZWUgKmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBi b29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlv bnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWco T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsIE9iamVjdEFkZHJlc3MgY29waWVkKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3Rt dF9UU0RpY3Rpb25hcnkoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGlj IE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVm aW5lU3RtdCAqZGVmaW5lKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZF bGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1bmN0 aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7Citz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRp b24pOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfUmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21k ICpzdWJjbWQpOworCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0NhY2hlKE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoT2JqVHJlZSAqcGFy ZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRlcGFyc2Vf U2VxX093bmVkQnkoT2JqVHJlZSAqcGFyZW50LCBPaWQgc2VxdWVuY2VJZCwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5 cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfUmVjZWl2ZShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9y bSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfSW4oT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5 cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShPYmpU cmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0 eXBGb3JtKTsKKworc3RhdGljIExpc3QgKmRlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJ ZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9u LCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkJCSAgIGJvb2wg dHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKKworLyoKKyAqIEFkZCBjb21tb24gY2xhdXNlcyB0byBD cmVhdGVQb2xpY3kgb3IgQWx0ZXJQb2xpY3kgZGVwYXJzZSBvYmplY3RzCisgKi8KK3N0YXRpYyB2 b2lkCithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcG9saWN5U3RtdCwgT2lkIHBvbGljeU9p ZCwgTGlzdCAqcm9sZXMsCisJCQkJICAgYm9vbCBkb19xdWFsLCBib29sIGRvX3dpdGhfY2hlY2sp Cit7CisJUmVsYXRpb24JcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCUhlYXBUdXBsZQlwb2xUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlf b2lkKHBvbFJlbCwgQW51bV9wZ19wb2xpY3lfb2lkLCBwb2xpY3lPaWQpOworCUZvcm1fcGdfcG9s aWN5IHBvbEZvcm07CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisK Kwlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCS8qIGFk ZCB0aGUgIk9OIHRhYmxlIiBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChwb2xpY3lT dG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkpOwor CisJLyoKKwkgKiBBZGQgdGhlICJUTyByb2xlIiBjbGF1c2UsIGlmIGFueS4gIEluIHRoZSBDUkVB VEUgY2FzZSwgaXQgYWx3YXlzCisJICogY29udGFpbnMgYXQgbGVhc3QgUFVCTElDLCBidXQgaW4g dGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQgYmUgZW1wdHkuCisJICovCisJaWYgKHJvbGVzKQorCXsK KwkJTGlzdCAgICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAqY2VsbDsKKworCQlmb3JlYWNoIChj ZWxsLCByb2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmly c3QoY2VsbCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0 X29iamVjdChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHBvbGljeVN0bXQsIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQorCWVs c2UKKwl7CisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAicHJlc2VudCIsIGZhbHNl KTsKKwl9CisKKwkvKiBhZGQgdGhlIFVTSU5HIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3F1 YWwpCisJeworCQlEYXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9vbAlp c251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9s aWN5X3BvbHF1YWwsCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwpLCAmaXNudWxs KTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgcG9scXVhbCBl eHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0 RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVsaWQp OworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiVVNJTkcgKCV7ZXhwcmVzc2lv bn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisK KwkvKiBhZGQgdGhlIFdJVEggQ0hFQ0sgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fd2l0aF9j aGVjaykKKwl7CisJCURhdHVtCWRlcGFyc2VkOworCQlEYXR1bQlzdG9yZWRleHByOworCQlib29s CWlzbnVsbDsKKworCQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19w b2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwg JmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBv bHdpdGhjaGVjayBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFy c2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9y bS0+cG9scmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChwb2xpY3lTdG10LCAiV0lUSCBD SEVDSyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBh cnNlZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdChwb2xpY3lTdG10LCAicHJl c2VudCIsIGZhbHNlKTsKKworCXJlbGF0aW9uX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2Nr KTsKK30KKworLyogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQs IExpc3QgKmFycmF5KQoreworCU9iakVsZW0JKnBhcmFtOworCWNoYXIgKm9iamVjdF9uYW1lOwor CisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQly ZXR1cm47CisKKwlpZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAqbGM7CisKKwkJLyogRXh0 cmFjdCB0aGUgT2JqRWxlbXMgd2hvc2UgcHJlc2VudCBmbGFnIGlzIHRydWUgKi8KKwkJZm9yZWFj aChsYywgYXJyYXkpCisJCXsKKwkJCU9iakVsZW0gKmVsZW0gPSAoT2JqRWxlbSAqKSBsZmlyc3Qo bGMpOworCisJCQlBc3NlcnQoZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0IHx8CisJCQkJ ICAgZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlU3RyaW5nKTsKKworCQkJaWYgKCFlbGVtLT52YWx1 ZS5vYmplY3QtPnByZXNlbnQgJiYKKwkJCQllbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3Qp CisJCQkJYXJyYXkgPSBmb3JlYWNoX2RlbGV0ZV9jdXJyZW50KGFycmF5LCBsYyk7CisJCX0KKwor CX0KKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUs IHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVBcnJheSwgb2JqZWN0X25h bWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5OworCWFwcGVuZF9wcmVtYWRlX29iamVj dCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEg dHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICpwYXJhbTsKKwljaGFyCSAq b2JqZWN0X25hbWUgPSBzdWJfZm10OworCWJvb2wJICBpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsK KworCUFzc2VydChzdWJfZm10KTsKKworCS8qIENoZWNrIGlmIHRoZSBwcmVzZW50IGlzIHBhcnQg b2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHN0b3JlIHRoZSBib29sZWFuIHZhbHVlKi8KKwlpZiAo c3RyY21wKHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9 IHRydWU7CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYg IXRyZWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlv YmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10 KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBh cmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUs IHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVl LgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisJY2hh cgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9 IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFt ID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUu Zmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwor LyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAq Lworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQpCit7CisJaW50CQkJCWxlbjsKKwljaGFyCQkgICAqZm10OworCisJaWYgKHRyZWUt PmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm10ID0gdHJlZS0+Zm10aW5mby0+ZGF0 YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisKKwkvKiBBZGQgYSBzZXBhcmF0b3IgaWYg bmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYgZm10W2xlbiAtIDFdICE9ICcgJykKKwkJYXBw ZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRpbmZvLCAxKTsKKworCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2ZtdCk7Cit9CisKKy8qIEFwcGVuZCBhIE5VTEwg b2JqZWN0IHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVjdChPYmpU cmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIgKm9iamVjdF9uYW1lOworCisJQXNz ZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFt ZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCWFw cGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxsLCBvYmplY3Rf bmFtZSkpOworfQorCisvKiBBcHBlbmQgYW4gb2JqZWN0IHBhcmFtZXRlciB0byBhIHRyZWUgKi8K K3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICAgKm9i amVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlICYmICF2YWx1 ZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3Rv X2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2Jq VHlwZU9iamVjdCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsK KwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogUmV0dXJu IHRoZSBvYmplY3QgbmFtZSB3aGljaCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiole25h bWVbOi5dfSoiCisgKiBzdHlsZSBzdHJpbmcuIEFuZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBz dHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2FwcGVuZF9vYmplY3Rf dG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCVN0cmlu Z0luZm9EYXRhCW9iamVjdF9uYW1lOworCWNvbnN0IGNoYXIJICAgKmVuZF9wdHI7CisJY29uc3Qg Y2hhcgkgICAqY3A7CisJYm9vbAkJCXN0YXJ0X2NvcHkgPSBmYWxzZTsKKworCWlmIChzdWJfZm10 ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKwor CWluaXRTdHJpbmdJbmZvKCZvYmplY3RfbmFtZSk7CisJZW5kX3B0ciA9IHN1Yl9mbXQgKyBzdHJs ZW4oc3ViX2ZtdCk7CisKKwlmb3IgKGNwID0gc3ViX2ZtdDsgY3AgPCBlbmRfcHRyOyBjcCsrKQor CXsKKwkJaWYgKCpjcCA9PSAneycpCisJCXsKKwkJCXN0YXJ0X2NvcHkgPSB0cnVlOworCQkJY29u dGludWU7CisJCX0KKworCQlpZiAoIXN0YXJ0X2NvcHkpCisJCQljb250aW51ZTsKKworCQlpZiAo KmNwID09ICc6JyB8fCAqY3AgPT0gJ30nKQorCQkJYnJlYWs7CisKKwkJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybygmb2JqZWN0X25hbWUsICpjcCk7CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxl biA9PSAwKQorCQllbG9nKEVSUk9SLCAib2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBl bmRfZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5k YXRhOworfQorCisvKiBBcHBlbmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZSAq Lworc3RhdGljIGlubGluZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJl ZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVs ZW0tPm5vZGUpOworCXRyZWUtPm51bVBhcmFtcysrOworfQorCisvKiBBcHBlbmQgYSBzdHJpbmcg cGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9zdHJpbmdfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0J ICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOwor CisJaWYgKCF2ZXJib3NlICYmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlWzBdID09ICdcMCcpKQor CQlyZXR1cm47CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmlu Zyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBv YmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCWFwcGVuZF9wcmVt YWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBTaW1pbGFyIHRvIGZvcm1hdF90 eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0IG9mIGluZm9ybWF0aW9uCisg KiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNjaGVtYSBPSUQuICBGb3IgY2Vy dGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWlyZAorICogICB0eXBtb2QgcnVs ZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNjaGVt YS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1l IGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cG5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5hbWUs IHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0eXBlbW9kc3RyIGlzIHNldCB0byB0aGUgdHlwZW1v ZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBhcmVucworICoKKyAqIC0gdHlwYXJyYXkgaW5k aWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRkZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8g ZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3RhbmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2Vw dAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdpdGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisg Ki8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMy IHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVt b2RzdHIsCisJCQkJCSBib29sICp0eXBhcnJheSkKK3sKKwlIZWFwVHVwbGUJCXR1cGxlOworCUZv cm1fcGdfdHlwZQl0eXBlZm9ybTsKKwlPaWQJCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUg PSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB0eXBlICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9w Z190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVn dWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQt bGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1 Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0 eXBhcnJheSA9IChJc1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9y YWdlICE9IFRZUFNUT1JBR0VfUExBSU4pOworCisJaWYgKCp0eXBhcnJheSkKKwl7CisJCS8qIFN3 aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgKi8KKwkJUmVsZWFz ZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShhcnJheV9iYXNlX3R5cGUpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1 IiwgdHlwZV9vaWQpOworCisJCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1 cGxlKTsKKwkJdHlwZV9vaWQgPSBhcnJheV9iYXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBTcGVj aWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUg d2UgcHV0CisJICogdHlwbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZShlLmcuIFRJTUUoNikgd2l0 aCB0aW1lIHpvbmUgKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90 ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwlpZiAodHlwZV9vaWQg PT0gSU5URVJWQUxPSUQgfHwKKwkJdHlwZV9vaWQgPT0gVElNRVNUQU1QT0lEIHx8CisJCXR5cGVf b2lkID09IFRJTUVTVEFNUFRaT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVPSUQgfHwKKwkJdHlw ZV9vaWQgPT0gVElNRVRaT0lEKQorCXsKKwkJc3dpdGNoICh0eXBlX29pZCkKKwkJeworCQkJY2Fz ZSBJTlRFUlZBTE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQkJ YnJlYWs7CisJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJ CQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQll bHNlCisJCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICovCisJ CQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQkJYnJlYWs7CisJCQljYXNl IFRJTUVTVEFNUE9JRDoKKwkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJ CWJyZWFrOworCQkJY2FzZSBUSU1FVFpPSUQ6CisJCQkJaWYgKHR5cGVtb2QgPCAwKQorCQkJCQkq dHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCQllbHNlCisJCQkJ CS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2RlLiAqLworCQkJCQkqdHlw bmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRU9JRDoKKwkJ CQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJfQorCQkqbnNwaWQg PSBJbnZhbGlkT2lkOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBObyBhZGRpdGlvbmFsIHBy b2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIG90aGVyIHR5cGVzLCBzbyBnZXQgdGhlIHR5cGUKKwkJ ICogbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCSAqLworCQkq bnNwaWQgPSB0eXBlZm9ybS0+dHlwbmFtZXNwYWNlOworCQkqdHlwbmFtZSA9IHBzdHJkdXAoTmFt ZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJCSp0 eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQp OworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBhcmd1 bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9u cy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdk ZWZhdWx0cykKK3sKKwlMaXN0ICAgKm5vZGVkZWZzOworCUxpc3QgICAqc3RyZGVmcyA9IE5JTDsK KwlMaXN0Q2VsbCAqY2VsbDsKKworCW5vZGVkZWZzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKHRl eHRfdG9fY3N0cmluZyhwcm9hcmdkZWZhdWx0cykpOworCWlmICghSXNBKG5vZGVkZWZzLCBMaXN0 KSkKKwkJZWxvZyhFUlJPUiwgInByb2FyZ2RlZmF1bHRzIGlzIG5vdCBhIGxpc3QiKTsKKworCWZv cmVhY2goY2VsbCwgbm9kZWRlZnMpCisJeworCQlOb2RlICAgKm9uZWRlZiA9IGxmaXJzdChjZWxs KTsKKworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25l ZGVmLCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisv KgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBF UlNJU1RFTkNFIHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lzdGVuY2Vfc3Ry KGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7CisJCWNhc2Ug UkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJY2FzZSBSRUxQ RVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQljYXNlIFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJzaXN0ZW5jZSk7 CisJCQlyZXR1cm4gIiI7CQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKiBB bGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Qo T2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0g PSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFt LT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBu ZXcgb2JqZWN0IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmpl Y3QoT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IG5ld19v YmplY3QoT2JqVHlwZU9iamVjdCwgTlVMTCk7CisJcGFyYW0tPnZhbHVlLm9iamVjdCA9IHZhbHVl OworCisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRy ZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3 X29ianRyZWUoY2hhciAqZm10KQoreworCU9ialRyZWUJKnBhcmFtczsKKworCXBhcmFtcyA9IHBh bGxvYzAoc2l6ZW9mKE9ialRyZWUpKTsKKwlwYXJhbXMtPnByZXNlbnQgPSB0cnVlOworCXNsaXN0 X2luaXQoJnBhcmFtcy0+cGFyYW1zKTsKKworCWlmIChmbXQpCisJeworCQlwYXJhbXMtPmZtdGlu Zm8gPSBtYWtlU3RyaW5nSW5mbygpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHBhcmFtcy0+ Zm10aW5mbywgZm10KTsKKwl9CisKKwlyZXR1cm4gcGFyYW1zOworfQorCisvKgorICogQSBoZWxw ZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLgorICoKKyAqIEVsZW1l bnRzICJzY2hlbWFuYW1lIiBhbmQgIm9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgbmFtZXNwYWNl IE9JRAorICogY29ycmVzcG9uZHMgdG8gYSB0ZW1wIHNjaGVtYSwgdGhhdCdzIHNldCB0byAicGdf dGVtcCIuCisgKgorICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gZWxlbWVudCB0 eXBlcyBpcyB3aGV0aGVyIHRoZSBvYmpuYW1lIHdpbGwKKyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVu dGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0aGluZyB0aGF0IHRoaXMgcm91dGluZQor ICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2lsbCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1 bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo T2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRyZWUJKnF1YWxpZmllZDsKKwljaGFyCSAg ICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNw YWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVz cGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIs CisJCQkJCQkJICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJ CQkgICJvYmpuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChuYW1lKSk7CisKKwlyZXR1cm4g cXVhbGlmaWVkOworfQorCisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31EIGFu ZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBvYmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lk L29iaklkLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVk OworCVJlbGF0aW9uCWNhdGFsb2c7CisJSGVhcFR1cGxlCWNhdG9iajsKKwlEYXR1bQkJb2JqbnNw OworCURhdHVtCQlvYmpuYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJ QW51bV9uYW1lc3BhY2U7CisJQXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVt X29pZChjbGFzc0lkKTsKKwlib29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3Blbihj bGFzc0lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0 X2J5X29pZChjYXRhbG9nLCBBbnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0ICV1IG9mIGNhdGFsb2cg XCIlc1wiIiwKKwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykp OworCUFudW1fbmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9u YW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpu c3AgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWVzcGFjZSwgUmVsYXRpb25HZXREZXNj cihjYXRhbG9nKSwKKwkJCQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgInVuZXhwZWN0ZWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCW9iam5hbWUgPSBoZWFwX2dldGF0 dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkg ICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxM IG5hbWUiKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdl dE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpu YW1lKSkpOworCXRhYmxlX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gcXVhbGlmaWVkOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0 cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBSb2xlU3BlYyBub2RlLgorICogU3BlY2lhbCB2YWx1 ZXMgc3VjaCBhcyBST0xFU1BFQ19DVVJSRU5UX1VTRVIgYXJlIGV4cGFuZGVkIHRvIHRoZWlyIGZp bmFsCisgKiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3Jv bGVzcGVjKFJvbGVTcGVjICpzcGVjKQoreworCU9ialRyZWUJICAgKnJvbGU7CisJY2hhcgkgICAq cm9sZXR5cGU7CisKKwlpZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQorCQly b2xldHlwZSA9IGdldF9yb2xlc3BlY19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUgPSBw c3RyZHVwKCIiKTsKKworCXJvbGUgPSBuZXdfb2JqdHJlZV9WQShOVUxMLDIsCisJCQkJCQkgICJp c19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9MRVNQRUNfUFVCTElD LAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlwZSk7CisJcmV0dXJu IHJvbGU7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRo IHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gIChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1c2Ug InB1YmxpYyIpLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZV9p ZChPaWQgcm9sZW9pZCkKK3sKKwlPYmpUcmVlICAgICpyb2xlOworCisJcm9sZSA9IG5ld19vYmp0 cmVlKCIiKTsKKworCWlmIChyb2xlb2lkICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlIZWFwVHVw bGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXND YWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVhcFR1 cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9VTkRFRklORURfT0JKRUNUKSwKKwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAldSBk b2VzIG5vdCBleGlzdCIsIHJvbGVvaWQpKSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgoRm9y bV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJvbGUsICIle3JvbGVuYW1lfUkiLCBwc3RyZHVwKHJvbGVuYW1lKSk7CisKKwkJ UmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3Qocm9sZSwgIiV7cm9sZW5hbWV9SSIsICJwdWJsaWMiKTsKKworCXJldHVybiByb2xlOworfQor CisvKgorICogQSBoZWxwZXIgcm91dGluZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgorICovCitz dGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfdHlwZShPaWQgdHlwZUlkLCBpbnQzMiB0 eXBtb2QpCit7CisJT2JqVHJlZQkqdHlwZVBhcmFtOworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJ ICAgKnR5cG5zcDsKKwljaGFyCSAgICp0eXBlbmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9k c3RyOworCWJvb2wJCXR5cGFycmF5OworCisJZm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlkLCB0 eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZW5hbWUsICZ0eXBtb2RzdHIsICZ0eXBhcnJh eSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3BpZCkpCisJCXR5cG5zcCA9IGdldF9uYW1lc3Bh Y2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsKKwllbHNlCisJCXR5cG5zcCA9IHBzdHJkdXAoIiIp OworCisJdHlwZVBhcmFtID0gbmV3X29ianRyZWVfVkEoTlVMTCwgNCwKKwkJCQkJCQkgICAic2No ZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cG5zcCwKKwkJCQkJCQkgICAidHlwZW5hbWUiLCBP YmpUeXBlU3RyaW5nLCB0eXBlbmFtZSwKKwkJCQkJCQkgICAidHlwbW9kIiwgT2JqVHlwZVN0cmlu ZywgdHlwbW9kc3RyLAorCQkJCQkJCSAgICJ0eXBhcnJheSIsIE9ialR5cGVCb29sLCB0eXBhcnJh eSk7CisKKwlyZXR1cm4gdHlwZVBhcmFtOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2Jq ZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisg KgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxl bWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVy IG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChz dHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1 cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5z dGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmlu ZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAq IE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4g IEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lm aWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9k ZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRo ZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9y bWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9W QShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSAgICp0cmVlOworCXZh X2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0 IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qIEFuZCBw cm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVtb2Jqcyk7CisJ Zm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5hbWU7CisJCU9i alR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJbmFtZSA9IHZhX2FyZyhhcmdz LCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQllbGVtID0gbmV3 X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIG90aGVyIHBhcmFtIHR5 cGVzIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbiB0aGUgdmFyYXJncy4KKwkJICogRmV0Y2ggaXQg YW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9iamVjdCBpbnRvIHRoZSBtYWluIG9iamVjdC4K KwkJICovCisJCXN3aXRjaCAodHlwZSkKKwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkv KiBOdWxsIHBhcmFtcyBkb24ndCBoYXZlIGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVh azsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2Fy ZyhhcmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVs ZW0tPnZhbHVlLnN0cmluZyA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJ Y2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywg TGlzdCAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+ dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhhcmdzLCBpbnQ2NCk7CisJCQkJYnJlYWs7CisJCQljYXNl IE9ialR5cGVGbG9hdDoKKwkJCQllbGVtLT52YWx1ZS5mbHQgPSB2YV9hcmcoYXJncywgZG91Ymxl KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCQllbGVtLT52YWx1ZS5v YmplY3QgPSB2YV9hcmcoYXJncywgT2JqVHJlZSAqKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6 CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT2JqVHJlZSBlbGVtZW50IHR5cGUgJWQiLCB0eXBl KTsKKwkJfQorCisJCWVsZW0tPm5hbWUgPSBuYW1lOworCQlhcHBlbmRfcHJlbWFkZV9vYmplY3Qo dHJlZSwgZWxlbSk7CisJfQorCisJdmFfZW5kKGFyZ3MpOworCXJldHVybiB0cmVlOworfQorCisv KiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdf c3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFz c2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgTlVMTCk7 CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOworCisJcmV0dXJuIHBhcmFtOworfQorCisv KgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJl ZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2Jq dHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVl ICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUJdmFsOworCisJaWYgKHRy ZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCB0aGUga2V5IGZpcnN0 ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0gImZtdCI7 CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7CisJcHVz aEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJvY2VzcyB0 aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmluZzsKKwl2 YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisJdmFsLnZhbC5zdHJpbmcu dmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9W QUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBKU09OQiByZXByZXNlbnRhdGlvbiBm cm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29uYiAqCitvYmp0cmVlX3RvX2pzb25iKE9i alRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisKKwl2YWx1ZSA9IG9ianRyZWVf dG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVybiBKc29uYlZhbHVlVG9Kc29uYih2YWx1 ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRyZWVfdG9fanNvbmI6IHByb2Nlc3MgYW4g aW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0IG9yCisgKiBhbiBhcnJheSBpbnRvIHRo ZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX3RvX2pzb25i X2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAorCQkJCQkJ IEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQoreworCUxpc3RDZWxsICAgKmNlbGw7CisJ SnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNhc2Ug T2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlU3Ry aW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4gPSBz dHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0gb2Jq ZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4s ICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50eXBl ID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURhdHVt R2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJCQkJ CQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxl bV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJCXZh bC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJ CURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAorCQkJ CQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJvb2w6 CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3QtPnZh bHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZlbHkg YWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9ianRy ZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVhazsK KworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JF R0lOX0FSUkFZLCBOVUxMKTsKKwkJCWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkK KwkJCXsKKwkJCQlPYmpFbGVtICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQlvYmp0cmVl X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCX0KKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQlicmVhazsKKworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9i amVjdC0+b2JqdHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVs cGVyIGZvciBvYmp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0 cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQor eworCXNsaXN0X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lO X09CSkVDVCwgTlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0 cmVlKTsKKworCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVs ZW0JKm9iamVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJ CUpzb25iVmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlw ZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFt ZSk7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVl IGFjY29yZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3Rh dGUsIG9iamVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBD UkVBVEUgVEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJs ZSBPSUQgb3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRo ZW0gdG8KKyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyBy ZXR1cm5lZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFi bGVzLCBhbmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNv bnN0cmFpbnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWlu Q29uc3RyYWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQp Cit7CisJUmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBz Y2FuOworCUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlCSpjb25zdHI7CisKKwkvKiBPbmx5IG9u ZSBtYXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElz VmFsaWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNo IGFsbCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICov CisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZr ZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsK KwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlk TmFtZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UK Kwl7CisJCUFzc2VydChPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKGRvbWFpbklkKSk7CisJCXNj YW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50VHlwaWRJbmRleElkLAor CQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKworCS8qCisJICogRm9yIGVhY2gg Y29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBvZiB0YWJsZSBlbGVtZW50cy4gIElu CisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25seSB0aGUgcHJpbnRhYmxlIGluZm9y bWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJhdGUgYXR0cmlidXRlcyB0byBpbmRp Y2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkgKiBhdXRvbWF0aWMgcHJvY2Vzc2lu Zy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5l eHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZvcm07CisJCWNoYXIJ ICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNU UlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3JtLT5jb250eXBlKQorCQl7CisJCQlj YXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9ICJjaGVjayI7CisJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQljb250aW51ZTsJLyogbm90IGhlcmUg Ki8KKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFyeSBr ZXkiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250eXBl ID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfVFJJR0dFUjoKKwkJ CQljb250eXBlID0gInRyaWdnZXIiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VY Q0xVU0lPTjoKKwkJCQljb250eXBlID0gImV4Y2x1c2lvbiI7CisJCQkJYnJlYWs7CisJCQlkZWZh dWx0OgorCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29uc3RyYWludCB0eXBlIik7CisJ CX0KKworCQkvKgorCQkgKiAidHlwZSIgYW5kICJjb250eXBlIiBhcmUgbm90IHBhcnQgb2YgdGhl IHByaW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUKKwkJICogdXNlZnVsIHRvIHByb2dyYW1tYXRpY2Fs bHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBjb2x1bW5zIGFuZCBhbW9uZworCQkgKiBkaWZmZXJl bnQgY29uc3RyYWludCB0eXBlcy4KKwkJICoKKwkJICogWFhYIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0 byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1lcyBpbiBhIFBLLCBldGMuCisJCSAqLworCQljb25z dHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIs CisJCQkJCQkJCTQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbnN0cmFpbnQi LAorCQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcsIGNvbnR5cGUsCisJCQkJCQkJCSJu YW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJCQkJ CQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFp bnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVsZW1lbnRzID0gbGFw cGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJfQorCisJc3lzdGFi bGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4gaW5kZXggZGVmaW5p dGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91bnQgb2Yg Y29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1dAorICog Y29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNlZW0gd29y dGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQKK3BnX2dldF9p bmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5kZXhfYW0s CisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJ CQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKQorewor CUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVwbGUJaHRf YW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxyZWM7CisJ Rm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxpc3QJICAg KmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpjb250ZXh0 OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xsRGF0dW07 CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOworCWJvb2wJ CWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAqaW5kY2xh c3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmluaXRpb25C dWY7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRo ZSBpbmRleAorCSAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmpl Y3RJZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4 KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgaW5k ZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOwor CisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlk eHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNz LCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5k Y29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0g KG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNz RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51 bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNs YXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlp bmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJ CQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxs KTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9u RGF0dW0pOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4 IHJlbGF0aW9uCisJICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2Jq ZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lk eHJlbCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAl dSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1Qo aHRfaWR4cmVsKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2FtIHR1cGxlIG9mIHRoZSBpbmRl eCcgYWNjZXNzIG1ldGhvZAorCSAqLworCWh0X2FtID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBP YmplY3RJZEdldERhdHVtKGlkeHJlbHJlYy0+cmVsYW0pKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoaHRfYW0pKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNz IG1ldGhvZCAldSIsCisJCQkgaWR4cmVscmVjLT5yZWxhbSk7CisJYW1yZWMgPSAoRm9ybV9wZ19h bSkgR0VUU1RSVUNUKGh0X2FtKTsKKworCS8qCisJICogR2V0IHRoZSBpbmRleCBleHByZXNzaW9u cywgaWYgYW55LiAgKE5PVEU6IHdlIGRvIG5vdCB1c2UgdGhlIHJlbGNhY2hlCisJICogdmVyc2lv bnMgb2YgdGhlIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGUsIGJlY2F1c2Ugd2Ugd2FudCB0byBk aXNwbGF5CisJICogbm9uLWNvbnN0LWZvbGRlZCBleHByZXNzaW9ucy4pCisJICovCisJaWYgKCFo ZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsIE5VTEwpKQorCXsK KwkJRGF0dW0JCWV4cHJzRGF0dW07CisJCWNoYXIJICAgKmV4cHJzU3RyaW5nOworCisJCWV4cHJz RGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJIEFu dW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCWV4 cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0RhdHVtKTsKKwkJaW5kZXhwcnMg PSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOworCQlwZnJlZShleHByc1N0cmlu Zyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlpbmRleHByX2l0ZW0gPSBsaXN0 X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoZ2V0X3Jl bF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0cmluZ0luZm8oJmRlZmluaXRp b25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmluZGV4X2FtID0gcHN0cmR1cChx dW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkpKTsKKworCS8qIEZldGNoIHRo ZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUgPSBHZXRJbmRleEFtUm91dGlu ZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0IGluZGV4IGRlZmluaXRpb24u ICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGllZCBieQorCSAqIGNhbGxlci4K KwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBrZXlubysr KQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNba2V5bm9d OworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJCQlrZXlj b2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisJCU9pZAkJCWluZGNvbGw7CisKKwkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0gMCA/ICIiIDog IiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUgaW5kZXggY29s dW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5cG1vZDsKKwor CQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNlKTsKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50aWZpZXIoYXR0 bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRudW0sCisJCQkJ CQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtleWNvbGNvbGxh dGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNzaW9uYWwgaW5kZXggKi8KKwkJ CU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAoaW5kZXhwcl9p dGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBpbmRleHBy cyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChpbmRleHByX2l0ZW0pOwor CQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7CisJCQkvKiBE ZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhrZXksIGNvbnRleHQs IGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mgbm90IGEgYmFyZSBm dW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4a2V5LCBGdW5jRXhw cikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9PSBDT0VSQ0Vf RVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVm LCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIo JXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4a2V5KTsKKwkJCWtl eWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9CisKKwkJLyogQWRk IGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwgPSBpbmRjb2xsYXRpb24t PnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQorCQkJYXBwZW5kU3Ry aW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVf Y29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBjbGFz cyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+ dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOworCisJCS8qIEFkZCBv cHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3JkZXIpCisJCXsK KwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9ydCBERVNDIGFuZCBOVUxM UyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQl7CisJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7CisJCQkJLyogTlVMTFMg RklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJaWYgKCEob3B0ICYgSU5E T1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5p dGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG9w dCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm ZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9CisKKwkJLyogWFhYIGV4 Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLworCX0KKwkq ZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIE91dHB1dCByZWxvcHRpb25z ICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5kZXhyZWxpZCk7CisKKwkv KiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3BjOworCisJCXRibHNwYyA9 IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9pZElzVmFsaWQodGJsc3Bj KSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKGdldF90YWJsZXNw YWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVzcGFjZSA9IE5VTEw7CisJfQor CisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFoZWFwX2F0dGlz bnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJeworCQlOb2RlCSAg ICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJ CS8qIENvbnZlcnQgdGV4dCBzdHJpbmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4 X2luZHByZWQsICZpc251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBU ZXh0RGF0dW1HZXRDU3RyaW5nKHByZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdU b05vZGUocHJlZFN0cmluZyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2Ug Ki8KKwkJKndoZXJlQ2xhdXNlID0KKwkJCWRlcGFyc2VfZXhwcmVzc2lvbihub2RlLCBjb250ZXh0 LCBmYWxzZSwgZmFsc2UpOworCX0KKwllbHNlCisJCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisKKwkv KiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNo ZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRh aW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhl IGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBh cnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVs dChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJ CSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZSAqZGVmdmFsOworCWNoYXIgKmRlZnN0cjsKKworCWRl ZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9IGRlcGFy c2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCS8qIENv bGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBjaGVja3Mg Ki8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwpOworCisJ cmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFydGl0aW9u IGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGljIGNoYXIg KgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRlcGFy c2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVw bGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcmVsYXRpb24gJXUiLAorCQkJIHJlbGlkKTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoUkVMT0lELCB0dXBsZSwKKwkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJv dW5kLAorCQkJCQkJCQkgJmlzbnVsbCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2Fs bDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVt R2V0Q1N0cmluZyhib3VuZERhdHVtKSksCisJCQkJCQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VT eXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7 Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdCB0eXBlIGFzIGEgc3RyaW5nLgor ICovCitzdGF0aWMgY29uc3QgY2hhciAqCitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9i anR5cGUpCit7CisJc3dpdGNoIChvYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRF OgorCQkJcmV0dXJuICJBR0dSRUdBVEUiOworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0dXJu ICJDQVNUIjsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmV0dXJuICJDT0xVTU4iOworCQlj YXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4gIkNPTExBVElPTiI7CisJCWNhc2UgT0JK RUNUX0NPTlZFUlNJT046CisJCQlyZXR1cm4gIkNPTlZFUlNJT04iOworCQljYXNlIE9CSkVDVF9E QVRBQkFTRToKKwkJCXJldHVybiAiREFUQUJBU0UiOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJ CQlyZXR1cm4gIkRPTUFJTiI7CisJCWNhc2UgT0JKRUNUX0VWRU5UX1RSSUdHRVI6CisJCQlyZXR1 cm4gIkVWRU5UIFRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9FWFRFTlNJT046CisJCQlyZXR1cm4g IkVYVEVOU0lPTiI7CisJCWNhc2UgT0JKRUNUX0ZEVzoKKwkJCXJldHVybiAiRk9SRUlHTiBEQVRB IFdSQVBQRVIiOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJCXJldHVybiAiU0VS VkVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9SRUlHTiBU QUJMRSI7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElPTiI7CisJ CWNhc2UgT0JKRUNUX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JKRUNUX0xB TkdVQUdFOgorCQkJcmV0dXJuICJMQU5HVUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNU OgorCQkJcmV0dXJuICJMQVJHRSBPQkpFQ1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJ cmV0dXJuICJNQVRFUklBTElaRUQgVklFVyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQly ZXR1cm4gIk9QRVJBVE9SIENMQVNTIjsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1 cm4gIk9QRVJBVE9SIjsKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4gIk9QRVJB VE9SIEZBTUlMWSI7CisJCWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXJldHVybiAiUE9MSUNZIjsK KwkJY2FzZSBPQkpFQ1RfUk9MRToKKwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JV TEU6CisJCQlyZXR1cm4gIlJVTEUiOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4g IlNDSEVNQSI7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJcmV0dXJuICJTRVFVRU5DRSI7 CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQkJcmV0dXJuICJUQUJMRSI7CisJCWNhc2UgT0JKRUNU X1RBQkxFU1BBQ0U6CisJCQlyZXR1cm4gIlRBQkxFU1BBQ0UiOworCQljYXNlIE9CSkVDVF9UUklH R0VSOgorCQkJcmV0dXJuICJUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9O OgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIjsKKwkJLyoKKwkJY2FzZSBP QkpFQ1RfVFNDT05GSUdfTUFQUElORzoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiBNQVBQSU5HIjsKKwkJKi8KKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0 dXJuICJURVhUIFNFQVJDSCBESUNUSU9OQVJZIjsKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJ CQlyZXR1cm4gIlRFWFQgU0VBUkNIIFBBUlNFUiI7CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6 CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIFRFTVBMQVRFIjsKKwkJY2FzZSBPQkpFQ1RfVFlQRToK KwkJCXJldHVybiAiVFlQRSI7CisJCWNhc2UgT0JKRUNUX1VTRVJfTUFQUElORzoKKwkJCXJldHVy biAiVVNFUiBNQVBQSU5HIjsKKwkJY2FzZSBPQkpFQ1RfVklFVzoKKwkJCXJldHVybiAiVklFVyI7 CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAl ZCIsIG9ianR5cGUpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwg cmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBp cyBleHBhbmRlZCBmdWxseSwgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBp biB0aGUKKyAqIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2RkbF9k ZXBhcnNlX3RvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5kICpj bWQgPSAoQ29sbGVjdGVkQ29tbWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFyCQkg ICAqY29tbWFuZDsKKworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRy dWUpOworCisJaWYgKGNvbW1hbmQpCisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 KGNvbW1hbmQpKTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFsdGVyRnVuY3Rpb25TdG10IChBTFRFUiBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0 aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNP TgorICogYmxvYiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlBbHRlckZ1bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAq KSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJGdW5jOworCU9ialRyZWUJICAgKnNpZ247 CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAg KnBhcmFtcyA9IE5JTDsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVu Y3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3Bn X3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIEFMVEVSIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAq LworCWFsdGVyRnVuYyA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJ LyoKKwkgKiBBTFRFUiBGVU5DVElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNh biB1c2UgY2F0YWxvZworCSAqIHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChp ID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZQkgICAqdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqLCAidHlwZSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NG b3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFy YW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRy ZWUoIiIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7 YXJndW1lbnRzOiwgfXMpIiwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy RnVuYywgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0 aW9ucykKKwl7CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CQlPYmpUcmVlCSAgICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo c3RyVmFsKGRlZmVsLT5hcmcpLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShp bnRWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVU IiA6CisJCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlm IChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJ VFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09G IiA6ICJOT1QgTEVBS1BST09GIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAiY29zdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJD T1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJICJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJ CQkgZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInJvd3MiKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi Uk9XUyIsIDApOworCQkJaWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBw ZW5kX2Zsb2F0X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1l cmljKGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0 IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0 bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJn cyhzc3RtdCk7CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQs IHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAic3VwcG9ydCIpID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnBy b3N1cHBvcnQpOworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQg ZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29r dXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0g SU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIs CisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAx LAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVM TCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJj bXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIgKmZtdCA9 IHBzcHJpbnRmKCJQQVJBTExFTCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisJCQl0bXBvYmog PSBuZXdfb2JqdHJlZShmbXQpOworCQl9CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVy RnVuYywgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisKKwlyZXR1cm4gYWx0ZXJGdW5jOworfQorCisvKgorICogZGVwYXJzZSBhbiBBTFRF UiAuLi4gU0VUIFNDSEVNQSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyT2JqZWN0U2NoZW1hU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNl dHJlZSwKKwkJCQkJCQkgIE9iamVjdEFkZHJlc3Mgb2xkc2NoZW1hKQoreworCUFsdGVyT2JqZWN0 U2NoZW1hU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqaWRlbnRp dHk7CisJY2hhcgkgICAqbmV3c2NoZW1hOworCWNoYXIJICAgKm9sZHNjaG5hbWU7CisJY2hhcgkg ICAqaWRlbnQ7CisKKwluZXdzY2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAl e25ld3NjaGVtYX1JCisJICovCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzIiwgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkpOworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKGZt dCk7CisKKwkvKgorCSAqIFNpbmNlIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNl IGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRp dHkgcmV0dXJucyB0aGUgb2JqZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQg c2NoZW1hLiAgVGhlIG91dHB1dCBvZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmln aW5hbAorCSAqIHNjaGVtYSBuYW1lIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1l IG9mZiB0aGUgaWRlbnRpdHkgc3RyaW5nCisJICogYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVk IHNjaGVtYSBuYW1lLgorCSAqCisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdl IGRvIGJldHRlcj8KKwkgKi8KKwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNz LCBmYWxzZSk7CisJb2xkc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2Jq ZWN0SWQpOworCWlmICghb2xkc2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHNjaGVtYSB3aXRoIE9JRCAldSIsCisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsK KworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUp LAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7 CisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiJXtpZGVudGl0eX1zIiwgaWRlbnQp OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJTdG10LCAiU0VUIFNDSEVNQSAle25ld3Nj aGVtYX1JIiwgbmV3c2NoZW1hKTsKKworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgR1JBTlQvUkVWT0tFIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfR3JhbnRTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50 ICppc3RtdDsKKwlPYmpUcmVlCSAgICpncmFudFN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJ ICAgKm9ianR5cGU7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJ CWNsYXNzSWQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJaXN0bXQgPSBjbWQtPmQuZ3JhbnQuaXN0 bXQ7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBvYmplY3RzIGZyb20gIkFMTCAuLi4gSU4g U0NIRU1BIiB0byBiZSBncmFudGVkLCB0aGVuCisJICogd2UgbmVlZCBub3QgZG8gYW55dGhpbmcu CisJICovCisJaWYgKGlzdG10LT5vYmplY3RzID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlz d2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNl IE9CSkVDVF9UQUJMRToKKwkJCW9ianR5cGUgPSAiVEFCTEUiOworCQkJY2xhc3NJZCA9IFJlbGF0 aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCW9i anR5cGUgPSAiU0VRVUVOQ0UiOworCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQlvYmp0eXBlID0gIkRPTUFJTiI7CisJ CQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRkRX OgorCQkJb2JqdHlwZSA9ICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCQljbGFzc0lkID0gRm9y ZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JF SUdOX1NFUlZFUjoKKwkJCW9ianR5cGUgPSAiRk9SRUlHTiBTRVJWRVIiOworCQkJY2xhc3NJZCA9 IEZvcmVpZ25TZXJ2ZXJSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNU SU9OOgorCQkJb2JqdHlwZSA9ICJGVU5DVElPTiI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVs YXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlvYmp0eXBl ID0gIlBST0NFRFVSRSI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJb2JqdHlwZSA9ICJST1VUSU5FIjsKKwkJ CWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNU X0xBTkdVQUdFOgorCQkJb2JqdHlwZSA9ICJMQU5HVUFHRSI7CisJCQljbGFzc0lkID0gTGFuZ3Vh Z2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJ b2JqdHlwZSA9ICJMQVJHRSBPQkpFQ1QiOworCQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRp b25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlND SEVNQSI7CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9UWVBFOgorCQkJb2JqdHlwZSA9ICJUWVBFIjsKKwkJCWNsYXNzSWQgPSBUeXBl UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBP QkpFQ1RfVEFCTEVTUEFDRToKKwkJCW9ianR5cGUgPSAiIjsKKwkJCWNsYXNzSWQgPSBJbnZhbGlk T2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVl ICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdSQU5UIFRPIG9yIFJFVk9LRSBGUk9N ICovCisJaWYgKGlzdG10LT5pc19ncmFudCkKKwkJZm10ID0gcHNwcmludGYoIkdSQU5UIik7CisJ ZWxzZQorCQlmbXQgPSBwc3ByaW50ZigiUkVWT0tFIik7CisKKwlncmFudFN0bXQgPSBuZXdfb2Jq dHJlZV9WQShmbXQsIDApOworCisJLyogYnVpbGQgbGlzdCBvZiBwcml2aWxlZ2VzIHRvIGdyYW50 L3Jldm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkFMTCBQUklWSUxFR0VTIiwgMCk7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlCisJeworCQlsaXN0ID0gTklMOworCisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9JTlNFUlQpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfU0VMRUNUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlNF TEVDVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9ERUxFVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiREVMRVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xf VFJVTkNBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVFJV TkNBVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVOQ0VTKQorCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlJFRkVSRU5DRVMiKSk7CisJ CWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUklHR0VSKQorCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRSSUdHRVIiKSk7CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9FWEVDVVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QoIkVYRUNVVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VU0FHRSkK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJVU0FHRSIpKTsKKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDUkVBVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9DUkVBVEVfVEVNUCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KCJURU1QT1JBUlkiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DT05O RUNUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNPTk5FQ1Qi KSk7CisKKwkJaWYgKCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRfb3B0aW9ufXMiLAorCQkJ CQkJCQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ICAiR1JBTlQgT1BUSU9OIEZPUiIgOiAiIik7CisK KwkJaWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAgICpvY2Vs bDsKKworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJCXsKKwkJCQlBY2Nl c3NQcml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0ICAgKmNvbHMgPSBOSUw7CisK KwkJCQl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJCQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xz KQorCQkJCXsKKwkJCQkJU3RyaW5nICpjb2xuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxs KTsKKworCQkJCQljb2xzID0gbGFwcGVuZChjb2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29i amVjdChzdHJWYWwoY29sbmFtZSkpKTsKKwkJCQl9CisJCQkJYXBwZW5kX2FycmF5X29iamVjdCh0 bXAsICIoJXtjb2xzOiwgfXMpIiwgY29scyk7CisKKwkJCQlpZiAocHJpdi0+cHJpdl9uYW1lID09 IE5VTEwpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdn1zIiwg IkFMTCBQUklWSUxFR0VTIik7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChn cmFudFN0bXQsICIle3ByaXZ9cyIsIHByaXYtPnByaXZfbmFtZSk7CisKKwkJCQlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCX0KKwkJfQorCX0KKwlhcHBl bmRfYXJyYXlfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdmlsZWdlczosIH1zIE9OIiwgbGlzdCk7 CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle29ianR5cGV9cyIsIG9ianR5 cGUpOworCisJLyogdGFyZ2V0IG9iamVjdHMuICBXZSB1c2Ugb2JqZWN0IGlkZW50aXRpZXMgaGVy ZSAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+b2JqZWN0cykKKwl7CisJ CU9pZAkJb2JqaWQgPSBsZmlyc3Rfb2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFkZHI7CisK KwkJYWRkci5jbGFzc0lkID0gY2xhc3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlkOworCQlh ZGRyLm9iamVjdFN1YklkID0gMDsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0 eX1zIiwgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSAg IGdldE9iamVjdElkZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdy YW50U3RtdCwgIiV7cHJpdnRhcmdldDosIH1zIiwgbGlzdCk7CisKKwlpZiAoaXN0bXQtPmlzX2dy YW50KQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhncmFudFN0bXQsICJUTyIpOworCWVsc2UKKwkJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcoZ3JhbnRTdG10LCAiRlJPTSIpOworCisJLyogbGlzdCBvZiBn cmFudGVlcyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+Z3JhbnRlZXMp CisJeworCQlPaWQJCWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwpOworCisJCXRtcCA9IG5ld19v Ymp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50U3Rt dCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxpc3QpOworCisJLyogdGhlIHdvcmRpbmcgb2YgdGhlIGdy YW50IG9wdGlvbiBpcyB2YXJpYWJsZSAuLi4gKi8KKwlpZiAoaXN0bXQtPmlzX2dyYW50KQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle2dyYW50X29wdGlvbn1zIiwKKwkJCQkJ CQkgaXN0bXQtPmdyYW50X29wdGlvbiA/ICAiV0lUSCBHUkFOVCBPUFRJT04iIDogIiIpOworCisJ aWYgKGlzdG10LT5ncmFudG9yX3VpZCkKKwl7CisJCUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJ ICAgKnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmpl Y3RJZEdldERhdHVtKGlzdG10LT5ncmFudG9yX3VpZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQocm9sdHVwKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5E RUZJTkVEX09CSkVDVCksCisJCQkJCSBlcnJtc2coInJvbGUgd2l0aCBPSUQgJXUgZG9lcyBub3Qg ZXhpc3QiLCBpc3RtdC0+Z3JhbnRvcl91aWQpKSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgo Rm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIkdSQU5URUQgQlkgJXtyb2xlbmFtZX1zIiwgcm9sZW5h bWUpOworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisKKwlpZiAoIWlzdG10LT5pc19n cmFudCkKKwl7CisJCWlmIChpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKQorCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtjYXNjYWRlfXMiLCAiQ0FTQ0FERSIpOwor CQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle2Nhc2NhZGV9cyIs ICIiKTsKKwl9CisKKwlyZXR1cm4gZ3JhbnRTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBB bHRlck9wZXJhdG9yU3RtdCAoQUxURVIgT1BFUkFUT1IgLi4uIFNFVCAuLi4pLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIAlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0 bXQgKm5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAg ICphbHRlcm9wOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKwlMaXN0Q2VsbAkgICAqY2Vs bDsKKwlMaXN0CQkgICAqbGlzdCA9IE5JTDsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShP UEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVy YXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0 b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJ ICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5 cGV9VCkgU0VUCisJICogKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlhbHRlcm9wID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJG b3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wckZvcm0tPm9wcm5h bWUpKSk7CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVm dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9VCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxz ZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlcm9wLCAiKCV7bGVmdF90eXBlfXMiLCAiTk9O RSIpOworCisJLyogUklHSFRBUkcgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJs ZWZ0KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIiwgJXtyaWdodF90eXBlfVQp IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsK KworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgKnRtcG9iaiA9IE5VTEw7CisKKwkJ aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAicmVzdHJpY3QiKSA9PSAwKQorCQl7CisJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicmVzdHJpY3QiKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cnJlc3QpKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJOT05FIik7CisJ CX0KKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJqb2luIikgPT0gMCkKKwkJewor CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3By am9pbikpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UKKwkJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJ fQorCisJCUFzc2VydCh0bXBvYmopOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyb3AsICJT RVQgKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJUdXApOwor CisJcmV0dXJuIGFsdGVyb3A7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIE9QRVJBVE9S IEZBTUlMWSBBREQvRFJPUCBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUJICAgKmFs dGVyT3BGYW07CisJQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQgPSAoQWx0ZXJPcEZhbWlseVN0bXQg KikgY21kLT5wYXJzZXRyZWU7CisJSGVhcFR1cGxlCWZ0cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9w ZkZvcm07CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZnRwID0gU2Vh cmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkg JXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2Ft bmFtZX1JIEFERC9EUk9QCisJICogJXtpdGVtczosIH1zCisJICovCisJYWx0ZXJPcEZhbSA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EICIKKwkJCQkJ CQkJIlVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJ CSJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBzdG10LT5hbW5hbWUpOworCisJbGlzdCA9IE5JTDsK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1l bWJlciAqb3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCS8q CisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVy YXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCSAibnVtIiwg T2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBu YW1lOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNE cm9wKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJhdG9yfU8i LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKwkJfQorCisJCS8qIEFkZCB0aGUg dHlwZXMgKi8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiKCV7bHR5cGV9VCwiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBT RUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlp ZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxp ZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsICJG T1IgU0VBUkNIIik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJlZQkgICAqdG1wb2JqMjsKKwor CQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZIiwgMCk7CisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7b3BmYW1pbHl9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCQl9CisJCX0KKworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwlmb3JlYWNo KGNlbGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnBy b2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRlVOQ1RJT04gJXtudW19biAoJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwg MywKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJ ICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHBy b2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZyB0eXBlczsgdGhlIERST1AgY2FzZSBkb2Vzbid0 IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXBy b2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBl czsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0 KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJ CQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQkJcHJv YXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQkJZm9yIChpID0gMDsg aSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJeworCQkJCU9ialRyZWUJICAgKmFyZzsK KworCQkJCWFyZyA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2FyZ3R5cGVzW2ldLCAtMSk7CisJ CQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJ CQl9CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZnVuY3Rpb259RCIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOworCisJCQlhcHBl bmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cG9iaiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQkJYXBwZW5kX2Zvcm1hdF9zdHJp bmcodG1wb2JqLCAiKSIpOworCisJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJCX0KKwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisK KwlpZiAoc3RtdC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAi RFJPUCIpOworCWVsc2UKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJPcEZhbSwgIkFERCIp OworCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlck9wRmFtLCAiJXtpdGVtczosIH1zIiwgbGlz dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiBhbHRlck9wRmFtOworfQor CisvKgorICogRGVwYXJzZSBhIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIgVE8gLi4u KS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RB ZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9k ZSA9IChBbHRlck93bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKm93bmVyU3Rt dDsKKwljaGFyCQkgICAqZm10OworCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50 aXR5fXMgT1dORVIgVE8gJSV7bmV3b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqZWN0VHlwZSkpOworCisJb3duZXJTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAy LAorCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2Jq ZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCQkgICAibmV3b3duZXIiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCSAgIGdldF9yb2xlc3BlY19uYW1lKG5vZGUtPm5ld293bmVyKSk7 CisKKwlyZXR1cm4gb3duZXJTdG10OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0 bXQuCisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9k aWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNv bW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJTZXFTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJCSphbHRlclNlcTsKKwlPYmpU cmVlCQkqdG1wb2JqOworCVJlbGF0aW9uCSByZWxhdGlvbjsKKwlGb3JtX3BnX3NlcXVlbmNlX2Rh dGEgc2VxZGF0YTsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOwor CUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNl cXR1cGxlOworCUFsdGVyU2VxU3RtdCAqYWx0ZXJTZXFTdG10ID0gKEFsdGVyU2VxU3RtdCAqKSBw YXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0 IHNlcGFyYXRlbHkodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJu IGVtcHR5IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQly ZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsK KworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7 CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1 cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1 IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNU UlVDVChzZXF0dXBsZSk7CisKKwlhbHRlclNlcSA9IG5ld19vYmp0cmVlKCJBTFRFUiBTRVFVRU5D RSIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs YXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgIiV7aWRlbnRpdHl9RCIs IHRtcG9iaik7CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZSkt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2Fj aGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUoYWx0ZXJTZXEsIHNlcWZv cm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjeWNsZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DeWNsZShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShhbHRlclNlcSwgc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKGFsdGVyU2VxLCBzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWF4dmFsdWUiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWF4dmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZh bHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNl KTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoYWx0ZXJTZXEsIHNlcWRhdGEpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm93bmVkX2J5IikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX093bmVkQnkoYWx0ZXJTZXEsIG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UK KwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5h bWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlhcHBlbmRf YXJyYXlfb2JqZWN0KGFsdGVyU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYWx0ZXJTZXE7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGFuIEFsdGVyVHlwZVN0bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBw YXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl clR5cGVTZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQg KmFsdGVyVHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKWNtZDsKKwlPYmpUcmVlCQkqYWx0 ZXJUeXBlOworCUxpc3RDZWxsICAgKnBsOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUhlYXBU dXBsZSAgIHR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJj aFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9w Z190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCWFsdGVyVHlwZSA9IG5ld19vYmp0cmVlKCJB TFRFUiBUWVBFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUeXBlLCAiJXtpZGVudGl0 eX1EIFNFVCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJZm9yZWFjaChwbCwgYWx0ZXJUeXBl U2V0U3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikg bGZpcnN0KHBsKTsKKwkJT2JqRWxlbSAqbmV3ZWxtOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzdG9yYWdlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdG9yYWdl KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyZWNl aXZlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9SZWNlaXZlKGFsdGVyVHlwZSwg dHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZW5kIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TZW5kKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9UeXBlX1R5cG1vZF9JbihhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAidHlwbW9kX291dCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfVHlwbW9kX091dChhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAiYW5hbHl6ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfQW5hbHl6 ZShhbHRlclR5cGUsIHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vi c2NyaXB0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoYWx0ZXJU eXBlLCB0eXBGb3JtKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgdHlwZSBvcHRp b24gJXMiLCBkZWZlbC0+ZGVmbmFtZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdl bG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJUeXBlLCAiKCV7ZGVmaW5pdGlv bjogfXMpIiwgZWxlbXMpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4g YWx0ZXJUeXBlOworfQorCisvKgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10IChDUkVB VEUgVFlQRSBBUykKKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21wb3NpdGVU eXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21wb3NpdGVUeXBl U3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkg ICAqY29tcG9zaXRlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBlIHR5cGZvcm07 CisJUmVsYXRpb24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlzdAkgICAqdGFi bGVlbHRzID0gTklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQgb3BlbiB0aGUg Y29ycmVzcG9uZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR5cHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlICV1 Iiwgb2JqZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVw KTsKKwl0eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50eXByZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHR5cGVyZWwp KTsKKworCWNvbXBvc2l0ZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNvbXBvc2l0ZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBv YmplY3RJZCkpOworCisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWws IG5vZGUtPmNvbGRlZmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCQkvKiBub3Qg dHlwZWQgKi8KKwkJCQkJCQkJCSAgdHJ1ZSk7CQkvKiBjb21wb3NpdGUgdHlwZSAqLworCisJYXBw ZW5kX2FycmF5X29iamVjdChjb21wb3NpdGUsICJBUyAoJXtjb2x1bW5zOiwgfXMpIiwgdGFibGVl bHRzKTsKKworCXRhYmxlX2Nsb3NlKHR5cGVyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFz ZVN5c0NhY2hlKHR5cHR1cCk7CisKKwlyZXR1cm4gY29tcG9zaXRlOworfQorCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSGVhcFR1cGxlICAgY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJRm9y bV9wZ19jb252ZXJzaW9uIGNvbkZvcm07CisJT2JqVHJlZQkgICAqY2NTdG10LCAqdG1wT2JqOwor CisJY29udnJlbCA9IHRhYmxlX29wZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJY29uVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVt X3BnX2NvbnZlcnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNv blR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9u IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9u KSBHRVRTVFJVQ1QoY29uVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9 TCBUTyAle2Rlc3R9TAorCSAqIEZST00gJXtmdW5jdGlvbn1ECisJICovCisJY2NTdG10ID0gbmV3 X29ianRyZWUoIkNSRUFURSIpOworCisKKwkvKiBBZGQgdGhlIERFRkFVTFQgY2xhdXNlICovCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiZGVmYXVsdCIsCisJCQkJCQkgY29uRm9ybS0+ Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCXRtcE9iaiA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShjb25Gb3JtLT5jb25uYW1lc3BhY2UsIE5hbWVTdHIoY29uRm9ybS0+Y29ubmFt ZSkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkNPTlZFUlNJT04gJXtpZGVudGl0 eX1EIiwgdG1wT2JqKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjY1N0bXQsICJGT1IgJXtzb3Vy Y2V9TCIsIChjaGFyICopCisJCQkJCQkgcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25m b3JlbmNvZGluZykpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIlRPICV7ZGVzdH1M IiwgKGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5j b2RpbmcpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjY1N0bXQsICJGUk9NICV7ZnVuY3Rpb259 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxlX2Nsb3NlKGNv bnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY2NTdG10OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoKKyAqIEdp dmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVudW1TdG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICplbnVtdHlwZTsKKwlMaXN0CSAgICp2YWx1ZXM7 CisJTGlzdENlbGwgICAqY2VsbDsKKworCWVudW10eXBlID0gbmV3X29ianRyZWUoIkNSRUFURSBU WVBFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoZW51bXR5cGUsICIle2lkZW50aXR5fUQiLAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCXZhbHVlcyA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5v ZGUtPnZhbHMpCisJeworCQlTdHJpbmcgICAqdmFsID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxs KTsKKworCQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFs KHZhbCkpKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGVudW10eXBlLCAiQVMgRU5VTSAo JXt2YWx1ZXM6LCB9TCkiLCB2YWx1ZXMpOworCXJldHVybiBlbnVtdHlwZTsKK30KKworLyoKKyAq IGRlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdAorICoJCWRlcGFyc2UgYSBDcmVhdGVFeHRlbnNp b25TdG10CisgKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZUV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChDcmVhdGVFeHRlbnNpb25TdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0VHVwOworCUZv cm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqZXh0U3RtdDsKKwlPYmpUcmVl CSAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIEVYVEVOU0lPTiAle2lmX25vdF9leGlz dHN9cyAle2lkZW50aXR5fUkgJXtvcHRpb25zOiB9cworCSAqLworCisJcGdfZXh0ZW5zaW9uID0g dGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWV4dFR1 cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBBbnVtX3BnX2V4dGVu c2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNU UlVDVChleHRUdXApOworCisJZXh0U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRVhURU5TSU9O Iik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMi LAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChleHRTdG10LCAiJXtuYW1lfUkiLCBub2RlLT5leHRuYW1l KTsKKworCS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxs LCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0 KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJ eworCQkJLyogc2tpcCB0aGlzIG9uZTsgd2UgYWRkIG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cg Ki8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJu ZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9O ICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNp b24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0 KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQor CQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJmcm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwg T2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwg InVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRo ZSBTQ0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVt YX1JIiwKKwkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJ ICJzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRG b3JtLT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIGRvbmUgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGV4dFN0bXQs ICIle29wdGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZXh0U3RtdDsKK30KKworLyoKKyAqIElmIGEgY29s dW1uIG5hbWUgaXMgc3BlY2lmaWVkLCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBp dCdzIGEKKyAqIHRhYmxlLWxldmVsIG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMsIGNoYXIgKmNvbG5hbWUpCit7CisJT2JqVHJl ZQkgICAqdG1wOworCisJaWYgKGNvbG5hbWUpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSIsCisJCQkJCQkJIDEsICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBjb2xuYW1lKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPUFRJT05TIiwgMCk7 CisKKwlpZiAob3B0aW9ucyAhPSBOSUwpCisJeworCQlMaXN0CSAgICpvcHRvdXQgPSBOSUw7CisJ CUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBvcHRpb25zKQorCQl7CisJCQlE ZWZFbGVtCSAgICplbGVtOworCQkJT2JqVHJlZQkgICAqb3B0OworCisJCQllbGVtID0gKERlZkVs ZW0gKikgbGZpcnN0KGNlbGwpOworCisJCQlzd2l0Y2ggKGVsZW0tPmRlZmFjdGlvbikKKwkJCXsK KwkJCQljYXNlIERFRkVMRU1fVU5TUEVDOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiJXts YWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcs IGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdl dEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2Fz ZSBERUZFTEVNX1NFVDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIlNFVCAle2xhYmVsfUkg JXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkg ZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVh bihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVM RU1fQUREOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiQUREICV7bGFiZWx9SSAle3ZhbHVl fUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1l LAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5h cmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0p ID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9EUk9Q OgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle2xhYmVsfUkiLCAxLAorCQkJCQkJ CQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lKTsKKwkJCQkJYnJlYWs7 CisJCQkJZGVmYXVsdDoKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgZGVmIGFjdGlvbiAlZCIs IGVsZW0tPmRlZmFjdGlvbik7CisJCQkJCW9wdCA9IE5VTEw7CisJCQl9CisKKwkJCW9wdG91dCA9 IGxhcHBlbmQob3B0b3V0LCBuZXdfb2JqZWN0X29iamVjdChvcHQpKTsKKwkJfQorCisJCWFwcGVu ZF9hcnJheV9vYmplY3QodG1wLCAiKCV7b3B0aW9uOiAsfXMpIiwgb3B0b3V0KTsKKwl9CisJZWxz ZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVy biB0bXA7Cit9CisKKy8qCisgKiBkZXBhcnNlX0NyZWF0ZUZkd1N0bXQKKyAqICAgRGVwYXJzZSBh IENyZWF0ZUZkd1N0bXQgKENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZl biBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwKKyAqIHJl dHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUZkd1N0bXQgKm5vZGUgPSAoQ3JlYXRlRmR3U3RtdCAq KSBwYXJzZXRyZWU7CisJSGVhcFR1cGxlCQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFf d3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKworCU9ialRyZWUJICAgKmNyZWF0ZVN0 bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdy YXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyICV1Iiwgb2Jq ZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRT VFJVQ1QoZmR3VHVwKTsKKworCWNyZWF0ZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEZP UkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyogYWRkIEhB TkRMRVIgY2xhdXNlICovCisJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIgPT0gSW52YWxpZE9pZCkK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIEhBTkRMRVIiLCAwKTsKKwllbHNlCisJeworCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkg ImhhbmRsZXIiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hh bmRsZXIpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aGFuZGxl cn1zIiwgdG1wKTsKKworCS8qIGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJaWYgKGZkd0Zvcm0t PmZkd3ZhbGlkYXRvciA9PSBJbnZhbGlkT2lkKQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8g VkFMSURBVE9SIiwgMCk7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElE QVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInZhbGlkYXRvciIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3ZhbGlkYXRvcn1zIiwgdG1wKTsKKworCS8q IGFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0 aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsK Kwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0 bXQ7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVyRmR3U3RtdAorICogIERlcGFyc2UgYW4gQWx0 ZXJGZHdTdG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhIGZ1 bmN0aW9uIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIHRoZQor ICogSlNPTiBibG9iIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQWx0ZXJGZHdTdG10ICpub2RlID0gKEFsdGVyRmR3U3RtdCAqKSBwYXJzZXRy ZWU7CisJSGVhcFR1cGxlCQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBm ZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlCSAgICphbHRlclN0bXQ7CisJTGlzdAkg ICAqZmR3X29wdGlvbnMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxl X29wZW4oRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisK KwlmZHdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJ CSBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZk d1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRh dGEgd3JhcHBlciAldSIsIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWdu X2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlhbHRlclN0bXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJ CQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25h bWUpKTsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRvIHNlZSB3aGF0IGNo YW5nZWQsIGJ1dCB1c2UgY2F0YWxvZyBhcyBiYXNpcworCSAqIGZvciBuZXcgdmFsdWVzLgorCSAq LworCWZvcmVhY2goY2VsbCwgbm9kZS0+ZnVuY19vcHRpb25zKQorCXsKKwkJRGVmRWxlbQkgICAq ZWxlbTsKKwkJT2JqVHJlZQkgICAqdG1wOworCisJCWVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJ aWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ZGVmbmFtZSwgImhhbmRsZXIiKSA9PSAwKQorCQl7CisJ CQkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8KKwkJCWlmIChmZHdGb3JtLT5mZHdoYW5kbGVyID09 IEludmFsaWRPaWQpCisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIk5PIEhBTkRMRVIiLCAwKTsK KwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2Nl ZHVyZX1EIiwgMSwKKwkJCQkJCQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkg ZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZk d19vcHRpb25zLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlIGlmIChwZ19z dHJjYXNlY21wKGVsZW0tPmRlZm5hbWUsICJ2YWxpZGF0b3IiKSA9PSAwKQorCQl7CisJCQkvKiBh ZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCQkJaWYgKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvciA9PSBJ bnZhbGlkT2lkKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBWQUxJREFUT1IiLCAwKTsK KwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJv Y2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVu ZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwl9CisKKwkvKiBB ZGQgSEFORExFUi9WQUxJREFUT1IgaWYgc3BlY2lmaWVkICovCisJYXBwZW5kX2FycmF5X29iamVj dChhbHRlclN0bXQsICIle2Zkd19vcHRpb25zOiB9cyIsIGZkd19vcHRpb25zKTsKKworCisJLyog YWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChh bHRlclN0bXQsICIle2dlbmVyaWNfb3B0aW9uc31EIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlv bnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJ dGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBhbHRlclN0bXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgQVMgUkFOR0Ugc3RhdGVtZW50Cisg KgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJICAgKnJhbmdlOworCU9ialRyZWUJ ICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCVJlbGF0aW9uCXBnX3Jhbmdl OworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlGb3JtX3BnX3JhbmdlIHJhbmdlRm9ybTsKKwlTY2Fu S2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRlc2Mgc2NhbjsKKworCXBnX3JhbmdlID0gdGFibGVf b3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQo JmtleVswXSwKKwkJCQlBbnVtX3BnX3JhbmdlX3JuZ3R5cGlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3JhbmdlLCBSYW5nZVR5cGlkSW5kZXhJZCwgdHJ1 ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7CisKKwlyYW5nZVR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJhbmdlVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJhbmdlIHdpdGggdHlwZSBvaWQgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9IChGb3JtX3BnX3JhbmdlKSBHRVRTVFJVQ1QocmFu Z2VUdXApOworCisJcmFuZ2UgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUiLCAwKTsKKwl0 bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElk KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyYW5nZSwgIiV7aWRlbnRpdHl9RCBBUyBSQU5HRSIs IHRtcCk7CisKKwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ3N1YnR5cGUpOwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLAorCQkJCQkJIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0eXBlIiwKKwkJCQkJCSAidHlwZSIs IE9ialR5cGVPYmplY3QsIHRtcCk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8KKwlpZiAo T2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFzc1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJICBy YW5nZUZvcm0tPnJuZ3N1Ym9wYyk7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX09Q Q0xBU1MgPSAle29wY2xhc3N9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAib3BjbGFzcyIsCisJCQkJCQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVjdCwg dG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCisJLyogQ09MTEFUSU9OICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VG b3JtLT5ybmdjb2xsYXRpb24pKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2NvbGxh dGlvbik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAle2NvbGxhdGlvbn1E IiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRp b24iLAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5p dGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CisJLyogQ0FOT05JQ0FMICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5vbmlj YWwpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCk7CisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJDQU5PTklDQUwgPSAle2Nhbm9uaWNhbH1EIiwKKwkJCQkJCQkgMiwK KwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYW5vbmljYWwiLAorCQkJCQkJCSAi Y2Fub25pY2FsIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQo ZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogU1VCVFlQRV9E SUZGICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IlNVQlRZUEVfRElGRiA9ICV7c3VidHlwZV9kaWZmfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGVfZGlmZiIsCisJCQkJCQkJICJzdWJ0eXBl X2RpZmYiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZp bml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJhbmdlLCAiKCV7ZGVmaW5pdGlvbjosIH1zKSIsIGRlZmluaXRpb24pOworCisJc3lzdGFi bGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhjbHVzaXZlTG9j ayk7CisKKwlyZXR1cm4gcmFuZ2U7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51bVN0 bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckVudW1TdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRW51bVN0bXQgKm5vZGUgPSAoQWx0ZXJFbnVt U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0ZXJFbnVtOworCisJYWx0ZXJFbnVt ID0JbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUiLCAwKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChhbHRlckVudW0sICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCWlm ICghbm9kZS0+b2xkVmFsKQorCXsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoYWx0ZXJFbnVtLCAi QUREIFZBTFVFIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7aWZfbm90 X2V4aXN0c31zIiwKKwkJCQkJCQlub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMgPyAiSUYgTk9UIEVY SVNUUyIgOiAiIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXt2YWx1 ZX1MIiwgbm9kZS0+bmV3VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFsTmVpZ2hib3IpCisJCXsK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7YWZ0ZXJfb3JfYmVmb3JlfXMi LAorCQkJCQkJCQlub2RlLT5uZXdWYWxJc0FmdGVyID8gIkFGVEVSIiA6ICJCRUZPUkUiKTsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7bmVpZ2hib3VyfUwiLCBub2RlLT5u ZXdWYWxOZWlnaGJvcik7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoYWx0ZXJFbnVtLCAiUkVOQU1FIFZBTFVFICV7dmFsdWV9TCBUTyIsCisJCQkJCQkJIG5vZGUt Pm9sZFZhbCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7bmV3dmFsdWV9 TCIsCisJCQkJCQkJIG5vZGUtPm5ld1ZhbCk7CisJfQorCisJcmV0dXJuIGFsdGVyRW51bTsKK30K KworLyoKKyAqIERlcGFyc2UgQUxURVIgRVhURU5TSU9OIC4uIFVQREFURSBUTyBWRVJTSU9OCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChB bHRlckV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uICAgIHBnX2V4dGVuc2lv bjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlP YmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVu c2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgIG9iamVj dElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZXh0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0 SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChleHRUdXApOwor CisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0eX1EIFVQ REFURSIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShleHRGb3JtLT5leHRuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgICBOYW1lU3RyKGV4dEZvcm0tPmV4dG5hbWUpKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsK KwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2Jq VHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVmbmFtZSk7CisJfQorCisJYXBwZW5kX2FycmF5 X29iamVjdChzdG10LCAiJXtvcHRpb25zOiB9cyIsIGxpc3QpOworCisJdGFibGVfY2xvc2UocGdf ZXh0ZW5zaW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisg KiBBTFRFUiBFWFRFTlNJT04gZXh0IEFERC9EUk9QIG9iamVjdAorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlLAorCQkJCQkJCQkgICBPYmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7 CisJQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250 ZW50c1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKnN0bXQ7CisJY2hhcgkgICAqZm10 OworCisJQXNzZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5hY3Rpb24gPT0gLTEpOwor CisJZm10ID0gcHNwcmludGYoIkFMVEVSIEVYVEVOU0lPTiAlJXtleHRpZGVudGl0eX1JICVzICVz ICUle29iamlkZW50aXR5fXMiLAorCQkJCSAgIG5vZGUtPmFjdGlvbiA9PSArMSA/ICJBREQiIDog IkRST1AiLAorCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUpKTsKKworCXN0 bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsICJleHRpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgIG5vZGUtPmV4dG5hbWUsCisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgIGdldE9iamVjdElkZW50aXR5KCZvYmplY3RBZGRyZXNzLCBmYWxzZSkp OworCisJcmV0dXJuIHN0bXQ7Cit9CisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVDYXN0U3RtdC4K KyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmll ZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29t bWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChD cmVhdGVDYXN0U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVw bGUJY2FzdFR1cDsKKwlGb3JtX3BnX2Nhc3QgY2FzdEZvcm07CisJT2JqVHJlZQkgICAqY3JlYXRl Q2FzdDsKKwljaGFyCSAgICpjb250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2FzdFJl bGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29iamVj dF9ieV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9ybV9w Z19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQgQVMgJXt0YXJnZXR0eXBlfVQpICV7 bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMKKwkgKi8KKwljcmVhdGVDYXN0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkiLAorCQkJ CQkJCQkyLCAic291cmNldHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0c291cmNlLCAtMSksCisJCQkJCQkJCSJ0YXJnZXR0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0t PmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9kZS0+aW5vdXQpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgIldJVEggSU5PVVQiKTsKKwllbHNl IGlmIChub2RlLT5mdW5jID09IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNh c3QsICIle21lY2hhbmlzbX1zIiwgIldJVEhPVVQgRlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlP YmpUcmVlCSAgICp0bXBvYmo7CisJCVN0cmluZ0luZm9EYXRhIGZ1bmM7CisJCUhlYXBUdXBsZQlm dW5jVHVwOworCQlGb3JtX3BnX3Byb2MgZnVuY0Zvcm07CisJCWludAkJCWk7CisKKwkJZnVuY1R1 cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBjYXN0Rm9ybS0+Y2FzdGZ1bmMpOworCQlmdW5j Rm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChmdW5jVHVwKTsKKworCQlpbml0U3RyaW5n SW5mbygmZnVuYyk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmZ1bmMsICIlcygiLAorCQkJCQkJcXVv dGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKGZ1bmNGb3JtLT5wcm9u YW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihmdW5jRm9ybS0+cHJvbmFtZSkpKTsK KwkJZm9yIChpID0gMDsgaSA8IGZ1bmNGb3JtLT5wcm9uYXJnczsgaSsrKQorCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVk KGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0No YXIoJmZ1bmMsICcpJyk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJ T04gJXtjYXN0ZnVuY3Rpb259cyIsIDEsCisJCQkJCQkJICJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBl U3RyaW5nLCBmdW5jLmRhdGEpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVDYXN0LCAi JXttZWNoYW5pc219cyIsIHRtcG9iaik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKGZ1bmNUdXApOwor CX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkKKwl7CisJCWNhc2UgQ09FUkNJT05fSU1QTElD SVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lUIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJD SU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0gIkFTIEFTU0lHTk1FTlQiOworCQkJYnJlYWs7 CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJCQljb250ZXh0ID0gIiI7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGNvZXJjaW9uIGNvZGUgJWMiLCBu b2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxMOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICov CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUNhc3QsICIle2NvbnRleHR9cyIsIGNv bnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJl dHVybiBjcmVhdGVDYXN0OworfQorCisvKgorICogRGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBz dWJjb21tYW5kcyBhbmQgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0 ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRhYmxlU3Rt dChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJUYWJsZVN0bXQ7 CisJT2JqVHJlZQkgICAqdG1wb2JqOworCU9ialRyZWUJICAgKnRtcG9iajI7CisJTGlzdAkgICAq ZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpzdWJjbWRzID0gTklMOworCUxp c3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0IGNoYXIgKnJlbHR5cGU7 CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisKKwlBc3Nl cnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4o Y21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0 ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJ CQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJc3dpdGNoIChyZWwtPnJkX3Jl bC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJ Y2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJ CQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJ CXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9U WVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsK KwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFC TEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJs ZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5kICVk IiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIEFMVEVSIHJlbHR5cGUgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zCisJICov CisJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgcmVsdHlwZSk7CisJYWx0ZXJUYWJsZVN0 bXQgPSBuZXdfb2JqdHJlZShmbXRzdHIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVGFibGVTdG10 LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVy VGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVk QVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0 ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlB c3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5z dWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1u UmVjdXJzZToKKwkJCQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdo ZXJlPyAqLworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRy ZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJ IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10c3RyID0g cHNwcmludGYoIkFERCAlcyAlJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJB VFRSSUJVVEUiIDogIkNPTFVNTiIpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0 ciwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJ CQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3Rt dCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1 Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRl eFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJ CUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlk eCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ CQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05T VFJBSU5UICV7bmFtZX1JICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICog JWluZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8K KwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JIiwg MiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQgdXNp bmcgaW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJh aW50X25hbWUoY29uc3RyT2lkKSk7CisKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2Jq LCAiJXtjb25zdHJhaW50X3R5cGV9cyIsIGlzdG10LT5kZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkg IkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIlVTSU5HIElOREVYICV7aW5kZXhfbmFtZX1JIiwKKwkJCQkJCQkJCQkgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7ZGVmZXJyYWJsZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAi REVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtpbml0X2RlZmVycmVkfXMiLCBpc3RtdC0+aW5pdGRlZmVycmVkID8KKwkJ CQkJCQkJCQkgIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOwor CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRD b25zdHJhaW50OgorCQkJY2FzZSBBVF9SZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VS ZWxPcHRpb25zOgorCQkJCS8qIFN1YnR5cGVzIHVzZWQgZm9yIGludGVybmFsIG9wZXJhdGlvbnM7 IG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbHVt blRvVmlldzoKKwkJCQkvKiBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8g aGVyZSAqLworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYg KHN1YmNtZC0+ZGVmID09IE5VTEwpCisJCQkJeworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVt biIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCUxpc3QJICAgKmRwY29udGV4dF9yZWw7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOwor CQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJZHBjb250ZXh0X3JlbCA9IGRlcGFy c2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJ CQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVB dHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8g PSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJ CQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sCisJCQkJCQkJCQkJCQkJCQkJ ICBkcGNvbnRleHRfcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAgTlVMTCkpOworCQkJCQlSZWxlYXNl U3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImRyb3Agbm90IG51bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNF VCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5v dCBudWxsIiwKKwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNT SU9OIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Np b24iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJ CQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNB KHN1YmNtZC0+ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0 bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJ U1RJQ1MgJXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBl IiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIs IE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJ CQkJCSAzLAorCQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3Rp Y3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwK KwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBp bnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAg ZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOwor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQg U1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUsCisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5n KSk7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAor CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJ CQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAi Y29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0 cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BD b2x1bW5SZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJp bnRmKCJEUk9QICVzICUle2NvbHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRF IiA6ICJDT0xVTU4iKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJ ICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlw ZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7Y2FzY2FkZX1zIiwgdG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJ Y29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQg Kikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJ YnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJ CWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5h bHRlclRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywK KwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZp bml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZf Y29tbWFuZF9zaW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlk eCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRk Q29uc3RyYWludDoKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJ CQkvKiBYWFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJ CQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlz bnVsbDsKKwkJCQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3Ry YWludCAqY29uc3RyOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQp KTsKKwkJCQkJY29uc3RyID0gIGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKwor CQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOwor CisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJ ICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBw YXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQs IHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7 CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHRE YXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJp bmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1 cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQURE IENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwg T2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJ CSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJh aW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJP aWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3Ry YWludCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRl cmVkLCBzaWxlbnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQp KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm ZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJu YW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJ CQkJCQkJCSAiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVy cmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5p dF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToK KwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAi Y29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29u c3RyYWludDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7 Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9w IGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6 CisJCQkJeworCQkJCQlUdXBsZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwkJCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKwor CQkJCQlhdHQgPSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFd KTsKKwkJCQkJZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElz QShkZWYsIENvbHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJ CQkJCSAqCisJCQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1J IFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklC VVRFICV7Y2FzY2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVs dHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29s bGF0aW9ufXMgQ09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmlu dGYoIkFMVEVSICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5 cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVy IGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJCS8qIEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBt b2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJ CXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChh dHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJ CQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9 CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIs IGZhbHNlKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259 cyIsIHRtcG9iajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhl IFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJ CQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10 CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJ CQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVz ZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJ RGF0dW0JZGVwYXJzZWQ7CisJCQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMg PSBsYXBwZW5kKGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0g bm9kZVRvU3RyaW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGly ZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dl dFRleHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChy ZWwpKTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9u fXMiLAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJ CX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNl bnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5n fXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlw ZSwgYWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJ CQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQt PmJlaGF2aW9yICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle2Nhc2NhZGV9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJy ZWFrOworCisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0 aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5k ZWYsCisJCQkJCQkJCQkJIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJ CWNhc2UgQVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVS IFRPICV7b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hh bmdlIG93bmVyIiwKKwkJCQkJCQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CSBnZXRfcm9sZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfQ2x1c3Rlck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVT VEVSIE9OICV7aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi Y2x1c3RlciBvbiIsCisJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUIExPR0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0 IGxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0Ryb3BPaWRzOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lU SE9VVCBPSURTIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0 aG91dCBvaWRzIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3Nf bWV0aG9kfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nl c3MgbWV0aG9kIiwKKwkJCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIs CisJCQkJCQkJCQkgInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jl c2V0UmVsT3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9FbmFibGVBbHdheXNUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg QUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg UkVQTElDQSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJ R0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RGlzYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRS SUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJs ZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxl OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJ CQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0VuYWJsZVJlcGxpY2FSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg UkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1 bGU6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJ CQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8g SU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkcm9wIGluaGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5 cGVfb2Z9VCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwK KwkJCQkJCQkJCSAidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9G IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlk ZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2Fz ZSBSRVBMSUNBX0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBv YmosICIle2lkZW50fXMiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElD QV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtpZGVudH1zIiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0Ff SURFTlRJVFlfSU5ERVg6CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElO REVYICV7aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkJICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1l KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9i ajIpOworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9X IExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJl bmFibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJs ZVJvd1NlY3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBM RVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlz YWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJ Y2FzZSBBVF9HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMo KExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlj YXNlIEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRU QUNIIFBBUlRJVElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0 aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFk ZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25C b3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBB VF9EZXRhY2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQ QVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9p ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZp bmFsaXplOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7 cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0 eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7 CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAi Y29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBn ZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2Vx X3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51 bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlk LCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJl YWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7 CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJ CQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNt ZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZl bCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0 SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlv bkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50 aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlz ZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUp OworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwg c2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRp dHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhp c3RzfXMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIp OworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3Vw cG9ydGVkIGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsK KwkJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRp bmcgQUxURVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJl Y2F1c2UgSXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkg KiB3aGljaCBjYXNlIHRoZXNlIG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBj YXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hl dGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJl IHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlv bnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQK KwkJICogaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2Ny aWJlci1zaWRlLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2Rl ICopIGV4cHJzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1 c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoK KwkJICogQ2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8g dm9sYXRpbGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQll eHBycyA9IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlpZiAobGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBl bmRfYXJyYXlfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRz KTsKKworCXJldHVybiBhbHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9y IENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2Rl IHdpdGhpbiBhIHJlZ3VsYXIgKG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9U IE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRp cmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhl ciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4g dGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4 dCwgYm9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRl ciwgTGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0 bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFw VHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBp ZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90 bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3 aXRob3V0IGxvY2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBY WFggbWF5YmUgaXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2Ui IG9yIHNvbWUgc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBO VUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5j b2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1Is ICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlv biAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9w Z19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29s bChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlw Y29sbGF0aW9uKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1J ICV7Y29sdHlwZX1UICV7Y29tcHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkg KiAle2NvbGxhdGlvbn1zCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1J ICV7Y29sdHlwZX1UIiwgMywKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4i LAorCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJ CSJjb2x0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0 eXBpZCwgdHlwbW9kKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+ Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIl e2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2Nv bXByZXNzaW9ufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5h bWU7CisKKwkJY29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY29sdW1uLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBv c2l0ZSkKKwl7CisJCU9pZAlzZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1p dCBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5u b3QgdHJ1c3QKKwkJICogcGdfYXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0 IGJpdCBpcyBhbHNvIHNldCB3aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBh bmQgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBj YXNlLCB1bmxlc3MgZXhwbGljaXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBz Y2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRl dGVybWluZQorCQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZv cnR1bmF0ZWx5LCBOT1QgTlVMTCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWlu dHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEg Tk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAq LworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3Ry YWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJz dChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJ CQlzYXdfbm90bnVsbCA9IHRydWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNf bm90X251bGwpCisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5V TEwiIDogIiIpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChh dHRyRm9ybS0+YXR0aGFzZGVmKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9 IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9i b29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb2x1bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09M VU1OICovCisJCWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRf YXR0bnVtKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0 eVNlcXVlbmNlKHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJz ZV9Db2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1w b2JqKTsKKworCQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0g bmV3X29ianRyZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJh dGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7 CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZv cm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3Ry KTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIs IGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9j b2x1bW59cyIsIHRtcG9iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJ cmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBP RiBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5 cGVkIHRhYmxlIGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIg Y2FzZSwgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24s CisgKiBjb2xsYXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGlu ZyBpZiB0aGUgY29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBB cyBpbiBkZXBhcnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2Vk IGVsc2V3aGVyZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlw ZWQoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYp Cit7CisJT2JqVHJlZQkqY29sdW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsK KwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlw bW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29s ZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2co RVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiBy ZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAo Rm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlw bW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9k LCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xh cmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5n IGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251 bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJ ICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3Ry YWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3Qo Y2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJewor CQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19u b3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0 dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgor CSAqLworCWNvbHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAy LAorCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY29sdW1uLCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVM TCIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRy Rm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0 aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJ CQkgIGRwY29udGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwg IiV7ZGVmYXVsdH1zIiwgdG1wb2JqKTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJl IG5vdCBzdXBwb3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKwor CVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSBkZWZpbml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRl bnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRy ZWUJICAgKmlkZW50b2JqOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsK KwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1f cGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAg Km9iamZtdDsKKworCWNvbHVtbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxp ZChzZXFyZWxpZCkpCisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIs IGZhbHNlKTsKKwkJcmV0dXJuIGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJewor CQlpZGVudGZtdCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsK Kwl9CisJZWxzZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIl e29wdGlvbn1zIEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlk ZW50Zm10KTsKKworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxz ZSBpZiAoaWRlbnRpdHkgPT0gIEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmop OworCisJcmVsID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2Vx Zm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEg PSBnZXRfc2VxdWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVu dHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9DeWNsZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9NYXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNl cWRhdGEpKTsKKwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAq LworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7 c2VxX2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVj dChjb2x1bW4sICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoK KyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQor eworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAg ICpjb2xzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0 eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJ ICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVT RVQgIjsKKwllbHNlCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKwor CWNvbHNldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQor CXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBp c19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkp OworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigl e29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBDUkVBVEUgRE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5k IHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2Ig cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZURvbWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlPYmpUcmVlCSAgICpjcmVhdGVEb21haW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBU dXBsZQl0eXBUdXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWlu dHM7CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAo Rm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90 X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRl RG9tYWluID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlRG9tYWluLAorCQkJCQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ IG9iamVjdElkKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJ ICIle3R5cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFz ZXR5cGUsIHR5cEZvcm0tPnR5cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJO T1QgTlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAi JXtub3RfbnVsbH1zIiwgIiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhO SUwsIEludmFsaWRPaWQsIG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsK KwkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiJXtlbGVtZW50czosIH1zIiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5 LCBjb25zdHJhaW50cyk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtj b25zdHJhaW50c31zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRF Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRy ZWUgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlv bik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUp OworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFs c2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMi LCB0bXBvYmopOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRl RG9tYWluOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRF IEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0 aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5j dGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCSAgICpjcmVhdGVGdW5jOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0 dW07CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJh bXM7CisJTGlzdAkgICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAg ICp0eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsK KwlMaXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOwor CUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0 eXBhcnJheTsKKwlPaWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3Jt OworCWludAkJCWk7CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlib29sCQlpc251 bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLwor CXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls dXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3Jt ID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3Jy ZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hl MShMQU5HT0lELCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxh bmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdl IHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9y bV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUg dXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmlu CisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZh bGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHBy b2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlz bnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOwor CisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJv Y19wcm9iaW4sICZpc251bGwpOworCWlmIChpc251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxz ZQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChw cm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4g PSBOVUxMOworCX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAl e29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlw ZX1zCisJICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRv d31zICV7dm9sYXRpbGl0eX1zCisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1z ICV7c3RyaWN0fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAl e3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJv bH1MCisJICovCisJY3JlYXRlRnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9k ZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0 IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAq IGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1l dGVyIGxpc3QgbGVuZ3RoLAorCSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1 cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhl cndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBi aXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChu b2RlLT5wYXJhbWV0ZXJzKSAqIHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+ cGFyYW1ldGVycykgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJeworCQlEYXR1bQlhbGx0eXBlczsK KwkJRGF0dW0gICp2YWx1ZXM7CisJCWJvb2wgICAqbnVsbHM7CisJCWludAkJbmVsZW1zOworCisJ CWFsbHR5cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAg IEFudW1fcGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJ CQllbG9nKEVSUk9SLCAiTlVMTCBwcm9hbGxhcmd0eXBlcywgYnV0IG1vcmUgcGFyYW1ldGVycyB0 aGFuIGFyZ3MiKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRBcnJheVR5cGVQKGFsbHR5 cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJCSAgJnZhbHVlcywgJm51 bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0 ZXJzKSkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVkIHByb2FsbGFyZ2F0eXBlcyIpOworCQlm b3IgKGkgPSAwOyBpIDwgbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCXR5 cGFycmF5W2ldID0gdmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBpIDwg bGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7IGkrKykKKwkJCSB0eXBhcnJheVtpXSA9IHBy b2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBh cmUgYW55IGRlZmF1bHQgZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Np b24gYXMKKwkgKiBhIGxpc3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1 bWVudC4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVw LAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYg KCFpc251bGwpCisJeworCQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRU ZXh0UCh0bXBkYXR1bSkpOworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwll bHNlCisJeworCQlkZWZhdWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgor CSAqIE5vdyBpdGVyYXRlIG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNldHJlZSB0byBj cmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlwYXJhbXMgPSBOSUw7CisJ dHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRlcnMpCisJeworCQlGdW5j dGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIgKikgbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlCSAgICpwYXJhbW9iajsKKwkJT2JqVHJlZQkgICAqZGVmYXVsdHZhbDsKKwkJ T2JqVHJlZQkgICAqbmFtZTsKKworCQkvKgorCQkgKiBBIFBBUkFNX1RBQkxFIHBhcmFtZXRlciBp bmRpY2F0ZXMgZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJh bWV0ZXJzIGFyZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAq IGhlcmUsIGJ1dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0 IHNvIHRoYXQKKwkJICogd2UgY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxv dy4KKwkJICovCisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJ CQl0YWJsZV9wYXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJi b3NlIHN5bnRheCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VCAle2Rl ZmF1bHR9cworCQkgKgorCQkgKiBOb3RlIHRoYXQgJXtuYW1lfXMgaXMgYSBzdHJpbmcgaGVyZSwg bm90IGFuIGlkZW50aWZpZXI7IHRoZSByZWFzb24KKwkJICogZm9yIHRoaXMgaXMgdGhhdCBhbiBh YnNlbnQgcGFyYW1ldGVyIG5hbWUgbXVzdCBwcm9kdWNlIGFuIGVtcHR5CisJCSAqIHN0cmluZywg bm90ICIiLCB3aGljaCBpcyB3aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB3ZXJlIHRvIHVzZQorCQkg KiAle25hbWV9SSBoZXJlLiAgU28gd2UgYWRkIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24g dG8gYWxsb3cgdXMKKwkJICogdG8gaW5qZWN0IGEgInByZXNlbnQiIHBhcmFtZXRlci4KKwkJICov CisJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChw YXJhbW9iaiwgIiV7bW9kZX1zIiwKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9J TiA/ICJJTiIgOgorCQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJPVVQi IDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9JTk9VVCA/ICJJTk9VVCIgOgor CQkJCQkJCSBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1ZBUklBRElDID8gIlZBUklBRElDIiA6 CisJCQkJCQkJICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lvbiBv ZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKworCQluYW1lID0gbmV3X29ianRyZWUoIiIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChuYW1lLCAiJXtuYW1lfUkiLAorCQkJCQkJCSBwYXJhbS0+bmFt ZSA/IHBhcmFtLT5uYW1lIDogIk5VTEwiKTsKKworCQlhcHBlbmRfYm9vbF9vYmplY3QobmFtZSwg InByZXNlbnQiLAorCQkJCQkJICAgcGFyYW0tPm5hbWUgPyB0cnVlIDogZmFsc2UpOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsKKworCQlkZWZh dWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJc1ZhbGlkKHBh cmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhciAqZXhwcjsKKworCQkJaWYgKGN1cmRlZiA9PSBO VUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRvbyBzaG9ydCIpOwor CQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChkZWZh dWx0dmFsLCAiJXt2YWx1ZX1zIiwgZXhwcik7CisJCQljdXJkZWYgPSBsbmV4dChkZWZhdWx0cywg Y3VyZGVmKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QoZGVmYXVsdHZhbCwg InByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIl e3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsr XSwgLTEpKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7ZGVmYXVsdH1z IiwgZGVmYXVsdHZhbCk7CisKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rf b2JqZWN0KHBhcmFtb2JqKSk7CisJfQorCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7aWRl bnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSAgb2JqZWN0SWQpKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigi KTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJndW1lbnRzOiwgfXMiLCBwYXJh bXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCWlzZnVuY3Rpb24g PSAocHJvY0Zvcm0tPnByb2tpbmQgIT0gUFJPS0lORF9QUk9DRURVUkUpOworCisJaWYgKGlzZnVu Y3Rpb24pCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICJGVU5DVElPTiAle3Np Z25hdHVyZX1zIiwgdG1wb2JqKTsKKwllbHNlCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZUZ1bmMsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAqIEEg cmV0dXJuIHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRPRl0g c29tZV90eXBlLCBvcgorCSAqIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVsbCB0 aGUgc2Vjb25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcgYQorCSAqIHRhYmxlIHBhcmFtIGFib3ZlIHdo aWxlIHNjYW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJhbXMg PT0gTlVMTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJCSAi cmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtzZXRvZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3JldHNldCA/ ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmV0dHlw ZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb3JldHR5cGUs IC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0gTklMOworCQlPYmpU cmVlCSAgICpwYXJhbW9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEUiLCAx LAorCQkJCQkJCSAicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUiKTsKKwkJZm9y ICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChub2RlLT5wYXJh bWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0g PSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7 CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1JIiwgcGFyYW0tPm5h bWUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0xKSk7CisJCQly ZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7 CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3JldHR5cGVzOiwgfXMp IiwgcmV0dHlwZXMpOworCX0KKworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVGdW5jLCAiUkVUVVJOUyAle3JldHVybl90eXBlfXMiLCB0bXBvYmopOworCisJ LyogVFJBTlNGT1JNIEZPUiBUWVBFICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRSQU5TRk9S TSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5cGVzKTsK Kwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRk9SIFRZUEUgJXt0eXBlfVQiLCAxLAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHRyZnR5cGVzW2ldLCAtMSkpOworCQl0 eXBlcyA9IGxhcHBlbmQodHlwZXMsIHRtcG9iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBl bmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVzKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcG9i aik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiTEFOR1VBR0UgJXtsYW5n dWFnZX1JIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAoaXNm dW5jdGlvbikKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3dpbmRv d31zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAiV0lO RE9XIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7dm9sYXRp bGl0eX1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZP TEFUSUxFID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xh dGlsZSA9PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1VVEFC TEUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtwYXJhbGxlbF9z YWZldHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9T QUZFID8KKwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Bh cmFsbGVsID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPworCQkJCQkJCSAiUEFSQUxMRUwgUkVT VFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlRnVuYywgIiV7bGVha3Byb29mfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvbGVha3By b29mID8gIkxFQUtQUk9PRiIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1 bmMsICIle3N0cmljdH1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJ CQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJICJDQUxMRUQgT04gTlVM TCBJTlBVVCIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3NlY3Vy aXR5X2RlZmluZXJ9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9zZWNkZWYgPworCQkJCQkJCSAi U0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5WT0tFUiIpOworCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZB KCJDT1NUICV7Y29zdH1uIiwgMSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJ CQkJCQkJCQkJCXByb2NGb3JtLT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUo IlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0 X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsIHByb2NGb3JtLT5wcm9yb3dzKTsKKwkJYXBwZW5k X29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7cm93c31zIiwgdG1wb2JqKTsKKworCQl0bXBv YmogPSBuZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnBy b3N1cHBvcnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQkvKgorCQkJICogV2Ug c2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlmIGl0IHdvdWxkbid0 IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQgc2VhcmNoIHBhdGgu CisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlvbl9u YW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5cGVz LAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5EX05P TkUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtzdXBw b3J0fXMiLCB0bXBvYmopOworCX0KKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7 CisJCURlZkVsZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0 bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJnOworCQkJY2hhciAqdmFs dWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJz ZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMg PSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQl9CisJfQorCWFw cGVuZF9hcnJheV9vYmplY3QoY3JlYXRlRnVuYywgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7 CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVH ZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxs KTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQor CXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlw cmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUZ1bmMsICIle2RlZmluaXRpb259cyIsIGJ1Zi5kYXRhKTsKKwl9CisJZWxz ZSBpZiAocHJvYmluID09IE5VTEwpCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVG dW5jLCAiQVMgJXtkZWZpbml0aW9ufUwiLAorCQkJCQkJCSBzb3VyY2UpOworCX0KKwllbHNlCisJ eworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtvYmpmaWxlfUwiLCBw cm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiLCAle3N5bWJvbH1M Iiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5 c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGNyZWF0ZUZ1bmM7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFw VHVwbGUgICBvcGNUdXA7CisJSGVhcFR1cGxlICAgb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlCSAgICpzdG10Owor CU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkvKiBEb24ndCBkZXBhcnNlIHNxbCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRp bmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsK KworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bj b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlv cGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1p bHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisK KwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgT1BFUkFUT1IgQ0xBU1Mg JXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HCisJICogJXth bW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtpdGVtczosIH1zCisJICovCisKKwlzdG10ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQiLCAxLAorCQkJ CQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihv cGNGb3JtLT5vcGNuYW1lKSkpOworCisJLyogQWRkIHRoZSBERUZBVUxUIGNsYXVzZSAqLworCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIle2RlZmF1bHR9cyIsCisJCQkJCQkgb3BjRm9ybS0+ b3BjZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIiKTsKKworCS8qIEFkZCB0aGUgRk9SIFRZUEUgY2xh dXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIkZPUiBUWVBFICV7dHlwZX1UIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNpbnR5cGUsIC0xKSk7CisK KwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQs ICJVU0lORyAle2FtbmFtZX1JIiwgZ2V0X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSk7CisK KwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNsYXVzZTsgYnV0IGlmIGl0IGhhcyB0aGUgc2FtZSBu YW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJICogb3BjbGFzcywgdGhlbiBoYXZlIGl0IGV4cGFu ZCB0byBlbXB0eSwgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUg b3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkgIm9wZmFtaWx5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3Bm bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSk7CisK KwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9ybS0+b3BmbmFtZSksIE5hbWVTdHIob3BjRm9ybS0+ b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9ybS0+b3BmbmFtZXNwYWNlID09IG9wY0Zvcm0tPm9w Y25hbWVzcGFjZSkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtvcGZhbWlseX1zIiwgIHRtcG9i aik7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5pdGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5 cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNlLCBldmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNpdCBp biB0aGUgb3JpZ2luYWwgY29tbWFuZC4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiU1RP UkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNGb3JtLT5vcGNrZXl0eXBlICE9IEludmFsaWRPaWQg PworCQkJCQkJCQkJCQkgIG9wY0Zvcm0tPm9wY2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUs CisJCQkJCQkJCQkJCSAgLTEpKTsKKwlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFj aChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVy ICpvcGVyID0gbGZpcnN0KGNlbGwpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVS QVRPUiAle251bX1uICV7b3BlcmF0b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLAorCQkJCQkJ CSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJ CQkgIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wZXItPm9iamVj dCksCisJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9m b3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOwor CisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8KKwkJaWYg KG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJZWxzZQorCQl7CisJCQlP YmpUcmVlCSAgICp0bXBvYmoyOworCisJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIkZPUiBP UkRFUiBCWSAle29wZmFtaWx5fUQiLCAwKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i ajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3Bl cmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIG9wZXItPnNvcnRmYW1pbHkp KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgdG1wb2Jq Mik7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1cHBvcnQgZnVuY3Rpb25zICovCisJ Zm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWls eU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZv cm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7CisJCUxpc3QJICAg KmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOworCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9w Z19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLAor CQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwK KwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSksCisJ CQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0 cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9h cmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwg bmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBlczos IH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKwor CQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10 LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsK KwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZKQorICoKKyAq IEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCBy ZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwlIZWFwVHVwbGUg ICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbSAgYW1Gb3Jt OworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9Q RkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBv cGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3Jt X3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCWFt Rm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29wZlN0bXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXth bW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkJ ICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJ UmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJl dHVybiBjb3BmU3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xp Y3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0 bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAq cG9saWN5OworCisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVu dGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xp Y3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGlj eV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5vZGUtPnF1YWwsCisJ CQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xpY3lTdG10 ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlwb2xpY3kgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRoZSByZXN0 IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBu b2RlLT5yb2xlcywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOwor CisJcmV0dXJuIHBvbGljeTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10 LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU2NoZW1hU3RtdCAq bm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkJICpjcmVh dGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFND SEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1hLCAiJXtpZl9ub3Rf ZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIg OiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEsICIle25hbWV9SSIs IG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJBVVRIT1JJWkFUSU9O Iik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChhdXRoLCAi JXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUt PmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIle2F1 dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QoYXV0aCwgInByZXNl bnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVNjaGVtYSwgIiV7 YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQorCisv KgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgorICovCitzdGF0aWMg Y2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7CisJRGF0dW0JZGVm OworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJvb2wJaXNudWxsOworCisJ ZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5cGRl ZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1Is ICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlIiwKKwkJCSBOYW1l U3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5hbWUpKTsKKwlkZWZ2 YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIgPSBk ZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8sCisJCQkJCQkJ CQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFy c2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJT2JqZWN0 QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUgPSAoQWx0 ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZvcm1fcGdf dHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNoYXIJICAgKmZtdDsKKwlj b25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1AgQ09OU1RSQUlOVCBpcyBo YW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChub2RlLT5zdWJ0eXBlID09 ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9J RCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1IiwKKwkJCSBv YmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb21UdXApOwor CisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkvKiBTRVQgREVG QVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxMKQorCQkJewor CQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJvcCBkZWZhdWx0IjsKKwkJ CQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9 RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21G b3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsK KwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZB KGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0 X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCIsCisJCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXREZWZhdWx0KGRvbVR1cCkp OworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBOVUxMICov CisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJvcCBub3QgbnVsbCI7CisJ CQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5n LCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAiJXtpZGVudGl0eX1E IERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwgKi8KKwkJ CWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90IG51bGwiOworCQkJYWx0 ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlw ZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQg Tk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5 cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7 CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RSQUlOVC4gIE9ubHkgQ0hF Q0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICovCisJCQlmbXQgPSAiQUxU RVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOworCQkJYWx0ZXJEb20gPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8qIGEgbmV3IGNvbnN0cmFp bnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo YWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zIiwKKwkJCQkJCQkJ IGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgcGdf Z2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFkZHIub2JqZWN0SWQp KTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQgKi8K KwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxpZGF0ZSBjb25zdHJhaW50 IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBWYWxp ZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8KKwkJ CWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVTdHJpbmcs IHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlhcHBl bmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJh aW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBlKTsKKwl9CisKKwkv KiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1cm4gYWx0ZXJEb207 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNl cXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXBvYmo7CisJUmVs YXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkg ICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJl bDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9 IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElE RU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICog QUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3Rt dC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVu Y2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25J ZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNF UVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZv cm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ug c3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7aWRlbnRp dHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0 X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJ dG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAle2lkZW50aXR5fUQi LCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOwor CWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3JlYXRlU2VxLCBzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVt ZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3JlYXRlU2VxLCBzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3 aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisKKwkvKiBXZSBwdXJw b3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVuZF9hcnJheV9vYmpl Y3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgorICogRGVwYXJzZSBh IENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5k IHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3Jl YXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxh dGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkg ICAqZHBjb250ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2JqVHJlZQkqdG1wb2JqOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9u b3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlwZX1UIHwgUEFSVElUSU9O IE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworCSAqICV7aW5oZXJp dHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cwor CSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwljcmVhdGVTdG10ID0gbmV3 X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwg IiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+ cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRl U3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtp Zl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVY SVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRp b24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2lk ZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisK KwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBkaWZm ZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVudHMg d2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2UgaWYg dGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBiZSBlbWl0dGVkOyBhbmQK KwkgKiBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4KKwkg Ki8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlMaXN0 ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRhYmxl IGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAqIHN1 cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdvdWxkIGNh dXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5kaXJlY3Rp b24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBhcmUgbm8g ZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBlLCAtMSk7 CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0YgJXtvZl90eXBlfVQiLCB0 bXBvYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBhcmVudHM7CisJCQlPYmpF bGVtICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElk KTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNzZXJ0 KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhj cmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9i amVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRp b24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgICAgICAv KiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBub3QgY29tcG9zaXRl ICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQs IEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7CisJCQl0bXBvYmog PSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiKCV7 ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCB0 YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxl X2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlMaXN0ICAgICAgICp0YWJs ZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIExJ S0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFkeSBiZWVuIHRyYW5z Zm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLworCisJCS8qCisJCSAq IFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgY29uc3RyYWlu dHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9idGFpbmVkIGZyb20g dGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFpbnRzIHdlIHJlbHkg b24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkgKiBtaWdodCBiZSBt aXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNvbnN0cmFpbnRzLgor CQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2Rl LT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLCAgICAgLyogbm90IHR5 cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBjb21wb3NpdGUgKi8K KwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52 YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVf ZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5j ZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAq IHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUg YWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJh dGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3Jt YXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5k IGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0aChub2RlLT5pbmhS ZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50 czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiKTsKKwkJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQl9CisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0bXBvYmopOworCX0K KworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxl c3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3BhY2V9 SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0 bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNlX09uQ29tbWl0Q2xhdXNl KG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChub2Rl LT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBX ZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0cmVlIGRpcmVjdGx5IGFz IGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJCSAqIHdoaWNoIGhhdmVu J3QgYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRp b25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0 bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRfcGFydGtleWRlZl9zaW1w bGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAi JXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRp dGlvbl9ieX1zIiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgbm9kZS0+YWNjZXNzTWV0 aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXthY2Nlc3Nf bWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxz ZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2FjY2Vzc19tZXRo b2R9cyIsIHRtcG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpU cmVlICAgICp0bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisKKwkJdG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikpOworCX0KKworCWlmIChs aXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dpdGg6LCB9cykiLCBsaXN0 KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2Up OworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0aF9jbGF1c2V9cyIs IHRtcG9iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5l U3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmRl ZlN0bXQgPSBOVUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNlIE9CSkVD VF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Iob2Jq ZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJZGVm U3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJZGVmU3RtdCA9IGRlcGFy c2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOwor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlkZWZTdG10ID0gZGVwYXJz ZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3Rt dF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9UU1RFTVBMQVRFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBs YXRlKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3Qga2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10 OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAq CisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIG9wclR1cDsK KwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0 ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5 c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1f cGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0t Pm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkp KTsKKworCS8qIFBST0NFRFVSRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURV UkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJw cm9jZWR1cmUiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSBvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBMRUZUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxl ZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY29tbXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cmNvbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIG9wckZvcm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBORUdBVE9SICovCisJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIk5FR0FUT1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg Im5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJG b3JtLT5vcHJuZWdhdGUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJLyogUkVTVFJJQ1QgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi UkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0 Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0t Pm9wcnJlc3QpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50 IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCisJLyogSk9JTiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFs aWQob3ByRm9ybS0+b3Byam9pbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTUVSR0VT ICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdl KQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEhBU0hF UyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNo KQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCWFwcGVuZF9h cnJheV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUob3ByVHVwKTsKKworCXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENS RUFURSBUWVBFIHN0YXRlbWVudC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZp bmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1 cGxlICAgdHlwVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxp c3QJICAgKmxpc3Q7CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVs bDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShU WVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBl IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRT VFJVQ1QodHlwVHVwKTsKKworCS8qIFNob3J0Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxsIHR5cGVz LiAqLworCWlmICghdHlwRm9ybS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAi JXtpZGVudGl0eX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0t PnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkp KTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJCVJlbGVh c2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gc3RtdDsKKwl9CisKKwlzdG10ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwg IiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0t PnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7 CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQg dGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIElOUFVUICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIihJTlBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiaW5wdXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJPVVRQVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgIm91dHB1dCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2Vp dmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOwor CWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5k KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZ UE1PRF9JTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxl biA9PSAtMSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJ QUJMRSIsIDApOworCX0KKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJO QUxMRU5HVEg9JXt0eXBsZW59biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdl ciwgdHlwRm9ybS0+dHlwbGVuKTsKKwl9CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJhbGlnbm1lbnQiKTsKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdu bWVudCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9y bS0+dHlwYWxpZ24pCisJeworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0 OCI7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsK KwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJ YnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwg dHlwRm9ybS0+dHlwYWxpZ24pOworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2Fs aWdufXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0 b3JhZ2UpCisJeworCQljYXNlICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJ Y2FzZSAnZSc6CisJCQlzdHIgPSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgor CQkJc3RyID0gImV4dGVuZGVkIjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJt YWluIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3Rv cmFnZSBzcGVjaWZpZXIgJWMiLCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtzdG9yYWdlfXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImNhdGVnb3J5Iik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29y eX1zIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVS UkVEICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBp c3ByZWZlcnJlZCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBE RUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJ CQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7ZGVmYXVsdH1zIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAiZWxlbWVudCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0p KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkRFTElNSVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwK KwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFs c2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ YXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVs ZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJlc3MgY29waWVkKQoreworCUhlYXBUdXBsZSAg IHRzY1R1cDsKKwlIZWFwVHVwbGUgICB0c3BUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpU cmVlCSAgICp0bXA7CisJRm9ybV9wZ190c19jb25maWcgdHNjRm9ybTsKKwlGb3JtX3BnX3RzX3Bh cnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxpc3Q7CisKKwl0c2NUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoVFNDT05GSUdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHNjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2NG b3JtID0gKEZvcm1fcGdfdHNfY29uZmlnKSBHRVRTVFJVQ1QodHNjVHVwKTsKKworCXRzcFR1cCA9 IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bSh0c2NGb3JtLT5j ZmdwYXJzZXIpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBhcnNlciAldSIsCisJCQkg dHNjRm9ybS0+Y2ZncGFyc2VyKTsKKwl0c3BGb3JtID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRT VFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQor CSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChzdG10LCAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3JtLT5jZmduYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkpKTsKKworCS8qCisJICogQWRkIHRo ZSBkZWZpbml0aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09QWSdlZCBhbiBleGlzdGluZyBjb25m aWcsIGFkZAorCSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lzZSBhZGQgYSBQQVJTRVIgY2xhdXNl LgorCSAqLworCWxpc3QgPSBOSUw7CisJLyogQ09QWSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb3B5Iik7CisJ aWYgKGNvcGllZC5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICIle3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoVFNDb25maWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9iamVjdElkKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBUlNF UiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQQVJTRVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInBhcnNlciIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgPT0gSW52 YWxpZE9pZCkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwYXJzZXJ9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwg Iigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwlS ZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJICAgKnN0bXQ7 CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJRm9ybV9wZ190c19wYXJzZXIg dHNwRm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2Vy IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3Bh cnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1z KQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZpbml0 aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBTVEFSVCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTVEFSVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi c3RhcnQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkdFVFRPS0VOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJnZXR0b2tlbiIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkVORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZW5k Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiTEVYVFlQRVM9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxleHR5 cGVzIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hlYWRsaW5lKSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9 cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCisJcmV0dXJuIHN0bXQ7 Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnko T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHNkVHVw OworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7 CisJRGF0dW0JCW9wdGlvbnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNfZGljdCB0c2RG b3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSAi CisJCQkgIndpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19k aWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczos IH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQiLAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJLyogQWRkIHRo ZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBURU1QTEFURSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJURU1QTEFURT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAidGVtcGxhdGUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3RlbXBsYXRlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU1RlbXBs YXRlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNkRm9ybS0+ZGljdHRlbXBsYXRlKSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKgorCSAq IG9wdGlvbnMuICBYWFggdGhpcyBpcyBhIHByZXR0eSB1c2VsZXNzIHJlcHJlc2VudGF0aW9uLCBi dXQgd2UgY2FuJ3QgZG8KKwkgKiBiZXR0ZXIgd2l0aG91dCBtb3JlIHRzX2NhY2hlLmMgY29vcGVy YXRpb24gLi4uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRz ZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkg ICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAoIWlzbnVsbCkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0RGF0dW1HZXRD U3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0 KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJ ZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzdFR1cDsKKwlPYmpUcmVl CSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0OworCUZvcm1fcGdf dHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1RFTVBM QVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0 IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzdEZvcm0g PSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkvKgorCSAqIFZl cmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUgJXtpZGVu dGl0eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUi KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBURU1QTEFURSAl e2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3RGb3JtLT50 bXBsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0tPnRtcGxuYW1lKSkp OworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkv KiBJTklUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3RGb3JtLT50 bXBsaW5pdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWElaRSAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJMRVhJWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxl eGl6ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsbGV4aXplKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIo JXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1cCk7CisKKwly ZXR1cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclRTQ29uZmln dXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUFsdGVyVFNDb25maWd1cmF0 aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKikgY21kLT5wYXJzZXRy ZWU7CisJT2JqVHJlZSAqY29uZmlnOworCU9ialRyZWUgKnRtcDsKKwlMaXN0CSAgICpsaXN0Owor CUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgK KwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCSAqIEFMVEVSIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIEZPUiAle3Rva2VudHlw ZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorCSAqCisJICogY2FzZSBBTFRFUl9UU0NP TkZJR19EUk9QX01BUFBJTkc6CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAl e2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HICV7aWZfZXhpc3RzfXMgRk9SICV7dG9rZW50eXBlfUkK KwkgKgorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJ ICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQ UElORyBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKwkgKgor CSAqIGNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCSAqIEFMVEVSIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcgUkVQTEFDRSAle29s ZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKwkgKgorCSAqIGNhc2UgQUxU RVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkgKiBBTFRFUiBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIEZPUiAle3Rva2VudHlw ZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGljdGlvbmFyeX1E CisJICovCisKKwljb25maWcgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklH VVJBVElPTiIpOworCisJLyogZGV0ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFwcHJvcHJpYXRl IHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7CisJCWNhc2Ug QUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25m aWcsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkg Y21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKworCQljYXNlIEFM VEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZp ZywgIiV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJ CQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIklGIEVYSVNUUyIsIDApOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNl bnQiLCBub2RlLT5taXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywg IiV7aWZfZXhpc3RzfXMiLCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJ R19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZp ZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJ CQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCisJCWNh c2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo Y29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJ CQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJYnJlYWs7CisK KwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCQkJYXBwZW5k X29iamVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5j bGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkp OworCQkJYnJlYWs7CisJfQorCisJLyogQWRkIHRoZSBhZmZlY3RlZCB0b2tlbiBsaXN0LCBmb3Ig c3ViY29tbWFuZHMgdGhhdCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVSX1RT Q09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUxU RVJfTUFQUElOR19GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19S RVBMQUNFX0RJQ1RfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdf RFJPUF9NQVBQSU5HKQorCXsKKwkJbGlzdCA9IE5JTDsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT50 b2tlbnR5cGUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJW YWwobGZpcnN0KGNlbGwpKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZpZywgIkZPUiAl e3Rva2VudHlwZTosIH1JIiwgbGlzdCk7CisJfQorCisJLyogYWRkIGZ1cnRoZXIgc3ViY29tbWFu ZC1zcGVjaWZpYyBlbGVtZW50cyAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklH X0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUxURVJfTUFQ UElOR19GT1JfVE9LRU4pCisJeworCQkvKiBBREQgTUFQUElORyBhbmQgQUxURVIgTUFQUElORyBG T1IgbmVlZCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzICovCisJCWxpc3QgPSBOSUw7CisJCWZvciAo aSA9IDA7IGkgPCBjbWQtPmQuYXRzY2ZnLm5kaWN0czsgaSsrKQorCQl7CisJCQlPYmpUcmVlCSpk aWN0b2JqOworCisJCQlkaWN0b2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGlj dGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkgIGNtZC0+ZC5hdHNjZmcuZGljdElkc1tp XSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3Qo ZGljdG9iaikpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29uZmlnLCAiV0lUSCAle2Rp Y3Rpb25hcmllczosIH1EIiwgbGlzdCk7CisJfQorCWVsc2UgaWYgKG5vZGUtPmtpbmQgPT0gQUxU RVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUIHx8CisJCQkgbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NP TkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOKQorCXsKKwkJLyogdGhlIFJFUExBQ0UgZm9ybXMg d2FudCBvbGQgYW5kIG5ldyBkaWN0aW9uYXJpZXMgKi8KKwkJQXNzZXJ0KGNtZC0+ZC5hdHNjZmcu bmRpY3RzID09IDIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJSRVBMQUNFICV7 b2xkX2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChU U0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5kaWN0 SWRzWzBdKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIldJVEggJXtuZXdfZGlj dGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlv bmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbMV0p KTsKKwl9CisKKwlyZXR1cm4gY29uZmlnOworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlPYmpUcmVlICphbHRlclRTRDsKKwlPYmpUcmVlICp0bXA7CisJRGF0dW0JCW9wdGlvbnM7CisJ TGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlICAg dHNkVHVwOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSAiCisJCQkgIndpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKwor CS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZ ICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpCisJICovCisKKwlhbHRlclRTRCA9IG5l d19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIik7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChhbHRlclRTRCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVT dHIodHNkRm9ybS0+ZGljdG5hbWUpKSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gbGlzdCBh Y2NvcmRpbmcgdG8gdGhlIHBnX3RzX2RpY3QgZGljdGluaXRvcHRpb24gY29sdW1uICovCisJb3B0 aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1f cGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJZGVm aW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ YXBwZW5kX2FycmF5X29iamVjdChhbHRlclRTRCwgIigle2RlZmluaXRpb246LCB9cykiLCBkZWZp bml0aW9uKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBhbHRlclRTRDsK K30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3Vi Y21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpU cmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21k LT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jl c2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJCWZtdCA9ICJTRVQgIjsKKworCXJlbHNl dCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVs ZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShl bGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0 KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJlbHNl dCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJldHVybiByZWxzZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VSKQorICoKKyAqIEdp dmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0ZVRyaWdT dG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBsZQl0cmln VHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlCSAgICp0cmlnZ2VyOwor CU9ialRyZWUJICAgKnRtcG9iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3Q7CisJ TGlzdAkgICAqZXZlbnRzOworCisJcGdfdHJpZ2dlciA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwl0cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0 X2J5X29pZChwZ190cmlnZ2VyLCBBbnVtX3BnX3RyaWdnZXJfb2lkLCBvYmplY3RJZCk7CisJdHJp Z0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkvKgorCSAq IFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAl e25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMKKwkgKiBPTiAle3JlbGF0aW9ufUQgJXtm cm9tX3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cworCSAqIEZPUiBFQUNIICV7Zm9yX2Vh Y2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1bmN0aW9ufXMKKwkgKi8KKwl0cmln Z2VyID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJp Z2dlciwgIiV7Y29uc3RyYWludH1zIiwKKwkJCQkJCSBub2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09O U1RSQUlOVCIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiVFJJR0dF UiAle25hbWV9SSIsIG5vZGUtPnRyaWduYW1lKTsKKworCWlmIChub2RlLT50aW1pbmcgPT0gVFJJ R0dFUl9UWVBFX0JFRk9SRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGlt ZX1zIiwgIkJFRk9SRSIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVf QUZURVIpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJBRlRF UiIpOworCWVsc2UgaWYgKG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfSU5TVEVBRCkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIiV7dGltZX1zIiwgIklOU1RFQUQgT0YiKTsK KwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgdHJpZ2dlciB0aW1pbmcgdHlwZSAl ZCIsIG5vZGUtPnRpbWluZyk7CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhl IHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7CisJICogaW4gbW9zdCBj YXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdo ZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1 cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50 cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdf c3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZ UEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3Qo IkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQor CQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikp OworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5v ZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3 X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUJ ICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklM OworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3Rz IGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBz byB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBu ZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERB VEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7 CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJCQljaGFyICAgKmNv bG5hbWUgPSBzdHJWYWwobGZpcnN0KGNlbGwpKTsKKworCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMs IG5ld19zdHJpbmdfb2JqZWN0KGNvbG5hbWUpKTsKKwkJCX0KKworCQkJYXBwZW5kX2FycmF5X29i amVjdCh1cGRhdGUsICIle2NvbHVtbnM6LCB9SSIsIGNvbHMpOworCisJCQlldmVudHMgPSBsYXBw ZW5kKGV2ZW50cywgbmV3X29iamVjdF9vYmplY3QodXBkYXRlKSk7CisJCX0KKwl9CisJYXBwZW5k X2FycmF5X29iamVjdCh0cmlnZ2VyLCAiJXtldmVudHM6IE9SIH1zIiwgZXZlbnRzKTsKKworCXRt cG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkgIHRyaWdGb3JtLT50Z3JlbGlkKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmln Z2VyLCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJGUk9NIiwgMCk7CisJaWYgKHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKQorCXsKKwkJT2Jq VHJlZQkgICAqcmVsOworCisJCXJlbCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCk7CisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cmVsYXRpb259RCIsIHJlbCk7CisJfQor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIiV7ZnJvbV90YWJsZX1zIiwgdG1wb2JqKTsK KworCWxpc3QgPSBOSUw7CisJaWYgKG5vZGUtPmRlZmVycmFibGUpCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsCisJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KCJERUZFUlJBQkxFIikpOworCWlmIChu b2RlLT5pbml0ZGVmZXJyZWQpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCSAgIG5ld19z dHJpbmdfb2JqZWN0KCJJTklUSUFMTFkgREVGRVJSRUQiKSk7CisJYXBwZW5kX2FycmF5X29iamVj dCh0cmlnZ2VyLCAiJXtjb25zdHJhaW50X2F0dHJzOiB9cyIsIGxpc3QpOworCisJYXBwZW5kX3N0 cmluZ19vYmplY3QodHJpZ2dlciwgIkZPUiBFQUNIICV7Zm9yX2VhY2h9cyIsCisJCQkJCQkgbm9k ZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiV0hFTiIsIDApOworCWlmIChub2RlLT53aGVuQ2xhdXNlKQorCXsKKwkJTm9kZQkgICAqd2hl bkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29sCQlpc251bGw7CisKKwkJdmFsdWUgPSBm YXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdnZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0 aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxv ZyhFUlJPUiwgImJvZ3VzIE5VTEwgdGdxdWFsIik7CisKKwkJd2hlbkNsYXVzZSA9IHN0cmluZ1Rv Tm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcG9iaiwgIigle2NsYXVzZX1zKSIsCisJCQkJCQkJIHBnX2dldF90cmlnZ2VyX3doZW5jbGF1 c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hlbkNsYXVzZSwKKwkJCQkJCQkJCQkJCQkg ICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle3doZW59cyIs IHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwK KwkJCQkJCSAiZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmlnRm9y bS0+dGdmb2lkKSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7 CisJaWYgKHRnbmFyZ3MgPiAwKQorCXsKKwkJYnl0ZWEgICp0Z2FyZ3M7CisJCWNoYXIgICAqYXJn c3RyOworCQlib29sCWlzbnVsbDsKKwkJaW50CQlmaW5keDsKKwkJaW50CQlsZW50Z2FyZ3M7CisJ CWNoYXIgICAqcDsKKworCQl0Z2FyZ3MgPSBEYXR1bUdldEJ5dGVhUChmYXN0Z2V0YXR0cih0cmln VHVwLAorCQkJCQkJCQkJCQlBbnVtX3BnX3RyaWdnZXJfdGdhcmdzLAorCQkJCQkJCQkJCQlSZWxh dGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLAorCQkJCQkJCQkJCQkmaXNudWxsKSk7CisJCWlmIChp c251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHRnYXJncyIpOworCQlhcmdzdHIg PSAoY2hhciAqKSBWQVJEQVRBKHRnYXJncyk7CisJCWxlbnRnYXJncyA9IFZBUlNJWkVfQU5ZX0VY SERSKHRnYXJncyk7CisKKwkJcCA9IGFyZ3N0cjsKKwkJZm9yIChmaW5keCA9IDA7IGZpbmR4IDwg dGduYXJnczsgZmluZHgrKykKKwkJeworCQkJc2l6ZV90CXRsZW47CisKKwkJCS8qIFZlcmlmeSB0 aGF0IHRoZSBhcmd1bWVudCBlbmNvZGluZyBpcyBjb3JyZWN0ICovCisJCQl0bGVuID0gc3RybGVu KHApOworCQkJaWYgKHAgKyB0bGVuID49IGFyZ3N0ciArIGxlbnRnYXJncykKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGFyZ3VtZW50IHN0cmluZyAoJXMpIGZvciB0cmlnZ2Vy IFwiJXNcIiIsCisJCQkJCQkJCWFyZ3N0ciwgTmFtZVN0cih0cmlnRm9ybS0+dGduYW1lKSkpKTsK KworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocCkpOworCisJCQlw ICs9IHRsZW4gKyAxOworCQl9CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAi KCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmdzOiwgfUwiLCBsaXN0KTsJ CS8qIG1pZ2h0IGJlIE5JTCAqLworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIikiKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICJFWEVDVVRFIFBST0NFRFVSRSAle2Z1 bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiB0cmlnZ2VyOworfQorCisvKgorICogRGVwYXJzZSBhIFJlZnJl c2hNYXRWaWV3U3RtdCAoUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVykKKyAqCisgKiBHaXZlbiBh IG1hdGVyaWFsaXplZCB2aWV3IE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIHJlZnJlc2ggY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdTdG10ICpub2RlID0g KFJlZnJlc2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcmVmcmVzaFN0 bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCisJcmVmcmVzaFN0bXQgPSBuZXdfb2JqdHJlZV9WQSgi UkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyIsIDApOworCisJLyogYWRkIGEgQ09OQ1VSUkVOVExZ IGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlZnJlc2hTdG10LCAiJXtjb25jdXJy ZW50bHl9cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIp OworCS8qIGFkZCB0aGUgbWF0dmlldyBuYW1lICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmVm cmVzaFN0bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJLyog YWRkIGEgV0lUSCBOTyBEQVRBIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRI IE5PIERBVEEiLCAxLAorCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9k ZS0+c2tpcERhdGEgPyB0cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlZnJl c2hTdG10LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZXR1cm4gcmVmcmVzaFN0bXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIgQ09M VU1OIC4uLiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAorICogKC4uLikgIG9yIFJFU0VUICguLi4p IGNvbnRlbnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxl bSAqZWxlbSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpUcmVlCSAgICpzZXQ7CisJT2JqVHJlZQkg ICAqb3B0bmFtZTsKKworCXNldCA9IG5ld19vYmp0cmVlKCIiKTsKKwlvcHRuYW1lID0gbmV3X29i anRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVzcGFjZSAhPSBOVUxMKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9SS4iLCBlbGVtLT5kZWZuYW1lc3BhY2Up OworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7bGFiZWx9SSIsIGVsZW0tPmRl Zm5hbWUpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc2V0LCAiJXtsYWJlbH1zIiwgb3B0bmFt ZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChzZXQsICIgPSAl e3ZhbHVlfUwiLAorCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJ CQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisKKwlyZXR1cm4g c2V0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNvbW1hbmRzLgorICov CitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBj b25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJCQkgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQorewor CVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJY2hhcgkJICAgKmlk ZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7CisJY2hhcgkJICAgKmZtdDsKKwlPYmpUcmVl CQkqc3RtdCwgKnN0bXQyOworCUpzb25iCQkgICpqc29uYjsKKworCWluaXRTdHJpbmdJbmZvKCZz dHIpOworCisJZm10ID0gcHNwcmludGYoIkRST1AgJXMgSUYgRVhJU1RTICUle29iamlkZW50aXR5 fXMiLCBvYmplY3R0eXBlKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJvYmpp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKwlzdG10MiA9IG5ld19vYmp0cmVl X1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCSAgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2 aW9yID09IERST1BfQ0FTQ0FERSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtj YXNjYWRlfXMiLCBzdG10Mik7CisKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJ Y29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1B VEVEX0xFTik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNp bmcgc2V0dGluZyBvZiBGdW5jdGlvbgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Z1 bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkK K3sKKwlPYmpUcmVlCSAgICpvYmo7CisKKwlpZiAoa2luZCA9PSBWQVJfUkVTRVRfQUxMKQorCXsK KwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIEFMTCIpOworCX0KKwllbHNlIGlmICh2YWx1ZSAh PSBOVUxMKQorCXsKKwkJb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCAle3NldF9uYW1lfUkiLCAx LAorCQkJCQkJICAgInNldF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CisKKwkJLyoKKwkJ ICogU29tZSBHVUMgdmFyaWFibGUgbmFtZXMgYXJlICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0 IG5vdCBiZQorCQkgKiBxdW90ZWQuCisJCSAqLworCQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3Mo bmFtZSwgdHJ1ZSkgJiBHVUNfTElTVF9RVU9URSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9i aiwgIlRPICV7c2V0X3ZhbHVlfXMiLCB2YWx1ZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KG9iaiwgIlRPICV7c2V0X3ZhbHVlfUwiLCB2YWx1ZSk7CisJfQorCWVsc2UKKwl7CisJ CW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmos ICIle3NldF9uYW1lfUkiLCBuYW1lKTsKKwl9CisKKwlyZXR1cm4gb2JqOworfQorCisvKgorICog RGVwYXJzZSBhbiBJbmRleFN0bXQuCisgKgorICogR2l2ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUg cGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29ycmVzcG9u ZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkg ICAqaW5kZXhTdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlSZWxhdGlvbglpZHhyZWw7CisJ UmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZpbml0 aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwljaGFy CSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29uc3Ry YWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhlciBj b25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBoZXJl LgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4cmVsID0gcmVsYXRpb25fb3Blbihv YmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVsID0gcmVsYXRpb25fb3BlbihpZHhy ZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9pbmRl eGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlvbiwg JnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJLyoK KwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtj b25jdXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTgorCSAqICV7dGFibGV9 RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlvbn1zKSAle3dpdGh9cyAle3RhYmxlc3Bh Y2V9cworCSAqICV7d2hlcmVfY2xhdXNlfXMKKwkgKi8KKwlpbmRleFN0bXQgPSBuZXdfb2JqdHJl ZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle3VuaXF1 ZX1zIiwKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIiKTsKKworCWFwcGVuZF9m b3JtYXRfc3RyaW5nKGluZGV4U3RtdCwgIklOREVYIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChpbmRleFN0bXQsICIle2NvbmN1cnJlbnRseX1zIiwKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50 ID8gIkNPTkNVUlJFTlRMWSIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0 bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJ RiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwg IiV7bmFtZX1JIiwKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHhyZWwpKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGhlYXByZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAor CQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXByZWwpKSk7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChpbmRleFN0bXQsICJVU0lORyAle2luZGV4X2FtfXMiLCBpbmRleF9hbSk7CisK KwlhcHBlbmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIoJXtkZWZpbml0aW9ufXMpIiwgZGVm aW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldJ VEgiKTsKKwlpZiAocmVsb3B0aW9ucykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi KCV7b3B0c31zKSIsIHJlbG9wdGlvbnMpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10 LCAiJXt3aXRofXMiLCB0bXBvYmopOworCisJLyogdGFibGVzcGFjZSAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1zIiwgdGFibGVzcGFjZSk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisKKwkv KiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiV0hFUkUiKTsKKwlpZiAo d2hlcmVDbGF1c2UpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7d2hlcmV9cyIs IHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7d2hlcmVf Y2xhdXNlfXMiLCB0bXBvYmopOworCisJdGFibGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCXRhYmxlX2Nsb3NlKGhlYXByZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4g aW5kZXhTdG10OworfQorCisvKgorICogRGVwYXJzZSB0aGUgSU5IRVJJVFMgcmVsYXRpb25zLgor ICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4gYSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxl IGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50IHRhYmxlcy4KKyAqLworc3RhdGljIExp c3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKQoreworCUxpc3QJICAgKnBh cmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2Nh bktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsKKworCWluaFJlbCA9IHRhYmxlX29wZW4o SW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZr ZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2Nh biA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQs CisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1Zh bGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPYmpUcmVlCSpwYXJl bnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRT VFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBmb3JtSW5oLT5pbmhwYXJlbnQpOworCQlw YXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2JqZWN0X29iamVjdChwYXJlbnQpKTsKKwl9 CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsKK30KKworLyoKKyAqIERlcGFyc2UgdGhl IE9OIENPTU1NSVQgLi4uIGNsYXVzZSBmb3IgQ1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24g b3B0aW9uKQoreworCU9ialRyZWUJICAgKm9uY29tbWl0OworCisJb25jb21taXQgPSBuZXdfb2Jq dHJlZSgiT04gQ09NTUlUIik7CisJc3dpdGNoIChvcHRpb24pCisJeworCQljYXNlIE9OQ09NTUlU X0RST1A6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3Zh bHVlfXMiLCAiRFJPUCIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9ERUxFVEVfUk9X UzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9 cyIsICJERUxFVEUgUk9XUyIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9QUkVTRVJW RV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob25jb21taXQsICIle29uX2NvbW1pdF92 YWx1ZX1zIiwgIlBSRVNFUlZFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRf Tk9PUDoKKwkJCWFwcGVuZF9udWxsX29iamVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVl fXMiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdChvbmNvbW1pdCwgInByZXNlbnQiLCBmYWxzZSk7 CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gb25jb21taXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgUmVuYW1lU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZW5hbWVTdG10 KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlbmFtZVN0bXQg Km5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcmVuYW1lU3Rt dDsKKwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hhciAqb2JqdHlwZTsKKwlSZWxhdGlvbgly ZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8qCisJICogSW4gYW4gQUxURVIgLi4gUkVO QU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlCisJICog b2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ugd2UgaW5zcGVjdCB0aGVtIGFmdGVyIHRo ZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUgb2xkIG5hbWUgaXMgYWxyZWFkeSBnb25l LiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20KKwkgKiB0aGUgcGFyc2Ugbm9kZS4gIE5v dGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5hbWUgZnJvbSB0aGUgY2F0YWxvZworCSAq IChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcGFyc2Ugbm9kZSk7IGl0IGNhbm5vdCBw b3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXkuCisJICovCisJc3dpdGNoIChub2RlLT5y ZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX0lOREVY OgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKworCQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4 CisJCQkgKgorCQkJICogQUxURVIgJXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1F IFRPICV7bmV3bmFtZX1JCisJCQkgKi8KKwkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlwZShu b2RlLT5yZW5hbWVUeXBlKTsKKwkJCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5 cGUpOworCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9u KTsKKwkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDApOworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkgbm9k ZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5h bWUpKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQlyZWxhdGlvbl9jbG9zZShy ZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1BP TElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcG9sVHVwOworCQkJCUZvcm1fcGdfcG9saWN5IHBv bEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9saWN5OworCQkJCVNjYW5LZXlEYXRhCWtleTsKKwkJ CQlTeXNTY2FuRGVzYwlzY2FuOworCisJCQkJcGdfcG9saWN5ID0gcmVsYXRpb25fb3BlbihQb2xp Y3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCVNjYW5LZXlJbml0KCZrZXksIEFu dW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEs CisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc2NhbiA9 IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xpY3ksIFBvbGljeU9pZEluZGV4SWQsIHRydWUsCisJ CQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwkJCQlwb2xUdXAgPSBzeXN0YWJsZV9nZXRuZXh0 KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQkJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5ICV1IiwgYWRkcmVzcy5vYmplY3RJ ZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisK KwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSIsIDApOworCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJ CQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIiV7cG9saWN5bmFtZX1JIiwgbm9kZS0+c3VibmFtZSk7 CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIk9OICV7aWRlbnRpdHl9RCIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkpOworCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJlbmFtZVN0bXQsICJSRU5BTUUgVE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJIG5vZGUt Pm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJCQkJcmVsYXRpb25fY2xv c2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQl9CisJCQlicmVhazsKKworCQlj YXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ c2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisKKwkJCS8qCisJCQkg KiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgb2Jq dHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURQorCQkJICogJXtjb2xuYW1lfUkgVE8g JXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKwkJCSAqCisJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVS IG9ianR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0eX1EIFJFTkFNRQorCQkJICogQ09MVU1O ICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JCisJCQkgKi8KKworCQkJaWYgKG5vZGUtPnJlbmFt ZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCXsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29i anRyZWUoIkFMVEVSIFRZUEUiKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0 bXQsICIle2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNj aGVtYUlkLAorCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJ Zm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBBVFRSSUJVVEUgJSV7Y29sbmFtZX1JIik7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJl bGF0aW9uVHlwZSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7 CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7CisKKwkJCQkvKiBDb21wb3Np dGUgdHlwZXMgZG8gbm90IHN1cHBvcnQgSUYgRVhJU1RTICovCisJCQkJaWYgKG5vZGUtPnJlbmFt ZVR5cGUgPT0gT0JKRUNUX0NPTFVNTikKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1l U3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJCW5vZGUtPm1pc3Npbmdfb2sgPyAiSUYg RVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIl e2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJ ZCwKKwkJCQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRz dHIgPSBwc3ByaW50ZigiUkVOQU1FIENPTFVNTiAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgZm10c3RyLCBub2RlLT5zdWJuYW1lKTsK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJUTyAle25ld25hbWV9SSIsIG5v ZGUtPm5ld25hbWUpOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklC VVRFKQorCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2Nhc2NhZGV9cyIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJw cmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJP UF9DQVNDQURFKSk7CisKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQl7CisJCQkJY2hh cgkqaWRlbnQ7CisJCQkJSGVhcFR1cGxlIHByb2N0dXA7CisJCQkJRm9ybV9wZ19wcm9jIHByb2Nm b3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJCQkJQXNzZXJ0KElzQShub2RlLT5vYmpl Y3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRpdHkgPSAoKE9iamVjdFdpdGhBcmdzICop IG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUx KFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQp KTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCQkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgJXUiLAorCQkJCQkJIGFkZHJlc3Mu b2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0 dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3JrIGZvciBvcmRlcmVkLXNldCBhZ2dyZWdh dGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLAorCQkJCQkJCQkgcXVvdGVfcXVh bGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2Nmb3JtLT5wcm9uYW1lc3Bh Y2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkg Zm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2JqZWN0SWQsIHRydWUpKTsKKworCQkJCWZt dHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1zIFJFTkFNRSBUTyAlJXtuZXdu YW1lfUkiLAorCQkJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsK KwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCQki aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudCwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9j dHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJ CQkJSGVhcFR1cGxlICAgb3BjVHVwOworCQkJCUZvcm1fcGdfb3BjbGFzcyBvcGNGb3JtOworCQkJ CUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVtYW5hbWU7CisJCQkJY2hhcgkg ICAqb3BjbmFtZTsKKwkJCQljaGFyCSAgICpmbXQ7CisKKwkJCQlmbXQgPSBwc3ByaW50ZigiQUxU RVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7 bmV3bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBl KSk7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERh dHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVw KSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0 aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJb3BjRm9ybSA9IChG b3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0 X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogZGVjb25zdHJ1 Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1l cywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJl ZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJCQkJCSBvcGNuYW1lKSwKKwkJCQkJCQkJCQkJImluZGV4X21ldGhvZCIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCks CisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisK KwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2Ug T0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBUdXBsZSAgIG9wZlR1cDsKKwkJCQlIZWFw VHVwbGUgICBhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJCQkJRm9ybV9w Z19hbSAgYW1Gb3JtOworCQkJCUxpc3QJICAgKm9sZG5hbWVzOworCQkJCWNoYXIJICAgKnNjaGVt YW5hbWU7CisJCQkJY2hhcgkgICAqb3BmbmFtZTsKKwkJCQljaGFyCSAgICpmbXQ7CisKKwkJCQlm bXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAlJXtpbmRleF9tZXRo b2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkgICBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5yZW5hbWVUeXBlKSk7CisKKwkJCQlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BG QU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChv cGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0 b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlv cGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJCQkJYW1U dXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3Bm bWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2QgJXUiLAorCQkJCQkJ IG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJCQlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RS VUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9k ZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIGRlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJ CQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFt ZSk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJ CQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCQkgb3BmbmFt ZSksCisJCQkJCQkJCQkJCSJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CQlOYW1lU3RyKGFtRm9ybS0+YW1uYW1lKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJ CQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9C SkVDVF9TQ0hFTUE6CisJCQlyZW5hbWVTdG10ID0KKwkJCQluZXdfb2JqdHJlZV9WQSgiQUxURVIg U0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAyLAorCQkJCQkJCSAg ICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJICAgIm5l d25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCWJyZWFrOworCisJCWNh c2UgT0JKRUNUX0ZEVzoKKwkJCXsKKwkJCQlTdHJpbmcgKmlkZW50aXR5ID0gY2FzdE5vZGUoU3Ry aW5nLCBub2RlLT5vYmplY3QpOworCisJCQkJcmVuYW1lU3RtdCA9CisJCQkJCW5ld19vYmp0cmVl X1ZBKCJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7 bmV3bmFtZX1JIiwKKwkJCQkJCQkJICAgMiwgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgc3Ry VmFsKGlkZW50aXR5KSwKKwkJCQkJCQkJICAgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uZXduYW1lKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7 CisJCQkJSGVhcFR1cGxlCXJld3JUdXA7CisJCQkJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOwor CQkJCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisKKwkJCQlwZ19yZXdyaXRlID0gcmVsYXRpb25fb3Bl bihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0 X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19yZXdyaXRlLCBBbnVtX3BnX3Jld3JpdGVfb2lkLCAg YWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBHRVRT VFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUki LAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkicnVsZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCQkJcmV3ckZvcm0tPmV2X2NsYXNzKSwKKwkJCQkJCQkJCQkJIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShw Z19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3Bn X3RyaWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3Ry aWdnZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdl dF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsK KwkJCQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKwor CQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJu YW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkJ CTMsCisJCQkJCQkJCQkJCSJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5h bWUsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJCQl0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2Vy LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFlQ RToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQlj YXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQljYXNl IE9CSkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQl7 CisJCQkJSGVhcFR1cGxlCW9ialR1cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURhdHVt CQlvYmpuc3A7CisJCQkJYm9vbAkJaXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1lc3Bh Y2U7CisJCQkJTGlzdAkgICAqaWRlbnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmplY3Qp OworCQkJCWNoYXIJICAgKmZtdHN0cmluZzsKKworCQkJCS8qIG9idGFpbiBvYmplY3QgdHVwbGUg Ki8KKwkJCQljYXRhbG9nID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJCQkJb2JqVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9n LCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJ ZCk7CisKKwkJCQkvKiBvYnRhaW4gbmFtZXNwYWNlICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBn ZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoYWRkcmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3Ag PSBoZWFwX2dldGF0dHIob2JqVHVwLCBBbnVtX25hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRp b25HZXREZXNjcihjYXRhbG9nKSwgJmlzbnVsbCk7CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCQkJCW9ianR5cGUgPSBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCQlmbXRzdHJpbmcgPSBwc3ByaW50 ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9W QShmbXRzdHJpbmcsCisJCQkJCQkJCQkJMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVu YW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoRGF0dW1HZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxh c3QoaWRlbnRpdHkpKSkpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwg IlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJ cmVsYXRpb25fY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFr OworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUg JWQiLCBub2RlLT5yZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBBbHRlck9iamVjdERlcGVuZHNTdG10IChBTFRFUiAuLi4gREVQRU5E UyBPTiAuLi4pLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNT dG10ICpub2RlID0gKEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUJCSAgICphbHRlckRlcGVuZGVTdG10ID0gTlVMTDsKKworCisJaWYgKG5vZGUtPm9iamVjdFR5 cGUgPT0gT0JKRUNUX0lOREVYKQorCXsKKwkJUmVsYXRpb24gICAgICAgIHJlbGF0aW9uID0gcmVs YXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJT2JqVHJlZSAqcXVhbGlm aWVkOworCisJCWFsdGVyRGVwZW5kZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgSU5ERVgiKTsK KworCQlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3Jl bC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtpZGVudGl0eX1EIiwg cXVhbGlmaWVkKTsKKwkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7Tk99cyIsCisJ CQkJCQkgbm9kZS0+cmVtb3ZlID8gIk5PIiA6ICIiKTsKKworCQlhcHBlbmRfZm9ybWF0X3N0cmlu ZyhhbHRlckRlcGVuZGVTdG10LCAiREVQRU5EUyBPTiBFWFRFTlNJT04iKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7bmV3bmFtZX1JIiwgc3RyVmFsKG5vZGUt PmV4dG5hbWUpKTsKKwl9CisJZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5 cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUp KTsKKworCXJldHVybiBhbHRlckRlcGVuZGVTdG10OworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgQ0FDSEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVw YXJzZV9TZXFfQ2FjaGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY2FjaGU7CisJY2hhcgkgICAqdG1w c3RyOworCWNoYXIJICAgKmZtdDsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwg c2VxZGF0YS0+c2VxY2FjaGUpOworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIENB Q0hFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiQ0FDSEUgJXt2YWx1ZX1zIjsKKworCWNh Y2hlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImNhY2hlIiwKKwkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsK KworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChjYWNoZSk7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq CitkZXBhcnNlX1NlcV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjeWNsZTsKKwljaGFyCSAg ICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31zIENZQ0xFIjsK KwllbHNlCisJCWZtdCA9ICIle25vfXMgQ1lDTEUiOworCisJY3ljbGUgPSBuZXdfb2JqdHJlZV9W QShmbXQsIDIsCisJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJ CQkJCSAgICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgICBzZXFkYXRhLT5zZXFjeWNsZSA/ ICIiIDogIk5PIik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGN5Y2xlKTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJl bnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlCSAgICppbmNyZW1lbnRhbGJ5OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7 CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9 cyI7CisJZWxzZQorCQlmbXQgPSAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisKKwl0bXBzdHIg PSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisJaW5jcmVt ZW50YWxieSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkJICAgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBl U3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChpbmNyZW1lbnRhbGJ5 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQorewor CU9ialRyZWUJICAgKm1heHZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7 CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIjsK KwllbHNlCisJCWZtdCA9ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCW1heHZhbHVlID0gbmV3X29ianRy ZWVfVkEoZm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1 ZSIsCisJCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChtYXh2YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1 ZW5jZSBNSU5WQUxVRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1NlcV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptaW52YWx1ZTsKKwljaGFyCSAg ICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAi U0VUIE1JTlZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUlOVkFMVUUgJXt2YWx1 ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWlu KTsKKwltaW52YWx1ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAibWludmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0 cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWludmFsdWUpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqLworc3Rh dGljIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBz ZXF1ZW5jZUlkLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKm93bmVkYnkgPSBO VUxMOworCVJlbGF0aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRh IGtleXNbM107CisJSGVhcFR1cGxlICAgdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERl cGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0s CisJCQkJQW51bV9wZ19kZXBlbmRfY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlT Y2FuS2V5SW5pdCgma2V5c1sxXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5j ZUlkKSk7CisJU2NhbktleUluaXQoJmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3Vi aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERh dHVtKDApKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBl bmRlckluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVh cFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lk CQkgb3duZXJJZDsKKwkJRm9ybV9wZ19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZQkqdG1wb2Jq OworCQljaGFyCSAgICpjb2xuYW1lOworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdF VFNUUlVDVCh0dXBsZSk7CisKKwkJLyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBv biBwZ19jbGFzcyAqLworCQlpZiAoZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8p CisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxh dGlvbklkKQorCQkJY29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQor CQkJY29udGludWU7CisKKwkJb3duZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1l ID0gZ2V0X2F0dG5hbWUob3duZXJJZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJ aWYgKGNvbG5hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmosICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlvd25lZGJ5 ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAyLAorCQkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIi LCBPYmpUeXBlT2JqZWN0LCB0bXBvYmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7 CisJcmVsYXRpb25fY2xvc2UoZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJ ZiB0aGVyZSdzIG5vIG93bmVyIGNvbHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50 LCBzZXQgdXAgc28KKwkgKiB0aGF0IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlm ICghb3duZWRieSkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJb3du ZWRieSA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMywK KwkJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93 bmVyIiwgT2JqVHlwZU51bGwsCisJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxz ZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qob3duZWRieSk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3Nl cXVlbmNlX2RhdGEgc2VxZGF0YSkKK3sKKwlPYmpUcmVlCSAgICpyZXN0YXJ0OworCWNoYXIJICAg KnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFz dF92YWx1ZSk7CisJcmVzdGFydCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIs IDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkJ ICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KHJlc3RhcnQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lU SCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFy dHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0 ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqc3RhcnR3aXRoOworCWNoYXIJICAgKnRtcHN0cjsK KwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgU1RBUlQg V0lUSCAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsK KworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOwor CXN0YXJ0d2l0aCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInN0YXJ0IiwKKwkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdGFydHdpdGgpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgdHlwZSBTVE9SQUdFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqc3RvcmFnZTsKKwljaGFyCSAgICp0bXBz dHI7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKnN0cjsKKworCXN3aXRjaCAodHlwRm9ybS0+ dHlwc3RvcmFnZSkKKwl7CisJCWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJyZWFr OworCQljYXNlICdlJzoKKwkJCXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2FzZSAn eCc6CisJCQlzdHIgPSAiZXh0ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3Ry ID0gIm1haW4iOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxp ZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKworCXRt cHN0ciA9IHBzcHJpbnRmKCIlcyIsIHN0cik7CisKKwlmbXQgPSAiU1RPUkFHRSA9ICV7dmFsdWV9 cyI7CisKKwlzdG9yYWdlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHN0b3JhZ2UpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqcmVjZWl2ZTsKKworCXJlY2VpdmUg PSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZWNlaXZlLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHJlY2VpdmUsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rf b2JqZWN0KHJlY2VpdmUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTRU5EIG9wdGlv bi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqc2VuZDsK KworCXNlbmQgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChzZW5kLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHNlbmQsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHNl bmQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVl ICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cG1vZGlu OworCisJdHlwbW9kaW4gPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cG1vZGluLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0eXBtb2RpbiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwly ZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwbW9kaW4pOworfQorCisKKy8qCisgKiBEZXBhcnNl IHRoZSB0eXBlIHR5cG1vZF9vdXQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0g KgorZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUg dHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBtb2RvdXQ7CisKKwl0eXBtb2RvdXQgPSBuZXdf b2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cG1vZG91dCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHR5cG1vZG91dCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QodHlwbW9kb3V0KTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBhbmFs eXplIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9B bmFseXplKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJl ZQkgICAqdHlwYW5hbHl6ZTsKKworCXR5cGFuYWx5emUgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFla RT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0eXBhbmFseXplLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cGFuYWx5emUsICJw cmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICovCitz dGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cHN1YnNjcmlw dDsKKworCXR5cHN1YnNjcmlwdCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1Zh bGlkKHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cHN1 YnNjcmlwdCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1 YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cHN1YnNjcmlwdCwgInBy ZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgorICoKKyAq IEdpdmVuIGEgcnVsZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBydWxlIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUnVsZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJUnVsZVN0bXQgKm5vZGUgPSAoUnVsZVN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKnJ1bGVTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlSZWxhdGlvbglwZ19yZXdy aXRlOworCUZvcm1fcGdfcmV3cml0ZSByZXdyRm9ybTsKKwlIZWFwVHVwbGUJcmV3clR1cDsKKwlT eXNTY2FuRGVzYwlzY2FuOworCVNjYW5LZXlEYXRhCWtleTsKKwlEYXR1bQkJZXZfcXVhbDsKKwlE YXR1bQkJZXZfYWN0aW9uczsKKwlib29sCQlpc251bGw7CisJY2hhcgkgICAqcXVhbDsKKwlMaXN0 CSAgICphY3Rpb25zOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXBn X3Jld3JpdGUgPSB0YWJsZV9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19yZXdyaXRlX29pZCwKKwkJCQlCVEVx dWFsU3RyYXRlZ3lOdW1iZXIsCisJCQkJRl9PSURFUSwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yZXdyaXRlLCBSZXdyaXRlT2lk SW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCXJld3JUdXAgPSBzeXN0 YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChyZXdyVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJld3JpdGUgcnVsZSB3aXRoIG9p ZCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJcmV3ckZvcm0gPSAoRm9ybV9wZ19yZXdyaXRlKSBH RVRTVFJVQ1QocmV3clR1cCk7CisKKwlydWxlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgUlVM RSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICIle29yX3JlcGxhY2V9cyIs CisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiJXtpZGVudGl0eX1JIiwKKwkJCQkJCSBub2RlLT5ydWxl bmFtZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChydWxlU3RtdCwgIkFTIE9OICV7ZXZlbnR9 cyIsCisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX1NFTEVDVCA/ICJTRUxFQ1QiIDoKKwkJCQkJ CSBub2RlLT5ldmVudCA9PSBDTURfVVBEQVRFID8gIlVQREFURSIgOgorCQkJCQkJIG5vZGUtPmV2 ZW50ID09IENNRF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01E X0lOU0VSVCA/ICJJTlNFUlQiIDogIlhYWCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJ1bGVT dG10LCAiVE8gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZfY2xhc3MpKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJ1bGVTdG10LCAiRE8gJXtpbnN0ZWFkfXMiLAorCQkJ CQkJIG5vZGUtPmluc3RlYWQgPyAiSU5TVEVBRCIgOiAiQUxTTyIpOworCisJZXZfcXVhbCA9IGhl YXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jld3JpdGVfZXZfcXVhbCwKKwkJCQkJCSAgIFJl bGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSksICZpc251bGwpOworCWV2X2FjdGlvbnMgPSBoZWFw X2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X2FjdGlvbiwKKwkJCQkJCQkgIFJl bGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSksICZpc251bGwpOworCisJcGdfZ2V0X3J1bGVkZWZf ZGV0YWlsZWQoZXZfcXVhbCwgZXZfYWN0aW9ucywgJnF1YWwsICZhY3Rpb25zKTsKKworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJXSEVSRSAle2NsYXVzZX1zIiwgMCk7CisKKwlpZiAocXVhbCkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiY2xhdXNlIiwgcXVhbCk7CisJZWxzZQorCXsKKwkJ YXBwZW5kX251bGxfb2JqZWN0KHRtcCwgImNsYXVzZSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwl9CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChydWxl U3RtdCwgIndoZXJlX2NsYXVzZSIsIHRtcCk7CisKKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2Vs bCwgYWN0aW9ucykKKwl7CisJCWNoYXIgKmFjdGlvbiA9IGxmaXJzdChjZWxsKTsKKworCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChhY3Rpb24pKTsKKwl9CisJYXBwZW5k X2FycmF5X29iamVjdChydWxlU3RtdCwgIiV7YWN0aW9uczosIH1zIiwgbGlzdCk7CisKKwlzeXN0 YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwlyZXR1cm4gcnVsZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl VHJhbnNmb3JtU3RtdCAoQ1JFQVRFIFRSQU5TRk9STSkuCisgKgorICogR2l2ZW4gYSB0cmFuc2Zv cm0gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgQ1JFQVRFIFRSQU5TRk9STSBjb21tYW5kLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3JtU3RtdCAqbm9kZSA9IChDcmVh dGVUcmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSpjcmVhdGVUcmFuc2Zvcm07 CisJT2JqVHJlZSAqc2lnbjsKKwlIZWFwVHVwbGUgdHJmVHVwOworCUhlYXBUdXBsZSBsYW5nVHVw OworCUhlYXBUdXBsZSBwcm9jVHVwOworCUZvcm1fcGdfdHJhbnNmb3JtIHRyZkZvcm07CisJRm9y bV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJaW50IGk7 CisKKwkvKiBHZXQgdGhlIHBnX3RyYW5zZm9ybSB0dXBsZSAqLworCXRyZlR1cCA9IFNlYXJjaFN5 c0NhY2hlMShUUkZPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHJmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJl IGZvciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0cmZGb3JtID0g KEZvcm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVwKTsKKworCS8qIEdldCB0aGUgY29y cmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoTEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxh bmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdl IHdpdGggT0lEICV1IiwKKwkJCSB0cmZGb3JtLT50cmZsYW5nKTsKKwlsYW5nRm9ybSA9IChGb3Jt X3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVu YW1lfUQgTEFOR1VBR0UgJXtsYW5ndWFnZX1JCisJICogKCBGUk9NIFNRTCBXSVRIIEZVTkNUSU9O ICV7c2lnbmF0dXJlfXMsIFRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zICkK KwkgKi8KKwljcmVhdGVUcmFuc2Zvcm0gPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChjcmVhdGVUcmFuc2Zvcm0sICIle29yX3JlcGxhY2V9cyIsCisJCQkJ CQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVUcmFuc2Zvcm0sICJUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSB0cmZGb3JtLT50cmZ0eXBlKSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJh bnNmb3JtLCAiTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwKKwkJCQkJCSBOYW1lU3RyKGxhbmdGb3Jt LT5sYW5uYW1lKSk7CisKKwkvKiBkZXBhcnNlIHRoZSB0cmFuc2Zvcm1fZWxlbWVudF9saXN0ICov CisJaWYgKHRyZkZvcm0tPnRyZmZyb21zcWwgIT0gSW52YWxpZE9pZCkKKwl7CisJCUxpc3QgKnBh cmFtcyA9IE5JTDsKKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheAorCQkgKgorCQkgKiBDUkVB VEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0UgJXts YW5ndWFnZX1JCisJCSAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1zICkK KwkJICovCisKKwkJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlIGZvciB0aGUgRlJPTSBGVU5DVElP TiAqLworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIHRyZkZvcm0tPnRyZmZy b21zcWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQl0 cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJV Q1QocHJvY1R1cCk7CisKKwkJLyoKKwkJICogQ1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFu Z2UgZnVuY3Rpb24gc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZworCQkgKiB0byBnZXQg aW5wdXQgdHlwZSBPaWRzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9u YXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlICpwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsK KworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAt MSkpOworCQkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFt b2JqKSk7CisJCX0KKworCQlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIo cHJvY0Zvcm0tPnByb25hbWUpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3Qoc2lnbiwgIigle2Fy Z3VtZW50czosIH1zKSIsIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRl VHJhbnNmb3JtLCAiKEZST00gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHNpZ24p OworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWlmICh0cmZGb3JtLT50cmZ0b3Nx bCAhPSBJbnZhbGlkT2lkKQorCXsKKwkJTGlzdCAqcGFyYW1zID0gTklMOworCisJCS8qCisJCSAq IFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZP Uk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkKKwkJICogKCBGUk9NIFNR TCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMsIFRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2ln bmF0dXJlX3RvZn1zICkKKwkJICoKKwkJICogT1IKKwkJICoKKwkJICogQ1JFQVRFICV7b3JfcmVw bGFjZX1zIFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQor CQkgKiAoIFRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zICkKKwkJICovCisK KwkJLyogQXBwZW5kIGEgJywnIGlmIHRyZmZyb21zcWwgaXMgcHJlc2VudCwgZWxzZSBhcHBlbmQg JygnICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwgIiV7Y29tbWF9 cyIsCisJCQkJCQkJIHRyZkZvcm0tPnRyZmZyb21zcWwgIT0gSW52YWxpZE9pZCA/ICIsIiA6ICIo Iik7CisKKwkJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlIGZvciB0aGUgVE8gRlVOQ1RJT04gKi8K KwkJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZ0b3NxbCk7 CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCXRyZkZvcm0t PnRyZnRvc3FsKTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1 cCk7CisKKwkJLyoKKwkJICogQ1JFQVRFIFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rp b24gc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZworCQkgKiB0byBnZXQgaW5wdXQgdHlw ZSBPaWRzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsr KQorCQl7CisJCQlPYmpUcmVlICpwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle3R5cGV9VCIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJ cGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJ CX0KKworCQlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHNpZ24sICIle2lkZW50aXR5fUQiLAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShw cm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSBOYW1lU3RyKHByb2NGb3JtLT5w cm9uYW1lKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHNpZ24sICIoJXthcmd1bWVudHM6LCB9 cykiLCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVRyYW5zZm9ybSwg IlRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwgc2lnbik7CisJCVJlbGVh c2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlVHJh bnNmb3JtLCAiJXtjbG9zZV9icmFja2V0fXMiLCAiKSIpOworCisJUmVsZWFzZVN5c0NhY2hlKGxh bmdUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0cmZUdXApOworCXJldHVybiBjcmVhdGVUcmFuc2Zv cm07Cit9CisKKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFBy b2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVf Y29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9k ZQkgICAqcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNvbW1hbmQ7CisKKwlBc3NlcnQoY21kLT50 eXBlID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2Jq ZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9l eHRlbnNpb24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQp KQorCQlyZXR1cm4gTlVMTDsKKworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2 ZXJ5dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRh ZyhwYXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQljb21tYW5k ID0gZGVwYXJzZV9DcmVhdGVTY2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBUX0FsdGVyRG9tYWluU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyRG9tYWluU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkgIGNtZC0+ZC5z aW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVh dGVUcmlnU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9S dWxlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1J1bGVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0NyZWF0ZUZkd1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVGZHdT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRmR3 U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0RlZmluZVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmpl Y3QpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10OgorCQkJY29t bWFuZCA9IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFeHRl bnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Fs dGVyRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckV4dGVu c2lvbkNvbnRlbnRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29u dGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuc2lt cGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlT3BGYW1p bHlTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfSW5k ZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0 ZUZ1bmN0aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKG9iamVj dElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rpb25TdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfUmVuYW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX0FsdGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl ck9iamVjdFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJCXBh cnNldHJlZSwKKwkJCQkJCQkJCQkJCQljbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9BbHRlck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9BbHRlclBvbGljeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclBvbGlj eVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJU eXBlU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CisJ CQljb21tYW5kID0gZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUg QVMgRU5VTSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10OgkvKiBD UkVBVEUgVFlQRSBBUyBSQU5HRSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUmFuZ2VT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRW51 bVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJY29tbWFu ZCA9IGRlcGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJY29tbWFuZCA9IGRlcGFy c2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBUX0NyZWF0ZVRyYW5zZm9ybVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9D cmVhdGVUcmFuc2Zvcm1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJ ZGVmYXVsdDoKKwkJCWNvbW1hbmQgPSBOVUxMOworCQkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQg bm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKHBh cnNldHJlZSkpOworCX0KKworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogU3Vicm91dGlu ZSBmb3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0 YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2Ug aWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJh Y3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3Qg KgorZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVs ZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3Np dGUpCit7CisJTGlzdAkgICAqZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlm b3JlYWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikg bGZpcnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0Nv bHVtbkRlZjoKKwkJCQl7CisJCQkJCU9ialRyZWUJICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5 cGVkID8KKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQs CisJCQkJCQkJCQkJCQkoQ29sdW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5E ZWYocmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5E ZWYgKikgZWx0LAorCQkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMKTsKKwkJCQkJaWYgKHRyZWUgIT0g TlVMTCkKKwkJCQkJeworCQkJCQkJT2JqRWxlbQkqY29sdW1uOworCisJCQkJCQljb2x1bW4gPSBu ZXdfb2JqZWN0X29iamVjdCh0cmVlKTsKKwkJCQkJCWVsZW1lbnRzID0gbGFwcGVuZChlbGVtZW50 cywgY29sdW1uKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVF9Db25zdHJh aW50OgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBu b2RlIHR5cGUgJWQiLCBub2RlVGFnKGVsdCkpOworCQl9CisJfQorCisJcmV0dXJuIGVsZW1lbnRz OworfQorCisvKgorICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgor ICovCitjaGFyICoKK2RlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNt ZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBh dGg7CisJTWVtb3J5Q29udGV4dAlvbGRjeHQ7CisJTWVtb3J5Q29udGV4dAl0bXBjeHQ7CisJT2Jq VHJlZQkJICAgKnRyZWU7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJU3RyaW5nSW5mb0RhdGEgIHN0 cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcg cm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3By aW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlOyBidXQgYWxsb2NhdGUKKwkgKiB0 aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5n SW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9y eUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwK KwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5 aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiBp biBvcmRlciB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBz dWNoIHJlc3VsdHMsCisJICogd2Ugd2FudCBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmll ZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiCisJICogdG8gZW52aXJvbm1lbnRzIHdp dGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0CisJ ICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRo IGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKi8K KwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVudE1lbW9yeUNvbnRl eHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlkZVBhdGgtPmFkZENh dGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVlOworCVB1c2hPdmVy cmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2ZXJib3NlX21vZGU7 CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBsZToKKwkJCXRyZWUg PSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0 ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CisJCQlicmVh azsKKwkJY2FzZSBTQ1RfR3JhbnQ6CisJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsK KwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlck9wRmFtaWx5OgorCQkJdHJlZSA9IGRlcGFyc2Vf QWx0ZXJPcEZhbWlseShjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6 CisJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOworCQkJYnJlYWs7CisJ CWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRTQ29uZmln dXJhdGlvblN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOworCX0KKworCVBv cE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJeworCQlKc29uYiAqanNvbmI7 CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUpOworCQljb21tYW5kID0gSnNvbmJU b0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKwl9CisJ ZWxzZQorCQljb21tYW5kID0gTlVMTDsKKworCS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQg c2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5nSW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250 ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBub3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsK KworCXJldHVybiBjb21tYW5kOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZmI5NzBmMmJlZgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3NjMgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQg dG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBz cGVjaWZpZXIsIGl0IGRldGVybWluZXMgaG93IHdlIGV4cGFuZCB0aGUganNvbiBlbGVtZW50IGlu dG8KKyAqIHN0cmluZy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNw ZWNPcGVyYXRvcm5hbWUsCisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVt YmVyLAorCVNwZWNTdHJpbmdMaXRlcmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9 IGNvbnZTcGVjaWZpZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgd2hpY2ggcmVwcmVzZW50 cyBhIGJvb2xlYW4gdHlwZSBKc29uYlZhbHVlLgorICovCit0eXBlZGVmIGVudW0KK3sKKwl0dl9h YnNlbnQsCisJdHZfdHJ1ZSwKKwl0dl9mYWxzZQorfSBqc29uX3RyaXZhbHVlOworCitzdGF0aWMg Ym9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFt LAorCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAor CQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXko U3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIs IGNoYXIgKmFycmF5c2VwLAorCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBj aGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7 CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisg KiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdp dmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZC b29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNl bnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVl LgorICovCitzdGF0aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVy KEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1 ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1ZQlyZXN1bHQ7CisKKwlr ZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtl eS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZh bHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7 CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50 eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMg bm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJCQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVl LT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwly ZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0 aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mg b2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBp dCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJyb3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29r OyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0 cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICps ZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcu CisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25i Q29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Np bmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZh bHVlOworCWNoYXIJICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9i amVjdCwgbm90IGFuIGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFs LnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXlu YW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJ CQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlp ZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1p c3NpbmcgZWxlbWVudCBcIiVzXCIgaW4ganNvbiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKwor CXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcu bGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOwor CXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0Vf UE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0 cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBz cGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIg Zm9yIHBnX2V2ZW50X3RyaWdnZXJfZXhwYW5kX2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10 IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUK KyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3Jl Y3Vyc2l2ZShKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIGJ1ZikKK3sKKwlK c29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwlj b25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47 CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIs ICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZv ciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZp ZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJh bSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICcl JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250 aW51ZTsKKwkJfQorCisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwor CQkvKiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICcl JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250 aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUu ICBBbGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVt cHR5IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVyIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpj cCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9E YXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5mbwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmlu Z0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFS U0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQlmb3IgKDsgY3AgPCBlbmRfcHRyOykKKwkJCXsK KwkJCQlpZiAoKmNwID09ICc6JykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvdW5kIGFycmF5 IHNlcGFyYXRvciBkZWxpbWl0ZXI7IGVsZW1lbnQgbmFtZSBpcyBub3cKKwkJCQkJICogY29tcGxl dGUsIHN0YXJ0IGZpbGxpbmcgdGhlIHNlcGFyYXRvci4KKwkJCQkJICovCisJCQkJCWluaXRTdHJp bmdJbmZvKCZhcnJheXNlcGJ1Zik7CisJCQkJCWFwcGVuZFRvID0gJmFycmF5c2VwYnVmOworCQkJ CQlpc19hcnJheSA9IHRydWU7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0 cik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICgqY3AgPT0gJ30nKQorCQkJCXsK KwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYXBwZW5kVG8sICpjcCk7CisJCQkJ QURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCX0KKwkJCXBhcmFtID0gcGFy YnVmLmRhdGE7CisJCQlpZiAoaXNfYXJyYXkpCisJCQkJYXJyYXlzZXAgPSBhcnJheXNlcGJ1Zi5k YXRhOworCQl9CisJCWlmIChwYXJhbSA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygi bWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJ CXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRl bnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNE b3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3Bl Y1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNT dHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0g U3BlY1R5cGVuYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0g U3BlY09wZXJhdG9ybmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmll ciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIg PSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJ CX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAq LworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07 CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5k SnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKwor CQkvKgorCQkgKiBFeHBhbmQgdGhlIGRhdGEgKHBvc3NpYmx5IGFuIGFycmF5KSBpbnRvIHRoZSBv dXRwdXQgU3RyaW5nSW5mby4KKwkJICovCisJCWlmIChpc19hcnJheSkKKwkJCWV4cGFuZF9qc29u Yl9hcnJheShidWYsIHBhcmFtLCB2YWx1ZSwgYXJyYXlzZXAsIHNwZWNpZmllciwgc3RhcnRfcHRy KTsKKwkJZWxzZQorCQkJZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KGJ1ZiwgcGFyYW0sIHZhbHVl LCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNvbiB2 YWx1ZSBhcyBhIHF1b3RlZCBpZGVudGlmaWVyLiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZSBz dHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCUFz c2VydChqc29udmFsLT50eXBlID09IGpidlN0cmluZyk7CisKKwlzdHIgPSBwbnN0cmR1cChqc29u dmFsLT52YWwuc3RyaW5nLnZhbCwganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOworCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7 Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgZG90LXNlcGFyYXRlZC1uYW1l LiAgVGhlIHZhbHVlIG11c3QgYmUgb2YgdHlwZQorICogb2JqZWN0IGFuZCBtYXkgY29udGFpbiBl bGVtZW50cyAic2NoZW1hbmFtZSIgKG9wdGlvbmFsKSwgIm9iam5hbWUiCisgKiAobWFuZGF0b3J5 KSwgImF0dHJuYW1lIiAob3B0aW9uYWwpLiAgRG91YmxlIHF1b3RlcyBhcmUgYWRkZWQgdG8gZWFj aCBlbGVtZW50CisgKiBhcyBuZWNlc3NhcnksIGFuZCBkb3Qgc2VwYXJhdG9ycyB3aGVyZSBuZWVk ZWQuCisgKgorICogT25lIGRheSB3ZSBtaWdodCBuZWVkIGEgImNhdGFsb2ciIGVsZW1lbnQgYXMg d2VsbCwgYnV0IG5vIGN1cnJlbnQgdXNlIGNhc2UKKyAqIG5lZWRzIHRoYXQuCisgKi8KK3N0YXRp YyB2b2lkCitleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZh bHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKworCXN0ciA9IGZpbmRfc3RyaW5nX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkic2No ZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQor CisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisK KwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7 CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsK KwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEg dHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfdHlwZW5hbWUoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc2NoZW1hID0g TlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAgICp0eXBtb2RzdHI7CisJanNvbl90 cml2YWx1ZQlpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ug b21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVt ZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVu Y2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2Ug cXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFs bG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZh bCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0 IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9t aXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRv IGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRf c3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJ CQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAi dHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250 YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIp OworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNv ciA9ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3Ig PSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJ aWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVf aWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOyAvKiBTcGVjaWFsIHR5cG1vZCBu ZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lk ZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisK KwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAi IiwgYXJyYXlfZGVjb3IpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBv cGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihT dHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisK KwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5 LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBTY2hlbWEg bWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0g J1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmll cihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJIm9iam5hbWUi LCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgorICogRXhwYW5kIGEganNv biB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9y IG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRoZSBsYXR0ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4g YSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAqIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBh bHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQg aXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5zaW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisg KgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0 byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiLgorICovCitzdGF0 aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVl ICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFw cGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJ CQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5 cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJanNvbl90cml2YWx1ZQlwcmVzZW50OworCisJCXByZXNl bnQgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCQkgICJwcmVzZW50Iik7CisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBz ZXQgdG8gZmFsc2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndp c2UgKGVpdGhlciB0cnVlIG9yIGFic2VudCksIGZhbGwgdGhyb3VnaCB0byBleHBhbmQgImZtdCIu CisJCSAqLworCQlpZiAocHJlc2VudCA9PSB0dl9mYWxzZSkKKwkJCXJldHVybiBmYWxzZTsKKwor CQlleHBhbmRfZm10X3JlY3Vyc2l2ZShqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsIGJ1Zik7CisJ fQorCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBF eHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgc3RyaW5nIGxpdGVyYWwuCisgKi8KK3N0YXRpYyB2b2lk CitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252 YWwpCit7CisJY2hhciAgICpzdHI7CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMg Y29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZWF8iOworCWludCAgICAgICAgIGRxbmV4 dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpz b252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5v ICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICovCisJaWYgKHN0cmNocihzdHIs ICdcJycpID09IE5VTEwgJiYKKwkJc3RyY2hyKHN0ciwgJ1xcJykgPT0gTlVMTCkKKwl7CisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJyVzJyIsIHN0cik7CisJCXBmcmVlKHN0cik7CisJCXJldHVy bjsKKwl9CisKKwkvKiBPdGhlcndpc2UgbmVlZCB0byBmaW5kIGEgdXNlZnVsIGRvbGxhci1xdW90 ZSBkZWxpbWl0ZXIgKi8KKwlpbml0U3RyaW5nSW5mbygmZHFkZWxpbSk7CisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZHFkZWxpbSwgIiQiKTsKKwl3aGlsZSAoc3Ryc3RyKHN0ciwgZHFkZWxpbS5k YXRhKSAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVsaW0sIGRxc3Vm Zml4ZXNbZHFuZXh0Y2hhcisrXSk7CisJCWRxbmV4dGNoYXIgPSBkcW5leHRjaGFyICUgKHNpemVv ZihkcXN1ZmZpeGVzKSAtIDEpOworCX0KKwkvKiBBZGQgdHJhaWxpbmcgJCAqLworCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZkcWRlbGltLCAnJCcpOworCisJLyogQW5kIGZpbmFsbHkgcHJvZHVjZSB0 aGUgcXVvdGVkIGxpdGVyYWwgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gKi8KKwlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiVzJXMlcyIsIGRxZGVsaW0uZGF0YSwgc3RyLCBkcWRlbGltLmRhdGEp OworCXBmcmVlKGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYW4gaW50ZWdlciBxdWFudGl0eS4KKyAqLworc3RhdGljIHZvaWQK K2V4cGFuZF9qc29udmFsX251bWJlcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZh bCkKK3sKKwljaGFyICpzdHJkYXR1bTsKKworCXN0cmRhdHVtID0gRGF0dW1HZXRDU3RyaW5nKERp cmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0 RGF0dW0oanNvbnZhbC0+dmFsLm51bWVyaWMpKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsIHN0cmRhdHVtKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSByb2xl IG5hbWUuICBJZiB0aGUgaXNfcHVibGljIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJM SUMgaXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiBy b2xlIG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lk CitleHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFs KQoreworCWpzb25fdHJpdmFsdWUJaXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29s X2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJ ImlzX3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQljaGFyICpyb2xlbmFtZTsK KworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJ CWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3Rl X2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30K KworLyoKKyAqIEV4cGFuZCBvbmUganNvbiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJ bmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1l bnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRv ZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4K KyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVhbCBleHBhbnNpb24gd2FzIG1hZGUgKGR1 ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5nIHNldCB0byAiZmFsc2UiIGluIGZvcm1h dHRlZCBzdHJpbmcgZXhwYW5zaW9uKS4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9vbmVfanNv bmJfZWxlbWVudChTdHJpbmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sIEpzb25iVmFsdWUgKmpzb252 YWwsCisJCQkJCQkgY29udlNwZWNpZmllciBzcGVjaWZpZXIsIGNvbnN0IGNoYXIgKmZtdCkKK3sK Kwlib29sIHJlc3VsdCA9IHRydWU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4 dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVw b3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0 LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9 ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRf c3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlp ZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZv dW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lk ZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwi JXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBh bmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJUQgZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisK KwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYm CisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgb3Igb2JqZWN0IGZvciAlJXMgZWxlbWVudCBcIiVz XCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0 ID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQlj YXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5n KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFS QU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAl JUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBl KSkpOworCQkJZXhwYW5kX2pzb252YWxfc3RybGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsK KworCQljYXNlIFNwZWNUeXBlbmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFy eSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BB UkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3Ig JSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlw ZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVh azsKKworCQljYXNlIFNwZWNPcGVyYXRvcm5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBq YnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmpl Y3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252 YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVtYmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0g amJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51 bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpz b252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsK KwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1JvbGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBq YnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmpl Y3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252 YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQli cmVhazsKKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29u dGV4dC5wcmV2aW91czsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9u IHRoZSBlbGVtZW50cyBvZiBhIEpTT04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRo ZSBvdXRwdXQKKyAqIFN0cmluZ0luZm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmll ciwgc2VwYXJhdGVkIGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9p ZAorZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkg ICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVj aWZpZXIsCisJCQkJICAgY29uc3QgY2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNr IHNxbGVycmNvbnRleHQ7CisJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJh dG9yICAqaXQ7CisJSnNvbmJWYWx1ZQl2OworCWludAkJCXR5cGU7CisJYm9vbAkJZmlyc3QgPSB0 cnVlOworCVN0cmluZ0luZm9EYXRhIGFycmF5ZWxlbTsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4g YSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLwor CWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2Nh bGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29u dGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoanNvbmFyci0+dHlwZSAhPSBqYnZCaW5h cnkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBh cnJheSIsIHBhcmFtKSkpOworCisJY29udGFpbmVyID0ganNvbmFyci0+dmFsLmJpbmFyeS5kYXRh OworCWlmICghSnNvbkNvbnRhaW5lcklzQXJyYXkoY29udGFpbmVyKSkKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkg ZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisK Kwlpbml0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQo Y29udGFpbmVyKTsKKwl3aGlsZSAoKHR5cGUgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZ2LCB0 cnVlKSkgIT0gV0pCX0RPTkUpCisJeworCQlpZiAodHlwZSA9PSBXSkJfRUxFTSkKKwkJeworCQkJ cmVzZXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9l bGVtZW50KCZhcnJheWVsZW0sIHBhcmFtLCAmdiwgc3BlY2lmaWVyLCBOVUxMKSkKKwkJCXsKKwkJ CQlpZiAoIWZpcnN0KQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJyYXlzZXAp OworCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGFycmF5ZWxlbS5kYXRhLCBhcnJh eWVsZW0ubGVuKTsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJfQorCQl9CisJfQorCisJaWYgKGZt dCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisK Ky8qCisgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLgorICovCitj aGFyICoKK2RkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQoreworCURh dHVtCQlkOworCUpzb25iCSAgICpqc29uYjsKKwlTdHJpbmdJbmZvIGJ1ZiA9IChTdHJpbmdJbmZv KSBwYWxsb2MwKHNpemVvZihTdHJpbmdJbmZvRGF0YSkpOworCisJaW5pdFN0cmluZ0luZm8oYnVm KTsKKworCWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0o anNvbl9zdHIpKTsKKwlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CisKKwll eHBhbmRfZm10X3JlY3Vyc2l2ZSgmanNvbmItPnJvb3QsIGJ1Zik7CisKKwlyZXR1cm4gYnVmLT5k YXRhOworfQorCisvKi0tLS0tLQorICogUmV0dXJucyBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBh IEpTT04gb2JqZWN0LgorICoKKyAqIFRoZSBzdGFydGluZyBwb2ludCBpcyB0aGUgZWxlbWVudCBu YW1lZCAiZm10IiAod2hpY2ggbXVzdCBiZSBhIHN0cmluZykuCisgKiBUaGlzIGZvcm1hdCBzdHJp bmcgbWF5IGNvbnRhaW4gemVybyBvciBtb3JlICUtZXNjYXBlcywgd2hpY2ggY29uc2lzdCBvZiBh bgorICogZWxlbWVudCBuYW1lIGVuY2xvc2VkIGluIHsgfSwgcG9zc2libHkgZm9sbG93ZWQgYnkg YSBjb252ZXJzaW9uIG1vZGlmaWVyLAorICogZm9sbG93ZWQgYnkgYSBjb252ZXJzaW9uIHNwZWNp Zmllci4gIFBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgorICogJQkJZXhw YW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlm aWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxpZmllZCBpZGVu dGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBv cGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNp bmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1 b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90aW5nKQorICog UgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwgb3IgUFVCTElD KQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9y IHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJlc2VuY2UgaW5k aWNhdGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0 aGUgc3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRz LgorICotLS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZV TkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJ Y2hhcgkgICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9IHRleHRfdG9fY3N0cmluZyhqc29uKTsK KworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGRkbF9kZXBhcnNlX2pzb25fdG9f c3RyaW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICogRXJyb3IgY29udGV4dCBjYWxsYmFjayBm b3IgSlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4KKyAqCisgKiBYWFg6IGluZGljYXRlIHdo aWNoIGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMg dm9pZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3 aGlsZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tZXNvbi5idWlsZAppbmRleCA5YjM1MGQwMjVmLi5jMWUxYTJjMThlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tZXNvbi5idWlsZApAQCAtMTUsNiArMTUsOCBAQCBiYWNrZW5kX3NvdXJjZXMg Kz0gZmlsZXMoCiAgICdjb3B5dG8uYycsCiAgICdjcmVhdGVhcy5jJywKICAgJ2RiY29tbWFuZHMu YycsCisgICdkZGxfZGVwYXJzZS5jJywKKyAgJ2RkbF9qc29uLmMnLAogICAnZGVmaW5lLmMnLAog ICAnZGlzY2FyZC5jJywKICAgJ2Ryb3BjbWRzLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKaW5k ZXggOTljOWY5MWNiYS4uNDIwNWRkYTIyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBAIC0x NzA4LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExpc3Qg Km93bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVyZWws IE5vTG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0YWls ZWQKKyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBz ZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJUmVs YXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1 ZW5jZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyogT3Bl biBhbmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5j ZUlkLCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlk LCBHZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAh PSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQg Zm9yIHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwp KSkpOworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOwor CXJldFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJ bWVtY3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOwor CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9M b2NrKTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFy YW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li5mNjRhNzIxM2I3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1 ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0 aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBP aWQgdHlwbW9kb3V0KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZvcm1hdF90eXBlX3dp dGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1v ZCBkZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgor Y2hhciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9p ZCB0eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5k ZXggNmQ0YzFjMjdhNS4uNmIyMzZlNWYxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00 NCw2ICs0NCw4IEBACiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFy ICpzdHJpbmcsIGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5h cmdzLCBPaWQgKmFyZ3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9hcmdz X2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJbmZv IGJ1ZiwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkg VVNFUiBJL08gUk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzEsNiArMzMzLDI5IEBAIGZv cm1hdF9wcm9jZWR1cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogCXJldHVybiBmb3Jt YXRfcHJvY2VkdXJlX2V4dGVuZGVkKHByb2NlZHVyZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNFX1FV QUxJRlkpOwogfQogCisvKgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBw cm9jIE9JRCB0byAiKGFyZ3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhP aWQgcHJvY2VkdXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRh IGJ1ZjsKKwlIZWFwVHVwbGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwor CXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9j ZWR1cmVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29p ZCk7CisJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlp bml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJv Y2Zvcm0sICZidWYsIGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXAp OworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRl bmRlZCAtIGNvbnZlcnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoKQEAg LTIwNjAsMyArMjA4NSwzMCBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJp bmcsIGJvb2wgYWxsb3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsKIH0K KworLyoKKyAqIEFwcGVuZCB0aGUgcGFyZW50aGlzZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBw Z19wcm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxpZnkgaW5k aWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJkbGVz cyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9hcmdz X2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJCQkJ ICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3MgPSBwcm9j Zm9ybS0+cHJvbmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9y IChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHByb2Nm b3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJ CQkJCQkgICBmb3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZp ZWQodGhpc2FyZ3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJndHlwZSkp OworCX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKaW5kZXggODU1ZDQ4MzcyYS4uMzBiOGQ5MDc2NSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwpAQCAtMzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVuY3Rp b25fYXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJCQkJ CSBib29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGljIHZv aWQgcHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0 dXApOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBidWYs IEhlYXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJvZHko U3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9ydGFi bGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2Vz LAogCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVwYXJz ZV9mb3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAgLTQ4 MiwyMiArNDgxLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0KFJh bmdlVGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNl ICp0YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRp YyB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUs Ci0JCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJlY3Rp b24oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIHBy aW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0ICpj b250ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwogc3Rh dGljIGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1lc3Bh Y2VzKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQg cmVsaWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwg aW50IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0JCQkJ CQkJCQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJCQlQ YXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX29w ZXJhdG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2b2lk IGFkZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIgKmdl bmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpzdHJp bmdfdG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhP aWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERh dHVtIHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+aW5o ID8gIiIgOiAiT05MWSAiKQpAQCAtNTQ1LDYgKzUzNyw3NyBAQCBwZ19nZXRfcnVsZWRlZl9leHQo UEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykp OwogfQogCisvKgorICogR2l2ZW4gYSBwYWlyIG9mIERhdHVtIGNvcnJlc3BvbmRpbmcgdG8gYSBy dWxlJ3MgcGdfcmV3cml0ZS5ldl9xdWFsIGFuZAorICogZXZfYWN0aW9uIGNvbHVtbnMsIHJldHVy biB0aGVpciB0ZXh0IHJlcHJlc2VudGF0aW9uOyBldl9xdWFsIGFzIGEgc2luZ2xlCisgKiBzdHJp bmcgaW4gd2hlcmVDbGF1c2UgYW5kIGV2X2FjdGlvbiBhcyBhIExpc3Qgb2Ygc3RyaW5ncyAod2hp Y2ggbWlnaHQgYmUKKyAqIE5JTCwgc2lnbmFsbGluZyBOT1RISU5HKSBpbiBhY3Rpb25zLgorICov Cit2b2lkCitwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9h Y3Rpb24sCisJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKQoreworCWlu dCBwcmV0dHlGbGFncyA9IDA7CisJY2hhciAqcXVhbHN0ciA9IFRleHREYXR1bUdldENTdHJpbmco ZXZfcXVhbCk7CisJY2hhciAqYWN0aW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9hY3Rp b24pOworCUxpc3QgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGFjdGlv bnN0cik7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJ aWYgKHN0cmxlbihxdWFsc3RyKSA+IDAgJiYgc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJ eworCQlOb2RlCSAgICpxdWFsOworCQlRdWVyeQkgICAqcXVlcnk7CisJCWRlcGFyc2VfY29udGV4 dCBjb250ZXh0OworCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOworCisJCXF1YWwgPSBzdHJpbmdU b05vZGUocXVhbHN0cik7CisKKwkJcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9k ZUxpc3QpOworCQlxdWVyeSA9IGdldEluc2VydFNlbGVjdFF1ZXJ5KHF1ZXJ5LCBOVUxMKTsKKwor CQlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2UpOworCisJCWNvbnRleHQu YnVmID0gJmJ1ZjsKKwkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisJ CWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworCQljb250ZXh0LndpbmRvd1RMaXN0ID0gTklM OworCQljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRhYmxlKSAhPSAx KTsKKwkJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eUZsYWdzOworCQljb250ZXh0LndyYXBD b2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOworCQljb250ZXh0LmluZGVudExldmVsID0gUFJF VFRZSU5ERU5UX1NURDsKKworCQlzZXRfZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBO SUwpOworCisJCWdldF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKworCQkqd2hl cmVDbGF1c2UgPSBwc3RyZHVwKGJ1Zi5kYXRhKTsKKwl9CisJZWxzZQorCQkqd2hlcmVDbGF1c2Ug PSBOVUxMOworCisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlvbk5vZGVMaXN0KSA9PSAwKQorCQkqYWN0 aW9ucyA9IE5JTDsKKwllbHNlCisJeworCQlMaXN0Q2VsbCAqY2VsbDsKKwkJTGlzdAkqb3V0cHV0 ID0gTklMOworCisJCWZvcmVhY2goY2VsbCwgYWN0aW9uTm9kZUxpc3QpCisJCXsKKwkJCVF1ZXJ5 CSpxdWVyeSA9IChRdWVyeSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCWlmIChxdWVyeS0+Y29tbWFu ZFR5cGUgPT0gQ01EX05PVEhJTkcpCisJCQkJY29udGludWU7CisKKwkJCXJlc2V0U3RyaW5nSW5m bygmYnVmKTsKKwkJCWdldF9xdWVyeV9kZWYocXVlcnksICZidWYsIE5JTCwgTlVMTCwgdHJ1ZSwK KwkJCQkJCSAgcHJldHR5RmxhZ3MsIFdSQVBfQ09MVU1OX0RFRkFVTFQsIDApOworCQkJb3V0cHV0 ID0gbGFwcGVuZChvdXRwdXQsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQorCQkqYWN0aW9ucyA9 IG91dHB1dDsKKwl9Cit9CiAKIHN0YXRpYyBjaGFyICoKIHBnX2dldF9ydWxlZGVmX3dvcmtlcihP aWQgcnVsZW9pZCwgaW50IHByZXR0eUZsYWdzKQpAQCAtMTAxNSw2NSArMTA3OCwxMiBAQCBwZ19n ZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251 bGwpCiAJewogCQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2Nv bnRleHQgY29udGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRy eSAqb2xkcnRlOwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmYnVmLCAiV0hFTiAoIik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVh bCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIg PSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJ cmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWls ZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFr ZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsK LQkJb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9 IHJlbGtpbmQ7Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9s ZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9s ZHJ0ZS0+YWxpYXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9 IGZhbHNlOwotCQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9k ZShSYW5nZVRibEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQlu ZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVs a2luZDsKLQkJbmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRl LT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRl LT5hbGlhczsKLQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFs c2U7Ci0JCW5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50 IHJ0YWJsZSAqLwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRh YmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7 Ci0JCWRwbnMuY3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0 YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMo JmRwbnMpOwotCi0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0 YWNrICovCi0JCWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlz dF9tYWtlMSgmZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0 LndpbmRvd1RMaXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRl eHQucHJldHR5RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3Jh cENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQ UkVUVFlJTkRFTlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRf Tk9ORTsKLQkJY29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHBy KHF1YWwsICZjb250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVm LCAiKSAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIp OwogCX0KIAogCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwK QEAgLTExMTQsNiArMTEyNCw2NCBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdp ZCwgYm9vbCBwcmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoKK3BnX2dldF90 cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1 c2UsIGJvb2wgcHJldHR5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICBy ZWxraW5kOworCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRw bnM7CisJUmFuZ2VUYmxFbnRyeSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKwor ICAgaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQo dHJpZ3JlYy0+dGdyZWxpZCk7CisKKyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRF cyBmb3IgdGhlIHJlbCAqLworICAgb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Cisg ICBvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBvbGRydGUtPnJlbGlkID0gdHJp Z3JlYy0+dGdyZWxpZDsKKyAgIG9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUt PmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRl LT5hbGlhczsKKyAgIG9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBm YWxzZTsKKyAgIG9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9k ZShSYW5nZVRibEVudHJ5KTsKKyAgIG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAg IG5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5yZWxraW5kID0g cmVsa2luZDsKKyAgIG5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBu ZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7 CisgICBuZXdydGUtPmluaCA9IGZhbHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisK KyAgIC8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBz aXplb2YoZHBucykpOworICAgZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRl KTsKKyAgIGRwbnMuY3RlcyA9IE5JTDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwg TlVMTCk7CisgICBzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1 cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1 ZiA9ICZidWY7CisgICBjb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAg IGNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOworICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5J TDsKKyAgIGNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3Mg PSBwcmV0dHkgPyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlG TEFHX0lOREVOVDsKKyAgIGNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7 CisgICBjb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQu c3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisgICBnZXRfcnVsZV9leHByKHdo ZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0YTsKK30KKwog LyogLS0tLS0tLS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24g b2YgYW4gaW5kZXgKICAqCkBAIC0xODgwLDYgKzE5NDgsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZf Y29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRl Zl93b3JrZXIocmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVy bmFsIHZlcnNpb24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlv biAqLworY2hhciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJl dHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9 CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtl eSBkZWZpbml0aW9uLgogICovCkBAIC0yMTMxLDYgKzIyMDYsMTUgQEAgcGdfZ2V0X2NvbnN0cmFp bnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9f dGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRl ZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29u c3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBw Z19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2Up OworfQorCiAvKgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVS IFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzU4NSw3 IEBAIHBnX2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JF VFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lk CiBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1 cCkKIHsKIAlpbnQJCQludW1hcmdzOwpAQCAtMTEzODQsNyArMTE0NjgsNyBAQCBnZXRfdGFibGVz YW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMg YmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikK ICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9p ZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3NzgsNyAr MTE4NjIsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAg KgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVt YS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rp b25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5 cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJ CQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTY0LDcgKzEyMjQ4 LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAv KgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9w dGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0 dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA2OGJiMDMyZDNlLi4yYzg3MTA2ZWVmIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODIzLDQgKzExODIzLDEwIEBACiAgIHByb3JldHR5cGUg PT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnkn LAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBv aWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29u IGZvcm1hdCBzdHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJv cmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHBy b3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3Ig PT4gJ2V4cGFuZCBqc29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHBy b25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4 dCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBh bmRfY29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVl bmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2NmYTku LmMyYjFjYTMyZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0 eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChP aWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwo UEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVs aWQpOworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9p ZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFy c2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJl c3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVk ZS90Y29wL2RkbF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uYmRmZGY0N2UyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2Rl cGFyc2UuaApAQCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxf ZGVwYXJzZS5oCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNy Yy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaWZuZGVmIERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVk ZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0 eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0 ZXJuIGNoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVy biBjaGFyICpkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29u c3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOwor CisKKyNlbmRpZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmgKaW5kZXggOTRkZTEzZDk5MC4uYjUzMjk0YmY1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRp bGl0eS5oCkBAIC02Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQK IAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3 cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0 aWxzL2FjbGNoa19pbnRlcm5hbC5oCmluZGV4IDM2MTI4NGQ4ZWIuLjRlMDIwZWY0YWUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3Ry dWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhh dmlvciBiZWhhdmlvcjsKKwlPaWQJCQlncmFudG9yX3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvYnVpbHRpbnMuaAppbmRleCA4MTYzMWYxNjQ1Li43MTUwZmFiZDI0IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1 aWx0aW5zLmgKQEAgLTExNCwxMCArMTE0LDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0 OF9ub19vdmVyZmxvdyhQR19GVU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9S Q0VfUVVBTElGWQkweDA0CS8qIGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmlu ZSBGT1JNQVRfVFlQRV9JTlZBTElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAq LwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIg dHlwZW1vZCwgYml0czE2IGZsYWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2Fy Z3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFy ICpmb3JtYXRfdHlwZV9iZShPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBl X2JlX3F1YWxpZmllZChPaWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dp dGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnBy aW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91 dCk7CiAKIGV4dGVybiBpbnQzMiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMy IHR5cGVtb2QpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBi L3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDdkNDg5NzE4YTMuLjNjYmNhNDhm ODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9p bmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIFJVTEVV VElMU19ICiAjZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdn ZXIuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCkBAIC0yMywxMiArMjQsMTkgQEAgc3Ry dWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhP aWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lk IGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdHJpZ2dlcl93 aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJCQkJCQkJICAgTm9kZSAqd2hl bkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRlZihRdWVy eSAqcXVlcnksIGJvb2wgcHJldHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVm X2NvbHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3Bh cnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25z dHJkZWZfc3RyaW5nKE9pZCBwYXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJu IGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7Citl eHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0 cmFpbnRJZCk7CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9x dWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQkJCSAgIGNoYXIgKip3aGVyZUNsYXVzZSwgTGlz dCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4 cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93 aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAq YWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCArNDgsMTYgQEAgZXh0ZXJuIExpc3QgKnNl bGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkg Qml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9u YW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQg b3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lk LCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9v bCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJ CVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBleHRlcm4gY2hhciAqZ2V0X3Jhbmdl X3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9v cGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJICBT dHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxp ZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0 YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8g YnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5v dXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29iamVjdF9hZGRyZXNzLm91dAppbmRleCAz NTQ5YjYzYTc5Li4zYzRjYjdiMzM2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL29iamVjdF9hZGRyZXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29i amVjdF9hZGRyZXNzLm91dApAQCAtNDkwLDcgKzQ5MCw3IEBAIFNFTEVDVCAocGdfaWRlbnRpZnlf b2JqZWN0KGFkZHIxLmNsYXNzaWQsIGFkZHIxLm9iamlkLCBhZGRyMS5vYmpzdWJpZCkpLiosCiAg cG9saWN5ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICB8IGdlbnBvbCBvbiBhZGRyX25zcC5nZW50YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgdAogIHN0YXRpc3RpY3Mgb2JqZWN0ICAgICAgICAgfCBhZGRyX25z cCAgIHwgZ2VudGFibGVfc3RhdCAgICAgfCBhZGRyX25zcC5nZW50YWJsZV9zdGF0ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICBjb2xsYXRpb24gICAg ICAgICAgICAgICAgIHwgcGdfY2F0YWxvZyB8ICJkZWZhdWx0IiAgICAgICAgIHwgcGdfY2F0YWxv Zy4iZGVmYXVsdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCB0Ci0gdHJhbnNmb3JtICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICB8IGZvciBpbnRlZ2VyIG9uIGxhbmd1YWdlIHNxbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAorIHRyYW5zZm9ybSAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCBmb3IgaW50ZWdlciBsYW5ndWFnZSBz cWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHQKICB0ZXh0 IHNlYXJjaCBkaWN0aW9uYXJ5ICAgIHwgYWRkcl9uc3AgICB8IGFkZHJfdHNfZGljdCAgICAgIHwg YWRkcl9uc3AuYWRkcl90c19kaWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCB0CiAgdGV4dCBzZWFyY2ggcGFyc2VyICAgICAgICB8IGFkZHJfbnNwICAg fCBhZGRyX3RzX3BycyAgICAgICB8IGFkZHJfbnNwLmFkZHJfdHNfcHJzICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdAogIHRleHQgc2VhcmNoIGNvbmZp Z3VyYXRpb24gfCBhZGRyX25zcCAgIHwgYWRkcl90c19jb25mICAgICAgfCBhZGRyX25zcC5hZGRy X3RzX2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IHQKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTdjOWJjMTg2MS4uZWYxNjg2OTRhMSAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiArMTYxMCw5IEBAIE9TSW5mbwog T1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2Jq VHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmpl Y3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxNzYsNiArMzE3OSw3IEBAIGNvbG9ybWFwcmFuZ2UKIGNv bXBhcmVfY29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2Nv bnRleHQKK2NvbnZTcGVjaWZpZXIKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9kYXRh X3NvdXJjZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoyLjMyLjAKCg== --00000000000088741505ea6ac90f--