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 1oeAkI-00043Z-8w for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Sep 2022 07:47:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oeAkG-0003Ei-Cq for pgsql-hackers@arkaria.postgresql.org; Fri, 30 Sep 2022 07:47:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oeAkF-0003EZ-H5 for pgsql-hackers@lists.postgresql.org; Fri, 30 Sep 2022 07:47:39 +0000 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oeAk3-0004oE-CL for pgsql-hackers@lists.postgresql.org; Fri, 30 Sep 2022 07:47:39 +0000 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-1318106fe2cso4534759fac.13 for ; Fri, 30 Sep 2022 00:47:26 -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; bh=tdRg3NOUO1lRUIq3S40R08MtE69zBUZnwrSZL+2tTmM=; b=L1veRrhTiv4bboB77wGmmK1JO6ar+5DQaZ7iRe20wHdQpA4ZJVbzwFXJlkxoN+QNbG BW4G7nfy2sQj/U8qsOPNO8WgIb07NYscCa7sOqN6VfztTYmtjqTPF9opMCBeOdstPDqG VC5GX7DjQfGAEyb5jNdGSwW+uT54jHKykroTGmpcDuRAmLfuePWP+uSlIGxcQYL2z6Ja nNpRUESu+UnDF2Otq+TQSb8b1PxSJ7ICEkkbQlC7/HNA9/xLnp0Yn7Zk4tyXor4qGm5N EC7EKNs5sEYBM6vz7Wr3oWHeW74CDkOVpc3W0G7F7h9o7mE0ml4BuaOqHlSJeFBBIB2Y 15KQ== 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; bh=tdRg3NOUO1lRUIq3S40R08MtE69zBUZnwrSZL+2tTmM=; b=0HOMmkIupQWEGNXl6ZhE7+WkMi4y2piA0COsblGl5OlpoxX+PyzW/QCIC4jLKOt1Xt jFBqvejYVpDrO+NcnCBxvfGpqBY7Wp0KGlj/Hk2ErMVzgmgaxhN/C9WOIWCZb1P/9DuH rU46ege+WL687BfHEuQu5IdhRtTmkoXrz0jmVZQXSMYzYIkpOtNusIyzF6qunqb2xUGJ fsUjdsagGqDp+kSMutBiX1I/hn3V4mvZ9Xd8LkkSr9DuGTsJgMfh5jqBiz7XIbVa5hTt gxr/AU4b03W0pxTmaP2KbO1SwuuMH1fsxSJyu5+LCeMhHTHBgU1iuvpZz6jFH9YMHNro dvxg== X-Gm-Message-State: ACrzQf1Bl7evvkvW5GSd4VEWp6CeSRvapiqwB0BayAK2ZB62k2kL64CT rGcAlrtOn2PFnh/kcFXRfMFPk84TBAqlB2aBh50= X-Google-Smtp-Source: AMsMyM4sY46tAfkmZjzjRotBq+KJoE6hkWs9zvpTXv3/DfEaUMkguQgiQUlX+71SoPDZJ5D/i9wrxXFq+9WLWrNRm4o= X-Received: by 2002:a05:6871:5d2:b0:131:bfe8:75fb with SMTP id v18-20020a05687105d200b00131bfe875fbmr5426919oan.160.1664524044915; Fri, 30 Sep 2022 00:47:24 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: vignesh C Date: Fri, 30 Sep 2022 13:17:13 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Zheng Li Cc: Ajin Cherian , "houzj.fnst@fujitsu.com" , Peter Smith , Amit Kapila , Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000006b44e305e9e034cc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006b44e305e9e034cc Content-Type: text/plain; charset="UTF-8" On Mon, 26 Sept 2022 at 15:56, vignesh C wrote: > > Hi, > > The patch does not apply because of a recent commit. The updated patch > is rebased on top of HEAD. > Adding support for ddl replication of the following: Create Rule Alter Rule Drop Rule Create Foreign Data Wrapper Alter Foreign Data Wrapper Drop Foreign Data Wrapper Revoke Refresh Materialized View Thanks to Ajin Cherian for providing the changes for Create/Alter/Drop Foreign Data Wrapper. The attached v24 patch has the changes for the same. Regards, Vignesh --0000000000006b44e305e9e034cc Content-Type: text/x-patch; charset="US-ASCII"; name="v24-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v24-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8o6ir8d1 RnJvbSA1ZDMxYjE3MzBmYWZhODFlMzk3Y2Y3MWQ3MWNkM2ZlNGNmMTllY2VjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6Mzc6MjggLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNCA0LzVdIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p 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== --0000000000006b44e305e9e034cc Content-Type: text/x-patch; charset="US-ASCII"; name="v24-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v24-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8o6ir8k2 RnJvbSA0N2U5OGJhMWFiM2I4ZGQ0ZTIyMTRmY2NjNDlmZWIxM2U1N2E4NTFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNod2FyYW4gQyA8dmlnbmVzaDIxQGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAzMCBTZXAgMjAyMiAxMjowNToyMyArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjI0 IDMvNV0gU3VwcG9ydCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8KClRoZSBtYWluIGlkZWEg b2YgcmVwbGljYXRpbmcgdGhlIENSRUFURSBUQUJMRSBBUyBpcyB0aGF0IHdlIGRlcHJhc2UgdGhl IENSRUFURQpUQUJMRSBBUyBpbnRvIGEgc2ltcGxlIENSRUFURSBUQUJMRSh3aXRob3V0IHN1YnF1 ZXJ5KSBjb21tYW5kIGFuZCBXQUwgbG9nIGl0CmFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQg YmVmb3JlIHdyaXRpbmcgZGF0YSBpbnRvIHRoZSB0YWJsZSBhbmQgcmVwbGljYXRlCnRoZSBpbmNv bWluZyB3cml0ZXMgbGF0ZXIgYXMgbm9ybWFsIElOU0VSVHMuIEluIHRoaXMgYXBwb3JhY2gsIHdl IGRvbid0IGV4ZWN1dGUKdGhlIHN1YnF1ZXJ5IG9uIHN1YnNjcmliZXIgc28gdGhhdCBkb24ndCBu ZWVkIHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG9iamVjdHMKcmVmZXJlbmNlZCBpbiB0aGUgc3VicXVl cnkgYWxzbyBleGlzdHMgaW4gc3Vic2NyaWJlci4gQW5kIFRoaXMgYXBwcm9hY2ggd29ya3MKZm9y IGFsbCBraW5kIG9mIGNvbW1hbmRzKGUuZy4gQ1JBRVRFIFRBQkxFIEFTIFtTRUxFQ1RdW0VYRUNV VEVdW1ZBTFVFU10pCgpJbnRyb2R1Y2luZyBhIG5ldyB0eXBlIG9mIGV2ZW50IHRyaWdnZXIgInRh YmxlX2luaXRfd3JpdGUiLiB3aGljaCB3b3VsZCBiZSBmaXJlZApmb3IgQ1JFQVRFIFRBQkxFIEFT L1NFTEVDVCBJTlRPIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBhbmQKYmVmb3JlIGFueSBvdGhl ciBtb2RpZmljYXRpb24uIHdlIGRlcGFyc2UgdGhlIGNvbW1hbmQgaW4gdGhlIHRhYmxlX2luaXRf d3JpdGUgZXZlbnQKdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcu IFRoZSB3YWxzZW5kZXIgd2lsbCBzZW5kIHRoZQpzdHJpbmcgdG8gc3Vic2NyaWJlci4gQW5kIGlu Y29taW5nIElOU0VSVHMgd2lsbCBhbHNvIGJlIHJlcGxpY2F0ZWQuCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMgICAgIHwgIDI0ICsrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50 X3RyaWdnZXIuYyAgIHwgMTcyICsrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgICA5ICsrCiBzcmMvYmFja2VuZC90Y29wL3V0 aWxpdHkuYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICB8ICAgMyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICB8ICAgNCAr CiBzcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgICB8ICAgOSArLQogc3JjL2lu Y2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgfCAgIDMgKy0KIDEwIGZpbGVzIGNoYW5n ZWQsIDIzMiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVh cy5jCmluZGV4IDE1MmMyOWI1NTEuLjBkODBjNmM5NzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMu YwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgi CisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1hbmRz L21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFzX2ludGVy bmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdRdWVyeShp bnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0cmlnZ2Vy IGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbworCQkgKiB0 aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkgY3JlYXRl ZCB0YWJsZSBpbgorCQkgKiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2ZW50VHJp Z2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRkcik7CisJ fQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFy c2UuYwppbmRleCA4ZGMzMTUwNjFiLi44MTNiYWI4NTY3IDEwMDc1NQotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKQEAgLTcxNjksNiArNzE2OSwyNyBAQCBkZXBhcnNlX1J1bGVTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQogCXJldHVybiBydWxlU3RtdDsKIH0KIAorLyoKKyAqIERl cGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgorICogZGVwYXJzZV9DcmVhdGVTdG10 IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRoZSBmaW5hbCBDcmVhdGVTdG10IGZv cgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJ CW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUgPT0g U0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0gY21kLT5kLmN0YXMucmVhbF9jcmVh dGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzLm9iamVjdElkOworCisJcmV0dXJu IGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKK30KKworCiAvKgogICog SGFuZGxlIGRlcGFyc2luZyBvZiBzaW1wbGUgY29tbWFuZHMuCiAgKgpAQCAtNzQ0Miw2ICs3NDYz LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29s IHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfR3JhbnQ6CiAJCQl0cmVlID0gZGVwYXJzZV9HcmFu dFN0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJl ZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOwogCQljYXNlIFND VF9BbHRlck9wRmFtaWx5OgogCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJPcEZhbWlseShjbWQpOwog CQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggYTQ5OTk4NDJm Zi4uMTdlZTFjMjY1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTMz LDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10 KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQiKSAhPSAw ICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSAhPSAwICYm CiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYKLQkJc3RyY21w KHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJjbXAoc3RtdC0+ ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJlY29nbml6ZWQg ZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dl cihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBsaXN0LCBpZiBh bnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3RhcnQi KSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikg PT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCkKKwkJ IHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJIHN0cmNtcChz dG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYgdGFncyAhPSBO VUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBpZiAoc3RyY21w KHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01ODUsNyArNTg3LDgg QEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCQlkYmd0YWcgPSBD cmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChldmVudCA9PSBFVlRfRERMQ29tbWFu ZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFuZEVuZCB8fAotCQkJZXZlbnQgPT0g RVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJvcCB8fAorCQkJZXZlbnQgPT0gRVZU X1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJf b2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBjb21tYW5kIHRhZyBcIiVz XCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAgLTg2OCw2ICs4NzEsMTYzIEBAIEV2 ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50 IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogfQogCisKKy8qCisgKiBFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAgUHJlcGFyZSB0byByZWNlaXZlIGRh dGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8gY29tbWFuZCBhYm91dAorICogICAg IHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0 YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlDb2xsZWN0 ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4 dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVj dGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCWNvbW1hbmQgPSBwYWxsb2Mo c2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1hbmQtPnR5cGUgPSBTQ1RfQ3JlYXRl VGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJ Y29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwljb21tYW5k LT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlP YmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJy ZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsK K30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJRmluaXNoIHVw IHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4KKyAqCisgKiBG SVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiB4 YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJvYmFibHkgaXQn cyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2VycygpIHRvIGZpeCB0 aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2b2lkKQorewor CUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2Vy IGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFu ZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXBhcmVudCA9IGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVudDsKKworCXBmcmVlKGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSBj cmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJz ZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkJCQlyZWxwZXJz aXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNoYXIgICAJCQkgICAqanNvbl9zdHJp bmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJS T1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwljbWQgPSBjdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChjbWQpOworCisJ cmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9i amVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRz IHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgorCSAqCisJICog V2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5s b2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUg c3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8gZGlyZWN0bHkg cmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCSAqIHJld3Jp dGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLworCWlmIChyZWxw ZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0o TlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBh bGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRp bGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJ CUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9i amVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25f c3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoK KyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lkCitFdmVudFRy aWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRkcmVzcyBhZGRy ZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0cmlnZGF0YTsK KwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZlbnRUcmlnZ2Vy RERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50CisJICogdHJp Z2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJaWYgKCFJc1Vu ZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5vdGhpbmcgaWYg b3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhlcmUKKwkgKiB3 ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1 cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZvcmUgc2VlbSBv cHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVudFRyaWdnZXJD b21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3QgZXhpc3QgYXQg dGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBubyBjb21tYW5kIHdh cyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21tb25TZXR1cChj b21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0ZSwKKwkJCQkJ CQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEpOworCWlmIChy dW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENyZWF0ZVRhYmxl IHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rhcy5yZWFsX2Ny ZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gYWRkcmVzczsK KworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tlKHJ1bmxpc3Qs ICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5saXN0KTsKKwor CS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBkaWQgd2lsbCBi ZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJpZ2dlciBpbiBh IGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTMwOSw4IEBAIHRyYWNr RHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2ZW50Q2FjaGVMb29r dXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxl UmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVu ZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5J TCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSAhPSBOSUwpOwog fQogCiAvKgpAQCAtMTg2OCw2ICsyMDI5LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFu ZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNl IFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2Ug U0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJ Y2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA0Nyw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRs X2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9w Yy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcp CiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQt PnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRk cmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhl IHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCmluZGV4IGY4MmVlNDA1NmMuLjkzNTQ1NzU3YjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jCkBAIC05ODYsNiArOTg2LDExIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkJQ01EVEFH X1JFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcKIAkJfTsKIAorCQlDb21tYW5kVGFnCWluaXRfY29t bWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNU X0lOVE8KKwkJfTsKKwogCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmln Z2VyICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoImRkbF9jb21tYW5kX2VuZCIs IGVuZF9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihlbmRfY29tbWFuZHMpLCBteXNlbGYs IHB1Ym9pZCk7CkBAIC05OTcsNiArMTAwMiwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0 YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVu Z3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUg dGhlIHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNh RXZlbnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJ CSBsZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxl X2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90 Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGFhMDA4MTU3 ODcuLmZiNWU2NzljMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisr KyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAgQEAgUHJv Y2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2Fz ZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3Rh cnQocGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAo Q3JlYXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5 RW52LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVh azsKIAogCQkJY2FzZSBUX1JlZnJlc2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRj YWNoZS5jCmluZGV4IGY3ZjcxNjVmN2YuLjdmYjhjYjI5MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYwpAQCAtMTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9p ZCkKIAkJCWV2ZW50ID0gRVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwg InRhYmxlX3Jld3JpdGUiKSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQll bHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2 ZW50ID0gRVZUX1RhYmxlSW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggY2UxYjE3ZjVhYi4uODFmYmZkNGFhYyAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMTgzOCw0ICsxMTgzOCw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRl c2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAog ICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0 eXBlID0+ICdldmVudF90cmlnZ2VyJywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAn cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBk ZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAg cHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0 dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4g J3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCBmZDJlZTdmZmU0Li5hOWUwZjcxZjZhIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCBy ZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5v ZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShO b2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmln Z2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5k Q29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVk ZWQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5o IGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiZjU3Li4z ZDI5NGEwMzcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5o CisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDgg QEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHks CiAJU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NU X0FsdGVyVFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwog fSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRl ZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJ CX0JCQlkZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNz OworCQkJTm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1 Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNh Y2hlLmgKaW5kZXggZGRiNjdhNjhmYS4uMWU2NDgzMTdhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBA IC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZU X0RETENvbW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9U YWJsZVJld3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50Owog CiB0eXBlZGVmIHN0cnVjdAotLSAKMi4zMi4wCgo= --0000000000006b44e305e9e034cc Content-Type: text/x-patch; charset="US-ASCII"; name="v24-0005-Add-DDL-deparser-support-for-TEXT-SEARCH-command.patch" Content-Disposition: attachment; filename="v24-0005-Add-DDL-deparser-support-for-TEXT-SEARCH-command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8o6ir880 RnJvbSBlMThjZDFiMWM4ZjFhMGU3MjFiMjEzZmE1ZjdkYjA3NzRlMzMwMDkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IEZyaSwgMzAgU2VwIDIwMjIgMTI6MjM6MDMgKzA1MzAKU3ViamVjdDogW1BBVENIIHYy NCA1LzVdIEFkZCBEREwgZGVwYXJzZXIgc3VwcG9ydCBmb3IgVEVYVCBTRUFSQ0ggY29tbWFuZHMs CiB3aGljaCBpbmNsdWRlczogLUNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OL1BBUlNF Ui9ESUNUSU9OQVJZL1RFTVBMQVRFCiAtRFJPUCBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OL1BB UlNFUi9ESUNUSU9OQVJZL1RFTVBMQVRFIC1BTFRFUiBURVhUIFNFQVJDSAogQ09ORklHVVJBVElP TiBhbmQgQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWQoKLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jICAgICB8IDQ1NiArKysrKysrKysrKysrKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgfCAgMTAgKwogMyBmaWxlcyBjaGFuZ2VkLCA0 NzEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCmluZGV4IDgxM2JhYjg1NjcuLjViZmE4MDBmYzIgMTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYwpAQCAtNTQsNiArNTQsMTAgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3JhbmdlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19z ZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfY29uZmlnLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ190c19kaWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19wYXJzZXIuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX3RlbXBsYXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFu ZHMvc2VxdWVuY2UuaCIKQEAgLTE1Niw2ICsxNjAsMTAgQEAgc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVy X3QKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNt ZCAqc3ViY21kKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3Io T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOwogc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfRGVmaW5lU3RtdF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0 YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBE ZWZpbmVTdG10ICpkZWZpbmUsIE9iamVjdEFkZHJlc3MgY29waWVkKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpk ZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnko T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5l KTsKIAogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29s IGlzX3Jlc2V0KTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxl U2V0S2luZCBraW5kLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CkBAIC01NDA2LDYgKzU0MTQs MjIgQEAgZGVwYXJzZV9EZWZpbmVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLCBP YmplY3RBZGRyZXNzIHNlY29uZGFyeU9iaikKIAkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0 bXRfVHlwZShvYmplY3RJZCwgZGVmaW5lKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgT0JKRUNUX1RT Q09ORklHVVJBVElPTjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWco b2JqZWN0SWQsIGRlZmluZSwgc2Vjb25kYXJ5T2JqKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JK RUNUX1RTUEFSU0VSOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihv YmplY3RJZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFS WToKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KG9iamVjdElk LCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCWRl ZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShvYmplY3RJZCwgZGVmaW5lKTsK KwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2Jq ZWN0IGtpbmQiKTsKIAl9CkBAIC01NzY2LDYgKzU3OTAsNDI3IEBAIGRlcGFyc2VfRGVmaW5lU3Rt dF9UeXBlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQogCXJldHVybiBzdG10Owog fQogCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9i amVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJT2JqZWN0QWRkcmVzcyBjb3BpZWQp Cit7CisJSGVhcFR1cGxlICAgdHNjVHVwOworCUhlYXBUdXBsZSAgIHRzcFR1cDsKKwlPYmpUcmVl CSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlGb3JtX3BnX3RzX2NvbmZpZyB0c2NGb3Jt OworCUZvcm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisJTGlzdAkgICAqbGlzdDsKKworCXRzY1R1 cCA9IFNlYXJjaFN5c0NhY2hlMShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJ ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiAldSIsCisJCQkg b2JqZWN0SWQpOworCXRzY0Zvcm0gPSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNUUlVDVCh0c2NU dXApOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdl dERhdHVtKHRzY0Zvcm0tPmNmZ3BhcnNlcikpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2gg cGFyc2VyICV1IiwKKwkJCSB0c2NGb3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0gPSAoRm9ybV9w Z190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRh eAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1E ICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7 aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzY0Zvcm0tPmNm Z25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2NGb3JtLT5jZmduYW1lKSkpOwor CisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlLiAgSWYgd2UgaGF2ZSBDT1BZJ2Vk IGFuIGV4aXN0aW5nIGNvbmZpZywgYWRkCisJICogYSBDT1BZIGNsYXVzZTsgb3RoZXJ3aXNlIGFk ZCBhIFBBUlNFUiBjbGF1c2UuCisJICovCisJbGlzdCA9IE5JTDsKKwkvKiBDT1BZICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkNPUFk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImNvcHkiKTsKKwlpZiAoY29waWVkLm9iamVjdElkICE9IEludmFsaWRPaWQpCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dHNjb25maWd9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0NvbmZpZ1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBj b3BpZWQub2JqZWN0SWQpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogUEFSU0VSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBUlNFUj0iLCAx LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFyc2VyIik7CisJaWYgKGNvcGll ZC5vYmplY3RJZCA9PSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIl e3BhcnNlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnBy c25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2Fy cmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXND YWNoZSh0c3BUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0c2NUdXApOworCisJcmV0dXJuIHN0bXQ7 Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNlcihPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICB0c3BUdXA7CisJ T2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlG b3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCisJdHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRT UEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0 ZXh0IHNlYXJjaCBwYXJzZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c3BGb3Jt ID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0 eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVu dGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7CisKKwkv KiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIFNUQVJU ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUQVJUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJzdGFydCIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNzdGFydCkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogR0VUVE9LRU4g Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiR0VUVE9LRU49IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImdldHRva2VuIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1w LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3Rva2VuKSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTkQg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJlbmQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2Nl ZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzZW5kKSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhUWVBFUyAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhUWVBFUz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAibGV4dHlwZXMiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzbGV4dHlwZSkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSEVBRExJTkUg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEVBRExJTkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImhlYWRsaW5lIik7CisJaWYgKE9pZElzVmFsaWQodHNwRm9ybS0+ cHJzaGVhZGxpbmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNoZWFkbGluZSkpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0 bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7 CisKKwlyZXR1cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVT dG10X1RTRGljdGlvbmFyeShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlI ZWFwVHVwbGUgICB0c2RUdXA7CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXA7 CisJTGlzdAkgICAqbGlzdDsKKwlEYXR1bQkJb3B0aW9uczsKKwlib29sCQlpc251bGw7CisJRm9y bV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNU T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNl YXJjaCBkaWN0aW9uYXJ5ICIKKwkJCSAid2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHNkRm9y bSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXApOworCisJLyoKKwkgKiBWZXJi b3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVu dGl0eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUi KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBESUNUSU9OQVJZ ICV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0t PmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUp KSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJbGlzdCA9IE5JTDsKKwor CS8qIFRFTVBMQVRFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7dGVtcGxhdGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFRTVGVtcGxhdGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5k aWN0dGVtcGxhdGUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qCisJICogb3B0aW9ucy4gIFhYWCB0aGlzIGlzIGEgcHJldHR5IHVzZWxlc3Mg cmVwcmVzZW50YXRpb24sIGJ1dCB3ZSBjYW4ndCBkbworCSAqIGJldHRlciB3aXRob3V0IG1vcmUg dHNfY2FjaGUuYyBjb29wZXJhdGlvbiAuLi4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRB dHRyKFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0 b3B0aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDAp OworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9 cyIsIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtl bGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1cCk7CisKKwlyZXR1 cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVt cGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAg dHN0VHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAg Kmxpc3Q7CisJRm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJdHN0VHVwID0gU2VhcmNo U3lzQ2FjaGUxKFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lEICV1IiwKKwkJCSBvYmpl Y3RJZCk7CisJdHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBHRVRTVFJVQ1QodHN0VHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJD SCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykKKwkgKi8KKwlzdG10ID0gbmV3 X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIlRFWFQg U0VBUkNIIFRFTVBMQVRFICV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHRzdEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHN0 Rm9ybS0+dG1wbG5hbWUpKSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJ bGlzdCA9IE5JTDsKKworCS8qIElOSVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5JVD0i LCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5pdCIpOworCWlmIChPaWRJ c1ZhbGlkKHRzdEZvcm0tPnRtcGxpbml0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGluaXQpKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYSVpFICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWElaRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAibGV4aXplIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxsZXhpemUpKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJh eV9vYmplY3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUodHN0VHVwKTsKKworCXJldHVybiBzdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJ QWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICpub2RlID0gKEFsdGVyVFNDb25maWd1cmF0aW9uU3Rt dCAqKSBjbWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICpjb25maWc7CisJT2JqVHJlZSAqdG1wOwor CUxpc3QJICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJ ICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUREIE1BUFBJ TkcgRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmllczosIH1ECisJICoKKwkg KiBjYXNlIEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkgKiBBTFRFUiBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkcgJXtpZl9leGlzdHN9cyBG T1IgJXt0b2tlbnR5cGV9SQorCSAqCisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQ SU5HX0ZPUl9UT0tFTjoKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRl bnRpdHl9RCBBTFRFUiBNQVBQSU5HIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9u YXJpZXM6LCB9RAorCSAqCisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJ ICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQUxURVIgTUFQ UElORyBSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAor CSAqCisJICogY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCSAq IEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJ TkcgRk9SICV7dG9rZW50eXBlOiwgfUkgUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAl e25ld19kaWN0aW9uYXJ5fUQKKwkgKi8KKworCWNvbmZpZyA9IG5ld19vYmp0cmVlKCJBTFRFUiBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIik7CisKKwkvKiBkZXRlcm1pbmUgdGhlIGZvcm1hdCBz dHJpbmcgYXBwcm9wcmlhdGUgdG8gZWFjaCBzdWJjb21tYW5kICovCisJc3dpdGNoIChub2RlLT5r aW5kKQorCXsKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBREQgTUFQUElORyIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lk LAorCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCQkJYXBwZW5kX29i amVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIERST1AgTUFQUElORyIsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNz SWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSUYgRVhJU1RTIiwgMCk7CisJCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIG5vZGUtPm1pc3Npbmdfb2spOworCQkJYXBwZW5kX29iamVj dF9vYmplY3QoY29uZmlnLCAiJXtpZl9leGlzdHN9cyIsIHRtcCk7CisJCQlicmVhazsKKworCQlj YXNlIEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOOgorCQkJYXBwZW5kX29i amVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFz c0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxURVIgTUFQUElORyIsCisJ CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNz LmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElk KSk7CisJCQlicmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1Jf VE9LRU46CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUxU RVIgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5k LmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5h ZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBBZGQgdGhlIGFmZmVjdGVk IHRva2VuIGxpc3QsIGZvciBzdWJjb21tYW5kcyB0aGF0IGhhdmUgb25lICovCisJaWYgKG5vZGUt PmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09 IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9 PSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkcpCisJeworCQlsaXN0ID0gTklMOworCQlmb3Jl YWNoKGNlbGwsIG5vZGUtPnRva2VudHlwZSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19z dHJpbmdfb2JqZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisJCWFwcGVuZF9hcnJheV9vYmpl Y3QoY29uZmlnLCAiRk9SICV7dG9rZW50eXBlOiwgfUkiLCBsaXN0KTsKKwl9CisKKwkvKiBhZGQg ZnVydGhlciBzdWJjb21tYW5kLXNwZWNpZmljIGVsZW1lbnRzICovCisJaWYgKG5vZGUtPmtpbmQg PT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9U U0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTikKKwl7CisJCS8qIEFERCBNQVBQSU5HIGFu ZCBBTFRFUiBNQVBQSU5HIEZPUiBuZWVkIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgKi8KKwkJbGlz dCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+ZC5hdHNjZmcubmRpY3RzOyBpKyspCisJ CXsKKwkJCU9ialRyZWUJKmRpY3RvYmo7CisKKwkJCWRpY3RvYmogPSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCSAgY21kLT5k LmF0c2NmZy5kaWN0SWRzW2ldKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBu ZXdfb2JqZWN0X29iamVjdChkaWN0b2JqKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChj b25maWcsICJXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQiLCBsaXN0KTsKKwl9CisJZWxzZSBpZiAo bm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1QgfHwKKwkJCSBub2RlLT5r aW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4pCisJeworCQkvKiB0 aGUgUkVQTEFDRSBmb3JtcyB3YW50IG9sZCBhbmQgbmV3IGRpY3Rpb25hcmllcyAqLworCQlBc3Nl cnQoY21kLT5kLmF0c2NmZy5uZGljdHMgPT0gMik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNv bmZpZywgIlJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBj bWQtPmQuYXRzY2ZnLmRpY3RJZHNbMF0pKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmln LCAiV0lUSCAle25ld19kaWN0aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5h dHNjZmcuZGljdElkc1sxXSkpOworCX0KKworCXJldHVybiBjb25maWc7Cit9CisKK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgKmFsdGVyVFNEOworCU9ialRyZWUgKnRtcDsKKwlE YXR1bQkJb3B0aW9uczsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCWJvb2wJCWlzbnVs bDsKKwlIZWFwVHVwbGUgICB0c2RUdXA7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0 c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5ICIKKwkJCSAid2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNU UlVDVCh0c2RUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEFMVEVSIFRFWFQg U0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykKKwkgKi8K KworCWFsdGVyVFNEID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlki KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyVFNELCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5kaWN0bmFtZSkpKTsKKworCS8qIEFkZCB0aGUg ZGVmaW5pdGlvbiBsaXN0IGFjY29yZGluZyB0byB0aGUgcGdfdHNfZGljdCBkaWN0aW5pdG9wdGlv biBjb2x1bW4gKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVw LAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJCSAgJmlz bnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDApOworCWlmICghaXNudWxsKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsIFRleHREYXR1bUdldENTdHJp bmcob3B0aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyVFNELCAiKCV7ZGVmaW5p dGlvbjosIH1zKSIsIGRlZmluaXRpb24pOworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCisJ cmV0dXJuIGFsdGVyVFNEOworfQorCiAvKgogICogLi4uIEFMVEVSIENPTFVNTiAuLi4gU0VUL1JF U0VUICguLi4pCiAgKi8KQEAgLTY2MTEsNiArNzA1NiwxMCBAQCBkZXBhcnNlX1JlbmFtZVN0bXQo T2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCiAJCWNhc2UgT0JKRUNUX1RZ UEU6CiAJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CiAJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJ Y2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJY2Fz ZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgogCQkJ ewogCQkJCUhlYXBUdXBsZQlvYmpUdXA7CiAJCQkJUmVsYXRpb24JY2F0YWxvZzsKQEAgLTczNTEs NiArNzgwMCwxMCBAQCBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNt ZCkKIAkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBUX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdDoKKwkJCWNv bW1hbmQgPSBkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQljb21tYW5kID0gTlVMTDsKIAkJCWVsb2co TE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKQEAg LTc0NzIsNiArNzkyNSw5IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1h bmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJ CQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOwogCQkJYnJlYWs7CisJCWNh c2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRTQ29uZmlndXJh dGlvblN0bXQoY21kKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOwogCX0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCAxN2VlMWMyNjUwLi44MWVkYmNiNDY3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0yNTU1LDcgKzI1NTUsMTEgQEAgcHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIpID09IDAJfHwKIAkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInJ1bGUiKSA9PSAwIHx8CiAJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJleHRlbnNpb24iKSA9PSAwIHx8Ci0JCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJm b3JlaWduLWRhdGEgd3JhcHBlciIpID09IDApCisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJmb3JlaWduLWRhdGEgd3JhcHBlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFyc2VyIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggdGVtcGxhdGUiKSA9PSAwKQog CQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOwogCQllbHNlCiAJCQljb250aW51ZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggOTM1NDU3NTdiMi4uZTcyYzZiY2E4 ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTkzMyw2ICs5MzMs MTYgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNh dGlvblN0bXQgKnN0bXQpCiAJCQlDTURUQUdfQ1JFQVRFX0VYVEVOU0lPTiwKIAkJCUNNRFRBR19B TFRFUl9FWFRFTlNJT04sCiAJCQlDTURUQUdfRFJPUF9FWFRFTlNJT04sCisJCQlDTURUQUdfQ1JF QVRFX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfQUxURVJfVEVYVF9TRUFS Q0hfQ09ORklHVVJBVElPTiwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJ T04sCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdf QUxURVJfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwKKwkJCUNNRFRBR19EUk9QX1RFWFRfU0VBUkNI X0RJQ1RJT05BUlksCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwKKwkJCUNN RFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNFUiwKKwkJCUNNRFRBR19DUkVBVEVfVEVYVF9TRUFS Q0hfVEVNUExBVEUsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1QTEFURSwKIAkJCUNN RFRBR19DUkVBVEVfUE9MSUNZLAogCQkJQ01EVEFHX0FMVEVSX1BPTElDWSwKIAkJCUNNRFRBR19E Uk9QX1BPTElDWSwKLS0gCjIuMzIuMAoK --0000000000006b44e305e9e034cc Content-Type: text/x-patch; charset="US-ASCII"; name="v24-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v24-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8o6ir8o3 RnJvbSBhMTE2ODY2MGZkYTJjYWZmYTExYjExNmI0YzY1MzJlZjQ1N2VkYzNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFRodSwgMjkgU2VwIDIwMjIgMDk6MTA6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNCAyLzVdIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj 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 YWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jICAgICAgICAgIHwgMjQ1ICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3B1YmxpY2F0aW9uY21kcy5jICAgICAgICB8IDE0NSArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jICB8ICA4NiArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgfCAgNDEgKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICB8ICA5MyArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Byb3RvLmMgICAgICAgfCAgNDggKysKIC4uLi9yZXBsaWNhdGlvbi9sb2dp Y2FsL3Jlb3JkZXJidWZmZXIuYyAgICAgICB8IDEzNiArKysrKysKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8IDIzMiArKysrKysrKysrCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAxOTIgKysrKysrKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKy0KIHNyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bn X3dhbGR1bXAvcm1ncmRlc2MuYyAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDE3ICstCiBzcmMvaW5jbHVkZS9h Y2Nlc3Mvcm1ncmxpc3QuaCAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmggICAgICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaCAgICAgICAgICB8ICA2MCArKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2RlY29kZS5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FscHJvdG8uaCAgICAgICAgfCAgIDcgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L291dHB1dF9wbHVnaW4uaCAgICAgICB8ICAyNyArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v cGdvdXRwdXQuaCAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCAgICAgICB8ICAzOSArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w c3FsLm91dCAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dCAgICAgfCA0MjAgKysrKysrKysrLS0tLS0tLS0tCiAzMSBmaWxlcyBjaGFu Z2VkLCAxNjY1IGluc2VydGlvbnMoKyksIDIyOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2Fn ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCmluZGV4IGY4OGQ3MmZkODYuLmI4 ZTI5ZThkZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmls ZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKQEAgLTE5LDYgKzE5 LDcgQEAgT0JKUyA9IFwKIAloYXNoZGVzYy5vIFwKIAloZWFwZGVzYy5vIFwKIAlsb2dpY2FsbXNn ZGVzYy5vIFwKKwlsb2dpY2FsZGRsbXNnZGVzYy5vIFwKIAlteGFjdGRlc2MubyBcCiAJbmJ0ZGVz Yy5vIFwKIAlyZWxtYXBkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li44MWRlZTUyOWQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYworICoJICBybWdyIGRlc2NyaXB0b3Igcm91 dGluZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Ki8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVz c2FnZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJl Y29yZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZP X01BU0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICop IHJlYzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1l c3NhZ2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAq c2VwID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcp OworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1 IGJ5dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhs cmVjLT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9m IGhleCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9z aXplOyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAs ICh1bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOworCQkJc2VwID0gIiAiOworCQl9CisJfQor fQorCitjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbykKK3sK KwlpZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdF KQorCQlyZXR1cm4gIkRETCBNRVNTQUdFIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDU5OTY3MDk4YjMuLjcyMWQwMjNhYTUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKQEAgLTEwMDUsNiArMTAwNSw3IEBAIEdldFB1 YmxpY2F0aW9uKE9pZCBwdWJpZCkKIAlwdWItPnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9y bS0+cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJk ZWxldGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNh dGU7CisJcHViLT5wdWJhY3Rpb25zLnB1YmRkbCA9IHB1YmZvcm0tPnB1YmRkbDsKIAlwdWItPnB1 YnZpYXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFyb290OwogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggNDQxZjI5ZDY4NC4uYTQ5OTk4 NDJmZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzcsOCArMzcsMTEg QEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfZnVuYy5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBh cnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29w L2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRjYWNoZS5oIgpAQCAtMTUzNyw2ICsxNTQw LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNv bW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1h bmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRl clRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9 IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAg LTE1NzAsNyArMTU3NCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0 SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRv IGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0 ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVz cyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29s bGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1OTAsNiArMTU5NCw3IEBAIEV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRy ZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBj b3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOwogCWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFw cGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFi bGUuc3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE3NSwzICsyMTgwLDI0MSBAQCBzdHJpbmdpZnlf YWRlZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlKQogCiAJcmV0dXJuICI/Pz8iOwkJ CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBh cnNlX2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVwYXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5k IGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3Rh cnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwlj aGFyCQkqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRhYmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlE cm9wU3RtdAkqc3RtdDsKKwlMaXN0Q2VsbAkqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVO VF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJp Z2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5m by0+Y29udGV4dDsKKwlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOwor CisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUgcGFyc2UgdHJlZSAqLworCWZvcmVhY2go Y2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFyCXJlbHBlcnNpc3Q7CisJCU5vZGUJKm9i amVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRp b24gcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3Rt dC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAor CQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJcmVs cGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJLyoK KwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0 YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkJICoKKwkJICogV2Ugd2lsbCBnZW5l cmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQKKwkJICog dGFibGVzIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcworCQkgKiBtYWtlcyBpdCBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhl IFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlCisJCSAqIGluY29taW5nIHJld3JpdGUgbWVzc2Fn ZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNpc3Qg PT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xvc2UocmVsYXRpb24sIE5v TG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBh cnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJCSBjb21t YW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJsZV9j bG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoKKyAq IERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLwor RGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9BUkdT KQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZDsKKwlj aGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsK KworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJz aXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisK KwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJn ZXQgdGFibGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCSAqIGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIg c2lkZS4gVGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUg U0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ug d2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCisJ LyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rp bmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFu ZChjbWQsIGZhbHNlKTsKKworCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2Fs RERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFi bGVBbHRlciwKKwkJCQkJCQkganNvbl9zdHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsK KworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlv bl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5k IGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5k X2VuZChQR19GVU5DVElPTl9BUkdTKQoreworCUxpc3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIg IGl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9pZCByZWxpZDsKKworCWlmICgh Q0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJl ZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWZvcmVhY2gobGMsIGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QpCisJeworCQljaGFyCQkJCXJlbHBlcnNpc3QgPSBS RUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJCUNvbGxlY3RlZENvbW1hbmQgICAqY21kID0gbGZp cnN0KGxjKTsKKwkJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCQkvKiBSZXdyaXRlIERETCBo YXMgYmVlbiBoYW5kbGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAqLworCQlpZiAoY21kLT5k LmFsdGVyVGFibGUucmV3cml0ZSkKKwkJeworCQkJUmVuYW1lU3RtdCAqcmVuYW1lU3RtdCA9IChS ZW5hbWVTdG10ICopY21kLT5wYXJzZXRyZWU7CisKKwkJCWlmIChyZW5hbWVTdG10ICYmIHJlbmFt ZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgorCQkJCXJlbmFtZVN0bXQtPnJl bGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAo Y21kLT50eXBlID09IFNDVF9TaW1wbGUgJiYKKwkJCSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1wbGUu YWRkcmVzcy5vYmplY3RJZCkpCisJCQljb250aW51ZTsKKworCQlpZiAoY21kLT50eXBlID09IFND VF9BbHRlclRhYmxlKQorCQl7CisJCQlyZWxpZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk OworCQkJdHlwZSA9IERDVF9UYWJsZUFsdGVyOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogT25s eSBTQ1RfU2ltcGxlIGZvciBub3cgKi8KKwkJCXJlbGlkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkOworCQkJdHlwZSA9IERDVF9TaW1wbGVDbWQ7CisJCX0KKworCQlpZiAoZ2V0X3Jl bF9yZWxraW5kKHJlbGlkKSkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKHJl bGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMg d2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkg KiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1 bmxvZ2dlZCB0YWJsZXMKKwkJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0 aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJCSAqIHBvc3NpYmxlIHRvIGRpcmVj dGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkJICog cmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlp ZiAocmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJY29udGludWU7CisKKwkJ LyoKKwkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cg ZGVjb2Rpbmcgb2YgdGhlCisJCSAqIHNhbWUuCisJCSAqLworCQlqc29uX3N0cmluZyA9IGRlcGFy c2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCWlmIChqc29uX3N0cmluZyA9PSBO VUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBy ZWxpZCwgdHlwZSwganNvbl9zdHJpbmcsCisJCQkJCQkJIHN0cmxlbihqc29uX3N0cmluZykgKyAx KTsKKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2JqZWN0ICpvYmo7CisJCURy b3BTdG10CQkJICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgCSAgICp0cmlnZGF0YTsKKwkJ Y2hhcgkJCQkgICAqY29tbWFuZDsKKwkJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlwZTsKKwkJ Y29uc3QgY2hhcgkJCSAgICp0bXB0eXBlOworCisJCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRh dGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+ cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0 LCBpdGVyLmN1cik7CisKKwkJaWYgKHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0YWJsZSIpID09 IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxzZSBpZiAoc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAic2NoZW1hIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAi aW5kZXgiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJmdW5jdGlvbiIp ID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInByb2NlZHVyZSIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgY2xhc3MiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBmYW1pbHkiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjYXN0IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAidHlwZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlw ZSwgImRvbWFpbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRyaWdn ZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjb252ZXJzaW9uIikg PT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicG9saWN5IikgPT0gMAl8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicnVsZSIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgImV4dGVuc2lvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgImZvcmVpZ24tZGF0YSB3cmFwcGVyIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBE Q1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ2hhbmdl IGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24gZGF0YSB3cmFwcGVyLgorCQkgKi8KKwkJ aWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAiZm9yZWlnbi1kYXRhIHdyYXBwZXIiLCAyMCkg PT0gMCkKKwkJeworCQkJdG1wdHlwZSA9IHBzdHJkdXAoImZvcmVpZ24gZGF0YSB3cmFwcGVyIik7 CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQob2JqLT5vYmppZGVudGl0eSwgdG1w dHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisJCX0KKwkJZWxzZQorCQkJY29t bWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0 dHlwZSwKKwkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29tbWFuZCA9PSBO VUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBv YmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihj b21tYW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDg1MTRlYmZlOTEuLmY4MmVl NDA1NmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0zNywxMCAr MzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIKICNpbmNsdWRl ICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvbWFr ZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAicGFyc2Vy L3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRlLmgiCiAjaW5j bHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNlci5o IgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2lu Y2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05Niw2ICs5OCw3IEBAIHBhcnNlX3B1YmxpY2F0aW9u X29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlvbnMtPnB1YnVwZGF0ZSA9IHRy dWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJ0cnVu Y2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xNDMs NiArMTQ2LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUs CiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxzZSBpZiAoc3RyY21w KHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJhY3Rpb25zLT5wdWJ0cnVu Y2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAiZGRsIikgPT0g MCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJCQllbHNlCiAJCQkJCWVyZXBv cnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLApAQCAtNzI3 LDYgKzczMiw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChjaGFyICpwdWJuYW1lLCBM aXN0ICp0YWJsZXMsCiAJfQogfQogCisvKgorICogQ3JlYXRlIGV2ZW50IHRyaWdnZXIgd2hpY2gg aXMgdXNlZCBmb3IgRERMIHJlcGxpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorQ3JlYXRlRERM UmVwbGljYUV2ZW50VHJpZ2dlcihjaGFyICpldmVudG5hbWUsIENvbW1hbmRUYWcgKmNvbW1hbmRz LAorCQkJCQkJCSBpbnQgbmNvbW1hbmRzLCBPYmplY3RBZGRyZXNzIHB1YmFkZHJlc3MsCisJCQkJ CQkJIE9pZCBwdWJvaWQpCit7CisJaW50CQkJCQlpOworCUxpc3QJCQkgICAqdGFncyA9IE5JTDsK KwlPaWQJCQkJCXRyaWdnZXJfaWQ7CisJT2JqZWN0QWRkcmVzcwkJcmVmZXJlbmNlZDsKKwlDcmVh dGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFyCQkJCXRyaWdnZXJfbmFtZVtOQU1F REFUQUxFTl07CisJY2hhcgkJCQl0cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3Rh dGljIGNvbnN0IGNoYXIgICAqdHJpZ2dlcl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNlX3RyaWdf JXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICAgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVi bGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2 ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9u YW1lKSwgdHJpZ2dlcl9uYW1lX3ByZWZpeCwKKwkJCSBldmVudG5hbWUsIHB1Ym9pZCk7CisJc25w cmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdn ZXJfZnVuY19wcmVmaXgsCisJCQkgZXZlbnRuYW1lKTsKKworCWRkbF90cmlnZ2VyLT50cmlnbmFt ZSA9IHBzdHJkdXAodHJpZ2dlcl9uYW1lKTsKKwlkZGxfdHJpZ2dlci0+ZXZlbnRuYW1lID0gZXZl bnRuYW1lOworCWRkbF90cmlnZ2VyLT5mdW5jbmFtZSA9IFN5c3RlbUZ1bmNOYW1lKHRyaWdnZXJf ZnVuY19uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29tbWFuZHM7IGkrKykKKwl7CisJCVN0 cmluZyAqdGFnID0gbWFrZVN0cmluZyhwc3RyZHVwKEdldENvbW1hbmRUYWdOYW1lKGNvbW1hbmRz W2ldKSkpOworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRkbF90cmlnZ2Vy LT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5vZGUgKikgdGFn cywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRsX3RyaWdnZXIp OworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50ZXJuYWxseSBk ZXBlbmRlbnQgb24gdGhlCisJICogcHVibGljYXRpb24uCisJICovCisJT2JqZWN0QWRkcmVzc1Nl dChyZWZlcmVuY2VkLCBFdmVudFRyaWdnZXJSZWxhdGlvbklkLCB0cmlnZ2VyX2lkKTsKKwlyZWNv cmREZXBlbmRlbmN5T24oJnJlZmVyZW5jZWQsICZwdWJhZGRyZXNzLCBERVBFTkRFTkNZX0lOVEVS TkFMKTsKK30KKwogLyoKICAqIENyZWF0ZSBuZXcgcHVibGljYXRpb24uCiAgKi8KQEAgLTc5Nyw2 ICs4NDksOCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1 YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGVsZXRl KTsKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0KIAkJQm9v bEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOworCXZhbHVlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3B1YmRkbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsKTsK IAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ2aWFyb290IC0gMV0gPQogCQlCb29sR2V0 RGF0dW0ocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOwogCkBAIC04NTcsNiArOTExLDk0IEBA IENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25T dG10ICpzdG10KQogCQl9CiAJfQogCisJLyoKKwkgKiBDcmVhdGUgYW4gZXZlbnQgdHJpZ2dlciB0 byBhbGxvdyBsb2dnaW5nIG9mIERETCBzdGF0ZW1lbnRzLgorCSAqCisJICogVE9ETzogV2UgbmVl ZCB0byBmaW5kIGEgYmV0dGVyIHN5bnRheCB0byBhbGxvdyByZXBsaWNhdGlvbiBvZiBEREwKKwkg KiBzdGF0ZW1lbnRzLgorCSAqCisJICogWFhYOiBUaGlzIGNvZGUgaXMganVzdCB0byBzaG93IHRo ZSByZXBsaWNhdGlvbiBvZiBDUkVBVEUvQUxURVIvRFJPUAorCSAqIFRBQkxFIHdvcmtzLiBXZSBu ZWVkIHRvIGVuaGFuY2UgdGhpcyBvbmNlIHRoZSBhcHByb2FjaCBmb3IgRERMCisJICogcmVwbGlj YXRpb24gaXMgZmluYWxpemVkLgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbCkKKwl7CisJ CUNvbW1hbmRUYWcJc3RhcnRfY29tbWFuZHNbXSA9IHtDTURUQUdfRFJPUF9UQUJMRX07CisJCUNv bW1hbmRUYWcJcmV3cml0ZV9jb21tYW5kc1tdID0ge0NNRFRBR19BTFRFUl9UQUJMRX07CisKKwkJ Q29tbWFuZFRhZwllbmRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfRk9SRUlHTl9E QVRBX1dSQVBQRVIsCisJCQlDTURUQUdfQUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlD TURUQUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwKKwkJCUNNRFRBR19DUkVBVEVfRVhURU5T SU9OLAorCQkJQ01EVEFHX0FMVEVSX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19EUk9QX0VYVEVOU0lP TiwKKwkJCUNNRFRBR19DUkVBVEVfUE9MSUNZLAorCQkJQ01EVEFHX0FMVEVSX1BPTElDWSwKKwkJ CUNNRFRBR19EUk9QX1BPTElDWSwKKwkJCUNNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwKKwkJCUNN RFRBR19BTFRFUl9DT05WRVJTSU9OLAorCQkJQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwKKwkJCUNN RFRBR19DUkVBVEVfRE9NQUlOLAorCQkJQ01EVEFHX0FMVEVSX0RPTUFJTiwKKwkJCUNNRFRBR19E Uk9QX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9JTkRFWCwKKwkJCUNNRFRBR19DUkVBVEVfVFlQ RSwKKwkJCUNNRFRBR19EUk9QX1RZUEUsCisJCQlDTURUQUdfQUxURVJfVFlQRSwKKwkJCUNNRFRB R19DUkVBVEVfQ0FTVCwKKwkJCUNNRFRBR19BTFRFUl9DQVNULAorCQkJQ01EVEFHX0RST1BfQ0FT VCwKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1IsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9S X0NMQVNTLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQUxU RVJfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0NMQVNTLAorCQkJ Q01EVEFHX0FMVEVSX09QRVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1IsCisJCQlDTURU QUdfRFJPUF9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19EUk9QX09QRVJBVE9SX0ZBTUlMWSwK KwkJCUNNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLAorCQkJQ01EVEFHX0FMVEVSX1BST0NFRFVSRSwK KwkJCUNNRFRBR19EUk9QX1BST0NFRFVSRSwKKwkJCUNNRFRBR19DUkVBVEVfRlVOQ1RJT04sCisJ CQlDTURUQUdfQUxURVJfRlVOQ1RJT04sCisJCQlDTURUQUdfRFJPUF9GVU5DVElPTiwKKwkJCUNN RFRBR19DUkVBVEVfVFJJR0dFUiwKKwkJCUNNRFRBR19BTFRFUl9UUklHR0VSLAorCQkJQ01EVEFH X0RST1BfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFLAorCQkJQ01EVEFHX0FMVEVSX1RB QkxFLAorCQkJQ01EVEFHX0NSRUFURV9TRVFVRU5DRSwKKwkJCUNNRFRBR19BTFRFUl9TRVFVRU5D RSwKKwkJCUNNRFRBR19EUk9QX1NFUVVFTkNFLAorCQkJQ01EVEFHX0NSRUFURV9TQ0hFTUEsCisJ CQlDTURUQUdfQUxURVJfU0NIRU1BLAorCQkJQ01EVEFHX0RST1BfU0NIRU1BLAorCQkJQ01EVEFH X0NSRUFURV9JTkRFWCwKKwkJCUNNRFRBR19EUk9QX0lOREVYLAorCQkJQ01EVEFHX0FMVEVSX0lO REVYLAorCQkJQ01EVEFHX0dSQU5ULAorCQkJQ01EVEFHX1JFVk9LRSwKKwkJCUNNRFRBR19DUkVB VEVfUlVMRSwKKwkJCUNNRFRBR19BTFRFUl9SVUxFLAorCQkJQ01EVEFHX0RST1BfUlVMRSwKKwkJ CUNNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXCisJCX07CisKKwkJLyogQ3JlYXRlIHRo ZSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZl bnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9lbmQiLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2YoZW5kX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUg ZGRsX2NvbW1hbmRfc3RhcnQgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZl bnRUcmlnZ2VyKCJkZGxfY29tbWFuZF9zdGFydCIsIHN0YXJ0X2NvbW1hbmRzLAorCQkJCQkJCQkJ IGxlbmd0aG9mKHN0YXJ0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0 ZSB0aGUgdGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FF dmVudFRyaWdnZXIoInRhYmxlX3Jld3JpdGUiLCByZXdyaXRlX2NvbW1hbmRzLAorCQkJCQkJCQkJ IGxlbmd0aG9mKHJld3JpdGVfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFi bGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVh dGVIb29rKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHVib2lkLCAwKTsKQEAgLTk5NSw2ICsxMTM3 LDkgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0 cnVuY2F0ZSAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQly ZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJ CXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gQm9vbEdldERhdHVtKHB1 YmFjdGlvbnMucHViZGRsKTsKKwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwg LSAxXSA9IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVu KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA3ZDhhNzVkMjNjLi41ZGY5ZjRjMDFiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtNTI1Myw3ICs1MjUzLDcgQEAgQVRFeGVjQ21k KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkgKiBSZXBvcnQgdGhlIHN1 YmNvbW1hbmQgdG8gaW50ZXJlc3RlZCBldmVudCB0cmlnZ2Vycy4KIAkgKi8KIAlpZiAoY21kKQot CQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJl c3MpOworCQlFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQs IGFkZHJlc3MsIHRhYi0+cmV3cml0ZSk7CiAKIAkvKgogCSAqIEJ1bXAgdGhlIGNvbW1hbmQgY291 bnRlciB0byBlbnN1cmUgdGhlIG5leHQgc3ViY29tbWFuZCBpbiB0aGUgc2VxdWVuY2UKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGM0ZTJmZGViNzEuLmYzZWVi NjczMTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYs NiArMTYsNyBAQCBvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQog CiBPQkpTID0gXAogCWRlY29kZS5vIFwKKwlkZGxtZXNzYWdlLm9cCiAJbGF1bmNoZXIubyBcCiAJ bG9naWNhbC5vIFwKIAlsb2dpY2FsZnVuY3MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjUwOTM1MjNlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpAQCAtMCwwICsxLDg2IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBkZGxtZXNzYWdlLmMKKyAqCSAgTG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogTk9URVMKKyAqCisgKiBMb2dpY2FsIERETCBtZXNz YWdlcyBhbGxvdyBYTE9HIGxvZ2dpbmcgb2YgRERMIGNvbW1hbmQgc3RyaW5ncyB0aGF0CisgKiBn ZXQgcGFzc2VkIHRvIHRoZSBsb2dpY2FsIGRlY29kaW5nIHBsdWdpbi4gSW4gbm9ybWFsIFhMT0cg cHJvY2Vzc2luZyB0aGV5CisgKiBhcmUgc2FtZSBhcyBOT09QLgorICoKKyAqIFVubGlrZSBnZW5l cmljIGxvZ2ljYWwgbWVzc2FnZXMsIHRoZXNlIERETCBtZXNzYWdlcyBoYXZlIG9ubHkgdHJhbnNh Y3Rpb25hbAorICogbW9kZS5Ob3RlIGJ5IGRlZmF1bHQgRERMcyBpbiBQb3N0Z3JlU1FMIGFyZSB0 cmFuc2FjdGlvbmFsLgorICoKKyAqIFRoZXNlIG1lc3NhZ2VzIGFyZSBwYXJ0IG9mIGN1cnJlbnQg dHJhbnNhY3Rpb24gYW5kIHdpbGwgYmUgc2VudCB0bworICogZGVjb2RpbmcgcGx1Z2luIHVzaW5n IGluIGEgc2FtZSB3YXkgYXMgRE1MIG9wZXJhdGlvbnMuCisgKgorICogRXZlcnkgbWVzc2FnZSBj YXJyaWVzIHByZWZpeCB0byBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBkaWZmZXJlbnQgZGVjb2Rp bmcKKyAqIHBsdWdpbnMuIFRoZSBwbHVnaW4gYXV0aG9ycyBtdXN0IHRha2UgZXh0cmEgY2FyZSB0 byB1c2UgdW5pcXVlIHByZWZpeCwKKyAqIGdvb2Qgb3B0aW9ucyBzZWVtcyB0byBiZSBmb3IgZXhh bXBsZSB0byB1c2UgdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbi4KKyAqCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRh bG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVz L2V4ZWNub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK KworLyoKKyAqIFdyaXRlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2UgaW50byBYTG9nLgor ICovCitYTG9nUmVjUHRyCitMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgs IE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgY29uc3QgY2hh ciAqbWVzc2FnZSwgc2l6ZV90IHNpemUpCit7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSB4bHJl YzsKKworCS8qCisJICogRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4KKwkg Ki8KKwlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRlKCkpOworCUdldEN1cnJlbnRUcmFuc2FjdGlv bklkKCk7CisKKwl4bHJlYy5kYklkID0gTXlEYXRhYmFzZUlkOworCS8qIHRyYWlsaW5nIHplcm8g aXMgY3JpdGljYWw7IHNlZSBsb2dpY2FsZGRsbXNnX2Rlc2MgKi8KKwl4bHJlYy5wcmVmaXhfc2l6 ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsKKwl4bHJlYy5tZXNzYWdlX3NpemUgPSBzaXplOworCXhs cmVjLnJlbGlkID0gcmVsaWQ7CisJeGxyZWMuY21kdHlwZSA9IGNtZHR5cGU7CisKKwlYTG9nQmVn aW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICZ4bHJlYywgU2l6ZU9mTG9n aWNhbERETE1lc3NhZ2UpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIHBy ZWZpeCksIHhscmVjLnByZWZpeF9zaXplKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnko Y2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7CisKKwkvKiBhbGxvdyBvcmlnaW4gZmlsdGVyaW5nICov CisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5DTFVERV9PUklHSU4pOworCisJcmV0dXJuIFhM b2dJbnNlcnQoUk1fTE9HSUNBTERETE1TR19JRCwgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKTsK K30KKworLyoKKyAqIFJlZG8gaXMgYmFzaWNhbGx5IGp1c3Qgbm9vcCBmb3IgbG9naWNhbCBkZWNv ZGluZyBkZGwgbWVzc2FnZXMuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29y ZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVT U0FHRSkKKwkJZWxvZyhQQU5JQywgImxvZ2ljYWxkZGxtc2dfcmVkbzogdW5rbm93biBvcCBjb2Rl ICV1IiwgaW5mbyk7CisKKwkvKiBUaGlzIGlzIG9ubHkgaW50ZXJlc3RpbmcgZm9yIGxvZ2ljYWwg ZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RlY29kZS5jCmluZGV4IDJjYzBhYzllYjAuLjFmMmM3NTE3NTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg ImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAg LTYwMyw2ICs2MDQsNDYgQEAgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpCiAJCQkJCQkJICBtZXNzYWdlLT5tZXNzYWdl ICsgbWVzc2FnZS0+cHJlZml4X3NpemUpOwogfQogCisvKgorICogSGFuZGxlIHJtZ3IgTE9HSUNB TERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVSZWNvcmRJbnRvUmVvcmRlckJ1ZmZlcigpLgor ICovCit2b2lkCitsb2dpY2FsZGRsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlTbmFwQnVpbGQgICpidWlsZGVyID0gY3R4 LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFkZXJTdGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOwor CVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhpZChyKTsKKwl1aW50OAkJaW5mbyA9IFhM b2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01BU0s7CisJUmVwT3JpZ2luSWQgb3JpZ2luX2lk ID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICptZXNzYWdl OworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9nKEVSUk9S LCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNHX0lEIHJlY29yZCB0eXBlOiAldSIsIGluZm8p OworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4LT5yZW9yZGVyLCBYTG9nUmVjR2V0WGlk KHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBoYXZlIHNuYXBzaG90 IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGluZywgdGhlcmUgaXMgbm8KKwkgKiBwb2ludCBp biBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICovCisJaWYgKFNuYXBCdWlsZEN1cnJlbnRTdGF0 ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NOQVBTSE9UIHx8CisJCWN0eC0+ZmFzdF9mb3J3 YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikg WExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVzc2FnZS0+ZGJJZCAhPSBjdHgtPnNsb3QtPmRh dGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmlnaW4oY3R4LCBvcmlnaW5faWQpKQorCQlyZXR1 cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0NoYW5nZShidWlsZGVyLCB4aWQsIGJ1Zi0+b3Jp Z3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoY3R4LT5yZW9yZGVyLCB4aWQs IGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2UsIC8qIGZpcnN0IHBhcnQg b2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlX3NpemUs CisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3NhZ2UtPnByZWZpeF9zaXplLAorCQkJ CQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdlLT5jbWR0eXBlKTsKK30KKwogLyoKICAqIENv bnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRsaW5nIGJldHdlZW4gdGhlIGRpZmZlcmVudCBm b3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsLmMKaW5kZXggNjI1YTdmNDI3My4uOTg5NjljN2FlYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl ICJmbWdyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTczLDYgKzc0LDEwIEBAIHN0YXRpYyB2b2lkIHRydW5j YXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s IGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg bWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIGRkbG1lc3Nh Z2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwK KwkJCQkJCQkJICBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVh bWluZyBjYWxsYmFja3MgKi8KIHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC05MCw2ICs5NSwx MSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogc3RhdGljIHZvaWQgc3RyZWFtX21lc3NhZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CQkJCQkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJ CQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSBY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJ CQkJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgdm9p ZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJl bGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpOwogCkBAIC0yMTgsNiArMjI4 LDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMs CiAJY3R4LT5yZW9yZGVyLT5hcHBseV90cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJ Y3R4LT5yZW9yZGVyLT5jb21taXQgPSBjb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXIt Pm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGxtZXNzYWdl ID0gZGRsbWVzc2FnZV9jYl93cmFwcGVyOwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IHN0cmVhbWlu Zywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fib3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTIzNCw2ICsy NDUsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9u cywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwKIAkJKGN0 eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFuZ2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJh Y2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNrcy5zdHJl YW1fZGRsbWVzc2FnZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX3Ry dW5jYXRlX2NiICE9IE5VTEwpOwogCiAJLyoKQEAgLTI1MSw2ICsyNjMsNyBAQCBTdGFydHVwRGVj b2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXIt PnN0cmVhbV9jb21taXQgPSBzdHJlYW1fY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5zdHJlYW1fY2hhbmdlID0gc3RyZWFtX2NoYW5nZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRl ci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVv cmRlci0+c3RyZWFtX2RkbG1lc3NhZ2UgPSBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyOwog CWN0eC0+cmVvcmRlci0+c3RyZWFtX3RydW5jYXRlID0gc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBw ZXI7CiAKIApAQCAtMTIyMCw2ICsxMjMzLDQ0IEBAIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVy QnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3Rh Y2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK2RkbG1lc3NhZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4 LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJICBTaXplIG1l c3NhZ2Vfc2l6ZSwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2Fs bGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKwor CUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJaWYgKGN0eC0+Y2FsbGJhY2tzLmRkbG1l c3NhZ2VfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8g b24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUu Y2FsbGJhY2tfbmFtZSA9ICJkZGxtZXNzYWdlIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBt ZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3Jf Y2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxi YWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNr ID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0 X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlk IDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2Vf bHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5j YWxsYmFja3MuZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVs aWQsIGNtZHR5cGUsCisJCQkJCQkJCSBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9w IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNh bGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMgdm9pZAogc3RyZWFtX3N0YXJ0X2NiX3dyYXBw ZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCVhM b2dSZWNQdHIgZmlyc3RfbHNuKQpAQCAtMTUzNSw2ICsxNTg2LDQ4IEBAIHN0cmVhbV9tZXNzYWdl X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK IAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7CiB9CiAKK3N0YXRp YyB2b2lkCitzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24s CisJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBj aGFyICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5w cml2YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNv bnRleHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQp OworCisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcg aXMgc3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNh bGxiYWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNz YWdlX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9u IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNh bGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlv biA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9l cnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJy Y2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRf c3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5h Y2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhu LT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVz c2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwlj dHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24s IHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlwZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdl KTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRf c3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV90 cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZmY4NTEzZTJkMi4uZjM1 NDA2Mjc1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjYy LDYgKzY2Miw1MiBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAlwcV9zZW5kYnl0ZXMob3V0LCBtZXNz YWdlLCBzeik7CiB9CiAKKy8qCisgKiBSZWFkIERETCBNRVNTQUdFIGZyb20gc3RyZWFtCisgKi8K K2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1Jl Y1B0ciAqbHNuLAorCQkJCQkJICAgY29uc3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUg KnN6KQoreworCXVpbnQ4IGZsYWdzOworCWNoYXIgKm1zZzsKKworCS8vVE9ETyBkb3VibGUgY2hl Y2sgd2hlbiBkbyB3ZSBuZWVkIHRvIGdldCBUcmFuc2FjdGlvbklkLgorCisJZmxhZ3MgPSBwcV9n ZXRtc2dpbnQoaW4sIDEpOworCWlmIChmbGFncyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIGZsYWdzICV1IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3MpOworCSpsc24gPSBwcV9nZXRt c2dpbnQ2NChpbik7CisJKnByZWZpeCA9IHBxX2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFf Z2V0bXNnaW50KGluLCA0KTsKKwltc2cgPSAoY2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6 KTsKKworCXJldHVybiBtc2c7Cit9CisKKy8qCisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJl YW0KKyAqLwordm9pZAorbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hhciAq cHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFncyA9 IDA7CisKKwlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFKTsKKwor CS8qIHRyYW5zYWN0aW9uIElEIChpZiBub3QgdmFsaWQsIHdlJ3JlIG5vdCBzdHJlYW1pbmcpICov CisJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXBxX3NlbmRpbnQzMihvdXQsIHhp ZCk7CisKKwlwcV9zZW5kaW50OChvdXQsIGZsYWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBsc24p OworCXBxX3NlbmRzdHJpbmcob3V0LCBwcmVmaXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6KTsK KwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7Cit9CisKIC8qCiAgKiBXcml0ZSByZWxh dGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwpAQCAtMTIxOCw2ICsx MjY0LDggQEAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9u KQogCQkJcmV0dXJuICJUWVBFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJ CXJldHVybiAiTUVTU0FHRSI7CisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJ CQlyZXR1cm4gIkRETCI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkU6CiAJ CQlyZXR1cm4gIkJFR0lOIFBSRVBBUkUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19QUkVQQVJF OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpp bmRleCAwM2Q5YzljODZhLi4wNzNlNDI0NGZiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1ZGUg ImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdz dGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVy LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAtNTE1LDYgKzUxNiwxNCBAQCBS ZW9yZGVyQnVmZmVyUmV0dXJuQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2UsCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsKIAkJ CWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBSRU9S REVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KTsK KwkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTlVMTDsKKwkJCWlmIChjaGFuZ2UtPmRh dGEuZGRsbXNnLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsbXNn Lm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlID0gTlVMTDsKKwkJCWJy ZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlpZiAo Y2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRh LmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODY5LDYgKzg3OCwzNiBAQCBSZW9yZGVyQnVmZmVy UXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAl9CiB9 CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJlIHBy b2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVz c2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhMb2dS ZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXpl LCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRlckJ1 ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNzZXJ0KHhpZCAhPSBJbnZhbGlkVHJhbnNhY3Rpb25J ZCk7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHJiLT5jb250ZXh0KTsK KworCWNoYW5nZSA9IFJlb3JkZXJCdWZmZXJHZXRDaGFuZ2UocmIpOworCWNoYW5nZS0+YWN0aW9u ID0gUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U7CisJY2hhbmdlLT5kYXRhLmRkbG1z Zy5wcmVmaXggPSBwc3RyZHVwKHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCA9 IHJlbGlkOworCWNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdl LT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRh LmRkbG1zZy5tZXNzYWdlID0gcGFsbG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZSwgbWVzc2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJC dWZmZXJRdWV1ZUNoYW5nZShyYiwgeGlkLCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3Jk ZXIKICAqCQlWZXJpZnkgTFNOIG9yZGVyaW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSBy ZW9yZGVyYnVmZmVyCkBAIC0xOTY4LDYgKzIwMDcsMjkgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVz c2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFu Z2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogfQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBS ZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICov CitzdGF0aWMgaW5saW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZl ckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWluZykKK3sKKwlpZiAoc3RyZWFtaW5nKQorCQly Yi0+c3RyZWFtX2RkbG1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCQkJICBjaGFu Z2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVs aWQsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsCisJCQkJCQkJICBjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ZGRsbWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxz biwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cucmVsaWQsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwK KwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5n ZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7Cit9CisKIC8qCiAgKiBGdW5jdGlvbiB0byBzdG9yZSB0 aGUgY29tbWFuZCBpZCBhbmQgc25hcHNob3QgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudAogICog c3RyZWFtIHNvIHRoYXQgd2UgY2FuIHJldXNlIHRoZSBzYW1lIHdoaWxlIHNlbmRpbmcgdGhlIG5l eHQgc3RyZWFtLgpAQCAtMjM0OCw2ICsyNDEwLDEwIEBAIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhO KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCVJlb3JkZXJC dWZmZXJBcHBseU1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOwogCQkJCQlicmVh azsKIAorCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQkJCVJl b3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOwor CQkJCQlicmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElP TjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2FsbHkgKi8K IAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0YS5pbnZh bC5uaW52YWxpZGF0aW9ucywKQEAgLTM3NzEsNiArMzgzNyw0MCBAQCBSZW9yZGVyQnVmZmVyU2Vy aWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJ CQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNoYW5n ZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX0RETE1FU1NBR0U6CisJCQl7CisJCQkJY2hhcgkgICAqZGF0YTsK KwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZp eCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1l c3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGlu dCkgKyBzaXplb2YoU2l6ZSk7CisJCQkJUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZVJlc2VydmUocmIs IHN6KTsKKworCQkJCWRhdGEgPSAoKGNoYXIgKikgcmItPm91dGJ1ZikgKyBzaXplb2YoUmVvcmRl ckJ1ZmZlckRpc2tDaGFuZ2UpOworCisJCQkJLyogbWlnaHQgaGF2ZSBiZWVuIHJlYWxsb2NhdGVk IGFib3ZlICovCisJCQkJb25kaXNrID0gKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlICopIHJiLT5v dXRidWY7CisKKwkJCQkvKiB3cml0ZSB0aGUgcHJlZml4LCByZWxpZCBhbmQgY21kdHlwZSBpbmNs dWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJnByZWZpeF9zaXplLCBzaXplb2Yo U2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCAmY2hh bmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9m KE9pZCk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIHNp emVvZihpbnQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBj aGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgcHJlZml4X3NpemUpOworCQkJCWRh dGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcg dGhlIHNpemUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2Fn ZV9zaXplLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1l bWNweShkYXRhLCBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplOworCiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAgLTQwODUsNiArNDE4NSwxNSBAQCBSZW9yZGVyQnVm ZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJl Zml4X3NpemUgKyBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSArCiAJCQkJCXNpemVvZihT aXplKSArIHNpemVvZihTaXplKTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplID0g c3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJCQlzeiArPSBwcmVm aXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsKKwkJCQkJc2l6ZW9m KFNpemUpICsgc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KTsKKwogCQkJ CWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046 CkBAIC00MzYwLDYgKzQ0NjksMzMgQEAgUmVvcmRlckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRl ckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdl X3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0Vf RERMTUVTU0FHRToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQg cHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVmaXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsK KwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoJmNoYW5nZS0+ZGF0YS5kZGxt c2cucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOwor CQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBkYXRhLCBzaXplb2YoaW50 KSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsbXNnLnBy ZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJ CW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOwor CQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09 ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHRoZSBtZXNz YWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0YSwg c2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQljaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsCisJCQkJCQkJ CQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQltZW1jcHkoY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1l c3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsK KwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElE QVRJT046CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRleCAyMDdh NTgwNWJhLi4yMWI4MmYzNDRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29y a2VyLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIK KyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVw dC5oIgpAQCAtMTc5LDcgKzE4MCwxMCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisj aW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAj aW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTI0NjQsNiArMjQ2OCwyMzAgQEAgYXBwbHlfaGFuZGxl X3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQogCisv KiBSZW1vdmUgdGhlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCitzdGF0aWMg dm9pZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21t YW5kVGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9k ZSAqKWNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdf Q1JFQVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJCQlD cmVhdGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1hbmQt PnN0bXQ7CisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCQkJewor CQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQg ZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZy b20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJY2FzdG10 LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ug Q01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9IChTZWxlY3RTdG10 ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9DbGF1c2UgIT0gTlVMTCkK KwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0 byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxp Y2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJ CQlzc3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJy ZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBDUkVBVEUg VEFCTEUgY29tbWFuZAorICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUgZm9yIENS RUFURSBUQUJFTCBjb21tYW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJFTF9TVEFU RV9SRUFEWSBzbyBETUwgY2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVwbGljYXRl ZCB3aXRob3V0CisgKiBoYXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3JpcHRpb24g Li4uIHJlZnJlc2ggcHVibGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfY3JlYXRl X3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCVJh bmdlVmFyCSAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9pZAkJCXJlbG5hbWVzcGFjZSA9 IEludmFsaWRPaWQ7CisJY2hhciAJCSAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkJICpyZWxu YW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNv bW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURUQUdfQ1JFQVRF X1RBQkxFOgorCQkJeworCQkJCUNyZWF0ZVN0bXQgKmNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29t bWFuZC0+c3RtdDsKKwkJCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwkJCX0KKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJaWYgKCFydikKKwkJcmV0dXJuOworCisJc2No ZW1hbmFtZSA9IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsKKworCWlm IChzY2hlbWFuYW1lICE9IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lk KHNjaGVtYW5hbWUsIGZhbHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxpZE9pZCkK KwkJcmVsaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2UpOworCWVs c2UKKwkJcmVsaWQgPSBSZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisKKwlpZiAocmVsaWQgIT0g SW52YWxpZE9pZCkKKwl7CisJCUFkZFN1YnNjcmlwdGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9u LT5vaWQsIHJlbGlkLAorCQkJCQkJCQlTVUJSRUxfU1RBVEVfUkVBRFksCisJCQkJCQkJCUludmFs aWRYTG9nUmVjUHRyKTsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgi dGFibGUgXCIlc1wiIGFkZGVkIHRvIHN1YnNjcmlwdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkgcmVs bmFtZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXBw bHlfaGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0ciBsc247CisJY29uc3Qg Y2hhciAqcHJlZml4ID0gTlVMTDsKKwljaGFyICptZXNzYWdlID0gTlVMTDsKKwljaGFyCSAgICpk ZGxfY29tbWFuZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKKwlMaXN0 Q2VsbCAgICpwYXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOworCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmlu ZyA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRs bWVzc2FnZShzLCAmbHNuLCAmcHJlZml4LCAmc3opOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBp biBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisK KwlkZGxfY29tbWFuZCA9IGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKG1lc3NhZ2UpOworCWRl YnVnX3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOworCisJLyogRGVzdE5vbmUgZm9yIGxvZ2lj YWwgcmVwbGljYXRpb24gKi8KKwlyZWNlaXZlciA9IENyZWF0ZURlc3RSZWNlaXZlcihEZXN0Tm9u ZSk7CisJcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxfY29tbWFuZCk7CisKKwlm b3JlYWNoKHBhcnNldHJlZV9pdGVtLCBwYXJzZXRyZWVfbGlzdCkKKwl7CisJCUxpc3QJICAgKnBs YW50cmVlX2xpc3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0OworCQlSYXdTdG10CSAgICpj b21tYW5kID0gKFJhd1N0bXQgKikgbGZpcnN0KHBhcnNldHJlZV9pdGVtKTsKKwkJQ29tbWFuZFRh Zwljb21tYW5kVGFnOworCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29udGV4dCA9IE5V TEw7CisJCVBvcnRhbAkJcG9ydGFsOworCQlib29sCQkgc25hcHNob3Rfc2V0ID0gZmFsc2U7CisK KwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwkJ LyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9yIHByaW9yIGNvbW1hbmQs IHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBSZW1vdmUgZGF0YSBw b3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUo Y29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3QgaWYgcGFyc2UgYW5hbHlz aXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChhbmFseXplX3JlcXVpcmVz X3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNh Y3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7CisJCX0KKworCQkvKgor CQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBj b250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFu eSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3BhcnNldHJlZV9jb250ZXh0 ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJ CQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJ CSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlzdCA9IHBn X2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJ CWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJcGxhbnRy ZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAs IE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyc2luZy9w bGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0aXZlU25hcHNob3QoKTsK KworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0cnVlLCB0 cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkgYW55dGhpbmcgaW50byB0 aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJlIHBhc3NpbmcgaGVyZSBp cyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRl eHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXkuCisJCSAqLworCQlQb3J0 YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJCQkgIGRkbF9jb21tYW5k LAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9saXN0LAorCQkJCQkJICBO VUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVycyBoZXJl LgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJbnZhbGlkU25hcHNob3Qp OworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4 ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwor CQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1 ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJ CQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7CisKKwkJQ29tbWFuZENv dW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERETCByZXBs aWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkKKwkJICogYWRkZWQgdG8g dGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2NyZWF0ZV90YWJsZShjb21t YW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJzZXRyZWUgY29udGV4dCwg aWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9wYXJzZXRy ZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVy eV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KKwogCiAvKgogICogTG9naWNh bCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0yNTI5LDYgKzI3 NTcsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlicmVhazsK IAorCQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJYXBwbHlfaGFuZGxlX2Rk bChzKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoK IAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDJlY2FhNWI5MDcuLjVlNWIx Y2ExMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwpA QCAtNTMsNiArNTMsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFy ICpwcmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGlj IHZvaWQgcGdvdXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJ CQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJ CQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKIAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lk IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK QEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNh bGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1 bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0 X21lc3NhZ2U7CisJY2ItPmRkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNi LT5jb21taXRfY2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2luX3ByZXBhcmVf Y2IgPSBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgsNyBAQCBfUEdf b3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPnN0cmVh bV9jb21taXRfY2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJlYW1fY2hhbmdl X2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9IHBnb3V0cHV0 X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRfZGRsbWVzc2Fn ZTsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJh bnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJl cGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBA QCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1 Z2luT3B0aW9ucyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wu ICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09VVFBVVDsKKwlv cHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0 aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBA QCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1 Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUuICovCiAJCWRh dGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJ CXB1YmxpY2F0aW9uc192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxs YmFjayhQVUJMSUNBVElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52YWxpZGF0aW9u X2NiLApAQCAtMTM3Nyw5ICsxMzg2LDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hh bmdlVHlwZSBhY3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Ns b3QgPSBOVUxMOwogCVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJYm9vbAkJCXRh YmxlX3Jld3JpdGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9ncmVzcyhjdHgs IGZhbHNlKTsKIAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0IG5lZWQgdG8g cmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxpc2hlcyByZXdy aXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJlIGFuZAorCSAq IGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9uLT5yZF9yZWwt PnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVsYXRpb24gPSBS ZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSk7CisJCXRh cmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVibGlzaGFibGVfcmVsYXRpb24o cmVsYXRpb24pKQogCQlyZXR1cm47CiAKQEAgLTE0MTMsNiArMTQzNSwxMyBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVibGlzaCB0YWJs ZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBkZGwKKwkgKiBt ZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5IGJ5IHVzaW5n IGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDQyLDggKzE0NzEsOCBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdvdXRwdXRfcm93 X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0JCQkJCQkJCQkg JmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRwdXRfcm93X2Zp bHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rpb24pKQogCQkJ CWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ2Myw4ICsxNDkyLDE5IEBAIHBnb3V0cHV0X2NoYW5nZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCW1h eWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkpOwogCiAJCQlP dXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxyZXBfd3JpdGVf aW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENvbnZlcnQgdGhl IHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJCSAq IGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBiZXR3 ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVudC4KKwkJCSAq LworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4 LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90LCBkYXRhLT5i aW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQorCQkJCWxvZ2lj YWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCisJ CQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlPdXRwdXRQbHVn aW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX1VQREFURToKQEAgLTE1OTQsNiArMTYzNCw5IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJYW5jZXN0b3Ig PSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkKTsKIAlN ZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNjcxLDggKzE3MTQsOCBAQCBw Z291dHB1dF90cnVuY2F0ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAogc3RhdGljIHZvaWQKIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCi0JCQkJIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IHN6LAotCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCisJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBz eiwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRw dXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOwogCVRyYW5zYWN0aW9uSWQgeGlk ID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CkBAIC0xNzEyLDYgKzE3NTUsMTM3IEBAIHBnb3V0cHV0 X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIH0KIAorc3RhdGljIHZvaWQKK3Bn b3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCWNvbnN0IGNo YXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRhICpkYXRhID0g KFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQR091dHB1dFR4 bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0X3BsdWdpbl9w cml2YXRlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlUcmFuc2FjdGlvbklkIHhpZCA9 IEludmFsaWRUcmFuc2FjdGlvbklkOworCVJlbGF0aW9uU3luY0VudHJ5ICpyZWxlbnRyeTsKKwor CS8qCisJICogUmVtZW1iZXIgdGhlIHhpZCBmb3IgdGhlIG1lc3NhZ2UgaW4gc3RyZWFtaW5nIG1v ZGUuIFNlZQorCSAqIHBnb3V0cHV0X2NoYW5nZS4KKwkgKi8KKwlpZiAoaW5fc3RyZWFtaW5nKQor CQl4aWQgPSB0eG4tPnhpZDsKKworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2UgRENUX1Rh YmxlRHJvcFN0YXJ0OgorCQkJLyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0aGUgcmVsaWQg dG8gYSBkZWxldGVkX3JlbGlkIGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBwYXJ0IG9mIGEg cHVibGljYXRpb24gdGhhdCBzdXBwb3J0cyBkZGwgcHVibGljYXRpb24uIFdlCisJCQkgKiBuZWVk IHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9uZ2VyIGJlCisJ CQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBkcm9wIGlzIGZv ciBhIHJlbGlkCisJCQkgKiB0aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0LCBhbmQgb25s eSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJcmVsYXRpb24g PSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVsYXRpb24pOwor CQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQlp ZiAocmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRz ID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKworCQkJUmVsYXRp b25DbG9zZShyZWxhdGlvbik7CisJCQlyZXR1cm47CisJCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoK KwkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCkpCisJ CQkJcmV0dXJuOworCQkJZWxzZQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGlzdF9kZWxl dGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisJCQlicmVhazsKKwkJY2FzZSBE Q1RfVGFibGVBbHRlcjoKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBkZGwsIHdlIGZp cnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlIHRvCisJCQkgKiBzdWJzY3JpYmVyLCB0 aGVuIGNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvIFVQREFURSBhbmQKKwkJ CSAqIHNlbmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0d2VlbiBwdWJs aXNoZXIgYW5kCisJCQkgKiBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lzdGVudC4KKwkJ CSAqCisJCQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246CisJCQkgKgor CQkJICogKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBi ZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlci4gVG8gbWFr ZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIKKwkJCSAqIHdoaWNoIGRvZXNuJ3Qg ZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBsZXQKKwkJ CSAqIHRoZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJl d3JpdGUgYWxsIHRoZQorCQkJICogZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkgKiAoMikgdGhl IGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9u ZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rp b25zL29wZXJhdG9ycyB1c2VkCisJCQkgKiBkdXJpbmcgcmV3cml0ZSksIHNvIHdlIG5lZWQgdG8g cmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcAorCQkJICogdGhlIGRhdGEgY29u c2lzdGVudC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXByb3ZlIHRoaXMg YnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciBvbmx5CisJCQkgKiByZXdyaXRlIHRoZSBleHRyYSBk YXRhIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQgdXNlIHRoZQorCQkJICogdXBj b21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4gQmVzaWRlcywg d2UgbWF5CisJCQkgKiBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5 cGUgb2YgcmV3cml0ZSBkZGwsIGZvcgorCQkJICogZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBz a2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgorCQkJICogVEFCTEUgU0VUIExP R0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBhY3R1YWxseSBiZQorCQkJICog Y2hhbmdlZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVs aWQpOworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNf ZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5kaW5nIHRoaXMg ZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlIGRkbAorCQkJICogbmVl ZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICovCisJCQlpZiAo IXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5wdWJsaXNoX2Fz X3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJ CXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJl bGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9u ID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5 KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwp CisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQor CisJCQlicmVhazsKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8K KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIHR5cGUg JWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4gaWYgd2UgaGF2 ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdpbl90eG4pCisJ CXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2luUHJlcGFyZVdy aXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKGN0eC0+b3V0LAor CQkJCQkJCQl4aWQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVmaXgsCisJCQkJ CQkJCXN6LAorCQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUp OworCisJaWYgKHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKK30KKwogLyoK ICAqIFJldHVybiB0cnVlIGlmIHRoZSBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvcmlnaW4g YW5kIHRoZSB1c2VyIGhhcwogICogcmVxdWVzdGVkIHRoZSBjaGFuZ2VzIHRoYXQgZG9uJ3QgaGF2 ZSBhbiBvcmlnaW4sIGZhbHNlIG90aGVyd2lzZS4KQEAgLTE5OTMsNyArMjE2Nyw4IEBAIGdldF9y ZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQll bnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7 CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVw ZGF0ZSA9Ci0JCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0g ZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGRsID0gZmFsc2U7CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xv dCA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4 cHJzdGF0ZSkpOwpAQCAtMjA1MSw2ICsyMjI2LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0 cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YnVwZGF0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsK IAkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFj dGlvbnMucHViZGRsID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xlYW51cHMu IChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIxNjQsNiArMjM0MCw3IEBA IGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9u KQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVi dXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1YmFjdGlv bnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1Yi0+ cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgfD0g cHViLT5wdWJhY3Rpb25zLnB1YmRkbDsKIAogCQkJCS8qCiAJCQkJICogV2Ugd2FudCB0byBwdWJs aXNoIHRoZSBjaGFuZ2VzIGFzIHRoZSB0b3AtbW9zdCBhbmNlc3RvcgpAQCAtMjM0OSw2ICsyNTI2 LDcgQEAgcmVsX3N5bmNfY2FjaGVfcHVibGljYXRpb25fY2IoRGF0dW0gYXJnLCBpbnQgY2FjaGVp ZCwgdWludDMyIGhhc2h2YWx1ZSkKIAl7CiAJCWVudHJ5LT5yZXBsaWNhdGVfdmFsaWQgPSBmYWxz ZTsKIAl9CisKIH0KIAogLyogU2VuZCBSZXBsaWNhdGlvbiBvcmlnaW4gKi8KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCmluZGV4IDAwZGMwZjI0MDMuLmYxYjRkMDkzY2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNTY4Myw2ICs1NjgzLDcgQEAgUmVsYXRpb25CdWlsZFB1 YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNj KQogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7 CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsK IAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0 ZTsKKwkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRsOwogCiAJ CS8qCiAJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRlciBl eHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBiZDliMDY2ZTRlLi45N2Y0MzRhN2U4 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKQEAgLTM4OTcsNiArMzg5Nyw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlp bnQJCQlpX3B1YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRs OwogCWludAkJCWlfcHVidmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzkxMiwy MyArMzkxMywyMyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJs aWNhdGlvbnMpCiAJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1Ymxp Y2F0aW9ucy4gKi8KLQlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZv dXQtPnJlbW90ZVZlcnNpb24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJ CQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQs IHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIK KwkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHVi ZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCQkg IkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24g Pj0gMTEwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVD VCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAi Ci0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1 YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5w dWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJ CQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1l LCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5w dWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUs IGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5z ZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxz ZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1 YmxpY2F0aW9uIHAiKTsKIAogCXJlcyA9IEV4ZWN1dGVTcWxRdWVyeShmb3V0LCBxdWVyeS0+ZGF0 YSwgUEdSRVNfVFVQTEVTX09LKTsKQEAgLTM5NDQsNiArMzk0NSw3IEBAIGdldFB1YmxpY2F0aW9u cyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpX3B1YnVwZGF0ZSA9IFBR Zm51bWJlcihyZXMsICJwdWJ1cGRhdGUiKTsKIAlpX3B1YmRlbGV0ZSA9IFBRZm51bWJlcihyZXMs ICJwdWJkZWxldGUiKTsKIAlpX3B1YnRydW5jYXRlID0gUFFmbnVtYmVyKHJlcywgInB1YnRydW5j YXRlIik7CisJaV9wdWJkZGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsIik7CiAJaV9wdWJ2aWFy b290ID0gUFFmbnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxs b2MobnR1cHMgKiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC0zOTY3LDYgKzM5NjksOCBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ CQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRlbGV0ZSksICJ0IikgPT0gMCk7CiAJ CXB1YmluZm9baV0ucHVidHJ1bmNhdGUgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwg aV9wdWJ0cnVuY2F0ZSksICJ0IikgPT0gMCk7CisJCXB1YmluZm9baV0ucHViZGRsID0KKwkJCShz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsKSwgInQiKSA9PSAwKTsKIAkJcHViaW5m b1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlh cm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQwNDYsNiArNDA1MCwxNSBAQCBkdW1wUHVibGljYXRp b24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJz dCA9IGZhbHNlOwogCX0KIAorCWlmIChwdWJpbmZvLT5wdWJkZGwpCisJeworCQlpZiAoIWZpcnN0 KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOworCisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiZGRsIik7CisJCWZpcnN0ID0gZmFsc2U7CisJfQorCiAJYXBwZW5k UFFFeHBCdWZmZXJDaGFyKHF1ZXJ5LCAnXCcnKTsKIAogCWlmIChwdWJpbmZvLT5wdWJ2aWFyb290 KQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmgKaW5kZXggNDI3ZjVkNDVmNi4uNjg1NjgzZWViMCAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCkBA IC02MjAsNiArNjIwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1B1YmxpY2F0aW9uSW5mbwogCWJvb2wJ CXB1YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKIAlib29sCQlwdWJ2aWFyb290OworCWJv b2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25JbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpp bmRleCA2YjhjMTdiYjRjLi43OTJmNDM4OTU5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1 bXAvcm1ncmRlc2MuYworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYwpAQCAtMjcs NiArMjcsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiY29t bWFuZHMvdGFibGVzcGFjZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v b3JpZ2luLmgiCiAjaW5jbHVkZSAicm1ncmRlc2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N0YW5k YnlkZWZzLmgiCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4v cHNxbC9kZXNjcmliZS5jCmluZGV4IGM2NDVkNjY0MTguLjJlOTRmY2E3NDQgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBA IC02MTU5LDcgKzYxNTksNyBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4p CiAJUFFFeHBCdWZmZXJEYXRhIGJ1ZjsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJcHJpbnRRdWVyeU9w dCBteW9wdCA9IHBzZXQucG9wdDsKLQlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1u c1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZX07CisJc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsK IAogCWlmIChwc2V0LnN2ZXJzaW9uIDwgMTAwMDAwKQogCXsKQEAgLTYxOTQsNiArNjE5NCwxMCBA QCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCWFwcGVuZFBRRXhwQnVm ZmVyKCZidWYsCiAJCQkJCQkgICIsXG4gIHB1YnZpYXJvb3QgQVMgXCIlc1wiIiwKIAkJCQkJCSAg Z2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpKTsKKwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDAp CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbCBBUyBcIiVz XCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIkRETHMiKSk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7 CkBAIC02Mjg0LDYgKzYyODgsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpw YXR0ZXJuKQogCVBHcmVzdWx0ICAgKnJlczsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9v bAkJaGFzX3B1YnZpYXJvb3Q7CisJYm9vbAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0 YSB0aXRsZTsKIAlwcmludFRhYmxlQ29udGVudCBjb250OwpAQCAtNjMwMCw2ICs2MzA1LDcgQEAg ZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAogCWhhc19wdWJ0cnVu Y2F0ZSA9IChwc2V0LnN2ZXJzaW9uID49IDExMDAwMCk7CiAJaGFzX3B1YnZpYXJvb3QgPSAocHNl dC5zdmVyc2lvbiA+PSAxMzAwMDApOworCWhhc19wdWJkZGwgPSAgKHBzZXQuc3ZlcnNpb24gPj0g MTUwMDAwKTsKIAogCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKIApAQCAtNjMxMyw2ICs2MzE5LDkg QEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlpZiAoaGFzX3B1 YnZpYXJvb3QpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJICIsIHB1YnZp YXJvb3QiKTsKKwlpZiAoaGFzX3B1YmRkbCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwK KwkJCQkJCQkgIiwgcHViZGRsIik7CiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJ CSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02MzY0LDYgKzYz NzMsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJbmNv bHMrKzsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJbmNvbHMrKzsKKwkJaWYgKGhhc19wdWJk ZGwpCisJCQluY29scysrOwogCiAJCWluaXRQUUV4cEJ1ZmZlcigmdGl0bGUpOwogCQlwcmludGZQ UUV4cEJ1ZmZlcigmdGl0bGUsIF8oIlB1YmxpY2F0aW9uICVzIiksIHB1Ym5hbWUpOwpAQCAtNjM3 OCw2ICs2Mzg5LDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikK IAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVHJ1bmNhdGVzIiks IHRydWUsIGFsaWduKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZEhl YWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJWaWEgcm9vdCIpLCB0cnVlLCBhbGlnbik7CisJCWlm IChoYXNfcHViZGRsKQorCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29w KCJERExzIiksIHRydWUsIGFsaWduKTsKIAogCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFn ZXR2YWx1ZShyZXMsIGksIDIpLCBmYWxzZSwgZmFsc2UpOwogCQlwcmludFRhYmxlQWRkQ2VsbCgm Y29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDMpLCBmYWxzZSwgZmFsc2UpOwpAQCAtNjM4OCw2ICs2 NDAxLDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXBy aW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxz ZSk7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQ UWdldHZhbHVlKHJlcywgaSwgOCksIGZhbHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQor CQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA5KSwgZmFsc2Us IGZhbHNlKTsKIAogCQlpZiAoIXB1YmFsbHRhYmxlcykKIAkJewpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApp bmRleCAwMDBiY2JmZGFmLi4zN2RmZDQ1MWY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3Mvcm1ncmxpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcs MyArNDcsNCBAQCBQR19STUdSKFJNX0NPTU1JVF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3Rz X3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21taXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lO X0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCByZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVz YywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1Io Uk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBnZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2Vu ZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwgZ2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihS TV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1lc3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2lj YWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNh bG1zZ19kZWNvZGUpCitQR19STUdSKFJNX0xPR0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVz c2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVkbywgbG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRs bXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsZGRsbXNnX2RlY29kZSkKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDJjODcxMDZlZWYuLmNlMWIxN2Y1YWIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4MjksNCArMTE4MjksMTMgQEAKIHsgb2lkID0+ICc0NjQz JywgZGVzY3IgPT4gJ2V4cGFuZCBqc29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFu ZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlw ZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVw YXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3IgPT4gJ3RyaWdn ZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX2RkbF9jb21tYW5kX2VuZCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAor ICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9j b21tYW5kX2VuZCcgfSwKK3sgb2lkID0+ICc0NjQ1JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2Ugc3RhcnQnLAorICBwcm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBh cnNlX2RkbF9jb21tYW5kX3N0YXJ0JywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisg IHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2Nv bW1hbmRfc3RhcnQnIH0sCit7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAorICBwcm9uYW1lID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9yZXdyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4 IGVjZjVhMjhlMDAuLmRhZmQ0ODM3NmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmgKQEAgLTU0LDYgKzU0LDkgQEAgQ0FUQUxPRyhwZ19wdWJsaWNhdGlvbiw2MTA0LFB1YmxpY2F0 aW9uUmVsYXRpb25JZCkKIAogCS8qIHRydWUgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJlIHB1Ymxp c2hlZCB1c2luZyByb290IHNjaGVtYSAqLwogCWJvb2wJCXB1YnZpYXJvb3Q7CisKKwkvKiB0cnVl IGlmIHRhYmxlIGNyZWF0aW9ucyBhcmUgcHVibGlzaGVkICovCisJYm9vbAkJcHViZGRsOwogfSBG b3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiAr NzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRh dGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRk bDsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRl c2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCAxMDA5MWMzYWFmLi5mZDJl ZTdmZmU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3MSw4 IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFk ZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChO b2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlk KE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJs ZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3Mp OworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCBy ZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAK IGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICppc3Rt dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uYThkY2E4NjNiNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9H SUNBTF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisj aW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisK KworLyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMu CisgKi8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENvbW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNt ZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENUX1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVB bHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURDVF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29t bWFuZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ug d2FsIHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQor eworCU9pZAkJCQkJCWRiSWQ7CQkJLyogZGF0YWJhc2UgT2lkIGVtaXR0ZWQgZnJvbSAqLworCVNp emUJCQkJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJlZml4ICovCisJT2lkCQkJCQkJcmVs aWQ7CQkJLyogaWQgb2YgdGhlIHRhYmxlICovCisJRGVwYXJzZWRDb21tYW5kVHlwZQkJY21kdHlw ZTsJCS8qIHR5cGUgb2Ygc3FsIGNvbW1hbmQgKi8KKwlTaXplCQkJCQltZXNzYWdlX3NpemU7CSAg Lyogc2l6ZSBvZiB0aGUgbWVzc2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcg bnVsbC10ZXJtaW5hdGVkIHByZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFy CQltZXNzYWdlW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3Nh Z2U7CisKKyNkZWZpbmUgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2lj YWxfZGRsX21lc3NhZ2UsIG1lc3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2Fs RERMTWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVf dCBzaXplKTsKKworLyogUk1HUiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NB R0UJMHgwMAordm9pZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3Jk KTsKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0 YXRlICpyZWNvcmQpOworY29uc3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBp bmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNv ZGUuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDc0MWJmNjVjZjcu LjQyN2E3Yjk5N2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5o CisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBA IGV4dGVybiB2b2lkIGhlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhM b2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBz dGFuZGJ5X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2Fs ZGRsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZm ZXIgKmJ1Zik7CiAKIGV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8u aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4IDdlYWE0Yzk3 ZWQuLjVkNjE3NDg0ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBA IC02MSw2ICs2MSw3IEBAIHR5cGVkZWYgZW51bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxf UkVQX01TR19SRUxBVElPTiA9ICdSJywKIAlMT0dJQ0FMX1JFUF9NU0dfVFlQRSA9ICdZJywKIAlM T0dJQ0FMX1JFUF9NU0dfTUVTU0FHRSA9ICdNJywKKwlMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FH RSA9ICdMJywKIAlMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FM X1JFUF9NU0dfUFJFUEFSRSA9ICdQJywKIAlMT0dJQ0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVE ID0gJ0snLApAQCAtMjI5LDcgKzIzMCwxMSBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRl X3RydW5jYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiBMaXN0 ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJCSAgYm9v bCAqY2FzY2FkZSwgYm9vbCAqcmVzdGFydF9zZXFzKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQ dHIgbHNuLAotCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4 LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKKwkJCQkJCQkJCSBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfZGRsbWVzc2FnZShTdHJp bmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJ CWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRl cm4gY2hhciAqbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExvZ1Jl Y1B0ciAqbHNuLCBjb25zdCBjaGFyICoqcHJlZml4LCBTaXplICpzeik7CiBleHRlcm4gdm9pZCBs b2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJ CQkJCQkJCSBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNh bFJlcFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IGI3ZDI4ZDcwNDUuLjc2M2U0M2Y2 YmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTkwLDYgKzkw LDE4IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCVNpemUgbWVzc2FnZV9zaXplLAog CQkJCQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKgorICogQ2FsbGVkIGZvciB0aGUg bG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2lj YWxEZWNvZGVERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4 LAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJ CQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAgIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKgogICogRmlsdGVyIGNoYW5nZXMgYnkgb3JpZ2luLgog ICovCkBAIC0yMDEsNiArMjEzLDE5IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJl YW1NZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJ CQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2Fn ZSk7CiAKKy8qCisgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERM IG1lc3NhZ2VzIGZyb20gaW4tcHJvZ3Jlc3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRl ZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3Np emUsCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBDYWxsYmFj ayBmb3Igc3RyZWFtaW5nIHRydW5jYXRlcyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4K ICAqLwpAQCAtMjIxLDYgKzI0Niw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxi YWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNv ZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2Ni OworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVj b2RlRmlsdGVyQnlPcmlnaW5DQiBmaWx0ZXJfYnlfb3JpZ2luX2NiOwogCUxvZ2ljYWxEZWNvZGVT aHV0ZG93bkNCIHNodXRkb3duX2NiOwogCkBAIC0yMzksNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0 cmVhbV9jb21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFu Z2VfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsK KwlMb2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxtZXNzYWdlX2NiOwog CUxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0ZV9jYjsKIH0gT3V0 cHV0UGx1Z2luQ2FsbGJhY2tzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9wZ291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRleCAw MjAyNzU1MGUyLi44M2UwYjFlMmU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9wZ291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKQEAg LTI1LDYgKzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJdWludDMyCQlwcm90 b2NvbF92ZXJzaW9uOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVzOwogCUxpc3QJICAgKnB1 YmxpY2F0aW9uczsKKwlMaXN0CSAgICpkZWxldGVkX3JlbGlkczsKIAlib29sCQliaW5hcnk7CiAJ Ym9vbAkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v cmVvcmRlcmJ1ZmZlci5oCmluZGV4IDAyYjU5YTE5MzEuLjBiMWE5MTYxYzUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTExLDYgKzExLDggQEAKIAogI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNs dWRlICJub2Rlcy9ub2Rlcy5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIK ICNpbmNsdWRlICJzdG9yYWdlL3NpbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2guaCIK ICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgpAQCAtNTYsNiArNTgsNyBAQCB0eXBlZGVmIGVu dW0gUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5TRVJU LAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9VUERBVEUsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RFTEVURSwKKwlSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRSwKIAlSRU9SREVSX0JV RkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9O LAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzMCw2ICsx MzMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAq bWVzc2FnZTsKIAkJfQkJCW1zZzsKIAorCQkvKiBEREwgTWVzc2FnZS4gKi8KKwkJc3RydWN0CisJ CXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJCW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJ ICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJCURlcGFyc2VkQ29tbWFuZFR5cGUJY21k dHlwZTsKKwkJfQkJCWRkbG1zZzsKKwogCQkvKiBOZXcgc25hcHNob3QsIHNldCB3aGVuIGFjdGlv biA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC00 MzUsNiArNDQ4LDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IpIChS ZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3os CiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIERETCBtZXNzYWdlIGNhbGxi YWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VD QikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNv bnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgc3osCisJCQkJ CQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIGJlZ2luIHByZXBhcmUgY2FsbGJh Y2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyQmVnaW5QcmVwYXJl Q0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4 bik7CkBAIC01MDEsNiArNTI0LDE3IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJl YW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3os CiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIHN0cmVhbSBEREwgbWVz c2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJT dHJlYW1ERExNZXNzYWdlQ0IpICgKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyICpyYiwKKwkJ CQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJCQkgWExvZ1JlY1B0 ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJ CQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkJCSBTaXplIHN6LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOworCiAvKiBzdHJlYW0gdHJ1bmNhdGUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVm IHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQikgKAogCQkJCQkJCQkJCQkgICBS ZW9yZGVyQnVmZmVyICpyYiwKQEAgLTU1Miw2ICs1ODYsNyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZl cgogCVJlb3JkZXJCdWZmZXJBcHBseVRydW5jYXRlQ0IgYXBwbHlfdHJ1bmNhdGU7CiAJUmVvcmRl ckJ1ZmZlckNvbW1pdENCIGNvbW1pdDsKIAlSZW9yZGVyQnVmZmVyTWVzc2FnZUNCIG1lc3NhZ2U7 CisJUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQiBkZGxtZXNzYWdlOwogCiAJLyoKIAkgKiBDYWxs YmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFy ZSB0aW1lLgpAQCAtNTcxLDYgKzYwNiw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRl ckJ1ZmZlclN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXQ7CiAJUmVvcmRlckJ1ZmZlclN0cmVh bUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQiBz dHJlYW1fbWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9k ZGxtZXNzYWdlOwogCVJlb3JkZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVuY2F0 ZTsKIAogCS8qCkBAIC02NTAsNiArNjg2LDkgQEAgZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1 ZXVlTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJ CQkgIFNuYXBzaG90IHNuYXAsIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJICBib29sIHRyYW5z YWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3Np emUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVl RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNu LAorCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJ CQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlKTsKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXQoUmVvcmRlckJ1 ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9s c24sIFhMb2dSZWNQdHIgZW5kX2xzbiwKIAkJCQkJCQkJVGltZXN0YW1wVHogY29tbWl0X3RpbWUs IFJlcE9yaWdpbklkIG9yaWdpbl9pZCwgWExvZ1JlY1B0ciBvcmlnaW5fbHNuKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BzcWwub3V0CmluZGV4IGE3ZjU3MDBlZGMuLmJmYzczYzIzMjggMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wc3FsLm91dApAQCAtNTk3MCw5ICs1OTcwLDkgQEAgTGlzdCBvZiBzY2hl bWFzCiAoMCByb3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCiAoMCByb3dzKQogCiBcZFJzICJu by5zdWNoLnN1YnNjcmlwdGlvbiIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKaW5kZXggNDI3Zjg3ZWEwNy4uMmI3Y2QwZDU5NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTMwLDIwICszMCwyMCBAQCBFUlJPUjogIGNvbmZs aWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25zCiBMSU5FIDE6IC4uLnViX3h4eCBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJywgcHVibGlzaF92aS4uLgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFxk UnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVuY3QgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAg IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVw ZGF0ZSwgZGVsZXRlJyk7CiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8 IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAg fCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVz dHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgor IHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8 IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBAIC04NywxMCArODcsMTAgQEAgUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBiZSBhYmxlIHRvIGFkZCBzY2hlbWEg dG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRh YmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y dGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgog VGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hl bWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBw dWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUg YWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0Owog XGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMjMsMTAgKzEyMywxMCBAQCBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYSBGT1IgVEFCTEVTIElOIFND SEVNQSBwdWJfdGVzdCwgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yX3RibF9zY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgog LS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIGEgdGFibGUgb2YgdGhlIHNhbWUgc2NoZW1hIHRvIHRo ZSBzY2hlbWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1h IEFERCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xNDcsMTAgKzE0NywxMCBAQCBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCB0aGUgdGFibGUKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIERST1AgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3Br OwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYxLDEwIEBAIEVSUk9SOiAg cmVsYXRpb24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAt LSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1 Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAKQEAgLTE4NiwxMCArMTg2LDEwIEBAIFB1 YmxpY2F0aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJf Zm9yYWxsdGFibGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9yYWxsdGFibGVzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0 ZXN0cHViX3RibDI7CkBAIC0yMDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1YjMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi NCBGT1IgVEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2Vz OwogXGRScCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90 YmwzIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogCkBAIC0yMzQsMTAgKzIzNCwx MCBAQCBVUERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlz IGxpc3RlZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsK IFxkUnArIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAi cHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCBBTFRFUiBUQUJM RSB0ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFU RSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsg dGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IHQgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4NCwxMCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21l c3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUg dGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBk IDwgNSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2Fn ZXM7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVz dCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzAwLDEwICszMDAsMTAgQEAgVGFibGVzOgogCiBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJF IChlID4gMTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90 YmwyIiBXSEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTMxOSwxMCAr MzE5LDEwIEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJP UCBUQUJMRSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3Ri bDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzMwLDEwICszMzAsMTAg QEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZf dGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8 IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzY2LDEw ICszNjYsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZ IHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQn KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgx Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAi cHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwx MCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZf c2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAn aW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50 YXgyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf c3ludGF4MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3lu dGF4MgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEi CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5 KQpAQCAtNDk3LDEwICs0OTcsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZPUiBU QUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMjsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRVMgSU4gU0NIRU1BIHRlc3RwdWJfcmZfc2NoZW1hMiwgVEFCTEUgdGVz dHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiBXSEVSRSAoaSA8IDk5KTsKIFJFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjYKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYiIFdIRVJFIChpIDwgOTkpCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0LDEwICs3MTQsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFi bGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJf dGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg fCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJf dGJsNSIgKGEpCiAKQEAgLTg5MSwxMCArODkxLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsK IEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVy cyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKIFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVy cwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJz CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmls dGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAgRVJS T1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNh dGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBG T1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0 YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJf dGJsMSIKQEAgLTExNDAsMTAgKzExNDAsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHVi X2ZvcnRibCIKIAogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIK QEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNz aW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9w YXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1 bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8 IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJs aWNhdGlvbgpAQCAtMTIzNCwyMCArMTIzNCwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2Yg cHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9kZWZhdWx0IFJFTkFNRSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9m b28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1 YmxpY2F0aW9ucwotICAgIE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHRlc3RwdWJfZm9vIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAg IE5hbWUgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg dGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSBy b3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl cjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAg fCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0 cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEg cm93KQogCiAtLSBhZGRpbmcgc2NoZW1hcyBhbmQgdGFibGVzCkBAIC0xMjYzLDE5ICsxMjYzLDE5 IEBAIENSRUFURSBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50 KTsKIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViMV9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRS cCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3Jz Y2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDIsIHB1Yl90ZXN0 MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjg5LDQ0 ICsxMjg5LDQ0IEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIFRB QkxFUyBJTiBTQ0hFTUEgIkNVUlJFTlRfU0NIRU1BIiwgQ1VSCiBDUkVBVEUgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBGT1IgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hF TUEiOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVt YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2Zv cnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3Jz Y2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVibGljIgog CiBcZFJwKyB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHViNV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRf U0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAg ICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEzNjAsMTAg KzEzNjAsMTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3QgZXhpc3QK IC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJs aWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzNzEsMjAgKzEzNzEsMjAgQEAgVGFibGVzIGZyb20gc2No ZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBp biBwdWJsaWNhdGlvbgogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3Qx X3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MV9yZW5hbWVkIgogICAgICJwdWJfdGVz dDIiCiAKIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDFfcmVuYW1lZCBSRU5BTUUgdG8gcHViX3Rlc3Qx OwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIsMTAg KzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGFk ZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHVi X3Rlc3QyIgpAQCAtMTQwNCwxMCArMTQwNCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIG5v bl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIg ZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIi CkBAIC0xNDE2LDEwICsxNDE2LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qx OwogRVJST1I6ICBzY2hlbWEgInB1Yl90ZXN0MSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGlj YXRpb24gInRlc3RwdWIxX2ZvcnNjaGVtYSIKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQzOCwxMCArMTQzOCwxMCBAQCBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rl c3QyIiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKIApAQCAtMTQ0OSwyOSArMTQ0OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBu b25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEi IGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwg c2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVT IElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24gc2V0IG11bHRpcGxlIHNj aGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAg ICAgInB1Yl90ZXN0MiIKQEAgLTE0ODAsMTAgKzE0ODAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1h czoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFND SEVNQSBub25fZXhpc3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9z Y2hlbWEiIGRvZXMgbm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAg ICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHVi X3Rlc3QyIgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0g cmVtb3ZpbmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi MV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBc ZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU3NCwxOCArMTU3NCwxOCBAQCBTRVQgY2xp ZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjNf Zm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi M19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViM19mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsg dGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0MSwgVEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVt YSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwog UkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRh YmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNj aGVtYV9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y c2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERM cyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QyLnRi bDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIFxkUnArIHRlc3Rw dWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgotLSAKMi4zMi4wCgo= --0000000000006b44e305e9e034cc Content-Type: text/x-patch; charset="US-ASCII"; name="v24-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v24-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8o6ir8u4 RnJvbSBhYmI4MGRjNmMyZmM3YmFjMzJjOWZjM2M5MDRmMzY2YTQ4YWM1MTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjggU2VwIDIwMjIgMDk6NDY6MzEgLTA0MDAKU3ViamVjdDogW1BBVENI IHYyNCAxLzVdIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9BTFRFUi9EUk9QIFRBQkxFIC0tIE5vdGUgIzEsIE5vdGUgIzIKQ1JFQVRFL0FMVEVSL0RS T1AgU0VRVUVOQ0UKQ1JFQVRFL0FMVEVSL0RST1AgU0NIRU1BCkNSRUFURS9BTFRFUiBGVU5DVElP Ti9QUk9DRURVUkUKQ1JFQVRFL0FMVEVSIFRSSUdHRVIKQ1JFQVRFL0RST1AgSU5ERVgKQ1JFQVRF L0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVB VEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FMVEVSL0RST1AgVFlQRQpDUkVBVEUvQUxURVIv RFJPUCBDT05WRVJTSU9OCkNSRUFURS9BTFRFUi9EUk9QIFBPTElDWQpDUkVBVEUvQUxURVIvRFJP UCBFWFRFTlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIKQ1JFQVRF L0FMVEVSL0RST1AgUlVMRQpHUkFOVApSRVZPS0UKUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVwoK KE5vdGUgIzEpIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERE THMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4g ZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRp b24uCgooTm90ZSAjMikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJT04sIHdl IGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNh c2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdo aWxlIHRoZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRhYmxlLiBX ZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgotLS0KIHNy Yy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMgICAgICAgIHwgICAgNCArCiBzcmMvYmFja2VuZC9j b21tYW5kcy9NYWtlZmlsZSAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgfCA3NDc1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2pzb24uYyAgICAgfCAgNzYzICsrKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvc2VxdWVuY2UuYyAgICAgfCAgIDMzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRf dHlwZS5jIHwgICAgMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyAgICAgfCAg IDUyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgIHwgIDIyMCArLQogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgfCAgICA2ICsKIHNyYy9pbmNsdWRlL2Nv bW1hbmRzL3NlcXVlbmNlLmggICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmggICAgICB8ICAgMjMgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAg fCAgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oIHwgICAgMSArCiBz cmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUv dXRpbHMvcnVsZXV0aWxzLmggICAgICAgfCAgIDE2ICsKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICAgIHwgICAgNCArCiAxNiBmaWxlcyBjaGFuZ2VkLCA4NTM2IGluc2VydGlvbnMo KyksIDcwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHNyYy9iYWNrZW5kL2NvbW1h bmRzL2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVw YXJzZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKaW5kZXggYWE1YTJlZDk0OC4uN2RjMTkwZGRlYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jCkBAIC0zODUsNyArMzg1LDExIEBAIEV4ZWN1dGVHcmFudFN0bXQoR3Jh bnRTdG10ICpzdG10KQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJncmFudG9yIG11c3QgYmUgY3Vy cmVudCB1c2VyIikpKTsKKworCQlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CiAJfQorCWVs c2UKKwkJaXN0bXQuZ3JhbnRvcl91aWQgPSBJbnZhbGlkT2lkOwogCiAJLyoKIAkgKiBUdXJuIHRo ZSByZWd1bGFyIEdyYW50U3RtdCBpbnRvIHRoZSBJbnRlcm5hbEdyYW50IGZvcm0uCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L01ha2VmaWxlCmluZGV4IDQ4ZjczNDhmOTEuLjE3MWRmYjI4MDAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2Vm aWxlCkBAIC0yOSw2ICsyOSw4IEBAIE9CSlMgPSBcCiAJY29weXRvLm8gXAogCWNyZWF0ZWFzLm8g XAogCWRiY29tbWFuZHMubyBcCisJZGRsX2RlcGFyc2UubyBcCisJZGRsX2pzb24ubyBcCiAJZGVm aW5lLm8gXAogCWRpc2NhcmQubyBcCiAJZHJvcGNtZHMubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwLi44ZGMzMTUwNjFi Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpA QCAtMCwwICsxLDc0NzUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNl LmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQgdXRpbGl0eSBjb21tYW5kcyB0byBtYWNoaW5l LXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlvbgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdo dCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9m IENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoKKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJv dmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgorICog bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVu ZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKKyAqIHRoZSBjb21tYW5kcywgYnkg cmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgorICoKKyAqIE11Y2gg b2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9t IHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFz IGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkKKyAqIGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNp ZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCisgKiBl dGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4KKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorI2luY2x1ZGUgInRjb3AvZGRs X2RlcGFyc2UuaCIKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv dGFibGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJjYXRhbG9n L25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2F0dHJpYnV0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb252ZXJzaW9uLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbi5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhl cml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2xhcmdlb2JqZWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29w ZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9z ZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJm dW5jYXBpLmgiCisjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIu aCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVu Y3MuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVy L29wdGltaXplci5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUg InV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0 aWxzL3N5c2NhY2hlLmgiCisKKy8qIEVzdGltYXRlZCBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBq c29uYiBzdHJpbmcgKi8KKyNkZWZpbmUgSlNPTkJfRVNUSU1BVEVEX0xFTiAxMjgKKworLyoKKyAq IEJlZm9yZSB0aGV5IGFyZSB0dXJuZWQgaW50byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBj b21tYW5kIGlzCisgKiByZXByZXNlbnRlZCBhcyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0 cnVjdHMgYmVsb3cuCisgKi8KK3R5cGVkZWYgZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5 cGVCb29sLAorCU9ialR5cGVTdHJpbmcsCisJT2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2Vy LAorCU9ialR5cGVGbG9hdCwKKwlPYmpUeXBlT2JqZWN0Cit9IE9ialR5cGU7CisKK3R5cGVkZWYg c3RydWN0IE9ialRyZWUKK3sKKwlzbGlzdF9oZWFkCXBhcmFtczsKKwlpbnQJCQludW1QYXJhbXM7 CisJU3RyaW5nSW5mbwlmbXRpbmZvOworCWJvb2wJCXByZXNlbnQ7Cit9IE9ialRyZWU7CisKK3R5 cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAgICpuYW1lOworCU9ialR5cGUJCW9ianR5 cGU7CisKKwl1bmlvbgorCXsKKwkJYm9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOwor CQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUJICAgKm9iamVjdDsK KwkJTGlzdAkgICAqYXJyYXk7CisJfSB2YWx1ZTsKKwlzbGlzdF9ub2RlCW5vZGU7Cit9IE9iakVs ZW07CisKK2Jvb2wgdmVyYm9zZSA9IHRydWU7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgTGlzdCAqYXJyYXkpOworc3RhdGljIHZv aWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFs dWUpOworc3RhdGljIHZvaWQgYXBwZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFy ICpuYW1lLCBmbG9hdDggdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9i alRyZWUgKnRyZWUsIGNoYXIgKm5hbWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIGNo YXIgKmFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVl LCBPYmpFbGVtICplbGVtKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGZvcm1hdF90 eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJCQkJIE9pZCAq bnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJCQkJIGJvb2wg KnR5cGFycmF5KTsKK3N0YXRpYyBMaXN0ICpGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2Fy Z2RlZmF1bHRzKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hh ciAqbmFtZSk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9p ZCBjbGFzc0lkLCBPaWQgb2JqZWN0SWQpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zv cl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9v YmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX1ZBKGNo YXIgKmZtdCwgaW50IG51bW9ianMsLi4uKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29i amVjdChjaGFyICp2YWx1ZSk7CitzdGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9y ZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBw Z19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkJCQkgY2hhciAq KmluZGV4X2FtLAorCQkJCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJCQkJIGNoYXIg KipyZWxvcHRpb25zLAorCQkJCQkJCQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJCQkJIGNo YXIgKip3aGVyZUNsYXVzZSk7CitzdGF0aWMgY2hhciAqUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0 KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRubywKKwkJCQkJCQkJCSAgTGlzdCAqZHBjb250 ZXh0LCBMaXN0ICoqZXhwcnMpOworc3RhdGljIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBl KE9iamVjdFR5cGUgb2JqdHlwZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRl ZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJ CQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hh ciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9D b2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAq ZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVm aW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0 SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVs ZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFs dWUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rp b24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9D YWNoZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsK K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAq cGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpk ZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0 KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGlu ZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1JlY2Vp dmUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TZW5kKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBl IHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0lu KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBP YmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf dHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5 emUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3Bn X3R5cGUgdHlwRm9ybSk7CisKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQg b2JqZWN0SWQpOworc3RhdGljIExpc3QgKmRlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiBy ZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJCQkg ICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSk7CisKKy8qCisgKiBBZGQgY29tbW9uIGNsYXVz ZXMgdG8gQ3JlYXRlUG9saWN5IG9yIEFsdGVyUG9saWN5IGRlcGFyc2Ugb2JqZWN0cworICovCitz dGF0aWMgdm9pZAorYWRkX3BvbGljeV9jbGF1c2VzKE9ialRyZWUgKnBvbGljeVN0bXQsIE9pZCBw b2xpY3lPaWQsIExpc3QgKnJvbGVzLAorCQkJCSAgIGJvb2wgZG9fcXVhbCwgYm9vbCBkb193aXRo X2NoZWNrKQoreworCVJlbGF0aW9uCXBvbFJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlIZWFwVHVwbGUJcG9sVHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChwb2xSZWwsIEFudW1fcGdfcG9saWN5X29pZCwgcG9saWN5T2lkKTsKKwlGb3Jt X3BnX3BvbGljeSBwb2xGb3JtOworCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwb2xpY3kgJXUiLCBwb2xpY3lP aWQpOworCisJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisK KwkvKiBhZGQgdGhlICJPTiB0YWJsZSIgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3Qo cG9saWN5U3RtdCwgIk9OICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVs aWQpKTsKKworCS8qCisJICogQWRkIHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0 aGUgQ1JFQVRFIGNhc2UsIGl0IGFsd2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywg YnV0IGluIHRoZSBBTFRFUiBjYXNlIGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xl cykKKwl7CisJCUxpc3QgICAqbGlzdCA9IE5JTDsKKwkJTGlzdENlbGwgKmNlbGw7CisKKwkJZm9y ZWFjaCAoY2VsbCwgcm9sZXMpCisJCXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMg KikgbGZpcnN0KGNlbGwpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3 X29iamVjdF9vYmplY3QobmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJ YXBwZW5kX2FycmF5X29iamVjdChwb2xpY3lTdG10LCJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOwor CX0KKwllbHNlCisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQi LCBmYWxzZSk7CisJfQorCisJLyogYWRkIHRoZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLworCWlm IChkb19xdWFsKQorCXsKKwkJRGF0dW0JZGVwYXJzZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJ CWJvb2wJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVt X3BnX3BvbGljeV9wb2xxdWFsLAorCQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwg JmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBv bHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBv bHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwgIlVTSU5HICgle2V4 cHJlc3Npb259cykiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJ fQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFs c2UpOworCisJLyogYWRkIHRoZSBXSVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRv X3dpdGhfY2hlY2spCisJeworCQlEYXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsK KwkJYm9vbAlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFu dW1fcGdfcG9saWN5X3BvbHdpdGhjaGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBv bFJlbCksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQg TlVMTCBwb2x3aXRoY2hlY2sgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOwor CQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIs IHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwg IldJVEggQ0hFQ0sgKCV7ZXhwcmVzc2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJp bmcoZGVwYXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3Rt dCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1No YXJlTG9jayk7Cit9CisKKy8qIEFwcGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVlICov CitzdGF0aWMgdm9pZAorYXBwZW5kX2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10LCBMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICpvYmplY3Rf bmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0g MCkKKwkJcmV0dXJuOworCisJaWYgKCF2ZXJib3NlKQorCXsKKwkJTGlzdENlbGwgKmxjOworCisJ CS8qIEV4dHJhY3QgdGhlIE9iakVsZW1zIHdob3NlIHByZXNlbnQgZmxhZyBpcyB0cnVlICovCisJ CWZvcmVhY2gobGMsIGFycmF5KQorCQl7CisJCQlPYmpFbGVtICplbGVtID0gKE9iakVsZW0gKikg bGZpcnN0KGxjKTsKKworCQkJQXNzZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8 fAorCQkJCSAgIGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxl bS0+dmFsdWUub2JqZWN0LT5wcmVzZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBl T2JqZWN0KQorCQkJCWFycmF5ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOwor CQl9CisKKwl9CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmlu Zyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQXJyYXksIG9i amVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBlbmRfcHJlbWFk ZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKiBBcHBlbmQgYSBib29sZWFuIHBhcmFtZXRl ciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAqcGFyYW07CisJ Y2hhcgkgKm9iamVjdF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCSAgaXNfcHJlc2VudF9mbGFnID0g ZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkvKiBDaGVjayBpZiB0aGUgcHJlc2VudCBp cyBwYXJ0IG9mIHRoZSBmb3JtYXQgc3RyaW5nIGFuZCBzdG9yZSB0aGUgYm9vbGVhbiB2YWx1ZSov CisJaWYgKHN0cmNtcChzdWJfZm10LCAicHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50 X2ZsYWcgPSB0cnVlOworCQl0cmVlLT5wcmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJi b3NlICYmICF0cmVlLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxh ZykKKwkJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwg c3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1l KTsKKwlwYXJhbS0+dmFsdWUuYm9vbGVhbiA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVj dCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBmbG9hdDggcGFyYW1ldGVyIHRv IGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAq dHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFt OworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0 X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisK KwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUZsb2F0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0t PnZhbHVlLmZsdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7 Cit9CisKKy8qCisgKiBBcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRy ZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10KQoreworCWludAkJCQlsZW47CisJY2hhcgkJICAgKmZtdDsKKworCWlm ICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGlu Zm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJh dG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcp CisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKiBBcHBlbmQg YSBOVUxMIG9iamVjdCB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmpl Y3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwljaGFyICpvYmplY3RfbmFtZTsK KworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJb2Jq ZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7 CisKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgbmV3X29iamVjdChPYmpUeXBlTnVsbCwg b2JqZWN0X25hbWUpKTsKK30KKworLyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0 cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hh ciAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAm JiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29i amVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2Jq ZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0g dmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAq IFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0 ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBm b3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCithcHBlbmRf b2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sK KwlTdHJpbmdJbmZvRGF0YQlvYmplY3RfbmFtZTsKKwljb25zdCBjaGFyCSAgICplbmRfcHRyOwor CWNvbnN0IGNoYXIJICAgKmNwOworCWJvb2wJCQlzdGFydF9jb3B5ID0gZmFsc2U7CisKKwlpZiAo c3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIHN1Yl9m bXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25hbWUpOworCWVuZF9wdHIgPSBzdWJfZm10 ICsgc3RybGVuKHN1Yl9mbXQpOworCisJZm9yIChjcCA9IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0cjsg Y3ArKykKKwl7CisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlzdGFydF9jb3B5ID0gdHJ1ZTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdGFydF9jb3B5KQorCQkJY29udGludWU7CisK KwkJaWYgKCpjcCA9PSAnOicgfHwgKmNwID09ICd9JykKKwkJCWJyZWFrOworCisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyTWFjcm8oJm9iamVjdF9uYW1lLCAqY3ApOworCX0KKworCWlmIChvYmplY3Rf bmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9iamVjdCBuYW1lIG5vdCBmb3VuZCIpOwor CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlyZXR1cm4gb2JqZWN0 X25hbWUuZGF0YTsKK30KKworLyogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBh IHRyZWUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJh bXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyogQXBwZW5kIGEg c3RyaW5nIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5n X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICp2YWx1ZSkKK3sKKwlP YmpFbGVtCSAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJf Zm10KTsKKworCWlmICghdmVyYm9zZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAn XDAnKSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1h dF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0 cmluZywgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBl bmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogU2ltaWxhciB0byBm b3JtYXRfdHlwZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJldHVybiBlYWNoIGJpdCBvZiBpbmZvcm1h dGlvbgorICogc2VwYXJhdGVseToKKyAqCisgKiAtIG5zcGlkIGlzIHRoZSBzY2hlbWEgT0lELiAg Rm9yIGNlcnRhaW4gU1FMLXN0YW5kYXJkIHR5cGVzIHdoaWNoIGhhdmUgd2VpcmQKKyAqICAgdHlw bW9kIHJ1bGVzLCB3ZSByZXR1cm4gSW52YWxpZE9pZDsgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5v dCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5 cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlw ZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhl IHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnMKKyAqCisgKiAtIHR5cGFy cmF5IGluZGljYXRlcyB3aGV0aGVyIFtdcyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9uJ3Qg dHJ5IHRvIGRlY29kZSB0eXBlIG5hbWVzIHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVz LCBleGNlcHQKKyAqIGluIHRoZSBjYXNlcyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1 bGVzLgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lk LCBpbnQzMiB0eXBlbW9kLAorCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIg Kip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwYXJyYXkpCit7CisJSGVhcFR1cGxlCQl0dXBs ZTsKKwlGb3JtX3BnX3R5cGUJdHlwZWZvcm07CisJT2lkCQkJCWFycmF5X2Jhc2VfdHlwZTsKKwor CXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0odHlwZV9v aWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsKKworCXR5cGVmb3JtID0g KEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICogQ2hlY2sgaWYgaXQn cyBhIHJlZ3VsYXIgKHZhcmlhYmxlIGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAq IGZpeGVkLWxlbmd0aCBhcnJheSB0eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRl Y29uc3RydWN0ZWQuCisJICovCisJYXJyYXlfYmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07 CisKKwkqdHlwYXJyYXkgPSAoSXNUcnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+ dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BMQUlOKTsKKworCWlmICgqdHlwYXJyYXkpCisJewor CQkvKiBTd2l0Y2ggb3VyIGF0dGVudGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJ CVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVP SUQsIE9iamVjdElkR2V0RGF0dW0oYXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXBsZSkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig dHlwZSAldSIsIHR5cGVfb2lkKTsKKworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVCh0dXBsZSk7CisJCXR5cGVfb2lkID0gYXJyYXlfYmFzZV90eXBlOworCX0KKworCS8qCisJ ICogU3BlY2lhbC1jYXNlIGNyb2NrIGZvciB0eXBlcyB3aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVz IHdoZXJlIHdlIHB1dAorCSAqIHR5cG1vZCBhdCB0aGUgbWlkZGxlIG9mIG5hbWUoZS5nLiBUSU1F KDYpIHdpdGggdGltZSB6b25lICkuIFdlIGNhbm5vdAorCSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBh ZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJICovCisJaWYgKHR5 cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUE9JRCB8fAor CQl0eXBlX29pZCA9PSBUSU1FU1RBTVBUWk9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8 CisJCXR5cGVfb2lkID09IFRJTUVUWk9JRCkKKwl7CisJCXN3aXRjaCAodHlwZV9vaWQpCisJCXsK KwkJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIp OworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8 IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7 CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9k LiAqLworCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOwor CQkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAi KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVElNRVRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkK KwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxz ZQorCQkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kZS4gKi8KKwkJ CQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVP SUQ6CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJ Km5zcGlkID0gSW52YWxpZE9pZDsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogTm8gYWRkaXRp b25hbCBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0IHRoZSB0 eXBlCisJCSAqIG5hbWUgYW5kIHNjaGVtYSBkaXJlY3RseSBmcm9tIHRoZSBjYXRhbG9nLgorCQkg Ki8KKwkJKm5zcGlkID0gdHlwZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJKnR5cG5hbWUgPSBwc3Ry ZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAw KQorCQkqdHlwZW1vZHN0ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlw bW9kb3V0KTsKKwllbHNlCisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNl U3lzQ2FjaGUodHVwbGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0cyB2YWx1ZXMg b2YgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhw cmVzc2lvbnMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAq cHJvYXJnZGVmYXVsdHMpCit7CisJTGlzdCAgICpub2RlZGVmczsKKwlMaXN0ICAgKnN0cmRlZnMg PSBOSUw7CisJTGlzdENlbGwgKmNlbGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1Rv Tm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVm cywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7 CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZSAgICpvbmVkZWYgPSBsZmly c3QoY2VsbCk7CisKKwkJc3RyZGVmcyA9IGxhcHBlbmQoc3RyZGVmcywgZGVwYXJzZV9leHByZXNz aW9uKG9uZWRlZiwgTklMLCBmYWxzZSwgZmFsc2UpKTsKKwl9CisKKwlyZXR1cm4gc3RyZGVmczsK K30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZl biBSRUxQRVJTSVNURU5DRSB2YWx1ZS4KKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X3BlcnNpc3Rl bmNlX3N0cihjaGFyIHBlcnNpc3RlbmNlKQoreworCXN3aXRjaCAocGVyc2lzdGVuY2UpCisJewor CQljYXNlIFJFTFBFUlNJU1RFTkNFX1RFTVA6CisJCQlyZXR1cm4gIlRFTVBPUkFSWSI7CisJCWNh c2UgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQ6CisJCQlyZXR1cm4gIlVOTE9HR0VEIjsKKwkJY2Fz ZSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ6CisJCQlyZXR1cm4gIiI7CisJCWRlZmF1bHQ6CisJ CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBwZXJzaXN0ZW5jZSBtYXJraW5nICVjIiwgcGVyc2lz dGVuY2UpOworCQkJcmV0dXJuICIiOwkJLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCX0KK30K KworLyogQWxsb2NhdGUgYSBuZXcgcGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdf b2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKwor CXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsK KwlwYXJhbS0+b2JqdHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qIEFsbG9j YXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmpl Y3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0g PSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3Qg PSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9i amVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVlCSpwYXJhbXM7CisKKwlwYXJh bXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsK KwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQorCXsKKwkJcGFyYW1z LT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhw YXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsKK30KKworLyoKKyAq IEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cy4KKyAqCisg KiBFbGVtZW50cyAic2NoZW1hbmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5h bWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQg dG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVs ZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqbmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMg YW4gaWRlbnRpZmllciBvciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJv dXRpbmUKKyAqIGNvbmNlcm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4 cGFuZCBmdW5jdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKE9pZCBuc3BpZCwgY2hhciAqbmFtZSkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJ Y2hhcgkgICAqbmFtZXNwYWNlOworCisJaWYgKGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJ CW5hbWVzcGFjZSA9IHBzdHJkdXAoInBnX3RlbXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9IGdl dF9uYW1lc3BhY2VfbmFtZShuc3BpZCk7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9WQShO VUxMLCAyLAorCQkJCQkJCSAgInNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBuYW1lc3BhY2Us CisJCQkJCQkJICAib2JqbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJ cmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAg JXt9RCBhbmQgJXt9TyBlbGVtZW50cywgd2l0aCB0aGUgb2JqZWN0IHNwZWNpZmllZAorICogYnkg Y2xhc3NJZC9vYmpJZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKQoreworCU9ialRyZWUJKnF1 YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9nOworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0J CW9iam5zcDsKKwlEYXR1bQkJb2JqbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlBdHRy TnVtYmVyCUFudW1fbmFtZXNwYWNlOworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0 X2F0dG51bV9vaWQoY2xhc3NJZCk7CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRhYmxl X29wZW4oY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRhbG9n X29iamVjdF9ieV9vaWQoY2F0YWxvZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNhdG9i aikKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCAldSBvZiBj YXRhbG9nIFwiJXNcIiIsCisJCQkgb2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNh dGFsb2cpKTsKKwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOwor CUFudW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOwor CisJb2JqbnNwID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9u R2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIE5VTEwgbmFtZXNwYWNlIik7CisKKwlvYmpuYW1lID0gaGVh cF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAor CQkJCQkJICAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgTlVMTCBuYW1lIik7CisKKwlxdWFsaWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo RGF0dW1HZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5h bWUob2JqbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31S IG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNp YWwgdmFsdWVzIHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0 aGVpciBmaW5hbAorICogbmFtZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVl X2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYykKK3sKKwlPYmpUcmVlCSAgICpyb2xlOworCWNo YXIJICAgKnJvbGV0eXBlOworCisJaWYgKHNwZWMtPnJvbGV0eXBlICE9IFJPTEVTUEVDX1BVQkxJ QykKKwkJcm9sZXR5cGUgPSBnZXRfcm9sZXNwZWNfbmFtZShzcGVjKTsKKwllbHNlCisJCXJvbGV0 eXBlID0gcHN0cmR1cCgiIik7CisKKwlyb2xlID0gbmV3X29ianRyZWVfVkEoTlVMTCwyLAorCQkJ CQkJICAiaXNfcHVibGljIiwgT2JqVHlwZUJvb2wsIHNwZWMtPnJvbGV0eXBlID09IFJPTEVTUEVD X1BVQkxJQywKKwkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcm9sZXR5cGUpOwor CXJldHVybiByb2xlOworfQorCisvKgorICogSGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0 cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBPSUQuICAoQUNMX0lEX1BVQkxJQworICogbWVhbnMg dG8gdXNlICJwdWJsaWMiKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9y X3JvbGVfaWQoT2lkIHJvbGVvaWQpCit7CisJT2JqVHJlZSAgICAqcm9sZTsKKworCXJvbGUgPSBu ZXdfb2JqdHJlZSgiIik7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xfSURfUFVCTElDKQorCXsKKwkJ SGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2Vh cmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0ocm9sZW9pZCkpOworCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfVU5ERUZJTkVEX09CSkVDVCksCisJCQkJCSBlcnJtc2coInJvbGUgd2l0aCBP SUQgJXUgZG9lcyBub3QgZXhpc3QiLCByb2xlb2lkKSkpOworCisJCXJvbGVuYW1lID0gTmFtZVN0 cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdChyb2xlLCAiJXtyb2xlbmFtZX1JIiwgcHN0cmR1cChyb2xlbmFtZSkp OworCisJCVJlbGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0KKwllbHNlCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJvbGUsICIle3JvbGVuYW1lfUkiLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9s ZTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4K KyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwg aW50MzIgdHlwbW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsK KwljaGFyCSAgICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAg KnR5cG1vZHN0cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5 cGVJZCwgdHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAm dHlwYXJyYXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRf bmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3Ry ZHVwKCIiKTsKKworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJ ICAgInNjaGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVu YW1lIiwgT2JqVHlwZVN0cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5 cGVTdHJpbmcsIHR5cG1vZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwg dHlwYXJyYXkpOworCisJcmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEg bmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJz aW9uLgorICoKKyAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJm bXQiIGVsZW1lbnQgaW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhl IG51bWJlciBvZiBleHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICog bmFtZSAoc3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVz dCBiZSBzdXBwbGllZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsg Zm9yIGluc3RhbmNlLCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5 cGVTdHJpbmcgcmVxdWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3Qg KG9mCisgKiBPYmpFbGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQg c28gb24uICBFYWNoIGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9u IHNwZWNpZmllciBnaXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBp biBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3Qg aGF2ZSB0aGUgbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAq IG1hbGZvcm1lZCBhcmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29i anRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJl ZTsKKwl2YV9saXN0CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVs IG9iamVjdCBhbmQgaXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkv KiBBbmQgcHJvY2VzcyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9i anMpOworCWZvciAoaSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1l OworCQlPYmpUeXBlCQl0eXBlOworCQlPYmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9h cmcoYXJncywgY2hhciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxl bSA9IG5ld19vYmplY3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBw YXJhbSB0eXBlcyB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZl dGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBv YmplY3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6 CisJCQkJLyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJ CQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4g PSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoK KwkJCQllbGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJn KGFyZ3MsIExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJ CWVsZW0tPnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOwor CQkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3Ms IGRvdWJsZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+ dmFsdWUub2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlk ZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVk IiwgdHlwZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVf b2JqZWN0KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsK K30KKworLyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLworc3RhdGljIE9iakVsZW0g KgorbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07 CisKKwlBc3NlcnQodmFsdWUpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcs IE5VTEwpOworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsK K30KKworLyoKKyAqIFByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhl IE9ialRyZWUgaW50byB0aGUgb3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4KKyAqLworc3RhdGljIHZv aWQKK29ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwg T2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKwor CWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggdGhlIGtl eSBmaXJzdCAqLworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9 ICJmbXQiOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXkudmFsLnN0cmluZy52YWwp OworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkvKiBUaGVuIHBy b2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nICovCisJdmFsLnR5cGUgPSBqYnZTdHJp bmc7CisJdmFsLnZhbC5zdHJpbmcubGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCXZhbC52YWwu c3RyaW5nLnZhbCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRl LCBXSkJfVkFMVUUsICZ2YWwpOworfQorCisvKgorICogQ3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50 YXRpb24gZnJvbSBhbiBPYmpUcmVlLgorICovCitzdGF0aWMgSnNvbmIgKgorb2JqdHJlZV90b19q c29uYihPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUgKnZhbHVlOworCisJdmFsdWUgPSBv Ymp0cmVlX3RvX2pzb25iX3JlYyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNv bmIodmFsdWUpOworfQorCisvKgorICogSGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iOiBwcm9j ZXNzIGFuIGluZGl2aWR1YWwgZWxlbWVudCBmcm9tIGFuIG9iamVjdCBvcgorICogYW4gYXJyYXkg aW50byB0aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV90 b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9iakVsZW0gKm9iamVjdCwK KwkJCQkJCSBKc29uYkl0ZXJhdG9yVG9rZW4gZWxlbV90b2tlbikKK3sKKwlMaXN0Q2VsbCAgICpj ZWxsOworCUpzb25iVmFsdWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJewor CQljYXNlIE9ialR5cGVOdWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25i VmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2Jq VHlwZVN0cmluZzoKKwkJCXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcu bGVuID0gc3RybGVuKG9iamVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZh bCA9IG9iamVjdC0+dmFsdWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVt X3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2 YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJ CQlEYXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJ CQkJCQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6 CisJCQl2YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJp YykKKwkJCQlEYXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJp YywKKwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5 cGVCb29sOgorCQkJdmFsLnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2Jq ZWN0LT52YWx1ZS5ib29sZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2Vu LCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vy c2l2ZWx5IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJ CQlvYmp0cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IFdKQl9CRUdJTl9BUlJBWSwgTlVMTCk7CisJCQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUu YXJyYXkpCisJCQl7CisJCQkJT2JqRWxlbSAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJ b2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQl9CisJ CQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJYnJlYWs7 CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUg JWQiLCBvYmplY3QtPm9ianR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJz aXZlIGhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUg Kgorb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpz dGF0ZSkKK3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChz dGF0ZSwgdHJlZSk7CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJewor CQlPYmpFbGVtCSpvYmplY3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5j dXIpOworCQlKc29uYlZhbHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJ a2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmpl Y3QtPm5hbWUpOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRo ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVt ZW50KHN0YXRlLCBvYmplY3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGlu ZSBmb3IgQ1JFQVRFIFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVu IGEgdGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFw cGVuZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxp c3QgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1 bGFyIHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9S RUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoK K29idGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRv bWFpbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3RyOworCisJLyog T25seSBvbmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkg XiBPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0 byBmZXRjaCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9u LgorCSAqLworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5 SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlv bklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVs aWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0K KwllbHNlCisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5p dCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkp OworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5k ZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZv ciBlYWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVu dHMuICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJs ZSBpbmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMg dG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHBy b2Nlc3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJs ZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOwor CQljaGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJ eworCQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJ CWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5v dCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInBy aW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJ Y29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdH RVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlw ZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0 IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFt bWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICog ZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1 c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8K KwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0 aW9ufXMiLAorCQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25z dHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJ CQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSks CisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9j b25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50 cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKwor CXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4 IGRlZmluaXRpb24sIHNwbGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFyZ2UgYW1v dW50IG9mIGNvZGUgaXMgZHVwbGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29ya2VyLCBi dXQKKyAqIGNvbnRyb2wgZmxvdyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBz ZWVtIHdvcnRoIGtlZXBpbmcgdGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitw Z19nZXRfaW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hhciAqKmlu ZGV4X2FtLAorCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipyZWxvcHRp b25zLAorCQkJCQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVz ZSkKK3sKKwlIZWFwVHVwbGUJaHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJSGVhcFR1 cGxlCWh0X2FtOworCUZvcm1fcGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3MgaWR4cmVs cmVjOworCUZvcm1fcGdfYW0JYW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKKwlM aXN0CSAgICppbmRleHByczsKKwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlzdAkgICAq Y29udGV4dDsKKwlPaWQJCQlpbmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJaW5kY29s bERhdHVtOworCURhdHVtCQlpbmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25EYXR1bTsK Kwlib29sCQlpc251bGw7CisJb2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZlY3RvciAg KmluZGNsYXNzOworCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBkZWZp bml0aW9uQnVmOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9p ZCBvZiB0aGUgaW5kZXgKKwkgKi8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJ RCwgT2JqZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGh0X2lkeCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAl dSIsIGluZGV4cmVsaWQpOworCWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRf aWR4KTsKKworCWluZHJlbGlkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxp ZCA9PSBpZHhyZWMtPmluZGV4cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBp bmRjbGFzcywgYW5kIGluZG9wdGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBT eXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2lu ZGV4X2luZGNvbGxhdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxh dGlvbiA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlp bmRjbGFzc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJ CQkJCUFudW1fcGdfaW5kZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsK KwlpbmRjbGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0p OworCisJaW5kb3B0aW9uRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4 LAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQo IWlzbnVsbCk7CisJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGlu ZG9wdGlvbkRhdHVtKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRo ZSBpbmRleCByZWxhdGlvbgorCSAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxP SUQsIE9iamVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChodF9pZHhyZWwpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVs YXRpb24gJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VU U1RSVUNUKGh0X2lkeHJlbCk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0 aGUgaW5kZXgnIGFjY2VzcyBtZXRob2QKKwkgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShB TU9JRCwgT2JqZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGFjY2VzcyBtZXRob2QgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZv cm1fcGdfYW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhw cmVzc2lvbnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAq IHZlcnNpb25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdh bnQgdG8gZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLwor CWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxM KSkKKwl7CisJCURhdHVtCQlleHByc0RhdHVtOworCQlib29sCQlpc251bGw7CisJCWNoYXIJICAg KmV4cHJzU3RyaW5nOworCisJCWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJ RCwgaHRfaWR4LAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOwor CQlBc3NlcnQoIWlzbnVsbCk7CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhl eHByc0RhdHVtKTsKKwkJaW5kZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJp bmcpOworCQlwZnJlZShleHByc1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7 CisKKwlpbmRleHByX2l0ZW0gPSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRl cGFyc2VfY29udGV4dF9mb3IoZ2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJ aW5pdFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICov CisJKmluZGV4X2FtID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFt bmFtZSkpKTsKKworCS8qIEZldGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJv dXRpbmUgPSBHZXRJbmRleEFtUm91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICog T3V0cHV0IGluZGV4IGRlZmluaXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBz dXBwbGllZCBieQorCSAqIGNhbGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBp ZHhyZWMtPmluZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhy ZWMtPmluZGtleS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1 ZXNba2V5bm9dOworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247 CisJCU9pZAkJCWluZGNvbGw7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlv bkJ1Ziwga2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7 CisJCQkvKiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJ aW50MzIJCWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlk LCBhdHRudW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25C dWYsIHF1b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xs KGluZHJlbGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2Qs CisJCQkJCQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBF eHByZXNzaW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAq c3RyOworCisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRv byBmZXcgZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICop IGxmaXJzdChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMs IGluZGV4cHJfaXRlbSk7CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJl c3Npb24oaW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFy ZW5zIGlmIGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkg JiYgSXNBKGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5 KS0+ZnVuY2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmlu Z0luZm8oJmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4 cHJUeXBlKGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5k ZXhrZXkpOworCQl9CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJ CWluZGNvbGwgPSBpbmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlk KGluZGNvbGwpKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRF ICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJ LyogQWRkIHRoZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0 X29wY2xhc3NfbmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmlu aXRpb25CdWYpOworCisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJv dXRpbmUtPmFtY2Fub3JkZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJp bmcsIHJlcG9ydCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9O X0RFU0MpCisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwg IiBERVNDIik7CisJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNl ICovCisJCQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJ CQllbHNlCisJCQl7CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOwor CQkJfQorCQl9CisKKwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBu ZWVkIGFueXRoaW5nPyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsK KworCS8qIE91dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9w dGlvbnMoaW5kZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lk CQkJdGJsc3BjOworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsK KwkJaWYgKE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90 ZV9pZGVudGlmaWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkq dGFibGVzcGFjZSA9IE5VTEw7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYg YW55ICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJl ZCwgTlVMTCkpCisJeworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQli b29sCQlpc251bGw7CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0 IHN0cmluZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElO REVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVs bCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJp bmcocHJlZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5n KTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1 c2UgPQorCQkJZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7 CisJfQorCWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJ UmVsZWFzZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJ UmVsZWFzZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQg ZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisg KgorICogQ2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAq Lworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwg QXR0ck51bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykK K3sKKwlOb2RlICpkZWZ2YWw7CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29s dW1uX2RlZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRl ZnZhbCwgZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVz c2lvbiBmb3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykK KwkJKmV4cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOwor fQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lv biBmb3IgdGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBh cnRpdGlvbkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJv dW5kRGF0dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0g U2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAl dSIsCisJCQkgcmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQs IHR1cGxlLAorCQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAm aXNudWxsKTsKKworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwK KwkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5k RGF0dW0pKSwKKwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsK KworCXJldHVybiBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJl dHVybiB0aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25z dCBjaGFyICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0 Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFH R1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNl IE9CSkVDVF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExB VElPTjoKKwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoK KwkJCXJldHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0 dXJuICJEQVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlO IjsKKwkJY2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dF UiI7CisJCWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJ Y2FzZSBPQkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNh c2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9C SkVDVF9GT1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBP QkpFQ1RfRlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5E RVg6CisJCQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1 cm4gIkxBTkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxB UkdFIE9CSkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFM SVpFRCBWSUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1Ig Q0xBU1MiOworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOwor CQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJ Y2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9S T0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAi UlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2Fz ZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1Rf VEFCTEU6CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJ CXJldHVybiAiVEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4g IlRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19N QVBQSU5HOgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOwor CQkqLworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNI IERJQ1RJT05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBT RUFSQ0ggUEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVY VCBTRUFSQ0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBF IjsKKwkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkci OworCQljYXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJ fQorfQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJl cHJlc2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5 LCBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBv ZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQ R19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRD b21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOworCisJ Y29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29t bWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoY29tbWFuZCkpOworCisJ UEdfUkVUVVJOX05VTEwoKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0 bXQgKEFMVEVSIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUg cGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJl c2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlckZ1bmN0aW9uKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVy RnVuY3Rpb25TdG10ICpub2RlID0gKEFsdGVyRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlP YmpUcmVlCSAgICphbHRlckZ1bmM7CisJT2JqVHJlZQkgICAqc2lnbjsKKwlIZWFwVHVwbGUJcHJv Y1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJTGlzdAkgICAqcGFyYW1zID0gTklMOwor CUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKwor CS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEo UFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNU KHByb2NUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgRlVO Q1RJT04gJXtzaWduYXR1cmV9cyAle2RlZmluaXRpb246IH1zCisJICovCisJYWx0ZXJGdW5jID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIEZVTkNUSU9OIiwgMCk7CisKKwkvKgorCSAqIEFMVEVSIEZV TkNUSU9OIGRvZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28gd2UgY2FuIHVzZSBjYXRhbG9nCisJ ICogdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zv cm0tPnByb25hcmdzOyBpKyspCisJeworCQlPYmpUcmVlCSAgICp0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiJXt0eXBlfVQiLCAwKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICJ0 eXBlIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVz LnZhbHVlc1tpXSwgLTEpKTsKKwkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCX0KKworCXNpZ24gPSBuZXdfb2JqdHJlZSgiIik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzaWduLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2Jq ZWN0SWQpKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHNpZ24sICIoJXthcmd1bWVudHM6LCB9cyki LCBwYXJhbXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJGdW5jLCAiJXtzaWduYXR1 cmV9cyIsIHNpZ24pOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5hY3Rpb25zKQorCXsKKwkJRGVm RWxlbQkqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRt cG9iaiA9IE5VTEw7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInZvbGF0aWxpdHki KSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShzdHJWYWwoZGVmZWwtPmFy ZyksIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0cmljdCIp ID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGludFZhbChkZWZlbC0+YXJn KSA/CisJCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkJICJD QUxMRUQgT04gTlVMTCBJTlBVVCIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInNlY3VyaXR5IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoaW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJTRUNVUklUWSBERUZJTkVSIiA6ICJT RUNVUklUWSBJTlZPS0VSIiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZu YW1lLCAibGVha3Byb29mIikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo aW50VmFsKGRlZmVsLT5hcmcpID8KKwkJCQkJCQkJICJMRUFLUFJPT0YiIDogIk5PVCBMRUFLUFJP T0YiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJjb3N0Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAx LAorCQkJCQkJCQkgImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCSBkZWZHZXROdW1lcmlj KGRlZmVsKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAicm93cyIp ID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJST1dTIiwgMCk7CisJCQlp ZiAoZGVmR2V0TnVtZXJpYyhkZWZlbCkgPT0gMCkKKwkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfZmxvYXRfb2JqZWN0 KHRtcG9iaiwgIiV7cm93c31uIiwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJ CQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJn OworCQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKworCQkJ dG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5hbWUsIHZh bHVlKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdXBwb3J0Iikg PT0gMCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbMV07CisKKwkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCJTVVBQT1JUIik7CisKKwkJCUFzc2VydChwcm9jRm9ybS0+cHJvc3VwcG9ydCk7CisKKwkJ CS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUg aWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVu dCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXJndHlwZXNbMF0gPSBJTlRFUk5BTE9JRDsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1zIiwKKwkJCQkJCQkJIGdlbmVy YXRlX2Z1bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJ CU5JTCwgYXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJ CQlFWFBSX0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInBhcmFsbGVsIikgPT0gMCkKKwkJeworCQkJY2hhciAqZm10ID0gcHNwcmludGYoIlBBUkFM TEVMICVzIiwgc3RyVmFsKGRlZmVsLT5hcmcpKTsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKGZt dCk7CisJCX0KKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJGdW5jLCAiJXtkZWZpbml0 aW9uOiB9cyIsIGVsZW1zKTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKworCXJldHVy biBhbHRlckZ1bmM7Cit9CisKKy8qCisgKiBkZXBhcnNlIGFuIEFMVEVSIC4uLiBTRVQgU0NIRU1B IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPYmplY3RTY2hl bWFTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJCSAg T2JqZWN0QWRkcmVzcyBvbGRzY2hlbWEpCit7CisJQWx0ZXJPYmplY3RTY2hlbWFTdG10ICpub2Rl ID0gKEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqYWx0 ZXJTdG10OworCWNoYXIJICAgKmZtdDsKKwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpu ZXdzY2hlbWE7CisJY2hhcgkgICAqb2xkc2NobmFtZTsKKwljaGFyCSAgICppZGVudDsKKworCW5l d3NjaGVtYSA9IG5vZGUtPm5ld3NjaGVtYTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkg KgorCSAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkKKwkg Ki8KKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMiLCBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5v YmplY3RUeXBlKSk7CisJYWx0ZXJTdG10ID0gbmV3X29ianRyZWUoZm10KTsKKworCS8qCisJICog U2luY2UgdGhlIGNvbW1hbmQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2UgZnJvbSB0aGUgcG9pbnQg b2YgdmlldyBvZgorCSAqIGNhdGFsb2dzLCBnZXRPYmplY3RJZGVudGl0eSByZXR1cm5zIHRoZSBv YmplY3QgbmFtZSB3aXRoIHRoZSBhbHJlYWR5CisJICogY2hhbmdlZCBzY2hlbWEuICBUaGUgb3V0 cHV0IG9mIG91ciBkZXBhcnNpbmcgbXVzdCByZXR1cm4gdGhlIG9yaWdpbmFsCisJICogc2NoZW1h IG5hbWUgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0 eSBzdHJpbmcKKwkgKiBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJ ICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPworCSAq LworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRz Y2huYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKG9sZHNjaGVtYS5vYmplY3RJZCk7CisJaWYgKCFv bGRzY2huYW1lKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1h IHdpdGggT0lEICV1IiwKKwkJCSBvbGRzY2hlbWEub2JqZWN0SWQpOworCisJaWRlbnQgPSBwc3By aW50ZigiJXMlcyIsIHF1b3RlX2lkZW50aWZpZXIob2xkc2NobmFtZSksCisJCQkJCSBpZGVudGl0 eSArIHN0cmxlbihxdW90ZV9pZGVudGlmaWVyKG5ld3NjaGVtYSkpKTsKKwlhcHBlbmRfc3RyaW5n X29iamVjdChhbHRlclN0bXQsICIle2lkZW50aXR5fXMiLCBpZGVudCk7CisKKwlhcHBlbmRfc3Ry aW5nX29iamVjdChhbHRlclN0bXQsICJTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkiLCBuZXdzY2hl bWEpOworCisJcmV0dXJuIGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBHUkFOVC9S RVZPS0UgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9HcmFudFN0bXQo Q29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUludGVybmFsR3JhbnQgKmlzdG10OworCU9ialRy ZWUJICAgKmdyYW50U3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqb2JqdHlwZTsKKwlM aXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJY2xhc3NJZDsKKwlPYmpU cmVlCSAgICp0bXA7CisKKwlpc3RtdCA9IGNtZC0+ZC5ncmFudC5pc3RtdDsKKworCS8qCisJICog SWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgZnJvbSAiQUxMIC4uLiBJTiBTQ0hFTUEiIHRvIGJlIGdy YW50ZWQsIHRoZW4KKwkgKiB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZy4KKwkgKi8KKwlpZiAoaXN0 bXQtPm9iamVjdHMgPT0gTklMKQorCQlyZXR1cm4gTlVMTDsKKworCXN3aXRjaCAoaXN0bXQtPm9i anR5cGUpCisJeworCQljYXNlIE9CSkVDVF9DT0xVTU46CisJCWNhc2UgT0JKRUNUX1RBQkxFOgor CQkJb2JqdHlwZSA9ICJUQUJMRSI7CisJCQljbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJb2JqdHlwZSA9ICJTRVFVRU5D RSI7CisJCQljbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2Ug T0JKRUNUX0RPTUFJTjoKKwkJCW9ianR5cGUgPSAiRE9NQUlOIjsKKwkJCWNsYXNzSWQgPSBUeXBl UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQlvYmp0eXBlID0g IkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJCWNsYXNzSWQgPSBGb3JlaWduRGF0YVdyYXBwZXJS ZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJ b2JqdHlwZSA9ICJGT1JFSUdOIFNFUlZFUiI7CisJCQljbGFzc0lkID0gRm9yZWlnblNlcnZlclJl bGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCQlvYmp0eXBl ID0gIkZVTkNUSU9OIjsKKwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJl YWs7CisJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKKwkJCW9ianR5cGUgPSAiUFJPQ0VEVVJFIjsK KwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX1JPVVRJTkU6CisJCQlvYmp0eXBlID0gIlJPVVRJTkUiOworCQkJY2xhc3NJZCA9IFByb2Nl ZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlv Ymp0eXBlID0gIkxBTkdVQUdFIjsKKwkJCWNsYXNzSWQgPSBMYW5ndWFnZVJlbGF0aW9uSWQ7CisJ CQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlvYmp0eXBlID0gIkxBUkdF IE9CSkVDVCI7CisJCQljbGFzc0lkID0gTGFyZ2VPYmplY3RSZWxhdGlvbklkOworCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCW9ianR5cGUgPSAiU0NIRU1BIjsKKwkJCWNsYXNz SWQgPSBOYW1lc3BhY2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1RZUEU6 CisJCQlvYmp0eXBlID0gIlRZUEUiOworCQkJY2xhc3NJZCA9IFR5cGVSZWxhdGlvbklkOworCQkJ YnJlYWs7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNF OgorCQkJb2JqdHlwZSA9ICIiOworCQkJY2xhc3NJZCA9IEludmFsaWRPaWQ7CisJCQllbG9nKEVS Uk9SLCAiZ2xvYmFsIG9iamVjdHMgbm90IHN1cHBvcnRlZCIpOworCQkJYnJlYWs7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQiLCBpc3RtdC0+b2Jq dHlwZSk7CisJfQorCisJLyogR1JBTlQgVE8gb3IgUkVWT0tFIEZST00gKi8KKwlpZiAoaXN0bXQt PmlzX2dyYW50KQorCQlmbXQgPSBwc3ByaW50ZigiR1JBTlQiKTsKKwllbHNlCisJCWZtdCA9IHBz cHJpbnRmKCJSRVZPS0UiKTsKKworCWdyYW50U3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMCk7 CisKKwkvKiBidWlsZCBsaXN0IG9mIHByaXZpbGVnZXMgdG8gZ3JhbnQvcmV2b2tlICovCisJaWYg KGlzdG10LT5hbGxfcHJpdnMpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxMIFBSSVZJ TEVHRVMiLCAwKTsKKwkJbGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJfQorCWVsc2UKKwl7CisJCWxpc3QgPSBOSUw7CisKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX0lOU0VSVCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0 KCJJTlNFUlQiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1QpCisJCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiU0VMRUNUIikpOworCQlpZiAo aXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVBEQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYg QUNMX0RFTEVURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJE RUxFVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FURSkKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwkJaWYg KGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1JFRkVSRU5DRVMpCisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCgiUkVGRVJFTkNFUyIpKTsKKwkJaWYgKGlzdG10LT5wcml2 aWxlZ2VzICYgQUNMX1RSSUdHRVIpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5n X29iamVjdCgiVFJJR0dFUiIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNV VEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiRVhFQ1VURSIp KTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VTQUdFKQorCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlVTQUdFIikpOworCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfQ1JFQVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QoIkNSRUFURSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9U RU1QKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRFTVBPUkFS WSIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiQ09OTkVDVCIpKTsKKworCQlpZiAoIWlz dG10LT5pc19ncmFudCAmJiBpc3RtdC0+Z3JhbnRfb3B0aW9uKQorCQkJYXBwZW5kX3N0cmluZ19v YmplY3QoZ3JhbnRTdG10LCAiJXtncmFudF9vcHRpb259cyIsCisJCQkJCQkJCSBpc3RtdC0+Z3Jh bnRfb3B0aW9uID8gICJHUkFOVCBPUFRJT04gRk9SIiA6ICIiKTsKKworCQlpZiAoaXN0bXQtPmNv bF9wcml2cyAhPSBOSUwpCisJCXsKKwkJCUxpc3RDZWxsICAgKm9jZWxsOworCisJCQlmb3JlYWNo KG9jZWxsLCBpc3RtdC0+Y29sX3ByaXZzKQorCQkJeworCQkJCUFjY2Vzc1ByaXYgKnByaXYgPSBs Zmlyc3Qob2NlbGwpOworCQkJCUxpc3QgICAqY29scyA9IE5JTDsKKworCQkJCXRtcCA9IG5ld19v Ymp0cmVlKCIiKTsKKwkJCQlmb3JlYWNoKGNlbGwsIHByaXYtPmNvbHMpCisJCQkJeworCQkJCQlT dHJpbmcgKmNvbG5hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCQkJCWNvbHMg PSBsYXBwZW5kKGNvbHMsCisJCQkJCQkJCSAgIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChjb2xu YW1lKSkpOworCQkJCX0KKwkJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIigle2NvbHM6LCB9 cykiLCBjb2xzKTsKKworCQkJCWlmIChwcml2LT5wcml2X25hbWUgPT0gTlVMTCkKKwkJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2fXMiLCAiQUxMIFBSSVZJTEVHRVMi KTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJp dn1zIiwgcHJpdi0+cHJpdl9uYW1lKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3Qo Z3JhbnRTdG10LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7b2JqdHlwZX1zIiwgb2JqdHlwZSk7CisKKwkvKiB0YXJn ZXQgb2JqZWN0cy4gIFdlIHVzZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5J TDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQlvYmppZCA9IGxm aXJzdF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlhZGRyLmNsYXNzSWQg PSBjbGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIub2JqZWN0U3ViSWQg PSAwOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMiLCAxLAorCQkJCQkJ CSAgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJICAgZ2V0T2JqZWN0SWRlbnRp dHkoJmFkZHIsIGZhbHNlKSk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtwcml2 dGFyZ2V0OiwgfXMiLCBsaXN0KTsKKworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9m b3JtYXRfc3RyaW5nKGdyYW50U3RtdCwgIlRPIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyhncmFudFN0bXQsICJGUk9NIik7CisKKwkvKiBsaXN0IG9mIGdyYW50ZWVzICovCisJbGlz dCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJZ3Jh bnRlZSA9IGxmaXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3JvbGVf aWQoZ3JhbnRlZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnRTdG10LCAiJXtncmFudGVlczos IH1zIiwgbGlzdCk7CisKKwkvKiB0aGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZh cmlhYmxlIC4uLiAqLworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KGdyYW50U3RtdCwgIiV7Z3JhbnRfb3B0aW9ufXMiLAorCQkJCQkJCSBpc3RtdC0+Z3JhbnRf b3B0aW9uID8gICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50 b3JfdWlkKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisK KwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0 bXQtPmdyYW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNUKSwK KwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIGlzdG10LT5n cmFudG9yX3VpZCkpKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkg R0VUU1RSVUNUKHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3Jh bnRTdG10LCAiR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMiLCByb2xlbmFtZSk7CisJCVJlbGVhc2VT eXNDYWNoZShyb2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlzX2dyYW50KQorCXsKKwkJaWYg KGlzdG10LT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChncmFudFN0bXQsICIle2Nhc2NhZGV9cyIsICJDQVNDQURFIik7CisJCWVsc2UKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7Y2FzY2FkZX1zIiwgIiIpOworCX0KKworCXJl dHVybiBncmFudFN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10 IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJSGVhcFR1cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9kZSA9IChBbHRl ck9wZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyb3A7CisJRm9y bV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpjZWxsOworCUxpc3QJCSAgICps aXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKG9w clR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRFUiBPUEVSQVRP UiAle2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBTRVQKKwkgKiAo JXtlbGVtczosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BF UkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExF RlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisKKwkvKiBSSUdI VEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9yZWFjaChjZWxs LCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3RyY21wKGVsZW0t PmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJy ZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJQXNzZXJ0KHRt cG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtlbGVtczosIH1z KSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gYWx0ZXJv cDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZIEFERC9EUk9Q IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShD b2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJPcEZhbTsKKwlBbHRl ck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJl ZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAg ICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXNDYWNoZTEoT1BG QU1JTFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFtLmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJCQkgY21kLT5k Lm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkg R0VUU1RSVUNUKGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRF UiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkgQUREL0RST1AK KwkgKiAle2l0ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJCQkJCQkiVVNJTkcgJXthbW5h bWV9SSIsIDIsCisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkJImFtbmFtZSIsIE9ialR5 cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwg Y21kLT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZp cnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJLyoKKwkJICogVmVyYm9zZSBz eW50YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1U LCAle3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiT1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwg b3Blci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRoZSBEUk9QIGNh c2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJCXsKKwkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJIG9wZXItPm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Bl ci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRF UiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3RtdC0+aXNEcm9w KQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFSQ0giKTsKKwkJ CWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQkJdG1wb2JqMiA9IG5l d19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmoyLCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBvcGVy LT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJw b3NlfXMiLCB0bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9w ZmFtLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxs KTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJG VU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJCQkJCSAibnVt IiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0x KSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgZnVuY3Rpb24g bmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJ CWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJCUZvcm1f cGdfcHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJTGlzdAkgICAq YXJnbGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNo ZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBlcyA9IHByb2NG b3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnBy b25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQkJYXJnID0gbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmdsaXN0ID0gbGFw cGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKworCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkg IE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5n KHRtcG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd0eXBl czosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7 CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChzdG10LT5pc0Ry b3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7CisJZWxzZQor CQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKworCVJlbGVhc2VT eXNDYWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywg Tm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJTdG10OworCWNoYXIJCSAgICpm bXQ7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBPV05FUiBUTyAl JXtuZXdvd25lcn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmplY3RUeXBl KSk7CisKKwlvd25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVudGl0eSgmYWRk cmVzcywgZmFsc2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJICAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKKworCXJldHVybiBvd25l clN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAqCisgKiBHaXZl biBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXBvYmo7CisJ UmVsYXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxp c3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5j ZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJT ZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8q CisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEg Q1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkg Ki8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJ c2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29w ZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNl YXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElk KTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsK KworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisKKwl0bXBvYmog PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNl LAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWZv cmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9ucykKKwl7CisJ CURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9iakVsZW0gKm5l d2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQll bHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRl cGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2Ug aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0g ZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBp ZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBk ZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlm IChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFy c2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVt LT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfT3du ZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwkJZWxlbXMg PSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0 ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJU eXBlU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1v ZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0 eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQoT2lk IG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJUeXBlU2V0U3Rt dCA9IChBbHRlclR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSphbHRlclR5cGU7CisJTGlzdENl bGwgICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlICAgdHlwVHVwOwor CUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVP SUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo dHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0 aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVD VCh0eXBUdXApOworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUoIkFMVEVSIFRZUEUiKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50aXR5fUQgU0VUIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJIG9iamVjdElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10LT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3QocGwpOworCQlP YmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0b3JhZ2Ui KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UoYWx0ZXJUeXBlLCB0eXBG b3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYg KHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9UeXBlX1NlbmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfVHlwbW9k X0luKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0 eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KGFs dGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXpl IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKGFsdGVyVHlwZSwgdHlw Rm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRlclR5cGUsIHR5cEZvcm0pOwor CQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5k ZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJYXBw ZW5kX2FycmF5X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0aW9uOiB9cykiLCBlbGVtcyk7 CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBhbHRlclR5cGU7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBFIEFTKQorICoK KyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCBy ZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENv bXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21wb3NpdGU7CisJ SGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0eXBl cmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisK KwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5nIHJl bGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmplY3RJZCk7CisJ dHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5cGVyZWwgPSBy ZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJZHBj b250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0eXBl cmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJY29tcG9zaXRl ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmpl Y3QoY29tcG9zaXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwl0 YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlz dCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCAqLworCQkJCQkJ CQkJICB0cnVlKTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KGNvbXBvc2l0ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJdGFibGVf Y2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHlwdHVw KTsKKworCXJldHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFw VHVwbGUgICBjb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24g Y29uRm9ybTsKKwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7CisKKwljb252cmVsID0gdGFi bGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwljb25UdXAg PSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29udmVyc2lvbl9v aWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBPSUQgJXUiLCBv YmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNUUlVDVChjb25U dXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7ZGVmYXVs dH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MCisJ ICogRlJPTSAle2Z1bmN0aW9ufUQKKwkgKi8KKwljY1N0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRF Iik7CisKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29i amVjdChjY1N0bXQsICJkZWZhdWx0IiwKKwkJCQkJCSBjb25Gb3JtLT5jb25kZWZhdWx0ID8gIkRF RkFVTFQiIDogIiIpOworCisJdG1wT2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNvbkZv cm0tPmNvbm5hbWVzcGFjZSwgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY2NTdG10LCAiQ09OVkVSU0lPTiAle2lkZW50aXR5fUQiLCB0bXBPYmopOwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIkZPUiAle3NvdXJjZX1MIiwgKGNoYXIgKikK KwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29kaW5nKSk7CisJ YXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiVE8gJXtkZXN0fUwiLCAoY2hhciAqKQorCQkJ CQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9lbmNvZGluZykpOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkZST00gJXtmdW5jdGlvbn1EIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ CQkgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBjY1N0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl RW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBh bmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0cmVlOwor CU9ialRyZWUJICAgKmVudW10eXBlOworCUxpc3QJICAgKnZhbHVlczsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCisJZW51bXR5cGUgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFRZUEUiKTsKKwlhcHBlbmRf b2JqZWN0X29iamVjdChlbnVtdHlwZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJ ZCkpOworCisJdmFsdWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFscykKKwl7CisJ CVN0cmluZyAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJCXZhbHVlcyA9 IGxhcHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCX0KKwor CWFwcGVuZF9hcnJheV9vYmplY3QoZW51bXR5cGUsICJBUyBFTlVNICgle3ZhbHVlczosIH1MKSIs IHZhbHVlcyk7CisJcmV0dXJuIGVudW10eXBlOworfQorCisvKgorICogZGVwYXJzZV9DcmVhdGVF eHRlbnNpb25TdG10CisgKgkJZGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQKKyAqCisgKiBH aXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRlbnNpb25TdG10 ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uICAg IHBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24g ZXh0Rm9ybTsKKwlPYmpUcmVlCSAgICpleHRTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0 CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4 CisJICoKKwkgKiBDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 SSAle29wdGlvbnM6IH1zCisJICovCisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVu c2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0 SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJ ZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisK KwlleHRTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBFWFRFTlNJT04iKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkgbm9kZS0+ aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGV4dFN0bXQsICIle25hbWV9SSIsIG5vZGUtPmV4dG5hbWUpOworCisJLyogTGlzdCBv ZiBvcHRpb25zICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMp CisJeworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYg KHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQorCQl7CisJCQkvKiBza2lwIHRo aXMgb25lOyB3ZSBhZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLworCQkJY29udGludWU7 CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0g MCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04gJXt2ZXJzaW9ufUwiLCAy LAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJCQkJCQkJCSAi dmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHN0 cmNtcChvcHQtPmRlZm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBk ZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0 aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQgdGhlIFNDSEVNQSBvcHRpb24g Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2NoZW1hfUkiLAorCQkJCQkJIDIs ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJCQkgInNjaGVtYSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4dEZvcm0tPmV4dG5hbWVzcGFj ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogZG9uZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoZXh0U3RtdCwgIiV7b3B0aW9uczogfXMi LCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBleHRTdG10OworfQorCisvKgorICogSWYgYSBjb2x1bW4gbmFtZSBpcyBzcGVj aWZpZWQsIGFkZCBhbiBlbGVtZW50IGZvciBpdDsgb3RoZXJ3aXNlIGl0J3MgYQorICogdGFibGUt bGV2ZWwgb3B0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Zkd09wdGlvbnMo TGlzdCAqb3B0aW9ucywgY2hhciAqY29sbmFtZSkKK3sKKwlPYmpUcmVlCSAgICp0bXA7CisKKwlp ZiAoY29sbmFtZSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVt bn1JIiwKKwkJCQkJCQkgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIGNvbG5hbWUpOworCWVs c2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIk9QVElPTlMiLCAwKTsKKworCWlmIChvcHRpb25z ICE9IE5JTCkKKwl7CisJCUxpc3QJICAgKm9wdG91dCA9IE5JTDsKKwkJTGlzdENlbGwgICAqY2Vs bDsKKworCQlmb3JlYWNoKGNlbGwsIG9wdGlvbnMpCisJCXsKKwkJCURlZkVsZW0JICAgKmVsZW07 CisJCQlPYmpUcmVlCSAgICpvcHQ7CisKKwkJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisKKwkJCXN3aXRjaCAoZWxlbS0+ZGVmYWN0aW9uKQorCQkJeworCQkJCWNhc2UgREVGRUxF TV9VTlNQRUM6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfUkgJXt2YWx1ZX1M IiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwK KwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJn ID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERFRkVMRU1fU0VUOgor CQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgiU0VUICV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAor CQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJ CQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZH ZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUi IDogIkZBTFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9BREQ6CisJCQkJCW9w dCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJ CQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2 YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmlu ZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFM U0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0RST1A6CisJCQkJCW9wdCA9IG5l d19vYmp0cmVlX1ZBKCJEUk9QICV7bGFiZWx9SSIsIDEsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9i alR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0Ogor CQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBkZWYgYWN0aW9uICVkIiwgZWxlbS0+ZGVmYWN0aW9u KTsKKwkJCQkJb3B0ID0gTlVMTDsKKwkJCX0KKworCQkJb3B0b3V0ID0gbGFwcGVuZChvcHRvdXQs IG5ld19vYmplY3Rfb2JqZWN0KG9wdCkpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0 bXAsICIoJXtvcHRpb246ICx9cykiLCBvcHRvdXQpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIHRtcDsKK30KKworLyoK KyAqIGRlcGFyc2VfQ3JlYXRlRmR3U3RtdAorICogICBEZXBhcnNlIGEgQ3JlYXRlRmR3U3RtdCAo Q1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQg YW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LAorICogcmV0dXJuIGFuIE9ialRyZWUg cmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0NyZWF0ZUZkd1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ3JlYXRlRmR3U3RtdCAqbm9kZSA9IChDcmVhdGVGZHdTdG10ICopIHBhcnNldHJlZTsKKwlI ZWFwVHVwbGUJCWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07 CisJUmVsYXRpb24JcmVsOworCisJT2JqVHJlZQkgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQs IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05E QVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIgJXUiLCBvYmplY3RJZCk7CisKKwlmZHdG b3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOwor CisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQ RVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywg TmFtZVN0cihmZHdGb3JtLT5mZHduYW1lKSk7CisKKwkvKiBhZGQgSEFORExFUiBjbGF1c2UgKi8K KwlpZiAoZmR3Rm9ybS0+ZmR3aGFuZGxlciA9PSBJbnZhbGlkT2lkKQorCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiTk8gSEFORExFUiIsIDApOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAiaGFuZGxlciIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCX0KKwlh cHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtoYW5kbGVyfXMiLCB0bXApOworCisJ LyogYWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09 IEludmFsaWRPaWQpCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBWQUxJREFUT1IiLCAwKTsK KwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJl fUQiLCAxLAorCQkJCQkJCSAidmFsaWRhdG9yIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCisJLyogYWRkIGFuIE9QVElPTlMg Y2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtn ZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRhYmxlX2Nsb3NlKHJl bCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAq IGRlcGFyc2VfQWx0ZXJGZHdTdG10CisgKiAgRGVwYXJzZSBhbiBBbHRlckZkd1N0bXQgKEFMVEVS IEZPUkVJR04gREFUQSBXUkFQUEVSKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gdGhlCisgKiBKU09OIGJsb2IgcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0FsdGVyRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRl ckZkd1N0bXQgKm5vZGUgPSAoQWx0ZXJGZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJ CWZkd1R1cDsKKwlGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyIGZkd0Zvcm07CisJUmVsYXRp b24JcmVsOworCU9ialRyZWUJICAgKmFsdGVyU3RtdDsKKwlMaXN0CSAgICpmZHdfb3B0aW9ucyA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmVsID0gdGFibGVfb3BlbihGb3JlaWduRGF0 YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9IFNlYXJj aFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVyICV1Iiwg b2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBH RVRTVFJVQ1QoZmR3VHVwKTsKKworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBG T1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJCSAgICJpZGVudGl0 eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyoKKwkg KiBJdGVyYXRlIHRocm91Z2ggb3B0aW9ucywgdG8gc2VlIHdoYXQgY2hhbmdlZCwgYnV0IHVzZSBj YXRhbG9nIGFzIGJhc2lzCisJICogZm9yIG5ldyB2YWx1ZXMuCisJICovCisJZm9yZWFjaChjZWxs LCBub2RlLT5mdW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtCSAgICplbGVtOworCQlPYmpUcmVl CSAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQlpZiAocGdfc3RyY2FzZWNt cChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBIQU5ETEVS IGNsYXVzZSAqLworCQkJaWYgKGZkd0Zvcm0tPmZkd2hhbmRsZXIgPT0gSW52YWxpZE9pZCkKKwkJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTk8gSEFORExFUiIsIDApOworCQkJZWxzZQorCQkJewor CQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJ CQkJCQkJICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5k bGVyKSk7CisJCQl9CisJCQlmZHdfb3B0aW9ucyA9IGxhcHBlbmQoZmR3X29wdGlvbnMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZWxlbS0+ ZGVmbmFtZSwgInZhbGlkYXRvciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBWQUxJREFUT1IgY2xh dXNlICovCisJCQlpZiAoZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yID09IEludmFsaWRPaWQpCisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIk5PIFZBTElEQVRPUiIsIDApOworCQkJZWxzZQorCQkJewor CQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIsIDEsCisJ CQkJCQkJCQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3Zh bGlkYXRvcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBIQU5ETEVSL1ZBTElE QVRPUiBpZiBzcGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyU3RtdCwgIiV7 ZmR3X29wdGlvbnM6IH1zIiwgZmR3X29wdGlvbnMpOworCisKKwkvKiBhZGQgYW4gT1BUSU9OUyBj bGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU3RtdCwgIiV7Z2Vu ZXJpY19vcHRpb25zfUQiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25z LCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWws IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGFsdGVyU3RtdDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDUkVBVEUgVFlQRSBBUyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIHR5 cGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZQkgICAqcmFuZ2U7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJ ICAgKmRlZmluaXRpb24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFuZ2U7CisJSGVhcFR1cGxlCXJh bmdlVHVwOworCUZvcm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNjYW5LZXlEYXRhIGtleVsxXTsK KwlTeXNTY2FuRGVzYyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJsZV9vcGVuKFJhbmdlUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFu dW1fcGdfcmFuZ2Vfcm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVR LAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9i ZWdpbnNjYW4ocGdfcmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVM TCwgMSwga2V5KTsKKworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcmFuZ2Ugd2l0aCB0eXBlIG9pZCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJ cmFuZ2VGb3JtID0gKEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChyYW5nZVR1cCk7CisKKwlyYW5n ZSA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSIsIDApOworCXRtcCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJhbmdlLCAiJXtpZGVudGl0eX1EIEFTIFJBTkdFIiwgdG1wKTsKKworCS8qIFNV QlRZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3VidHlwZSk7CisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlNVQlRZUEUgPSAle3R5cGV9RCIsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwg dG1wKTsKKwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdl Rm9ybS0+cm5nc3Vib3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvckNsYXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3Vi b3BjKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFz c31EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJvcGNs YXNzIiwKKwkJCQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0 aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisK KwkvKiBDT0xMQVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2NvbGxhdGlv bikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKTsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLAorCQkJCQkJCSAyLAor CQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJCQkJICJj b2xsYXRpb24iLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChk ZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwg Ki8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkgIHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKTsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IkNBTk9OSUNBTCA9ICV7Y2Fub25pY2FsfUQiLAorCQkJCQkJCSAyLAorCQkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBPYmpU eXBlT2JqZWN0LCB0bXApOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBFX0RJRkYgKi8KKwlpZiAoT2lk SXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJICByYW5nZUZv cm0tPnJuZ3N1YmRpZmYpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZGID0g JXtzdWJ0eXBlX2RpZmZ9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAic3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVP YmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmFuZ2UsICIoJXtk ZWZpbml0aW9uOiwgfXMpIiwgZGVmaW5pdGlvbik7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4p OworCXRhYmxlX2Nsb3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBy YW5nZTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3RtdC4KKyAqCisgKiBHaXZl biBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQWx0ZXJFbnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCSAgICphbHRlckVudW07CisKKwlhbHRlckVudW0gPQluZXdfb2JqdHJlZV9W QSgiQUxURVIgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRW51bSwgIiV7 aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJaWYgKCFub2RlLT5vbGRWYWwp CisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckVudW0sICJBREQgVkFMVUUiKTsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJ CQkJCW5vZGUtPnNraXBJZk5ld1ZhbEV4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICIle3ZhbHVlfUwiLCBub2RlLT5uZXdW YWwpOworCisJCWlmIChub2RlLT5uZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJFbnVtLCAiJXthZnRlcl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJCW5vZGUt Pm5ld1ZhbElzQWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJFbnVtLCAiJXtuZWlnaGJvdXJ9TCIsIG5vZGUtPm5ld1ZhbE5laWdoYm9yKTsK KwkJfQorCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVudW0sICJS RU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPIiwKKwkJCQkJCQkgbm9kZS0+b2xkVmFsKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJFbnVtLCAiJXtuZXd2YWx1ZX1MIiwKKwkJCQkJCQkgbm9k ZS0+bmV3VmFsKTsKKwl9CisKKwlyZXR1cm4gYWx0ZXJFbnVtOworfQorCisvKgorICogRGVwYXJz ZSBBTFRFUiBFWFRFTlNJT04gLi4gVVBEQVRFIFRPIFZFUlNJT04KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQWx0ZXJFeHRlbnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3Rt dCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24gICAgcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZSAg IGV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUJICAgKnN0bXQ7 CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBn X2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCAgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9 IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlzdG10ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUQgVVBEQVRFIiwgMSwKKwkJCQkJ CSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKGV4dEZvcm0tPmV4dG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZXh0 Rm9ybS0+ZXh0bmFtZSkpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJ CURlZkVsZW0gKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21w KG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29i anRyZWVfVkEoIlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZH ZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9u ICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIl e29wdGlvbnM6IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIEFMVEVSIEVYVEVOU0lP TiBleHQgQUREL0RST1Agb2JqZWN0CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJFeHRlbnNpb25Db250ZW50c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJ CQkJCQkJCSAgIE9iamVjdEFkZHJlc3Mgb2JqZWN0QWRkcmVzcykKK3sKKwlBbHRlckV4dGVuc2lv bkNvbnRlbnRzU3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqKSBwYXJz ZXRyZWU7CisJT2JqVHJlZQkgICAqc3RtdDsKKwljaGFyCSAgICpmbXQ7CisKKwlBc3NlcnQobm9k ZS0+YWN0aW9uID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAtMSk7CisKKwlmbXQgPSBwc3ByaW50 ZigiQUxURVIgRVhURU5TSU9OICUle2V4dGlkZW50aXR5fUkgJXMgJXMgJSV7b2JqaWRlbnRpdHl9 cyIsCisJCQkJICAgbm9kZS0+YWN0aW9uID09ICsxID8gIkFERCIgOiAiRFJPUCIsCisJCQkJICAg c3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSkpOworCisJc3RtdCA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMiwgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+ ZXh0bmFtZSwKKwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAg Z2V0T2JqZWN0SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNlKSk7CisKKwlyZXR1cm4gc3Rt dDsKK30KKy8qCisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdpdmVuIGEg c2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4g T2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENyZWF0ZUNhc3RTdG10ICop IHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBsZQljYXN0VHVwOworCUZv cm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpjcmVhdGVDYXN0OworCWNoYXIJICAg KmNvbnRleHQ7CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25JZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXN0cmVs LCBBbnVtX3BnX2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNh c3RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY2FzdCB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3QpIEdFVFNUUlVD VChjYXN0VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBD QVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219cyAle2Nv bnRleHR9cworCSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENBU1Qg KCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsCisJCQkJCQkJCTIsICJzb3VyY2V0 eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZv cm0tPmNhc3Rzb3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdldHR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwgLTEp KTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2Fz dCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOworCWVsc2UgaWYgKG5vZGUtPmZ1bmMg PT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNt fXMiLCAiV0lUSE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJCU9ialRyZWUJICAgKnRtcG9i ajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1f cGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFBST0NPSUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdf cHJvYykgR0VUU1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJ YXBwZW5kU3RyaW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQlxdW90ZV9xdWFsaWZpZWRfaWRl bnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJ CQkJCQkJCQkgICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBp IDwgZnVuY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZm dW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnByb2Fy Z3R5cGVzLnZhbHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsK KworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlv bn1zIiwgMSwKKwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0 YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwg dG1wb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNoIChu b2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRleHQg PSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVOVDoK KwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lP Tl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ ZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQpOwor CQkJcmV0dXJuIE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBwZW5kX3N0 cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1zIiwgY29udGV4dCk7CisKKwl0YWJs ZV9jbG9zZShjYXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZUNhc3Q7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCBy ZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK3sKKwlPYmpUcmVlCSAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVlCSAgICp0 bXBvYmo7CisJT2JqVHJlZQkgICAqdG1wb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVs YXRpb24JcmVsOworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsK KwljaGFyCSAgICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUg PSBmYWxzZTsKKwlMaXN0CSAgICpleHBycyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0g U0NUX0FsdGVyVGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0ZXJUYWJs ZS5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRl eHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQtPmQuYWx0 ZXJUYWJsZS5vYmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsK KwkJY2FzZSBSRUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEU6CisJCQlyZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5E RVg6CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5E RVgiOworCQkJYnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVX IjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBl ID0gIlRZUEUiOworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRf Rk9SRUlHTl9UQUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsK KworCQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVs dDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+ cmVsa2luZCk7CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIg cmVsdHlwZSAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMKKwkgKi8KKwlmbXRzdHIgPSBwc3By aW50ZigiQUxURVIgJXMiLCByZWx0eXBlKTsKKwlhbHRlclRhYmxlU3RtdCA9IG5ld19vYmp0cmVl KGZtdHN0cik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle2lkZW50aXR5fUQi LCB0bXBvYmopOworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQor CXsKKwkJQ29sbGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmly c3QoY2VsbCk7CisJCUFsdGVyVGFibGVDbWQJKnN1YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1 Yi0+cGFyc2V0cmVlOworCQlPYmpUcmVlCSAgICp0cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21k LCBBbHRlclRhYmxlQ21kKSk7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJ CWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJY2FzZSBBVF9BZGRDb2x1bW5SZWN1cnNlOgorCQkJCS8q IFhYWCBuZWVkIHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29s dW1uRGVmKHJlbCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBz dWJjbWQtPmRlZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUREICVz ICUle2RlZmluaXRpb259cyIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09M VU1OIik7CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJICJkZWZpbml0 aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf QWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJ CVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVj dElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlp c3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5p c2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Bl bihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICog VmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkg JXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7 ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkiLCAyLAorCQkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJ CQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJP aWQpKTsKKworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbnN0cmFpbnRf dHlwZX1zIiwgaXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAi Tk9UIERFRkVSUkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiVVNJ TkcgSU5ERVggJXtpbmRleF9uYW1lfUkiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShpZHgpKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZlcnJh YmxlfXMiLCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJO T1QgREVGRVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lu aXRfZGVmZXJyZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQgPworCQkJCQkJCQkJCSAiSU5JVElB TExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVs YXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFkZENvbnN0cmFpbnQ6CisJCQlj YXNlIEFUX1JlQWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6CisJCQkJ LyogU3VidHlwZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBo ZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8q IENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0g TlVMTCkKKwkJCQl7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAq ZHBjb250ZXh0OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRu bzsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJz ZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCisJCQkJCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkp OworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQo cmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBH RVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZh dWx0KHJlbCwgYXR0bm8sIGRwY29udGV4dCwgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUo YXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51 bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRy b3Agbm90IG51bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1w b2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVM TCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwK KwkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBz dWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ ZGVmLCBJbnRlZ2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtz dGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9ialR5cGVJ bnRlZ2VyLAorCQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJ CQkJCWVsc2UKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAor CQkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJ CQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJ CQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKElu dGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNl IEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9D b2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRT dG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAl e3N0b3JhZ2V9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0 b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUs CisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgo U3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0 Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBDT01Q UkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkgImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAiY29tcHJlc3Np b25fbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBz dWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb2x1bW5SZWN1 cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJEUk9Q ICVzICUle2NvbHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xV TU4iKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkg InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJICJjb2x1bW4i LCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJl ZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1 YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2Fz Y2FkZX1zIiwgdG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRl eDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJ CQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hh ciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3Vi Y21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21k LT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisK KwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJ CWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9p ZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5hbHRlclRhYmxl Lm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZpbml0aW9uIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9z aW1wbGUoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWlu dDoKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJCQkvKiBYWFgg bmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQlj b25zdHJPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJ CQkJSGVhcFR1cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29u c3RyOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJCQkJ Y29uc3RyID0gIGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAo IWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXND YWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlp ZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJp bjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUg Zm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJ CQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJ CQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENT dHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUo Y29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJ CQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJ TlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0 cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmaW5p dGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2Nv bW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJPaWQgPSBzdWIt PmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWludCAqKSBz dWJjbWQtPmRlZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVkLCBzaWxl bnRseSBza2lwIGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQorCQkJCQkJ YnJlYWs7CisKKwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1z ICV7aW5pdF9kZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2Jq VHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAi ZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVycmFibGUgPyAi REVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5pdF9kZWZlcnJl ZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ICJJTklUSUFM TFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToKKwkJCWNhc2Ug QVRfVmFsaWRhdGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJ REFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAiY29uc3RyYWlu dCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfRHJvcENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29uc3RyYWlu dH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJCQkJewor CQkJCQlUdXBsZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJCQkJRm9y bV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKworCQkJCQlhdHQg PSAmKHR1cGRlc2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJ ZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENv bHVtbkRlZikpOworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJ CQkJCSAqIENvbXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRB IFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2Fz Y2FkZX1zCisJCQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2Nv bHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMg Q09MVU1OICV7dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVS ICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5cGUgPyAiQVRU UklCVVRFIiA6ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRz dHIsIDIsCisJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0 eXBlIiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJCS8qIEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wb2JqLCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpKTsKKwor CQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcG9iajIg PSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNv bGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCQkJCQljb2xs bmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVs c2UKKwkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsK KwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcG9i ajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVTSU5HIGNs YXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIElm IHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJCQkJCQkg KiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJCQkgKiBy ZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQorCQkJCQkJ ICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIp OworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0dW0JZGVw YXJzZWQ7CisJCQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMgPSBsYXBwZW5k KGV4cHJzLCBkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0gbm9kZVRvU3Ry aW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rp b25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1 bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJ CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9ufXMiLAorCQkJ CQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0KKwkJCQkJ CWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxz ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5nfXMiLCB0bXBv YmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRo ZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXBv YmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9y ICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nh c2NhZGV9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisj aWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJ CQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJ CQkJCQkJIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRf Q2hhbmdlT3duZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3du ZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVy IiwKKwkJCQkJCQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfcm9s ZXNwZWNfbmFtZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfQ2x1c3Rlck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7 aW5kZXh9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBv biIsCisJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExP R0dFRCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcG9iaiA9 IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Ryb3BPaWRzOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURT IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRz Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUki LCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9k IiwKKwkJCQkJCQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJ CQkgInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVsT3B0 aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgK KwkJCQkJCQkJCSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJF TkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVB bHdheXNUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRS SUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg ImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJl cGxpY2FUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBU UklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgcmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJs ZVRyaWc6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiAle3Ry aWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0 cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRElTQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUg VFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRy aWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNF UiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2Vy IHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFC TEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJl cGxpY2FSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBS VUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFi bGUgcmVwbGljYSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAi cnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfQWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5IRVJJ VCAle3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJpbmhl cml0IiwKKwkJCQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Ecm9wSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAl e3BhcmVudH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGlu aGVyaXQiLAorCQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0FkZE9mOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9VCIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJCQkJ CSAidHlwZV9vZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUoc3ViLT5hZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Ryb3BPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIlJFUExJQ0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInJlcGxpY2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3Rt dCAqKSBzdWJjbWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJ Q0FfSURFTlRJVFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwg IiV7aWRlbnR9cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNB X0lERU5USVRZX0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lk ZW50fXMiLCAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElU WV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1z IiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlf SU5ERVg6CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5k ZXh9SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CQkJICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9iajIpOworCQkJ CQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1Nl Y3VyaXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVMIFNF Q1VSSVRZIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcm93 IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3Vy aXR5OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBTRUNV UklUWSIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSByb3cg c2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9H ZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikg c3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0F0 dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNIIFBBUlRJ VElPTiAle3BhcnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2Jq ZWN0SWQpKTsKKworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJ VElPTkVEX1RBQkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3BhcnRp dGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWIt PmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQ YXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04g JXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElk KSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9u X2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5v YmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7 CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9i alRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRlZiAqKSBz dWJjbWQtPmRlZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVt KFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0g Z2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7 CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYt PmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi aWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlj YXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJCQkJCWNo YXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJCQlBdHRyTnVt YmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQor CQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0 aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVm ZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlk KHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVu Y2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBk ZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCisJCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsK KworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURF TlRJVFkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRp dHkiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAor CQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFs dGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVh azsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxURVIg VEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2UgSXQn cyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGljaCBj YXNlIHRoZXNlIG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkg KiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUg dGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hl ZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFs bG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQKKwkJICogaW4g dGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci1zaWRl LgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIGV4cHJz KSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2b2xh dGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoKKwkJICogQ2xl YW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRpbGUK KwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9IE5J TDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAobGlz dF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJyYXlf b2JqZWN0KGFsdGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsKKworCXJl dHVybiBhbHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBU QUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBh IHJlZ3VsYXIgKG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29u c3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGlu IHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJh aW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNl IG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBj b21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAq KmV4cHJzKQoreworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJ T2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0 clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQz MgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3aXRob3V0IGxv Y2FsIGRlZmluaXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBYWFggbWF5YmUg aXQgaXMgdXNlZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9yIHNvbWUg c3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJ YXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBu b3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJ CQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1 dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwg YXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9u KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JICV7Y29sdHlw ZX1UICV7Y29tcHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkgKiAle2NvbGxh dGlvbn1zCisJICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7Y29sdHlw ZX1UIiwgMywKKwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJ CSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJCSJjb2x0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBpZCwgdHlw bW9kKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09N UFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+Y29tcHJlc3Np b24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2NvbXByZXNz aW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2NvbXByZXNzaW9u fXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAo T2lkSXNWYWxpZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJ Y29sbG5hbWUgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y29sdW1uLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7 CisJCU9pZAlzZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBhIE5PVCBO VUxMIGRlY2xhcmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ1c3QK KwkJICogcGdfYXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJpdCBpcyBh bHNvIHNldCB3aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBhbmQgd2UgbXVz dCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxl c3MgZXhwbGljaXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBs aXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRldGVybWluZQor CQkgKiB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZvcnR1bmF0ZWx5 LCBOT1QgTlVMTCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkg KgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwg aWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdf bm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJ CXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsK KworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQlzYXdfbm90 bnVsbCA9IHRydWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90X251bGwp CisJCQlzYXdfbm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1u LCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIp OworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+ YXR0aGFzZGVmKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9u R2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJ ICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAi JXtkZWZhdWx0fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1 bW4sICIle2RlZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJ CWlmIChjb2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRfYXR0bnVtKHJl bGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNl KHJlbGlkLCBhdHRubywgZmFsc2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJzZV9Db2x1bW5J ZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQlhcHBlbmRf b2JqZWN0X29iamVjdChjb2x1bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wb2JqKTsKKwor CQkvKiBHRU5FUkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0gbmV3X29ianRy ZWUoIkdFTkVSQVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFU VFJJQlVURV9HRU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRl ZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51 bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3RyKTsKKwkJfQor CQllbHNlCisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9jb2x1bW59cyIs IHRtcG9iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNv bHVtbjsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBPRiBkZXBhcnNp bmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxl IGNyZWF0aW9uLglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVj YXVzZSB3ZSBkb24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xs YXRpb24sIG9yIGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUg Y29sdW1uIGlzIGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBh cnNlX0NvbHVtbkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVy ZS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRp b24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7CisJT2Jq VHJlZQkqY29sdW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBS ZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3Bn X2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9p ZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xu YW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJj b3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAl dSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19h dHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChy ZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29s bGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAg QXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3Ry YWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICog KFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3 X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJ eworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisK KwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25v dG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYm ICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAl e25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorCSAqLworCWNv bHVtbiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAyLAorCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1u LCAiJXtub3RfbnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9ybS0+YXR0 aGFzZGVmKQorCXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29s dW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkgIGRwY29u dGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0 fXMiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7ZGVmYXVs dH1zIiwgdG1wb2JqKTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBw b3J0ZWQgb24gdHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKworCVJlbGVhc2VT eXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBkZWZpbml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJv b2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKmlk ZW50b2JqOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVw bGUJc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVu Y2VfZGF0YSBzZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsK KworCWNvbHVtbiA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxpZChzZXFyZWxp ZCkpCisJeworCQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIsIGZhbHNlKTsK KwkJcmV0dXJuIGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZt dCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxz ZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1z IEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlkZW50Zm10KTsK KworCWlmIChpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxzZSBpZiAoaWRl bnRpdHkgPT0gIEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdChpZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmopOworCisJcmVs ID0gdGFibGVfb3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNl cXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChG b3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2Vx dWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNlcWZvcm0sIGFs dGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShO VUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfSW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNlcWZvcm0sIGFs dGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1 ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywg ZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNlcWRhdGEpKTsK KwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYg KGFsdGVyX3RhYmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7c2VxX2RlZmlu aXRpb246IH1zIiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4s ICIoICV7c2VxX2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWws IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIC4uLiBB TFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJ ICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpjb2xzZXQ7 CisJY2hhcgkgICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFU X1Jlc2V0T3B0aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYg KGlzX3Jlc2V0KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgIjsKKwll bHNlCisJCWZtdCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKworCWNvbHNldCA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSk7CisKKwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVm RWxlbQkgICAqZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAq KSBsZmlyc3QoY2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7 CisJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKwor CUFzc2VydChzZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigle29wdGlvbnM6 LCB9cykiLCBzZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBDUkVBVEUgRE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJz ZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZURvbWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVl CSAgICpjcmVhdGVEb21haW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBUdXBsZQl0eXBU dXA7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisKKwl0 eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190 eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAl e2NvbnN0cmFpbnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRlRG9tYWluID0g bmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9t YWluLAorCQkJCQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICIle3R5cGV9 VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5cGUsIHR5 cEZvcm0tPnR5cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwpCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJOT1QgTlVMTCIp OworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVs bH1zIiwgIiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUwsIEludmFs aWRPaWQsIG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVt ZW50czosIH1zIiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBjb25zdHJh aW50cyk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb25zdHJhaW50 c31zIiwgdG1wb2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxu YW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmop OworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRlRG9tYWluOwor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9O KQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlv bihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQg Km5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpj cmVhdGVGdW5jOworCU9ialRyZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hh cgkgICAqc291cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlz dAkgICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9 IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2Vs bCAgICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdf cHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsK KwlPaWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJ CWk7CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlib29sCQlpc251bGw7CisJYm9v bAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAg PSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBm dW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5n IHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lE LCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdpdGggT0lE ICV1IiwKKwkJCSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5n dWFnZSkgR0VUU1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZh bHVlcyBmb3IgcHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVp bmcgZWl0aGVyIE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVl LgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJ CQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJ ZWxvZyhFUlJPUiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0 SWQpOworCXNvdXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0 ZXJtaW5lIGEgdXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4s ICZpc251bGwpOworCWlmIChpc251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxzZQorCXsKKwkJ cHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0g PT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOwor CX0KKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxh Y2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zCisJICog TEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9s YXRpbGl0eX1zCisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7c3RyaWN0 fXMgJXtzZWN1cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9 cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJvbH1MCisJICov CisJY3JlYXRlRnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFj ZSA/ICJPUiBSRVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1 bWVudHMgYXJyYXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9u J3MgcGdfcHJvYyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3Qg bGVuZ3RoLAorCSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4g ZXh0cmFjdCB0aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2Ug bmVlZCB0byBkZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBiaXQgbW9yZSBp bnZvbHZlZC4KKwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChub2RlLT5wYXJh bWV0ZXJzKSAqIHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVy cykgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJeworCQlib29sCWlzbnVsbDsKKwkJRGF0dW0JYWxs dHlwZXM7CisJCURhdHVtICAqdmFsdWVzOworCQlib29sICAgKm51bGxzOworCQlpbnQJCW5lbGVt czsKKworCQlhbGx0eXBlcyA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJ CQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYWxsYXJndHlwZXMsICZpc251bGwpOworCQlpZiAoaXNu dWxsKQorCQkJZWxvZyhFUlJPUiwgIk5VTEwgcHJvYWxsYXJndHlwZXMsIGJ1dCBtb3JlIHBhcmFt ZXRlcnMgdGhhbiBhcmdzIik7CisJCWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBl UChhbGx0eXBlcyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1 ZXMsICZudWxscywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMgIT0gbGlzdF9sZW5ndGgobm9kZS0+ cGFyYW1ldGVycykpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMi KTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKysp CisJCQl0eXBhcnJheVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0g MDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQkgdHlwYXJyYXlb aV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCX0KKworCS8qCisJICogSWYg dGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3ZSByZWFkIHRoZSBkZXBhcnNlZCBl eHByZXNzaW9uIGFzCisJICogYSBsaXN0IHNvIHRoYXQgd2UgY2FuIGF0dGFjaCB0aGVtIHRvIGVh Y2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwg cHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYXJnZGVmYXVsdHMsICZpc251bGwp OworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBGdW5jdGlvbkdldERlZmF1bHRzKERh dHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0gbGlzdF9oZWFkKGRlZmF1bHRzKTsK Kwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJCWN1cmRlZiA9IE5VTEw7CisJfQor CisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBwYXJzZXRy ZWUgdG8gY3JlYXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0g TklMOworCXR5cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsK KwkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJz dChjZWxsKTsKKwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisJCU9ialRyZWUJICAgKmRlZmF1bHR2 YWw7CisJCU9ialRyZWUJICAgKm5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJh bWV0ZXIgaW5kaWNhdGVzIGVuZCBvZiBpbnB1dCBhcmd1bWVudHM7IHRoZQorCQkgKiBmb2xsb3dp bmcgcGFyYW1ldGVycyBhcmUgcGFydCBvZiB0aGUgcmV0dXJuIHR5cGUuICBXZSBpZ25vcmUgdGhl bQorCQkgKiBoZXJlLCBidXQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0 aGUgbGlzdCBzbyB0aGF0CisJCSAqIHdlIGNhbiBlYXNpbHkgcHJvZHVjZSB0aGUgcmV0dXJuIHR5 cGUgYmVsb3cuCisJCSAqLworCQlpZiAocGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9UQUJMRSkK KwkJeworCQkJdGFibGVfcGFyYW1zID0gY2VsbDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJ ICogVmVyYm9zZSBzeW50YXggZm9yIHBhcmFtYXRlcjogJXttb2RlfXMgJXtuYW1lfXMgJXt0eXBl fVQgJXtkZWZhdWx0fXMKKwkJICoKKwkJICogTm90ZSB0aGF0ICV7bmFtZX1zIGlzIGEgc3RyaW5n IGhlcmUsIG5vdCBhbiBpZGVudGlmaWVyOyB0aGUgcmVhc29uCisJCSAqIGZvciB0aGlzIGlzIHRo YXQgYW4gYWJzZW50IHBhcmFtZXRlciBuYW1lIG11c3QgcHJvZHVjZSBhbiBlbXB0eQorCQkgKiBz dHJpbmcsIG5vdCAiIiwgd2hpY2ggaXMgd2hhdCB3b3VsZCBoYXBwZW4gaWYgd2Ugd2VyZSB0byB1 c2UKKwkJICogJXtuYW1lfUkgaGVyZS4gIFNvIHdlIGFkZCBhbm90aGVyIGxldmVsIG9mIGluZGly ZWN0aW9uIHRvIGFsbG93IHVzCisJCSAqIHRvIGluamVjdCBhICJwcmVzZW50IiBwYXJhbWV0ZXIu CisJCSAqLworCQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocGFyYW1vYmosICIle21vZGV9cyIsCisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNf UEFSQU1fSU4gPyAiSU4iIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQg PyAiT1VUIiA6CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQgPyAiSU5P VVQiIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ICJWQVJJ QURJQyIgOgorCQkJCQkJCSAiSU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3VwcHJl c3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisKKwkJbmFtZSA9IG5ld19vYmp0cmVlKCIi KTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7bmFtZX1JIiwKKwkJCQkJCQkgcGFy YW0tPm5hbWUgPyBwYXJhbS0+bmFtZSA6ICJOVUxMIik7CisKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KG5hbWUsICJwcmVzZW50IiwKKwkJCQkJCSAgIHBhcmFtLT5uYW1lID8gdHJ1ZSA6IGZhbHNlKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1zIiwgbmFtZSk7CisK KwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQb2ludGVySXNW YWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIgKmV4cHI7CisKKwkJCWlmIChjdXJk ZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hv cnQiKTsKKwkJCWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9cyIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVm YXVsdHMsIGN1cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KGRlZmF1 bHR2YWwsICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFt b2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0 eXBudW0rK10sIC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle2Rl ZmF1bHR9cyIsIGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdf b2JqZWN0X29iamVjdChwYXJhbW9iaikpOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KCIle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgIG9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBv YmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3VtZW50czosIH1z IiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlpc2Z1 bmN0aW9uID0gKHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsKKworCWlm IChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiRlVOQ1RJ T04gJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVGdW5jLCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBvYmopOworCisJLyoK KwkgKiBBIHJldHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBb U0VUT0ZdIHNvbWVfdHlwZSwgb3IKKwkgKiBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2Fu IHRlbGwgdGhlIHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3IGEKKwkgKiB0YWJsZSBwYXJhbSBh Ym92ZSB3aGlsZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVf cGFyYW1zID09IE5VTEwpCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJ CQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7c2V0b2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9y ZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e3JldHR5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9y ZXR0eXBlLCAtMSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9IE5JTDsK KwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlRB QkxFIiwgMSwKKwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInRhYmxlIik7 CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0gbG5leHQobm9k ZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25QYXJhbWV0ZXIg KnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtb2JqID0gbmV3X29ianRy ZWUoIiIpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFyYW1vYmosICIle25hbWV9SSIsIHBh cmFtLT5uYW1lKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkp OworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29iamVjdChwYXJh bW9iaikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtyZXR0eXBl czosIH1zKSIsIHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29i amVjdF9vYmplY3QoY3JlYXRlRnVuYywgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wb2Jq KTsKKworCS8qIFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJU UkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0 eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEp KTsKKwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBvYmopOworCX0KKworCWlmICh0eXBlcykK KwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3RyYW5zZm9ybV90eXBlfXMi LCB0bXBvYmopOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkxBTkdVQUdF ICV7bGFuZ3VhZ2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJ aWYgKGlzZnVuY3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAi JXt3aW5kb3d9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfV0lORE9X ID8gIldJTkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIl e3ZvbGF0aWxpdHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xB VElMRV9WT0xBVElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+ cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJMRSIgOiAi SU1NVVRBQkxFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7cGFy YWxsZWxfc2FmZXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFS QUxMRUxfU0FGRSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHByb2NGb3Jt LT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkgIlBBUkFM TEVMIFJFU1RSSUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZUZ1bmMsICIle2xlYWtwcm9vZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnBy b2xlYWtwcm9vZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVGdW5jLCAiJXtzdHJpY3R9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0cmljdCA/ CisJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVE IE9OIE5VTEwgSU5QVVQiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAi JXtzZWN1cml0eV9kZWZpbmVyfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJ CQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZs b2F0LAorCQkJCQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJST1dTIik7CisJCWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWVsc2UKKwkJCWFwcGVu ZF9mbG9hdF9vYmplY3QodG1wb2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93cyk7CisJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Jvd3N9cyIsIHRtcG9iaik7CisK KwkJdG1wb2JqID0gbmV3X29ianRyZWUoIlNVUFBPUlQgJXtuYW1lfXMiKTsKKwkJaWYgKHByb2NG b3JtLT5wcm9zdXBwb3J0KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJLyoKKwkJ CSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3 b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJj aCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVu Y3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBh cmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJf S0lORF9OT05FKSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywg IiV7c3VwcG9ydH1zIiwgdG1wb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlv bnMpCisJeworCQlEZWZFbGVtCSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJ T2JqVHJlZQkgICAqdG1wb2JqOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQi KSA9PSAwKQorCQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3Rt dCAqKSBkZWZlbC0+YXJnOworCQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdz KHNzdG10KTsKKworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwg c3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlRnVu YywgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRl ZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFu dW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcg PT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOwor CisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYs IHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2RlZmlu aXRpb259cyIsIGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJewor CQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtkZWZpbml0aW9ufUwiLAor CQkJCQkJCSBzb3VyY2UpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChj cmVhdGVGdW5jLCAiQVMgJXtvYmpmaWxlfUwiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29i amVjdChjcmVhdGVGdW5jLCAiLCAle3N5bWJvbH1MIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNl U3lzQ2FjaGUobGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJu IGNyZWF0ZUZ1bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNT IGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0 bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVh dGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUgICBvcGNUdXA7CisJSGVhcFR1cGxl ICAgb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mg b3BjRm9ybTsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0 CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNlIHNxbCBj b21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+ aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bjb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNs YXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykg R0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlP SUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkg d2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1pbHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19v cGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICoKKwkgKiBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZP UiBUWVBFICV7dHlwZX1UIFVTSU5HCisJICogJXthbW5hbWV9SSAle29wZmFtaWx5fXMgQVMgJXtp dGVtczosIH1zCisJICovCisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRP UiBDTEFTUyAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkpOworCisJLyog QWRkIHRoZSBERUZBVUxUIGNsYXVzZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIl e2RlZmF1bHR9cyIsCisJCQkJCQkgb3BjRm9ybS0+b3BjZGVmYXVsdCA/ICJERUZBVUxUIiA6ICIi KTsKKworCS8qIEFkZCB0aGUgRk9SIFRZUEUgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmpl Y3Qoc3RtdCwgIkZPUiBUWVBFICV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShvcGNGb3JtLT5vcGNpbnR5cGUsIC0xKSk7CisKKwkvKiBBZGQgdGhlIFVTSU5HIGNsYXVzZSAq LworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICJVU0lORyAle2FtbmFtZX1JIiwgZ2V0X2Ft X25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSk7CisKKwkvKgorCSAqIEFkZCB0aGUgRkFNSUxZIGNs YXVzZTsgYnV0IGlmIGl0IGhhcyB0aGUgc2FtZSBuYW1lIGFuZCBuYW1lc3BhY2UgYXMgdGhlCisJ ICogb3BjbGFzcywgdGhlbiBoYXZlIGl0IGV4cGFuZCB0byBlbXB0eSwgYmVjYXVzZSBpdCB3b3Vs ZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50ZXJu YWxseS4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRkFNSUxZICV7b3BmYW1pbHl9 RCIsIDEsCisJCQkJCQkgIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBO YW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSk7CisKKwlpZiAoc3RyY21wKE5hbWVTdHIob3BmRm9y bS0+b3BmbmFtZSksIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpID09IDAgJiYKKwkJb3BmRm9y bS0+b3BmbmFtZXNwYWNlID09IG9wY0Zvcm0tPm9wY25hbWVzcGFjZSkKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVj dChzdG10LCAiJXtvcGZhbWlseX1zIiwgIHRtcG9iaik7CisKKwkvKgorCSAqIEFkZCB0aGUgaW5p dGlhbCBpdGVtIGxpc3QuICBOb3RlIHdlIGFsd2F5cyBhZGQgdGhlIFNUT1JBR0UgY2xhdXNlLCBl dmVuCisJICogd2hlbiBpdCBpcyBpbXBsaWNpdCBpbiB0aGUgb3JpZ2luYWwgY29tbWFuZC4KKwkg Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiU1RPUkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcGNG b3JtLT5vcGNrZXl0eXBlICE9IEludmFsaWRPaWQgPworCQkJCQkJCQkJCQkgIG9wY0Zvcm0tPm9w Y2tleXR5cGUgOiBvcGNGb3JtLT5vcGNpbnR5cGUsCisJCQkJCQkJCQkJCSAgLTEpKTsKKwlsaXN0 ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEFkZCB0aGUg ZGVjbGFyZWQgb3BlcmF0b3JzICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9w ZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlP YmpUcmVlCSAgICp0bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9QRVJBVE9S ICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSIsCisJCQkJCQkJIDQs CisJCQkJCQkJICJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJCQkJCSAi b3BlcmF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3Blci0+b2JqZWN0KSwK KwkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90 eXBlKG9wZXItPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7CisKKwkJ LyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlpZiAob3Bl ci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtwdXJwb3NlfXMiLCAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJCXsKKwkJCU9ialRy ZWUJICAgKnRtcG9iajI7CisKKwkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVS IEJZICV7b3BmYW1pbHl9RCIsIDApOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwg Im9wZmFtaWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv ckZhbWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOwor CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsK KwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCX0KKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKwlmb3Jl YWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVt YmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisJCUhlYXBU dXBsZQlwcm9jVHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCU9pZAkJICAgKnByb2Fy Z3R5cGVzOworCQlMaXN0CSAgICphcmdsaXN0ID0gTklMOworCQlpbnQJCQlpOworCisJCXByb2NU dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmpl Y3QpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2MtPm9iamVjdCk7CisJ CXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9 VCkgJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkgNCwKKwkJCQkJCQkgIm51bSIsIE9ialR5cGVJbnRl Z2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJICJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSksCisJCQkJCQkJICJy dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2Mt PnJpZ2h0dHlwZSwgLTEpLAorCQkJCQkJCSAiZnVuY3Rpb24iLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJcHJvYXJndHlw ZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkgPSAwOyBpIDwgcHJv Y0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUJICAgKmFyZzsKKworCQkJYXJn ID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCWFyZ2xpc3Qg PSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQl9CisKKwkJYXBw ZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cG9iaiwgIiV7YXJndHlwZXM6LCB9VCIsIGFyZ2xpc3QpOworCQlhcHBlbmRfZm9ybWF0X3N0cmlu Zyh0bXBvYmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWFwcGVu ZF9hcnJheV9vYmplY3Qoc3RtdCwgIkFTICV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFz ZVN5c0NhY2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisKKwlyZXR1cm4g c3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIE9QRVJB VE9SIEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVP cEZhbWlseShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUgICBv cGZUdXA7CisJSGVhcFR1cGxlICAgYW1UdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOwor CUZvcm1fcGdfYW0gIGFtRm9ybTsKKwlPYmpUcmVlCSAgICpjb3BmU3RtdDsKKworCW9wZlR1cCA9 IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQp OworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisKKwlh bVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5v cGZtZXRob2QpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkgb3BmRm9y bS0+b3BmbWV0aG9kKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsK KworCWNvcGZTdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtp ZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkiLAorCQkJCQkJCSAgMiwKKwkJCQkJCQkgICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo b3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIob3BmRm9ybS0+ b3BmbmFtZSkpLAorCQkJCQkJCSAgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoYW1G b3JtLT5hbW5hbWUpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJUmVsZWFzZVN5c0Nh Y2hlKG9wZlR1cCk7CisKKwlyZXR1cm4gY29wZlN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlDcmVhdGVQb2xpY3lTdG10ICpub2RlID0gKENyZWF0ZVBvbGljeVN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUJICAgKnBvbGljeTsKKworCXBvbGljeSA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlw ZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogYWRkIHRoZSByZXN0IG9mIHRoZSBz dHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ksIG9iamVjdElkLCBub2RlLT5yb2xl cywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndpdGhfY2hlY2spOworCisJcmV0dXJu IHBvbGljeTsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclBvbGljeVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJQb2xpY3lTdG10ICpub2Rl ID0gKEFsdGVyUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcG9saWN5Owor CisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lkZW50aXR5fUkiLCAx LAorCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsK KworCS8qIGFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMo cG9saWN5LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsICEhbm9kZS0+cXVhbCwKKwkJCQkJICAgISFu b2RlLT53aXRoX2NoZWNrKTsKKworCXJldHVybiBwb2xpY3k7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlU2NoZW1hU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBPSUQgYW5kIHRoZSBw YXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50 aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZVNjaGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7 CisJT2JqVHJlZQkJCSAqY3JlYXRlU2NoZW1hOworCU9ialRyZWUJCQkgKmF1dGg7CisKKwkvKgor CSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0 c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zCisJICovCisJY3JlYXRlU2NoZW1hID0gbmV3 X29ianRyZWUoIkNSRUFURSBTQ0hFTUEiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZVNjaGVtYSwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3Rz ID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRl U2NoZW1hLCAiJXtuYW1lfUkiLCBub2RlLT5zY2hlbWFuYW1lKTsKKworCWF1dGggPSBuZXdfb2Jq dHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLAorCQkJCQkJCSBnZXRf cm9sZXNwZWNfbmFtZShub2RlLT5hdXRocm9sZSkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxs X29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSAiKTsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KGF1dGgsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTY2hlbWEsICIle2F1dGhvcml6YXRpb259cyIsIGF1dGgpOworCisJcmV0dXJuIGNy ZWF0ZVNjaGVtYTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGRv bWFpbi4KKyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0RGVmYXVsdChIZWFwVHVwbGUgZG9t VHVwKQoreworCURhdHVtCWRlZjsKKwlOb2RlICAgKmRlZnZhbDsKKwljaGFyICAgKmRlZnN0cjsK Kwlib29sCWlzbnVsbDsKKworCWRlZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAs IEFudW1fcGdfdHlwZV90eXBkZWZhdWx0YmluLAorCQkJCQkJCSAmaXNudWxsKTsKKwlpZiAoaXNu dWxsKQorCQllbG9nKEVSUk9SLCAiZG9tYWluIFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVs dCB2YWx1ZSIsCisJCQkgTmFtZVN0cigoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkp LT50eXBuYW1lKSk7CisJZGVmdmFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmco ZGVmKSk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwgTlVMTCAvKiBkcGNv bnRleHQ/ICovLAorCQkJCQkJCQkJICAgZmFsc2UsIGZhbHNlKTsKKworCXJldHVybiBkZWZzdHI7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJEb21haW5TdG10LgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSwKKwkJCQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7CisJQWx0ZXJEb21h aW5TdG10ICpub2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7CisJSGVhcFR1cGxl CWRvbVR1cDsKKwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlCSAgICphbHRlckRvbTsK KwljaGFyCSAgICpmbXQ7CisJY29uc3QgY2hhciAqdHlwZTsKKworCS8qIEFMVEVSIERPTUFJTiBE Uk9QIENPTlNUUkFJTlQgaXMgaGFuZGxlZCBieSB0aGUgRFJPUCBzdXBwb3J0IGNvZGUgKi8KKwlp ZiAobm9kZS0+c3VidHlwZSA9PSAnWCcpCisJCXJldHVybiBOVUxMOworCisJZG9tVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZG9tVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCWRvbUZvcm0gPSAoRm9ybV9wZ190eXBlKSBH RVRTVFJVQ1QoZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3VidHlwZSkKKwl7CisJCWNhc2Ug J1QnOgorCQkJLyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQgKi8KKwkJCWlmIChub2RlLT5k ZWYgPT0gTlVMTCkKKwkJCXsKKwkJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCQl0eXBlID0g ImRyb3AgZGVmYXVsdCI7CisJCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0 ZXJEb20sICIle2lkZW50aXR5fUQgRFJPUCBERUZBVUxUIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBO YW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZm10 ID0gIkFMVEVSIERPTUFJTiI7CisJCQkJdHlwZSA9ICJzZXQgZGVmYXVsdCI7CisJCQkJYWx0ZXJE b20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7 CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50aXR5fUQgU0VUIERF RkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBu YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsK KwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmYXVsdH1zIiwgRG9tYWlu R2V0RGVmYXVsdChkb21UdXApKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJ LyogRFJPUCBOT1QgTlVMTCAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0g ImRyb3Agbm90IG51bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRl ckRvbSwgIiV7aWRlbnRpdHl9RCBEUk9QIE5PVCBOVUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFt ZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ08nOgorCQkJLyog U0VUIE5PVCBOVUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAic2V0 IG5vdCBudWxsIjsKKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIs IE9ialR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20s ICIle2lkZW50aXR5fUQgU0VUIE5PVCBOVUxMIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihk b21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQkJLyogQUREIENP TlNUUkFJTlQuICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBzdXBwb3J0ZWQgYnkgZG9tYWlu cyAqLworCQkJZm10ID0gIkFMVEVSIERPTUFJTiI7CisJCQl0eXBlID0gImFkZCBjb25zdHJhaW50 IjsKKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9ialR5cGVT dHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJ CQkvKiBhIG5ldyBjb25zdHJhaW50IGhhcyBhIG5hbWUgYW5kIGRlZmluaXRpb24gKi8KKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50 X25hbWV9cyIsCisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9i amVjdElkKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIiV7ZGVmaW5pdGlv bn1zIiwKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0 cmFpbnRBZGRyLm9iamVjdElkKSk7CisJCQlicmVhazsKKwkJY2FzZSAnVic6CisJCQkvKiBWQUxJ REFURSBDT05TVFJBSU5UICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAi dmFsaWRhdGUgY29uc3RyYWludCI7CisKKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3Bl Y2lmaWMgb3B0aW9ucy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0 cyBuYW1lLgorCQkJICovCisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy RG9tLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShk b21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50 eXBuYW1lKSkpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoYWx0ZXJEb20sICJWQUxJREFURSBD T05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLCBub2RlLT5uYW1lKTsKKworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0eXBlICVjIiwgbm9kZS0+ c3VidHlwZSk7CisJfQorCisJLyogZG9uZSAqLworCVJlbGVhc2VTeXNDYWNoZShkb21UdXApOwor CisJcmV0dXJuIGFsdGVyRG9tOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNlcVN0bXQu CisgKgorICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVh dGUgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSpjcmVhdGVTZXE7CisJT2Jq VHJlZQkqdG1wb2JqOworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0 YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2Vx Zm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0 bXQgKmNyZWF0ZVNlcVN0bXQgPSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgor CSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkodmlhIENS RUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICov CisJaWYgKGNyZWF0ZVNlcVN0bXQtPmZvcl9pZGVudGl0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlz ZXFkYXRhID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhvYmplY3RJZCk7CisKKwlyZWxhdGlvbiA9IHJl bGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcmVsID0gdGFibGVfb3Bl bihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0gU2Vh cmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwKKwkJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShv YmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzZXF1ZW5jZSAldSIsCisJCQkgb2JqZWN0SWQp OworCisJc2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOwor CisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9 cyBTRVFVRU5DRSAle2lkZW50aXR5fUQKKwkgKi8KKwljcmVhdGVTZXEgPSBuZXdfb2JqdHJlZSgi Q1JFQVRFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTZXEsICIle3BlcnNpc3Rl bmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2UpKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxh dGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiU0VR VUVOQ0UgJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMg Ki8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKGNyZWF0ZVNlcSwg c2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5 Y2xlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKGNyZWF0ZVNlcSwgc2Vx Zm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZh bHVlKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KGNyZWF0ZVNlcSwgc2VxZGF0 YSkpOworCisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8K KwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVt cyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXJlbGF0aW9uX2Ns b3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVNlcTsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdp dmVuIGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZVN0bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRy ZWU7CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NT aGFyZUxvY2spOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlPYmpUcmVlCSpjcmVhdGVTdG10Owor CU9ialRyZWUJKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNl bGw7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0 ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCBbT0YKKwkgKiAle29m X3R5cGV9VCB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1l bnRzfXMKKwkgKiAle2luaGVyaXRzfXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9 cyAle3dpdGhfY2xhdXNlfXMKKwkgKiAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisJICov CisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVN0bXQsICIle3BlcnNpc3RlbmNlfXMiLAorCQkJCQkJIGdldF9wZXJzaXN0 ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCWFwcGVuZF9m b3JtYXRfc3RyaW5nKGNyZWF0ZVN0bXQsICJUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlU3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCSBub2RlLT5pZl9ub3Rf ZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXtpZGVudGl0eX1EIiwgdG1wb2JqKTsKKworCWRwY29udGV4dCA9IGRl cGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJ CQkJCQkJb2JqZWN0SWQpOworCisJLyoKKwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMg dXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3Qg cHV0IHRhYmxlX2VsZW1lbnRzIHdpdGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmlu ZywKKwkgKiBiZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnMgbXVzdCBu b3QgYmUgZW1pdHRlZDsgYW5kCisJICogYWxzbywgdHlwZWQgdGFibGVzIGRvIG5vdCBhbGxvdyBm b3IgaW5oZXJpdGFuY2UuCisJICovCisJaWYgKG5vZGUtPm9mVHlwZW5hbWUgfHwgbm9kZS0+cGFy dGJvdW5kKQorCXsKKwkJTGlzdCAgICAgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAq IFdlIGNhbid0IHB1dCB0YWJsZSBlbGVtZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZyBh cyBhbiBhcnJheQorCQkgKiBzdXJyb3VuZGVkIGJ5IHBhcmVucyBoZXJlLCBiZWNhdXNlIGFuIGVt cHR5IGNsYXVzZSB3b3VsZCBjYXVzZSBhCisJCSAqIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwg d2UgdXNlIGFuIGluZGlyZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNl IHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5h bWUpCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl90eXBlKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG9mdHlwZSwgLTEpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwg Ik9GICV7b2ZfdHlwZX1UIiwgdG1wb2JqKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QgICAg ICpwYXJlbnRzOworCQkJT2JqRWxlbSAgKmVsZW07CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0lu aFJlbGF0aW9ucyhvYmplY3RJZCk7CisJCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFy ZW50cyk7CisKKwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBw ZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOworCisJCQlhcHBl bmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJ CQkJCSBlbGVtLT52YWx1ZS5vYmplY3QpOworCQl9CisKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9U YWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJ CQkJCQkgIHRydWUsICAgICAgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsg ICAgLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0 YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzID09IE5J TCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJZWxzZQorCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIigle2VsZW1lbnRzOiwgfXMpIiwgMSwKKwkJCQkJCQkJICJlbGVtZW50 cyIsIE9ialR5cGVBcnJheSwgdGFibGVlbHRzKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVTdG10LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKwl9CisJZWxzZQorCXsK KwkJTGlzdCAgICAgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5v IG5lZWQgdG8gcHJvY2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAq IGFscmVhZHkgYmVlbiB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgor CQkgKi8KKworCQkvKgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5p dGlvbnMgYW5kIGNvbnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25z IGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBj b25zdHJhaW50cyB3ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5v ZGUKKwkJICogbWlnaHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9m IHRoZSBjb25zdHJhaW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVt ZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBm YWxzZSwgICAgIC8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAv KiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxl ZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWFwcGVuZF9hcnJheV9vYmplY3QoY3Jl YXRlU3RtdCwgIigle3RhYmxlX2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKworCQkvKgor CQkgKiBBZGQgaW5oZXJpdGFuY2Ugc3BlY2lmaWNhdGlvbi4gIFdlIGNhbm5vdCBzaW1wbHkgc2Nh biB0aGUgbGlzdCBvZgorCQkgKiBwYXJlbnRzIGZyb20gdGhlIHBhcnNlciBub2RlLCBiZWNhdXNl IHRoYXQgbWF5IGxhY2sgdGhlIGFjdHVhbAorCQkgKiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBh cmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJICogcmUtcmVzb2x2ZSB0 aGVtIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIHRoZSBwYXJzZSBub2RlLCBpdCBzZWVtcworCQkg KiBtb3JlIGFjY3VyYXRlIGFuZCBjb252ZW5pZW50IHRvIGdyYWIgaXQgZnJvbSBwZ19pbmhlcml0 cy4KKwkJICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobGlz dF9sZW5ndGgobm9kZS0+aW5oUmVsYXRpb25zKSA+IDApCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcG9iaiwgIigle3BhcmVudHM6LCB9RCkiLCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJ ZCkpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIoJXtwYXJl bnRzOiwgfUQpIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwkJfQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtpbmhlcml0 c31zIiwgdG1wb2JqKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIp OworCWlmIChub2RlLT50YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXt0YWJsZXNwYWNlfUkiLCBub2RlLT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsK KwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVu ZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCSAgZGVw YXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyogRk9SIFZBTFVFUyBj bGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJICogR2V0IHBnX2Ns YXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhlCisJCSAqIHBh cnNldHJlZSBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lv bgorCQkgKiB3aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLworCQlhcHBlbmRf c3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJ IFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQob2JqZWN0SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJ T04gQlkgY2xhdXNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlBBUlRJVElPTiBCWSIpOwor CWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgcGdf Z2V0X3BhcnRrZXlkZWZfc2ltcGxlKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251 bGxfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIik7CisJCWFwcGVuZF9ib29sX29iamVj dCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcG9iaik7CisKKwkvKiBVU0lORyBjbGF1 c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNz TWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRob2R9 SSIsIG5vZGUtPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBv YmosICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVT dG10LCAiJXthY2Nlc3NfbWV0aG9kfXMiLCB0bXBvYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8K Kwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5v cHRpb25zKQorCXsKKwkJT2JqVHJlZSAgICAqdG1wb2JqMjsKKwkJRGVmRWxlbSAqb3B0ID0gKERl ZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcG9iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0 LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i ajIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIo JXt3aXRoOiwgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2Jq LCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQs ICIle3dpdGhfY2xhdXNlfXMiLCB0bXBvYmopOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24s IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU3RtdDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBEZWZpbmVTdG10LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmlu ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3Mgc2Vjb25k YXJ5T2JqKQoreworCURlZmluZVN0bXQgKmRlZmluZSA9IChEZWZpbmVTdG10ICopIHBhcnNldHJl ZTsKKwlPYmpUcmVlCSAgICpkZWZTdG10ID0gTlVMTDsKKworCXN3aXRjaCAoZGVmaW5lLT5raW5k KQorCXsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZp bmVTdG10X09wZXJhdG9yKG9iamVjdElkLCBkZWZpbmUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfVFlQRToKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShvYmplY3RJ ZCwgZGVmaW5lKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgb2JqZWN0IGtpbmQiKTsKKwl9CisKKwlyZXR1cm4gZGVmU3RtdDsKK30KKworLyoK KyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgT1BFUkFUT1IpCisgKgorICogR2l2ZW4g YSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihPaWQgb2JqZWN0SWQs IERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICBvcHJUdXA7CisJT2JqVHJlZQkg ICAqc3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlG b3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisKKwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BF Uk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0 b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9y KSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9Q RVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBQ Uk9DRURVUkUgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJvY2Vk dXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvY2VkdXJlIiwK KwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb3ByRm9y bS0+b3ByY29kZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCisJLyogTEVGVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJMRUZU QVJHPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZWZ0YXJnIik7CisJ aWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9y bS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJLyogUklHSFRBUkcgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi UklHSFRBUkc9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJpZ2h0YXJn Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmlnaHQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBDT01NVVRBVE9SICovCisJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkNPTU1VVEFUT1I9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImNvbW11dGF0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJjb20pKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBv cHJGb3JtLT5vcHJjb20pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJw cmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCisJLyogTkVHQVRPUiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJO RUdBVE9SPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJuZWdhdG9yIik7 CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BybmVnYXRlKSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BybmVn YXRlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KworCS8qIFJFU1RSSUNUICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmljdCIpOworCWlmIChP aWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3QpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8q IEpPSU4gKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0t Pm9wcmpvaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIE1FUkdFUyAqLworCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJNRVJHRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAibWVyZ2VzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5tZXJnZSkKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiSEFTSEVTIiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImhhc2hlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1 cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBz dGF0ZW1lbnQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UeXBl KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHR5cFR1 cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0 OworCWNoYXIJICAgKnN0cjsKKwlEYXR1bQkJZGZsdDsKKwlib29sCQlpc251bGw7CisJRm9ybV9w Z190eXBlIHR5cEZvcm07CisKKwl0eXBUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0eXBUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKwl0eXBGb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1 cCk7CisKKwkvKiBTaG9ydGN1dCBwcm9jZXNzaW5nIGZvciBzaGVsbCB0eXBlcy4gKi8KKwlpZiAo IXR5cEZvcm0tPnR5cGlzZGVmaW5lZCkKKwl7CisJCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIFRZUEUiLCAwKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0eXBGb3JtLT50eXBuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJCWFwcGVu ZF9ib29sX29iamVjdChzdG10LCAicHJlc2VudCIsIHRydWUpOworCQlSZWxlYXNlU3lzQ2FjaGUo dHlwVHVwKTsKKwkJcmV0dXJuIHN0bXQ7CisJfQorCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgVFlQRSIsIDApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2lkZW50aXR5 fUQiLAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0eXBGb3JtLT50eXBuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJTmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCWFwcGVuZF9i b29sX29iamVjdChzdG10LCAicHJlc2VudCIsIHRydWUpOworCisJLyogQWRkIHRoZSBkZWZpbml0 aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBJTlBVVCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCIoSU5QVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImlucHV0Iik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGlucHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBPVVRQVVQgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiT1VUUFVUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJv dXRwdXQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNFSVZFICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg InJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg dHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBTRU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNW YWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtw cm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UK KwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfSU4gKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfYm9v bF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9PVVQgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBBTkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBJTlRFUk5BTExFTkdUSCAqLworCWlmICh0eXBGb3JtLT50eXBsZW4gPT0gLTEpCisJ eworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiLCAwKTsK Kwl9CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIklOVEVSTkFMTEVOR1RIPSV7 dHlwbGVufW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2JqVHlwZUludGVnZXIsIHR5cEZvcm0t PnR5cGxlbik7CisJfQorCisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBQQVNTRURCWVZBTFVFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBB U1NFREJZVkFMVUUiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2Vk Ynl2YWx1ZSIpOworCWlmICghdHlwRm9ybS0+dHlwYnl2YWwpCisJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogQUxJR05NRU5UICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIkFMSUdOTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYWxp Z25tZW50Iik7CisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBz Y2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWdu KQorCXsKKwkJY2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJl YWs7CisJCWNhc2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsK KwkJY2FzZSAncyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQlj YXNlICdjJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5 cGFsaWduKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXthbGlnbn1zIiwgc3Ry KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJTVE9SQUdFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJzdG9yYWdlIik7CisJc3dpdGNoICh0eXBGb3JtLT50eXBzdG9yYWdlKQorCXsK KwkJY2FzZSAncCc6CisJCQlzdHIgPSAicGxhaW4iOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgor CQkJc3RyID0gImV4dGVybmFsIjsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXN0ciA9ICJl eHRlbmRlZCI7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlzdHIgPSAibWFpbiI7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lm aWVyICVjIiwgdHlwRm9ybS0+dHlwc3RvcmFnZSk7CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgIiV7c3RvcmFnZX1zIiwgc3RyKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIENBVEVHT1JZICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIkNBVEVHT1JZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjYXRl Z29yeSIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7Y2F0ZWdvcnl9cyIsCisJCQkJ CQkgcHNwcmludGYoIiVjIiwgdHlwRm9ybS0+dHlwY2F0ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBSRUZFUlJFRCAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJQUkVGRVJSRUQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInByZWZlcnJlZCIpOworCWlmICghdHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQp CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVGQVVMVCAqLwor CWRmbHQgPSBTeXNDYWNoZUdldEF0dHIoVFlQRU9JRCwgdHlwVHVwLAorCQkJCQkJICAgQW51bV9w Z190eXBlX3R5cGRlZmF1bHQsCisJCQkJCQkgICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJl ZV9WQSgiREVGQVVMVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVm YXVsdCIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2Rl ZmF1bHR9cyIsIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29i anRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wLCAiZWxlbSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBl KHR5cEZvcm0tPnR5cGVsZW0sIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIERFTElNSVRFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJE RUxJTUlURVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlbGltaXRl ciIpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVsaW19TCIsCisJCQkJCQkgcHNw cmludGYoIiVjIiwgdHlwRm9ybS0+dHlwZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiQ09MTEFUQUJMRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiY29sbGF0YWJsZSIpOworCWlmICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRp b24pKQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJh eV9vYmplY3Qoc3RtdCwgIiV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0eXBUdXApOworCisJcmV0dXJuIHN0bXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1O IC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxT ZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZQkgICAqcmVsc2V0OworCWNoYXIJICAgKmZt dDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlv bnM7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBSRVNFVHxTRVQgKCV7b3B0 aW9uczosIH1zKQorCSAqLworCWlmIChpc19yZXNldCkKKwkJZm10ID0gIlJFU0VUICI7CisJZWxz ZQorCQlmbXQgPSAiU0VUICI7CisKKwlyZWxzZXQgPSBuZXdfb2JqdHJlZShmbXQpOworCisJZm9y ZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07 CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwp OworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFw cGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7 CisJYXBwZW5kX2FycmF5X29iamVjdChyZWxzZXQsICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7 CisKKwlyZXR1cm4gcmVsc2V0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10 IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFy c2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVU cmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24J cGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zv cm07CisJT2JqVHJlZQkgICAqdHJpZ2dlcjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJaW50CQkJ dGduYXJnczsKKwlMaXN0CSAgICpsaXN0OworCUxpc3QJICAgKmV2ZW50czsKKworCXBnX3RyaWdn ZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJ dHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgQW51bV9wZ190 cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VU U1RSVUNUKHRyaWdUdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JF QVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtuYW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9S IH1zCisJICogT04gJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9hdHRy czogfXMKKwkgKiBGT1IgRUFDSCAle2Zvcl9lYWNofXMgJXt3aGVufXMgRVhFQ1VURSBQUk9DRURV UkUgJXtmdW5jdGlvbn1zCisJICovCisJdHJpZ2dlciA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle2NvbnN0cmFpbnR9cyIsCisJCQkJ CQkgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNPTlNUUkFJTlQiIDogIiIpOworCisJYXBwZW5kX3N0 cmluZ19vYmplY3QodHJpZ2dlciwgIlRSSUdHRVIgJXtuYW1lfUkiLCBub2RlLT50cmlnbmFtZSk7 CisKKwlpZiAobm9kZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9CRUZPUkUpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJCRUZPUkUiKTsKKwllbHNlIGlmIChu b2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0FGVEVSKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiQUZURVIiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcg PT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIs ICIle3RpbWV9cyIsICJJTlNURUFEIE9GIik7CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIHRyaWdnZXIgdGltaW5nIHR5cGUgJWQiLCBub2RlLT50aW1pbmcpOworCisJLyoKKwkg KiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRoZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRw dXQgaXMgYSBsaXN0OworCSAqIGluIG1vc3QgY2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5n IHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3aGVuCisJICogdGhlcmUncyBhbiBVUERBVEUgd2l0 aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0dXJuIGEgSlNPTiBvYmplY3QuCisJICovCisJZXZl bnRzID0gTklMOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfSU5TRVJUKQorCQll dmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsKKwlp ZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0RFTEVURSkKKwkJZXZlbnRzID0gbGFwcGVu ZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJERUxFVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50 cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5l d19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dF Ul9UWVBFX1VQREFURSkKKwl7CisJCWlmIChub2RlLT5jb2x1bW5zID09IE5JTCkKKwkJeworCQkJ ZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlCSAgICp1cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpj ZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJLyoKKwkJCSAqIEN1cnJlbnRseSBv bmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0cyBpbiB0aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJ ICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQgc28gdGhhdCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1 aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUgbmV3IGV2ZW50IHR5cGVzLgorCQkJICovCisJCQl1 cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBEQVRFIE9GIiwgMSwKKwkJCQkJCQkJCSJraW5kIiwg T2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIpOworCisJCQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNv bHVtbnMpCisJCQl7CisJCQkJY2hhciAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7 CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7 CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUki LCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0 KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7ZXZl bnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJICB0cmlnRm9ybS0+dGdyZWxpZCk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJpZ2dlciwgIk9OICV7cmVsYXRpb259RCIsIHRtcG9i aik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRlJPTSIsIDApOworCWlmICh0cmlnRm9y bS0+dGdjb25zdHJyZWxpZCkKKwl7CisJCU9ialRyZWUJICAgKnJlbDsKKworCQlyZWwgPSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAg dHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmos ICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIs ICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7CisKKwlsaXN0ID0gTklMOworCWlmIChub2RlLT5k ZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29i amVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAobm9kZS0+aW5pdGRlZmVycmVkKQorCQlsaXN0ID0g bGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiSU5JVElBTExZIERFRkVS UkVEIikpOworCWFwcGVuZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7Y29uc3RyYWludF9hdHRy czogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICJGT1IgRUFD SCAle2Zvcl9lYWNofXMiLAorCQkJCQkJIG5vZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVOVCIp OworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIldIRU4iLCAwKTsKKwlpZiAobm9kZS0+d2hl bkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsKKwkJ Ym9vbAkJaXNudWxsOworCisJCXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9wZ190 cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNu dWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJib2d1cyBOVUxMIHRncXVhbCIp OworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1 ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtjbGF1c2V9cykiLAorCQkJ CQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJCSAg IHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdCh0cmlnZ2VyLCAiJXt3aGVufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkgImZ1bmNuYW1lIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJ dGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5 dGVhICAqdGdhcmdzOworCQljaGFyICAgKmFyZ3N0cjsKKwkJYm9vbAlpc251bGw7CisJCWludAkJ ZmluZHg7CisJCWludAkJbGVudGdhcmdzOworCQljaGFyICAgKnA7CisKKwkJdGdhcmdzID0gRGF0 dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190cmln Z2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJ CQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgTlVMTCB0Z2FyZ3MiKTsKKwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3MpOwor CQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7 CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJCXNp emVfdAl0bGVuOworCisJCQkvKiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMg Y29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBhcmdz dHIgKyBsZW50Z2FyZ3MpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBhcmd1 bWVudCBzdHJpbmcgKCVzKSBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCQkJCQlhcmdzdHIsIE5h bWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpKSk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJcCArPSB0bGVuICsgMTsKKwkJfQorCX0KKworCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cG9iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7CQkvKiBtaWdodCBiZSBOSUwgKi8KKwlhcHBlbmRf Zm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmln Z2VyLCAiRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zIiwgdG1wb2JqKTsKKworCXRhYmxl X2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gdHJpZ2dlcjsK K30KKworLyoKKyAqIERlcGFyc2UgYSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJ QUxJWkVEIFZJRVcpCisgKgorICogR2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRo ZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVz ZW50aW5nIHRoZSByZWZyZXNoIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfUmVmcmVzaE1hdFZpZXdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CVJlZnJlc2hNYXRWaWV3U3RtdCAqbm9kZSA9IChSZWZyZXNoTWF0Vmlld1N0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUJICAgKnJlZnJlc2hTdG10OworCU9ialRyZWUJICAgKnRtcDsKKworCXJl ZnJlc2hTdG10ID0gbmV3X29ianRyZWVfVkEoIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVciLCAw KTsKKworCS8qIGFkZCBhIENPTkNVUlJFTlRMWSBjbGF1c2UgKi8KKwlhcHBlbmRfc3RyaW5nX29i amVjdChyZWZyZXNoU3RtdCwgIiV7Y29uY3VycmVudGx5fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1 cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKwkvKiBhZGQgdGhlIG1hdHZpZXcgbmFtZSAq LworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlZnJlc2hTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCSBvYmplY3RJZCkpOworCS8qIGFkZCBhIFdJVEggTk8gREFUQSBjbGF1c2UgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBOTyBEQVRBIiwgMSwKKwkJCQkJCSAicHJlc2Vu dCIsIE9ialR5cGVCb29sLAorCQkJCQkJIG5vZGUtPnNraXBEYXRhID8gdHJ1ZSA6IGZhbHNlKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZWZyZXNoU3RtdCwgIiV7d2l0aF9ub19kYXRhfXMiLCB0 bXApOworCisJcmV0dXJuIHJlZnJlc2hTdG10OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVt cywgYXMgdXNlZCBlLmcuIGJ5IEFMVEVSIENPTFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBT RVQKKyAqICguLi4pICBvciBSRVNFVCAoLi4uKSBjb250ZW50cy4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wgaXNfcmVzZXQpCit7CisJ T2JqVHJlZQkgICAqc2V0OworCU9ialRyZWUJICAgKm9wdG5hbWU7CisKKwlzZXQgPSBuZXdfb2Jq dHJlZSgiIik7CisJb3B0bmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChlbGVtLT5kZWZu YW1lc3BhY2UgIT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFtZSwgIiV7c2No ZW1hfUkuIiwgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9w dG5hbWUsICIle2xhYmVsfUkiLCBlbGVtLT5kZWZuYW1lKTsKKworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHNldCwgIiV7bGFiZWx9cyIsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3Qoc2V0LCAiID0gJXt2YWx1ZX1MIiwKKwkJCQkJCQkgZWxlbS0+YXJn ID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJU UlVFIiA6ICJGQUxTRSIpOworCisJcmV0dXJuIHNldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBh cnNpbmcgb2YgRFJPUCBjb21tYW5kcy4KKyAqLworY2hhciAqCitkZXBhcnNlX2Ryb3BfY29tbWFu ZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKKwkJCQkJ IERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sKKwlTdHJpbmdJbmZvRGF0YSAgc3RyOworCWNoYXIJ CSAgICpjb21tYW5kOworCWNoYXIJCSAgICppZGVudGl0eSA9IChjaGFyICopIG9iamlkZW50aXR5 OworCWNoYXIJCSAgICpmbXQ7CisJT2JqVHJlZQkJKnN0bXQsICpzdG10MjsKKwlKc29uYgkJICAq anNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKworCWZtdCA9IHBzcHJpbnRmKCJEUk9Q ICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zIiwgb2JqZWN0dHlwZSk7CisKKwlzdG10ID0g bmV3X29ianRyZWVfVkEoZm10LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVu dGl0eSk7CisJc3RtdDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkgICAi cHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1zIiwgc3RtdDIpOworCisJanNvbmIg PSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3Ry LCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7 Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2lu ZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZQkgICAqb2JqOworCisJaWYg KGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwl7CisJCW9iaiA9IG5ld19vYmp0cmVlKCJSRVNFVCBB TEwiKTsKKwl9CisJZWxzZSBpZiAodmFsdWUgIT0gTlVMTCkKKwl7CisJCW9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJCSAgICJzZXRfbmFtZSIsIE9ialR5 cGVTdHJpbmcsIG5hbWUpOworCisJCS8qCisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFy ZSAnTElTVCcgdHlwZSBhbmQgaGVuY2UgbXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8K KwkJaWYgKEdldENvbmZpZ09wdGlvbkZsYWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUp CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICJUTyAle3NldF92YWx1ZX1zIiwgdmFsdWUp OworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChvYmosICJUTyAle3NldF92YWx1ZX1M IiwgdmFsdWUpOworCX0KKwllbHNlCisJeworCQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQiKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiJXtzZXRfbmFtZX1JIiwgbmFtZSk7CisJfQor CisJcmV0dXJuIG9iajsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gSW5kZXhTdG10LgorICoKKyAq IEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisg KgorICogSWYgdGhlIGluZGV4IGNvcnJlc3BvbmRzIHRvIGEgY29uc3RyYWludCwgTlVMTCBpcyBy ZXR1cm5lZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9i amVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmluZGV4U3RtdDsKKwlPYmpUcmVlCSAgICp0 bXBvYmo7CisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWw7CisJY2hhcgkgICAq aW5kZXhfYW07CisJY2hhcgkgICAqZGVmaW5pdGlvbjsKKwljaGFyCSAgICpyZWxvcHRpb25zOwor CWNoYXIJICAgKnRhYmxlc3BhY2U7CisJY2hhcgkgICAqd2hlcmVDbGF1c2U7CisKKwlpZiAobm9k ZS0+cHJpbWFyeSB8fCBub2RlLT5pc2NvbnN0cmFpbnQpCisJeworCQkvKgorCQkgKiBJbmRleGVz IGZvciBQUklNQVJZIEtFWSBhbmQgb3RoZXIgY29uc3RyYWludHMgYXJlIG91dHB1dAorCQkgKiBz ZXBhcmF0ZWx5OyByZXR1cm4gZW1wdHkgaGVyZS4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0K KworCWlkeHJlbCA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ aGVhcHJlbCA9IHJlbGF0aW9uX29wZW4oaWR4cmVsLT5yZF9pbmRleC0+aW5kcmVsaWQsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQob2JqZWN0SWQsCisJCQkJ CQkJICZpbmRleF9hbSwgJmRlZmluaXRpb24sICZyZWxvcHRpb25zLAorCQkJCQkJCSAmdGFibGVz cGFjZSwgJndoZXJlQ2xhdXNlKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IENSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3Rz fXMgJXtuYW1lfUkgT04KKwkgKiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICgle2RlZmlu aXRpb259cykgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMKKwkgKiAle3doZXJlX2NsYXVzZX1zCisJ ICovCisJaW5kZXhTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoaW5kZXhTdG10LCAiJXt1bmlxdWV9cyIsCisJCQkJCQkgbm9kZS0+dW5pcXVlID8g IlVOSVFVRSIgOiAiIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyhpbmRleFN0bXQsICJJTkRF WCIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtjb25jdXJyZW50bHl9 cyIsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJ CQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChpbmRleFN0bXQsICIle25hbWV9SSIsCisJCQkJCQkgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0 bXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFw cmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShoZWFwcmVsKSkpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiVVNJTkcg JXtpbmRleF9hbX1zIiwgaW5kZXhfYW0pOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoaW5kZXhT dG10LCAiKCV7ZGVmaW5pdGlvbn1zKSIsIGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAq LworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIigle29wdHN9cykiLCByZWxvcHRpb25zKTsKKwll bHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7d2l0aH1zIiwgdG1wb2JqKTsKKworCS8q IHRhYmxlc3BhY2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlm ICh0YWJsZXNwYWNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3RhYmxlc3Bh Y2V9cyIsIHRhYmxlc3BhY2UpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwg InByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhTdG10LCAiJXt0 YWJsZXNwYWNlfXMiLCB0bXBvYmopOworCisJLyogV0hFUkUgY2xhdXNlICovCisJdG1wb2JqID0g bmV3X29ianRyZWUoIldIRVJFIik7CisJaWYgKHdoZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle3doZXJlfXMiLCB3aGVyZUNsYXVzZSk7CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChpbmRleFN0bXQsICIle3doZXJlX2NsYXVzZX1zIiwgdG1wb2JqKTsKKworCXRhYmxl X2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0YWJsZV9jbG9zZShoZWFwcmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGluZGV4U3RtdDsKK30KKworLyoKKyAqIERlcGFy c2UgdGhlIElOSEVSSVRTIHJlbGF0aW9ucy4KKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCwgcmV0 dXJuIGEgc2NoZW1hIHF1YWxpZmllZCB0YWJsZSBsaXN0IHJlcHJlc2VudGluZworICogdGhlIHBh cmVudCB0YWJsZXMuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfSW5oUmVsYXRpb25zKE9p ZCBvYmplY3RJZCkKK3sKKwlMaXN0CSAgICpwYXJlbnRzID0gTklMOworCVJlbGF0aW9uCWluaFJl bDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleTsKKwlIZWFwVHVwbGUJdHVw bGU7CisKKwlpbmhSZWwgPSB0YWJsZV9vcGVuKEluaGVyaXRzUmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5o cmVsaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oaW5oUmVs LCBJbmhlcml0c1JlbGlkU2Vxbm9JbmRleElkLAorCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtl eSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQo c2NhbikpKQorCXsKKwkJT2JqVHJlZQkqcGFyZW50OworCQlGb3JtX3BnX2luaGVyaXRzIGZvcm1J bmggPSAoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlwYXJlbnQgPSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkgZm9ybUluaC0+aW5ocGFyZW50KTsKKwkJcGFyZW50cyA9IGxhcHBlbmQocGFyZW50cywgbmV3 X29iamVjdF9vYmplY3QocGFyZW50KSk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsK Kwl0YWJsZV9jbG9zZShpbmhSZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHBhcmVu dHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBPTiBDT01NTUlUIC4uLiBjbGF1c2UgZm9yIENS RUFURSAuLi4gVEVNUE9SQVJZIC4uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09u Q29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpUcmVlCSAgICpvbmNv bW1pdDsKKworCW9uY29tbWl0ID0gbmV3X29ianRyZWUoIk9OIENPTU1JVCIpOworCXN3aXRjaCAo b3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1JVF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3Qob25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIkRST1AiKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChv bmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiREVMRVRFIFJPV1MiKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJQUkVTRVJWRSBST1dTIik7CisJ CQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3Qo b25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3Qo b25jb21taXQsICJwcmVzZW50IiwgZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIG9u Y29tbWl0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0bXQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfUmVuYW1lU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlSZW5hbWVTdG10ICpub2RlID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUJICAgKnJlbmFtZVN0bXQ7CisJY2hhcgkgICAqZm10c3RyOworCWNvbnN0 IGNoYXIgKm9ianR5cGU7CisJUmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJc2NoZW1hSWQ7CisK KwkvKgorCSAqIEluIGFuIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBkb24ndCBoYXZlIHRo ZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxvZ3M6IHNp bmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkgKiBleGVjdXRlZCwg dGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFjdCBpdCBm cm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhlIHNjaGVt YSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJlIHByZXNlbnQgaW4g dGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAqIGNoYW5nZWQgYW55 d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJCWNhc2UgT0JKRUNU X1RBQkxFOgorCQljYXNlIE9CSkVDVF9JTkRFWDoKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisK KwkJCS8qCisJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJICoKKwkJCSAqIEFMVEVSICVzICV7aWZf ZXhpc3RzfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorCQkJICovCisJCQlv Ymp0eXBlID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSk7CisJCQlmbXRzdHIg PSBwc3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBS ZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQlyZW5hbWVTdG10ID0gbmV3X29ianRy ZWVfVkEoZm10c3RyLCAwKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIl e2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6 ICIiKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lkZW50aXR5fUQi LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJ CQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJIG5vZGUtPm5l d25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQlicmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQl7CisJCQkJSGVhcFR1cGxlCXBv bFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCQkJCVJlbGF0aW9uCXBnX3BvbGlj eTsKKwkJCQlTY2FuS2V5RGF0YQlrZXk7CisJCQkJU3lzU2NhbkRlc2MJc2NhbjsKKworCQkJCXBn X3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVtX3BnX3BvbGljeV9vaWQsCisJCQkJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oYWRk cmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcG9saWN5 LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJ CQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHBvbGljeSAldSIsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXBvbEZvcm0gPSAoRm9ybV9wZ19w b2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBQT0xJQ1kiLCAwKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVT dG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBF WElTVFMiIDogIiIpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle3Bv bGljeW5hbWV9SSIsIG5vZGUtPnN1Ym5hbWUpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl bmFtZVN0bXQsICJPTiAle2lkZW50aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVs aWQpKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7 bmV3bmFtZX1JIiwKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlzeXN0YWJsZV9lbmRz Y2FuKHNjYW4pOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3BvbGljeSwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNl IE9CSkVDVF9DT0xVTU46CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmpl Y3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsYXRpb24pOworCisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkg KiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIG9ianR5cGUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRS SUJVVEUKKwkJCSAqICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisJCQkg KgorCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRl bnRpdHl9RCBSRU5BTUUKKwkJCSAqIENPTFVNTiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQor CQkJICovCisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJ CQl7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlKCJBTFRFUiBUWVBFIik7CisJCQkJCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2Rl LT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQVRU UklCVVRFICUle2NvbG5hbWV9SSIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW9ianR5cGUg PSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZWxhdGlvblR5cGUpOworCQkJCWZtdHN0ciA9IHBz cHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJl ZShmbXRzdHIpOworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBwb3J0IElGIEVY SVNUUyAqLworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xVTU4pCisJCQkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJ CQkJCQlub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJl bGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIlJFTkFNRSBDT0xVTU4g JSV7Y29sbmFtZX1JIik7CisJCQl9CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0 bXQsIGZtdHN0ciwgbm9kZS0+c3VibmFtZSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5h bWVTdG10LCAiVE8gJXtuZXduYW1lfUkiLCBub2RlLT5uZXduYW1lKTsKKworCQkJaWYgKG5vZGUt PnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZW5hbWVTdG10LCAiJXtjYXNjYWRlfXMiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJD QVNDQURFIiwgMSwKKwkJCQkJCQkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJ CQkJCQkJCW5vZGUtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX0ZVTkNUSU9OOgorCQkJeworCQkJCWNoYXIJKmlkZW50OworCQkJCUhlYXBUdXBsZSBwcm9j dHVwOworCQkJCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKwkJCQlMaXN0CSAgICppZGVudGl0eTsK KworCQkJCUFzc2VydChJc0Eobm9kZS0+b2JqZWN0LCBPYmplY3RXaXRoQXJncykpOworCQkJCWlk ZW50aXR5ID0gKChPYmplY3RXaXRoQXJncyAqKSBub2RlLT5vYmplY3QpLT5vYmpuYW1lOworCisJ CQkJcHJvY3R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkJCSAgT2JqZWN0 SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHByb2N0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJv Y2VkdXJlICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwcm9jZm9ybSA9IChG b3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jdHVwKTsKKworCQkJCS8qIFhYWCBkb2VzIHRoaXMg d29yayBmb3Igb3JkZXJlZC1zZXQgYWdncmVnYXRlcz8gKi8KKwkJCQlpZGVudCA9IHBzcHJpbnRm KCIlcyVzIiwKKwkJCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGdldF9uYW1lc3Bh Y2VfbmFtZShwcm9jZm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJCQkJCQkJCQkJCQkJCXN0clZhbChs bGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJIGZvcm1hdF9wcm9jZWR1cmVfYXJncyhhZGRyZXNz Lm9iamVjdElkLCB0cnVlKSk7CisKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7 aWRlbnRpdHl9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJICBzdHJpbmdpZnlf b2JqdHlwZShub2RlLT5yZW5hbWVUeXBlKSk7CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVl X1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRl bnQsCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7 CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQlj YXNlIE9CSkVDVF9PUENMQVNTOgorCQkJeworCQkJCUhlYXBUdXBsZSAgIG9wY1R1cDsKKwkJCQlG b3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFy CSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wY25hbWU7CisJCQkJY2hhcgkgICAqZm10 OworCisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fUQgVVNJTkcgJSV7 aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJICAgc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJCQkJb3BjVHVwID0gU2VhcmNoU3lz Q2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9i amVjdElkKTsKKworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3Bj VHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2Jq ZWN0LCAxKTsKKworCQkJCS8qIGRlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNv bnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7CisK KwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVfVkEoZm10LCAzLAorCQkJCQkJCQkJCQkiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCQkgb3BjbmFtZSksCisJ CQkJCQkJCQkJCSJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlnZXRf YW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5 cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7 CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlI ZWFwVHVwbGUgICBvcGZUdXA7CisJCQkJSGVhcFR1cGxlICAgYW1UdXA7CisJCQkJRm9ybV9wZ19v cGZhbWlseSBvcGZGb3JtOworCQkJCUZvcm1fcGdfYW0gIGFtRm9ybTsKKwkJCQlMaXN0CSAgICpv bGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7 CisJCQkJY2hhcgkgICAqZm10OworCisJCQkJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lk ZW50aXR5fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIs CisJCQkJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCisJCQkJ b3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsK KwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJ CQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBH RVRTVFJVQ1Qob3BmVHVwKTsKKworCQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBP YmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxl SXNWYWxpZChhbVR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJ YW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9 IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBkZWNv bnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9s ZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJCQkJcmVuYW1lU3RtdCA9IG5ld19v Ymp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wZm5hbWUpLAorCQkJCQkJCQkJCQkiaW5kZXhfbWV0aG9k IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJ CQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJ CQlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOwor CQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmVuYW1lU3RtdCA9 CisJCQkJbmV3X29ianRyZWVfVkEoIkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRP ICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9GRFc6CisJCQl7CisJCQkJU3Ry aW5nICppZGVudGl0eSA9IGNhc3ROb2RlKFN0cmluZywgbm9kZS0+b2JqZWN0KTsKKworCQkJCXJl bmFtZVN0bXQgPQorCQkJCQluZXdfb2JqdHJlZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQ RVIgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCSAgIDIsICJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChpZGVudGl0eSksCisJCQkJCQkJCSAgICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJeworCQkJCUhlYXBUdXBsZQlyZXdyVHVwOworCQkJ CUZvcm1fcGdfcmV3cml0ZSByZXdyRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19yZXdyaXRlOworCisJ CQkJcGdfcmV3cml0ZSA9IHJlbGF0aW9uX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJCQkJcmV3clR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfcmV3 cml0ZSwgQW51bV9wZ19yZXdyaXRlX29pZCwgIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXJld3JG b3JtID0gKEZvcm1fcGdfcmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJCQkJcmVuYW1l U3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBPTiAle2lkZW50 aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJCQkJ InJ1bGVuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCQkJImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXJld3JGb3JtLT5l dl9jbGFzcyksCisJCQkJCQkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3 bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsK KwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQl7CisJCQkJSGVh cFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCQkJCVJlbGF0 aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2VyID0gcmVsYXRpb25fb3BlbihUcmlnZ2Vy UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl0cmlnVHVwID0gZ2V0X2NhdGFsb2df b2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVzcy5j bGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJdHJpZ0Zvcm0gPSAoRm9ybV9wZ190cmln Z2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUg VE8gJXtuZXduYW1lfUkiLAorCQkJCQkJCQkJCQkzLAorCQkJCQkJCQkJCQkidHJpZ2dlcm5hbWUi LCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJCQkiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVs YXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRncmVsaWQpLAor CQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJ CQkJcmVsYXRpb25fY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJ CWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCWNhc2UgT0JKRUNUX0NPTlZFUlNJT046 CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJ CVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7 CisJCQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9 IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7CisJCQkJY2hhcgkgICAqZm10c3RyaW5nOwor CisJCQkJLyogb2J0YWluIG9iamVjdCB0dXBsZSAqLworCQkJCWNhdGFsb2cgPSByZWxhdGlvbl9v cGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlvYmpUdXAgPSBnZXRf Y2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2csIGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRy ZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKworCQkJCS8qIG9idGFpbiBuYW1lc3Bh Y2UgKi8KKwkJCQlBbnVtX25hbWVzcGFjZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShh ZGRyZXNzLmNsYXNzSWQpOworCQkJCW9iam5zcCA9IGhlYXBfZ2V0YXR0cihvYmpUdXAsIEFudW1f bmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLCAmaXNudWxs KTsKKwkJCQlpZiAoaXNudWxsKQorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIG5hbWVz cGFjZSIpOworCisJCQkJb2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5 cGUpOworCQkJCWZtdHN0cmluZyA9IHBzcHJpbnRmKCJBTFRFUiAlcyIsIG9ianR5cGUpOworCisJ CQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0cmluZywKKwkJCQkJCQkJCQkwKTsK KwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCks CisJCQkJCQkJCQkJCQkJCQkgIHN0clZhbChsbGFzdChpZGVudGl0eSkpKSk7CisKKwkJCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJ CQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJS T1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOworCX0K KworCXJldHVybiByZW5hbWVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyT2JqZWN0 RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3REZXBl bmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVyRGVwZW5kZVN0bXQgPSBO VUxMOworCisKKwlpZiAobm9kZS0+b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJeworCQlS ZWxhdGlvbiAgICAgICAgcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NT aGFyZUxvY2spOworCQlPYmpUcmVlICpxdWFsaWZpZWQ7CisKKwkJYWx0ZXJEZXBlbmRlU3RtdCA9 IG5ld19vYmp0cmVlKCJBTFRFUiBJTkRFWCIpOworCisJCXF1YWxpZmllZCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CSBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVy RGVwZW5kZVN0bXQsICIle2lkZW50aXR5fUQiLCBxdWFsaWZpZWQpOworCQlyZWxhdGlvbl9jbG9z ZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChh bHRlckRlcGVuZGVTdG10LCAiJXtOT31zIiwKKwkJCQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDog IiIpOworCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyRGVwZW5kZVN0bXQsICJERVBFTkRT IE9OIEVYVEVOU0lPTiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRlcGVuZGVTdG10 LCAiJXtuZXduYW1lfUkiLCBzdHJWYWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVs b2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwK KwkJCSAoaW50KSBub2RlVGFnKHBhcnNldHJlZSkpOworCisJcmV0dXJuIGFsdGVyRGVwZW5kZVN0 bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRpb24uCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJl bnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlCSAgICpjYWNoZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJdG1w c3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisKKwlpZiAo YWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZt dCA9ICJDQUNIRSAle3ZhbHVlfXMiOworCisJY2FjaGUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIs CisJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICAidmFs dWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0 KGNhY2hlKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4K KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUg KnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQorewor CU9ialRyZWUJICAgKmN5Y2xlOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkK KwkJZm10ID0gIlNFVCAle25vfXMgQ1lDTEUiOworCWVsc2UKKwkJZm10ID0gIiV7bm99cyBDWUNM RSI7CisKKwljeWNsZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAgICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICAgIm5vIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSAgIHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QoY3ljbGUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgSU5D UkVNRU5UIEJZIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf U2VxX0luY3JlbWVudEJ5KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKmluY3JlbWVudGFsYnk7CisJY2hh cgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10 ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJJTkNSRU1F TlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+c2VxaW5jcmVtZW50KTsKKwlpbmNyZW1lbnRhbGJ5ID0gbmV3X29ianRyZWVfVkEoZm10 LCAyLAorCQkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlcWluY3JlbWVudCIs CisJCQkJCQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KGluY3JlbWVudGFsYnkpOworfQorCisvKgorICogRGVwYXJzZSB0aGUg c2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgor ZGVwYXJzZV9TZXFfTWF4dmFsdWUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqbWF4dmFsdWU7CisJY2hh cgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10 ID0gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIk1BWFZBTFVFICV7 dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNl cW1heCk7CisJbWF4dmFsdWUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkJICAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgIm1heHZhbHVlIiwKKwkJCQkJCQkgICJ2YWx1ZSIsIE9ialR5 cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KG1heHZhbHVlKTsK K30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBh cmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9i alRyZWUJICAgKm1pbnZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisK KwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKwll bHNlCisJCWZtdCA9ICJNSU5WQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYo SU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtaW4pOworCW1pbnZhbHVlID0gbmV3X29ianRyZWVf VkEoZm10LCAyLAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtaW52YWx1ZSIs CisJCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdf b2JqZWN0X29iamVjdChtaW52YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5j ZSBPV05FRCBCWSBjb21tYW5kLgorICovCitzdGF0aWMgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9P d25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUp Cit7CisJT2JqVHJlZQkgICAqb3duZWRieSA9IE5VTEw7CisJUmVsYXRpb24JZGVwUmVsOworCVN5 c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsKKwlIZWFwVHVwbGUgICB0dXBs ZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFzc2lk LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0KCZrZXlzWzFdLAorCQkJCUFu dW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1sy XSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1i ZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxl X2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkg IE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFi bGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklkOworCQlGb3JtX3BnX2RlcGVu ZCBkZXBmb3JtOworCQlPYmpUcmVlCSp0bXBvYmo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJ ZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBPbmx5 IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3Jt LT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9y bS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYg KGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsKKworCQlvd25lcklkID0g ZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBm b3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29u dGludWU7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgImF0 dHJuYW1lIiwgY29sbmFtZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgiT1dORUQgQlkg JXtvd25lcn1EIiwKKwkJCQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRtcG9iaik7CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBSZWwsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29sdW1uLCBl bWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQgaXQgd29u J3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFggdGhpcyBz aG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEoIk9XTkVE IEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkJ ICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29i amVjdChvd25lZGJ5KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFJFU1RBUlQg b3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFy dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhKQoreworCU9i alRyZWUJICAgKnJlc3RhcnQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmlu dGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5sYXN0X3ZhbHVlKTsKKwlyZXN0YXJ0ID0gbmV3X29i anRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJyZXN0YXJ0IiwKKwkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVzdGFydCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBTVEFSVCBXSVRIIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpz dGFydHdpdGg7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWlmIChhbHRl cl90YWJsZSkKKwkJZm10ID0gIlNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cyI7CisJZWxzZQorCQlm bXQgPSAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRf Rk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJc3RhcnR3aXRoID0gbmV3X29ianRyZWVfVkEo Zm10LCAyLAorCQkJCQkJCSAgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJ CQkJCSAgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHN0YXJ0d2l0aCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNUT1JB R0Ugb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N0 b3JhZ2UoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVl CSAgICpzdG9yYWdlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkg ICAqc3RyOworCisJc3dpdGNoICh0eXBGb3JtLT50eXBzdG9yYWdlKQorCXsKKwkJY2FzZSAncCc6 CisJCQlzdHIgPSAicGxhaW4iOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJc3RyID0gImV4 dGVybmFsIjsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXN0ciA9ICJleHRlbmRlZCI7CisJ CQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlzdHIgPSAibWFpbiI7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN0b3JhZ2Ugc3BlY2lmaWVyICVjIiwgdHlw Rm9ybS0+dHlwc3RvcmFnZSk7CisJfQorCisJdG1wc3RyID0gcHNwcmludGYoIiVzIiwgc3RyKTsK KworCWZtdCA9ICJTVE9SQUdFID0gJXt2YWx1ZX1zIjsKKworCXN0b3JhZ2UgPSBuZXdfb2JqdHJl ZV9WQShmbXQsIDIsCisJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIs CisJCQkJCQkgICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3Qoc3RvcmFnZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFJF Q0VJVkUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBl X1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpU cmVlCSAgICpyZWNlaXZlOworCisJcmVjZWl2ZSA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl Y2VpdmUsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNl aXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocmVjZWl2ZSwgInByZXNlbnQiLCBm YWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmVjZWl2ZSk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSB0eXBlIFNFTkQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlw Rm9ybSkKK3sKKwlPYmpUcmVlCSAgICpzZW5kOworCisJc2VuZCA9IG5ld19vYmp0cmVlX1ZBKCJT RU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHNl bmQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3Qoc2VuZCwgInByZXNlbnQiLCBmYWxzZSk7CisK KwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qoc2VuZCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSB0eXBlIHR5cG1vZF9pbiBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZv cm0pCit7CisJT2JqVHJlZQkgICAqdHlwbW9kaW47CisKKwl0eXBtb2RpbiA9IG5ld19vYmp0cmVl X1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5 cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodHlwbW9kaW4sICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1v ZGluLCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBt b2Rpbik7Cit9CisKKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX291dCBvcHRpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX091dChP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5 cG1vZG91dDsKKworCXR5cG1vZG91dCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlw bW9kb3V0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9k b3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodHlwbW9kb3V0LCAicHJlc2VudCIs IGZhbHNlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0eXBtb2RvdXQpOworfQorCisK Ky8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBGb3Jt X3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlCSAgICp0eXBhbmFseXplOworCisJdHlwYW5h bHl6ZSA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5h bHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFseXplKSk7CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodHlwYW5hbHl6ZSwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4g bmV3X29iamVjdF9vYmplY3QodHlwYW5hbHl6ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0 eXBlIHN1YnNjcmlwdCBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBh cnNlX1R5cGVfU3Vic2NyaXB0KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0p Cit7CisJT2JqVHJlZQkgICAqdHlwc3Vic2NyaXB0OworCisJdHlwc3Vic2NyaXB0ID0gbmV3X29i anRyZWVfVkEoIlNVQlNDUklQVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3Vic2NyaXB0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2NyaXB0KSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0LCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlhcHBlbmRf Ym9vbF9vYmplY3QodHlwc3Vic2NyaXB0LCAicHJlc2VudCIsIGZhbHNlKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdCh0eXBzdWJzY3JpcHQpOworfQorCisvKgorICogRGVwYXJzZSBhIFJ1 bGVTdG10IChDUkVBVEUgUlVMRSkuCisgKgorICogR2l2ZW4gYSBydWxlIE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIHJ1bGUgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SdWxl U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlSdWxlU3RtdCAqbm9kZSA9 IChSdWxlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkgICAqcnVsZVN0bXQ7CisJT2JqVHJl ZQkgICAqdG1wOworCVJlbGF0aW9uCXBnX3Jld3JpdGU7CisJRm9ybV9wZ19yZXdyaXRlIHJld3JG b3JtOworCUhlYXBUdXBsZQlyZXdyVHVwOworCVN5c1NjYW5EZXNjCXNjYW47CisJU2NhbktleURh dGEJa2V5OworCURhdHVtCQlldl9xdWFsOworCURhdHVtCQlldl9hY3Rpb25zOworCWJvb2wJCWlz bnVsbDsKKwljaGFyCSAgICpxdWFsOworCUxpc3QJICAgKmFjdGlvbnM7CisJTGlzdAkgICAqbGlz dDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0 ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleSwKKwkJCQlB bnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJCQlGX09J REVRLCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVn aW5zY2FuKHBnX3Jld3JpdGUsIFJld3JpdGVPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJCSAgTlVM TCwgMSwgJmtleSk7CisJcmV3clR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcmV3cml0ZSBydWxlIHdpdGggb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwly ZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKworCXJ1bGVT dG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBSVUxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChydWxlU3RtdCwgIiV7b3JfcmVwbGFjZX1zIiwKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9S IFJFUExBQ0UiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVsZVN0bXQsICIle2lk ZW50aXR5fUkiLAorCQkJCQkJIG5vZGUtPnJ1bGVuYW1lKTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJ1bGVTdG10LCAiQVMgT04gJXtldmVudH1zIiwKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBD TURfU0VMRUNUID8gIlNFTEVDVCIgOgorCQkJCQkJIG5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUg PyAiVVBEQVRFIiA6CisJCQkJCQkgbm9kZS0+ZXZlbnQgPT0gQ01EX0RFTEVURSA/ICJERUxFVEUi IDoKKwkJCQkJCSBub2RlLT5ldmVudCA9PSBDTURfSU5TRVJUID8gIklOU0VSVCIgOiAiWFhYIik7 CisJYXBwZW5kX29iamVjdF9vYmplY3QocnVsZVN0bXQsICJUTyAle3RhYmxlfUQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcykpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocnVs ZVN0bXQsICJETyAle2luc3RlYWR9cyIsCisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFE IiA6ICJBTFNPIik7CisKKwlldl9xdWFsID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdf cmV3cml0ZV9ldl9xdWFsLAorCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwg JmlzbnVsbCk7CisJZXZfYWN0aW9ucyA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3BnX3Jl d3JpdGVfZXZfYWN0aW9uLAorCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwZ19yZXdyaXRlKSwg JmlzbnVsbCk7CisKKwlwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChldl9xdWFsLCBldl9hY3Rpb25z LCAmcXVhbCwgJmFjdGlvbnMpOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldIRVJFICV7Y2xh dXNlfXMiLCAwKTsKKworCWlmIChxdWFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJj bGF1c2UiLCBxdWFsKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiY2xh dXNlIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0K KworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJ1bGVTdG10LCAid2hlcmVfY2xhdXNlIiwgdG1wKTsK KworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBhY3Rpb25zKQorCXsKKwkJY2hhciAqYWN0 aW9uID0gbGZpcnN0KGNlbGwpOworCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KGFjdGlvbikpOworCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJ1bGVTdG10LCAiJXth Y3Rpb25zOiwgfXMiLCBsaXN0KTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVf Y2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBydWxlU3RtdDsK K30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAq IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NV dGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFu ZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAq cGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNvbW1hbmQ7CisKKwlBc3NlcnQoY21kLT50eXBlID09 IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQg PSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9leHRlbnNp b24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQorCQly ZXR1cm4gTlVMTDsKKworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhp bmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJz ZXRyZWUpKQorCXsKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9DcmVhdGVTY2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0FsdGVyRG9tYWluU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRG9t YWluU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUu c2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9SZWZyZXNoTWF0Vmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfQ3JlYXRlVHJpZ1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVUcmln U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9SdWxlU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX1J1bGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2Fz ZSBUX0NyZWF0ZUZkd1N0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVGZHdTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRmR3U3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlclNlcVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNl IFRfRGVmaW5lU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0RlZmluZVN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNvbnZlcnNpb25TdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3Jl YXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0Ny ZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25T dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRXh0 ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlckV4dGVuc2lvbkNv bnRlbnRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNT dG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNl Y29uZGFyeU9iamVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlT3BGYW1pbHlTdG10 OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlT3BGYW1pbHkob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVh azsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfSW5kZXhTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUZ1bmN0 aW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUZ1bmN0aW9uKG9iamVjdElkLCBw YXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRnVuY3Rpb25TdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfUmVu YW1lU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyRGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlck9iamVj dFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJCXBhcnNldHJl ZSwKKwkJCQkJCQkJCQkJCQljbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisJCQlicmVh azsKKworCQljYXNlIFRfQWx0ZXJPd25lclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl ck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisJCQlicmVhazsK KworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRl ck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2Ug VF9BbHRlclBvbGljeVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJUeXBlU3Rt dDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgRU5V TSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlUmFuZ2VTdG10OgkvKiBDUkVBVEUg VFlQRSBBUyBSQU5HRSAqLworCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6 CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUNhc3RTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQ3JlYXRlQ2FzdFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKwor CQlkZWZhdWx0OgorCQkJY29tbWFuZCA9IE5VTEw7CisJCQllbG9nKExPRywgInVucmVjb2duaXpl ZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWco cGFyc2V0cmVlKSk7CisJfQorCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBTdWJyb3V0 aW5lIGZvciBDUkVBVEUgVEFCTEUgZGVwYXJzaW5nLgorICoKKyAqIERlYWwgd2l0aCBhbGwgdGhl IHRhYmxlIGVsZW1lbnRzIChjb2x1bW5zIGFuZCBjb25zdHJhaW50cykuCisgKgorICogTm90ZSB3 ZSBpZ25vcmUgY29uc3RyYWludHMgaW4gdGhlIHBhcnNlIG5vZGUgaGVyZTsgdGhleSBhcmUgZXh0 cmFjdGVkIGZyb20KKyAqIHN5c3RlbSBjYXRhbG9ncyBpbnN0ZWFkLgorICovCitzdGF0aWMgTGlz dCAqCitkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxl RWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJICBib29sIHR5cGVkLCBib29sIGNvbXBv c2l0ZSkKK3sKKwlMaXN0CSAgICplbGVtZW50cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwor CWZvcmVhY2gobGMsIHRhYmxlRWxlbWVudHMpCisJeworCQlOb2RlCSAgICplbHQgPSAoTm9kZSAq KSBsZmlyc3QobGMpOworCisJCXN3aXRjaCAobm9kZVRhZyhlbHQpKQorCQl7CisJCQljYXNlIFRf Q29sdW1uRGVmOgorCQkJCXsKKwkJCQkJT2JqVHJlZQkgICAqdHJlZTsKKworCQkJCQl0cmVlID0g dHlwZWQgPworCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQocmVsYXRpb24sIGRwY29udGV4 dCwKKwkJCQkJCQkJCQkJCShDb2x1bW5EZWYgKikgZWx0KSA6CisJCQkJCQlkZXBhcnNlX0NvbHVt bkRlZihyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVt bkRlZiAqKSBlbHQsCisJCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJCQlpZiAodHJlZSAh PSBOVUxMKQorCQkJCQl7CisJCQkJCQlPYmpFbGVtCSpjb2x1bW47CisKKwkJCQkJCWNvbHVtbiA9 IG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1l bnRzLCBjb2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBUX0NvbnN0 cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlk IG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxlbWVu dHM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENvbGxlY3RlZENvbW1hbmQu CisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJjaFBhdGggKm92ZXJyaWRl UGF0aDsKKwlNZW1vcnlDb250ZXh0CW9sZGN4dDsKKwlNZW1vcnlDb250ZXh0CXRtcGN4dDsKKwlP YmpUcmVlCQkgICAqdHJlZTsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlTdHJpbmdJbmZvRGF0YSAg c3RyOworCisJLyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2lu ZyByb3V0aW5lcyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBz cHJpbmtsZSB0aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGU7IGJ1dCBhbGxvY2F0ZQorCSAq IHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJp bmdJbmZvKCZzdHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVt b3J5Q29udGV4dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NT RVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpF LAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVy bHlpbmcgdGhpcyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAq IGluIG9yZGVyIHRvIG9idGFpbiBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIElu IHN1Y2ggcmVzdWx0cywKKwkgKiB3ZSB3YW50IGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlm aWVkLCBzbyB0aGF0IHJlc3VsdHMgYXJlICJwb3J0YWJsZSIKKwkgKiB0byBlbnZpcm9ubWVudHMg d2l0aCBkaWZmZXJlbnQgc2VhcmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QK KwkgKiB3aGF0IHdvdWxkIGJlIHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBh dGggYWxsIG92ZXIgdGhlCisJICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAq LworCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29u dGV4dCk7CisJb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRk Q2F0YWxvZyA9IGZhbHNlOworCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92 ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2VfbW9k ZTsKKworCXN3aXRjaCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJl ZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9B bHRlclRhYmxlOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKKwkJCWJy ZWFrOworCQljYXNlIFNDVF9HcmFudDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3RtdChjbWQp OworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJz ZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFz czoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBl ICVkIiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlm ICh0cmVlKQorCXsKKwkJSnNvbmIgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90b19qc29u Yih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwg SlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCWVsc2UKKwkJY29tbWFuZCA9IE5VTEw7CisKKwkv KgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0lu Zm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBzdHJpbmcgaXMgbm90 IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlN ZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmZi OTcwZjJiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jCkBAIC0wLDAgKzEsNzYzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNv bi5jCisgKgkgIEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRz IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2lu Zm8uaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25i LmgiCisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyLCBpdCBkZXRlcm1pbmVzIGhvdyB3 ZSBleHBhbmQgdGhlIGpzb24gZWxlbWVudCBpbnRvCisgKiBzdHJpbmcuCisgKi8KK3R5cGVkZWYg ZW51bQoreworCVNwZWNUeXBlbmFtZSwKKwlTcGVjT3BlcmF0b3JuYW1lLAorCVNwZWNEb3R0ZWRO YW1lLAorCVNwZWNTdHJpbmcsCisJU3BlY051bWJlciwKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlT cGVjSWRlbnRpZmllciwKKwlTcGVjUm9sZQorfSBjb252U3BlY2lmaWVyOworCisvKgorICogQSB0 ZXJuYXJ5IHZhbHVlIHdoaWNoIHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1ZS4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFsc2UK K30ganNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5kX29uZV9qc29uYl9lbGVtZW50 KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCSBKc29uYlZhbHVlICpqc29udmFs LCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCSBjb25zdCBjaGFyICpmbXQpOworc3Rh dGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwK KwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwKKwkJCQkgICBjb252 U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0 cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOworY2hhciAqZGRsX2RlcGFyc2VfanNvbl90b19z dHJpbmcoY2hhciAqanNvbmIpOworCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmlu ZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0 J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBp dCBkb2Vzbid0CisgKiBleGlzdCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0 dXJuIHRoZSBhY3R1YWwganNvbl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUK K2ZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBj aGFyICprZXluYW1lKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOwor CWpzb25fdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZh bC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5 bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAor CQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1 cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJ a2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZf ZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdp dmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4g a2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmlu ZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9y IGlzIHJhaXNlZCB1bmxlc3MgbWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoK KyAqIElmIGl0IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29w eSBpcyByZXR1cm5lZC4KKyAqCisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQg dG8gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0 cmluZ19pbl9qc29uYmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICpr ZXluYW1lLAorCQkJCQkJCSAgYm9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29u YlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBY WFggdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5 LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXku dmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1 ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOwor CWlmICh2YWx1ZSA9PSBOVUxMKQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVM TDsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIGpzb24g b2JqZWN0Iiwga2V5bmFtZSkpKTsKKwl9CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0 cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0 aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxlbjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsK K30KKworI2RlZmluZSBBRFZBTkNFX1BBUlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7 IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVuZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBl cnJtc2coInVudGVybWluYXRlZCBmb3JtYXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDAp CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBwZ19ldmVudF90cmlnZ2VyX2V4cGFuZF9j b21tYW5kCisgKgorICogRmluZCB0aGUgImZtdCIgZWxlbWVudCBpbiB0aGUgZ2l2ZW4gY29udGFp bmVyLCBhbmQgZXhwYW5kIGl0IGludG8gdGhlCisgKiBwcm92aWRlZCBTdHJpbmdJbmZvLgorICov CitzdGF0aWMgdm9pZAorZXhwYW5kX2ZtdF9yZWN1cnNpdmUoSnNvbmJDb250YWluZXIgKmNvbnRh aW5lciwgU3RyaW5nSW5mbyBidWYpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAq dmFsdWU7CisJY29uc3QgY2hhciAqY3A7CisJY29uc3QgY2hhciAqc3RhcnRfcHRyOworCWNvbnN0 IGNoYXIgKmVuZF9wdHI7CisJaW50CQkJbGVuOworCisJc3RhcnRfcHRyID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoY29udGFpbmVyLCAiZm10IiwgZmFsc2UsICZsZW4pOworCWVuZF9w dHIgPSBzdGFydF9wdHIgKyBsZW47CisKKwlmb3IgKGNwID0gc3RhcnRfcHRyOyBjcCA8IGVuZF9w dHI7IGNwKyspCisJeworCQljb252U3BlY2lmaWVyIHNwZWNpZmllcjsKKwkJYm9vbAkJaXNfYXJy YXkgPSBmYWxzZTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAgICphcnJheXNl cCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCisJCUFEVkFOQ0VfUEFS U0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEg c2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2Fu IHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRv cgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBh ZnRlciBjb2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZv RGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0lu Zm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8g PSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJ Zm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJewor CQkJCQkvKgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50 IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0 b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlh cHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZB TkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisK KwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihj cCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5k X3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQor CQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVM TCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNv bnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKworCQlzd2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAn SSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lkZW50aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNl ICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjRG90dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNwZWNTdHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNl ICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNUeXBlbmFtZTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9IFNwZWNPcGVyYXRvcm5hbWU7CisJCQkJYnJlYWs7 CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOwor CQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVyID0gU3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlk ZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImludmFsaWQgY29udmVyc2lvbiBz cGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOworCQl9CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBl bGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkgKi8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJ CWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFtOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJs ZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmluZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRh aW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisKKwkJLyoKKwkJICogRXhwYW5kIHRoZSBkYXRhIChw b3NzaWJseSBhbiBhcnJheSkgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8uCisJCSAqLworCQlp ZiAoaXNfYXJyYXkpCisJCQlleHBhbmRfanNvbmJfYXJyYXkoYnVmLCBwYXJhbSwgdmFsdWUsIGFy cmF5c2VwLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJCWVsc2UKKwkJCWV4cGFuZF9vbmVfanNv bmJfZWxlbWVudChidWYsIHBhcmFtLCB2YWx1ZSwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCX0K K30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBxdW90ZWQgaWRlbnRpZmllci4g IFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfaWRlbnRpZmllcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZh bCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJp bmcpOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwt PnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRl bnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2 YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUK KyAqIG9iamVjdCBhbmQgbWF5IGNvbnRhaW4gZWxlbWVudHMgInNjaGVtYW5hbWUiIChvcHRpb25h bCksICJvYmpuYW1lIgorICogKG1hbmRhdG9yeSksICJhdHRybmFtZSIgKG9wdGlvbmFsKS4gIERv dWJsZSBxdW90ZXMgYXJlIGFkZGVkIHRvIGVhY2ggZWxlbWVudAorICogYXMgbmVjZXNzYXJ5LCBh bmQgZG90IHNlcGFyYXRvcnMgd2hlcmUgbmVlZGVkLgorICoKKyAqIE9uZSBkYXkgd2UgbWlnaHQg bmVlZCBhICJjYXRhbG9nIiBlbGVtZW50IGFzIHdlbGwsIGJ1dCBubyBjdXJyZW50IHVzZSBjYXNl CisgKiBuZWVkcyB0aGF0LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfZG90dGVk bmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpz dHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwu YmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAo c3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVy KHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkib2JqbmFtZSIs IGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRp ZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJj b250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJhdHRybmFtZSIs IHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIi4l cyIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorfQorCisvKgor ICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHR5cGUgbmFtZS4KKyAqLworc3RhdGljIHZvaWQK K2V4cGFuZF9qc29udmFsX3R5cGVuYW1lKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWNoYXIJICAgKnNjaGVtYSA9IE5VTEw7CisJY2hhcgkgICAqdHlwZW5hbWU7CisJ Y2hhcgkgICAqdHlwbW9kc3RyOworCWpzb25fdHJpdmFsdWUJaXNfYXJyYXk7CisJY2hhcgkgICAq YXJyYXlfZGVjb3I7CisKKwkvKgorCSAqIFdlIG9taXQgc2NoZW1hLXF1YWxpZnlpbmcgdGhlIG91 dHB1dCBuYW1lIGlmIHRoZSBzY2hlbWEgZWxlbWVudCBpcworCSAqIGVpdGhlciB0aGUgZW1wdHkg c3RyaW5nIG9yIE5VTEw7IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGNhc2VzCisJ ICogaXMgdGhhdCBpbiB0aGUgbGF0dGVyIHdlIHF1b3RlIHRoZSB0eXBlIG5hbWUsIGluIHRoZSBm b3JtZXIgd2UgZG9uJ3QuCisJICogVGhpcyBhbGxvd3MgZm9yIHR5cGVzIHdpdGggc3BlY2lhbCB0 eXBtb2QgbmVlZHMsIHN1Y2ggYXMgaW50ZXJ2YWwgYW5kCisJICogdGltZXN0YW1wIChzZWUgZm9y bWF0X3R5cGVfZGV0YWlsZWQpLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGFsbG93aW5nCisJICog Zm9yIHRoZSBzY2hlbWEgbmFtZSB0byBiZSBvbWl0dGVkIGZyb20gdHlwZSBuYW1lcyB0aGF0IHJl cXVpcmUgcXVvdGVzCisJICogYnV0IGFyZSB0byBiZSBvYnRhaW5lZCBmcm9tIGEgdXNlciBzY2hl bWEuCisJICovCisKKwlzY2hlbWEgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29u dmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJICAgInNjaGVtYW5hbWUiLCB0cnVlLCBO VUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxMKTsK Kwl0eXBtb2RzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwu YmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSAgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlzX2Fy cmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0 YSwKKwkJCQkJCQkJCQkgICAidHlwYXJyYXkiKTsKKwlzd2l0Y2ggKGlzX2FycmF5KQorCXsKKwkJ Y2FzZSB0dl90cnVlOgorCQkJYXJyYXlfZGVjb3IgPSAiW10iOworCQkJYnJlYWs7CisKKwkJY2Fz ZSB0dl9mYWxzZToKKwkJCWFycmF5X2RlY29yID0gIiI7CisJCQlicmVhazsKKworCQljYXNlIHR2 X2Fic2VudDoKKwkJZGVmYXVsdDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIHR5 cGFycmF5IGVsZW1lbnQiKSkpOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVMTCkKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIlcyIsIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKwllbHNl IGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHR5 cGVuYW1lKTsgLyogU3BlY2lhbCB0eXBtb2QgbmVlZHMgKi8KKwllbHNlCisJCWFwcGVuZFN0cmlu Z0luZm8oYnVmLCAiJXMuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHNjaGVtYSksCisJCQkJCQkgcXVv dGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVz IiwgdHlwbW9kc3RyID8gdHlwbW9kc3RyIDogIiIsIGFycmF5X2RlY29yKTsKK30KKworLyoKKyAq IEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYW4gb3BlcmF0b3IgbmFtZQorICovCitzdGF0aWMgdm9p ZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpz b252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJj b250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1l IiwgdHJ1ZSwgTlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlp ZiAoc3RyICE9IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQor CisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCisJaWYgKHN0cikK Kwl7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCQlwZnJlZShzdHIpOwor CX0KK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcuICBUaGUgdmFs dWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBvYmplY3QuICBJbiB0aGUg bGF0dGVyIGNhc2UgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisg KiBiZSByZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBh biBlbGVtZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFu c2lvbiBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0 dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWlu ZyBzZXQgdG8gImZhbHNlIi4KKyAqLworc3RhdGljIGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmlu ZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlpZiAoanNvbnZhbC0+ dHlwZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNv bnZhbC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4p OworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJpbmFyeSkKKwl7CisJCWpzb25f dHJpdmFsdWUJcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFp bmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOwor CQkvKgorCQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQgZXhw YW5kcyB0byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQpLCBm YWxsIHRocm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0gdHZf ZmFsc2UpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwllbHNlCisJCXJldHVybiBmYWxzZTsKKwor CXJldHVybiB0cnVlOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmlu ZyBsaXRlcmFsLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfc3RybGl0KFN0cmlu Z0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIgICAqc3RyOworCVN0cmlu Z0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9Y WVpaWVhfIjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVw KGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkv KiBFYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmds ZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcnKSA9PSBOVUxMICYmCisJCXN0cmNocihz dHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBz dHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQg dG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0lu Zm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJ d2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5l eHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyog QWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsK KworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91 dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRl bGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBm cmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGludGVnZXIg cXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5n SW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAqc3RyZGF0dW07CisKKwlz dHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0 LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmljKSkp OworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9CisKKy8qCisgKiBF eHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1YmxpYyBlbGVt ZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBxdW90ZXMpOyBv dGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGluZyBhcyBhbiBp ZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9sZShTdHJpbmdJ bmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwlqc29uX3RyaXZhbHVlCWlzX3B1Ymxp YzsKKworCWlzX3B1YmxpYyA9IGZpbmRfYm9vbF9pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSJpc19wdWJsaWMiKTsKKwlpZiAoaXNfcHVibGlj ID09IHR2X3RydWUpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiUFVCTElDIik7CisJ ZWxzZQorCXsKKwkJY2hhciAqcm9sZW5hbWU7CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0cmluZ19p bl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCQkg InJvbGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCQlpZiAocm9sZW5hbWUpCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJCQlw ZnJlZShyb2xlbmFtZSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgb25lIGpzb24gZWxl bWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8gdGhlCisgKiBjb252 ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRhdGVkLCBhbmQgYW4g ZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQgd2UgZXhwZWN0IGZv ciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBh Y3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBi ZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFuc2lvbikuCisgKi8K K3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNo YXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3Bl Y2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCByZXN1bHQgPSB0cnVlOworCUVycm9y Q29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEg Zm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlp ZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxs YmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRl eHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNr ID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBl cnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJc3dpdGNoIChz cGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYgKGpzb252YWwtPnR5 cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFt LCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRpZmllcihidWYsIGpz b252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToKKwkJCWlmIChqc29u dmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBl Y3RlZCBKU09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJ CQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2RvdHRlZG5hbWUo YnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZzoKKwkJCWlmIChq c29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5cGUgIT0gamJ2Qmlu YXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf UEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIG9y IG9iamVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwg anNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFsX3N0cmluZyhidWYs IGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0ZXJhbDoKKwkJCWlm IChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNn KCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAor CQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3N0cmxp dChidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlwZW5hbWU6CisJCQlp ZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1z ZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwK KwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF90eXBl bmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjT3BlcmF0b3JuYW1l OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVudCBcIiVzXCIsIGdv dCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252 YWxfb3BlcmF0b3IoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY051bWJl cjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJ CQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxlbWVudCBcIiVzXCIs IGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pz b252YWxfbnVtYmVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNSb2xl OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVudCBcIiVzXCIsIGdv dCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252 YWxfcm9sZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYgKGZtdCkKKwkJZXJy b3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisKKwlyZXR1cm4gcmVz dWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2YgYSBKU09OIGFycmF5 LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJpbmdJbmZvIHBlciB0 aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0aGUgZ2l2ZW4KKyAq IHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9hcnJheShTdHJpbmdJ bmZvIGJ1ZiwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNvbmFyciwgY2hhciAq YXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZt dCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0OworCUpzb25iQ29udGFp bmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0OworCUpzb25iVmFsdWUJdjsKKwlp bnQJCQl0eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZvRGF0YSBhcnJheWVs ZW07CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJl cG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4 dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcg PSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0 X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJ aWYgKGpzb25hcnItPnR5cGUgIT0gamJ2QmluYXJ5KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVs ZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWNvbnRhaW5l ciA9IGpzb25hcnItPnZhbC5iaW5hcnkuZGF0YTsKKwlpZiAoIUpzb25Db250YWluZXJJc0FycmF5 KGNvbnRhaW5lcikpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90 IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJaW5pdFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7 CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJd2hpbGUgKCh0eXBlID0g SnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9ET05FKQorCXsKKwkJaWYg KHR5cGUgPT0gV0pCX0VMRU0pCisJCXsKKwkJCXJlc2V0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsK KworCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxlbWVudCgmYXJyYXllbGVtLCBwYXJhbSwgJnYs IHNwZWNpZmllciwgTlVMTCkpCisJCQl7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsIGFycmF5c2VwKTsKKworCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0lu Zm8oYnVmLCBhcnJheWVsZW0uZGF0YSwgYXJyYXllbGVtLmxlbik7CisJCQkJZmlyc3QgPSBmYWxz ZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmbXQpCisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBz cWxlcnJjb250ZXh0LnByZXZpb3VzOworfQorCisvKgorICogV29ya2hvcnNlIGZvciBkZGxfZGVw YXJzZV9leHBhbmRfY29tbWFuZC4KKyAqLworY2hhciAqCitkZGxfZGVwYXJzZV9qc29uX3RvX3N0 cmluZyhjaGFyICpqc29uX3N0cikKK3sKKwlEYXR1bQkJZDsKKwlKc29uYgkgICAqanNvbmI7CisJ U3RyaW5nSW5mbyBidWYgPSAoU3RyaW5nSW5mbykgcGFsbG9jMChzaXplb2YoU3RyaW5nSW5mb0Rh dGEpKTsKKworCWluaXRTdHJpbmdJbmZvKGJ1Zik7CisKKwlkID0gRGlyZWN0RnVuY3Rpb25DYWxs MShqc29uYl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIg KikgRGF0dW1HZXRQb2ludGVyKGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpzb25iLT5y b290LCBidWYpOworCisJcmV0dXJuIGJ1Zi0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVy bnMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3Rh cnRpbmcgcG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBz dHJpbmcpLgorICogVGhpcyBmb3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3IgbW9yZSAl LWVzY2FwZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBp biB7IH0sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZv bGxvd2VkIGJ5IGEgY29udmVyc2lvbiBzcGVjaWZpZXIuICBQb3NzaWJsZSBjb252ZXJzaW9uIHNw ZWNpZmllcnMgYXJlOgorICoKKyAqICUJCWV4cGFuZCB0byBhIGxpdGVyYWwgJS4KKyAqIEkJCWV4 cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVyCisgKiBECQlleHBhbmQg YXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJZXhwYW5kIGFzIGEgdHlw ZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQorICogTAkJZXhwYW5kIGFz IGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90ZXMpCisgKiBzCQlleHBh bmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJZXhwYW5kIGFzIGEgc2lt cGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAocG9z c2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUgZWxlbWVudCBuYW1lIG1h eSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9uIHByZWNlZGVkCisgKiBi eSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIGV4 cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBzZXBhcmF0b3IgaXMgdXNl ZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisgKi8KK0RhdHVtCitkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQoreworCXRleHQJICAgKmpz b24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25fc3RyOworCisJanNvbl9z dHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdf dG9fdGV4dChkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoK KyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNp b24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywg aWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2 b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcg XCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IDk5 YzlmOTFjYmEuLjQyMDVkZGEyMjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2 ICsxNzA4LDM5IEBAIHByb2Nlc3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25l ZF9ieSwgYm9vbCBmb3JfaWRlbnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xv Y2spOwogfQogCisvKgorICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisg Ki8KK0Zvcm1fcGdfc2VxdWVuY2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVu Y2VJZCkKK3sKKwlCdWZmZXIgICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9u ICAgIHNlcXJlbDsKKwlIZWFwVHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2Vf ZGF0YSBzZXE7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5k IEFjY2Vzc1NoYXJlTG9jayBzZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwg JmVsbSwgJnNlcXJlbCk7CisKKwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0 VXNlcklkKCksCisJCQlBQ0xfU0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNM Q0hFQ0tfT0spCisJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZG SUNJRU5UX1BSSVZJTEVHRSksCisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBz ZXF1ZW5jZSAlcyIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsK KworCXNlcSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRT ZXEgPSBwYWxsb2Moc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNw eShyZXRTZXEsIHNlcSwgc2l6ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7 CisKKwlyZXR1cm4gcmV0U2VxOworfQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRl cnMgaW4gYSBsaXN0IG9mIHRoZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2Zvcm1hdF90eXBlLmMKaW5kZXggMjkxOGZkYmZiNi4uZjY0YTcyMTNiNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1 dGlscy9udW1lcmljLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAotc3RhdGljIGNo YXIgKnByaW50VHlwbW9kKGNvbnN0IGNoYXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5 cG1vZG91dCk7CiAKIAogLyoKQEAgLTM2Myw3ICszNjIsNyBAQCBmb3JtYXRfdHlwZV93aXRoX3R5 cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0eXBtb2QgZGVj b3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIg KgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlw bW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCmluZGV4IDZk NGMxYzI3YTUuLjZiMjM2ZTVmMTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y ZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDQsNiAr NDQsOCBAQAogc3RhdGljIHZvaWQgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3Ry aW5nLCBib29sIGFsbG93Tm9uZSwKIAkJCQkJCQkJIExpc3QgKipuYW1lcywgaW50ICpuYXJncywg T2lkICphcmd0eXBlcyk7CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRl cm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sCisJCQkJCQkJCQkJICAgU3RyaW5nSW5mbyBidWYs IGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJIFVTRVIg SS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgpAQCAtMzMxLDYgKzMzMywyOSBAQCBmb3JtYXRf cHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJlX29pZCkKIAlyZXR1cm4gZm9ybWF0X3By b2NlZHVyZV9leHRlbmRlZChwcm9jZWR1cmVfb2lkLCBGT1JNQVRfUFJPQ19GT1JDRV9RVUFMSUZZ KTsKIH0KIAorLyoKKyAqIGZvcm1hdF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJvYyBP SUQgdG8gIihhcmdzKSIKKyAqLworY2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHBy b2NlZHVyZV9vaWQsIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7 CisJSGVhcFR1cGxlICAgcHJvY3R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlwcm9j dHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2VkdXJl X29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQpOwor CXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisJZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nmb3Jt LCAmYnVmLCBmb3JjZV9xdWFsaWZ5KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwor CXJldHVybiBidWYuZGF0YTsKK30KKwogLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQg LSBjb252ZXJ0cyBwcm9jZWR1cmUgT0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCkBAIC0yMDYw LDMgKzIwODUsMzAgQEAgcGFyc2VOYW1lQW5kQXJnVHlwZXMoY29uc3QgY2hhciAqc3RyaW5nLCBi b29sIGFsbG93Tm9uZSwgTGlzdCAqKm5hbWVzLAogCiAJcGZyZWUocmF3bmFtZSk7CiB9CisKKy8q CisgKiBBcHBlbmQgdGhlIHBhcmVudGhpc2VkIGFyZ3VtZW50cyBvZiB0aGUgZ2l2ZW4gcGdfcHJv YyByb3cgaW50byB0aGUgb3V0cHV0CisgKiBidWZmZXIuICBmb3JjZV9xdWFsaWZ5IGluZGljYXRl cyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5cGUgbmFtZXMKKyAqIHJlZ2FyZGxlc3Mgb2Yg dmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRl cm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJv b2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlpOworCWludAkJCW5hcmdzID0gcHJvY2Zvcm0t PnByb25hcmdzOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKCcpOworCWZvciAoaSA9 IDA7IGkgPCBuYXJnczsgaSsrKQorCXsKKwkJT2lkCQkJdGhpc2FyZ3R5cGUgPSBwcm9jZm9ybS0+ cHJvYXJndHlwZXMudmFsdWVzW2ldOworCisJCWlmIChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJywnKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsCisJCQkJCQkJ ICAgZm9yY2VfcXVhbGlmeSA/CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKHRo aXNhcmd0eXBlKSA6CisJCQkJCQkJICAgZm9ybWF0X3R5cGVfYmUodGhpc2FyZ3R5cGUpKTsKKwl9 CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1 dGlscy5jCmluZGV4IGM0MTg0MDM1MzcuLmQxMDgxZjYxYTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKQEAgLTM1OCw3ICszNTgsNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2Fy Z3VtZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9v bCBwcmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHBy aW50X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsK IHN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFw VHVwbGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmlu Z0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25h bWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJ CQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9y X3F1ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODIsMjIg KzQ4MSwxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRi bEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQp Owogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFi bGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9p ZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJ CQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5v ZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1 YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4 dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBj aGFyICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7 CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlk KTsKLXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBu YXJncywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJ Ym9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VF eHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRv cl9uYW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRf Y2FzdF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0 ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3Rv X3RleHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJl bGlkKTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSBy ZWxvcHRpb25zKTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIi IDogIk9OTFkgIikKQEAgLTU0NSw2ICs1MzcsNzcgQEAgcGdfZ2V0X3J1bGVkZWZfZXh0KFBHX0ZV TkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0K IAorLyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBjb3JyZXNwb25kaW5nIHRvIGEgcnVsZSdz IHBnX3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2FjdGlvbiBjb2x1bW5zLCByZXR1cm4gdGhl aXIgdGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBhcyBhIHNpbmdsZQorICogc3RyaW5nIGlu IHdoZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBMaXN0IG9mIHN0cmluZ3MgKHdoaWNoIG1p Z2h0IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElORykgaW4gYWN0aW9ucy4KKyAqLwordm9p ZAorcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwgRGF0dW0gZXZfYWN0aW9u LAorCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0aW9ucykKK3sKKwlpbnQgcHJl dHR5RmxhZ3MgPSAwOworCWNoYXIgKnF1YWxzdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X3F1 YWwpOworCWNoYXIgKmFjdGlvbnN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZfYWN0aW9uKTsK KwlMaXN0ICphY3Rpb25Ob2RlTGlzdCA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShhY3Rpb25zdHIp OworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWlmIChz dHJsZW4ocXVhbHN0cikgPiAwICYmIHN0cmNtcChxdWFsc3RyLCAiPD4iKSAhPSAwKQorCXsKKwkJ Tm9kZQkgICAqcXVhbDsKKwkJUXVlcnkJICAgKnF1ZXJ5OworCQlkZXBhcnNlX2NvbnRleHQgY29u dGV4dDsKKwkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKworCQlxdWFsID0gc3RyaW5nVG9Ob2Rl KHF1YWxzdHIpOworCisJCXF1ZXJ5ID0gKFF1ZXJ5ICopIGxpbml0aWFsKGFjdGlvbk5vZGVMaXN0 KTsKKwkJcXVlcnkgPSBnZXRJbnNlcnRTZWxlY3RRdWVyeShxdWVyeSwgTlVMTCk7CisKKwkJQWNx dWlyZVJld3JpdGVMb2NrcyhxdWVyeSwgZmFsc2UsIGZhbHNlKTsKKworCQljb250ZXh0LmJ1ZiA9 ICZidWY7CisJCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCQljb250 ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKwkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwkJ Y29udGV4dC52YXJwcmVmaXggPSAobGlzdF9sZW5ndGgocXVlcnktPnJ0YWJsZSkgIT0gMSk7CisJ CWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHlGbGFnczsKKwkJY29udGV4dC53cmFwQ29sdW1u ID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKwkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlO REVOVF9TVEQ7CisKKwkJc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KCZkcG5zLCBxdWVyeSwgTklMKTsK KworCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxzZSk7CisKKwkJKndoZXJlQ2xh dXNlID0gcHN0cmR1cChidWYuZGF0YSk7CisJfQorCWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVM TDsKKworCWlmIChsaXN0X2xlbmd0aChhY3Rpb25Ob2RlTGlzdCkgPT0gMCkKKwkJKmFjdGlvbnMg PSBOSUw7CisJZWxzZQorCXsKKwkJTGlzdENlbGwgKmNlbGw7CisJCUxpc3QJKm91dHB1dCA9IE5J TDsKKworCQlmb3JlYWNoKGNlbGwsIGFjdGlvbk5vZGVMaXN0KQorCQl7CisJCQlRdWVyeQkqcXVl cnkgPSAoUXVlcnkgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAocXVlcnktPmNvbW1hbmRUeXBl ID09IENNRF9OT1RISU5HKQorCQkJCWNvbnRpbnVlOworCisJCQlyZXNldFN0cmluZ0luZm8oJmJ1 Zik7CisJCQlnZXRfcXVlcnlfZGVmKHF1ZXJ5LCAmYnVmLCBOSUwsIE5VTEwsIHRydWUsCisJCQkJ CQkgIHByZXR0eUZsYWdzLCBXUkFQX0NPTFVNTl9ERUZBVUxULCAwKTsKKwkJCW91dHB1dCA9IGxh cHBlbmQob3V0cHV0LCBwc3RyZHVwKGJ1Zi5kYXRhKSk7CisJCX0KKwkJKmFjdGlvbnMgPSBvdXRw dXQ7CisJfQorfQogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1 bGVvaWQsIGludCBwcmV0dHlGbGFncykKQEAgLTEwMTUsNjUgKzEwNzgsMTIgQEAgcGdfZ2V0X3Ry aWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCWlmICghaXNudWxsKQog CXsKIAkJTm9kZQkgICAqcXVhbDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJZGVwYXJzZV9jb250ZXh0 IGNvbnRleHQ7Ci0JCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJhbmdlVGJsRW50cnkgKm9s ZHJ0ZTsKLQkJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmJ1ZiwgIldIRU4gKCIpOworCQljaGFyICAgICAgICpxdWFsc3RyOwogCiAJCXF1YWwgPSBz dHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlxdWFsc3RyID0gcGdf Z2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0dHkpOwogCi0JCXJlbGtp bmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0KLQkJLyogQnVpbGQgbWlu aW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCi0JCW9sZHJ0ZSA9IG1ha2VOb2Rl KFJhbmdlVGJsRW50cnkpOwotCQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW9s ZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQlvbGRydGUtPnJlbGtpbmQgPSByZWxr aW5kOwotCQlvbGRydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQlvbGRydGUt PmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOwotCQlvbGRydGUtPmVyZWYgPSBvbGRydGUt PmFsaWFzOwotCQlvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xkcnRlLT5pbmggPSBmYWxz ZTsKLQkJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJbmV3cnRlID0gbWFrZU5vZGUoUmFu Z2VUYmxFbnRyeSk7Ci0JCW5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJbmV3cnRl LT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7 Ci0JCW5ld3J0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW5ld3J0ZS0+YWxp YXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxp YXM7Ci0JCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQluZXdydGUtPmluaCA9IGZhbHNlOwot CQluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0d28tZWxlbWVudCBydGFi bGUgKi8KLQkJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwotCQlkcG5zLnJ0YWJsZSA9 IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOwotCQlkcG5zLnN1YnBsYW5zID0gTklMOwotCQlk cG5zLmN0ZXMgPSBOSUw7Ci0JCWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7Ci0JCXNldF9ydGFibGVf bmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Ci0JCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5z KTsKLQotCQkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAq LwotCQljb250ZXh0LmJ1ZiA9ICZidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFr ZTEoJmRwbnMpOwotCQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29udGV4dC53aW5k b3dUTGlzdCA9IE5JTDsKLQkJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOwotCQljb250ZXh0LnBy ZXR0eUZsYWdzID0gR0VUX1BSRVRUWV9GTEFHUyhwcmV0dHkpOwotCQljb250ZXh0LndyYXBDb2x1 bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwotCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZ SU5ERU5UX1NURDsKLQkJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7 Ci0JCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0X3J1bGVfZXhwcihxdWFs LCAmY29udGV4dCwgZmFsc2UpOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikg Iik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAiLCBxdWFsc3RyKTsKIAl9 CiAKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJFWEVDVVRFIEZVTkNUSU9OICVzKCIsCkBAIC0x MTE0LDYgKzExMjQsNjQgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJv b2wgcHJldHR5KQogCXJldHVybiBidWYuZGF0YTsKIH0KIAorY2hhciAqCitwZ19nZXRfdHJpZ2dl cl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLCBOb2RlICp3aGVuQ2xhdXNlLCBi b29sIHByZXR0eSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJY2hhciAgICAgICAgcmVsa2lu ZDsKKwlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKKwlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwor CVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKKwlSYW5nZVRibEVudHJ5ICpuZXdydGU7CisKKyAgIGlu aXRTdHJpbmdJbmZvKCZidWYpOworCisgICByZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdy ZWMtPnRncmVsaWQpOworCisgICAvKiBCdWlsZCBtaW5pbWFsIE9MRCBhbmQgTkVXIFJURXMgZm9y IHRoZSByZWwgKi8KKyAgIG9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworICAgb2xk cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworICAgb2xkcnRlLT5yZWxpZCA9IHRyaWdyZWMt PnRncmVsaWQ7CisgICBvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOworICAgb2xkcnRlLT5hbGlh cyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKyAgIG9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxp YXM7CisgICBvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKKyAgIG9sZHJ0ZS0+aW5oID0gZmFsc2U7 CisgICBvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKKworICAgbmV3cnRlID0gbWFrZU5vZGUoUmFu Z2VUYmxFbnRyeSk7CisgICBuZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBuZXdy dGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKyAgIG5ld3J0ZS0+cmVsa2luZCA9IHJlbGtp bmQ7CisgICBuZXdydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOworICAgbmV3cnRl LT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKyAgIG5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAg bmV3cnRlLT5pbmggPSBmYWxzZTsKKyAgIG5ld3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICAv KiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KKyAgIG1lbXNldCgmZHBucywgMCwgc2l6ZW9m KGRwbnMpKTsKKyAgIGRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Cisg ICBkcG5zLmN0ZXMgPSBOSUw7CisgICBzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwp OworICAgc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOworCisgICAvKiBTZXQgdXAgY29u dGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLworICAgY29udGV4dC5idWYgPSAm YnVmOworICAgY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgmZHBucyk7CisgICBjb250 ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKyAgIGNvbnRleHQud2luZG93VExpc3QgPSBOSUw7Cisg ICBjb250ZXh0LnZhcnByZWZpeCA9IHRydWU7CisgICBjb250ZXh0LnByZXR0eUZsYWdzID0gcHJl dHR5ID8gUFJFVFRZRkxBR19QQVJFTiB8IFBSRVRUWUZMQUdfSU5ERU5UIDogUFJFVFRZRkxBR19J TkRFTlQ7CisgICBjb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOworICAg Y29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7CisgICBjb250ZXh0LnNwZWNp YWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKKworICAgZ2V0X3J1bGVfZXhwcih3aGVuQ2xh dXNlLCAmY29udGV4dCwgZmFsc2UpOworCisgICByZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8qIC0t LS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0gR2V0IHRoZSBkZWZpbml0aW9uIG9mIGFu IGluZGV4CiAgKgpAQCAtMTg4MCw2ICsxOTQ4LDEzIEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVt bnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29y a2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFsc2UpOwogfQogCisvKiBJbnRlcm5hbCB2 ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24gKi8K K2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9pZCByZWxpZCkKK3sKKwlyZXR1cm4g cGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCAwLCBmYWxzZSwgZmFsc2UpOworfQorCiAv KgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBhIHBhcnRpdGlvbiBrZXkgZGVm aW5pdGlvbi4KICAqLwpAQCAtMjEzMSw2ICsyMjA2LDE1IEBAIHBnX2dldF9jb25zdHJhaW50ZGVm X2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3RyaW5nX3RvX3RleHQo cmVzKSk7CiB9CiAKKy8qCisgKiBJbnRlcm5hbCB2ZXJzaW9uIHRoYXQgcmV0dXJucyBkZWZpbml0 aW9uIG9mIGEgQ09OU1RSQUlOVCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFp bnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30K KwogLyoKICAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJM RSAuLi4gQUREIENPTlNUUkFJTlQgY29tbWFuZAogICovCkBAIC0zNTAxLDcgKzM1ODUsNyBAQCBw Z19nZXRfZnVuY3Rpb25fYXJnX2RlZmF1bHQoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5f VEVYVF9QKHN0cmluZ190b190ZXh0KHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAordm9pZAogcHJp bnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApCiB7 CiAJaW50CQkJbnVtYXJnczsKQEAgLTExMzg0LDcgKzExNDY4LDcgQEAgZ2V0X3RhYmxlc2FtcGxl X2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVzYW1wbGUsIGRlcGFyc2VfY29udGV4dCAqY29u dGV4dCkKICAqIGFjdHVhbF9kYXRhdHlwZS4gIChJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzIGJlaGF2 aW9yLCBqdXN0IHBhc3MKICAqIEludmFsaWRPaWQgZm9yIGFjdHVhbF9kYXRhdHlwZS4pCiAgKi8K LXN0YXRpYyB2b2lkCit2b2lkCiBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0 dWFsX2RhdGF0eXBlLAogCQkJCSBTdHJpbmdJbmZvIGJ1ZikKIHsKQEAgLTExNzc4LDcgKzExODYy LDcgQEAgZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKQogICoKICAq IFRoZSByZXN1bHQgaW5jbHVkZXMgYWxsIG5lY2Vzc2FyeSBxdW90aW5nIGFuZCBzY2hlbWEtcHJl Zml4aW5nLgogICovCi1zdGF0aWMgY2hhciAqCitjaGFyICoKIGdlbmVyYXRlX2Z1bmN0aW9uX25h bWUoT2lkIGZ1bmNpZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywK IAkJCQkJICAgYm9vbCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAogCQkJCQkg ICBQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpCkBAIC0xMjE2NCw3ICsxMjI0OCw3IEBA IGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxvcHRpb25zKQogLyoKICAq IEdlbmVyYXRlIGEgQyBzdHJpbmcgcmVwcmVzZW50aW5nIGEgcmVsYXRpb24ncyByZWxvcHRpb25z LCBvciBOVUxMIGlmIG5vbmUuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZmxhdHRlbl9y ZWxvcHRpb25zKE9pZCByZWxpZCkKIHsKIAljaGFyCSAgICpyZXN1bHQgPSBOVUxMOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKaW5kZXggNjhiYjAzMmQzZS4uMmM4NzEwNmVlZiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CkBAIC0xMTgyMyw0ICsxMTgyMywxMCBAQAogICBwcm9yZXR0eXBlID0+ICdi eXRlYScsIHByb2FyZ3R5cGVzID0+ICdwZ19icmluX21pbm1heF9tdWx0aV9zdW1tYXJ5JywKICAg cHJvc3JjID0+ICdicmluX21pbm1heF9tdWx0aV9zdW1tYXJ5X3NlbmQnIH0sCiAKK3sgb2lkID0+ ICc0NjQyJywgZGVzY3IgPT4gJ2RlcGFyc2UgdGhlIERETCBjb21tYW5kIGludG8ganNvbiBmb3Jt YXQgc3RyaW5nJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5 cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMg PT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdl eHBhbmQganNvbiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAorICBwcm9uYW1l ID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAor ICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2Nv bW1hbmQnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5o IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAppbmRleCBiM2IwNGNjZmE5Li5jMmIx Y2EzMmY2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTU0LDYgKzU0LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgeGxfc2VxX3JlYwogZXh0ZXJuIGludDY0IG5leHR2YWxfaW50ZXJuYWwoT2lkIHJl bGlkLCBib29sIGNoZWNrX3Blcm1pc3Npb25zKTsKIGV4dGVybiBEYXR1bSBuZXh0dmFsKFBHX0ZV TkNUSU9OX0FSR1MpOwogZXh0ZXJuIExpc3QgKnNlcXVlbmNlX29wdGlvbnMoT2lkIHJlbGlkKTsK K2V4dGVybiBGb3JtX3BnX3NlcXVlbmNlX2RhdGEgZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2Vx dWVuY2VJZCk7CiAKIGV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZVNlcXVlbmNlKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlU2VxU3RtdCAqc2VxKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFs dGVyU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1ZGUvdGNv cC9kZGxfZGVwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJk ZmRmNDdlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKQEAgLTAsMCArMSwyMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFy c2UuaAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5j bHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lm bmRlZiBERExfREVQQVJTRV9ICisjZGVmaW5lIERETF9ERVBBUlNFX0gKKworI2luY2x1ZGUgInRj b3AvZGVwYXJzZV91dGlsaXR5LmgiCisKK2V4dGVybiBjaGFyICpkZXBhcnNlX3V0aWxpdHlfY29t bWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKTsKK2V4dGVybiBj aGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CitleHRlcm4gY2hh ciAqZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNo YXIgKm9iamVjdHR5cGUsCisJCQkJCQkJCSAgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKTsKKworCisj ZW5kaWYJCS8qIERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3Av ZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmlu ZGV4IDk0ZGUxM2Q5OTAuLmI1MzI5NGJmNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3Av ZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHku aApAQCAtNjIsNiArNjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsK IAkJCU9pZAkJCW9iamVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7 CiAJCQlMaXN0CSAgICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91dGlscy9h Y2xjaGtfaW50ZXJuYWwuaAppbmRleCAzNjEyODRkOGViLi40ZTAyMGVmNGFlIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS91 dGlscy9hY2xjaGtfaW50ZXJuYWwuaApAQCAtMzksNiArMzksNyBAQCB0eXBlZGVmIHN0cnVjdAog CUxpc3QJICAgKmdyYW50ZWVzOwogCWJvb2wJCWdyYW50X29wdGlvbjsKIAlEcm9wQmVoYXZpb3Ig YmVoYXZpb3I7CisJT2lkCQkJZ3JhbnRvcl91aWQ7CiB9IEludGVybmFsR3JhbnQ7CiAKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L2J1aWx0aW5zLmgKaW5kZXggODE2MzFmMTY0NS4uNzE1MGZhYmQyNCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlu cy5oCkBAIC0xMTQsMTAgKzExNCwxMiBAQCBleHRlcm4gRGF0dW0gbnVtZXJpY19mbG9hdDhfbm9f b3ZlcmZsb3coUEdfRlVOQ1RJT05fQVJHUyk7CiAjZGVmaW5lIEZPUk1BVF9UWVBFX0ZPUkNFX1FV QUxJRlkJMHgwNAkvKiBmb3JjZSBxdWFsaWZpY2F0aW9uIG9mIHR5cGUgKi8KICNkZWZpbmUgRk9S TUFUX1RZUEVfSU5WQUxJRF9BU19OVUxMCTB4MDgJLyogTlVMTCBpZiB1bmRlZmluZWQgKi8KIGV4 dGVybiBjaGFyICpmb3JtYXRfdHlwZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVt b2QsIGJpdHMxNiBmbGFncyk7CitleHRlcm4gY2hhciAqZm9ybWF0X3Byb2NlZHVyZV9hcmdzKE9p ZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiBleHRlcm4gY2hhciAqZm9y bWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZV9x dWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV93aXRoX3R5 cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4dGVybiBjaGFyICpwcmludFR5 cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwog CiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBl bW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmggYi9zcmMv aW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCA3ZDQ4OTcxOGEzLi4zY2JjYTQ4Zjg1IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysgYi9zcmMvaW5jbHVk ZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTMsNiArMTMsNyBAQAogI2lmbmRlZiBSVUxFVVRJTFNf SAogI2RlZmluZSBSVUxFVVRJTFNfSAogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgi CiAjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgi CiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgpAQCAtMjMsMTIgKzI0LDE5IEBAIHN0cnVjdCBQ bGFubmVkU3RtdDsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9zdHJpbmcoT2lkIGlu ZGV4cmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRl eHJlbGlkLCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3RyaWdnZXJfd2hlbmNs YXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3JlYywKKwkJCQkJCQkJCSAgIE5vZGUgKndoZW5DbGF1 c2UsIGJvb2wgcHJldHR5KTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcXVlcnlkZWYoUXVlcnkgKnF1 ZXJ5LCBib29sIHByZXR0eSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9jb2x1 bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5 ZGVmX3NpbXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0Y29uc3RyZGVm X3N0cmluZyhPaWQgcGFydGl0aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4dGVybiBjaGFy ICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJu IGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBjb25zdHJhaW50 SWQpOworZXh0ZXJuIHZvaWQgcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwg RGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJCQkgICBjaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiph Y3Rpb25zKTsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpleHByLCBM aXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hvd2ltcGxp Y2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIgKmFsaWFz bmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzQ4LDE2IEBAIGV4dGVybiBMaXN0ICpzZWxlY3Rf cnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJIEJpdG1h cHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShP aWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xh c3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNpZCwgaW50 IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJvb2wgaGFz X3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJCQlQYXJz ZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0 Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFz c19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSAgU3RyaW5n SW5mbyBidWYpOworZXh0ZXJuIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwog CiBleHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0 aWQpOworZXh0ZXJuIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1Ziwg SGVhcFR1cGxlIHByb2N0dXApOwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggOTdjOWJjMTg2MS4uZWYxNjg2OTRhMSAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MTAsNiArMTYxMCw5IEBAIE9TSW5mbwogT1NTTENp cGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2JqVHJlZQorT2JqVHlwZQog T2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2VhcmNoCiBPYmplY3RBY2Nl c3NQb3N0QWx0ZXIKQEAgLTMxNzYsNiArMzE3OSw3IEBAIGNvbG9ybWFwcmFuZ2UKIGNvbXBhcmVf Y29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQK K2NvbnZTcGVjaWZpZXIKIGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAogY29weV9kYXRhX3NvdXJj ZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoyLjMyLjAKCg== --0000000000006b44e305e9e034cc--