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 1ob30t-0003Gy-HX for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Sep 2022 16:55:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ob30s-00085A-9q for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Sep 2022 16:55:54 +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 1ob30r-00084w-EU for pgsql-hackers@lists.postgresql.org; Wed, 21 Sep 2022 16:55:53 +0000 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ob30o-0006hh-4g for pgsql-hackers@lists.postgresql.org; Wed, 21 Sep 2022 16:55:53 +0000 Received: by mail-pf1-x42f.google.com with SMTP id y136so6545586pfb.3 for ; Wed, 21 Sep 2022 09:55:49 -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=92rjlZbC2LpzJrir/jd1jJmUF4QkpPVZgKTATIq+F5o=; b=Lb11IN03SGP/L+SLtznj00CJpsdeHV5HBZEwII9IjkUIsinf4R4CEGn2R+kJ20J0J7 /pGPT4E4ZR/Vz9dNrpc6oiMEB44G5QQvj0147lU8JAKswY2n0f6SRN1VmYAHaQ8Vpnnz xWGRlRjV2fNJBjXxZwOcZ7uHgMt3bNo4GvN58G2BY5+/Q53s96KkuGxb24jgMuFsl4+N wDm8D/6lAEljLHPWH6SBKxbp/JOfj+useC38Nejw9t+0IsDvsn6pEpagKbscIWc/2HxB 9yLmU4g6M7vZOoHD2jqfKpku87RFFxDX/TdVPe0U7nkAq48KPGHWoxerByi02USEW0S2 ssfQ== 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=92rjlZbC2LpzJrir/jd1jJmUF4QkpPVZgKTATIq+F5o=; b=epjuVM9nd9EY0pUYWpCR+R5UW3ATqnUEvHTS3f3OjKQLrJBHbAZm39GKB5PKrpM1sx VvD9RPZbBoqGvH5cw0X2WuYQu5q2A4mz9bmA5HrkokkLkdD8oIUubYPU2b0FJrUr/8sy knnYjhTbZk1PMeSzRqyU2yUjsAvB8kl6ZR7iK5v8gYX96NyaBnk9qa+cddNqAEl8eqZi YG03/S0PjY8HnTUJsWxXHJ0P2ZB/Mx/Mxq6o4eXUetO5u5PGKEoV/AQEEXzvlZidy7vI aFNCvBsd7yM49E4GTw4UZCWiBYnSXRBFElM2L5aEJMBEhJRaQLd2Es52MkRcWE7eEcEX SBZw== X-Gm-Message-State: ACrzQf2RcFEUtC9BA6aqrlpLEQdG/T030zcuhfqoW1VQWTCUDLQ3+9oS 01QcR4MuWNryYM4ThuBN36mXPtciUurjtPcFqC8= X-Google-Smtp-Source: AMsMyM5zsJcATgLrIlXHCnvfgqgc/jsCcjaC5hDd7mdZfeR+WIu4Zrozsk6W6D0T6B3FkYEFOcgQ72lgIOKFeLyKjFQ= X-Received: by 2002:a63:e105:0:b0:438:b084:78ad with SMTP id z5-20020a63e105000000b00438b08478admr25281299pgh.391.1663779347572; Wed, 21 Sep 2022 09:55:47 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Zheng Li Date: Wed, 21 Sep 2022 12:55:35 -0400 Message-ID: Subject: Re: Support logical replication of DDLs To: Ajin Cherian Cc: "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="0000000000000016cf05e932d1b9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000016cf05e932d1b9 Content-Type: text/plain; charset="UTF-8" Hello, Attaching support for TEXT SEARCH commands, which includes: -CREATE TEXT SEARCH CONFIGURATION/PARSER/DICTIONARY/TEMPLATE -DROP TEXT SEARCH CONFIGURATION/PARSER/DICTIONARY/TEMPLATE -ALTER TEXT SEARCH CONFIGURATION and ALTER TEXT SEARCH DICTIONARY -ALTER TEXT SEARCH RENAME CONFIGURATION/PARSER/DICTIONARY/TEMPLATE Regards, Zheng On Tue, Sep 20, 2022 at 10:57 AM Ajin Cherian wrote: > > On Thu, Sep 15, 2022 at 10:38 PM Ajin Cherian wrote: > > > > On Tue, Sep 6, 2022 at 12:18 AM Ajin Cherian wrote: > > > > > > On Mon, Aug 29, 2022 at 4:14 PM Ajin Cherian wrote: > > > > > > > > > > Attaching support for CREATE/ALTER/DROP EXTENSION ddl deparsing and replication. > One of the issues faced during replication of "CREATE EXTENSION.." was > that it internally > results in internally generated commands to create functions, > operators etc. If these > sql commands are replicated, then the actual "create extension" > command when replicated > will error out because of duplication. To avoid this, I used the > "in_extension" variable in the > "collected command" which is set when an extension is being created. > If this variable is set, then > avoid sql commands other than "CREATE EXTENSION" from being replicated. > > > This patch-set also adds a 5th patch from Vignesh C for supporting the > "GRANT" command. > > However the following global objects are not supported: > 1) Foreign data wrapper > 2) parameter - ex: grant all on parameter wal_buffers TO test; > 3) tablespace - ex: grant create on tablespace tbs1 to test; > 4) database - ex: grant all on database postgres to test; > 5) role - ex: grant test to test1; -- no event trigger for global objects > > Thanks Vignesh! > > regards, > Ajin Cherian > Fujitsu Australia --0000000000000016cf05e932d1b9 Content-Type: application/octet-stream; name="v23-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v23-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8bv87uy2 RnJvbSA4ZjliZWMyZGNjYzVlODYxNDA4NDE5ZDcyNjc2ZWUzODM4MTliYmM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6NTM6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IDMvNl0gU3VwcG9ydCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8KClRoZSBtYWluIGlkZWEg 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 c2UuYwppbmRleCAxNDg0NTVlNDhkLi5mMGQzOTA5ZDhjIDEwMDc1NQotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMKQEAgLTY1NzIsNiArNjU3MiwyNyBAQCBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KE9i alRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCiAJcmV0dXJuIG5ld19vYmplY3Rf b2JqZWN0KHR5cHN1YnNjcmlwdCk7CiB9CiAKKy8qCisgKiBEZXBhcnNlIENSRUFURSBUQUJMRSBB UyBjb21tYW5kLgorICoKKyAqIGRlcGFyc2VfQ3JlYXRlU3RtdCBkbyB0aGUgYWN0dWFsIHdvcmsg YXMgd2UgZGVwYXJzZSB0aGUgZmluYWwgQ3JlYXRlU3RtdCBmb3IKKyAqIENSRUFURSBUQUJMRSBB UyBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNT dG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAg ICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsK KworCXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21k LT5kLmN0YXMuYWRkcmVzcy5vYmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7Cit9CisKKwogLyoKICAqIEhhbmRsZSBkZXBhcnNpbmcgb2Yg c2ltcGxlIGNvbW1hbmRzLgogICoKQEAgLTY4MjYsNiArNjg0Nyw5IEBAIGRlcGFyc2VfdXRpbGl0 eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJCWNh c2UgU0NUX0FsdGVyVGFibGU6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQp OwogCQkJYnJlYWs7CisJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CisJCQl0cmVlID0gZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0FsdGVyT3BG YW1pbHk6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CiAJCQlicmVhazsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCA2YWZkZTBiOGQwLi4zOWI0MDFi NTc0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0xMzMsNyArMTMzLDgg QEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJaWYgKHN0 cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpICE9IDAgJiYKIAkJc3Ry Y21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpICE9IDAgJiYKIAkJc3RyY21w KHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAmJgotCQlzdHJjbXAoc3RtdC0+ZXZl bnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUs ICJ0YWJsZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFi bGVfaW5pdF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9TWU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBldmVudCBuYW1l IFwiJXNcIiIsCkBAIC0xNTksNyArMTYwLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2 ZW50VHJpZ1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFnIGxpc3QsIGlmIGFueS4gKi8KIAlp ZiAoKHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpID09IDAgfHwK IAkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSA9PSAwIHx8Ci0J CSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwKQorCQkgc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAorCQkgc3RyY21wKHN0bXQtPmV2ZW50 bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkmJiB0YWdzICE9IE5VTEwpCiAJCXZh bGlkYXRlX2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNlIGlmIChzdHJjbXAoc3RtdC0+ZXZl bnRuYW1lLCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTU4NSw3ICs1ODcsOCBAQCBFdmVudFRy aWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENyZWF0ZUNvbW1h bmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5kU3RhcnQgfHwK IAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBFVlRfU1FMRHJv cCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRfVGFibGVJbml0 V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhkYmd0YWcp KQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNcIiIsIEdldENv bW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtODY4LDYgKzg3MSwxNjMgQEAgRXZlbnRUcmlnZ2Vy VGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKQog CUNvbW1hbmRDb3VudGVySW5jcmVtZW50KCk7CiB9CiAKKworLyoKKyAqIEV2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlU3RhcnQKKyAqICAgICBQcmVwYXJlIHRvIHJlY2VpdmUgZGF0YSBvbiBhbiBD UkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5UTyBjb21tYW5kIGFib3V0CisgKiAgICAgdG8gYmUgZXhl Y3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAq cGFyc2V0cmVlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENvbW1hbmQg KmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQs IG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0 ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJp dGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9IHBhbGxvYyhzaXplb2YoQ29s bGVjdGVkQ29tbWFuZCkpOworCisJY29tbWFuZC0+dHlwZSA9IFNDVF9DcmVhdGVUYWJsZUFzOwor CWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5k LmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOworCWNvbW1hbmQtPmQuY3Rhcy5y ZWFsX2NyZWF0ZSA9IE5VTEw7CisJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJz ZXRyZWUpOworCisJY29tbWFuZC0+cGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZDsKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k ID0gY29tbWFuZDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgor ICogRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFu IENSRUFURSBUQUJMRSBBUy9TRUxFQ1QgSU5UTyBjb21tYW5kLgorICoKKyAqIEZJWE1FIHRoaXMg QVBJIGlzbid0IGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGFuIHhhY3Qvc3VieGFj dCBpcworICogYWJvcnRlZCBwYXJ0d2F5IHRocm91Z2guICBQcm9iYWJseSBpdCdzIGJlc3QgdG8g YWRkIGFuCisgKiBBdEVPU3ViWGFjdF9FdmVudFRyaWdnZXJzKCkgdG8gZml4IHRoaXMuCisgKi8K K3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpCit7CisJQ29sbGVjdGVk Q29tbWFuZCAqcGFyZW50OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBu b3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmln Z2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlv bkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJcGFyZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50OworCisJcGZyZWUoY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kID0gcGFyZW50OworfQorCisvKgorICogcHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9pbml0X3dyaXRlCisgKgorICogRGVwYXJzZSB0aGUgZGRsIHRhYmxlIGNyZWF0ZSBjb21t YW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2lu aXRfd3JpdGUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29s bGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJY2hhciAgIAkJCSAgICpqc29uX3N0cmluZzsKKworCWlm ICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIoZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBm aXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJQXNzZXJ0KGNtZCk7CisKKwlyZWxwZXJzaXN0 ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQpOwor CisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFy Z2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxsIGdl bmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJs ZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVy IHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhl IFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNzYWdl IHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3QgPT0g UkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwor CS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29k aW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNh bERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQsIERD VF9TaW1wbGVDbWQsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsg MSk7CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogRmlyZSB0 YWJsZV9pbml0X3Jld3JpdGUgdHJpZ2dlcnMuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlclRhYmxl SW5pdFdyaXRlKE5vZGUgKnJlYWxfY3JlYXRlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCit7CisJ TGlzdAkgICAqcnVubGlzdDsKKwlFdmVudFRyaWdnZXJEYXRhIHRyaWdkYXRhOworCUNvbGxlY3Rl ZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKgorCSAqIFNlZSBFdmVudFRyaWdnZXJERExDb21tYW5k U3RhcnQgZm9yIGEgZGlzY3Vzc2lvbiBhYm91dCB3aHkgZXZlbnQKKwkgKiB0cmlnZ2VycyBhcmUg ZGlzYWJsZWQgaW4gc2luZ2xlIHVzZXIgbW9kZS4KKwkgKi8KKwlpZiAoIUlzVW5kZXJQb3N0bWFz dGVyKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEFsc28gZG8gbm90aGluZyBpZiBvdXIgc3RhdGUg aXNuJ3Qgc2V0IHVwLCB3aGljaCBpdCB3b24ndCBiZSBpZiB0aGVyZQorCSAqIHdlcmVuJ3QgYW55 IHJlbGV2YW50IGV2ZW50IHRyaWdnZXJzIGF0IHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBEREwK KwkgKiBjb21tYW5kLiAgVGhpcyB0ZXN0IG1pZ2h0IHRoZXJlZm9yZSBzZWVtIG9wdGlvbmFsLCBi dXQgaXQncworCSAqICpuZWNlc3NhcnkqLCBiZWNhdXNlIEV2ZW50VHJpZ2dlckNvbW1vblNldHVw IG1pZ2h0IGZpbmQgdHJpZ2dlcnMgdGhhdAorCSAqIGRpZG4ndCBleGlzdCBhdCB0aGUgdGltZSB0 aGUgY29tbWFuZCBzdGFydGVkLgorCSAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl KQorCQlyZXR1cm47CisKKwkvKiBEbyBub3RoaW5nIGlmIG5vIGNvbW1hbmQgd2FzIGNvbGxlY3Rl ZC4gKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpCisJ CXJldHVybjsKKworCWNvbW1hbmQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRD b21tYW5kOworCisJcnVubGlzdCA9IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKGNvbW1hbmQtPnBh cnNldHJlZSwKKwkJCQkJCQkJCSAgRVZUX1RhYmxlSW5pdFdyaXRlLAorCQkJCQkJCQkJICAidGFi bGVfaW5pdF93cml0ZSIsCisJCQkJCQkJCQkgICZ0cmlnZGF0YSk7CisJaWYgKHJ1bmxpc3QgPT0g TklMKQorCQlyZXR1cm47CisKKwkvKiBTZXQgdGhlIHJlYWwgQ3JlYXRlVGFibGUgc3RhdG1lbnQg YW5kIG9iamVjdCBhZGRyZXNzICovCisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gcmVh bF9jcmVhdGU7CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBhZGRyZXNzOworCisJLyogUnVu IHRoZSB0cmlnZ2Vycy4gKi8KKwlFdmVudFRyaWdnZXJJbnZva2UocnVubGlzdCwgJnRyaWdkYXRh KTsKKworCS8qIENsZWFudXAuICovCisJbGlzdF9mcmVlKHJ1bmxpc3QpOworCisJLyoKKwkgKiBN YWtlIHN1cmUgYW55dGhpbmcgdGhlIGV2ZW50IHRyaWdnZXJzIGRpZCB3aWxsIGJlIHZpc2libGUg dG8gdGhlIG1haW4KKwkgKiBjb21tYW5kLgorCSAqLworCUNvbW1hbmRDb3VudGVySW5jcmVtZW50 KCk7Cit9CisKIC8qCiAgKiBJbnZva2UgZWFjaCBldmVudCB0cmlnZ2VyIGluIGEgbGlzdCBvZiBl dmVudCB0cmlnZ2Vycy4KICAqLwpAQCAtMTE0OSw3ICsxMzA5LDggQEAgdHJhY2tEcm9wcGVkT2Jq ZWN0c05lZWRlZCh2b2lkKQogCSAqLwogCXJldHVybiAoRXZlbnRDYWNoZUxvb2t1cChFVlRfU1FM RHJvcCkgIT0gTklMKSB8fAogCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVSZXdyaXRlKSAh PSBOSUwpIHx8Ci0JCShFdmVudENhY2hlTG9va3VwKEVWVF9ERExDb21tYW5kRW5kKSAhPSBOSUwp OworCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFuZEVuZCkgIT0gTklMKSB8fAorCQko RXZlbnRDYWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpICE9IE5JTCk7CiB9CiAKIC8qCkBA IC0xODY4LDYgKzIwMjksNyBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5D VElPTl9BUkdTKQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNhc2UgU0NUX0NyZWF0 ZU9wQ2xhc3M6CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRl VGFibGVBczoKIAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0 eXBlOwpAQCAtMTg4NSw2ICsyMDQ3LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMo UEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7 CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFk ZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBT Q1RfQWx0ZXJUU0NvbmZpZykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJ CQkJCS8qCiAJCQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21t YW5kIHdlIG1heSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXgg ZmZmMDVjOTUzNy4uMjE1ZTUyNmIwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv cHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25j bWRzLmMKQEAgLTEwMDIsNiArMTAwMiwxMSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJCUNNRFRBR19BTFRFUl9J TkRFWAogCQl9OwogCisJCUNvbW1hbmRUYWcJaW5pdF9jb21tYW5kc1tdID0geworCQkJQ01EVEFH X0NSRUFURV9UQUJMRV9BUywKKwkJCUNNRFRBR19TRUxFQ1RfSU5UTworCQl9OworCiAJCS8qIENy ZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAogCQkJCQkJ CQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKQEAgLTEwMTMsNiAr MTAxOCwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1 YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRoZSB0YWJsZV9yZXdyaXRlIGV2ZW50 IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigidGFibGVfcmV3cml0 ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Rob2YocmV3cml0ZV9jb21tYW5k cyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX2luaXRfd3JpdGUg ZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9p bml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihpbml0X2NvbW1h bmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVz aXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9i YWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGFhMDA4MTU3ODcuLmZiNWU2NzljMWYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3Av dXRpbGl0eS5jCkBAIC0xNjY1LDggKzE2NjUsMTAgQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10 OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQocGFyc2V0cmVlKTsKIAkJCQlh ZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3JlYXRlVGFibGVBc1N0bXQgKikg cGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52LCBxYyk7CisJCQkJRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX1JlZnJl c2hNYXRWaWV3U3RtdDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCmluZGV4IGY3ZjcxNjVm N2YuLjdmYjhjYjI5MWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpAQCAtMTY3LDYg KzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50ID0gRVZUX1NR TERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX3Jld3JpdGUiKSA9PSAw KQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZl bnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1RhYmxlSW5pdFdy aXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXgg MmZiMzY1NGE2NC4uNDdhMzkzYTNhNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTgz NSw0ICsxMTgzNSw3IEBACiB7IG9pZCA9PiAnNDY0NicsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBk ZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIHJld3JpdGUnLAogICBwcm9uYW1lID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2Vy JywKICAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV90 YWJsZV9yZXdyaXRlJyB9LAoreyBvaWQgPT4gJzQ2NDcnLCBkZXNjciA9PiAndHJpZ2dlciBmb3Ig ZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSBpbml0JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dl cicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfaW5pdF93cml0ZScgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApp bmRleCBmZDJlZTdmZmU0Li5hOWUwZjcxZjZhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5oCkBAIC01NSw2ICs1NSwxMCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21t YW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9w KE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUo Tm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCByZWFzb24pOwogCitleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVj dEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0 ZUVuZCh2b2lkKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5 KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsK IGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiZjU3Li4zZDI5NGEwMzcxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rj b3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlwZWRlZiBlbnVtIENvbGxl Y3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NUX0FsdGVyRGVmYXVsdFBy aXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVyVFNDb25maWcKKwlTQ1Rf QWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xsZWN0ZWRDb21tYW5kVHlw ZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29t bWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlkZWZwcml2czsKKworCQlz dHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJTm9kZQkJICpyZWFsX2Ny ZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAq cGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv ZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZGRiNjdhNjhm YS4uMWU2NDgzMTdhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVk ZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZU X1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1Rh YmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdAotLSAK Mi4zNy4xCgo= --0000000000000016cf05e932d1b9 Content-Type: application/octet-stream; name="v23-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v23-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8bv87uz3 RnJvbSA0MDI0NWFkM2RiYWM2ZjQ5ZWM1YmY1MDMyNGJlMzExZmRhNThlNGFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMTA6MjY6MDkgLTA0MDAKU3ViamVjdDogW1BBVENI IDQvNl0gVGVzdCBjYXNlcyBmb3IgRERMIHJlcGxpY2F0aW9uLgoKQXV0aG9yOiBUYWthbWljaGkg T3N1bWkKLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCAgICAg fCA0NjUgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDY1IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGlj YXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjZkY2IwMTJh NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVw bGljYXRpb24ucGwKQEAgLTAsMCArMSw0NjUgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3RzIGZvciBs b2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVyLT5pbml0 KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7 CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9 PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwgPSAiQ1JF QVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFyLCB2YWx1 ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRk bCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5v ZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15cHViIEZP UiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZSwgZGRs Jyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRF IFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUgdGFibGUu CisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJlaW5nIGV4 ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3JpYmVyLT5w b2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0gMCBGUk9N IHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4gKCdzJywg J3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgyLCAnZGF0 YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBEUk9QIHJl cGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJP TSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgZGVmYXVs dCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUuCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAg QUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0LCAnZm9v JywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBkb24ndCBo YXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiBDT0xV TU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVlIElTIE5V TEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQpLCAnQUxU RVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFM VEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5nIHJlY29y ZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0ZGVycik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5VTEw7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYs ICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24gXCJ0ZXN0 X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRlc3QgQUxU RVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1AgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIElu c2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVmb3JlIGJ1 dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFs dWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1bHQsIHEo dCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQiKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsnKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDcs ICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7CitpcygkcmVz dWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDgsICdk YXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVl cyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwgQ2hhbmdl cyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJTkhFUklU UworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRhdGEgdG8g aW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBM SUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g cGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wMzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxlIGRlZmlu ZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDAp LCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dFRCBUQUJM RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBVTkxPR0dF RCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hl cmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBVTkxP R0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dlZCB0YWJs ZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEgdG8gYSB0 YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RT IChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUg dGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2NlZWQKKyMg aW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChp ZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSks ICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRh YmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0IG5vdCBv biB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRB QkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgn Zm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVSRSB0YWJs ZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJMRSB3aXRo IGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCBuYW1l ZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw XCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJ ICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0 ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVj ayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJmYWlsZWQg dG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisj IFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50cy4KKyMg Tk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVl IGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNvbnN0cmFp bnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwg bmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCByZXBsaWNh dGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2FtZSB0ZXh0 LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJCSAgIG9u X2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBz dGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxh dGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hlY2siLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMg REVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1l IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3aXRoIGRl ZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRl IGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsi LAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVy ciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRpbmcgdGFi bGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcgZ2lzdCAo YyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAoJzwoMSwg MSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lvbiBj b25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VTCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHByb2R1Y3Qg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwgJ2Zvbycp OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRP IHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBSSU1BUlkg S0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNlcnQgb3Ig dXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg Im9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg UkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZFUlJBQkxF Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJsZSBjbGF1 c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRFIHRtcCBT RVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hvdWxkIGZh aWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBGUk9NIHRt cCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0ZGVyciA9 PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVw bGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXkiLwor ICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJs ZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9UIERFRkVS UkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdi YXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRu b2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQg KyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwk c3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6 ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfcGtl eSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVSUkVECisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBuYW1lIHRl eHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9m IGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVz dCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQg aWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxF VEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBjaGVja3Mg YW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZlbHkuCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdG1w IChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRlZF9wcmlj ZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRpdGlvbikg YXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3Rv cCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBc JHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0bXAi IHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAiZmFpbGVk IHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBhdCBjcmVh dGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFnZV9wYXJh bWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBnX2NsYXNz IFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGljYXRlZCcp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEgdGFibGVz cGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRo ZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0YWJsZXNw YWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOworJHRhYmxl c3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3BhY2VfZGly KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNlZGlyID0g JG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90 YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElP TiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRibHNwYzsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRF IFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRZUEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBteXR5 cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlwZTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUgRU5VTSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXllbnVtdHlwZSBBUyBF TlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51bXR5cGUpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKCdu ZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAq IGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBs aWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9Q IFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIFJBTkdFIFRZUEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVFlQRSBmbG9hdDhfcmFuZ2Ug QVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVfZGlmZiA9IGZsb2F0OG1pKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wICh2YWwgZmxvYXQ4 X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJpbnNl cnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIuMzQsICcxLjExMTExM2UzJykpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0 bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEuMTEzXCkpLCAnQ1JFQVRFIFRBQkxF IE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBUZXN0IENSRUFURSBCQVNFIERBVEEg VFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGludDQyOworQ1JFQVRFIEZVTkNUSU9O IGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQyCisgICBBUyAnaW50NGluJworICAg TEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBGVU5DVElPTiBpbnQ0 Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAgIEFTICdpbnQ0b3V0JworICAgTEFO R1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NSRUFURSBUWVBFIGludDQyICgKKyAg IGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50NDJfaW4sCisgICBvdXRwdXQgPSBp bnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAgZGVmYXVsdCA9IDQyLAorICAgcGFz c2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYxIGludDQyKTsKK0lOU0VSVCBJTlRP IHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSg0MiksICdDUkVB VEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKKworcGFzcyAiRERMIHJlcGxp Y2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJzY3JpYmVyLT5zdG9wOworJG5vZGVf cHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuMzcuMQoK --0000000000000016cf05e932d1b9 Content-Type: application/octet-stream; name="v23-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v23-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8bv87ux1 RnJvbSBiZTA2MGQxMWE2YjJhNWJhOGFjZTA3MzdmODRlYTYzYzI5OTY2MGRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6NDM6MzIgLTA0MDAKU3ViamVjdDogW1BBVENI IDIvNl0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNhdGlv biwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4gV2hp bGUgY3JlYXRpbmcgYSBwdWJsaWNhdGlvbiwgd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZAp0cmln Z2VyIHRoYXQgZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0 LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUg b2YgZHJvcCBwdWJsaWNhdGlvbi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNl bmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJz Y3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcK YW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5 IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2Vz IG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFu dWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoK VGhpcyBpcyBhIFBPQyBwYXRjaCB0byBzaG93IGhvdyB1c2luZyBldmVudCB0cmlnZ2VycyBhbmQg RERMIGRlcGFyc2luZwpmYWNpbGl0aWVzIHdlIGNhbiBpbXBsZW1lbnQgRERMIHJlcGxpY2F0aW9u LiBTbywgdGhlIGltcGxlbWVudGF0aW9uIGlzCnJlc3RyaWN0ZWQgdG8gQ1JFQVRFIFRBQkxFL0FM VEVSIFRBQkxFL0RST1AgVEFCTEUgY29tbWFuZHMuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBv YmplY3QgY29tbWFuZCBhbmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGF0IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9n IHRoZQpkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwg YW5kIHNlbmRzIGl0IHRvCnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBp cyBwdWJsaXNoZWQuIEl0IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNl cHQgc29tZSBjb21tYW5kcyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRo YXQgaW50cm9kdWNlZCByZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRo ZSBjdXJyZW50CmRkbF9kZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3Rl IHRoYXQgdGhlIHJlcGxpY2F0aW9uIGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVu ZGVyCnByb2dyZXNzLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFydCcgZXZl bnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRoZSB0YWJs ZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRwdXQpIHN0 b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQg aXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gTGF0ZXIg dGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRyb3AgbWVz c2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBzZW5kcyBv dXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJlbGlkcyBt YXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNh dXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcg bWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0 IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVkIGZvciB0 aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gdmVyaWZ5 IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8g bWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMgdG8gdGhl IGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldlIGNvdWxk IGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2Vs bCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdlcyBmb3Ig dGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxl X3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBBREQgQ09M VU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0 aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQKdGFibGVf cmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQg c2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQu IFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdyaXRlIElO U0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhhdCB0aGUg ZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJlCmNvbnNp c3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRkbCBtdXN0 IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0 byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5 IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBk ZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGljaApkb2Vz bid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0 IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRvIHJld3Jp dGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdy aXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0byBrZWVw IHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJl IGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0 cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBhbmQgdXNl IHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBU byBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcg dG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21lIGxvZ2lj IGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkg bm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJld3JpdGUK ZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBj aGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZSB0YWJs ZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIg YW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYyAgICAgICB8ICA1MiArKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMgICAgICAgICAgfCAyMzIgKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jICAgICAgICB8IDEzNiArKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jICB8ICA4NiArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RlY29kZS5jICAgICAgfCAgNDEgKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbC5jICAgICB8ICA5MyArKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jICAgICAgIHwgIDQ4ICsrKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgMTM2ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjMyICsrKysrKysrKysrCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jICAgfCAxOTIgKysrKysrKystCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9w Z193YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcHNx bC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUv YWNjZXNzL3JtZ3JsaXN0LmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZGxtZXNzYWdlLmggICAgICAgICAgfCAgNjAgKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vbG9naWNhbHByb3RvLmggICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmggICAgICAgfCAgMjcgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Bnb3V0cHV0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggICAgICAgfCAgMzkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHNxbC5vdXQgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQgICAgIHwgMzg4ICsrKysrKysrKy0tLS0tLS0tLQogMzEgZmlsZXMgY2hh bmdlZCwgMTYyNyBpbnNlcnRpb25zKCspLCAyMTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3Nh Z2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3Nh Z2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmZDg2Li5i OGUyOWU4ZGYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsx OSw3IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2MubyBcCiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1z Z2Rlc2MubyBcCisJbG9naWNhbGRkbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRl c2MubyBcCiAJcmVsbWFwZGVzYy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L2xvZ2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uODFkZWU1MjlkMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMKKyAqCSAgcm1nciBkZXNjcmlwdG9yIHJv dXRpbmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAgICpyZWMgPSBYTG9nUmVjR2V0RGF0YShy ZWNvcmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5G T19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCXsKKwkJ eGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAq KSByZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVjLT5tZXNzYWdlOworCQljaGFyCSAgICpt ZXNzYWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJlZml4X3NpemU7CisJCWNoYXIJICAg KnNlcCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxyZWMtPnByZWZpeF9zaXplXSAhPSAnXDAn KTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInByZWZpeCBcIiVzXCI7IHBheWxvYWQgKCV6 dSBieXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJlYy0+bWVzc2FnZV9zaXplKTsKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0eXBlICV1IiwgeGxyZWMtPnJlbGlkLCB4 bHJlYy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3NhZ2UgcGF5bG9hZCBhcyBhIHNlcmllcyBv ZiBoZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0gMDsgY250IDwgeGxyZWMtPm1lc3NhZ2Vf c2l6ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlMDJYIiwgc2Vw LCAodW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsKKwkJCXNlcCA9ICIgIjsKKwkJfQorCX0K K30KKworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pCit7 CisJaWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FH RSkKKwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYwppbmRleCA2YWYzNTcwMDA1Li5iZGY0MmE0M2VhIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsNyBAQCBHZXRQ dWJsaWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZv cm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHVi ZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5j YXRlOworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGwgPSBwdWJmb3JtLT5wdWJkZGw7CiAJcHViLT5w dWJ2aWFyb290ID0gcHViZm9ybS0+cHVidmlhcm9vdDsKIAogCVJlbGVhc2VTeXNDYWNoZSh0dXAp OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDQ0MWYyOWQ2ODQuLjZhZmRl MGI4ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwor KysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTM3LDggKzM3LDEx IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMu aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRjb3AvZGVw YXJzZV91dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNv cC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTE1MzcsNiArMTU0 MCw3IEBAIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpCiAKIAlj b21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAljb21t YW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQtPmQuYWx0 ZXJUYWJsZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMg PSBOSUw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOwogCkBA IC0xNTcwLDcgKzE1NzQsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVj dElkKQogICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBuZWVkcyB0 byBoYW5kbGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29sbGVjdEFs dGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCitFdmVu dFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJl c3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCUNv bGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTkwLDYgKzE1OTQsNyBAQCBFdmVudFRyaWdn ZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRk cmVzcykKIAluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOwogCW5ld3N1Yi0+cGFyc2V0cmVlID0g Y29weU9iamVjdChzdWJjbWQpOwogCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50 Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKIAljdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9CiAJCWxh cHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRh YmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTIxNzUsMyArMjE4MCwyMjggQEAgc3RyaW5naWZ5 X2FkZWZwcml2c19vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKIAogCXJldHVybiAiPz8/IjsJ CQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLwogfQorCisvKgorICogcHVibGljYXRpb25fZGVw YXJzZV9kZGxfY29tbWFuZF9zdGFydAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFu ZCBsb2cgaXQuCisgKi8KK0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0 YXJ0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJRXZlbnRUcmlnZ2VyRGF0YSAqdHJpZ2RhdGE7CisJ Y2hhcgkJKmNvbW1hbmQgPSBwc3ByaW50ZigiRHJvcCB0YWJsZSBjb21tYW5kIHN0YXJ0Iik7CisJ RHJvcFN0bXQJKnN0bXQ7CisJTGlzdENlbGwJKmNlbGwxOworCisJaWYgKCFDQUxMRURfQVNfRVZF TlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRy aWdnZXIgbWFuYWdlciIpOworCisJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2lu Zm8tPmNvbnRleHQ7CisJc3RtdAkgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsK KworCS8qIGV4dHJhY3QgdGhlIHJlbGlkIGZyb20gdGhlIHBhcnNlIHRyZWUgKi8KKwlmb3JlYWNo KGNlbGwxLCBzdG10LT5vYmplY3RzKQorCXsKKwkJY2hhcglyZWxwZXJzaXN0OworCQlOb2RlCSpv YmplY3QgPSBsZmlyc3QoY2VsbDEpOworCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCVJlbGF0 aW9uIHJlbGF0aW9uID0gTlVMTDsKKworCQlhZGRyZXNzID0gZ2V0X29iamVjdF9hZGRyZXNzKHN0 bXQtPnJlbW92ZVR5cGUsCisJCQkJCQkJCQkgb2JqZWN0LAorCQkJCQkJCQkJICZyZWxhdGlvbiwK KwkJCQkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrLAorCQkJCQkJCQkJIHRydWUpOworCisJCXJl bHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKGFkZHJlc3Mub2JqZWN0SWQpOworCisJCS8q CisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQg dGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkCisJCSAq IHRhYmxlcyBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVy IHNpZGUuIFRoaXMKKwkJICogbWFrZXMgaXQgcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRo ZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZQorCQkgKiBpbmNvbWluZyByZXdyaXRlIG1lc3Nh Z2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0 ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXsKKwkJCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBO b0xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVw YXJzZSIsIGFkZHJlc3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BTdGFydCwKKwkJCQkJCQkgY29t bWFuZCwgc3RybGVuKGNvbW1hbmQpICsgMSk7CisKKwkJaWYgKHJlbGF0aW9uKQorCQkJdGFibGVf Y2xvc2UocmVsYXRpb24sIE5vTG9jayk7CisJfQorCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUKKyAqCisg KiBEZXBhcnNlIHRoZSBkZGwgdGFibGUgcmV3cml0ZSBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8K K0RhdHVtCitwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwljaGFyCQkJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAgICpjbWQ7CisJ Y2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIo ZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFn ZXIiKTsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7 CisKKwlBc3NlcnQoY21kICYmIGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpOworCisJcmVscGVy c2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOwor CisJLyoKKwkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFy Z2V0IHRhYmxlIGlzIGEgdGVtcG9yYXJ5CisJICogdGFibGUuCisJICoKKwkgKiBXZSB3aWxsIGdl bmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZCB0YWJs ZXMKKwkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVy IHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBkaXJlY3RseSByZXBsYXkgdGhl IFNFVCBMT0dHRUQgY29tbWFuZCBhbmQgdGhlIGluY29taW5nCisJICogcmV3cml0ZSBtZXNzYWdl IHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJICovCisJaWYgKHJlbHBlcnNpc3QgPT0g UkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKwor CS8qIERlcGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29k aW5nIG9mIHRoZSBzYW1lLiAqLworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1h bmQoY21kLCBmYWxzZSk7CisKKwlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJTG9nTG9naWNh bERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgRENUX1Rh YmxlQWx0ZXIsCisJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7 CisKKwlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworfQorCisvKgorICogcHVibGljYXRp b25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQKKyAqCisgKiBEZXBhcnNlIHRoZSBkZGwgY29tbWFu ZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFu ZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVy ICBpdGVyOworCURlcGFyc2VkQ29tbWFuZFR5cGUgdHlwZTsKKwlPaWQgcmVsaWQ7CisKKwlpZiAo IUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmly ZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJCQlyZWxwZXJzaXN0ID0g UkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOworCQlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZCA9IGxm aXJzdChsYyk7CisJCWNoYXIJCQkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwg aGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAo UmVuYW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOworCisJCQlpZiAocmVuYW1lU3RtdC0+cmVsYXRp b25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9 IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQtPnR5cGUgPT0g U0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVj dElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUp CisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0eXBlID0g RENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUg Zm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJ CQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCWlmIChnZXRfcmVsX3JlbGtpbmQocmVs aWQpKQorCQkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UocmVsaWQpOworCisJCS8q CisJCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQg dGFibGUgaXMgYQorCQkgKiB0ZW1wb3JhcnkgdGFibGUuCisJCSAqCisJCSAqIFdlIHdpbGwgZ2Vu ZXJhdGUgd2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxl cworCQkgKiBjYW4gYWxzbyBiZSBjcmVhdGVkIGFuZCBhbHRlcmVkIG9uIHRoZSBzdWJzY3JpYmVy IHNpZGUuIFRoaXMgbWFrZXMgaXQKKwkJICogcG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRo ZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZworCQkgKiByZXdyaXRlIG1lc3Nh Z2Ugd2l0aG91dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkJICovCisJCWlmIChyZWxwZXJzaXN0 ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEZXBh cnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0 aGUKKwkJICogc2FtZS4KKwkJICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwpCisJCQljb250 aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBlLCBq c29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKworCXNs aXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNRTERyb3BMaXN0 KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0bXQJCQkgICAq c3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQljaGFyCQkJCSAgICpj b21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOworCisJCXRyaWdkYXRhID0g KEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5jb250ZXh0OworCQlzdG10CSA9IChEcm9wU3Rt dCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJCW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxE cm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisKKwkJaWYgKHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJ0YWJsZSIpID09IDApCisJCQljbWR0eXBlID0gRENUX1RhYmxlRHJvcEVuZDsKKwkJZWxz ZSBpZiAoc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2Jq LT5vYmplY3R0eXBlLCAiaW5kZXgiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJmdW5jdGlvbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBy b2NlZHVyZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9y IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgY2xhc3Mi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciBmYW1pbHki KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjYXN0IikgPT0gMCB8fAor CQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidHlwZSIpID09IDAgfHwKKwkJCQkgc3RyY21w KG9iai0+b2JqZWN0dHlwZSwgImRvbWFpbiIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInRyaWdnZXIiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJjb252ZXJzaW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAicG9s aWN5IikgPT0gMAl8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZXh0ZW5zaW9uIikg PT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJY29udGludWU7 CisKKwkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIG9i ai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKworCQlpZiAoY29t bWFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRl cGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDhiNTc0Yjg2 YzQuLmZmZjA1Yzk1MzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBA IC0zNywxMCArMzcsMTIgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCIK ICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2xsYXRl LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCisjaW5jbHVkZSAicGFyc2Vy L3BhcnNlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInV0aWxzL2Fj bC5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCkBAIC05NSw2ICs5Nyw3IEBAIHBhcnNlX3B1 YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCXB1YmFjdGlvbnMtPnB1YnVw ZGF0ZSA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHViZGVsZXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25z LT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJcHViYWN0aW9ucy0+cHViZGRsID0gZmFsc2U7CiAJKnB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICov CkBAIC0xNDEsNiArMTQ0LDggQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJCQkJZWxzZSBp ZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidHJ1bmNhdGUiKSA9PSAwKQogCQkJCQlwdWJhY3Rpb25z LT5wdWJ0cnVuY2F0ZSA9IHRydWU7CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAi ZGRsIikgPT0gMCkKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsID0gdHJ1ZTsKIAkJCQllbHNlCiAJ CQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LApAQCAtNzQ4LDYgKzc1Myw1MyBAQCBDaGVja1B1YlJlbGF0aW9uQ29sdW1uTGlzdChMaXN0ICp0 YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCX0KIH0KIAorLyoKKyAqIENyZWF0ZSBl dmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4KKyAqLworc3Rh dGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1lLCBD b21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRkcmVz cyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCQkJaTsKKwlMaXN0 CQkJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJCQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJlc3MJ CXJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJY2hhcgkJ CQl0cmlnZ2VyX25hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCQkJdHJpZ2dlcl9mdW5jX25hbWVb TkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25zdCBjaGFyICAgKnRyaWdnZXJfbmFtZV9wcmVmaXgg PSAicGdfZGVwYXJzZV90cmlnXyVzXyV1IjsKKwlzdGF0aWMgY29uc3QgY2hhciAgICp0cmlnZ2Vy X2Z1bmNfcHJlZml4ID0gInB1YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdnZXIg PSBtYWtlTm9kZShDcmVhdGVFdmVudFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJfbmFt ZSwgc2l6ZW9mKHRyaWdnZXJfbmFtZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZlbnRu YW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dl cl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlk ZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdn ZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0 ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1h bmRzOyBpKyspCisJeworCQlTdHJpbmcgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRDb21t YW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsKKwkJdGFncyA9IGxhcHBlbmQodGFncywgdGFnKTsK Kwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0o InRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZlbnRU cmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRyaWdn ZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9uIHRoZQorCSAqIHB1YmxpY2F0aW9uLgorCSAq LworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwg dHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVz cywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9CisKIC8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0 aW9uLgogICovCkBAIC04MjAsNiArODcyLDggQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0 ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUJvb2xHZXREYXR1bShw dWJhY3Rpb25zLnB1YmRlbGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1 bmNhdGUgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2 YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9CisJCUJvb2xHZXREYXR1bShw dWJhY3Rpb25zLnB1YmRkbCk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9v dCAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApA QCAtODgyLDYgKzkzNiw4NSBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRl IGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkg KgorCSAqIFRPRE86IFdlIG5lZWQgdG8gZmluZCBhIGJldHRlciBzeW50YXggdG8gYWxsb3cgcmVw bGljYXRpb24gb2YgRERMCisJICogc3RhdGVtZW50cy4KKwkgKgorCSAqIFhYWDogVGhpcyBjb2Rl IGlzIGp1c3QgdG8gc2hvdyB0aGUgcmVwbGljYXRpb24gb2YgQ1JFQVRFL0FMVEVSL0RST1AKKwkg KiBUQUJMRSB3b3Jrcy4gV2UgbmVlZCB0byBlbmhhbmNlIHRoaXMgb25jZSB0aGUgYXBwcm9hY2gg Zm9yIERETAorCSAqIHJlcGxpY2F0aW9uIGlzIGZpbmFsaXplZC4KKwkgKi8KKwlpZiAocHViYWN0 aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFH X0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdf QUxURVJfVEFCTEV9OworCisJCUNvbW1hbmRUYWcJZW5kX2NvbW1hbmRzW10gPSB7CisJCQlDTURU QUdfQ1JFQVRFX0VYVEVOU0lPTiwKKwkJCUNNRFRBR19BTFRFUl9FWFRFTlNJT04sCisJCQlDTURU QUdfRFJPUF9FWFRFTlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKKwkJCUNNRFRBR19B TFRFUl9QT0xJQ1ksCisJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCisJCQlDTURUQUdfQ1JFQVRFX0NP TlZFUlNJT04sCisJCQlDTURUQUdfQUxURVJfQ09OVkVSU0lPTiwKKwkJCUNNRFRBR19EUk9QX0NP TlZFUlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9ET01B SU4sCisJCQlDTURUQUdfRFJPUF9ET01BSU4sCisJCQlDTURUQUdfQUxURVJfSU5ERVgsCisJCQlD TURUQUdfQ1JFQVRFX1RZUEUsCisJCQlDTURUQUdfRFJPUF9UWVBFLAorCQkJQ01EVEFHX0FMVEVS X1RZUEUsCisJCQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURUQUdfQUxURVJfQ0FTVCwKKwkJ CUNNRFRBR19EUk9QX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX09QRVJBVE9SLAorCQkJQ01EVEFH X0NSRUFURV9PUEVSQVRPUl9DTEFTUywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZ LAorCQkJQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwKKwkJCUNNRFRBR19BTFRFUl9PUEVS QVRPUl9DTEFTUywKKwkJCUNNRFRBR19BTFRFUl9PUEVSQVRPUiwKKwkJCUNNRFRBR19EUk9QX09Q RVJBVE9SLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfRFJPUF9P UEVSQVRPUl9GQU1JTFksCisJCQlDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwKKwkJCUNNRFRBR19B TFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdfRFJPUF9QUk9DRURVUkUsCisJCQlDTURUQUdfQ1JF QVRFX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0FMVEVSX0ZVTkNUSU9OLAorCQkJQ01EVEFHX0RST1Bf RlVOQ1RJT04sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURUQUdfQUxURVJfVFJJ R0dFUiwKKwkJCUNNRFRBR19EUk9QX1RBQkxFLAorCQkJQ01EVEFHX0NSRUFURV9UQUJMRSwKKwkJ CUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVfU0VRVUVOQ0UsCisJCQlDTURU QUdfQUxURVJfU0VRVUVOQ0UsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNNRFRBR19D UkVBVEVfU0NIRU1BLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVNQSwKKwkJCUNNRFRBR19EUk9QX1ND SEVNQSwKKwkJCUNNRFRBR19DUkVBVEVfSU5ERVgsCisJCQlDTURUQUdfRFJPUF9JTkRFWCwKKwkJ CUNNRFRBR19BTFRFUl9JTkRFWAorCQl9OworCisJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRf ZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRs X2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21t YW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX3N0 YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRs X2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFy dF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jl d3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0 YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdy aXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0KKwogCXRhYmxlX2Nsb3NlKHJlbCwg Um93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQb3N0Q3JlYXRlSG9vayhQdWJsaWNh dGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC0xMDIyLDYgKzExNTUsOSBAQCBBbHRlclB1 YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10 ICpzdG10LAogCiAJCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0g PSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CiAJCXJlcGxhY2VzW0FudW1f cGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1f cGdfcHVibGljYXRpb25fcHViZGRsIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJk ZGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gdHJ1ZTsK IAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCmluZGV4IDZjNTJlZGQ5YmUuLjQ4MTNjZDUyYjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCkBAIC01MjUzLDcgKzUyNTMsNyBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1 ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBp bnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwogCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJCUV2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFi LT5yZXdyaXRlKTsKIAogCS8qCiAJICogQnVtcCB0aGUgY29tbWFuZCBjb3VudGVyIHRvIGVuc3Vy ZSB0aGUgbmV4dCBzdWJjb21tYW5kIGluIHRoZSBzZXF1ZW5jZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uZjNlZWI2NzMxMiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBAIG92 ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCiAJ ZGVjb2RlLm8gXAorCWRkbG1lc3NhZ2Uub1wKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXAog CWxvZ2ljYWxmdW5jcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsbWVzc2FnZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTA5MzUyM2U5 YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCkBAIC0wLDAgKzEsODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRk bG1lc3NhZ2UuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNz YWdlLmMKKyAqCisgKiBOT1RFUworICoKKyAqIExvZ2ljYWwgRERMIG1lc3NhZ2VzIGFsbG93IFhM T0cgbG9nZ2luZyBvZiBEREwgY29tbWFuZCBzdHJpbmdzIHRoYXQKKyAqIGdldCBwYXNzZWQgdG8g dGhlIGxvZ2ljYWwgZGVjb2RpbmcgcGx1Z2luLiBJbiBub3JtYWwgWExPRyBwcm9jZXNzaW5nIHRo ZXkKKyAqIGFyZSBzYW1lIGFzIE5PT1AuCisgKgorICogVW5saWtlIGdlbmVyaWMgbG9naWNhbCBt ZXNzYWdlcywgdGhlc2UgRERMIG1lc3NhZ2VzIGhhdmUgb25seSB0cmFuc2FjdGlvbmFsCisgKiBt b2RlLk5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRyYW5zYWN0aW9uYWwu CisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0cmFuc2FjdGlvbiBh bmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcgaW4gYSBzYW1lIHdh eSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNhcnJpZXMgcHJlZml4 IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGluZworICogcGx1Z2lu cy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRvIHVzZSB1bmlxdWUg cHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFtcGxlIHRvIHVzZSB0 aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKKyNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNl LmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgi CisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisvKgorICogV3Jp dGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisgKi8KK1hMb2dSZWNQ dHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBE ZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlLCBz aXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVjOworCisJLyoKKwkg KiBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHRyYW5zYWN0aW9uIGlkLgorCSAqLworCUFzc2VydChJ c1RyYW5zYWN0aW9uU3RhdGUoKSk7CisJR2V0Q3VycmVudFRyYW5zYWN0aW9uSWQoKTsKKworCXhs cmVjLmRiSWQgPSBNeURhdGFiYXNlSWQ7CisJLyogdHJhaWxpbmcgemVybyBpcyBjcml0aWNhbDsg c2VlIGxvZ2ljYWxkZGxtc2dfZGVzYyAqLworCXhscmVjLnByZWZpeF9zaXplID0gc3RybGVuKHBy ZWZpeCkgKyAxOworCXhscmVjLm1lc3NhZ2Vfc2l6ZSA9IHNpemU7CisJeGxyZWMucmVsaWQgPSBy ZWxpZDsKKwl4bHJlYy5jbWR0eXBlID0gY21kdHlwZTsKKworCVhMb2dCZWdpbkluc2VydCgpOwor CVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikgJnhscmVjLCBTaXplT2ZMb2dpY2FsRERMTWVzc2Fn ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwgcHJlZml4KSwgeGxyZWMu cHJlZml4X3NpemUpOworCVhMb2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIG1lc3Nh Z2UpLCBzaXplKTsKKworCS8qIGFsbG93IG9yaWdpbiBmaWx0ZXJpbmcgKi8KKwlYTG9nU2V0UmVj b3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7CisKKwlyZXR1cm4gWExvZ0luc2VydChSTV9M T0dJQ0FMRERMTVNHX0lELCBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpOworfQorCisvKgorICog UmVkbyBpcyBiYXNpY2FsbHkganVzdCBub29wIGZvciBsb2dpY2FsIGRlY29kaW5nIGRkbCBtZXNz YWdlcy4KKyAqLwordm9pZAorbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVj b3JkKQoreworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocmVjb3JkKSAmIH5YTFJfSU5G T19NQVNLOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQllbG9n KFBBTklDLCAibG9naWNhbGRkbG1zZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsK KworCS8qIFRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBmb3IgbG9naWNhbCBkZWNvZGluZywgc2Vl IGRlY29kZS5jLiAqLworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK aW5kZXggNGQwYmYxOTMwZC4uODhhZGJjYzFiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZWNvZGUuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RlY29kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RlY29kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpAQCAtNjAzLDYgKzYwNCw0 NiBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1ZikKIAkJCQkJCQkgIG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5w cmVmaXhfc2l6ZSk7CiB9CiAKKy8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNHX0lEIHJl Y29yZHMgZm9yIERlY29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3ZvaWQKK2xv Z2ljYWxkZGxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29y ZEJ1ZmZlciAqYnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1 aWxkZXI7CisJWExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rpb25J ZCB4aWQgPSBYTG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8o cikgJiB+WExSX0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0 T3JpZ2luKHIpOworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAoaW5m byAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVk IFJNX0xPR0lDQUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9yZGVy QnVmZmVyUHJvY2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3Jp Z3B0cik7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJlIGp1 c3QgZmFzdC1mb3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5nIGRk bCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIpIDwg U05BUEJVSUxEX0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJldHVy bjsKKworCW1lc3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0RGF0 YShyKTsKKworCWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSB8 fAorCQlGaWx0ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlmIChT bmFwQnVpbGRQcm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJUmVv cmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRwdHIs CisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdlIGlz IHByZWZpeCAqLworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSBt ZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVzc2Fn ZS0+cmVsaWQsIG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCiAvKgogICogQ29uc29saWRhdGVkIGNv bW1pdCByZWNvcmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29tbWl0 CiAgKiByZWNvcmRzLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYwpp bmRleCA2MjVhN2Y0MjczLi45ODk2OWM3YWVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xvZ2ljYWwuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgImZtZ3IuaCIKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBs aWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29y aWdpbi5oIgpAQCAtNzMsNiArNzQsMTAgQEAgc3RhdGljIHZvaWQgdHJ1bmNhdGVfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3RhdGljIHZv aWQgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgYm9vbCB0cmFuc2Fj dGlvbmFsLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUs IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZvaWQgZGRsbWVzc2FnZV9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAg WExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9p ZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNr cyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2 b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29u c3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7 CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVz c2FnZV9sc24sCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgT2lk IHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyB2b2lkIHN0cmVhbV90cnVu Y2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJCQkJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sIFJl b3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSk7CiAKQEAgLTIxOCw2ICsyMjgsNyBAQCBTdGFydHVw RGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3Jk ZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXIt PmNvbW1pdCA9IGNvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1l c3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPmRkbG1lc3NhZ2UgPSBkZGxtZXNzYWdl X2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3ZSByZXF1aXJl IHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3IEBAIFN0YXJ0 dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21l c3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxtZXNzYWdl X2NiICE9IE5VTEwpIHx8CiAJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fdHJ1bmNhdGVfY2IgIT0g TlVMTCk7CiAKIAkvKgpAQCAtMjUxLDYgKzI2Myw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQo TGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2NvbW1p dCA9IHN0cmVhbV9jb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jaGFu Z2UgPSBzdHJlYW1fY2hhbmdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fbWVz c2FnZSA9IHN0cmVhbV9tZXNzYWdlX2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5zdHJlYW1f ZGRsbWVzc2FnZSA9IHN0cmVhbV9kZGxtZXNzYWdlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVy LT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0x MjIwLDYgKzEyMzMsNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxi YWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAor CQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0 YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgt PmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYiA9PSBO VUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3Ig Y29udGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1l ID0gImRkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOwor CWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwll cnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMg PSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJh Y2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1 ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBk byB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxt ZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwK KwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlv dXM7Cit9CisKIHN0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVm ZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJz dF9sc24pCkBAIC0xNTM1LDYgKzE1ODYsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihS ZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRl eHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK3N0cmVh bV9kZGxtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKKwkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwK KwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Cit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsK KwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNr IGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgtPmZhc3RfZm9yd2FyZCk7CisKKwkvKiBXZSdy ZSBvbmx5IHN1cHBvc2VkIHRvIGNhbGwgdGhpcyB3aGVuIHN0cmVhbWluZyBpcyBzdXBwb3J0ZWQu ICovCisJQXNzZXJ0KGN0eC0+c3RyZWFtaW5nKTsKKworCS8qIHRoaXMgY2FsbGJhY2sgaXMgb3B0 aW9uYWwgKi8KKwlpZiAoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IgPT0gTlVM TCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9 ICJzdHJlYW1fZGRsbWVzc2FnZSI7CisJc3RhdGUucmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9s c247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBvdXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNr OworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICopICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2 aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJj YWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3RhdGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMg PSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhuICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFs aWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwor CS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBjYWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tz LnN0cmVhbV9kZGxtZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxp ZCwKKwkJCQkJCQkJCQljbWR0eXBlLCBtZXNzYWdlX3NpemUsIG1lc3NhZ2UpOworCisJLyogUG9w IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNh bGxiYWNrLnByZXZpb3VzOworfQorCiBzdGF0aWMgdm9pZAogc3RyZWFtX3RydW5jYXRlX2NiX3dy YXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJ CSAgIGludCBucmVsYXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCBmZjg1MTNlMmQyLi5mMzU0MDYyNzViIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC02NjIsNiArNjYyLDUyIEBA IGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4 aWQsIFhMb2dSZWNQdHIgbHNuLAogCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKIH0K IAorLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJvbSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dp Y2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sCisJ CQkJCQkgICBjb25zdCBjaGFyICoqcHJlZml4LAorCQkJCQkJICAgU2l6ZSAqc3opCit7CisJdWlu dDggZmxhZ3M7CisJY2hhciAqbXNnOworCisJLy9UT0RPIGRvdWJsZSBjaGVjayB3aGVuIGRvIHdl IG5lZWQgdG8gZ2V0IFRyYW5zYWN0aW9uSWQuCisKKwlmbGFncyA9IHBxX2dldG1zZ2ludChpbiwg MSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgZmxhZ3Mg JXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisJKmxzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsK KwkqcHJlZml4ID0gcHFfZ2V0bXNnc3RyaW5nKGluKTsKKwkqc3ogPSBwcV9nZXRtc2dpbnQoaW4s IDQpOworCW1zZyA9IChjaGFyICopIHBxX2dldG1zZ2J5dGVzKGluLCAqc3opOworCisJcmV0dXJu IG1zZzsKK30KKworLyoKKyAqIFdyaXRlIERETCBNRVNTQUdFIHRvIHN0cmVhbQorICovCit2b2lk Citsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUg c3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3Nl bmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0RETE1FU1NBR0UpOworCisJLyogdHJhbnNhY3Rp b24gSUQgKGlmIG5vdCB2YWxpZCwgd2UncmUgbm90IHN0cmVhbWluZykgKi8KKwlpZiAoVHJhbnNh Y3Rpb25JZElzVmFsaWQoeGlkKSkKKwkJcHFfc2VuZGludDMyKG91dCwgeGlkKTsKKworCXBxX3Nl bmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2VuZHN0 cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRieXRl cyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0 aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0xMjE4LDYgKzEyNjQsOCBAQCBsb2dp Y2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4g IlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJNRVNT QUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMTUVTU0FHRToKKwkJCXJldHVybiAiRERM IjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVH SU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDAzZDljOWM4 NmEuLjA3M2U0MjQ0ZmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhl YXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9n aWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9zbG90LmgiCkBAIC01MTUsNiArNTE2LDE0IEBAIFJlb3JkZXJCdWZmZXJS ZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5n ZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRh Lm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9ERExNRVNTQUdFOgorCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ICE9IE5V TEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgpOworCQkJY2hhbmdlLT5k YXRhLmRkbG1zZy5wcmVmaXggPSBOVUxMOworCQkJaWYgKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVz c2FnZSAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJ CQljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2UgPSBOVUxMOworCQkJYnJlYWs7CiAJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJCWlmIChjaGFuZ2UtPmRhdGEu aW52YWwuaW52YWxpZGF0aW9ucykKIAkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuaW52YWwuaW52YWxp ZGF0aW9ucyk7CkBAIC04NjksNiArODc4LDM2IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2Uo UmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogCX0KIH0KIAorLyoKKyAqIEEg dHJhbnNhY3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJvY2Vzc2VkIHVwb24g Y29tbWl0LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIGNv bnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIg Km1lc3NhZ2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBl KQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVmZmVyQ2hhbmdlICpj aGFuZ2U7CisKKwlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklkKTsKKworCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOworCisJY2hhbmdlID0g UmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24gPSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfRERMTUVTU0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCA9IHBz dHJkdXAocHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0gcmVsaWQ7CisJY2hh bmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNn Lm1lc3NhZ2Vfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3Nh Z2UgPSBwYWxsb2MobWVzc2FnZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlLCBtZXNzYWdlLCBtZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1ZmZlclF1ZXVlQ2hh bmdlKHJiLCB4aWQsIGxzbiwgY2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7Cit9CisKIC8qCiAgKiBBc3NlcnRUWE5Mc25PcmRlcgogICoJCVZlcmlm eSBMU04gb3JkZXJpbmcgb2YgdHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJlb3JkZXJidWZmZXIK QEAgLTE5NjgsNiArMjAwNywyOSBAQCBSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCWNoYW5nZS0+ZGF0YS5tc2cu bWVzc2FnZSk7CiB9CiAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFJlb3JkZXJCdWZmZXJQ cm9jZXNzVFhOIGZvciBhcHBseWluZyB0aGUgRERMIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZAorUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFu Z2UsIGJvb2wgc3RyZWFtaW5nKQoreworCWlmIChzdHJlYW1pbmcpCisJCXJiLT5zdHJlYW1fZGRs bWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxt c2cucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwKKwkJCQkJCQkg IGNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxt c2cubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlKTsK KwllbHNlCisJCXJiLT5kZGxtZXNzYWdlKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJCQkgICBj aGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5y ZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLAorCQkJCQkgICBjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1z Zy5tZXNzYWdlKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlk IGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhh dCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hpbGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCkBA IC0yMzQ4LDYgKzI0MTAsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVz c2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwogCisJCQkJY2Fz ZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCQkJUmVvcmRlckJ1ZmZlckFw cGx5RERMTWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CisJCQkJCWJyZWFrOwor CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJCQkvKiBF eGVjdXRlIHRoZSBpbnZhbGlkYXRpb24gbWVzc2FnZXMgbG9jYWxseSAqLwogCQkJCQlSZW9yZGVy QnVmZmVyRXhlY3V0ZUludmFsaWRhdGlvbnMoY2hhbmdlLT5kYXRhLmludmFsLm5pbnZhbGlkYXRp b25zLApAQCAtMzc3MSw2ICszODM3LDQwIEBAIFJlb3JkZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2Uo UmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJICAgY2hhbmdl LT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5t ZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4KSArIDE7CisKKwkJ CQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZV9zaXplICsK KwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihT aXplKTsKKwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJ ZGF0YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0No YW5nZSk7CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJ CQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJ CS8qIHdyaXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6 ZSAqLworCQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJ ZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRs bXNnLnJlbGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQlt ZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwgc2l6ZW9mKGludCkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0YS5k ZGxtc2cucHJlZml4LAorCQkJCQkgICBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSArPSBwcmVmaXhf c2l6ZTsKKworCQkJCS8qIHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLwor CQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUsIHNpemVv ZihTaXplKSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsIGNo YW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlX3NpemUpOworCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3Np emU7CisKIAkJCQlicmVhazsKIAkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5W QUxJREFUSU9OOgpAQCAtNDA4NSw2ICs0MTg1LDE1IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2VTaXpl KFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSkKIAkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNo YW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplICsKIAkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9m KFNpemUpOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RETE1FU1NBR0U6CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdl LT5kYXRhLmRkbG1zZy5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hh bmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXpl b2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpOworCiAJCQkJYnJlYWs7CiAJCQl9 CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAgLTQzNjAsNiAr NDQ2OSwzMyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwg UmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vf c2l6ZSk7CiAJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKIAorCQkJ CWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgor CQkJeworCQkJCVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJ CQltZW1jcHkoJnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0g c2l6ZW9mKFNpemUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5yZWxpZCwgZGF0 YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZj aGFuZ2UtPmRhdGEuZGRsbXNnLmNtZHR5cGUsIGRhdGEsIHNpemVvZihpbnQpKTsKKwkJCQlkYXRh ICs9IHNpemVvZihpbnQpOworCQkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTWVtb3J5 Q29udGV4dEFsbG9jKHJiLT5jb250ZXh0LCBwcmVmaXhfc2l6ZSk7CisJCQkJbWVtY3B5KGNoYW5n ZS0+ZGF0YS5kZGxtc2cucHJlZml4LCBkYXRhLCBwcmVmaXhfc2l6ZSk7CisJCQkJQXNzZXJ0KGNo YW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4W3ByZWZpeF9zaXplIC0gMV0gPT0gJ1wwJyk7CisJCQkJ ZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8qIHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJCQlt ZW1jcHkoJmNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkp OworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2Fn ZSA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwKKwkJCQkJCQkJCQkJCQkJCSAgY2hh bmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2UsIGRhdGEsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsK KwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOworCiAJCQkJYnJlYWs7 CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDU2Zjc1M2Q5ODcuLmY4ODI1 Y2JlODUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMTU2 LDYgKzE1Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFr ZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBh cnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9iZ3dvcmtlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCkBAIC0xNzks NyArMTgwLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29w L2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29w L3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9jYXRj YWNoZS5oIgpAQCAtMjQ2NCw2ICsyNDY4LDIzMCBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3Ry aW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qIFJlbW92ZSB0aGUg ZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KK3N0YXRpYyB2b2lkCitwcmVwcm9j ZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFu ZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopY29tbWFuZCk7 CisKKwlzd2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEVf QVM6CisJCWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRhYmxlQXNT dG10ICpjYXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsKKwkJCQlp ZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAq IGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJ ICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQljYXN0bXQtPmludG8tPnNraXBE YXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDTURUQUdfU0VMRUNU OgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVjdFN0bXQgKikgY29tbWFuZC0+ c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBOVUxMKQorCQkJCXsKKwkJCQkJ LyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEK KwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRo ZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCXNzdG10LT5pbnRv Q2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJZGVmYXVs dDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5k CisgKgorICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIFRBQkVMIGNv bW1hbmQgdG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERN TCBjaGFuZ2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAq IGhhdmluZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBw dWJsaWNhdGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3Rt dCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIJICpydiA9 IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFtZXNwYWNlID0gSW52YWxpZE9pZDsK KwljaGFyIAkJICpzY2hlbWFuYW1lID0gTlVMTDsKKwljaGFyCQkgKnJlbG5hbWUgPSBOVUxMOwor CisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwlz d2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEU6CisJCQl7 CisJCQkJQ3JlYXRlU3RtdCAqY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10Owor CQkJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlicmVhazsKKwl9CisKKwlpZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1lID0gcnYt PnNjaGVtYW5hbWU7CisJcmVsbmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVtYW5hbWUg IT0gTlVMTCkKKwkJcmVsbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1hbmFtZSwg ZmFsc2UpOworCisJaWYgKHJlbG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxpZCA9IGdl dF9yZWxuYW1lX3JlbGlkKHJlbG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQlyZWxpZCA9 IFJlbG5hbWVHZXRSZWxpZChyZWxuYW1lKTsKKworCWlmIChyZWxpZCAhPSBJbnZhbGlkT2lkKQor CXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgcmVsaWQs CisJCQkJCQkJCVNVQlJFTF9TVEFURV9SRUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIp OworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBcIiVzXCIg YWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBNeVN1YnNj cmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfZGRs KFN0cmluZ0luZm8gcykKK3sKKwlYTG9nUmVjUHRyIGxzbjsKKwljb25zdCBjaGFyICpwcmVmaXgg PSBOVUxMOworCWNoYXIgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21tYW5kOwor CVNpemUJCXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNl dHJlZV9pdGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVl cnlfc3RyaW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdlKHMsICZs c24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJhbnNhY3Rp b24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKworCWRkbF9jb21tYW5k ID0gZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGVidWdfcXVlcnlfc3Ry aW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlv biAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKKwlwYXJzZXRy ZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKKworCWZvcmVhY2gocGFyc2V0 cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkgICAqcGxhbnRyZWVfbGlzdDsK KwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQJICAgKmNvbW1hbmQgPSAoUmF3 U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21tYW5kVGFnCWNvbW1hbmRUYWc7 CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0ID0gTlVMTDsKKwkJUG9ydGFs CQlwb3J0YWw7CisJCWJvb2wJCSBzbmFwc2hvdF9zZXQgPSBmYWxzZTsKKworCQljb21tYW5kVGFn ID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCQkvKiBJZiB3ZSBnb3Qg YSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3IgY29tbWFuZCwgcXVpdCAqLworCQlD SEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92ZSBkYXRhIHBvcHVsYXRpb24gZnJv bSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKwor CQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJzZSBhbmFseXNpcy9wbGFubmluZyB3 aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVfcmVxdWlyZXNfc25hcHNob3QoY29t bWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90 KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvIHRo ZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0LWxpdmVkIGNvbnRleHQsIHRvCisJ CSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJlIGFyZSBtYW55IGNvbW1hbmRzIGlu IHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVlX2NvbnRleHQgPQorCQkJQWxsb2NT ZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICJleGVjdXRl X3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwKKwkJCQkJCQkJICBBTExPQ1NFVF9E RUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZXJf cGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9saXN0ID0gcGdfYW5hbHl6ZV9hbmRf cmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJZGRsX2NvbW1hbmQs CisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKworCQlwbGFudHJlZV9saXN0ID0gcGdf cGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29tbWFuZCwgMCwgTlVMTCk7CisKKwkJ LyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBwYXJzaW5nL3BsYW5uaW5nICovCisJ CWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCisJCXBvcnRhbCA9 IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIsIHRydWUsIHRydWUpOworCisJCS8q CisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGluZyBpbnRvIHRoZSBwb3J0YWwsIGJl Y2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2luZyBoZXJlIGlzIGluIEFwcGx5TWVz c2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRyZWVfY29udGV4dCwgYW5kIHNvIHdp bGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICovCisJCVBvcnRhbERlZmluZVF1ZXJ5 KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRsX2NvbW1hbmQsCisJCQkJCQkgIGNv bW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJCQkJCQkgIE5VTEwpOworCisJCS8q CisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0ZXJzIGhlcmUuCisJCSAqLworCQlQ b3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRTbmFwc2hvdCk7CisKKwkJLyoKKwkJ ICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4dCBmb3IgZXhlY3V0aW9uLgorCQkg Ki8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJCSh2b2lkKSBQb3J0 YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHRy dWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgTlVMTCk7CisK KwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlDb21tYW5kQ291bnRlckluY3JlbWVu dCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkgRERMIHJlcGxpY2F0aW9uIChkYXRh YmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBhZGRlZCB0byB0aGUgc3Vic2NyaXB0 aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3RhYmxlKGNvbW1hbmQpOworCisJCS8q IE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBjb250ZXh0LCBpZiBvbmUgd2FzIGNy ZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVyX3BhcnNldHJlZV9jb250ZXh0KTsK Kwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZzsKKwll bmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAKIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9u IHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTI1MjksNiArMjc1NywxMCBAQCBhcHBs eV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFrOwogCisJCWNhc2UgTE9H SUNBTF9SRVBfTVNHX0RETE1FU1NBR0U6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMpOworCQkJYnJl YWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJYXBwbHlfaGFu ZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggODgwNTgwZWQwMC4uMjI5MjI4YjA0MCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01Myw2ICs1Mywx MSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJ CQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1 dF9kZGxtZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQljb25zdCBj aGFyICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKIHN0YXRpYyBib29s IHBnb3V0cHV0X29yaWdpbl9maWx0ZXIoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJ CQkJCQkgICBSZXBPcmlnaW5JZCBvcmlnaW5faWQpOwogc3RhdGljIHZvaWQgcGdvdXRwdXRfYmVn aW5fcHJlcGFyZV90eG4oTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjU2LDYgKzI2 MSw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikK IAljYi0+Y2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT50cnVuY2F0ZV9jYiA9IHBn b3V0cHV0X3RydW5jYXRlOwogCWNiLT5tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwlj Yi0+ZGRsbWVzc2FnZV9jYiA9IHBnb3V0cHV0X2RkbG1lc3NhZ2U7CiAJY2ItPmNvbW1pdF9jYiA9 IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0 X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBAIF9QR19vdXRwdXRfcGx1Z2lu X2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9 IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1 dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwlj Yi0+c3RyZWFtX2RkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNzYWdlOwogCWNiLT5zdHJl YW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJl YW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICovCiAJY2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdv dXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpAQCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0cHV0X3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpv cHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2VzIGJpbmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91 dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9CSU5BUllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9y ZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoaXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5k IG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpAQCAtNDk5LDYgKzUwNyw3IEBAIHBnb3V0cHV0X3N0 YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpv cHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlvbiBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRp b25zID0gTklMOworCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25z X3ZhbGlkID0gZmFsc2U7CiAJCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNrKFBVQkxJQ0FU SU9OT0lELAogCQkJCQkJCQkJICBwdWJsaWNhdGlvbl9pbnZhbGlkYXRpb25fY2IsCkBAIC0xMzgx LDkgKzEzOTAsMjIgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFjdGlv biA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7CiAJ VHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sCQkJdGFibGVfcmV3cml0ZSA9 IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwogCisJ LyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUgdGhl bSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1lc3Nh Z2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUgYW5kCisJICogY2hlY2sgdGhlIHB1 YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0ZSkK Kwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0gcmVs YXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJ CXJldHVybjsKIApAQCAtMTQxNyw2ICsxNDM5LDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2VydChm YWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUgY2hh bmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJICov CisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJ cmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0dGlu ZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0YS0+ Y29udGV4dCk7CiAKQEAgLTE0NDYsOCArMTQ3NSw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAogCQkJ LyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdl dHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkKKwkJ CWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdldHJl bCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAKIAkJ CS8qCkBAIC0xNDY3LDggKzE0OTYsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9zY2hl bWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdpblBy ZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4LT5v dXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVs ZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBpbnNl cnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxheSBp dC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1 Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAodGFi bGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0 YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJCQkJ CQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0ZV9p bnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwg dHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpA QCAtMTU5OCw2ICsxNjM4LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJfQog CisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJLyog Q2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRleHRS ZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE2NzUsOCArMTcxOCw4IEBAIHBnb3V0cHV0X3RydW5j YXRlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CiBzdGF0aWMgdm9pZAogcGdvdXRwdXRfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpj dHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKLQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Ym9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCi0JCQkJIGNv bnN0IGNoYXIgKm1lc3NhZ2UpCisJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJh bnNhY3Rpb25hbCwKKwkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKQogewogCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4 LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CiAJVHJhbnNhY3Rpb25JZCB4aWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKQEAgLTE3MTYsNiArMTc1OSwxMzcgQEAgcGdvdXRwdXRfbWVzc2FnZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlPdXRwdXRQ bHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK KwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBP aWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRhdGEgPSAoUEdPdXRwdXREYXRh ICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0cHV0VHhuRGF0YSAqdHhuZGF0 YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUmVs YXRpb24JcmVsYXRpb24gPSBOVUxMOworCVRyYW5zYWN0aW9uSWQgeGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJLyoKKwkgKiBSZW1l bWJlciB0aGUgeGlkIGZvciB0aGUgbWVzc2FnZSBpbiBzdHJlYW1pbmcgbW9kZS4gU2VlCisJICog cGdvdXRwdXRfY2hhbmdlLgorCSAqLworCWlmIChpbl9zdHJlYW1pbmcpCisJCXhpZCA9IHR4bi0+ eGlkOworCisJc3dpdGNoIChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6 CisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0byBhIGRlbGV0ZWRf cmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBwdWJsaWNhdGlvbiB0 aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4gV2UKKwkJCSAqIG5lZWQgdGhpcyBiZWNhdXNl IG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJCSAqIHZhbGlkLiBM YXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9yIGEgcmVsaWQKKwkJ CSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5IHRoZW4gc2VuZCB0 aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRH ZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJCQlyZWxlbnRyeSA9 IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmIChyZWxlbnRyeS0+ cHViYWN0aW9ucy5wdWJkZGwpCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsYXBwZW5kX29p ZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlSZWxhdGlvbkNsb3NlKHJlbGF0 aW9uKTsKKwkJCXJldHVybjsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wRW5kOgorCQkJaWYgKCFsaXN0 X21lbWJlcl9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKSkKKwkJCQlyZXR1cm47CisJ CQllbHNlCisJCQkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBsaXN0X2RlbGV0ZV9vaWQoZGF0YS0+ ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwkJCWJyZWFrOworCQljYXNlIERDVF9UYWJsZUFsdGVy OgorCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRlIGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUg b3JpZ2luYWwgZGRsIG1lc3NhZ2UgdG8KKwkJCSAqIHN1YnNjcmliZXIsIHRoZW4gY29udmVydCB0 aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8gVVBEQVRFIGFuZAorCQkJICogc2VuZCB0aGVt IHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQKKwkJ CSAqIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFdl IGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKwkJCSAqCisJCQkgKiAoMSkgVGhl IGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBh bW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4 dHJhIGRhdGEgaW4gc3Vic2NyaWJlcgorCQkJICogd2hpY2ggZG9lc24ndCBleGlzdCBpbiBwdWJs aXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLCB3ZSBuZWVkIHRvIGxldAorCQkJICogdGhlIHN1YnNj cmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3cml0ZSBhbGwgdGhl CisJCQkgKiBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJCSAqICgyKSB0aGUgZGF0YSBhZnRlciBl eGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlmZmVyZW50IGFtb25nCisJCQkgKiBwdWJs aXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3Jz IHVzZWQKKwkJCSAqIGR1cmluZyByZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhl IHJld3JpdGUgVVBEQVRFcyB0byBrZWVwCisJCQkgKiB0aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJ ICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGltcHJvdmUgdGhpcyBieSBsZXR0aW5nIHRo ZSBzdWJzY3JpYmVyIG9ubHkKKwkJCSAqIHJld3JpdGUgdGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBv ZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZCB1c2UgdGhlCisJCQkgKiB1cGNvbWluZyByZXdyaXRl IFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBCZXNpZGVzLCB3ZSBtYXkKKwkJCSAq IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2VzIGZvciBhbGwgdHlwZSBvZiByZXdyaXRl IGRkbCwgZm9yCisJCQkgKiBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyBy ZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSCisJCQkgKiBUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBk YXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlCisJCQkgKiBjaGFuZ2VkLgorCQkJ ICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisJCQlBc3Nl cnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCBy ZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNlbmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9u J3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUgZGRsCisJCQkgKiBuZWVkIHRvIGJlIHB1Ymxp c2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkgKi8KKwkJCWlmICghcmVsZW50cnktPnB1 YmFjdGlvbnMucHViZGRsIHx8CisJCQkJcmVsZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVs aWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJ fQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfU2ltcGxlQ21kOgorCQkJcmVsYXRpb24gPSBSZWxh dGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlpZiAocmVsYXRpb24gPT0gTlVMTCkKKwkJ CQlicmVhazsKKworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRp b24pOworCisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkKKwkJCXsKKwkJCQlS ZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWJyZWFrOwor CQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisJ CWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUp OworCQkJYnJlYWs7CisJfQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLwor CWlmICh0eG5kYXRhICYmICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2Vu ZF9iZWdpbihjdHgsIHR4bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVl KTsKKwlsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2UoY3R4LT5vdXQsCisJCQkJCQkJCXhpZCwK KwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZpeCwKKwkJCQkJCQkJc3osCisJCQkJ CQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CisKKwlpZiAocmVs YXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworfQorCiAvKgogICogUmV0dXJuIHRy dWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIG9yaWdpbiBhbmQgdGhlIHVzZXIg aGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBkb24ndCBoYXZlIGFuIG9yaWdpbiwg ZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMTk5Nyw3ICsyMTcxLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5 KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFf c2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1 YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRl ID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0 aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsK IAkJZW50cnktPm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0gTlVMTDsKIAkJ bWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7CkBA IC0yMDU1LDYgKzIyMzAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRh LCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFs c2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwg PSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVi dWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAtMjE2OCw2ICsyMzQ0LDcgQEAgZ2V0X3JlbF9zeW5j X2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnkt PnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJ ZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7 CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWItPnB1YmFjdGlv bnMucHViZGRsOwogCiAJCQkJLyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5n ZXMgYXMgdGhlIHRvcC1tb3N0IGFuY2VzdG9yCkBAIC0yMzUzLDYgKzI1MzAsNyBAQCByZWxfc3lu Y19jYWNoZV9wdWJsaWNhdGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFz aHZhbHVlKQogCXsKIAkJZW50cnktPnJlcGxpY2F0ZV92YWxpZCA9IGZhbHNlOwogCX0KKwogfQog CiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9yaWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hl LmMKaW5kZXggMDBkYzBmMjQwMy4uZjFiNGQwOTNjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCkBAIC01NjgzLDYgKzU2ODMsNyBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25EZXNj KFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1YmRlc2Mt PnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHViZGVzYy0+ cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJkZXNjLT5w dWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlwdWJkZXNj LT5wdWJhY3Rpb25zLnB1YmRkbCB8PSBwdWJmb3JtLT5wdWJkZGw7CiAKIAkJLyoKIAkJICogQ2hl Y2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0aGUgZmlsdGVyIGV4cHJlc3Npb24gYXJl IHBhcnQKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCmluZGV4IDY3YjZkOTA3OWUuLjliMzhhN2NhMzUgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YwpAQCAtMzg5Niw2ICszODk2LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCWludAkJCWlfcHVidXBkYXRlOwogCWludAkJCWlfcHViZGVs ZXRlOwogCWludAkJCWlfcHVidHJ1bmNhdGU7CisJaW50CQkJaV9wdWJkZGw7CiAJaW50CQkJaV9w dWJ2aWFyb290OwogCWludAkJCWksCiAJCQkJbnR1cHM7CkBAIC0zOTExLDIzICszOTEyLDIzIEBA IGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAly ZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwot CWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVy c2lvbiA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAi U0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3du ZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUs IHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIHAucHViZGRsLCBwLnB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJs aWNhdGlvbiBwIik7CiAJZWxzZSBpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMTAwMDApCiAJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQs IHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAu cHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1 YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAucHViYWxsdGFibGVz LCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5jYXRlLCBm YWxzZSBhcyBwLnB1YmRkbCwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBn X3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAog CQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkg InAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5w dWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVi dmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBk YXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMgcHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRs LCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIp OwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBM RVNfT0spOwpAQCAtMzk0Myw2ICszOTQ0LDcgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZv dXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywg InB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIp OwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1 YmRkbCA9IFBRZm51bWJlcihyZXMsICJwdWJkZGwiKTsKIAlpX3B1YnZpYXJvb3QgPSBQUWZudW1i ZXIocmVzLCAicHVidmlhcm9vdCIpOwogCiAJcHViaW5mbyA9IHBnX21hbGxvYyhudHVwcyAqIHNp emVvZihQdWJsaWNhdGlvbkluZm8pKTsKQEAgLTM5NjYsNiArMzk2OCw4IEBAIGdldFB1YmxpY2F0 aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAoUFFn ZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5w dWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5jYXRl KSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGwgPQorCQkJKHN0cmNtcChQUWdldHZh bHVlKHJlcywgaSwgaV9wdWJkZGwpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnZpYXJv b3QgPQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290KSwgInQiKSA9 PSAwKTsKIApAQCAtNDA0NSw2ICs0MDQ5LDE1IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZlICpm b3V0LCBjb25zdCBQdWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0gZmFsc2U7CiAJ fQogCisJaWYgKHB1YmluZm8tPnB1YmRkbCkKKwl7CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7CisKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICJkZGwiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwl9CisKIAlhcHBlbmRQUUV4cEJ1ZmZlckNo YXIocXVlcnksICdcJycpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApp bmRleCA2OWVlOTM5ZDQ0Li42YzU1ZGUzYTNkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYyMCw2ICs2MjAs NyBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHViZGVsZXRlOwog CWJvb2wJCXB1YnRydW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJYm9vbAkJcHViZGRsOwog fSBQdWJsaWNhdGlvbkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAv cm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMxN2Ji NGMuLjc5MmY0Mzg5NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5j CisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAj aW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNw YWNlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxp Y2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNp bmNsdWRlICJybWdyZGVzYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMKaW5kZXggYzY0NWQ2NjQxOC4uMmU5NGZjYTc0NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYxNTksNyArNjE1 OSw3IEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZl ckRhdGEgYnVmOwogCVBHcmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNl dC5wb3B0OwotCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0 aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQu c3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjE5NCw2ICs2MTk0LDEwIEBAIGxpc3RQdWJsaWNh dGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJ CQkJCSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3Ao IlZpYSByb290IikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsIEFTIFwiJXNcIiIsCisJCQkJCQkg IGdldHRleHRfbm9vcCgiRERMcyIpKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJ CQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAgLTYyODQsNiAr NjI4OCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdy ZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQloYXNfcHVidmlh cm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRpdGxlOwogCXBy aW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02MzAwLDYgKzYzMDUsNyBAQCBkZXNjcmliZVB1Ymxp Y2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBzZXQu c3ZlcnNpb24gPj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9uID49 IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApOwogCiAJ aW5pdFBRRXhwQnVmZmVyKCZidWYpOwogCkBAIC02MzEzLDYgKzYzMTksOSBAQCBkZXNjcmliZVB1 YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9vdCIpOworCWlm IChoYXNfcHViZGRsKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAiLCBw dWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdf Y2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYzNjQsNiArNjM3Myw4IEBAIGRlc2Ny aWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlpZiAo aGFzX3B1YnZpYXJvb3QpCiAJCQluY29scysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xz Kys7CiAKIAkJaW5pdFBRRXhwQnVmZmVyKCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0 aXRsZSwgXygiUHVibGljYXRpb24gJXMiKSwgcHVibmFtZSk7CkBAIC02Mzc4LDYgKzYzODksOCBA QCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJs ZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1ZSwgYWxpZ24p OwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBn ZXR0ZXh0X25vb3AoIlZpYSByb290IiksIHRydWUsIGFsaWduKTsKKwkJaWYgKGhhc19wdWJkZGwp CisJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkRETHMiKSwgdHJ1 ZSwgYWxpZ24pOwogCiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywg aSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZh bHVlKHJlcywgaSwgMyksIGZhbHNlLCBmYWxzZSk7CkBAIC02Mzg4LDYgKzY0MDEsOCBAQCBkZXNj cmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZENl bGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYgKGhh c19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVz LCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxl QWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFsc2UpOwogCiAJ CWlmICghcHViYWxsdGFibGVzKQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv cm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4IDAwMGJjYmZk YWYuLjM3ZGZkNDUxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCkBAIC00NywzICs0Nyw0IEBAIFBH X1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0VHMiLCBjb21taXRfdHNfcmVkbywgY29tbWl0 X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdSKFJNX1JFUExPUklHSU5fSUQsICJSZXBsaWNh dGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywgcmVwbG9yaWdpbl9kZXNjLCByZXBsb3JpZ2lu X2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQogUEdfUk1HUihSTV9HRU5FUklDX0lE LCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2VuZXJpY19kZXNjLCBnZW5lcmljX2lkZW50aWZ5 LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5VTEwpCiBQR19STUdSKFJNX0xPR0lDQUxNU0df SUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxtc2dfcmVkbywgbG9naWNhbG1zZ19kZXNjLCBs b2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBsb2dpY2FsbXNnX2RlY29kZSkK K1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwgIkxvZ2ljYWxERExNZXNzYWdlIiwgbG9naWNh bGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rlc2MsIGxvZ2ljYWxkZGxtc2dfaWRlbnRpZnks IE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxtc2dfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKaW5kZXggMGJmYWViOTY1ZC4uMmZiMzY1NGE2NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC0xMTgyNiw0ICsxMTgyNiwxMyBAQAogeyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAn ZXhwYW5kIGpzb24gZm9ybWF0IERETCB0byBhIHBsYWluIERETCBjb21tYW5kJywKICAgcHJvbmFt ZSA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywK ICAgcHJvYXJndHlwZXMgPT4gJ3RleHQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9j b21tYW5kJyB9LAoreyBvaWQgPT4gJzQ2NDQnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNv bW1hbmQgZGVwYXJzZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2Nv bW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVz ID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJyB9 LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVw YXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1h bmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMg PT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcg fSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRl cGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2Vf dGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0 eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUn IH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggZWNmNWEyOGUwMC4u ZGFmZDQ4Mzc2YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtNTQsNiAr NTQsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxhdGlvbklk KQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVzaW5nIHJv b3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgdGFibGUgY3Jl YXRpb25zIGFyZSBwdWJsaXNoZWQgKi8KKwlib29sCQlwdWJkZGw7CiB9IEZvcm1EYXRhX3BnX3B1 YmxpY2F0aW9uOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs3NSw3IEBAIHR5cGVk ZWYgc3RydWN0IFB1YmxpY2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlw dWJkZWxldGU7CiAJYm9vbAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNh dGlvbkFjdGlvbnM7CiAKIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uRGVzYwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IDEwMDkxYzNhYWYuLmZkMmVlN2ZmZTQgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTcxLDcgKzcxLDggQEAgZXh0ZXJuIHZv aWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNz LAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJl ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElk KTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUg KnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJCQkJCQkJ CQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUpOwogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZUVuZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KEludGVybmFsR3JhbnQgKmlzdG10KTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5hOGRjYTg2M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog ZGRsbWVzc2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNT QUdFX0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nl c3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vz cy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3Vw cG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRl ZiBlbnVtIERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJs ZURyb3BTdGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9P YmplY3RDcmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKwor LyoKKyAqIEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgor ICovCit0eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJCQkJ ZGJJZDsJCQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJCQkJcHJlZml4 X3NpemU7CS8qIGxlbmd0aCBvZiBwcmVmaXggKi8KKwlPaWQJCQkJCQlyZWxpZDsJCQkvKiBpZCBv ZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlCQljbWR0eXBlOwkJLyogdHlwZSBv ZiBzcWwgY29tbWFuZCAqLworCVNpemUJCQkJCW1lc3NhZ2Vfc2l6ZTsJICAvKiBzaXplIG9mIHRo ZSBtZXNzYWdlICovCisKKwkvKgorCSAqIHBheWxvYWQsIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0 ZWQgcHJlZml4IG9mIGxlbmd0aCBwcmVmaXhfc2l6ZQorCSAqLworCWNoYXIJCW1lc3NhZ2VbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKK30geGxfbG9naWNhbF9kZGxfbWVzc2FnZTsKKworI2RlZmlu ZSBTaXplT2ZMb2dpY2FsRERMTWVzc2FnZQkob2Zmc2V0b2YoeGxfbG9naWNhbF9kZGxfbWVzc2Fn ZSwgbWVzc2FnZSkpCisKK2V4dGVybiBYTG9nUmVjUHRyIExvZ0xvZ2ljYWxERExNZXNzYWdlKGNv bnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCQkJCQkgICBjb25zdCBjaGFyICpkZGxfbWVzc2FnZSwgc2l6ZV90IHNpemUpOworCisv KiBSTUdSIEFQSSovCisjZGVmaW5lIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRQkweDAwCit2b2lk CQlsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwordm9pZAkJbG9n aWNhbGRkbG1zZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7 Citjb25zdCBjaGFyICpsb2dpY2FsZGRsbXNnX2lkZW50aWZ5KHVpbnQ4IGluZm8pOworCisjZW5k aWYKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKaW5kZXggNzQxYmY2NWNmNy4uNDI3YTdiOTk3ZCAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmgKQEAgLTI3LDYgKzI3LDcgQEAgZXh0ZXJuIHZvaWQg aGVhcDJfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZl ciAqYnVmKTsKIGV4dGVybiB2b2lkIHhhY3RfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4dGVybiB2b2lkIHN0YW5kYnlfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIGV4 dGVybiB2b2lkIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxkZGxtc2dfZGVjb2Rl KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKTsKIAog ZXh0ZXJuIHZvaWQgTG9naWNhbERlY29kaW5nUHJvY2Vzc1JlY29yZChMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggN2VhYTRjOTdlZC4uNWQ2MTc0ODRm YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTYxLDYgKzYxLDcg QEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBNc2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFU SU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01TR19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01T R19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFID0gJ0wnLAogCUxP R0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQ QVJFID0gJ1AnLAogCUxPR0lDQUxfUkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0y MjksNyArMjMwLDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHJ1bmNhdGUoU3Ry aW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogZXh0ZXJuIExpc3QgKmxvZ2ljYWxyZXBf cmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJICBib29sICpjYXNjYWRlLCBi b29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdl KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCi0JCQkJ CQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOworCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor ZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAq cHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dp Y2FscmVwX3JlYWRfZGRsbWVzc2FnZShTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpsc24sIGNv bnN0IGNoYXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3Jp dGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIFJlbGF0 aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsYXRpb24g KmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggYjdkMjhkNzA0NS4uNzYzZTQzZjZiZSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOTAsNiArOTAsMTggQEAgdHlwZWRl ZiB2b2lkICgqTG9naWNhbERlY29kZU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsCiAJCQkJCQkJCQkJU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJY29u c3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBDYWxsZWQgZm9yIHRoZSBsb2dpY2FsIGRlY29k aW5nIERETCBtZXNzYWdlcy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZURETE1l c3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJ ICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2Fn ZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSAgIE9p ZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJ CQkJCQkJICAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVz c2FnZSk7CisKIC8qCiAgKiBGaWx0ZXIgY2hhbmdlcyBieSBvcmlnaW4uCiAgKi8KQEAgLTIwMSw2 ICsyMTMsMTkgQEAgdHlwZWRlZiB2b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikg KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBTaXplIG1l c3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAq IENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMgZnJv bSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpMb2dp Y2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJ CQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVm aXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29tbWFu ZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJ CQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIENhbGxiYWNrIGZvciBzdHJlYW1p bmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCkBAIC0yMjEs NiArMjQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNh bERlY29kZVRydW5jYXRlQ0IgdHJ1bmNhdGVfY2I7CiAJTG9naWNhbERlY29kZUNvbW1pdENCIGNv bW1pdF9jYjsKIAlMb2dpY2FsRGVjb2RlTWVzc2FnZUNCIG1lc3NhZ2VfY2I7CisJTG9naWNhbERl Y29kZURETE1lc3NhZ2VDQiBkZGxtZXNzYWdlX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9y aWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Igc2h1 dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVn aW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdF9j YjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlMb2dp Y2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNv ZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29k ZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5DYWxs YmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0Lmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IDAyMDI3NTUwZTIuLjgz ZTBiMWUyZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgK KysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBA QCB0eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247 CiAJTGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOwor CUxpc3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAlib29sCQlzdHJlYW1p bmc7CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVy LmgKaW5kZXggMDJiNTlhMTkzMS4uMGIxYTkxNjFjNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaApAQCAtMTEsNiArMTEsOCBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0 dXBfZGV0YWlscy5oIgogI2luY2x1ZGUgImxpYi9pbGlzdC5oIgorI2luY2x1ZGUgIm5vZGVzL25v ZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0 b3JhZ2Uvc2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbGNhY2hlLmgiCkBAIC01Niw2ICs1OCw3IEBAIHR5cGVkZWYgZW51bSBSZW9yZGVyQnVm ZmVyQ2hhbmdlVHlwZQogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQsCiAJUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX1VQREFURSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfREVMRVRFLAorCVJF T1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9N RVNTQUdFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT04sCiAJUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9ULApAQCAtMTMwLDYgKzEzMywxNiBAQCB0eXBl ZGVmIHN0cnVjdCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCQljaGFyCSAgICptZXNzYWdlOwogCQl9 CQkJbXNnOwogCisJCS8qIERETCBNZXNzYWdlLiAqLworCQlzdHJ1Y3QKKwkJeworCQkJY2hhcgkg ICAqcHJlZml4OworCQkJU2l6ZQkJbWVzc2FnZV9zaXplOworCQkJY2hhcgkgICAqbWVzc2FnZTsK KwkJCU9pZAkJCXJlbGlkOworCQkJRGVwYXJzZWRDb21tYW5kVHlwZQljbWR0eXBlOworCQl9CQkJ ZGRsbXNnOworCiAJCS8qIE5ldyBzbmFwc2hvdCwgc2V0IHdoZW4gYWN0aW9uID09ICpfSU5URVJO QUxfU05BUFNIT1QgKi8KIAkJU25hcHNob3QJc25hcHNob3Q7CiAKQEAgLTQzNSw2ICs0NDgsMTYg QEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIg KnJiLAogCQkJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQlj b25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJl ICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCKSAoUmVvcmRlckJ1 ZmZlciAqcmIsCisJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJ CSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcHJl Zml4LAorCQkJCQkJCQkJCSAgIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkgICBEZXBhcnNlZENvbW1h bmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJICAgU2l6ZSBzeiwKKwkJCQkJCQkJCQkgICBjb25z dCBjaGFyICptZXNzYWdlKTsKKwogLyogYmVnaW4gcHJlcGFyZSBjYWxsYmFjayBzaWduYXR1cmUg Ki8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJCZWdpblByZXBhcmVDQikgKFJlb3JkZXJC dWZmZXIgKnJiLAogCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKTsKQEAgLTUwMSw2 ICs1MjQsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikg KAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJ ICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxiYWNr IHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3Nh Z2VDQikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVs aWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJ CQkJIFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIHN0 cmVhbSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3Jk ZXJCdWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIg KnJiLApAQCAtNTUyLDYgKzU4Niw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1 ZmZlckFwcGx5VHJ1bmNhdGVDQiBhcHBseV90cnVuY2F0ZTsKIAlSZW9yZGVyQnVmZmVyQ29tbWl0 Q0IgY29tbWl0OwogCVJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IgbWVzc2FnZTsKKwlSZW9yZGVyQnVm ZmVyRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2U7CiAKIAkvKgogCSAqIENhbGxiYWNrcyB0byBiZSBj YWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2FjdGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBAIC01 NzEsNiArNjA2LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFt Q29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3Ry ZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdl OworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbG1lc3NhZ2U7CiAJ UmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKQEAg LTY1MCw2ICs2ODYsOSBAQCBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJl b3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSAgU25hcHNob3Qg c25hcCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29u c3QgY2hhciAqcHJlZml4LAogCQkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hh ciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKFJl b3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJ ICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAgY29u c3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUp OwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVyICpyYiwgVHJh bnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0 ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2luSWQg b3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNx bC5vdXQKaW5kZXggYTdmNTcwMGVkYy4uYmZjNzNjMjMyOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0CkBAIC01OTcwLDkgKzU5NzAsOSBAQCBMaXN0IG9mIHNjaGVtYXMKICgwIHJvd3Mp CiAKIFxkUnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5vLnN1Y2guc3Vic2Ny aXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBl NmUwODJkZTJmLi42ZDFiNzQzNGRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVk dW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRScAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z Ci0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRl c3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRp b25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUn KTsKIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cGliX2luc190cnVu Y3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZh dWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDIgcm93cykK IAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9SIFRBQkxF JyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogVGFibGVzIGZy b20gc2NoZW1hczoKQEAgLTk5LDIwICs5OSwyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0g c2hvdWxkIGJlIGFibGUgdG8gZHJvcCBzY2hlbWEgZnJvbSAnRk9SIFRBQkxFJyBwdWJsaWNhdGlv bgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIEFMTCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIAogLS0gc2hvdWxkIGJlIGFibGUg dG8gc2V0IHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBc ZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QiCiAKQEAgLTEzNCwxMCArMTM0LDEwIEBAIEVSUk9SOiAgcmVsYXRp b24gInRlc3RwdWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91 bGQgYmUgYWJsZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3Br OwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiAKQEAgLTE1OSwxMCArMTU5LDEwIEBAIFB1YmxpY2F0 aW9uczoKICAgICAidGVzdHB1Yl9mb3JhbGx0YWJsZXMiCiAKIFxkUnArIHRlc3RwdWJfZm9yYWxs dGFibGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcmFsbHRhYmxlcwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9yYWxsdGFibGVzCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHVi X3RibDI7CkBAIC0xNzQsMTkgKzE3NCwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMg Rk9SIFRBQkxFIHRlc3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1Ig VEFCTEUgT05MWSB0ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRS cCsgdGVzdHB1YjMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgog ICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1YjQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzIgogCkBAIC0yMDcsMTAgKzIwNywxMCBAQCBV UERBVEUgdGVzdHB1Yl9wYXJ0ZWQxIFNFVCBhID0gMTsKIC0tIG9ubHkgcGFyZW50IGlzIGxpc3Rl ZCBhcyBiZWluZyBpbiBwdWJsaWNhdGlvbiwgbm90IHRoZSBwYXJ0aXRpb24KIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ycGFydGVkIEFERCBUQUJMRSB0ZXN0cHViX3BhcnRlZDsKIFxkUnAr IHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfcGFydGVkIgogCkBAIC0yMjUsMTAgKzIyNSwxMCBAQCBBTFRFUiBUQUJMRSB0ZXN0 cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsKIFVQREFURSB0ZXN0 cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0 ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwogXGRScCsgdGVzdHB1 Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IHQgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1 Yl9wYXJ0ZWQiCiAKQEAgLTI1NywxMCArMjU3LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2Vz ID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1 Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkg V0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBc ZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3Ri bDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRl eHQpIEFORCAoZCA8IDUpKQpAQCAtMjczLDEwICsyNzMsMTAgQEAgVGFibGVzOgogCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4g MTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg fCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwyIiBX SEVSRSAoKGMgPD4gJ3Rlc3QnOjp0ZXh0KSBBTkQgKGQgPCA1KSkKQEAgLTI5MiwxMCArMjkyLDEw IEBAIFB1YmxpY2F0aW9uczoKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgRFJPUCBUQUJM RSB0ZXN0cHViX3JmX3RibDI7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYg ICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdI RVJFICgoZSA+IDEwMDApIEFORCAoZSA8IDIwMDApKQpAQCAtMzAzLDEwICszMDMsMTAgQEAgVGFi bGVzOgogLS0gcmVtb3ZlIHRlc3RwdWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBh Z2FpbiAoYW5vdGhlciBXSEVSRSBleHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjUgU0VUIFRBQkxFIHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzM5LDEwICszMzks MTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FU SU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZIHRlc3Rw dWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJF U0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgxCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKGUgPCA5OTkpCkBAIC0zNTIsMTAgKzM1MiwxMCBAQCBT RVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1h MS50ZXN0cHViX3JmX3RibDUgV0hFUkUgKGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0 Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4 MgotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4Mgor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAg InRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUiIFdIRVJFIChoIDwgOTk5KQpAQCAt Njc4LDEwICs2NzgsMTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJ VEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0 cHViX3RibDUgKGEpOwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCiAKQEAgLTgyMywx MCArODIzLDEwIEBAIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50 LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJf dGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJs X2JvdGhfZmlsdGVyc19wa2V5OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRl cnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAx KTsKIFxkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChj IDw+IDEpCiAKQEAgLTEwMzEsMTAgKzEwMzEsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1 Yl90YmwxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwK IENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90Ymwx OwogRVJST1I6ICBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBc ZFJwKyB0ZXN0cHViX2ZvcnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTEwNzIsMTAgKzEw NzIsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIKIAogXGRScCsgdGVz dHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3Rw dWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAgLTExNTMsMTAgKzExNTMsMTAg QEAgUkVWT0tFIENSRUFURSBPTiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyMjsKIERST1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRl c3RwdWJfdGJsMTsKIFxkUnArIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93 KQogCiAtLSBmYWlsIC0gbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbgpAQCAtMTE2NiwyMCAr MTE2NiwyMCBAQCBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcHVibGljYXRpb24gdGVzdHB1Yl9k ZWZhdWx0CiBSRVNFVCBST0xFOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IFJF TkFNRSBUTyB0ZXN0cHViX2ZvbzsKIFxkUnAgdGVzdHB1Yl9mb28KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgIE5hbWUg ICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZm9vIHwgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgIE5hbWUgICAgIHwgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNr IHRvIGtlZXAgdGhlIHJlc3Qgc2ltcGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBS RU5BTUUgVE8gdGVzdHB1Yl9kZWZhdWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZh dWx0IE9XTkVSIFRPIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVm YXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBwdWJsaWNhdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy MiB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyB0ZXN0cHViX2RlZmF1bHQgfCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhZGRpbmcgc2No ZW1hcyBhbmQgdGFibGVzCkBAIC0xMTk1LDE5ICsxMTk1LDE5IEBAIENSRUFURSBUQUJMRSAiQ1VS UkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSIoaWQgaW50KTsKIFNFVCBjbGllbnRfbWluX21l c3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEg Rk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBBTEwgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHViX3Rlc3QzOwogXGRScCsgdGVz dHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEyMjEsNDQgKzEyMjEsNDQgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBT Q0hFTUEgIkNVUlJFTlRfU0NIRU1BIiwKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3Rw dWI0X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAgICAg InB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgog CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJD VVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTI5MiwxMCArMTI5MiwxMCBAQCBF UlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBleGlzdAogLS0gZHJvcHBpbmcg dGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9uCiBEUk9Q IFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rl c3QyIgpAQCAtMTMwMywyMCArMTMwMywyMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVu YW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGluIHB1YmxpY2F0aW9u CiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJfdGVzdDFfcmVuYW1lZDsKIFxk UnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIg U0NIRU1BIHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0 cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTMyNCwxMCArMTMyNCwxMCBAQCBU YWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gYWRkIHNjaGVtYQogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpA QCAtMTMzNiwxMCArMTMzNiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhp c3RlbnRfc2NoZW1hOwogRVJST1I6ICBzY2hlbWEgIm5vbl9leGlzdGVudF9zY2hlbWEiIGRvZXMg bm90IGV4aXN0CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAt MTM0OCwxMCArMTM0OCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7 CiBFUlJPUjogIHNjaGVtYSAicHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNh dGlvbiAidGVzdHB1YjFfZm9yc2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAg InB1Yl90ZXN0MiIKQEAgLTEzNTksMTAgKzEzNTksMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoK IC0tIGFsdGVyIHB1YmxpY2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTM3MCwxMCArMTM3MCwxMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogRVJST1I6ICB0YWJsZXMgZnJvbSBzY2hlbWEg InB1Yl90ZXN0MiIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbgogXGRScCsgdGVzdHB1 YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJwdWJfdGVzdDEiCiAKQEAgLTEzODEsMjkgKzEzODEsMjkgQEAgVGFibGVzIGZyb20gc2NoZW1h czoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMg SU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0 ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAt LSBkcm9wIGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEg RFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVibGljYXRpb24g c2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1h IFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MjsKIFxkUnArIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDEyLDEwICsxNDEyLDEwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjog IHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xNDI0LDEwICsxNDI0LDEwIEBAIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAt MTUwNiwxOCArMTUwNiwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBD UkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEg cm93KQogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEgU0VUIEFMTCBUQUJM RVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0x NTI3LDIwICsxNTI3LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9m b3J0YWJsZSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxCiBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50Ymwx LCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJs ZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIK IFRhYmxlcyBmcm9tIHNjaGVtYXM6Ci0tIAoyLjM3LjEKCg== --0000000000000016cf05e932d1b9 Content-Type: application/octet-stream; name="v23-0005-Support-DDL-of-GRANT-Command.patch" Content-Disposition: attachment; filename="v23-0005-Support-DDL-of-GRANT-Command.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8bv87uz4 RnJvbSBjZDAzNDRjODg1NTY3OGUwZmQ5OTFhYTc3ODIwZWFmNmNmMjEwY2JjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMTA6Mzc6MjEgLTA0MDAKU3ViamVjdDogW1BBVENI IDUvNl0gU3VwcG9ydCBEREwgb2YgR1JBTlQgQ29tbWFuZC4KCkdyYW50aW5nIHRoZSBmb2xsb3dp bmcgZ2xvYmFsIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQ6CjEpIEZvcmVpZ24gZGF0YSB3cmFw cGVyCjIpIHBhcmFtZXRlciAtIGV4OiBncmFudCBhbGwgb24gcGFyYW1ldGVyIHdhbF9idWZmZXJz IFRPIHRlc3Q7CjMpIHRhYmxlc3BhY2UgLSAgZXg6IGdyYW50IGNyZWF0ZSBvbiB0YWJsZXNwYWNl IHRiczEgdG8gdGVzdDsKNCkgZGF0YWJhc2UgLSAgZXg6IGdyYW50IGFsbCBvbiBkYXRhYmFzZSBw b3N0Z3JlcyB0byB0ZXN0Owo1KSByb2xlIC0gIGV4OiBncmFudCB0ZXN0IHRvIHRlc3QxOyAtLSBu byBldmVudCB0cmlnZ2VyIGZvciBnbG9iYWwgb2JqZWN0cwotLS0KIHNyYy9iYWNrZW5kL2NhdGFs b2cvYWNsY2hrLmMgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9k ZXBhcnNlLmMgICAgIHwgMjUwICsrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5k L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyAgIHwgICAzICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgMyArLQogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2lu dGVybmFsLmggICAgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAyNTkgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5j IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBhYTVhMmVkOTQ4Li43ZGMxOTBk ZGViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9i YWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKQEAgLTM4NSw3ICszODUsMTEgQEAgRXhlY3V0ZUdyYW50 U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCSBlcnJtc2coImdyYW50b3IgbXVz dCBiZSBjdXJyZW50IHVzZXIiKSkpOworCisJCWlzdG10LmdyYW50b3JfdWlkID0gZ3JhbnRvcjsK IAl9CisJZWxzZQorCQlpc3RtdC5ncmFudG9yX3VpZCA9IEludmFsaWRPaWQ7CiAKIAkvKgogCSAq IFR1cm4gdGhlIHJlZ3VsYXIgR3JhbnRTdG10IGludG8gdGhlIEludGVybmFsR3JhbnQgZm9ybS4K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCmluZGV4IGYwZDM5MDlkOGMuLjI3MjdkZWNiY2Ig MTAwNzU1Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMzIsMTUgKzMyLDE5IEBACiAjaW5j bHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19hdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1 dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lv bi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19mb3JlaWduX2RhdGFfd3JhcHBlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9z ZXJ2ZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbi5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfaW5oZXJpdHMuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf bmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGNsYXNzLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19vcGVyYXRvci5oIgpAQCAtNzY1LDYgKzc2OSwzOSBAQCBuZXdfb2JqdHJlZV9m b3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpCiAJcmV0dXJuIHJvbGU7CiB9CiAKKy8qCisgKiBI ZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9J RC4gIChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1c2UgInB1YmxpYyIpLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlP YmpUcmVlICAgICpyb2xlOworCisJcm9sZSA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmIChyb2xl b2lkICE9IEFDTF9JRF9QVUJMSUMpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAg ICpyb2xlbmFtZTsKKworCQlyb2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0 SWRHZXREYXR1bShyb2xlb2lkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfT0JKRUNU KSwKKwkJCQkJIGVycm1zZygicm9sZSB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsIHJvbGVv aWQpKSk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVD VChyb2x0dXApKS0+cm9sbmFtZSk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJvbGUsICIle3Jv bGVuYW1lfUkiLCBwc3RyZHVwKHJvbGVuYW1lKSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1 cCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qocm9sZSwgIiV7cm9sZW5hbWV9 SSIsICJwdWJsaWMiKTsKKworCXJldHVybiByb2xlOworfQorCiAvKgogICogQSBoZWxwZXIgcm91 dGluZSB0byBzZXR1cCAle31UIGVsZW1lbnRzLgogICovCkBAIC0xNzEwLDYgKzE3NDcsMjE2IEBA IGRlcGFyc2VfQWx0ZXJPYmplY3RTY2hlbWFTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9k ZSAqcGFyc2V0cmVlLAogCXJldHVybiBhbHRlclN0bXQ7CiB9CiAKKy8qCisgKiBkZXBhcnNlIGFu IEdSQU5UIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRTdG10 KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlPYmpU cmVlCSAgICpncmFudFN0bXQ7CisJY2hhcgkgICAqZm10OworCWNoYXIJICAgKm9ianR5cGU7CisJ TGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCU9pZAkJCWNsYXNzSWQ7CisJT2Jq VHJlZQkgICAqdG1wOworCisJaXN0bXQgPSBjbWQtPmQuZ3JhbnQuaXN0bXQ7CisKKwkvKgorCSAq IElmIHRoZXJlIGFyZSBubyBvYmplY3RzIGZyb20gIkFMTCAuLi4gSU4gU0NIRU1BIiB0byBiZSBn cmFudGVkLCB0aGVuCisJICogd2UgbmVlZCBub3QgZG8gYW55dGhpbmcuCisJICovCisJaWYgKGlz dG10LT5vYmplY3RzID09IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGlzdG10LT5v Ymp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNlIE9CSkVDVF9UQUJMRToK KwkJCW9ianR5cGUgPSAiVEFCTEUiOworCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJCW9ianR5cGUgPSAiU0VRVUVO Q0UiOworCQkJY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9ET01BSU46CisJCQlvYmp0eXBlID0gIkRPTUFJTiI7CisJCQljbGFzc0lkID0gVHlw ZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJb2JqdHlwZSA9 ICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCQljbGFzc0lkID0gRm9yZWlnbkRhdGFXcmFwcGVy UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJ CW9ianR5cGUgPSAiRk9SRUlHTiBTRVJWRVIiOworCQkJY2xhc3NJZCA9IEZvcmVpZ25TZXJ2ZXJS ZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9OOgorCQkJb2JqdHlw ZSA9ICJGVU5DVElPTiI7CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9QUk9DRURVUkU6CisJCQlvYmp0eXBlID0gIlBST0NFRFVSRSI7 CisJCQljbGFzc0lkID0gUHJvY2VkdXJlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9ST1VUSU5FOgorCQkJb2JqdHlwZSA9ICJST1VUSU5FIjsKKwkJCWNsYXNzSWQgPSBQcm9j ZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJ b2JqdHlwZSA9ICJMQU5HVUFHRSI7CisJCQljbGFzc0lkID0gTGFuZ3VhZ2VSZWxhdGlvbklkOwor CQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJb2JqdHlwZSA9ICJMQVJH RSBPQkpFQ1QiOworCQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFr OworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQSI7CisJCQljbGFz c0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9UWVBF OgorCQkJb2JqdHlwZSA9ICJUWVBFIjsKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsKKwkJ CWJyZWFrOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFD RToKKwkJCW9ianR5cGUgPSAiIjsKKwkJCWNsYXNzSWQgPSBJbnZhbGlkT2lkOworCQkJZWxvZyhF UlJPUiwgImdsb2JhbCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIiwgaXN0bXQtPm9i anR5cGUpOworCX0KKworCWZtdCA9IHBzcHJpbnRmKCJHUkFOVCIpOworCisJZ3JhbnRTdG10ID0g bmV3X29ianRyZWVfVkEoZm10LCAwKTsKKworCS8qIGJ1aWxkIGxpc3Qgb2YgcHJpdmlsZWdlcyB0 byBncmFudCAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkFMTCBQUklWSUxFR0VTIiwgMCk7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlCisJeworCQlsaXN0ID0gTklMOworCisJCWlmIChp c3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9JTlNFUlQpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBB Q0xfU0VMRUNUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlNF TEVDVCIpKTsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCWlmIChpc3Rt dC0+cHJpdmlsZWdlcyAmIEFDTF9ERUxFVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf c3RyaW5nX29iamVjdCgiREVMRVRFIikpOworCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xf VFJVTkNBVEUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiVFJV TkNBVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVOQ0VTKQorCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlJFRkVSRU5DRVMiKSk7CisJ CWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUklHR0VSKQorCQkJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlRSSUdHRVIiKSk7CisJCWlmIChpc3RtdC0+cHJpdmls ZWdlcyAmIEFDTF9FWEVDVVRFKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QoIkVYRUNVVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VU0FHRSkK KwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJVU0FHRSIpKTsKKwkJ aWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KCJDUkVBVEUiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9DUkVBVEVfVEVNUCkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KCJURU1QT1JBUlkiKSk7CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DT05O RUNUKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkNPTk5FQ1Qi KSk7CisKKwkJaWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAg ICpvY2VsbDsKKworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJCXsKKwkJ CQlBY2Nlc3NQcml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0ICAgKmNvbHMgPSBO SUw7CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJCQkJZm9yZWFjaChjZWxsLCBwcml2 LT5jb2xzKQorCQkJCXsKKwkJCQkJU3RyaW5nICpjb2xuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5n LCBjZWxsKTsKKworCQkJCQljb2xzID0gbGFwcGVuZChjb2xzLAorCQkJCQkJCQkgICBuZXdfc3Ry aW5nX29iamVjdChzdHJWYWwoY29sbmFtZSkpKTsKKwkJCQl9CisJCQkJYXBwZW5kX2FycmF5X29i amVjdCh0bXAsICIoJXtjb2xzOiwgfXMpIiwgY29scyk7CisKKwkJCQlpZiAocHJpdi0+cHJpdl9u YW1lID09IE5VTEwpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJp dn1zIiwgIkFMTCBQUklWSUxFR0VTIik7CisJCQkJZWxzZQorCQkJCQlhcHBlbmRfc3RyaW5nX29i amVjdChncmFudFN0bXQsICIle3ByaXZ9cyIsIHByaXYtPnByaXZfbmFtZSk7CisKKwkJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCX0KKwkJfQorCX0K KwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50U3RtdCwgIiV7cHJpdmlsZWdlczosIH1zIE9OIiwg bGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0bXQsICIle29ianR5cGV9cyIs IG9ianR5cGUpOworCisJLyogdGFyZ2V0IG9iamVjdHMuICBXZSB1c2Ugb2JqZWN0IGlkZW50aXRp ZXMgaGVyZSAqLworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBpc3RtdC0+b2JqZWN0cykK Kwl7CisJCU9pZAkJb2JqaWQgPSBsZmlyc3Rfb2lkKGNlbGwpOworCQlPYmplY3RBZGRyZXNzIGFk ZHI7CisKKwkJYWRkci5jbGFzc0lkID0gY2xhc3NJZDsKKwkJYWRkci5vYmplY3RJZCA9IG9iamlk OworCQlhZGRyLm9iamVjdFN1YklkID0gMDsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiJXtp ZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCSAgIGdldE9iamVjdElkZW50aXR5KCZhZGRyLCBmYWxzZSkpOworCisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KGdyYW50U3RtdCwgIiV7cHJpdnRhcmdldDosIH1zIFRPIiwgbGlzdCk7CisKKwkvKiBsaXN0 IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIGlzdG10LT5ncmFu dGVlcykKKwl7CisJCU9pZAkJZ3JhbnRlZSA9IGxmaXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0g bmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZ3JhbnRlZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZ3Jh bnRTdG10LCAiJXtncmFudGVlczosIH1zIiwgbGlzdCk7CisKKwkvKiB0aGUgd29yZGluZyBvZiB0 aGUgZ3JhbnQgb3B0aW9uIGlzIHZhcmlhYmxlIC4uLiAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KGdyYW50U3RtdCwgIiV7Z3JhbnRfb3B0aW9ufXMiLAorCQkJCQkJIGlzdG10LT5ncmFudF9vcHRp b24gPyAgIldJVEggR1JBTlQgT1BUSU9OIiA6ICIiKTsKKworCWlmIChpc3RtdC0+Z3JhbnRvcl91 aWQpCisJeworCQlIZWFwVHVwbGUJcm9sdHVwOworCQljaGFyCSAgICpyb2xlbmFtZTsKKworCQly b2x0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShpc3RtdC0+ Z3JhbnRvcl91aWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJ CQkgZXJybXNnKCJyb2xlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgaXN0bXQtPmdyYW50 b3JfdWlkKSkpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRT VFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudFN0 bXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsIHJvbGVuYW1lKTsKKwkJUmVsZWFzZVN5c0Nh Y2hlKHJvbHR1cCk7CisJfQorCisJcmV0dXJuIGdyYW50U3RtdDsKK30KKwogLyoKICAqIERlcGFy c2UgYW4gQWx0ZXJPcGVyYXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4KICAq LwpAQCAtNjg0Nyw2ICs3MDk0LDkgQEAgZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVk Q29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToK IAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2Fz ZSBTQ1RfR3JhbnQ6CisJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWJyZWFr OwogCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgogCQkJdHJlZSA9IGRlcGFyc2VfQ3JlYXRlVGFi bGVBc1N0bXQoY21kKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5j CmluZGV4IDM5YjQwMWI1NzQuLmU0NzUxNDc3OGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKQEAgLTI0NzQsNyArMjQ3NCw4IEBAIHB1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2Nv bW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXsKIAkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0 bXQgPSAoUmVuYW1lU3RtdCAqKWNtZC0+cGFyc2V0cmVlOwogCi0JCQlpZiAocmVuYW1lU3RtdC0+ cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQlpZiAocmVuYW1lU3RtdCAmJgorCQkJ CXJlbmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVFlQRSAmJgogCQkJCXJlbmFtZVN0 bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCiAJCQkJY29udGludWU7CiAJCX0KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggMjE1ZTUyNmIwMS4uOWM3OTQ5 NjY5NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTk5OSw3ICs5 OTksOCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCkKIAkJCUNNRFRBR19EUk9QX1NDSEVNQSwKIAkJCUNNRFRBR19DUkVB VEVfSU5ERVgsCiAJCQlDTURUQUdfRFJPUF9JTkRFWCwKLQkJCUNNRFRBR19BTFRFUl9JTkRFWAor CQkJQ01EVEFHX0FMVEVSX0lOREVYLAorCQkJQ01EVEFHX0dSQU5UCiAJCX07CiAKIAkJQ29tbWFu ZFRhZwlpbml0X2NvbW1hbmRzW10gPSB7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9h Y2xjaGtfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oCmlu ZGV4IDM2MTI4NGQ4ZWIuLjRlMDIwZWY0YWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L2FjbGNoa19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5h bC5oCkBAIC0zOSw2ICszOSw3IEBAIHR5cGVkZWYgc3RydWN0CiAJTGlzdAkgICAqZ3JhbnRlZXM7 CiAJYm9vbAkJZ3JhbnRfb3B0aW9uOwogCURyb3BCZWhhdmlvciBiZWhhdmlvcjsKKwlPaWQJCQln cmFudG9yX3VpZDsKIH0gSW50ZXJuYWxHcmFudDsKIAogCi0tIAoyLjM3LjEKCg== --0000000000000016cf05e932d1b9 Content-Type: application/octet-stream; name="v23-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v23-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8bv87un0 RnJvbSBiNzMzZWM3MjJiNTAzZTU3ZGNhOTZiNDZlNmQ0YWM1OTE0ZGMwMTU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjAgU2VwIDIwMjIgMDk6Mjg6NDQgLTA0MDAKU3ViamVjdDogW1BBVENI IDEvNl0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgRERMIGNvbW1hbmRzLgoKVGhpcyBwYXRjaCBwcm92 aWRlcyBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBEREwgY29tbWFuZHMsIHdoaWNoIGNhbgpsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKZXhwYW5zaW9uLiBUaGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFs bG93IGZvciBtYWNoaW5lLWVkaXRpbmcgb2YKdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2Vy dGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCgpNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KY2F0YWxvZ3MsIG5v dCBmcm9tIHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVs aWFibHkKY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5v ZGUuCgpUaGlzIHByb3ZpZGVzIGEgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwg c3RhdGVtZW50cy4gQ3VycmVudGx5LAp0aGUgcGF0Y2ggaGFzIHN1cHBvcnQgZm9yOgoKQ1JFQVRF L0FMVEVSL0RST1AgVEFCTEUgLS0gTm90ZSAjMSwgTm90ZSAjMgpDUkVBVEUvQUxURVIvRFJPUCBT RVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTQ0hFTUEKQ1JFQVRFL0FMVEVSIEZVTkNUSU9OL1BS T0NFRFVSRQpDUkVBVEUvQUxURVIgVFJJR0dFUgpDUkVBVEUvRFJPUCBJTkRFWApDUkVBVEUvRFJP UCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQpDUkVBVEUvQUxURVIvRFJPUCBDQVNUCkNSRUFURS9B TFRFUi9EUk9QIERPTUFJTgpDUkVBVEUvQUxURVIvRFJPUCBUWVBFCkNSRUFURS9BTFRFUi9EUk9Q IENPTlZFUlNJT04KQ1JFQVRFL0FMVEVSL0RST1AgUE9MSUNZCkNSRUFURS9BTFRFUi9EUk9QIEVY VEVOU0lPTgpHUkFOVAoKKE5vdGUgIzEpIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVj ZWQgRERMcyhlLmcuIERETHMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3Vw cG9ydGVkLiBXZSBjYW4gZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZv ciBEREwgcmVwbGljYXRpb24uCgooTm90ZSAjMikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFD SCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0 byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJ VElPTkVEClRBQkxFIHdoaWxlIHRoZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMg Tk9STUFMIHRhYmxlLiBXZSB3aWxsCnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlz IGxhdGVyLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlICAgICAgIHwgICAgMiAr CiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICB8IDY4NTkgKysrKysrKysrKysr KysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jICAgICB8ICA3 NjMgKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICB8ICAgMzMgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgfCAgICAzICstCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcmVncHJvYy5jICAgICB8ICAgNTIgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICAgfCAgMTQ5ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAg ICB8ICAgIDYgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCAgICAgfCAgICAxICsK IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgIHwgICAyMyArCiBzcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVp bHRpbnMuaCAgICAgICAgfCAgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAg ICAgIHwgICAxMyArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICB8ICAgIDQg KwogMTQgZmlsZXMgY2hhbmdlZCwgNzg0MSBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFr ZWZpbGUKaW5kZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUK QEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJ ZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUu byBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJz ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAuLjE0ODQ1NWU0OGQKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0w LDAgKzEsNjg1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYwor ICoJICBGdW5jdGlvbnMgdG8gY29udmVydCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFy c2VhYmxlCisgKgkgIHJlcHJlc2VudGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIE5PVEVTCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRl IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRl ciBiZSByZS1wcm9jZXNzZWQgaW50byBwbGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJp bnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4gIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQg dG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBs YWNpbmcgY2VydGFpbiBub2RlcyB3aXRoaW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0 aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lz dGVtCisgKiBjYXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQg aXMgaW1wb3NzaWJsZSB0byByZWxpYWJseQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVk IGNvbW1hbmQgKGkuZS4gb25lIG5vdCBkZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0Yykg bG9va2luZyBvbmx5IGF0IHRoZSBwYXJzZSBub2RlLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVw YXJzZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJs ZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvbmFt ZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jYXN0LmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jbGFzcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisj aW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b252ZXJzaW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2V4dGVuc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19u YW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9j LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf c2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJjb21t YW5kcy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUg ImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAi bGliL2lsaXN0LmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJub2Rlcy9t YWtlZnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rl cy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1 ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisj aW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1 ZGUgInV0aWxzL3J1bGV1dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8q IEVzdGltYXRlZCBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBqc29uYiBzdHJpbmcgKi8KKyNkZWZp bmUgSlNPTkJfRVNUSU1BVEVEX0xFTiAxMjgKKworLyoKKyAqIEJlZm9yZSB0aGV5IGFyZSB0dXJu ZWQgaW50byBKU09OQiByZXByZXNlbnRhdGlvbiwgZWFjaCBjb21tYW5kIGlzCisgKiByZXByZXNl bnRlZCBhcyBhbiBvYmplY3QgdHJlZSwgdXNpbmcgdGhlIHN0cnVjdHMgYmVsb3cuCisgKi8KK3R5 cGVkZWYgZW51bQoreworCU9ialR5cGVOdWxsLAorCU9ialR5cGVCb29sLAorCU9ialR5cGVTdHJp bmcsCisJT2JqVHlwZUFycmF5LAorCU9ialR5cGVJbnRlZ2VyLAorCU9ialR5cGVGbG9hdCwKKwlP YmpUeXBlT2JqZWN0Cit9IE9ialR5cGU7CisKK3R5cGVkZWYgc3RydWN0IE9ialRyZWUKK3sKKwlz bGlzdF9oZWFkCXBhcmFtczsKKwlpbnQJCQludW1QYXJhbXM7CisJU3RyaW5nSW5mbwlmbXRpbmZv OworCWJvb2wJCXByZXNlbnQ7Cit9IE9ialRyZWU7CisKK3R5cGVkZWYgc3RydWN0IE9iakVsZW0K K3sKKwljaGFyCSAgICpuYW1lOworCU9ialR5cGUJCW9ianR5cGU7CisKKwl1bmlvbgorCXsKKwkJ Ym9vbAkJYm9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJ ZmxvYXQ4CQlmbHQ7CisJCU9ialRyZWUJICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJ fSB2YWx1ZTsKKwlzbGlzdF9ub2RlCW5vZGU7Cit9IE9iakVsZW07CisKK2Jvb2wgdmVyYm9zZSA9 IHRydWU7CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqbmFtZSwgTGlzdCAqYXJyYXkpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBmbG9hdDggdmFsdWUp Oworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5h bWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIGNoYXIgKmFwcGVuZF9vYmplY3RfdG9f Zm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lk IGFwcGVuZF9wcmVtYWRlX29iamVjdChPYmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKTsKK3N0 YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUs IGNoYXIgKnZhbHVlKTsKK3N0YXRpYyB2b2lkIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBl X29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1l LCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJCQkJIGJvb2wgKnR5cGFycmF5KTsKK3N0YXRpYyBM aXN0ICpGdW5jdGlvbkdldERlZmF1bHRzKHRleHQgKnByb2FyZ2RlZmF1bHRzKTsKK3N0YXRpYyBP YmpFbGVtICpuZXdfb2JqZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSk7CitzdGF0aWMgT2Jq VHJlZSAqbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9pZCBjbGFzc0lkLCBPaWQgb2JqZWN0 SWQpOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAq c3BlYyk7CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUp Oworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMs Li4uKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7Citz dGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNv bmJQYXJzZVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWls ZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLAorCQkJCQkJCQkJ IGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAorCQkJCQkJ CQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSk7Citz dGF0aWMgY2hhciAqUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51 bWJlciBhdHRubywKKwkJCQkJCQkJCSAgTGlzdCAqZHBjb250ZXh0LCBMaXN0ICoqZXhwcnMpOwor c3RhdGljIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSk7 CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwg TGlzdCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNv bGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBh cnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRl cl90YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09w ZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmlu ZSk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9v bCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJs ZVNldEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUg KmRlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKwor c3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQs IEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxl bSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpk ZXBhcnNlX1NlcV9NaW52YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2Vf U2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBi b29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1NlcV9Pd25lZEJ5KE9i alRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfU3RvcmFnZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1JlY2VpdmUoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9TZW5kKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf VHlwbW9kX091dChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUoT2JqVHJlZSAqcGFyZW50LCBG b3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlw ZV9TdWJzY3JpcHQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CisKK3N0 YXRpYyBMaXN0ICpkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpOworc3RhdGljIExp c3QgKmRlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVF bGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJCQkgICBib29sIHR5cGVkLCBib29sIGNv bXBvc2l0ZSk7CisKKy8qCisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9y IEFsdGVyUG9saWN5IGRlcGFyc2Ugb2JqZWN0cworICovCitzdGF0aWMgdm9pZAorYWRkX3BvbGlj eV9jbGF1c2VzKE9ialRyZWUgKnBvbGljeVN0bXQsIE9pZCBwb2xpY3lPaWQsIExpc3QgKnJvbGVz LAorCQkJCSAgIGJvb2wgZG9fcXVhbCwgYm9vbCBkb193aXRoX2NoZWNrKQoreworCVJlbGF0aW9u CXBvbFJlbCA9IHRhYmxlX29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KwlIZWFwVHVwbGUJcG9sVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwb2xSZWwsIEFu dW1fcGdfcG9saWN5X29pZCwgcG9saWN5T2lkKTsKKwlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOwor CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHBvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChG b3JtX3BnX3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBhZGQgdGhlICJPTiB0YWJs ZSIgY2xhdXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocG9saWN5U3RtdCwgIk9OICV7dGFi bGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJICogQWRk IHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2UsIGl0IGFs d2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRFUiBjYXNl IGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QgICAqbGlz dCA9IE5JTDsKKwkJTGlzdENlbGwgKmNlbGw7CisKKwkJZm9yZWFjaCAoY2VsbCwgcm9sZXMpCisJ CXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNlbGwpOworCisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QobmV3X29i anRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChw b2xpY3lTdG10LCJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNlCisJeworCQlhcHBl bmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCisJLyog YWRkIHRoZSBVU0lORyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb19xdWFsKQorCXsKKwkJRGF0 dW0JZGVwYXJzZWQ7CisJCURhdHVtCXN0b3JlZGV4cHI7CisJCWJvb2wJaXNudWxsOworCisJCXN0 b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAor CQkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251 bGwpCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBOVUxMIHBvbHF1YWwgZXhwcmVzc2lvbiBpbiBw b2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIo cGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QocG9saWN5U3RtdCwgIlVTSU5HICgle2V4cHJlc3Npb259cykiLAorCQkJCQkJ CSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jv b2xfb2JqZWN0KHBvbGljeVN0bXQsICJwcmVzZW50IiwgZmFsc2UpOworCisJLyogYWRkIHRoZSBX SVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJeworCQlE YXR1bQlkZXBhcnNlZDsKKwkJRGF0dW0Jc3RvcmVkZXhwcjsKKwkJYm9vbAlpc251bGw7CisKKwkJ c3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3BvbHdpdGhj aGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOworCQlp ZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBwb2x3aXRoY2hlY2sgZXhw cmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1 bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocG9saWN5U3RtdCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVz c2lvbn1zKSIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QocG9saWN5U3RtdCwgInByZXNlbnQiLCBmYWxzZSk7 CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qIEFw cGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAorYXBwZW5k X2FycmF5X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkK K3sKKwlPYmpFbGVtCSpwYXJhbTsKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJf Zm10KTsKKworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYg KCF2ZXJib3NlKQorCXsKKwkJTGlzdENlbGwgKmxjOworCisJCS8qIEV4dHJhY3QgdGhlIE9iakVs ZW1zIHdob3NlIHByZXNlbnQgZmxhZyBpcyB0cnVlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQor CQl7CisJCQlPYmpFbGVtICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJQXNz ZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9ianR5 cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5wcmVz ZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5ID0g Zm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwlvYmplY3Rf bmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQXJyYXksIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+ dmFsdWUuYXJyYXkgPSBhcnJheTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0p OworfQorCisvKiBBcHBlbmQgYSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfYm9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwg Ym9vbCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAqcGFyYW07CisJY2hhcgkgKm9iamVjdF9uYW1lID0g c3ViX2ZtdDsKKwlib29sCSAgaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3Vi X2ZtdCk7CisKKwkvKiBDaGVjayBpZiB0aGUgcHJlc2VudCBpcyBwYXJ0IG9mIHRoZSBmb3JtYXQg c3RyaW5nIGFuZCBzdG9yZSB0aGUgYm9vbGVhbiB2YWx1ZSovCisJaWYgKHN0cmNtcChzdWJfZm10 LCAicHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0cnVlOworCQl0cmVl LT5wcmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0cmVlLT5wcmVzZW50 KQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2JqZWN0X25hbWUgPSBh cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYm9v bGVhbiA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisK Ky8qCisgKiBBcHBlbmQgYSBmbG9hdDggcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGlj IHZvaWQKK2FwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwg ZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9u YW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0 X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3Qo T2JqVHlwZUZsb2F0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmZsdCA9IHZhbHVlOwor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQg dGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQorewor CWludAkJCQlsZW47CisJY2hhcgkJICAgKmZtdDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5V TEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJbGVuID0gdHJl ZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJhdG9yIGlmIG5lY2Vzc2FyeSAqLwor CWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcpCisJCWFwcGVuZFN0cmluZ0luZm9T cGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHRyZWUt PmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKiBBcHBlbmQgYSBOVUxMIG9iamVjdCB0byBhIHRy ZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCkKK3sKKwljaGFyICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsK KworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2Jq ZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlhcHBlbmRfcHJlbWFkZV9v YmplY3QodHJlZSwgbmV3X29iamVjdChPYmpUeXBlTnVsbCwgb2JqZWN0X25hbWUpKTsKK30KKwor LyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9pZAor YXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJl ZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisJY2hhciAgICpvYmplY3RfbmFtZTsKKwor CUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJ CXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5n KHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9i amVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1h ZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5h bWUgd2hpY2ggaXMgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICog c3R5bGUgc3RyaW5nLiBBbmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBP YmpUcmVlLgorICovCitzdGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJp bmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YQlvYmpl Y3RfbmFtZTsKKwljb25zdCBjaGFyCSAgICplbmRfcHRyOworCWNvbnN0IGNoYXIJICAgKmNwOwor CWJvb2wJCQlzdGFydF9jb3B5ID0gZmFsc2U7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRy ZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5m bygmb2JqZWN0X25hbWUpOworCWVuZF9wdHIgPSBzdWJfZm10ICsgc3RybGVuKHN1Yl9mbXQpOwor CisJZm9yIChjcCA9IHN1Yl9mbXQ7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWlmICgqY3Ag PT0gJ3snKQorCQl7CisJCQlzdGFydF9jb3B5ID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJaWYgKCFzdGFydF9jb3B5KQorCQkJY29udGludWU7CisKKwkJaWYgKCpjcCA9PSAnOicgfHwg KmNwID09ICd9JykKKwkJCWJyZWFrOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJm9i amVjdF9uYW1lLCAqY3ApOworCX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxv ZyhFUlJPUiwgIm9iamVjdCBuYW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJp bmcodHJlZSwgc3ViX2ZtdCk7CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKK30KKworLyog QXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyBpbmxp bmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVs ZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0 cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBh IHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsKKwlj aGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9z ZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJ b2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2Zt dCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZVN0cmluZywgb2JqZWN0X25hbWUpOwor CXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJl ZSwgcGFyYW0pOworfQorCisvKgorICogU2ltaWxhciB0byBmb3JtYXRfdHlwZV9leHRlbmRlZCwg ZXhjZXB0IHdlIHJldHVybiBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgorICogc2VwYXJhdGVseToK KyAqCisgKiAtIG5zcGlkIGlzIHRoZSBzY2hlbWEgT0lELiAgRm9yIGNlcnRhaW4gU1FMLXN0YW5k YXJkIHR5cGVzIHdoaWNoIGhhdmUgd2VpcmQKKyAqICAgdHlwbW9kIHJ1bGVzLCB3ZSByZXR1cm4g SW52YWxpZE9pZDsgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxp ZnkgdGhlIG5hbWUgbm9yIGFkZCBxdW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2Uu CisgKgorICogLSB0eXBuYW1lIGlzIHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3Rl cworICoKKyAqIC0gdHlwZW1vZHN0ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMg YSBzdHJpbmcgd2l0aCBwYXJlbnMKKyAqCisgKiAtIHR5cGFycmF5IGluZGljYXRlcyB3aGV0aGVy IFtdcyBtdXN0IGJlIGFkZGVkCisgKgorICogV2UgZG9uJ3QgdHJ5IHRvIGRlY29kZSB0eXBlIG5h bWVzIHRvIHRoZWlyIHN0YW5kYXJkLW1hbmRhdGVkIG5hbWVzLCBleGNlcHQKKyAqIGluIHRoZSBj YXNlcyBvZiB0eXBlcyB3aXRoIHVudXN1YWwgdHlwbW9kIHJ1bGVzLgorICovCitzdGF0aWMgdm9p ZAorZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJ CQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkg Ym9vbCAqdHlwYXJyYXkpCit7CisJSGVhcFR1cGxlCQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUJdHlw ZWZvcm07CisJT2lkCQkJCWFycmF5X2Jhc2VfdHlwZTsKKworCXR1cGxlID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0odHlwZV9vaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig dHlwZSAldSIsIHR5cGVfb2lkKTsKKworCXR5cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RS VUNUKHR1cGxlKTsKKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlhYmxl IGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJheSB0 eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICovCisJ YXJyYXlfYmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwkqdHlwYXJyYXkgPSAoSXNU cnVlQXJyYXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9S QUdFX1BMQUlOKTsKKworCWlmICgqdHlwYXJyYXkpCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0dGVu dGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0dXBs ZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0o YXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSAldSIsIHR5cGVfb2lkKTsK KworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBsZSk7CisJCXR5cGVf b2lkID0gYXJyYXlfYmFzZV90eXBlOworCX0KKworCS8qCisJICogU3BlY2lhbC1jYXNlIGNyb2Nr IGZvciB0eXBlcyB3aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVzIHdoZXJlIHdlIHB1dAorCSAqIHR5 cG1vZCBhdCB0aGUgbWlkZGxlIG9mIG5hbWUoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lICku IFdlIGNhbm5vdAorCSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBl IG5hbWUgaW4gdGhlc2UgY2FzZXMuCisJICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lE IHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RB TVBUWk9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVU Wk9JRCkKKwl7CisJCXN3aXRjaCAodHlwZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6 CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBUSU1FU1RBTVBUWk9JRDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0g cHN0cmR1cCgiVElNRVNUQU1QIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBv dGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCQkqdHlwbmFtZSA9 IHBzdHJkdXAoIlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6 CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgVElNRVRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3Ry ZHVwKCJUSU1FIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkvKiBvdGhlcndpc2Us IFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kZS4gKi8KKwkJCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJUSU1FIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFRJTUVPSUQ6CisJCQkJKnR5cG5hbWUgPSBw c3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlkID0gSW52YWxpZE9pZDsK Kwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNzaW5nIGlzIHJl cXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0IHRoZSB0eXBlCisJCSAqIG5hbWUgYW5kIHNj aGVtYSBkaXJlY3RseSBmcm9tIHRoZSBjYXRhbG9nLgorCQkgKi8KKwkJKm5zcGlkID0gdHlwZWZv cm0tPnR5cG5hbWVzcGFjZTsKKwkJKnR5cG5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlwZWZvcm0t PnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0ciA9IHBy aW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNlCisJCSp0 eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworfQor CisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0cyB2YWx1ZXMgb2YgYXJndW1lbnRzIHRvIGEgZnVu Y3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRp YyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpCit7CisJ TGlzdCAgICpub2RlZGVmczsKKwlMaXN0ICAgKnN0cmRlZnMgPSBOSUw7CisJTGlzdENlbGwgKmNl bGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3Ry aW5nKHByb2FyZ2RlZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQorCQllbG9n KEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFjaChjZWxs LCBub2RlZGVmcykKKwl7CisJCU5vZGUgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0 cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwg ZmFsc2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1 cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0Ug dmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJz aXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNU RU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNF X1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0Vf UEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu ZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVy biAiIjsJCS8qIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKKy8qIEFsbG9jYXRlIGEg bmV3IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdChPYmpUeXBlIHR5 cGUsIGNoYXIgKm5hbWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxvYzAo c2l6ZW9mKE9iakVsZW0pKTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJcGFyYW0tPm9ianR5cGUg PSB0eXBlOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3Qg cGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2JqZWN0X29iamVjdChPYmpUcmVl ICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpU eXBlT2JqZWN0LCBOVUxMKTsKKwlwYXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1 cm4gcGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9y ZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZShj aGFyICpmbXQpCit7CisJT2JqVHJlZQkqcGFyYW1zOworCisJcGFyYW1zID0gcGFsbG9jMChzaXpl b2YoT2JqVHJlZSkpOworCXBhcmFtcy0+cHJlc2VudCA9IHRydWU7CisJc2xpc3RfaW5pdCgmcGFy YW1zLT5wYXJhbXMpOworCisJaWYgKGZtdCkKKwl7CisJCXBhcmFtcy0+Zm10aW5mbyA9IG1ha2VT dHJpbmdJbmZvKCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocGFyYW1zLT5mbXRpbmZvLCBm bXQpOworCX0KKworCXJldHVybiBwYXJhbXM7Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5l IHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVt YW5hbWUiIGFuZCAib2JqbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBj b3JyZXNwb25kcyB0byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAq CisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdo ZXRoZXIgdGhlIG9iam5hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Ig bm90LCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJu cyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQs IGNoYXIgKm5hbWUpCit7CisJT2JqVHJlZQkqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFj ZTsKKworCWlmIChpc0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3Ry ZHVwKCJwZ190ZW1wIik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUo bnNwaWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkg ICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZXNwYWNlLAorCQkJCQkJCSAgIm9iam5h bWUiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKG5hbWUpKTsKKworCXJldHVybiBxdWFsaWZpZWQ7 Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxl bWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisg KgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lk IGNsYXNzSWQsIE9pZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJUmVsYXRp b24JY2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpuc3A7CisJRGF0dW0J CW9iam5hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVz cGFjZTsKKwlBdHRyTnVtYmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNz SWQpOworCWJvb2wJCWlzbnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNh dGFsb2csIEFudW1fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvYmplY3QgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAor CQkJIG9iamVjdElkLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9u YW1lID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9 IGdldF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKworCW9iam5zcCA9IGhlYXBf Z2V0YXR0cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cp LAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBOVUxMIG5hbWVzcGFjZSIpOworCisJb2JqbmFtZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmos IEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwKKwkJCQkJCSAgICZpc251bGwp OworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIE5VTEwgbmFtZSIpOwor CisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQo b2JqbnNwKSwKKwkJCQkJCQkJCQkgTmFtZVN0cigqRGF0dW1HZXROYW1lKG9iam5hbWUpKSk7CisJ dGFibGVfY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBxdWFsaWZp ZWQ7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJv bGUgc3BlY2lmaWVkIGJ5IFJvbGVTcGVjIG5vZGUuCisgKiBTcGVjaWFsIHZhbHVlcyBzdWNoIGFz IFJPTEVTUEVDX0NVUlJFTlRfVVNFUiBhcmUgZXhwYW5kZWQgdG8gdGhlaXIgZmluYWwKKyAqIG5h bWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9s ZVNwZWMgKnNwZWMpCit7CisJT2JqVHJlZQkgICAqcm9sZTsKKwljaGFyCSAgICpyb2xldHlwZTsK KworCWlmIChzcGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0g Z2V0X3JvbGVzcGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIp OworCisJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsMiwKKwkJCQkJCSAgImlzX3B1YmxpYyIs IE9ialR5cGVCb29sLCBzcGVjLT5yb2xldHlwZSA9PSBST0xFU1BFQ19QVUJMSUMsCisJCQkJCQkg ICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHJvbGV0eXBlKTsKKwlyZXR1cm4gcm9sZTsKK30K KworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIg dHlwbW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3BpZDsKKwljaGFy CSAgICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJICAgKnR5cG1v ZHN0cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVkKHR5cGVJZCwg dHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3RyLCAmdHlwYXJy YXkpOworCisJaWYgKE9pZElzVmFsaWQodHlwbnNwaWQpKQorCQl0eXBuc3AgPSBnZXRfbmFtZXNw YWNlX25hbWVfb3JfdGVtcCh0eXBuc3BpZCk7CisJZWxzZQorCQl0eXBuc3AgPSBwc3RyZHVwKCIi KTsKKworCXR5cGVQYXJhbSA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkJICAgInNj aGVtYW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBuc3AsCisJCQkJCQkJICAgInR5cGVuYW1lIiwg T2JqVHlwZVN0cmluZywgdHlwZW5hbWUsCisJCQkJCQkJICAgInR5cG1vZCIsIE9ialR5cGVTdHJp bmcsIHR5cG1vZHN0ciwKKwkJCQkJCQkgICAidHlwYXJyYXkiLCBPYmpUeXBlQm9vbCwgdHlwYXJy YXkpOworCisJcmV0dXJuIHR5cGVQYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9i amVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgor ICoKKyAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVs ZW1lbnQgaW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJl ciBvZiBleHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAo c3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBz dXBwbGllZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGlu c3RhbmNlLCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJp bmcgcmVxdWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisg KiBPYmpFbGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24u ICBFYWNoIGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNp ZmllciBnaXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0 aGUgbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZv cm1lZCBhcmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVf VkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZQkgICAqdHJlZTsKKwl2 YV9saXN0CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVj dCBhbmQgaXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQg cHJvY2VzcyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOwor CWZvciAoaSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlP YmpUeXBlCQl0eXBlOworCQlPYmpFbGVtCSAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJn cywgY2hhciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5l d19vYmplY3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBvdGhlciBwYXJhbSB0 eXBlcyB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4gdGhlIHZhcmFyZ3MuCisJCSAqIEZldGNoIGl0 IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUgbWFpbiBvYmplY3Qu CisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJ LyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJYnJl YWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9h cmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZVN0cmluZzoKKwkJCQll bGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAqKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFycmF5ID0gdmFfYXJnKGFyZ3Ms IExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJCWVsZW0t PnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50NjQpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJs ZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUu b2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRyZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlw ZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0gbmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0 KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKwor LyogQWxsb2NhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCAqLworc3RhdGljIE9iakVsZW0gKgorbmV3 X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlB c3NlcnQodmFsdWUpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwp OworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKwor LyoKKyAqIFByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRy ZWUgaW50byB0aGUgb3V0cHV0IHBhcnNlCisgKiBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29i anRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJl ZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlmICh0 cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJz dCAqLworCWtleS50eXBlID0gamJ2U3RyaW5nOworCWtleS52YWwuc3RyaW5nLnZhbCA9ICJmbXQi OworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXkudmFsLnN0cmluZy52YWwpOworCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkvKiBUaGVuIHByb2Nlc3Mg dGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5nICovCisJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJ dmFsLnZhbC5zdHJpbmcubGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCXZhbC52YWwuc3RyaW5n LnZhbCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf VkFMVUUsICZ2YWwpOworfQorCisvKgorICogQ3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50YXRpb24g ZnJvbSBhbiBPYmpUcmVlLgorICovCitzdGF0aWMgSnNvbmIgKgorb2JqdHJlZV90b19qc29uYihP YmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUgKnZhbHVlOworCisJdmFsdWUgPSBvYmp0cmVl X3RvX2pzb25iX3JlYyh0cmVlLCBOVUxMKTsKKwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFs dWUpOworfQorCisvKgorICogSGVscGVyIGZvciBvYmp0cmVlX3RvX2pzb25iOiBwcm9jZXNzIGFu IGluZGl2aWR1YWwgZWxlbWVudCBmcm9tIGFuIG9iamVjdCBvcgorICogYW4gYXJyYXkgaW50byB0 aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV90b19qc29u Yl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIE9iakVsZW0gKm9iamVjdCwKKwkJCQkJ CSBKc29uYkl0ZXJhdG9yVG9rZW4gZWxlbV90b2tlbikKK3sKKwlMaXN0Q2VsbCAgICpjZWxsOwor CUpzb25iVmFsdWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQljYXNl IE9ialR5cGVOdWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZVN0 cmluZzoKKwkJCXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVuID0g c3RybGVuKG9iamVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9IG9i amVjdC0+dmFsdWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2Vu LCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwudHlw ZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlEYXR1 bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJCQkJ CQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVs ZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQl2 YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJ CQlEYXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywKKwkJ CQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVCb29s OgorCQkJdmFsLnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0LT52 YWx1ZS5ib29sZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFs KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2ZWx5 IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlvYmp0 cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJlYWs7 CisKKwkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9C RUdJTl9BUlJBWSwgTlVMTCk7CisJCQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkp CisJCQl7CisJCQkJT2JqRWxlbSAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJb2JqdHJl ZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQl9CisJCQlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJYnJlYWs7CisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBv YmplY3QtPm9ianR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhl bHBlciBmb3Igb2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2Jq dHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkK K3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJ Tl9PQkpFQ1QsIE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwg dHJlZSk7CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpF bGVtCSpvYmplY3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOwor CQlKc29uYlZhbHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5 cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5h bWUpOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZh bHVlKCZzdGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1 ZSBhY2NvcmRpbmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0 YXRlLCBvYmplY3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3Ig Q1JFQVRFIFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFi bGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0 aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMg cmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRh YmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBj b25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFp bkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklk KQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mg c2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqY29uc3RyOworCisJLyogT25seSBv bmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJ c1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRj aCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAq LworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgm a2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7 CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBp ZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNl CisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5pdCgma2V5 LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkpOworCQlz Y2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5kZXhJZCwK KwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNo IGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVudHMuICBJ bgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJsZSBpbmZv cm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMgdG8gaW5k aWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHByb2Nlc3Np bmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRu ZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCQljaGFy CSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRT VFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJeworCQkJ Y2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJCWJyZWFr OworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5vdCBoZXJl ICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInByaW1hcnkg a2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJY29udHlw ZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdHRVI6CisJ CQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9F WENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOworCQkJZGVm YXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlwZSIpOwor CQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0IG9mIHRo ZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFtbWF0aWNh bGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICogZGlmZmVy ZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1c2VmdWwg dG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8KKwkJY29u c3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LAorCQkJCQkJCQk0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJhaW50 IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJCQki bmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29ubmFtZSksCisJCQkJ CQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBnX2dldF9jb25zdHJh aW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9IGxh cHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5c3Rh YmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRlZmlu aXRpb24sIHNwbGl0IGluIHNldmVyYWwgcGllY2VzLgorICoKKyAqIEEgbGFyZ2UgYW1vdW50IG9m IGNvZGUgaXMgZHVwbGljYXRlZCBmcm9tICBwZ19nZXRfaW5kZXhkZWZfd29ya2VyLCBidXQKKyAq IGNvbnRyb2wgZmxvdyBpcyBkaWZmZXJlbnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBzZWVtIHdv cnRoIGtlZXBpbmcgdGhlbQorICogdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19nZXRf aW5kZXhkZWZfZGV0YWlsZWQoT2lkIGluZGV4cmVsaWQsCisJCQkJCQkgY2hhciAqKmluZGV4X2Ft LAorCQkJCQkJIGNoYXIgKipkZWZpbml0aW9uLAorCQkJCQkJIGNoYXIgKipyZWxvcHRpb25zLAor CQkJCQkJIGNoYXIgKip0YWJsZXNwYWNlLAorCQkJCQkJIGNoYXIgKip3aGVyZUNsYXVzZSkKK3sK KwlIZWFwVHVwbGUJaHRfaWR4OworCUhlYXBUdXBsZQlodF9pZHhyZWw7CisJSGVhcFR1cGxlCWh0 X2FtOworCUZvcm1fcGdfaW5kZXggaWR4cmVjOworCUZvcm1fcGdfY2xhc3MgaWR4cmVscmVjOwor CUZvcm1fcGdfYW0JYW1yZWM7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZTsKKwlMaXN0CSAg ICppbmRleHByczsKKwlMaXN0Q2VsbCAgICppbmRleHByX2l0ZW07CisJTGlzdAkgICAqY29udGV4 dDsKKwlPaWQJCQlpbmRyZWxpZDsKKwlpbnQJCQlrZXlubzsKKwlEYXR1bQkJaW5kY29sbERhdHVt OworCURhdHVtCQlpbmRjbGFzc0RhdHVtOworCURhdHVtCQlpbmRvcHRpb25EYXR1bTsKKwlib29s CQlpc251bGw7CisJb2lkdmVjdG9yICAqaW5kY29sbGF0aW9uOworCW9pZHZlY3RvciAgKmluZGNs YXNzOworCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsKKwlTdHJpbmdJbmZvRGF0YSBkZWZpbml0aW9u QnVmOworCisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfaW5kZXggdHVwbGUgYnkgdGhlIE9pZCBvZiB0 aGUgaW5kZXgKKwkgKi8KKwlodF9pZHggPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwgT2Jq ZWN0SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lk eCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBpbmRleCAldSIsIGlu ZGV4cmVsaWQpOworCWlkeHJlYyA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHRfaWR4KTsK KworCWluZHJlbGlkID0gaWR4cmVjLT5pbmRyZWxpZDsKKwlBc3NlcnQoaW5kZXhyZWxpZCA9PSBp ZHhyZWMtPmluZGV4cmVsaWQpOworCisJLyogTXVzdCBnZXQgaW5kY29sbGF0aW9uLCBpbmRjbGFz cywgYW5kIGluZG9wdGlvbiB0aGUgaGFyZCB3YXkgKi8KKwlpbmRjb2xsRGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2lu ZGNvbGxhdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNvbGxhdGlvbiA9 IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNvbGxEYXR1bSk7CisKKwlpbmRjbGFz c0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFu dW1fcGdfaW5kZXhfaW5kY2xhc3MsICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRj bGFzcyA9IChvaWR2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZGNsYXNzRGF0dW0pOworCisJ aW5kb3B0aW9uRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJ CQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kb3B0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVs bCk7CisJaW5kb3B0aW9uID0gKGludDJ2ZWN0b3IgKikgRGF0dW1HZXRQb2ludGVyKGluZG9wdGlv bkRhdHVtKTsKKworCS8qCisJICogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRl eCByZWxhdGlvbgorCSAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9i amVjdElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9p ZHhyZWwpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24g JXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNU KGh0X2lkeHJlbCk7CisKKwkvKgorCSAqIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5k ZXgnIGFjY2VzcyBtZXRob2QKKwkgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwg T2JqZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2Vz cyBtZXRob2QgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZvcm1fcGdf YW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhwcmVzc2lv bnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAqIHZlcnNp b25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdhbnQgdG8g ZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLworCWlmICgh aGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxMKSkKKwl7 CisJCURhdHVtCQlleHByc0RhdHVtOworCQlib29sCQlpc251bGw7CisJCWNoYXIJICAgKmV4cHJz U3RyaW5nOworCisJCWV4cHJzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRf aWR4LAorCQkJCQkJCQkJIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMsICZpc251bGwpOworCQlBc3Nl cnQoIWlzbnVsbCk7CisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhleHByc0Rh dHVtKTsKKwkJaW5kZXhwcnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUoZXhwcnNTdHJpbmcpOwor CQlwZnJlZShleHByc1N0cmluZyk7CisJfQorCWVsc2UKKwkJaW5kZXhwcnMgPSBOSUw7CisKKwlp bmRleHByX2l0ZW0gPSBsaXN0X2hlYWQoaW5kZXhwcnMpOworCisJY29udGV4dCA9IGRlcGFyc2Vf Y29udGV4dF9mb3IoZ2V0X3JlbF9uYW1lKGluZHJlbGlkKSwgaW5kcmVsaWQpOworCisJaW5pdFN0 cmluZ0luZm8oJmRlZmluaXRpb25CdWYpOworCisJLyogT3V0cHV0IGluZGV4IEFNICovCisJKmlu ZGV4X2FtID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYW1yZWMtPmFtbmFtZSkp KTsKKworCS8qIEZldGNoIHRoZSBpbmRleCBBTSdzIEFQSSBzdHJ1Y3QgKi8KKwlhbXJvdXRpbmUg PSBHZXRJbmRleEFtUm91dGluZShhbXJlYy0+YW1oYW5kbGVyKTsKKworCS8qCisJICogT3V0cHV0 IGluZGV4IGRlZmluaXRpb24uICBOb3RlIHRoZSBvdXRlciBwYXJlbnMgbXVzdCBiZSBzdXBwbGll ZCBieQorCSAqIGNhbGxlci4KKwkgKi8KKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMt PmluZG5hdHRzOyBrZXlubysrKQorCXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmlu ZGtleS52YWx1ZXNba2V5bm9dOworCQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5 bm9dOworCQlPaWQJCQlrZXljb2x0eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisJCU9p ZAkJCWluZGNvbGw7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1Ziwg a2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkv KiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJ CWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRu dW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1 b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJl bGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJ CQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBFeHByZXNz aW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOwor CisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcg ZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJz dChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4 cHJfaXRlbSk7CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24o aW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlm IGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNB KGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVu Y2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8o JmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBl KGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkp OworCQl9CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNv bGwgPSBpbmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNv bGwpKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwK KwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRk IHRoZSBvcGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xh c3NfbmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25C dWYpOworCisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUt PmFtY2Fub3JkZXIpCisJCXsKKwkJCS8qIElmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJl cG9ydCBERVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0Mp CisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVND Iik7CisJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJ CQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQor CQl9CisKKwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFu eXRoaW5nPyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8q IE91dHB1dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMo aW5kZXhyZWxpZCk7CisKKwkvKiBPdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJs c3BjOworCisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYg KE9pZElzVmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVu dGlmaWVyKGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVz cGFjZSA9IE5VTEw7CisJfQorCisJLyogUmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICov CisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVM TCkpCisJeworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlp c251bGw7CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmlu ZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVM SUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJ CUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJl ZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJ cGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQor CQkJZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQor CWVsc2UKKwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFz ZVN5c0NhY2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFz ZVN5c0NhY2hlKGh0X2FtKTsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgZGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGNvbHVtbiBvZiB0aGUgZ2l2ZW4gdGFibGUuCisgKgorICog Q2FsbGVyIG11c3QgaGF2ZSBzZXQgYSBjb3JyZWN0IGRlcGFyc2UgY29udGV4dC4KKyAqLworc3Rh dGljIGNoYXIgKgorUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KFJlbGF0aW9uIHJlbCwgQXR0ck51 bWJlciBhdHRubywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkJIExpc3QgKipleHBycykKK3sKKwlO b2RlICpkZWZ2YWw7CisJY2hhciAqZGVmc3RyOworCisJZGVmdmFsID0gYnVpbGRfY29sdW1uX2Rl ZmF1bHQocmVsLCBhdHRubyk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGRlZnZhbCwg ZHBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJLyogQ29sbGVjdCB0aGUgZXhwcmVzc2lvbiBm b3IgbGF0ZXIgcmVwbGljYXRpb24gc2FmZXR5IGNoZWNrcyAqLworCWlmIChleHBycykKKwkJKmV4 cHJzID0gbGFwcGVuZCgqZXhwcnMsIGRlZnZhbCk7CisKKwlyZXR1cm4gZGVmc3RyOworfQorCisv KgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBwYXJ0aXRpb24gYm91bmQgZXhwcmVzc2lvbiBmb3Ig dGhlIGdpdmVuIHRhYmxlLgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldFBhcnRpdGlv bkJvdW5kKE9pZCByZWxpZCkKK3sKKwlEYXR1bQkJZGVwYXJzZWQ7CisJRGF0dW0JCWJvdW5kRGF0 dW07CisJYm9vbAkJaXNudWxsOworCUhlYXBUdXBsZQl0dXBsZTsKKworCXR1cGxlID0gU2VhcmNo U3lzQ2FjaGUxKFJFTE9JRCwgcmVsaWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsCisJ CQkgcmVsaWQpOworCisJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxl LAorCQkJCQkJCQkgQW51bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxs KTsKKworCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJ CQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0p KSwKKwkJCQkJCQkJICAgcmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJl dHVybiBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIFJldHVybiB0 aGUgZ2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFy ICoKK3N0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSkKK3sKKwlzd2l0Y2ggKG9i anR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1cm4gIkFHR1JFR0FU RSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1QiOworCQljYXNlIE9CSkVD VF9DT0xVTU46CisJCQlyZXR1cm4gIkNPTFVNTiI7CisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoK KwkJCXJldHVybiAiQ09MTEFUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJl dHVybiAiQ09OVkVSU0lPTiI7CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJE QVRBQkFTRSI7CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJ Y2FzZSBPQkpFQ1RfRVZFTlRfVFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJ CWNhc2UgT0JKRUNUX0VYVEVOU0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBP QkpFQ1RfRkRXOgorCQkJcmV0dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JK RUNUX0ZPUkVJR05fU0VSVkVSOgorCQkJcmV0dXJuICJTRVJWRVIiOworCQljYXNlIE9CSkVDVF9G T1JFSUdOX1RBQkxFOgorCQkJcmV0dXJuICJGT1JFSUdOIFRBQkxFIjsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQlyZXR1cm4gIkZVTkNUSU9OIjsKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJ CQlyZXR1cm4gIklOREVYIjsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQlyZXR1cm4gIkxB TkdVQUdFIjsKKwkJY2FzZSBPQkpFQ1RfTEFSR0VPQkpFQ1Q6CisJCQlyZXR1cm4gIkxBUkdFIE9C SkVDVCI7CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCQlyZXR1cm4gIk1BVEVSSUFMSVpFRCBW SUVXIjsKKwkJY2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXJldHVybiAiT1BFUkFUT1IgQ0xBU1Mi OworCQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCXJldHVybiAiT1BFUkFUT1IiOworCQljYXNl IE9CSkVDVF9PUEZBTUlMWToKKwkJCXJldHVybiAiT1BFUkFUT1IgRkFNSUxZIjsKKwkJY2FzZSBP QkpFQ1RfUE9MSUNZOgorCQkJcmV0dXJuICJQT0xJQ1kiOworCQljYXNlIE9CSkVDVF9ST0xFOgor CQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7 CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpF Q1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4gIlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6 CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVy biAiVEFCTEVTUEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdH RVIiOworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iOworCQkvKgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5H OgorCQkJcmV0dXJuICJURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLwor CQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJ T05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0gg UEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFS Q0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJ Y2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQlj YXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQor CisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4gYSBKU09OIHJlcHJlc2Vu dGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFuZGVkIGZ1bGx5LCBzbyB0 aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRoZQorICogZmFjZSBvZiBzZWFy Y2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFyc2VfdG9fanNvbihQR19GVU5D VElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IChDb2xsZWN0ZWRDb21tYW5k ICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJCSAgICpjb21tYW5kOworCisJY29tbWFu ZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkK KwkJUEdfUkVUVVJOX1RFWFRfUChDU3RyaW5nR2V0VGV4dERhdHVtKGNvbW1hbmQpKTsKKworCVBH X1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRnVuY3Rpb25TdG10 IChBTFRFUiBGVU5DVElPTikKKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQgdGhlIHBh cnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiB0aGUgSlNPTgorICogYmxvYiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJGdW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZ1 bmN0aW9uU3RtdCAqbm9kZSA9IChBbHRlckZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZQkgICAqYWx0ZXJGdW5jOworCU9ialRyZWUJICAgKnNpZ247CisJSGVhcFR1cGxlCXByb2NU dXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKwlM aXN0CSAgICplbGVtcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwkv KiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbHVyZSBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIEZVTkNU SU9OICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9uOiB9cworCSAqLworCWFsdGVyRnVuYyA9IG5l d19vYmp0cmVlX1ZBKCJBTFRFUiBGVU5DVElPTiIsIDApOworCisJLyoKKwkgKiBBTFRFUiBGVU5D VElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZworCSAq IHRvIGdldCBpbnB1dCB0eXBlIE9pZHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHByb2NGb3Jt LT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2JqVHJlZQkgICAqdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIiV7dHlwZX1UIiwgMCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAidHlw ZSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0eXBlcy52 YWx1ZXNbaV0sIC0xKSk7CisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwl9CisKKwlzaWduID0gbmV3X29ianRyZWUoIiIpOworCisJYXBwZW5k X29iamVjdF9vYmplY3Qoc2lnbiwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVj dElkKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChzaWduLCAiKCV7YXJndW1lbnRzOiwgfXMpIiwg cGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRnVuYywgIiV7c2lnbmF0dXJl fXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9ucykKKwl7CisJCURlZkVs ZW0JKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBv YmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ2b2xhdGlsaXR5Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoc3RyVmFsKGRlZmVsLT5hcmcp LCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdHJpY3QiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShpbnRWYWwoZGVmZWwtPmFyZykg PworCQkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6CisJCQkJCQkJCSAiQ0FM TEVEIE9OIE5VTEwgSU5QVVQiLCAwKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZB KGludFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VD VVJJVFkgSU5WT0tFUiIsIDApOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgImxlYWtwcm9vZiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKGlu dFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiTEVBS1BST09GIiA6ICJOT1QgTEVBS1BST09G IiwgMCk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiY29zdCIpID09 IDApCisJCXsKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwgMSwK KwkJCQkJCQkJICJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkgZGVmR2V0TnVtZXJpYyhk ZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJvd3MiKSA9 PSAwKQorCQl7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUk9XUyIsIDApOworCQkJaWYg KGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQllbHNlCisJCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0 bXBvYmosICIle3Jvd3N9biIsCisJCQkJCQkJCQlkZWZHZXROdW1lcmljKGRlZmVsKSk7CisJCX0K KwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJ VmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsK KwkJCWNoYXIgKnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRt cG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1 ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9ydCIpID09 IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZSgiU1VQUE9SVCIpOworCisJCQlBc3NlcnQocHJvY0Zvcm0tPnByb3N1cHBvcnQpOworCisJCQkv KgorCQkJICogV2Ugc2hvdWxkIHF1YWxpZnkgdGhlIHN1cHBvcnQgZnVuY3Rpb24ncyBuYW1lIGlm IGl0IHdvdWxkbid0IGJlCisJCQkgKiByZXNvbHZlZCBieSBsb29rdXAgaW4gdGhlIGN1cnJlbnQg c2VhcmNoIHBhdGguCisJCQkgKi8KKwkJCWFyZ3R5cGVzWzBdID0gSU5URVJOQUxPSUQ7CisJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle25hbWV9cyIsCisJCQkJCQkJCSBnZW5lcmF0 ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlO SUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJ RVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJwYXJhbGxlbCIpID09IDApCisJCXsKKwkJCWNoYXIgKmZtdCA9IHBzcHJpbnRmKCJQQVJBTExF TCAlcyIsIHN0clZhbChkZWZlbC0+YXJnKSk7CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZShmbXQp OworCQl9CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyRnVuYywgIiV7ZGVmaW5pdGlv bjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4g YWx0ZXJGdW5jOworfQorCisvKgorICogZGVwYXJzZSBhbiBBTFRFUiAuLi4gU0VUIFNDSEVNQSBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT2JqZWN0U2NoZW1h U3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCQkgIE9i amVjdEFkZHJlc3Mgb2xkc2NoZW1hKQoreworCUFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqbm9kZSA9 IChBbHRlck9iamVjdFNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmFsdGVy U3RtdDsKKwljaGFyCSAgICpmbXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisJY2hhcgkgICAqbmV3 c2NoZW1hOworCWNoYXIJICAgKm9sZHNjaG5hbWU7CisJY2hhcgkgICAqaWRlbnQ7CisKKwluZXdz Y2hlbWEgPSBub2RlLT5uZXdzY2hlbWE7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBBTFRFUiAlcyAle2lkZW50aXR5fXMgU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JCisJICov CisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzIiwgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2Jq ZWN0VHlwZSkpOworCWFsdGVyU3RtdCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKgorCSAqIFNp bmNlIHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRha2VuIHBsYWNlIGZyb20gdGhlIHBvaW50IG9m IHZpZXcgb2YKKwkgKiBjYXRhbG9ncywgZ2V0T2JqZWN0SWRlbnRpdHkgcmV0dXJucyB0aGUgb2Jq ZWN0IG5hbWUgd2l0aCB0aGUgYWxyZWFkeQorCSAqIGNoYW5nZWQgc2NoZW1hLiAgVGhlIG91dHB1 dCBvZiBvdXIgZGVwYXJzaW5nIG11c3QgcmV0dXJuIHRoZSBvcmlnaW5hbAorCSAqIHNjaGVtYSBu YW1lIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1lIG9mZiB0aGUgaWRlbnRpdHkg c3RyaW5nCisJICogYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVkIHNjaGVtYSBuYW1lLgorCSAq CisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdlIGRvIGJldHRlcj8KKwkgKi8K KwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisJb2xkc2No bmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2JqZWN0SWQpOworCWlmICghb2xk c2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNjaGVtYSB3 aXRoIE9JRCAldSIsCisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmlu dGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUpLAorCQkJCQkgaWRlbnRpdHkg KyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7CisJYXBwZW5kX3N0cmluZ19v YmplY3QoYWx0ZXJTdG10LCAiJXtpZGVudGl0eX1zIiwgaWRlbnQpOworCisJYXBwZW5kX3N0cmlu Z19vYmplY3QoYWx0ZXJTdG10LCAiU0VUIFNDSEVNQSAle25ld3NjaGVtYX1JIiwgbmV3c2NoZW1h KTsKKworCXJldHVybiBhbHRlclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3Bl cmF0b3JTdG10IChBTFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJSGVhcFR1cGxlICAgCW9wclR1cDsKKwlBbHRlck9wZXJhdG9yU3RtdCAqbm9k ZSA9IChBbHRlck9wZXJhdG9yU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZQkJICAgKmFsdGVy b3A7CisJRm9ybV9wZ19vcGVyYXRvciBvcHJGb3JtOworCUxpc3RDZWxsCSAgICpjZWxsOworCUxp c3QJCSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQs IE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3By VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VU U1RSVUNUKG9wclR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBBTFRF UiBPUEVSQVRPUiAle2lkZW50aXR5fU8gKCV7bGVmdF90eXBlfVQsICV7cmlnaHRfdHlwZX1UKSBT RVQKKwkgKiAoJXtlbGVtczosIH1zKQorCSAqLworCWFsdGVyb3AgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9w cm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsK KworCS8qIExFRlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJvcCwgIigle2xlZnRfdHlwZX1UIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyb3AsICIoJXtsZWZ0X3R5cGV9cyIsICJOT05FIik7CisK KwkvKiBSSUdIVEFSRyAqLworCUFzc2VydChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmxlZnQpKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlcm9wLCAiLCAle3JpZ2h0X3R5cGV9VCkiLAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCisJZm9y ZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAqZWxlbSA9IChEZWZFbGVt ICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAqdG1wb2JqID0gTlVMTDsKKworCQlpZiAoc3Ry Y21wKGVsZW0tPmRlZm5hbWUsICJyZXN0cmljdCIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1zIiwgIk5PTkUiKTsKKwkJfQorCQll bHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImpvaW4iKSA9PSAwKQorCQl7CisJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkK KwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCQkJZWxzZQorCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfXMiLCAiTk9ORSIpOworCQl9CisKKwkJ QXNzZXJ0KHRtcG9iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoYWx0ZXJvcCwgIlNFVCAoJXtl bGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1 cm4gYWx0ZXJvcDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFUT1IgRkFNSUxZ IEFERC9EUk9QIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJP cEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqYWx0ZXJPcEZh bTsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3RtdCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQt PnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsK KwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmdHAgPSBTZWFyY2hTeXND YWNoZTEoT1BGQU1JTFlPSUQsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY21kLT5kLm9wZmFt LmFkZHJlc3Mub2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZnRwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsCisJ CQkgY21kLT5kLm9wZmFtLmFkZHJlc3Mub2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19v cGZhbWlseSkgR0VUU1RSVUNUKGZ0cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoK KwkgKiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkg QUREL0RST1AKKwkgKiAle2l0ZW1zOiwgfXMKKwkgKi8KKwlhbHRlck9wRmFtID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgIgorCQkJCQkJCQkiVVNJ TkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkJCSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCQkJImFtbmFt ZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlsaXN0ID0gTklMOworCWZvcmVh Y2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpv cGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlCSAgICp0bXBvYmo7CisKKwkJLyoKKwkJICog VmVyYm9zZSBzeW50YXgKKwkJICoKKwkJICogT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8o JXtsdHlwZX1ULCAle3J0eXBlfVQpICV7cHVycG9zZX1zCisJCSAqLworCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19biIsIDEsCisJCQkJCQkJICJudW0iLCBPYmpUeXBl SW50ZWdlciwgb3Blci0+bnVtYmVyKTsKKworCQkvKiBBZGQgdGhlIG9wZXJhdG9yIG5hbWU7IHRo ZSBEUk9QIGNhc2UgZG9lc24ndCBoYXZlIHRoaXMgKi8KKwkJaWYgKCFzdG10LT5pc0Ryb3ApCisJ CXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3BlcmF0b3J9TyIsCisJCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJIG9wZXItPm9iamVjdCkpOworCQl9CisKKwkJLyogQWRkIHRoZSB0eXBlcyAq LworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3R5cGUob3Blci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAv IEZPUiBPUkRFUiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3Rt dC0+aXNEcm9wKQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQor CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgIkZPUiBTRUFS Q0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlCSAgICp0bXBvYmoyOworCisJCQkJdG1w b2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkiLCAwKTsKKwkJCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBvYmoyLCAiJXtvcGZhbWlseX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2Jq LCAiJXtwdXJwb3NlfXMiLCB0bXBvYmoyKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWZvcmVhY2goY2VsbCwg Y21kLT5kLm9wZmFtLnByb2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxm aXJzdChjZWxsKTsKKwkJT2JqVHJlZQkgICAqdG1wb2JqOworCisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAorCQkJ CQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVm dHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUg ZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0 aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQorCQl7CisJCQlIZWFwVHVwbGUJcHJvY1R1cDsK KwkJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJCU9pZAkJICAgKnByb2FyZ3R5cGVzOworCQkJ TGlzdAkgICAqYXJnbGlzdCA9IE5JTDsKKwkJCWludAkJCWk7CisKKwkJCXByb2NUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jLT5vYmplY3QpKTsKKwkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJCXByb2NG b3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCQlwcm9hcmd0eXBl cyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCQlmb3IgKGkgPSAwOyBpIDwgcHJv Y0Zvcm0tPnByb25hcmdzOyBpKyspCisJCQl7CisJCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQkJ YXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsKKwkJCQlhcmds aXN0ID0gbGFwcGVuZChhcmdsaXN0LCBuZXdfb2JqZWN0X29iamVjdChhcmcpKTsKKwkJCX0KKwor CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJCQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcG9iaiwgIigiKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAi JXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBv YmosICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCX0KKworCWlmIChz dG10LT5pc0Ryb3ApCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKGFsdGVyT3BGYW0sICJEUk9QIik7 CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlck9wRmFtLCAiQUREIik7CisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KGFsdGVyT3BGYW0sICIle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShmdHApOworCisJcmV0dXJuIGFsdGVyT3BGYW07Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQWx0ZXJPd25lclN0bXQgKEFMVEVSIC4uLiBPV05FUiBUTyAuLi4pLgorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3Mg YWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFs dGVyT3duZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCQkgICAqb3duZXJTdG10OworCWNo YXIJCSAgICpmbXQ7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBP V05FUiBUTyAlJXtuZXdvd25lcn1JIiwKKwkJCQkgICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5v YmplY3RUeXBlKSk7CisKKwlvd25lclN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJ CQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBnZXRPYmplY3RJZGVu dGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJCSAgICJuZXdvd25lciIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJICAgZ2V0X3JvbGVzcGVjX25hbWUobm9kZS0+bmV3b3duZXIpKTsKKworCXJl dHVybiBvd25lclN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyU2VxU3RtdC4KKyAq CisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0 bXBvYmo7CisJUmVsYXRpb24JIHJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFk YXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9w Z19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7 CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJl ZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJh dGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkg aGVyZS4KKwkgKi8KKwlpZiAoYWx0ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBO VUxMOworCisJc2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVs YXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9 IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0 dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNl cXR1cGxlKTsKKworCWFsdGVyU2VxID0gbmV3X29ianRyZWUoIkFMVEVSIFNFUVVFTkNFIik7CisK Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVs bmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyU2VxLCAiJXtpZGVudGl0eX1EIiwgdG1wb2Jq KTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0aW9u cykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCU9i akVsZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNoZSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7CisJ CWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxzZSk7 CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZhbHNlKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOwor CQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2UpOworCQll bHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJz ZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFtZSk7CisK KwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9hcnJheV9v YmplY3QoYWx0ZXJTZXEsICIle2RlZmluaXRpb246IH1zIiwgZWxlbXMpOworCisJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQWx0ZXJUeXBlU3RtdC4KKyAqCisgKiBHaXZlbiBhIHR5cGUgT0lEIGFuZCBhIHBhcnNldHJl ZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBhbHRlciB0eXBlLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNl dFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJU eXBlU2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopY21kOworCU9ialRyZWUJCSphbHRlclR5cGU7 CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlICAg dHlwVHVwOworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUp IEdFVFNUUlVDVCh0eXBUdXApOworCisJYWx0ZXJUeXBlID0gbmV3X29ianRyZWUoIkFMVEVSIFRZ UEUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclR5cGUsICIle2lkZW50aXR5fUQgU0VU IiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlmb3JlYWNoKHBsLCBhbHRlclR5cGVTZXRTdG10 LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxlbSAqKSBsZmlyc3Qo cGwpOworCQlPYmpFbGVtICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwg InN0b3JhZ2UiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N0b3JhZ2UoYWx0ZXJU eXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9 PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1JlY2VpdmUoYWx0ZXJUeXBlLCB0eXBGb3Jt KTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQorCQkJbmV3ZWxt ID0gZGVwYXJzZV9UeXBlX1NlbmQoYWx0ZXJUeXBlLCB0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInR5cG1vZF9pbiIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfVHlwbW9kX0luKGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRl Zm5hbWUsICJ0eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBt b2RfT3V0KGFsdGVyVHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUs ICJhbmFseXplIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKGFsdGVy VHlwZSwgdHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdWJzY3JpcHQi KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChhbHRlclR5cGUsIHR5 cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIs IGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJ fQorCisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclR5cGUsICIoJXtkZWZpbml0aW9uOiB9cyki LCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBhbHRlclR5 cGU7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBF IEFTKQorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpu b2RlID0gKENvbXBvc2l0ZVR5cGVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjb21w b3NpdGU7CisJSGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxh dGlvbgl0eXBlcmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMg PSBOSUw7CisKKwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNw b25kaW5nIHJlbGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgJXUiLCBvYmpl Y3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOworCXR5 cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9u TmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOworCisJ Y29tcG9zaXRlID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJYXBwZW5kX29i amVjdF9vYmplY3QoY29tcG9zaXRlLCAiJXtpZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElk KSk7CisKKwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHModHlwZXJlbCwgbm9kZS0+ Y29sZGVmbGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJCS8qIG5vdCB0eXBlZCAq LworCQkJCQkJCQkJICB0cnVlKTsJCS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGNvbXBvc2l0ZSwgIkFTICgle2NvbHVtbnM6LCB9cykiLCB0YWJsZWVsdHMpOwor CisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2Fj aGUodHlwdHVwKTsKKworCXJldHVybiBjb21wb3NpdGU7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkK K3sKKwlIZWFwVHVwbGUgICBjb25UdXA7CisJUmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2Nv bnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVlCSAgICpjY1N0bXQsICp0bXBPYmo7CisKKwljb252 cmVsID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK Kwljb25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNvbnZyZWwsIEFudW1fcGdfY29u dmVyc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnZlcnNpb24gd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3BnX2NvbnZlcnNpb24pIEdFVFNU UlVDVChjb25UdXApOworCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRF ICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7 ZGVzdH1MCisJICogRlJPTSAle2Z1bmN0aW9ufUQKKwkgKi8KKwljY1N0bXQgPSBuZXdfb2JqdHJl ZSgiQ1JFQVRFIik7CisKKworCS8qIEFkZCB0aGUgREVGQVVMVCBjbGF1c2UgKi8KKwlhcHBlbmRf c3RyaW5nX29iamVjdChjY1N0bXQsICJkZWZhdWx0IiwKKwkJCQkJCSBjb25Gb3JtLT5jb25kZWZh dWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJdG1wT2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKGNvbkZvcm0tPmNvbm5hbWVzcGFjZSwgTmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY2NTdG10LCAiQ09OVkVSU0lPTiAle2lkZW50aXR5fUQiLCB0 bXBPYmopOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNjU3RtdCwgIkZPUiAle3NvdXJjZX1MIiwg KGNoYXIgKikKKwkJCQkJCSBwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29k aW5nKSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QoY2NTdG10LCAiVE8gJXtkZXN0fUwiLCAoY2hh ciAqKQorCQkJCQkJIHBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29udG9lbmNvZGluZykp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNjU3RtdCwgIkZST00gJXtmdW5jdGlvbn1EIiwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xvc2UoY29udnJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjY1N0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ3JlYXRlRW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICogR2l2ZW4gYSB0 eXBlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUJICAgKmVudW10eXBlOworCUxpc3QJICAgKnZhbHVlczsKKwlMaXN0 Q2VsbCAgICpjZWxsOworCisJZW51bXR5cGUgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIFRZUEUiKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChlbnVtdHlwZSwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CSBvYmplY3RJZCkpOworCisJdmFsdWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFs cykKKwl7CisJCVN0cmluZyAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpOworCisJ CXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkp OworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZW51bXR5cGUsICJBUyBFTlVNICgle3ZhbHVl czosIH1MKSIsIHZhbHVlcyk7CisJcmV0dXJuIGVudW10eXBlOworfQorCisvKgorICogZGVwYXJz ZV9DcmVhdGVFeHRlbnNpb25TdG10CisgKgkJZGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQK KyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0 ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRl bnNpb25TdG10ICpub2RlID0gKENyZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJl bGF0aW9uICAgIHBnX2V4dGVuc2lvbjsKKwlIZWFwVHVwbGUgICBleHRUdXA7CisJRm9ybV9wZ19l eHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlCSAgICpleHRTdG10OworCU9ialRyZWUJICAgKnRt cDsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIFZlcmJv c2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgRVhURU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7 aWRlbnRpdHl9SSAle29wdGlvbnM6IH1zCisJICovCisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9v cGVuKEV4dGVuc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0 X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29p ZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJ CSBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4 dFR1cCk7CisKKwlleHRTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSBFWFRFTlNJT04iKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJ CQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGV4dFN0bXQsICIle25hbWV9SSIsIG5vZGUtPmV4dG5hbWUpOworCisJ LyogTGlzdCBvZiBvcHRpb25zICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUt Pm9wdGlvbnMpCisJeworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWEiKSA9PSAwKQorCQl7CisJCQkv KiBza2lwIHRoaXMgb25lOyB3ZSBhZGQgb25lIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLworCQkJ Y29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm5ld192ZXJz aW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT04gJXt2ZXJz aW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJ CQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVs c2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJvbGRfdmVyc2lvbiIpID09IDApCisJCXsKKwkJ CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImZyb20iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBl U3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBw b3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwkvKiBBZGQgdGhlIFNDSEVN QSBvcHRpb24gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0NIRU1BICV7c2NoZW1hfUkiLAor CQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNjaGVtYSIsCisJCQkJCQkgInNjaGVt YSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X25hbWVzcGFjZV9uYW1lKGV4dEZvcm0tPmV4 dG5hbWVzcGFjZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogZG9uZSAqLworCWFwcGVuZF9hcnJheV9vYmplY3QoZXh0U3RtdCwgIiV7b3B0 aW9uczogfXMiLCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBleHRTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFU RSBUWVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIHRo ZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlP YmpUcmVlCSAgICpyYW5nZTsKKwlPYmpUcmVlCSAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlv biA9IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9y bV9wZ19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNj IHNjYW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNs dXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9y bmd0eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0 SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19y YW5nZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOwor CisJcmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy YW5nZSB3aXRoIHR5cGUgb2lkICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAo Rm9ybV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCXJhbmdlID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBUWVBFIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmFu Z2UsICIle2lkZW50aXR5fUQgQVMgUkFOR0UiLCB0bXApOworCisJLyogU1VCVFlQRSAqLworCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CSAgcmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQ RSA9ICV7dHlwZX1EIiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LCB0bXApOworCWRlZmlu aXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogU1VCVFlQRV9PUENMQVNTICovCisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJv cGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yQ2xh c3NSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdzdWJvcGMpOworCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLAorCQkJCQkJ CSAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJ CSAib3BjbGFzcyIsIE9ialR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5k KGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENPTExBVElP TiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+cm5nY29sbGF0aW9uKSkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCSAgcmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pOworCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiQ09MTEFUSU9OID0gJXtjb2xsYXRpb259RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9uIiwKKwkJCQkJCQkgImNvbGxhdGlvbiIsIE9i alR5cGVPYmplY3QsIHRtcCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLworCWlmIChPaWRJ c1ZhbGlkKHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgcmFuZ2VG b3JtLT5ybmdjYW5vbmljYWwpOworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0g JXtjYW5vbmljYWx9RCIsCisJCQkJCQkJIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNhbCIsIE9ialR5cGVPYmplY3QsIHRt cCk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdl Rm9ybS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHJhbmdlRm9ybS0+cm5nc3ViZGlm Zik7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX0RJRkYgPSAle3N1YnR5cGVfZGlm Zn1EIiwKKwkJCQkJCQkgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0 eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9iamVjdCwgdG1wKTsK KwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChyYW5nZSwgIigle2RlZmluaXRpb246LCB9 cykiLCBkZWZpbml0aW9uKTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xv c2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJhbmdlOworfQorCisv KgorICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQg YW5kIGEgcGFyc2V0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRl ckVudW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJ ICAgKmFsdGVyRW51bTsKKworCWFsdGVyRW51bSA9CW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBF IiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJFbnVtLCAiJXtpZGVudGl0eX1EIiwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKGFsdGVyRW51bSwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdChhbHRlckVudW0sICIle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJbm9kZS0+c2tp cElmTmV3VmFsRXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGFsdGVyRW51bSwgIiV7dmFsdWV9TCIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYg KG5vZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRl ckVudW0sICIle2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJbm9kZS0+bmV3VmFsSXNBZnRl ciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckVu dW0sICIle25laWdoYm91cn1MIiwgbm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVs c2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRW51bSwgIlJFTkFNRSBWQUxVRSAl e3ZhbHVlfUwgVE8iLAorCQkJCQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29i amVjdChhbHRlckVudW0sICIle25ld3ZhbHVlfUwiLAorCQkJCQkJCSBub2RlLT5uZXdWYWwpOwor CX0KKworCXJldHVybiBhbHRlckVudW07Cit9CisKKy8qCisgKiBEZXBhcnNlIEFMVEVSIEVYVEVO U0lPTiAuLiBVUERBVEUgVE8gVkVSU0lPTgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlB bHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25TdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbiAgICBwZ19leHRlbnNpb247CisJSGVhcFR1cGxlICAgZXh0VHVwOworCUZv cm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZQkgICAqc3RtdDsKKwlPYmpUcmVlCSAg ICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcGdf ZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBB bnVtX3BnX2V4dGVuc2lvbl9vaWQsICBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBleHRlbnNp b24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0 ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRVhURU5TSU9OICV7aWRlbnRpdHl9RCBVUERBVEUiLCAxLAorCQkJCQkJICAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZXh0Rm9y bS0+ZXh0bmFtZXNwYWNlLAorCQkJCQkJCSAgCQkJCQkgICBOYW1lU3RyKGV4dEZvcm0tPmV4dG5h bWUpKSk7CisKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0g Km9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVm bmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZl cnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmco b3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0 LT5kZWZuYW1lKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIle29wdGlvbnM6 IH1zIiwgbGlzdCk7CisKKwl0YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIEFMVEVSIEVYVEVOU0lPTiBleHQgQURE L0RST1Agb2JqZWN0CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNp b25Db250ZW50c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJCSAg IE9iamVjdEFkZHJlc3Mgb2JqZWN0QWRkcmVzcykKK3sKKwlBbHRlckV4dGVuc2lvbkNvbnRlbnRz U3RtdCAqbm9kZSA9IChBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkgICAqc3RtdDsKKwljaGFyCSAgICpmbXQ7CisKKwlBc3NlcnQobm9kZS0+YWN0aW9u ID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAtMSk7CisKKwlmbXQgPSBwc3ByaW50ZigiQUxURVIg RVhURU5TSU9OICUle2V4dGlkZW50aXR5fUkgJXMgJXMgJSV7b2JqaWRlbnRpdHl9cyIsCisJCQkJ ICAgbm9kZS0+YWN0aW9uID09ICsxID8gIkFERCIgOiAiRFJPUCIsCisJCQkJICAgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+b2JqdHlwZSkpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwg MiwgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+ZXh0bmFtZSwK KwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0T2JqZWN0 SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNlKSk7CisKKwlyZXR1cm4gc3RtdDsKK30KKy8q CisgKiBEZXBhcnNlIGFuIENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2Ug T0lEIGFuZCBhIHBhcnNldHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZUNhc3RTdG10ICpub2RlID0gKENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJl ZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhlYXBUdXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2Fz dCBjYXN0Rm9ybTsKKwlPYmpUcmVlCSAgICpjcmVhdGVDYXN0OworCWNoYXIJICAgKmNvbnRleHQ7 CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXN0cmVsLCBBbnVtX3Bn X2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNhc3RUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVw KTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBDQVNUICgle3Nv dXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219cyAle2NvbnRleHR9cwor CSAqLworCWNyZWF0ZUNhc3QgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENBU1QgKCV7c291cmNl dHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsCisJCQkJCQkJCTIsICJzb3VyY2V0eXBlIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rz b3VyY2UsIC0xKSwKKwkJCQkJCQkJInRhcmdldHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQluZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwgLTEpKTsKKworCWlm IChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVj aGFuaXNtfXMiLCAiV0lUSCBJTk9VVCIpOworCWVsc2UgaWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlQ2FzdCwgIiV7bWVjaGFuaXNtfXMiLCAiV0lU SE9VVCBGVU5DVElPTiIpOworCWVsc2UKKwl7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJU3Ry aW5nSW5mb0RhdGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBm dW5jRm9ybTsKKwkJaW50CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsIGNhc3RGb3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VU U1RSVUNUKGZ1bmNUdXApOworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmZnVuYywgIiVzKCIsCisJCQkJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihn ZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkg ICBOYW1lU3RyKGZ1bmNGb3JtLT5wcm9uYW1lKSkpOworCQlmb3IgKGkgPSAwOyBpIDwgZnVuY0Zv cm0tPnByb25hcmdzOyBpKyspCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJ CQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQoZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZh bHVlc1tpXSkpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwK KwkJCQkJCQkgImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUNhc3QsICIle21lY2hhbmlzbX1zIiwgdG1wb2JqKTsK KworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJfQorCisJc3dpdGNoIChub2RlLT5jb250 ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJVDoKKwkJCWNvbnRleHQgPSAiQVMgSU1Q TElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fQVNTSUdOTUVOVDoKKwkJCWNvbnRl eHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJ VDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJP UiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5vZGUtPmNvbnRleHQpOworCQkJcmV0dXJu IE5VTEw7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmpl Y3QoY3JlYXRlQ2FzdCwgIiV7Y29udGV4dH1zIiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShj YXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZUNhc3Q7Cit9CisKKy8q CisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4g T2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVGFibGVTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK K3sKKwlPYmpUcmVlCSAgICphbHRlclRhYmxlU3RtdDsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJ T2JqVHJlZQkgICAqdG1wb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVs OworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAg ICpmbXRzdHI7CisJY29uc3QgY2hhciAqcmVsdHlwZTsKKwlib29sCQlpc3R5cGUgPSBmYWxzZTsK KwlMaXN0CSAgICpleHBycyA9IE5JTDsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VGFibGUpOworCisJcmVsID0gcmVsYXRpb25fb3BlbihjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5v YmplY3RJZCk7CisKKwlzd2l0Y2ggKHJlbC0+cmRfcmVsLT5yZWxraW5kKQorCXsKKwkJY2FzZSBS RUxLSU5EX1JFTEFUSU9OOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEU6CisJCQly ZWx0eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNh c2UgUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJ YnJlYWs7CisJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJy ZWFrOworCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUi OworCQkJaXN0eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9U QUJMRToKKwkJCXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKworCQkvKiBU T0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+cmVsa2luZCk7 CisJfQorCisJLyoKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQUxURVIgcmVsdHlwZSAl e2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMKKwkgKi8KKwlmbXRzdHIgPSBwc3ByaW50ZigiQUxU RVIgJXMiLCByZWx0eXBlKTsKKwlhbHRlclRhYmxlU3RtdCA9IG5ld19vYmp0cmVlKGZtdHN0cik7 CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsLT5yZF9yZWwtPnJlbG5h bWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoYWx0ZXJUYWJsZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmop OworCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzKQorCXsKKwkJQ29s bGVjdGVkQVRTdWJjbWQgKnN1YiA9IChDb2xsZWN0ZWRBVFN1YmNtZCAqKSBsZmlyc3QoY2VsbCk7 CisJCUFsdGVyVGFibGVDbWQJKnN1YmNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0 cmVlOworCQlPYmpUcmVlCSAgICp0cmVlOworCisJCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRh YmxlQ21kKSk7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRf QWRkQ29sdW1uOgorCQkJY2FzZSBBVF9BZGRDb2x1bW5SZWN1cnNlOgorCQkJCS8qIFhYWCBuZWVk IHRvIHNldCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShz dWJjbWQtPmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJl bCwgZHBjb250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRl ZiwgdHJ1ZSwgJmV4cHJzKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiQUREICVzICUle2RlZmlu aXRpb259cyIsCisJCQkJCQkJCSAgaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIik7CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFkZCBjb2x1bW4iLAorCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2Jq VHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhD b25zdHJhaW50OgorCQkJCXsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9u CWlkeDsKKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJ CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJ bmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFp bnQgJiYgaXN0bXQtPnVuaXF1ZSk7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+ aW5kZXhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBz eW50YXgKKwkJCQkJICoKKwkJCQkJICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJh aW50X3R5cGV9cyBVU0lORyBJTkRFWAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJs ZX1zICV7aW5pdF9kZWZlcnJlZH1zCisJCQkJCSAqLworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCB1c2luZyBpbmRleCIsCisJCQkJCQkJCQkJICJu YW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpKTsKKwor CQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbnN0cmFpbnRfdHlwZX1zIiwg aXN0bXQtPmRlZmVycmFibGUgPworCQkJCQkJCQkJCSAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVS UkFCTEUiKTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiVVNJTkcgSU5ERVgg JXtpbmRleF9uYW1lfUkiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgp KTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZlcnJhYmxlfXMiLCBp c3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJS QUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2luaXRfZGVmZXJy ZWR9cyIsIGlzdG10LT5pbml0ZGVmZXJyZWQgPworCQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVS UkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xv c2UoaWR4LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9SZUFkZEluZGV4OgorCQkJY2FzZSBBVF9SZUFkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1Jl QWRkQ29tbWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6CisJCQkJLyogU3VidHlw ZXMgdXNlZCBmb3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1uVG9WaWV3OgorCQkJCS8qIENSRUFURSBP UiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAoc3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJ CQl7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqZHBjb250ZXh0 OworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsKKworCQkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIERF RkFVTFQiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgZGVmYXVs dCIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CisJCQkJCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlh dHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3Vi Y21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1Qo YXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7 ZGVmaW5pdGlvbn1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwg YXR0bm8sIGRwY29udGV4dCwgTlVMTCkpOworCQkJCQlSZWxlYXNlU3lzQ2FjaGUoYXR0cnR1cCk7 CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJCQkJ dG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9U IE5VTEwiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51 bGwiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJ CSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGV4cHJlc3Npb24iLAorCQkJCQkJCQkJICJj b2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1p c3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldFN0YXRpc3RpY3M6CisJCQkJeworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbnRl Z2VyKSk7CisJCQkJCWlmIChzdWJjbWQtPm5hbWUpCisJCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNz fW4iLAorCQkJCQkJCQkJCQkgMywKKwkJCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJCSAic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAor CQkJCQkJCQkJCQkgaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UK KwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBT RVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsCisJCQkJCQkJCQkJCSAzLAorCQkJCQkJCQkJ CQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkg ImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBzdWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0 aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJCQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikg c3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9w dGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRP cHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgor CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9 cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAor CQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJ CQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIHN0clZhbCgoU3RyaW5nICop IHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Q29tcHJlc3Np b246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBDT01QUkVTU0lPTiAl e2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLAorCQkJCQkJCQkJICJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9k IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRl ZikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb2x1bW5SZWN1cnNlOgorCQkJ Y2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJEUk9QICVzICUle2Nv bHVtbn1JIiwKKwkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6ICJDT0xVTU4iKTsKKwkJ CQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZHJvcCBjb2x1bW4iLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FT Q0FERSIsIDEsCisJCQkJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHN1YmNtZC0+YmVo YXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7Y2FzY2FkZX1zIiwg dG1wb2JqMik7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7 CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJSW5kZXhT dG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJY29uc3QgY2hhciAqaWR4bmFt ZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5kZWY7CisK KwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQorCQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4 ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJCWlkeG5hbWUg PSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOworCisJCQkJCWNvbnN0ck9pZCA9IGdldF9y ZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk LCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBD T05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgMywKKwkJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9i alR5cGVTdHJpbmcsIGlkeG5hbWUsCisJCQkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29u c3RyT2lkKSk7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCisJCQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkQ29uc3RyYWludDoKKwkJCWNh c2UgQVRfQWRkQ29uc3RyYWludFJlY3Vyc2U6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBz ZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQg PSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1 cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJ CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIENvbnN0cmFpbnQpKTsKKwkJCQkJY29uc3RyID0g IGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+ c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09O U1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1 cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJ CQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLwor CQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJ CSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlz bnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFs KTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7 CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJ CX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1l fUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0 X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2lt cGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0 ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lkCQljb25zdHJPaWQgPSBzdWItPmFkZHJlc3Mu b2JqZWN0SWQ7CisJCQkJCUNvbnN0cmFpbnQgKmMgPSAoQ29uc3RyYWludCAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQkvKiBJZiBubyBjb25zdHJhaW50IHdhcyBhbHRlcmVkLCBzaWxlbnRseSBza2lw IGl0ICovCisJCQkJCWlmICghT2lkSXNWYWxpZChjb25zdHJPaWQpKQorCQkJCQkJYnJlYWs7CisK KwkJCQkJQXNzZXJ0KElzQShjLCBDb25zdHJhaW50KSk7CisJCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9k ZWZlcnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYWx0ZXIgY29uc3RyYWludCIsCisJCQkJCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmlu ZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAorCQkJCQkJCQkJCSAiZGVmZXJyYWJs ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJM RSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCSAiaW5pdF9kZWZlcnJlZCIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJIGMtPmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJS RUQiIDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50UmVjdXJzZToKKwkJCWNhc2UgQVRfVmFsaWRh dGVDb25zdHJhaW50OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFURSBDT05T VFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5 cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cENvbnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludDoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCBDT05TVFJBSU5UICV7Y29uc3RyYWludH1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJCQkJeworCQkJCQlUdXBs ZURlc2MgdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJCQkJRm9ybV9wZ19hdHRy aWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYJICAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRl c2MtPmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENv bHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikp OworCisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENv bXBvc2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJ CQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJ CQkJCSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNF VCBEQVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7 dXNpbmd9cworCQkJCQkgKi8KKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUle2Nv bHVtbn1JIFNFVCBEQVRBIFRZUEUiLAorCQkJCQkJCQkJICBpc3R5cGUgPyAiQVRUUklCVVRFIiA6 ICJDT0xVTU4iKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQShmbXRzdHIsIDIsCisJ CQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJ CQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJCS8q IEFkZCB0aGUgVFlQRSBjbGF1c2UgKi8KKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2Jq LCAiJXtkYXRhdHlwZX1UIiwKKwkJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5h dHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBB ZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcG9iajIgPSBuZXdfb2Jq dHJlZSgiQ09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikp CisJCQkJCXsKKwkJCQkJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wb2JqMiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJ CWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmoyLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcG9iajIpOworCisJ CQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhlIFVTSU5HIGNsYXVzZSAqLwor CQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHRoZXJlJ3Mg YSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10CisJCQkJCQkgKiByYW4gaXQg dGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJCQkJCQkgKiByZXN1bHRpbmcg bm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVzZQorCQkJCQkJICogaGVyZS4K KwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJ aWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJRGF0dW0JZGVwYXJzZWQ7CisJ CQkJCQkJY2hhciAgICpkZWZleHByOworCisJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCBk ZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJCQlkZWZleHByID0gbm9kZVRvU3RyaW5nKGRlZi0+ Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxsMihw Z19nZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldFRleHREYXR1bShkZWZleHBy KSwKKwkJCQkJCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJCQkJCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBvYmoyLCAiJXtleHByZXNzaW9ufXMiLAorCQkJCQkJCQkJCQkJ IFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJ CQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBmYWxzZSk7CisJCQkJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3VzaW5nfXMiLCB0bXBvYmoyKTsKKwkJ CQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURF IGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJCQl0bXBvYmoyID0gbmV3 X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1Bf Q0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqMiwgInByZXNlbnQiLCBm YWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Nhc2NhZGV9cyIs IHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisjaWZkZWYgVE9E T0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoKKwkJCQl0bXBvYmog PSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3du ZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7b3duZXJ9SSIsIDIs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93bmVyIiwKKwkJCQkJ CQkJCSAib3duZXIiLCAgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFt ZShzdWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ2x1c3Rl ck9uOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5kZXh9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIsCisJCQkJ CQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiU0VUIFdJVEhPVVQgQ0xVU1RFUiIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IHdpdGhvdXQgY2x1c3RlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X1NldExvZ2dlZDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExPR0dFRCIsIDEs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldFVuTG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPaWRz OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBPSURTIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBvaWRzIik7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUkiLCAyLAorCQkJ CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9kIiwKKwkJCQkJ CQkJCSAiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CisJCQkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgMiwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIsCisJCQkJCQkJCQkgInRhYmxl c3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVsT3B0aW9uczoKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJCQkJCQkJ CSAgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJ R0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNUcmln OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0 cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBh bHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FUcmln OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBUUklHR0VSICV7 dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUg cmVwbGljYSB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIs IDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwK KwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdf b2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgQUxMIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElT QUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZGlzYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZVRyaWdVc2VyOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBV U0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dl ciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdVc2VyOgor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJ CQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSdWxlOgorCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJFTkFCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlw ZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVBbHdheXNSdWxlOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlT IFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSBhbHdheXMgcnVsZSIsCisJCQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxl OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVs ZX1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGlj YSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf QWRkSW5oZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVu dH1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJ CQkJCQkJCSAicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWIt PmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wSW5o ZXJpdDoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1E IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAor CQkJCQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1 Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9m OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJPRiAle3R5cGVfb2Z9VCIsIDIsCisJCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIG9mIiwKKwkJCQkJCQkJCSAidHlwZV9v ZiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoc3ViLT5h ZGRyZXNzLm9iamVjdElkLCAtMSkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BP ZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9SZXBsaWNhSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJ Q0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxp Y2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJj bWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJ VFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9 cyIsICJERUZBVUxUIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBSRVBMSUNBX0lERU5USVRZ X0ZVTEw6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2lkZW50fXMiLCAi RlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5H OgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgIk5PVEhJ TkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6CisJ CQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9SSIsIDEs CisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJICAoKFJl cGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsIHRtcG9iajIpOworCQkJCQkJYnJlYWs7 CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1NlY3VyaXR5Ogor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwg MSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcm93IHNlY3VyaXR5 Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVJvd1NlY3VyaXR5OgorCQkJ CXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEs CisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSByb3cgc2VjdXJpdHki KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBv YmopKTsKKwkJCQlicmVhazsKKyNpZmRlZiBUT0RPTElTVAorCQkJY2FzZSBBVF9HZW5lcmljT3B0 aW9uczoKKwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5k ZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0F0dGFjaFBhcnRp dGlvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQVRUQUNIIFBBUlRJVElPTiAle3Bh cnRpdGlvbl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhdHRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJCSAicGFydGl0aW9uX2lkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRp b25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsK KworCQkJCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle3BhcnRpdGlvbl9ib3Vu ZH1zIiwKKwkJCQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246 CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRp b25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0 YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5 fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFj aCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJCQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0 dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUJKnNl cWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRl ZjsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKFJlbGF0aW9u R2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJc2VxX3JlbGlkID0gZ2V0SWRlbnRp dHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0dG51bSwgdHJ1ZSk7CisJCQkJCXNl cWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5 LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiaWRlbnRpdHlf Y29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1Nl dElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50 aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51 bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJ CQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0 KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUo RGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJ CQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1 YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRp b25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0Nv bHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCisJCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsKKworCQkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAy LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJ CQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJCQkJ IHN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJc3ViY21kcyA9 IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7 CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFsdGVyIHRhYmxl IHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQlicmVhazsKKwkJfQor CisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxURVIgVEFCTEUgd2hp Y2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2UgSXQncyBwb3NzaWJs ZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGljaCBjYXNlIHRoZXNl IG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNh dGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJl aW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3Qu IFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50 ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQKKwkJICogaW4gdGhvc2UgZnVu Y3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci1zaWRlLgorCQkgKi8K KwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIGV4cHJzKSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5j dGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoKKwkJICogQ2xlYW4gdGhlIGxp c3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRpbGUKKwkJICogZnVu Y3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9IE5JTDsKKwl9CisK Kwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAobGlzdF9sZW5ndGgo c3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGFs dGVyVGFibGVTdG10LCAiJXtzdWJjbWRzOiwgfXMiLCBzdWJjbWRzKTsKKworCXJldHVybiBhbHRl clRhYmxlU3RtdDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBh cnNpbmcuCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIg KG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29uc3RyYWludHMg aW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICog Y29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0 IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMg aW5jb21wbGV0ZSBhbnl3YXkuKS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1 bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wb3NpdGUs CisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKQor eworCU9ialRyZWUJICAgKmNvbHVtbjsKKwlPYmpUcmVlCSAgICp0bXBvYmo7CisJT2lkCQkJcmVs aWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlG b3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9k OworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCisJLyoKKwkgKiBJbmhlcml0ZWQgY29sdW1ucyB3aXRob3V0IGxvY2FsIGRlZmlu aXRpb25zIG11c3Qgbm90IGJlIGVtaXR0ZWQuCisJICoKKwkgKiBYWFggbWF5YmUgaXQgaXMgdXNl ZnVsIHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9yIHNvbWUgc3VjaD8KKwkg Ki8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9 IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBj YWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVm LT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0t PmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqICV7bmFtZX1JICV7Y29sdHlwZX1UICV7Y29t cHJlc3Npb259cyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJ ICovCisJY29sdW1uID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JICV7Y29sdHlwZX1UIiwgMywK KwkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJCSJuYW1lIiwg T2JqVHlwZVN0cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJCSJjb2x0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBpZCwgdHlwbW9kKSk7CisK KwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04i KTsKKwlpZiAoY29sZGVmLT5jb21wcmVzc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w b2JqLCAiJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2NvbXByZXNzaW9uX21ldGhv ZH1JIik7CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2NvbXByZXNzaW9ufXMiLCB0bXBv YmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBjb2xsYXRpb24pKQorCXsKKwkJT2JqVHJlZSAqY29sbG5hbWU7CisKKwkJY29sbG5hbWUg PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJICAgdHlwY29sbGF0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAi JXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAi JXtjb2xsYXRpb259cyIsIHRtcG9iaik7CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAlz ZXFyZWxpZCA9IEludmFsaWRPaWQ7CisKKwkJLyoKKwkJICogRW1pdCBhIE5PVCBOVUxMIGRlY2xh cmF0aW9uIGlmIG5lY2Vzc2FyeS4gIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ1c3QKKwkJICogcGdf YXR0cmlidXRlLmF0dG5vdG51bGwgaGVyZSwgYmVjYXVzZSB0aGF0IGJpdCBpcyBhbHNvIHNldCB3 aGVuCisJCSAqIHByaW1hcnkga2V5cyBhcmUgc3BlY2lmaWVkOyBhbmQgd2UgbXVzdCBub3QgZW1p dCBhIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGlj aXRlbHkgc3BlY2lmaWVkLiAgVGhlcmVmb3JlLAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNv bnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMgY29sdW1uIHRvIGRldGVybWluZQorCQkgKiB3aGV0 aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGluZy4KKwkJICogKEZvcnR1bmF0ZWx5LCBOT1QgTlVM TCBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFibGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJ biB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdlIGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNv bERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9 IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNv bnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYg KGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQlzYXdfbm90bnVsbCA9IHRy dWU7CisJCX0KKwkJaWYgKGlzX2FsdGVyICYmIGNvbGRlZi0+aXNfbm90X251bGwpCisJCQlzYXdf bm90bnVsbCA9IHRydWU7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3Rf bnVsbH1zIiwKKwkJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVm KQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1u RGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkJICBkcGNvbnRl eHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0 fXMiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2Rl ZmF1bHR9cyIsIHRtcG9iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJCWlmIChjb2xk ZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJYXR0bm8gPSBnZXRfYXR0bnVtKHJlbGlkLCBjb2xk ZWYtPmNvbG5hbWUpOworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKHJlbGlkLCBh dHRubywgZmFsc2UpOworCQl9CisKKwkJdG1wb2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShz ZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb2x1bW4sICIle2lkZW50aXR5X2NvbHVtbn1zIiwgdG1wb2JqKTsKKworCQkvKiBHRU5F UkFURUQgQ09MVU1OIEVYUFJFU1NJT04gKi8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIkdFTkVS QVRFRCBBTFdBWVMgQVMiKTsKKwkJaWYgKGNvbGRlZi0+Z2VuZXJhdGVkID09IEFUVFJJQlVURV9H RU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9IFJl bGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJ CQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9i aiwgIiV7Z2VuZXJhdGlvbl9leHByfXMgU1RPUkVEIiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJ CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChjb2x1bW4sICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcG9iaik7 CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIGNvbHVtbjsKK30K KworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBPRiBkZXBhcnNpbmcuCisgKgor ICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBhIHR5cGVkIHRhYmxlIGNyZWF0aW9u LglUaGlzIGlzIHNpbXBsZXIKKyAqIHRoYW4gdGhlIHJlZ3VsYXIgY2FzZSwgYmVjYXVzZSB3ZSBk b24ndCBoYXZlIHRvIGVtaXQgdGhlIHR5cGUgZGVjbGFyYXRpb24sCisgKiBjb2xsYXRpb24sIG9y IGRlZmF1bHQuICBIZXJlIHdlIG9ubHkgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgY29sdW1uIGlz IGJlaW5nCisgKiBkZWNsYXJlZCBOT1QgTlVMTC4KKyAqCisgKiBBcyBpbiBkZXBhcnNlX0NvbHVt bkRlZiwgYW55IG90aGVyIGNvbnN0cmFpbnQgaXMgcHJvY2Vzc2VkIGVsc2V3aGVyZS4KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRp b24sIExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7CisJT2JqVHJlZQkqY29s dW1uID0gTlVMTDsKKwlPYmpUcmVlCSp0bXBvYmo7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdl dFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0 ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNv bGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0 clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3Qg ZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkg Y29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUp IEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0 ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsK KworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVw YXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0 aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91 dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwg PSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25z dHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNv bnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0 cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRyRm9y bS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiAle25hbWV9SSBX SVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtub3RfbnVsbH1zLgorCSAqLworCWNvbHVtbiA9IG5l d19vYmp0cmVlX1ZBKCIle25hbWV9SSBXSVRIIE9QVElPTlMiLCAyLAorCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBj b2xkZWYtPmNvbG5hbWUpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY29sdW1uLCAiJXtub3Rf bnVsbH1zIiwKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwl0bXBv YmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChhdHRyRm9ybS0+YXR0aGFzZGVmKQor CXsKKwkJY2hhciAqZGVmc3RyOworCisJCWRlZnN0ciA9IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVs dChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCQkJCQkgIGRwY29udGV4dCwgTlVM TCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZz dHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50Iiwg ZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgIiV7ZGVmYXVsdH1zIiwgdG1w b2JqKTsKKworCS8qCisJICogR2VuZXJhdGVkIGNvbHVtbnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24g dHlwZWQgdGFibGVzLCBzbyB3ZSBhcmUgZG9uZS4KKwkgKi8KKworCVJlbGVhc2VTeXNDYWNoZShh dHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBkZWZp bml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9Db2x1bW5JZGVudGl0eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJf dGFibGUpCit7CisJT2JqVHJlZQkgICAqY29sdW1uOworCU9ialRyZWUJICAgKmlkZW50b2JqOwor CUxpc3QJICAgKmVsZW1zID0gTklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVw bGU7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBz ZXFkYXRhOworCWNoYXIJICAgKmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsKKworCWNvbHVt biA9IG5ld19vYmp0cmVlKCIiKTsKKworCWlmICghT2lkSXNWYWxpZChzZXFyZWxpZCkpCisJewor CQlhcHBlbmRfYm9vbF9vYmplY3QoY29sdW1uLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJcmV0dXJu IGNvbHVtbjsKKwl9CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZtdCA9ICJTRVQg R0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxzZQorCXsKKwkJ aWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIEFTIElERU5U SVRZIjsKKwl9CisKKwlpZGVudG9iaiA9IG5ld19vYmp0cmVlKGlkZW50Zm10KTsKKworCWlmIChp ZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlTKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdChpZGVudG9iaiwgb2JqZm10LCAiQUxXQVlTIik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0g IEFUVFJJQlVURV9JREVOVElUWV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChp ZGVudG9iaiwgb2JqZm10LCAiQlkgREVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KGlkZW50b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbHVtbiwgIiV7aWRlbnRpdHlfdHlwZX1zIiwgaWRlbnRvYmopOworCisJcmVsID0gdGFibGVf b3BlbihTZXF1ZW5jZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXNlcXR1cGxlID0g U2VhcmNoU3lzQ2FjaGVDb3B5MShTRVFSRUxJRCwgc2VxcmVsaWQpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChzZXF0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBzZXF1ZW5jZSAldSIsCisJCQkgc2VxcmVsaWQpOworCisJc2VxZm9ybSA9IChGb3JtX3BnX3Nl cXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFs dWVzKHNlcXJlbGlkKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShOVUxMLCBzZXFm b3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFf SW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBl bmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShOVUxMLCBz ZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNlcWRhdGEpKTsKKwkvKiBXZSBw dXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbiwgIiV7c2VxX2RlZmluaXRpb246IH1z IiwgZWxlbXMpOworCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1bW4sICIoICV7c2Vx X2RlZmluaXRpb246IH1zICkiLCBlbGVtcyk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJcmV0dXJuIGNvbHVtbjsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xV TU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Nv bHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMg PSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpjb2xzZXQ7CisJY2hhcgkg ICAqZm10OworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0 aW9uczsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIEFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisJICovCisJaWYgKGlzX3Jlc2V0 KQorCQlmbXQgPSAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgIjsKKwllbHNlCisJCWZt dCA9ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgIjsKKworCWNvbHNldCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisK Kwlmb3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAq ZWxlbTsKKwkJT2JqVHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3Qo Y2VsbCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMg PSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChz ZXRzKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBz ZXRzKTsKKworCXJldHVybiBjb2xzZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBDUkVBVEUg RE9NQUlOCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gdGhlIEpTT04KKyAqIGJsb2IgcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZURv bWFpbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlCSAgICpjcmVh dGVEb21haW47CisJT2JqVHJlZQkgICAqdG1wb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7CisJRm9y bV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisKKwl0eXBUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWlu IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRT VFJVQ1QodHlwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFU RSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFp bnRzfXMKKwkgKiAle2NvbGxhdGlvbn1zCisJICovCisJY3JlYXRlRG9tYWluID0gbmV3X29ianRy ZWUoIkNSRUFURSIpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJ CQkJICJET01BSU4gJXtpZGVudGl0eX1EIEFTIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLAorCQkJCQkJICIle3R5cGV9VCIsCisJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwYmFzZXR5cGUsIHR5cEZvcm0tPnR5 cHR5cG1vZCkpOworCisJaWYgKHR5cEZvcm0tPnR5cG5vdG51bGwpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7bm90X251bGx9cyIsICJOT1QgTlVMTCIpOworCWVsc2UK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtub3RfbnVsbH1zIiwgIiIp OworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50cyhOSUwsIEludmFsaWRPaWQsIG9i amVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQorCXsKKwkJdG1wb2JqID0gbmV3X29i anRyZWUoIiIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNl KTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czosIH1z IiwgMSwKKwkJCQkJCQkgImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRG9tYWluLCAiJXtjb25zdHJhaW50c31zIiwgdG1w b2JqKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFs aWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJ CWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFw cGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZURvbWFpbiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBvYmopOworCisJUmVs ZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gY3JlYXRlRG9tYWluOworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAq IEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIHRoZSBKU09OCisgKiBibG9iIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAo Q3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpjcmVhdGVGdW5j OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291 cmNlOworCWNoYXIJICAgKnByb2JpbjsKKwlMaXN0CSAgICpwYXJhbXM7CisJTGlzdAkgICAqZGVm YXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0eXBlcyA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlMaXN0Q2VsbCAgICp0YWJs ZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9j Rm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBhcnJheTsKKwlPaWQJCSAg ICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCWludAkJCWk7CisJaW50 CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlib29sCQlpc251bGw7CisJYm9vbAkJaXNmdW5j dGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLworCXByb2NUdXAgPSBTZWFyY2hT eXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9j VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsdXJlIGZvciBmdW5jdGlvbiB3 aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1 YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCBwcm9jRm9y bS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWx1cmUgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJ CSBwcm9jRm9ybS0+cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VU U1RSVUNUKGxhbmdUdXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3Ig cHJvc3JjIGFuZCBwcm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVy IE5VTEwgb3IgIi0iLCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLwor CXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAg QW51bV9wZ19wcm9jX3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgIm51bGwgcHJvc3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNv dXJjZSA9IFRleHREYXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEg dXNlZnVsIHZhbHVlIGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQ Uk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwp OworCWlmIChpc251bGwpCisJCXByb2JpbiA9IE5VTEw7CisJZWxzZQorCXsKKwkJcHJvYmluID0g VGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlmIChwcm9iaW5bMF0gPT0gJ1wwJyB8 fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9iaW4gPSBOVUxMOworCX0KKworCS8q CisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5D VElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zCisJICogTEFOR1VBR0Ug JXt0cmFuc2Zvcm1fdHlwZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1z CisJICogJXtwYXJhbGxlbF9zYWZldHl9cyAle2xlYWtwcm9vZn1zICV7c3RyaWN0fXMgJXtzZWN1 cml0eV9kZWZpbmVyfXMKKwkgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9v cHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKwkgKiAle3N5bWJvbH1MCisJICovCisJY3JlYXRl RnVuYyA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUZ1bmMsICIle29yX3JlcGxhY2V9cyIsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBS RVBMQUNFIiA6ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJy YXksIGV4dHJhY3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJv YyBlbnRyeS4gIElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QgbGVuZ3RoLAor CSAqIHRoZXJlIGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0 aGUgdHlwZSBPSUQgZnJvbQorCSAqIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBk ZWNvZGUgcHJvYWxsYXJndHlwZXMsIHdoaWNoIGlzCisJICogYSBiaXQgbW9yZSBpbnZvbHZlZC4K KwkgKi8KKwl0eXBhcnJheSA9IHBhbGxvYyhsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKSAq IHNpemVvZihPaWQpKTsKKwlpZiAobGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycykgPiBwcm9j Rm9ybS0+cHJvbmFyZ3MpCisJeworCQlib29sCWlzbnVsbDsKKwkJRGF0dW0JYWxsdHlwZXM7CisJ CURhdHVtICAqdmFsdWVzOworCQlib29sICAgKm51bGxzOworCQlpbnQJCW5lbGVtczsKKworCQlh bGx0eXBlcyA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBB bnVtX3BnX3Byb2NfcHJvYWxsYXJndHlwZXMsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJ ZWxvZyhFUlJPUiwgIk5VTEwgcHJvYWxsYXJndHlwZXMsIGJ1dCBtb3JlIHBhcmFtZXRlcnMgdGhh biBhcmdzIik7CisJCWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBl cyksCisJCQkJCQkgIE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxs cywgJm5lbGVtcyk7CisJCWlmIChuZWxlbXMgIT0gbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVy cykpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxhcmdhdHlwZXMiKTsKKwkJZm9y IChpID0gMDsgaSA8IGxpc3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQl0eXBh cnJheVtpXSA9IHZhbHVlc1tpXTsKKwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IGxp c3RfbGVuZ3RoKG5vZGUtPnBhcmFtZXRlcnMpOyBpKyspCisJCQkgdHlwYXJyYXlbaV0gPSBwcm9j Rm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJl IGFueSBkZWZhdWx0IGV4cHJlc3Npb25zLCB3ZSByZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9u IGFzCisJICogYSBsaXN0IHNvIHRoYXQgd2UgY2FuIGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1l bnQuCisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwK KwkJCQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvYXJnZGVmYXVsdHMsICZpc251bGwpOworCWlmICgh aXNudWxsKQorCXsKKwkJZGVmYXVsdHMgPSBGdW5jdGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4 dFAodG1wZGF0dW0pKTsKKwkJY3VyZGVmID0gbGlzdF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxz ZQorCXsKKwkJZGVmYXVsdHMgPSBOSUw7CisJCWN1cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkg KiBOb3cgaXRlcmF0ZSBvdmVyIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBwYXJzZXRyZWUgdG8gY3Jl YXRlIHRoZQorCSAqIHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5 cG51bSA9IDA7CisJZm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rp b25QYXJhbWV0ZXIgKnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsK KwkJT2JqVHJlZQkgICAqcGFyYW1vYmo7CisJCU9ialRyZWUJICAgKmRlZmF1bHR2YWw7CisJCU9i alRyZWUJICAgKm5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9UQUJMRSBwYXJhbWV0ZXIgaW5k aWNhdGVzIGVuZCBvZiBpbnB1dCBhcmd1bWVudHM7IHRoZQorCQkgKiBmb2xsb3dpbmcgcGFyYW1l dGVycyBhcmUgcGFydCBvZiB0aGUgcmV0dXJuIHR5cGUuICBXZSBpZ25vcmUgdGhlbQorCQkgKiBo ZXJlLCBidXQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgbGlzdCBz byB0aGF0CisJCSAqIHdlIGNhbiBlYXNpbHkgcHJvZHVjZSB0aGUgcmV0dXJuIHR5cGUgYmVsb3cu CisJCSAqLworCQlpZiAocGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9UQUJMRSkKKwkJeworCQkJ dGFibGVfcGFyYW1zID0gY2VsbDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVmVyYm9z ZSBzeW50YXggZm9yIHBhcmFtYXRlcjogJXttb2RlfXMgJXtuYW1lfXMgJXt0eXBlfVQgJXtkZWZh dWx0fXMKKwkJICoKKwkJICogTm90ZSB0aGF0ICV7bmFtZX1zIGlzIGEgc3RyaW5nIGhlcmUsIG5v dCBhbiBpZGVudGlmaWVyOyB0aGUgcmVhc29uCisJCSAqIGZvciB0aGlzIGlzIHRoYXQgYW4gYWJz ZW50IHBhcmFtZXRlciBuYW1lIG11c3QgcHJvZHVjZSBhbiBlbXB0eQorCQkgKiBzdHJpbmcsIG5v dCAiIiwgd2hpY2ggaXMgd2hhdCB3b3VsZCBoYXBwZW4gaWYgd2Ugd2VyZSB0byB1c2UKKwkJICog JXtuYW1lfUkgaGVyZS4gIFNvIHdlIGFkZCBhbm90aGVyIGxldmVsIG9mIGluZGlyZWN0aW9uIHRv IGFsbG93IHVzCisJCSAqIHRvIGluamVjdCBhICJwcmVzZW50IiBwYXJhbWV0ZXIuCisJCSAqLwor CQlwYXJhbW9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFy YW1vYmosICIle21vZGV9cyIsCisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU4g PyAiSU4iIDoKKwkJCQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9PVVQgPyAiT1VUIiA6 CisJCQkJCQkJIHBhcmFtLT5tb2RlID09IEZVTkNfUEFSQU1fSU5PVVQgPyAiSU5PVVQiIDoKKwkJ CQkJCQkgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ICJWQVJJQURJQyIgOgor CQkJCQkJCSAiSU4iKTsKKworCQkvKiBPcHRpb25hbCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2Yg Im5hbWUiIG9jY3VycyBoZXJlICovCisKKwkJbmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7bmFtZX1JIiwKKwkJCQkJCQkgcGFyYW0tPm5hbWUg PyBwYXJhbS0+bmFtZSA6ICJOVUxMIik7CisKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KG5hbWUsICJw cmVzZW50IiwKKwkJCQkJCSAgIHBhcmFtLT5uYW1lID8gdHJ1ZSA6IGZhbHNlKTsKKworCQlhcHBl bmRfb2JqZWN0X29iamVjdChwYXJhbW9iaiwgIiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVs dHZhbCA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJh bS0+ZGVmZXhwcikpCisJCXsKKwkJCWNoYXIgKmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVM TCkKKwkJCQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJ CWV4cHIgPSBsZmlyc3QoY3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVs dHZhbCwgIiV7dmFsdWV9cyIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1 cmRlZik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KGRlZmF1bHR2YWwsICJw cmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0 eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10s IC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIle2RlZmF1bHR9cyIs IGRlZmF1bHR2YWwpOworCisJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29i amVjdChwYXJhbW9iaikpOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50 aXR5fUQiLCAxLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgIG9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7 CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1z KTsKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7CisKKwlpc2Z1bmN0aW9uID0g KHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsKKworCWlmIChpc2Z1bmN0 aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVGdW5jLCAiRlVOQ1RJT04gJXtzaWdu YXR1cmV9cyIsIHRtcG9iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVG dW5jLCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBBIHJl dHVybiB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBbU0VUT0ZdIHNv bWVfdHlwZSwgb3IKKwkgKiBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2FuIHRlbGwgdGhl IHNlY29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3IGEKKwkgKiB0YWJsZSBwYXJhbSBhYm92ZSB3aGls ZSBzY2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVfcGFyYW1zID09 IE5VTEwpCisJeworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkgInJl dHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInBsYWluIik7CisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIiV7c2V0b2Z9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAi U0VUT0YiIDogIiIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3JldHR5cGV9 VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9yZXR0eXBlLCAt MSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9IE5JTDsKKwkJT2JqVHJl ZQkgICAqcGFyYW1vYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwK KwkJCQkJCQkgInJldHVybl9mb3JtIiwgT2JqVHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAo OyB0YWJsZV9wYXJhbXMgIT0gTlVMTDsgdGFibGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1l dGVycywgdGFibGVfcGFyYW1zKSkKKwkJeworCQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0g bGZpcnN0KHRhYmxlX3BhcmFtcyk7CisKKwkJCXBhcmFtb2JqID0gbmV3X29ianRyZWUoIiIpOwor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFyYW1vYmosICIle25hbWV9SSIsIHBhcmFtLT5uYW1l KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0 dHlwZXMgPSBsYXBwZW5kKHJldHR5cGVzLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbW9iaikpOwor CQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtyZXR0eXBlczosIH1zKSIs IHJldHR5cGVzKTsKKwl9CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QoY3JlYXRlRnVuYywgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wb2JqKTsKKworCS8q IFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0i KTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJ Zm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEpKTsKKwkJdHlw ZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBvYmopOworCX0KKworCWlmICh0eXBlcykKKwkJYXBwZW5k X2FycmF5X29iamVjdCh0bXBvYmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3RyYW5zZm9ybV90eXBlfXMiLCB0bXBvYmop OworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIkxBTkdVQUdFICV7bGFuZ3Vh Z2V9SSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJaWYgKGlzZnVu Y3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXt3aW5kb3d9 cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09IFBST0tJTkRfV0lORE9XID8gIldJTkRP VyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3ZvbGF0aWxp dHl9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9WT0xB VElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9sYXRp bGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJMRSIgOiAiSU1NVVRBQkxF Iik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlRnVuYywgIiV7cGFyYWxsZWxfc2Fm ZXR5fXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FG RSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJh bGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklDVEVEID8KKwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RS SUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNy ZWF0ZUZ1bmMsICIle2xlYWtwcm9vZn1zIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9v ZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5j LCAiJXtzdHJpY3R9cyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJ ICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwg SU5QVVQiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiJXtzZWN1cml0 eV9kZWZpbmVyfXMiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJCQkJCQkgIlNF Q1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChjcmVhdGVGdW5jLCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgi Q09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJ CQkJCQkJCQlwcm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJS T1dTIik7CisJCWlmIChwcm9jRm9ybS0+cHJvcm93cyA9PSAwKQorCQkJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9hdF9v YmplY3QodG1wb2JqLCAiJXtyb3dzfW4iLCBwcm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle3Jvd3N9cyIsIHRtcG9iaik7CisKKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIlNVUFBPUlQgJXtuYW1lfXMiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9z dXBwb3J0KQorCQl7CisJCQlPaWQJCQlhcmd0eXBlc1sxXTsKKworCQkJLyoKKwkJCSAqIFdlIHNo b3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBi ZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgor CQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtuYW1lfXMiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFt ZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywK KwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05F KSk7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlRnVuYywgIiV7c3VwcG9y dH1zIiwgdG1wb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJewor CQlEZWZFbGVtCSpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZQkg ICAqdG1wb2JqOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQor CQl7CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZl bC0+YXJnOworCQkJY2hhciAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsK KworCQkJdG1wb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2luZCwgc3N0bXQtPm5h bWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QoY3JlYXRlRnVuYywgIiV7c2V0 X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24g Ki8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1fcGdfcHJv Y19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0gU1FMbGFu Z3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJCWluaXRT dHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHByb2NUdXAp OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZUZ1bmMsICIle2RlZmluaXRpb259cyIs IGJ1Zi5kYXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJeworCQlhcHBlbmRf c3RyaW5nX29iamVjdChjcmVhdGVGdW5jLCAiQVMgJXtkZWZpbml0aW9ufUwiLAorCQkJCQkJCSBz b3VyY2UpOworCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVGdW5j LCAiQVMgJXtvYmpmaWxlfUwiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVGdW5jLCAiLCAle3N5bWJvbH1MIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUo bGFuZ1R1cCk7CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIGNyZWF0ZUZ1 bmM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENMQVNTIGNvbW1hbmQu CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5jcmVhdGVvcGMuYWRk cmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUgICBvcGNUdXA7CisJSGVhcFR1cGxlICAgb3BmVHVw OworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsK KwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0 OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNlIHNxbCBjb21tYW5kcyBn ZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5z aW9uKQorCQlyZXR1cm4gTlVMTDsKKwkJCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9J RCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3Bj VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0 aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJV Q1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3Bj Rm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9J RCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5 KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAq IENSRUFURSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUg JXt0eXBlfVQgVVNJTkcKKwkgKiAle2FtbmFtZX1JICV7b3BmYW1pbHl9cyBBUyAle2l0ZW1zOiwg fXMKKwkgKi8KKworCXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNT ICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkgICBOYW1lU3RyKG9wY0Zvcm0tPm9wY25hbWUpKSk7CisKKwkvKiBBZGQgdGhl IERFRkFVTFQgY2xhdXNlICovCisJYXBwZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIiV7ZGVmYXVs dH1zIiwKKwkJCQkJCSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIpOworCisJ LyogQWRkIHRoZSBGT1IgVFlQRSBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10 LCAiRk9SIFRZUEUgJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zv cm0tPm9wY2ludHlwZSwgLTEpKTsKKworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJYXBw ZW5kX3N0cmluZ19vYmplY3Qoc3RtdCwgIlVTSU5HICV7YW1uYW1lfUkiLCBnZXRfYW1fbmFtZShv cGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlOyBi dXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNs YXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5LCBiZWNhdXNlIGl0IHdvdWxkIGNhdXNl IGEgZmFpbHVyZQorCSAqIGlmIHRoZSBvcGZhbWlseSB3YXMgY3JlYXRlZCBpbnRlcm5hbGx5Lgor CSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwK KwkJCQkJCSAib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIo b3BmRm9ybS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZu YW1lKSwgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZu YW1lc3BhY2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfYm9vbF9vYmplY3Qo dG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQs ICIle29wZmFtaWx5fXMiLCAgdG1wb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0 ZW0gbGlzdC4gIE5vdGUgd2UgYWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkg KiB3aGVuIGl0IGlzIGltcGxpY2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRt cG9iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1w b2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9w Y2tleXR5cGUgIT0gSW52YWxpZE9pZCA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlw ZSA6IG9wY0Zvcm0tPm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0 X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJl ZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3Jz KQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJ ICAgKnRtcG9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT1BFUkFUT1IgJXtudW19 biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwKKwkJCQkJCQkgNCwKKwkJCQkJ CQkgIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJICJvcGVyYXRv ciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChP cGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpLAorCQkJCQkJ CSJsdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Bl ci0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQg dGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0 ZmFtaWx5ID09IEludmFsaWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e3B1cnBvc2V9cyIsICJGT1IgU0VBUkNIIik7CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZQkgICAq dG1wb2JqMjsKKworCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgT1JERVIgQlkgJXtv cGZhbWlseX1EIiwgMCk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmoyLCAib3BmYW1p bHkiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yRmFtaWx5 UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3B1cnBvc2V9cyIsIHRtcG9iajIpOworCQl9CisK KwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQor CisJLyogQWRkIHRoZSBkZWNsYXJlZCBzdXBwb3J0IGZ1bmN0aW9ucyAqLworCWZvcmVhY2goY2Vs bCwgY21kLT5kLmNyZWF0ZW9wYy5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnBy b2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUJICAgKnRtcG9iajsKKwkJSGVhcFR1cGxlCXBy b2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJvYXJndHlwZXM7 CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9iamVjdCkpOwor CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1 bmN0aW9ufUQiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAibnVtIiwgT2JqVHlwZUludGVnZXIsIHBy b2MtPm51bWJlciwKKwkJCQkJCQkgImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkgInJ0eXBlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0 eXBlLCAtMSksCisJCQkJCQkJICJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHBy b2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZQkgICAqYXJnOworCisJCQlhcmcgPSBuZXdf b2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBl bmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9y bWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAi JXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9i aiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5 X29iamVjdChzdG10LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUob3BmVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiBzdG10Owor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFN SUxZKQorICoKKyAqIEdpdmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBj cmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlv biBjb21tYW5kLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZSAgIG9wZlR1cDsK KwlIZWFwVHVwbGUgICBhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9w Z19hbSAgYW1Gb3JtOworCU9ialRyZWUJICAgKmNvcGZTdG10OworCisJb3BmVHVwID0gU2VhcmNo U3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3Bm Rm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0g U2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhv ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZt ZXRob2QpOworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJY29w ZlN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5 fUQgVVNJTkcgJXthbW5hbWV9SSIsCisJCQkJCQkJICAyLAorCQkJCQkJCSAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3Jt LT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1l KSksCisJCQkJCQkJICAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFt bmFtZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3Bm VHVwKTsKKworCXJldHVybiBjb3BmU3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNy ZWF0ZVBvbGljeVN0bXQgKm5vZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkgICAqcG9saWN5OworCisJcG9saWN5ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQ T0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBhZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICov CisJYWRkX3BvbGljeV9jbGF1c2VzKHBvbGljeSwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCAhIW5v ZGUtPnF1YWwsCisJCQkJCSAgICEhbm9kZS0+d2l0aF9jaGVjayk7CisKKwlyZXR1cm4gcG9saWN5 OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0 ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpwb2xpY3k7CisKKwlwb2xp Y3kgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJ CQkJImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyog YWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhwb2xpY3ks IG9iamVjdElkLCBub2RlLT5yb2xlcywgISFub2RlLT5xdWFsLAorCQkJCQkgICAhIW5vZGUtPndp dGhfY2hlY2spOworCisJcmV0dXJuIHBvbGljeTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVh dGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVuIGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNldHJl ZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhl IGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Ny ZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl U2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlCQkJICpjcmVhdGVTY2hlbWE7CisJT2JqVHJlZQkJCSAqYXV0aDsKKworCS8qCisJICogVmVy Ym9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtu YW1lfUkgJXthdXRob3JpemF0aW9ufXMKKwkgKi8KKwljcmVhdGVTY2hlbWEgPSBuZXdfb2JqdHJl ZSgiQ1JFQVRFIFNDSEVNQSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU2NoZW1h LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYg Tk9UIEVYSVNUUyIgOiAiIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTY2hlbWEs ICIle25hbWV9SSIsIG5vZGUtPnNjaGVtYW5hbWUpOworCisJYXV0aCA9IG5ld19vYmp0cmVlKCJB VVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3RyaW5nX29i amVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJIGdldF9yb2xlc3Bl Y19uYW1lKG5vZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JICIpOworCQlhcHBlbmRfYm9vbF9vYmplY3Qo YXV0aCwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVNjaGVtYSwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2No ZW1hOworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgor ICovCitzdGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXApCit7 CisJRGF0dW0JZGVmOworCU5vZGUgICAqZGVmdmFsOworCWNoYXIgICAqZGVmc3RyOworCWJvb2wJ aXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIGRvbVR1cCwgQW51bV9w Z190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJCQkJICZpc251bGwpOworCWlmIChpc251bGwpCisJ CWVsb2coRVJST1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVl IiwKKwkJCSBOYW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5h bWUpKTsKKwlkZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsK KwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8g Ki8sCisJCQkJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBBbHRlckRvbWFpblN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAor CQkJCQkJT2JqZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQg Km5vZGUgPSAoQWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVw OworCUZvcm1fcGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUJICAgKmFsdGVyRG9tOworCWNoYXIJ ICAgKmZtdDsKKwljb25zdCBjaGFyICp0eXBlOworCisJLyogQUxURVIgRE9NQUlOIERST1AgQ09O U1RSQUlOVCBpcyBoYW5kbGVkIGJ5IHRoZSBEUk9QIHN1cHBvcnQgY29kZSAqLworCWlmIChub2Rl LT5zdWJ0eXBlID09ICdYJykKKwkJcmV0dXJuIE5VTEw7CisKKwlkb21UdXAgPSBTZWFyY2hTeXND YWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lE ICV1IiwKKwkJCSBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVD VChkb21UdXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJ CQkvKiBTRVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBO VUxMKQorCQkJeworCQkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJCXR5cGUgPSAiZHJvcCBk ZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwg IiV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIo ZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmbXQgPSAiQUxU RVIgRE9NQUlOIjsKKwkJCQl0eXBlID0gInNldCBkZWZhdWx0IjsKKwkJCQlhbHRlckRvbSA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCIs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZhdWx0fXMiLCBEb21haW5HZXREZWZh dWx0KGRvbVR1cCkpOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9Q IE5PVCBOVUxMICovCisJCQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiZHJvcCBu b3QgbnVsbCI7CisJCQlhbHRlckRvbSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCB0eXBlKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVyRG9tLCAi JXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRv bUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9U IE5VTEwgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJzZXQgbm90IG51 bGwiOworCQkJYWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgdHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRl bnRpdHl9RCBTRVQgTk9UIE5VTEwiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0t PnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQkvKiBBREQgQ09OU1RSQUlO VC4gIE9ubHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieSBkb21haW5zICovCisJ CQlmbXQgPSAiQUxURVIgRE9NQUlOIjsKKwkJCXR5cGUgPSAiYWRkIGNvbnN0cmFpbnQiOworCQkJ YWx0ZXJEb20gPSBuZXdfb2JqdHJlZV9WQShmbXQsIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywg dHlwZSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlckRvbSwgIiV7aWRlbnRpdHl9RCIs CisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCS8qIGEg bmV3IGNvbnN0cmFpbnQgaGFzIGEgbmFtZSBhbmQgZGVmaW5pdGlvbiAqLworCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QoYWx0ZXJEb20sICJBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1z IiwKKwkJCQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWludEFkZHIub2JqZWN0SWQp KTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFsdGVyRG9tLCAiJXtkZWZpbml0aW9ufXMiLAor CQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFk ZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENP TlNUUkFJTlQgKi8KKwkJCWZtdCA9ICJBTFRFUiBET01BSU4iOworCQkJdHlwZSA9ICJ2YWxpZGF0 ZSBjb25zdHJhaW50IjsKKworCQkJLyoKKwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBv cHRpb25zLiBWYWxpZGF0aW9uIGEgY29uc3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUu CisJCQkgKi8KKwkJCWFsdGVyRG9tID0gbmV3X29ianRyZWVfVkEoZm10LCAxLCAidHlwZSIsIE9i alR5cGVTdHJpbmcsIHR5cGUpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJEb20sICIl e2lkZW50aXR5fUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0t PnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUp KSk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChhbHRlckRvbSwgIlZBTElEQVRFIENPTlNUUkFJ TlQgJXtjb25zdHJhaW50X25hbWV9cyIsIG5vZGUtPm5hbWUpOworCisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0eXBl KTsKKwl9CisKKwkvKiBkb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwlyZXR1 cm4gYWx0ZXJEb207Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisg KiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0ZSBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJ ZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0 bXBvYmo7CisJUmVsYXRpb24JcmVsYXRpb247CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRh dGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOwor CVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3Jl YXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2Vx dWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRB QkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAo Y3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEg PSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVl bmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXND YWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlz ZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwkvKgor CSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVF TkNFICV7aWRlbnRpdHl9RAorCSAqLworCWNyZWF0ZVNlcSA9IG5ld19vYmp0cmVlKCJDUkVBVEUi KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVNlcSwgIiV7cGVyc2lzdGVuY2V9cyIs CisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0 ZW5jZSkpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5y ZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTZXEsICJTRVFVRU5DRSAl e2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoY3JlYXRlU2VxLCBzZXFmb3Jt LCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoY3Jl YXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfSW5jcmVtZW50QnkoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoY3JlYXRlU2VxLCBzZXFmb3JtLCBm YWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFsdWUoY3Jl YXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJz ZV9TZXFfU3RhcnR3aXRoKGNyZWF0ZVNlcSwgc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoY3JlYXRlU2VxLCBzZXFkYXRhKSk7CisK KwkvKiBXZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCWFwcGVu ZF9hcnJheV9vYmplY3QoY3JlYXRlU2VxLCAiJXtkZWZpbml0aW9uOiB9cyIsIGVsZW1zKTsKKwor CXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25fY2xvc2UocmVs YXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gY3JlYXRlU2VxOworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0 YWJsZSBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQ3JlYXRlU3RtdCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlS ZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJTGlzdAkgICAqZHBjb250ZXh0OworCU9ialRyZWUJKmNyZWF0ZVN0bXQ7CisJT2JqVHJl ZQkqdG1wb2JqOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMg VEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorCSAqICV7b2ZfdHlwZX1U IHwgUEFSVElUSU9OIE9GICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cwor CSAqICV7aW5oZXJpdHN9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0 aF9jbGF1c2V9cworCSAqICV7b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKwkgKi8KKwljcmVh dGVTdG10ID0gbmV3X29ianRyZWUoIkNSRUFURSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7cGVyc2lzdGVuY2V9cyIsCisJCQkJCQkgZ2V0X3BlcnNpc3RlbmNlX3N0 cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSkpOworCisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcoY3JlYXRlU3RtdCwgIlRBQkxFIik7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVh dGVTdG10LCAiJXtpZl9ub3RfZXhpc3RzfXMiLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMg PyAiSUYgTk9UIEVYSVNUUyIgOiAiIik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbikpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0 ZVN0bXQsICIle2lkZW50aXR5fUQiLCB0bXBvYmopOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9j b250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlv YmplY3RJZCk7CisKKwkvKgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBz bGlnaHRseSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFi bGVfZWxlbWVudHMgd2l0aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAq IGJlY2F1c2UgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVucyBtdXN0IG5vdCBiZSBl bWl0dGVkOyBhbmQKKwkgKiBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhl cml0YW5jZS4KKwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQp CisJeworCQlMaXN0ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2Fu J3QgcHV0IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFy cmF5CisJCSAqIHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xh dXNlIHdvdWxkIGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2Ug YW4gaW5kaXJlY3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0 aGVyZSBhcmUgbm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJ eworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVs b2Z0eXBlLCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiT0YgJXtv Zl90eXBlfVQiLCB0bXBvYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdCAgICAgKnBhcmVu dHM7CisJCQlPYmpFbGVtICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRp b25zKG9iamVjdElkKTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsK KworCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9y bWF0X3N0cmluZyhjcmVhdGVTdG10LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVs ZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxl bWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAg dHJ1ZSwgICAgICAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFsc2UpOyAgICAvKiBu b3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0 cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQl7 CisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w b2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwkJfQorCQllbHNlCisJCQl0bXBvYmogPSBuZXdfb2Jq dHJlZV9WQSgiKCV7ZWxlbWVudHM6LCB9cykiLCAxLAorCQkJCQkJCQkgImVsZW1lbnRzIiwgT2Jq VHlwZUFycmF5LCB0YWJsZWVsdHMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0 bXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBvYmopOworCX0KKwllbHNlCisJeworCQlMaXN0 ICAgICAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVlZCB0 byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxyZWFk eSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAqLwor CisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9ucyBh bmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG9i dGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0cmFp bnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQorCQkg KiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhlIGNv bnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJl bGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNlLCAg ICAgLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7ICAgIC8qIG5vdCBj b21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBv YmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10 LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFk ZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBs aXN0IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBt YXkgbGFjayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJl bGF0aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJv bSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUg YWNjdXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkg Ki8KKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChsaXN0X2xlbmd0 aChub2RlLT5pbmhSZWxhdGlvbnMpID4gMCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiKCV7cGFyZW50czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJ CWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcG9iaiwgIigle3BhcmVudHM6LCB9 RCkiKTsKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle2luaGVyaXRzfXMiLCB0 bXBvYmopOworCX0KKworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYg KG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIl e3RhYmxlc3BhY2V9SSIsIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBl bmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNyZWF0ZVN0bXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcG9iaik7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJICBkZXBhcnNlX09u Q29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAq LworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVs cGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUKKwkJICogcGFyc2V0cmVl IGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uCisJCSAq IHdoaWNoIGhhdmVuJ3QgYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkgUmVsYXRp b25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBj bGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZIik7CisJaWYgKHJl bGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBwZ19nZXRfcGFy dGtleWRlZl9zaW1wbGUob2JqZWN0SWQpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9i aiwgInByZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0 bXQsICIle3BhcnRpdGlvbl9ieX1zIiwgdG1wb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLwor CXRtcG9iaiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2Qp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgbm9k ZS0+YWNjZXNzTWV0aG9kKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2Jq LCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInBy ZXNlbnQiLCBmYWxzZSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIl e2FjY2Vzc19tZXRob2R9cyIsIHRtcG9iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcG9i aiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMp CisJeworCQlPYmpUcmVlICAgICp0bXBvYmoyOworCQlEZWZFbGVtICpvcHQgPSAoRGVmRWxlbSAq KSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNl KTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqMikpOwor CX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIigle3dpdGg6 LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVz ZW50IiwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7d2l0 aF9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBh IERlZmluZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmop Cit7CisJRGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUJICAgKmRlZlN0bXQgPSBOVUxMOworCisJc3dpdGNoIChkZWZpbmUtPmtpbmQpCisJewor CQljYXNlIE9CSkVDVF9PUEVSQVRPUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRf T3BlcmF0b3Iob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9U WVBFOgorCQkJZGVmU3RtdCA9IGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElkLCBkZWZp bmUpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRl ZCBvYmplY3Qga2luZCIpOworCX0KKworCXJldHVybiBkZWZTdG10OworfQorCisvKgorICogRGVw YXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBPUEVSQVRPUikKKyAqCisgKiBHaXZlbiBhIHRyaWdn ZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5l U3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIG9wclR1cDsKKwlPYmpUcmVlCSAgICpzdG10 OworCU9ialRyZWUJICAgKnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdf b3BlcmF0b3Igb3ByRm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNU UlVDVChvcHJUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1Ig JXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCSAgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVS RSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIs IDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJ ICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJj b2RlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisKKwkvKiBMRUZUQVJHICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9Iiwg MSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2Jq LCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJs ZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFS Rz0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsKKwlp ZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyaWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcG9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9y bS0+b3BycmlnaHQsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAi cHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiQ09NTVVUQVRPUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29t bXV0YXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmNvbSkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0t Pm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQi LCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2Jq KSk7CisKKwkvKiBORUdBVE9SICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBvYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChP cGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUpKTsK KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyog UkVTVFJJQ1QgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFs aWQob3ByRm9ybS0+b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcnJlc3QpKTsKKwllbHNl CisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogSk9JTiAq LworCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3Byam9p bikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29i amVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogTUVSR0VTICovCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJtZXJnZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIEhBU0hFUyAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJIQVNIRVMiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiaGFzaGVzIik7CisJaWYgKCFvcHJGb3JtLT5vcHJjYW5oYXNoKQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3Qoc3RtdCwg Iigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKwor CXJldHVybiBzdG10OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVu dC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9i amVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHlwVHVwOworCU9i alRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJY2hh cgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUg dHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdl dERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKwor CS8qIFNob3J0Y3V0IHByb2Nlc3NpbmcgZm9yIHNoZWxsIHR5cGVzLiAqLworCWlmICghdHlwRm9y bS0+dHlwaXNkZWZpbmVkKQorCXsKKwkJc3RtdCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQ RSIsIDApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0eX1EIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIodHlwRm9ybS0+dHlwbmFtZSkpKTsKKwkJYXBwZW5kX2Jvb2xf b2JqZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXAp OworCQlyZXR1cm4gc3RtdDsKKwl9CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBU WVBFIiwgMCk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQlOYW1lU3RyKHR5cEZvcm0tPnR5cG5hbWUpKSk7CisJYXBwZW5kX2Jvb2xfb2Jq ZWN0KHN0bXQsICJwcmVzZW50IiwgdHJ1ZSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xh dXNlICovCisJbGlzdCA9IE5JTDsKKworCS8qIElOUFVUICovCisJdG1wID0gbmV3X29ianRyZWVf VkEoIihJTlBVVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQi KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgdHlwRm9ybS0+dHlwaW5wdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIE9VVFBVVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJPVVRQVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCSB0eXBGb3JtLT50eXBvdXRwdXQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIFJFQ0VJVkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2 ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3Jt LT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2Vu dCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFNFTkQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBl bmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9JTiAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInR5cG1vZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGlu KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX09VVCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0 eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kb3V0KSkKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg dHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAi cHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIEFOQUxZWkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFla RT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlm IChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBhbmFs eXplKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNl KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IElOVEVSTkFMTEVOR1RIICovCisJaWYgKHR5cEZvcm0tPnR5cGxlbiA9PSAtMSkKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIsIDApOworCX0KKwll bHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5URVJOQUxMRU5HVEg9JXt0eXBsZW59 biIsIDEsCisJCQkJCQkJICJ0eXBsZW4iLCBPYmpUeXBlSW50ZWdlciwgdHlwRm9ybS0+dHlwbGVu KTsKKwl9CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllW QUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXNzZWRieXZhbHVl Iik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJ R05NRU5UPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQi KTsKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVudCB3aXRoIHNjaGVtYS1x dWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+dHlwYWxpZ24pCisJewor CQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7CisJCQlicmVhazsKKwkJ Y2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJCWJyZWFrOworCQljYXNl ICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJlYWs7CisJCWNhc2UgJ2Mn OgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlwRm9ybS0+dHlwYWxpZ24p OworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FsaWdufXMiLCBzdHIpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlNUT1JBR0U9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInN0b3JhZ2UiKTsKKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cHN0b3JhZ2UpCisJeworCQljYXNl ICdwJzoKKwkJCXN0ciA9ICJwbGFpbiI7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCQlzdHIg PSAiZXh0ZXJuYWwiOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3RyID0gImV4dGVuZGVk IjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN0ciA9ICJtYWluIjsKKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMi LCB0eXBGb3JtLT50eXBzdG9yYWdlKTsKKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXtzdG9yYWdlfXMiLCBzdHIpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FU RUdPUlk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5Iik7 CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtjYXRlZ29yeX1zIiwKKwkJCQkJCSBwc3By aW50ZigiJWMiLCB0eXBGb3JtLT50eXBjYXRlZ29yeSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUFJFRkVSUkVEICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlBSRUZFUlJFRD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAicHJlZmVycmVkIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUZBVUxUICovCisJZGZsdCA9 IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBUdXAsCisJCQkJCQkgICBBbnVtX3BnX3R5cGVf dHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJE RUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZWZhdWx0Iik7 CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1z IiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZmx0KSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmpl Y3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCS8qIEVMRU1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiRUxFTUVOVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZWxlbWVu dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGVsZW0pKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICJlbGVtIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9y bS0+dHlwZWxlbSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVz ZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFTElNSVRF Uj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZGVsaW1pdGVyIik7CisJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwKKwkJCQkJCSBwc3ByaW50Zigi JWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJMRSAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj b2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJ CWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVj dChzdG10LCAiJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1 cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNF VC9SRVNFVCAoLi4uKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlv bnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlz dENlbGwgICAqY2VsbDsKKwlPYmpUcmVlCSAgICpyZWxzZXQ7CisJY2hhcgkgICAqZm10OworCWJv b2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKwor CS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgorCSAqIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwg fXMpCisJICovCisJaWYgKGlzX3Jlc2V0KQorCQlmbXQgPSAiUkVTRVQgIjsKKwllbHNlCisJCWZt dCA9ICJTRVQgIjsKKworCXJlbHNldCA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwlmb3JlYWNoKGNl bGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbQkgICAqZWxlbTsKKwkJT2Jq VHJlZQkgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCXNl dCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5kKHNl dHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwlhcHBl bmRfYXJyYXlfb2JqZWN0KHJlbHNldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsKKworCXJl dHVybiByZWxzZXQ7Cit9CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwor CisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChDUkVBVEUgVFJJR0dFUikKKyAqCisgKiBH aXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9IChDcmVhdGVUcmln U3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlIZWFwVHVwbGUJdHJp Z1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZQkgICAqdHJpZ2dlcjsK KwlPYmpUcmVlCSAgICp0bXBvYmo7CisJaW50CQkJdGduYXJnczsKKwlMaXN0CSAgICpsaXN0Owor CUxpc3QJICAgKmV2ZW50czsKKworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVj dF9ieV9vaWQocGdfdHJpZ2dlciwgQW51bV9wZ190cmlnZ2VyX29pZCwgb2JqZWN0SWQpOworCXRy aWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJLyoKKwkg KiBWZXJib3NlIHN5bnRheAorCSAqCisJICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIg JXtuYW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9SIH1zCisJICogT04gJXtyZWxhdGlvbn1EICV7 ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMKKwkgKiBGT1IgRUFDSCAle2Zvcl9l YWNofXMgJXt3aGVufXMgRVhFQ1VURSBQUk9DRURVUkUgJXtmdW5jdGlvbn1zCisJICovCisJdHJp Z2dlciA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRy aWdnZXIsICIle2NvbnN0cmFpbnR9cyIsCisJCQkJCQkgbm9kZS0+aXNjb25zdHJhaW50ID8gIkNP TlNUUkFJTlQiIDogIiIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QodHJpZ2dlciwgIlRSSUdH RVIgJXtuYW1lfUkiLCBub2RlLT50cmlnbmFtZSk7CisKKwlpZiAobm9kZS0+dGltaW5nID09IFRS SUdHRVJfVFlQRV9CRUZPUkUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3Rp bWV9cyIsICJCRUZPUkUiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBF X0FGVEVSKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmlnZ2VyLCAiJXt0aW1lfXMiLCAiQUZU RVIiKTsKKwllbHNlIGlmIChub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRyaWdnZXIsICIle3RpbWV9cyIsICJJTlNURUFEIE9GIik7 CisJZWxzZQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHRyaWdnZXIgdGltaW5nIHR5cGUg JWQiLCBub2RlLT50aW1pbmcpOworCisJLyoKKwkgKiBEZWNvZGUgdGhlIGV2ZW50cyB0aGF0IHRo ZSB0cmlnZ2VyIGZpcmVzIGZvci4gIFRoZSBvdXRwdXQgaXMgYSBsaXN0OworCSAqIGluIG1vc3Qg Y2FzZXMgaXQgd2lsbCBqdXN0IGJlIGEgc3RyaW5nIHdpdGggdGhlIGV2ZW50IG5hbWUsIGJ1dCB3 aGVuCisJICogdGhlcmUncyBhbiBVUERBVEUgd2l0aCBhIGxpc3Qgb2YgY29sdW1ucywgd2UgcmV0 dXJuIGEgSlNPTiBvYmplY3QuCisJICovCisJZXZlbnRzID0gTklMOworCWlmIChub2RlLT5ldmVu dHMgJiBUUklHR0VSX1RZUEVfSU5TRVJUKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3 X3N0cmluZ19vYmplY3QoIklOU0VSVCIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9U WVBFX0RFTEVURSkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0 KCJERUxFVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9UUlVOQ0FURSkK KwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJUUlVOQ0FURSIp KTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX1VQREFURSkKKwl7CisJCWlmIChu b2RlLT5jb2x1bW5zID09IE5JTCkKKwkJeworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5l d19zdHJpbmdfb2JqZWN0KCJVUERBVEUiKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlPYmpUcmVl CSAgICp1cGRhdGU7CisJCQlMaXN0Q2VsbCAgICpjZWxsOworCQkJTGlzdAkgICAqY29scyA9IE5J TDsKKworCQkJLyoKKwkJCSAqIEN1cnJlbnRseSBvbmx5IFVQREFURSBPRiBjYW4gYmUgb2JqZWN0 cyBpbiB0aGUgb3V0cHV0IEpTT04sIGJ1dAorCQkJICogd2UgYWRkIGEgImtpbmQiIGVsZW1lbnQg c28gdGhhdCB1c2VyIGNvZGUgY2FuIGRpc3Rpbmd1aXNoCisJCQkgKiBwb3NzaWJsZSBmdXR1cmUg bmV3IGV2ZW50IHR5cGVzLgorCQkJICovCisJCQl1cGRhdGUgPSBuZXdfb2JqdHJlZV9WQSgiVVBE QVRFIE9GIiwgMSwKKwkJCQkJCQkJCSJraW5kIiwgT2JqVHlwZVN0cmluZywgInVwZGF0ZV9vZiIp OworCisJCQlmb3JlYWNoKGNlbGwsIG5vZGUtPmNvbHVtbnMpCisJCQl7CisJCQkJY2hhciAgICpj b2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xz LCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9v YmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFw cGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVu ZF9hcnJheV9vYmplY3QodHJpZ2dlciwgIiV7ZXZlbnRzOiBPUiB9cyIsIGV2ZW50cyk7CisKKwl0 bXBvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJCQkJICB0cmlnRm9ybS0+dGdyZWxpZCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QodHJp Z2dlciwgIk9OICV7cmVsYXRpb259RCIsIHRtcG9iaik7CisKKwl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRlJPTSIsIDApOworCWlmICh0cmlnRm9ybS0+dGdjb25zdHJyZWxpZCkKKwl7CisJCU9i alRyZWUJICAgKnJlbDsKKworCQlyZWwgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVs YXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgdHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpOwor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3JlbGF0aW9ufUQiLCByZWwpOworCX0K KwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmosICJwcmVzZW50IiwgZmFsc2UpOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRyaWdnZXIsICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7 CisKKwlsaXN0ID0gTklMOworCWlmIChub2RlLT5kZWZlcnJhYmxlKQorCQlsaXN0ID0gbGFwcGVu ZChsaXN0LAorCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdCgiREVGRVJSQUJMRSIpKTsKKwlpZiAo bm9kZS0+aW5pdGRlZmVycmVkKQorCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkgICBuZXdf c3RyaW5nX29iamVjdCgiSU5JVElBTExZIERFRkVSUkVEIikpOworCWFwcGVuZF9hcnJheV9vYmpl Y3QodHJpZ2dlciwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRyaWdnZXIsICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLAorCQkJCQkJIG5v ZGUtPnJvdyA/ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIldIRU4iLCAwKTsKKwlpZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndo ZW5DbGF1c2U7CisJCURhdHVtCQl2YWx1ZTsKKwkJYm9vbAkJaXNudWxsOworCisJCXZhbHVlID0g ZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJCQkJCQlSZWxh dGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVs b2coRVJST1IsICJib2d1cyBOVUxMIHRncXVhbCIpOworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdU b05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIoJXtjbGF1c2V9cykiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dlcl93aGVuY2xh dXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJCQkJCQkJCQkJ ICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJl c2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiJXt3aGVufXMi LCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEs CisJCQkJCQkgImZ1bmNuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHJpZ0Zv cm0tPnRnZm9pZCkpOworCWxpc3QgPSBOSUw7CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdz OworCWlmICh0Z25hcmdzID4gMCkKKwl7CisJCWJ5dGVhICAqdGdhcmdzOworCQljaGFyICAgKmFy Z3N0cjsKKwkJYm9vbAlpc251bGw7CisJCWludAkJZmluZHg7CisJCWludAkJbGVudGdhcmdzOwor CQljaGFyICAgKnA7CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJp Z1R1cCwKKwkJCQkJCQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVs YXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAo aXNudWxsKQorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCB0Z2FyZ3MiKTsKKwkJYXJnc3Ry ID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3MpOworCQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9F WEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8 IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJCXNpemVfdAl0bGVuOworCisJCQkvKiBWZXJpZnkg dGhhdCB0aGUgYXJndW1lbnQgZW5jb2RpbmcgaXMgY29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxl bihwKTsKKwkJCWlmIChwICsgdGxlbiA+PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBhcmd1bWVudCBzdHJpbmcgKCVzKSBmb3IgdHJpZ2dl ciBcIiVzXCIiLAorCQkJCQkJCQlhcmdzdHIsIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpKSk7 CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHApKTsKKworCQkJ cCArPSB0bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9iaiwg IigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcG9iaiwgIiV7YXJnczosIH1MIiwgbGlzdCk7 CQkvKiBtaWdodCBiZSBOSUwgKi8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIpIik7 CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0cmlnZ2VyLCAiRVhFQ1VURSBQUk9DRURVUkUgJXtm dW5jdGlvbn1zIiwgdG1wb2JqKTsKKworCXRhYmxlX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gdHJpZ2dlcjsKK30KKworLyoKKyAqIERlcGFyc2UgRGVmRWxl bXMsIGFzIHVzZWQgZS5nLiBieSBBTFRFUiBDT0xVTU4gLi4uIFNFVCwgaW50byBhIGxpc3Qgb2Yg U0VUCisgKiAoLi4uKSAgb3IgUkVTRVQgKC4uLikgY29udGVudHMuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQorewor CU9ialRyZWUJICAgKnNldDsKKwlPYmpUcmVlCSAgICpvcHRuYW1lOworCisJc2V0ID0gbmV3X29i anRyZWUoIiIpOworCW9wdG5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVm bmFtZXNwYWNlICE9IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle3Nj aGVtYX1JLiIsIGVsZW0tPmRlZm5hbWVzcGFjZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChv cHRuYW1lLCAiJXtsYWJlbH1JIiwgZWxlbS0+ZGVmbmFtZSk7CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChzZXQsICIle2xhYmVsfXMiLCBvcHRuYW1lKTsKKworCWlmICghaXNfcmVzZXQpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHNldCwgIiA9ICV7dmFsdWV9TCIsCisJCQkJCQkJIGVsZW0tPmFy ZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAi VFJVRSIgOiAiRkFMU0UiKTsKKworCXJldHVybiBzZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVw YXJzaW5nIG9mIERST1AgY29tbWFuZHMuCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1h bmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJ CSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKwljaGFy CQkgICAqY29tbWFuZDsKKwljaGFyCQkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0 eTsKKwljaGFyCQkgICAqZm10OworCU9ialRyZWUJCSpzdG10LCAqc3RtdDI7CisJSnNvbmIJCSAg Kmpzb25iOworCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlmbXQgPSBwc3ByaW50ZigiRFJP UCAlcyBJRiBFWElTVFMgJSV7b2JqaWRlbnRpdHl9cyIsIG9iamVjdHR5cGUpOworCisJc3RtdCA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRl bnRpdHkpOworCXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJICAg InByZXNlbnQiLCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2Nhc2NhZGV9cyIsIHN0bXQyKTsKKworCWpzb25i ID0gb2JqdHJlZV90b19qc29uYihzdG10KTsKKwljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0 ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKKworCXJldHVybiBjb21tYW5k OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBzZXR0aW5nIG9mIEZ1bmN0aW9uCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtp bmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUJICAgKm9iajsKKworCWlm IChraW5kID09IFZBUl9SRVNFVF9BTEwpCisJeworCQlvYmogPSBuZXdfb2JqdHJlZSgiUkVTRVQg QUxMIik7CisJfQorCWVsc2UgaWYgKHZhbHVlICE9IE5VTEwpCisJeworCQlvYmogPSBuZXdfb2Jq dHJlZV9WQSgiU0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkgICAic2V0X25hbWUiLCBPYmpU eXBlU3RyaW5nLCBuYW1lKTsKKworCQkvKgorCQkgKiBTb21lIEdVQyB2YXJpYWJsZSBuYW1lcyBh cmUgJ0xJU1QnIHR5cGUgYW5kIGhlbmNlIG11c3Qgbm90IGJlCisJCSAqIHF1b3RlZC4KKwkJICov CisJCWlmIChHZXRDb25maWdPcHRpb25GbGFncyhuYW1lLCB0cnVlKSAmIEdVQ19MSVNUX1FVT1RF KQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9cyIsIHZhbHVl KTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qob2JqLCAiVE8gJXtzZXRfdmFsdWV9 TCIsIHZhbHVlKTsKKwl9CisJZWxzZQorCXsKKwkJb2JqID0gbmV3X29ianRyZWUoIlJFU0VUIik7 CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KG9iaiwgIiV7c2V0X25hbWV9SSIsIG5hbWUpOworCX0K KworCXJldHVybiBvYmo7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAqCisg KiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZXRyZWUgdGhhdCBjcmVhdGVkIGl0LCBy ZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgor ICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0cmFpbnQsIE5VTEwgaXMg cmV0dXJuZWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfSW5kZXhTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUluZGV4U3RtdCAgKm5vZGUgPSAoSW5kZXhT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICppbmRleFN0bXQ7CisJT2JqVHJlZQkgICAq dG1wb2JqOworCVJlbGF0aW9uCWlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAg KmluZGV4X2FtOworCWNoYXIJICAgKmRlZmluaXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsK KwljaGFyCSAgICp0YWJsZXNwYWNlOworCWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5v ZGUtPnByaW1hcnkgfHwgbm9kZS0+aXNjb25zdHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhl cyBmb3IgUFJJTUFSWSBLRVkgYW5kIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICog c2VwYXJhdGVseTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlpZHhyZWwgPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOwor CWhlYXByZWwgPSByZWxhdGlvbl9vcGVuKGlkeHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJ CQkJCSAmaW5kZXhfYW0sICZkZWZpbml0aW9uLCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxl c3BhY2UsICZ3aGVyZUNsYXVzZSk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkg KiBDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0 c31zICV7bmFtZX1JIE9OCisJICogJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAoJXtkZWZp bml0aW9ufXMpICV7d2l0aH1zICV7dGFibGVzcGFjZX1zCisJICogJXt3aGVyZV9jbGF1c2V9cwor CSAqLworCWluZGV4U3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUiKTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7dW5pcXVlfXMiLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ ICJVTklRVUUiIDogIiIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoaW5kZXhTdG10LCAiSU5E RVgiKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7Y29uY3VycmVudGx5 fXMiLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiKTsKKwor CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwKKwkJ CQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJYXBw ZW5kX3N0cmluZ19vYmplY3QoaW5kZXhTdG10LCAiJXtuYW1lfUkiLAorCQkJCQkJIFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKGlkeHJlbCkpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoaW5kZXhT dG10LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVh cHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUoaGVhcHJlbCkpKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4U3RtdCwgIlVTSU5H ICV7aW5kZXhfYW19cyIsIGluZGV4X2FtKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGluZGV4 U3RtdCwgIigle2RlZmluaXRpb259cykiLCBkZWZpbml0aW9uKTsKKworCS8qIHJlbG9wdGlvbnMg Ki8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIoJXtvcHRzfXMpIiwgcmVsb3B0aW9ucyk7CisJ ZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wb2JqLCAicHJlc2VudCIsIGZhbHNlKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICIle3dpdGh9cyIsIHRtcG9iaik7CisKKwkv KiB0YWJsZXNwYWNlICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlp ZiAodGFibGVzcGFjZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt0YWJsZXNw YWNlfXMiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXBvYmos ICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIiV7 dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKworCS8qIFdIRVJFIGNsYXVzZSAqLworCXRtcG9iaiA9 IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXt3aGVyZX1zIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBw ZW5kX2Jvb2xfb2JqZWN0KHRtcG9iaiwgInByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoaW5kZXhTdG10LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwl0YWJs ZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBpbmRleFN0bXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIHRoZSBJTkhFUklUUyByZWxhdGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJl dHVybiBhIHNjaGVtYSBxdWFsaWZpZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBw YXJlbnQgdGFibGVzLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhP aWQgb2JqZWN0SWQpCit7CisJTGlzdAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhS ZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1 cGxlOworCisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2lu aHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJl bCwgSW5oZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZr ZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0 KHNjYW4pKSkKKwl7CisJCU9ialRyZWUJKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3Jt SW5oID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0g bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJIGZvcm1JbmgtPmluaHBhcmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5l d19vYmplY3Rfb2JqZWN0KHBhcmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7 CisJdGFibGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJl bnRzOworfQorCisvKgorICogRGVwYXJzZSB0aGUgT04gQ09NTU1JVCAuLi4gY2xhdXNlIGZvciBD UkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9P bkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pCit7CisJT2JqVHJlZQkgICAqb25j b21taXQ7CisKKwlvbmNvbW1pdCA9IG5ld19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2gg KG9wdGlvbikKKwl7CisJCWNhc2UgT05DT01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsICJEUk9QIik7CisJCQlicmVhazsK KworCQljYXNlIE9OQ09NTUlUX0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo b25jb21taXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVh azsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNFUlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChvbmNvbW1pdCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLCAiUFJFU0VSVkUgUk9XUyIpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0 KG9uY29tbWl0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0 KG9uY29tbWl0LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBv bmNvbW1pdDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10LgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2Rl ICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3RtdCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNl dHJlZTsKKwlPYmpUcmVlCSAgICpyZW5hbWVTdG10OworCWNoYXIJICAgKmZtdHN0cjsKKwljb25z dCBjaGFyICpvYmp0eXBlOworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOwor CisJLyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0 aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBz aW5jZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQs IHRoZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQg ZnJvbQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hl bWEgbmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGlu IHRoZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFu eXdheS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVD VF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgor CisJCQkvKgorCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCSAqCisJCQkgKiBBTFRFUiAlcyAle2lm X2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKwkJCSAqLworCQkJ b2JqdHlwZSA9IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpOworCQkJZm10c3Ry ID0gcHNwcmludGYoIkFMVEVSICVzIiwgb2JqdHlwZSk7CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0g UmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24pOworCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0 cmVlX1ZBKGZtdHN0ciwgMCk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAi JXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIg OiAiIik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZW5hbWVTdG10LCAiJXtpZGVudGl0eX1E IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJ CQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAle25ld25hbWV9SSIsCisJCQkJCQkJCSBub2RlLT5u ZXduYW1lKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJeworCQkJCUhlYXBUdXBsZQlw b2xUdXA7CisJCQkJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19wb2xp Y3k7CisJCQkJU2NhbktleURhdGEJa2V5OworCQkJCVN5c1NjYW5EZXNjCXNjYW47CisKKwkJCQlw Z19wb2xpY3kgPSByZWxhdGlvbl9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJU2NhbktleUluaXQoJmtleSwgQW51bV9wZ19wb2xpY3lfb2lkLAorCQkJCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJCQlPYmplY3RJZEdldERhdHVtKGFk ZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3BvbGlj eSwgUG9saWN5T2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOwor CQkJCXBvbFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHBvbFR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwb2xpY3kgJXUiLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwb2xGb3JtID0gKEZvcm1fcGdf cG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgUE9MSUNZIiwgMCk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1l U3RtdCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYg RVhJU1RTIiA6ICIiKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtw b2xpY3luYW1lfUkiLCBub2RlLT5zdWJuYW1lKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZW5hbWVTdG10LCAiT04gJXtpZGVudGl0eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJl bGlkKSk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAl e25ld25hbWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJc3lzdGFibGVfZW5k c2NhbihzY2FuKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKKwkJY2Fz ZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2Jq ZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNw YWNlKHJlbGF0aW9uKTsKKworCQkJLyoKKwkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkgKgorCQkJ ICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRU UklCVVRFCisJCQkgKiAle2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworCQkJ ICoKKwkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lk ZW50aXR5fUQgUkVOQU1FCisJCQkgKiBDT0xVTU4gJXtjb2xuYW1lfUkgVE8gJXtuZXduYW1lfUkK KwkJCSAqLworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQor CQkJeworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgVFlQRSIpOworCQkJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCSAgbm9k ZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiUkVOQU1FIEFU VFJJQlVURSAlJXtjb2xuYW1lfUkiKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlvYmp0eXBl ID0gc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVsYXRpb25UeXBlKTsKKwkJCQlmbXRzdHIgPSBw c3ByaW50ZigiQUxURVIgJXMiLCBvYmp0eXBlKTsKKwkJCQlyZW5hbWVTdG10ID0gbmV3X29ianRy ZWUoZm10c3RyKTsKKworCQkJCS8qIENvbXBvc2l0ZSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBF WElTVFMgKi8KKwkJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJ CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVTdG10LCAiJXtpZl9leGlzdHN9cyIsCisJCQkJ CQkJCQkJbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5y ZWxhdGlvbi0+cmVsbmFtZSkpOworCQkJCWZtdHN0ciA9IHBzcHJpbnRmKCJSRU5BTUUgQ09MVU1O ICUle2NvbG5hbWV9SSIpOworCQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZW5hbWVT dG10LCBmbXRzdHIsIG5vZGUtPnN1Ym5hbWUpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVu YW1lU3RtdCwgIlRPICV7bmV3bmFtZX1JIiwgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2Rl LT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmVuYW1lU3RtdCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgi Q0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJ CQkJCQkJCQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKworCQkJcmVsYXRpb25f Y2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9GVU5DVElPTjoKKwkJCXsKKwkJCQljaGFyCSppZGVudDsKKwkJCQlIZWFwVHVwbGUgcHJv Y3R1cDsKKwkJCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7 CisKKwkJCQlBc3NlcnQoSXNBKG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlp ZGVudGl0eSA9ICgoT2JqZWN0V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKwor CQkJCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVj dElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChwcm9jdHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBy b2NlZHVyZSAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlz IHdvcmsgZm9yIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50 ZigiJXMlcyIsCisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNw YWNlX25hbWUocHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwo bGxhc3QoaWRlbnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVz cy5vYmplY3RJZCwgdHJ1ZSkpOworCisJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVSICVzICUl e2lkZW50aXR5fXMgUkVOQU1FIFRPICUle25ld25hbWV9SSIsCisJCQkJCQkJCSAgc3RyaW5naWZ5 X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSkpOworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJl ZV9WQShmbXRzdHIsIDIsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlk ZW50LAorCQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUp OworCisJCQkJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfT1BDTEFTUzoKKwkJCXsKKwkJCQlIZWFwVHVwbGUgICBvcGNUdXA7CisJCQkJ Rm9ybV9wZ19vcGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hh cgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCQkJCWNoYXIJICAgKmZt dDsKKworCQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5HICUl e2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkiLAorCQkJCQkJCSAgIHN0cmlu Z2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJCW9wY1R1cCA9IFNlYXJjaFN5 c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGNUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb3BjbGFzcyB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5v YmplY3RJZCk7CisKKwkJCQlvcGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9w Y1R1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxpc3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9i amVjdCwgMSk7CisKKwkJCQkvKiBkZWNvbnN0cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVj b25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5hbWVzLCAmc2NoZW1hbmFtZSwgJm9wY25hbWUpOwor CisJCQkJcmVuYW1lU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCQkJCQkJImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQkJIG9wY25hbWUpLAor CQkJCQkJCQkJCQkiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJZ2V0 X2FtX25hbWUob3BjRm9ybS0+b3BjbWV0aG9kKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGNUdXAp OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQl7CisJCQkJ SGVhcFR1cGxlICAgb3BmVHVwOworCQkJCUhlYXBUdXBsZSAgIGFtVHVwOworCQkJCUZvcm1fcGdf b3BmYW1pbHkgb3BmRm9ybTsKKwkJCQlGb3JtX3BnX2FtICBhbUZvcm07CisJCQkJTGlzdAkgICAq b2xkbmFtZXM7CisJCQkJY2hhcgkgICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1l OworCQkJCWNoYXIJICAgKmZtdDsKKworCQkJCWZtdCA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtp ZGVudGl0eX1EIFVTSU5HICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUki LAorCQkJCQkJCSAgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUpKTsKKworCQkJ CW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgYWRkcmVzcy5vYmplY3RJZCk7 CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCQkJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJ CQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkg R0VUU1RSVUNUKG9wZlR1cCk7CisKKwkJCQlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwg T2JqZWN0SWRHZXREYXR1bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwkJCQlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoYW1UdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgYWNjZXNzIG1ldGhvZCAldSIsCisJCQkJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKworCQkJ CWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJCQkJb2xkbmFtZXMg PSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogZGVj b25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShv bGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGZuYW1lKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdf b2JqdHJlZV9WQShmbXQsIDMsCisJCQkJCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJCQkJCSBvcGZuYW1lKSwKKwkJCQkJCQkJCQkJImluZGV4X21ldGhv ZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCU5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAor CQkJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJ CQkJUmVsZWFzZVN5c0NhY2hlKGFtVHVwKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsK KwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCXJlbmFtZVN0bXQg PQorCQkJCW5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBU TyAle25ld25hbWV9SSIsCisJCQkJCQkJICAgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCSAgICJuZXduYW1lIiwgT2JqVHlwZVN0 cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VS OgorCQkJeworCQkJCUhlYXBUdXBsZQl0cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmln Rm9ybTsKKwkJCQlSZWxhdGlvbglwZ190cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0 aW9uX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1 cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRu dW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3Jt ID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJCQkJcmVuYW1lU3Rt dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lk ZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJCQkJCQkJCQkJMywKKwkJCQkJCQkJ CQkJInRyaWdnZXJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJ CQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJCXRyaWdG b3JtLT50Z3JlbGlkKSwKKwkJCQkJCQkJCQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uZXduYW1lKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFjY2Vzc1NoYXJl TG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQljYXNlIE9C SkVDVF9DT05WRVJTSU9OOgorCQljYXNlIE9CSkVDVF9ET01BSU46CisJCQl7CisJCQkJSGVhcFR1 cGxlCW9ialR1cDsKKwkJCQlSZWxhdGlvbgljYXRhbG9nOworCQkJCURhdHVtCQlvYmpuc3A7CisJ CQkJYm9vbAkJaXNudWxsOworCQkJCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJCQkJTGlz dAkgICAqaWRlbnRpdHkgPSBjYXN0Tm9kZShMaXN0LCBub2RlLT5vYmplY3QpOworCQkJCWNoYXIJ ICAgKmZtdHN0cmluZzsKKworCQkJCS8qIG9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRh bG9nID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ CQkJb2JqVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0 X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkv KiBvYnRhaW4gbmFtZXNwYWNlICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0 dG51bV9uYW1lc3BhY2UoYWRkcmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0 dHIob2JqVHVwLCBBbnVtX25hbWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihj YXRhbG9nKSwgJmlzbnVsbCk7CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImlu dmFsaWQgTlVMTCBuYW1lc3BhY2UiKTsKKworCQkJCW9ianR5cGUgPSBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5yZW5hbWVUeXBlKTsKKwkJCQlmbXRzdHJpbmcgPSBwc3ByaW50ZigiQUxURVIgJXMi LCBvYmp0eXBlKTsKKworCQkJCXJlbmFtZVN0bXQgPSBuZXdfb2JqdHJlZV9WQShmbXRzdHJpbmcs CisJCQkJCQkJCQkJMCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmVuYW1lU3RtdCwgIiV7 aWRlbnRpdHl9RCIsCisJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRP YmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxhc3QoaWRlbnRpdHkp KSkpOworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgIlJFTkFNRSBUTyAl e25ld25hbWV9SSIsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xv c2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5y ZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBBbHRlck9iamVjdERlcGVuZHNTdG10IChBTFRFUiAuLi4gREVQRU5EUyBPTiAuLi4pLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpub2RlID0g KEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJCSAgICphbHRl ckRlcGVuZGVTdG10ID0gTlVMTDsKKworCisJaWYgKG5vZGUtPm9iamVjdFR5cGUgPT0gT0JKRUNU X0lOREVYKQorCXsKKwkJUmVsYXRpb24gICAgICAgIHJlbGF0aW9uID0gcmVsYXRpb25fb3Blbihv YmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJT2JqVHJlZSAqcXVhbGlmaWVkOworCisJCWFs dGVyRGVwZW5kZVN0bXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgSU5ERVgiKTsKKworCQlxdWFsaWZp ZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChhbHRlckRlcGVuZGVTdG10LCAiJXtpZGVudGl0eX1EIiwgcXVhbGlmaWVkKTsK KwkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoYWx0ZXJEZXBlbmRlU3RtdCwgIiV7Tk99cyIsCisJCQkJCQkgbm9kZS0+ cmVtb3ZlID8gIk5PIiA6ICIiKTsKKworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhhbHRlckRlcGVu ZGVTdG10LCAiREVQRU5EUyBPTiBFWFRFTlNJT04iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo YWx0ZXJEZXBlbmRlU3RtdCwgIiV7bmV3bmFtZX1JIiwgc3RyVmFsKG5vZGUtPmV4dG5hbWUpKTsK Kwl9CisJZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJz ZSBjb21tYW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKworCXJldHVy biBhbHRlckRlcGVuZGVTdG10OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FD SEUgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ2Fj aGUoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJf dGFibGUpCit7CisJT2JqVHJlZQkgICAqY2FjaGU7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJ ICAgKmZtdDsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vx Y2FjaGUpOworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIENBQ0hFICV7dmFsdWV9 cyI7CisJZWxzZQorCQlmbXQgPSAiQ0FDSEUgJXt2YWx1ZX1zIjsKKworCWNhY2hlID0gbmV3X29i anRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhY2hl IiwKKwkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBu ZXdfb2JqZWN0X29iamVjdChjYWNoZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5j ZSBDWUNMRSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1Nl cV9DeWNsZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICpjeWNsZTsKKwljaGFyCSAgICpmbXQ7CisKKwlp ZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtub31zIENZQ0xFIjsKKwllbHNlCisJCWZt dCA9ICIle25vfXMgQ1lDTEUiOworCisJY3ljbGUgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJ CQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJCQkJCSAgICJubyIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgICBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7 CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KGN5Y2xlKTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHNlcXVlbmNlIElOQ1JFTUVOVCBCWSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdf c2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICppbmNy ZW1lbnRhbGJ5OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0 ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisJZWxzZQor CQlmbXQgPSAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJ TlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7CisJaW5jcmVtZW50YWxieSA9IG5l d19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkJICAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBz dHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChpbmNyZW1lbnRhbGJ5KTsKK30KKworLyoK KyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAg Km1heHZhbHVlOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0 ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZt dCA9ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9S TUFULCBzZXFkYXRhLT5zZXFtYXgpOworCW1heHZhbHVlID0gbmV3X29ianRyZWVfVkEoZm10LCAy LAorCQkJCQkJCSAgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkJ ICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29i amVjdChtYXh2YWx1ZSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBNSU5WQUxV RSBvcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NaW52 YWx1ZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRl cl90YWJsZSkKK3sKKwlPYmpUcmVlCSAgICptaW52YWx1ZTsKKwljaGFyCSAgICp0bXBzdHI7CisJ Y2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3RhYmxlKQorCQlmbXQgPSAiU0VUIE1JTlZBTFVF ICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRt cHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwltaW52YWx1 ZSA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAibWludmFsdWUiLAorCQkJCQkJCSAgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3Ry KTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QobWludmFsdWUpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqLworc3RhdGljIE9iakVsZW0g KgorZGVwYXJzZV9TZXFfT3duZWRCeShPYmpUcmVlICpwYXJlbnQsIE9pZCBzZXF1ZW5jZUlkLCBi b29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKm93bmVkYnkgPSBOVUxMOworCVJlbGF0 aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107CisJ SGVhcFR1cGxlICAgdHVwbGU7CisKKwlkZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9u SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleXNbMF0sCisJCQkJQW51bV9w Z19kZXBlbmRfY2xhc3NpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvblJlbGF0aW9uSWQpKTsKKwlTY2FuS2V5SW5pdCgm a2V5c1sxXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lO dW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShzZXF1ZW5jZUlkKSk7CisJU2Nh bktleUluaXQoJmtleXNbMl0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2Jqc3ViaWQsCisJCQkJQlRF cXVhbFN0cmF0ZWd5TnVtYmVyLCBGX0lOVDRFUSwKKwkJCQlJbnQzMkdldERhdHVtKDApKTsKKwor CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oZGVwUmVsLCBEZXBlbmREZXBlbmRlckluZGV4SWQs IHRydWUsCisJCQkJCQkJICBOVUxMLCAzLCBrZXlzKTsKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxp ZCh0dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJT2lkCQkgb3duZXJJZDsK KwkJRm9ybV9wZ19kZXBlbmQgZGVwZm9ybTsKKwkJT2JqVHJlZQkqdG1wb2JqOworCQljaGFyCSAg ICpjb2xuYW1lOworCisJCWRlcGZvcm0gPSAoRm9ybV9wZ19kZXBlbmQpIEdFVFNUUlVDVCh0dXBs ZSk7CisKKwkJLyogT25seSBjb25zaWRlciBBVVRPIGRlcGVuZGVuY2llcyBvbiBwZ19jbGFzcyAq LworCQlpZiAoZGVwZm9ybS0+ZGVwdHlwZSAhPSBERVBFTkRFTkNZX0FVVE8pCisJCQljb250aW51 ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZmNsYXNzaWQgIT0gUmVsYXRpb25SZWxhdGlvbklkKQorCQkJ Y29udGludWU7CisJCWlmIChkZXBmb3JtLT5yZWZvYmpzdWJpZCA8PSAwKQorCQkJY29udGludWU7 CisKKwkJb3duZXJJZCA9IGRlcGZvcm0tPnJlZm9iamlkOworCQljb2xuYW1lID0gZ2V0X2F0dG5h bWUob3duZXJJZCwgZGVwZm9ybS0+cmVmb2Jqc3ViaWQsIGZhbHNlKTsKKwkJaWYgKGNvbG5hbWUg PT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRfc3RyaW5nX29i amVjdCh0bXBvYmosICJhdHRybmFtZSIsIGNvbG5hbWUpOworCQlvd25lZGJ5ID0gbmV3X29ianRy ZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAyLAorCQkJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlT2Jq ZWN0LCB0bXBvYmopOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJcmVsYXRpb25f Y2xvc2UoZGVwUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIG5v IG93bmVyIGNvbHVtbiwgZW1pdCBhbiBlbXB0eSBPV05FRCBCWSBlbGVtZW50LCBzZXQgdXAgc28K KwkgKiB0aGF0IGl0IHdvbid0IHByaW50IGFueXRoaW5nLgorCSAqLworCWlmICghb3duZWRieSkK KwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJb3duZWRieSA9IG5ld19v Ymp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLAorCQkJCQkJCQkgMywKKwkJCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCQkgIm93bmVyIiwgT2JqVHlw ZU51bGwsCisJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3Qob3duZWRieSk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBz ZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2Rl cGFyc2VfU2VxX1Jlc3RhcnQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlX2RhdGEg c2VxZGF0YSkKK3sKKwlPYmpUcmVlCSAgICpyZXN0YXJ0OworCWNoYXIJICAgKnRtcHN0cjsKKwor CXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFzdF92YWx1ZSk7CisJ cmVzdGFydCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkJICJ2YWx1ZSIsIE9i alR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJlc3RhcnQp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lUSCBvcHRpb24uCisg Ki8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJl ZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7 CisJT2JqVHJlZQkgICAqc3RhcnR3aXRoOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpm bXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgU1RBUlQgV0lUSCAle3ZhbHVl fXMiOworCWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9 IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXN0YXJ0d2l0aCA9 IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCQkgICAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInN0YXJ0IiwKKwkJCQkJCQkgICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChzdGFydHdpdGgpOworfQorCisvKgorICogRGVwYXJz ZSB0aGUgdHlwZSBTVE9SQUdFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoK K2RlcGFyc2VfVHlwZV9TdG9yYWdlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZv cm0pCit7CisJT2JqVHJlZQkgICAqc3RvcmFnZTsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkg ICAqZm10OworCWNoYXIJICAgKnN0cjsKKworCXN3aXRjaCAodHlwRm9ybS0+dHlwc3RvcmFnZSkK Kwl7CisJCWNhc2UgJ3AnOgorCQkJc3RyID0gInBsYWluIjsKKwkJCWJyZWFrOworCQljYXNlICdl JzoKKwkJCXN0ciA9ICJleHRlcm5hbCI7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlzdHIg PSAiZXh0ZW5kZWQiOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJc3RyID0gIm1haW4iOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNw ZWNpZmllciAlYyIsIHR5cEZvcm0tPnR5cHN0b3JhZ2UpOworCX0KKworCXRtcHN0ciA9IHBzcHJp bnRmKCIlcyIsIHN0cik7CisKKwlmbXQgPSAiU1RPUkFHRSA9ICV7dmFsdWV9cyI7CisKKwlzdG9y YWdlID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInN0b3JhZ2UiLAorCQkJCQkJICAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIp OworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHN0b3JhZ2UpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgdHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVt ICoKK2RlcGFyc2VfVHlwZV9SZWNlaXZlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5 cEZvcm0pCit7CisJT2JqVHJlZQkgICAqcmVjZWl2ZTsKKworCXJlY2VpdmUgPSBuZXdfb2JqdHJl ZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVj ZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZWNlaXZlLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg dHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHJlY2Vp dmUsICJwcmVzZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJlY2Vp dmUpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTRU5EIG9wdGlvbi4KKyAqLworc3Rh dGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqc2VuZDsKKworCXNlbmQgPSBu ZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHNlbmQpKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChzZW5kLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlw Rm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHNlbmQsICJwcmVz ZW50IiwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHNlbmQpOworfQorCisv KgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICovCitzdGF0aWMgaW5s aW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihPYmpUcmVlICpwYXJlbnQsIEZv cm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cG1vZGluOworCisJdHlwbW9k aW4gPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBt b2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cG1vZGluLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0eXBtb2RpbiwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QodHlwbW9kaW4pOworfQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5 cG1vZF9vdXQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9U eXBlX1R5cG1vZF9PdXQoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sK KwlPYmpUcmVlCSAgICp0eXBtb2RvdXQ7CisKKwl0eXBtb2RvdXQgPSBuZXdfb2JqdHJlZV9WQSgi VFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9k X291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHR5cG1vZG91dCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cG1v ZG91dCwgInByZXNlbnQiLCBmYWxzZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlw bW9kb3V0KTsKK30KKworCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBhbmFseXplIG9wdGlvbi4K KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKE9ialRy ZWUgKnBhcmVudCwgRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZQkgICAqdHlwYW5h bHl6ZTsKKworCXR5cGFuYWx5emUgPSBuZXdfb2JqdHJlZV9WQSgiQU5BTFlaRT0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiYW5hbHl6ZSIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cGFuYWx5emUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0eXBhbmFseXpl LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkp OworCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cGFuYWx5emUsICJwcmVzZW50IiwgZmFs c2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHR5cGFuYWx5emUpOworfQorCisvKgor ICogRGVwYXJzZSB0aGUgdHlwZSBzdWJzY3JpcHQgb3B0aW9uLgorICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N1YnNjcmlwdChPYmpUcmVlICpwYXJlbnQsIEZvcm1f cGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUJICAgKnR5cHN1YnNjcmlwdDsKKworCXR5cHN1 YnNjcmlwdCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0t PnR5cHN1YnNjcmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHR5cHN1YnNjcmlwdCwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOwor CWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHR5cHN1YnNjcmlwdCwgInByZXNlbnQiLCBmYWxz ZSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodHlwc3Vic2NyaXB0KTsKK30KKworLyoK KyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xv dy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0 ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVl OworCU9ialRyZWUJICAgKmNvbW1hbmQ7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9TaW1w bGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQu c2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9leHRlbnNpb24gJiYgKG5v ZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQpKQorCQlyZXR1cm4gTlVM TDsKKworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQ cm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQor CXsKKwkJY2FzZSBUX0NyZWF0ZVNjaGVtYVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVh dGVTY2hlbWFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU X0FsdGVyRG9tYWluU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChv YmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5 T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJY29tbWFuZCA9 IGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVRyaWdT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZVNl cVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCWNvbW1hbmQg PSBkZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgVF9EZWZpbmVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfRGVmaW5lU3RtdChv YmplY3RJZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9i amVjdCk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQlj b21tYW5kID0gZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOwor CQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9DcmVhdGVEb21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlj YXNlIFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZUV4 dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRf QWx0ZXJFeHRlbnNpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25T dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyRXh0 ZW5zaW9uQ29udGVudHNTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25D b250ZW50c1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5z aW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVPcEZh bWlseVN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVPcEZhbWlseShvYmplY3RJZCwg cGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJ Y29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9J bmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3Jl YXRlRnVuY3Rpb25TdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0 bXQ6CisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21tYW5kID0gZGVw YXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJY29tbWFuZCA9IGRl cGFyc2VfQWx0ZXJEZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0Fs dGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJCQkJ cGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJCWNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsK KwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRlck93bmVyU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX0FsdGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgVF9BbHRlck9wZXJhdG9yU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBh cnNlX0FsdGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisK KwkJY2FzZSBUX0FsdGVyUG9saWN5U3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyUG9s aWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9BbHRl clR5cGVTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9Db21wb3NpdGVUeXBlU3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0NyZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQ RSBBUyBFTlVNICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9DcmVhdGVSYW5nZVN0bXQ6CS8q IENSRUFURSBUWVBFIEFTIFJBTkdFICovCisJCQljb21tYW5kID0gZGVwYXJzZV9DcmVhdGVSYW5n ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQWx0ZXJF bnVtU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKwkJCWJy ZWFrOworCisJCWRlZmF1bHQ6CisJCQljb21tYW5kID0gTlVMTDsKKwkJCWVsb2coTE9HLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkgKGludCkg bm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAq IFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRo IGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4KKyAqCisg KiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJlOyB0aGV5 IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisgKi8KK3N0 YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlvbiwgTGlz dCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlwZWQsIGJv b2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RDZWxsICAg KmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAgKmVsdCA9 IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJCXsKKwkJ CWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOworCisJCQkJ CXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxhdGlvbiwg ZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJCWRlcGFy c2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJCSAgY29tcG9zaXRl LCAoQ29sdW1uRGVmICopIGVsdCwKKwkJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlm ICh0cmVlICE9IE5VTEwpCisJCQkJCXsKKwkJCQkJCU9iakVsZW0JKmNvbHVtbjsKKworCQkJCQkJ Y29sdW1uID0gbmV3X29iamVjdF9vYmplY3QodHJlZSk7CisJCQkJCQllbGVtZW50cyA9IGxhcHBl bmQoZWxlbWVudHMsIGNvbHVtbik7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNl IFRfQ29uc3RyYWludDoKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgbm9kZSB0eXBlICVkIiwgbm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVy biBlbGVtZW50czsKK30KKworLyoKKyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVk Q29tbWFuZC4KKyAqLworY2hhciAqCitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRD b21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAq b3ZlcnJpZGVQYXRoOworCU1lbW9yeUNvbnRleHQJb2xkY3h0OworCU1lbW9yeUNvbnRleHQJdG1w Y3h0OworCU9ialRyZWUJCSAgICp0cmVlOworCWNoYXIJCSAgICpjb21tYW5kOworCVN0cmluZ0lu Zm9EYXRhICBzdHI7CisKKwkvKgorCSAqIEFsbG9jYXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUg ZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1wIGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2 aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1vcnkgaGFuZGxpbmcgY29kZTsgYnV0IGFsbG9j YXRlCisJICogdGhlIG91dHB1dCBTdHJpbmdJbmZvIGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJ aW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1 cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkgICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkg ICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRf SU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGlu ZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGludm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFs aXR5CisJICogaW4gb3JkZXIgdG8gb2J0YWluIGRlcGFyc2VkIHZlcnNpb25zIG9mIGV4cHJlc3Np b25zLiAgSW4gc3VjaCByZXN1bHRzLAorCSAqIHdlIHdhbnQgYWxsIG9iamVjdCBuYW1lcyB0byBi ZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRhYmxlIgorCSAqIHRvIGVudmly b25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0aW5ncy4gIFJhdGhlciB0aGFu IGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBjYWxscyB0byBvdmVycmlkZSBz ZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2UgZG8gaXQgY2VudHJhbGx5IGhl cmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVTZWFyY2hQYXRoKEN1cnJlbnRN ZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMgPSBOSUw7CisJb3ZlcnJpZGVQ YXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRoLT5hZGRUZW1wID0gdHJ1ZTsK KwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7CisKKwl2ZXJib3NlID0gdmVy Ym9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJeworCQljYXNlIFNDVF9TaW1wbGU6 CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQpOworCQkJYnJlYWs7CisJCWNh c2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRhYmxlU3RtdChjbWQp OworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJz ZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFz czoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBl ICVkIiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlm ICh0cmVlKQorCXsKKwkJSnNvbmIgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90b19qc29u Yih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwg SlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCWVsc2UKKwkJY29tbWFuZCA9IE5VTEw7CisKKwkv KgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNlIHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0lu Zm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwgdGhlIG91dHB1dCBzdHJpbmcgaXMgbm90 IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlN ZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjc4 MmViMDVmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv 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 dHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGpzb24pOworCisJUEdfUkVUVVJOX1RFWFRfUChDU3Ry aW5nR2V0VGV4dERhdHVtKGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGpzb25fc3RyKSkpOwor fQorCisvKgorICogRXJyb3IgY29udGV4dCBjYWxsYmFjayBmb3IgSlNPTiBmb3JtYXQgc3RyaW5n IGV4cGFuc2lvbi4KKyAqCisgKiBYWFg6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhw YW5kaW5nLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9pZAorZm10c3RyX2Vycm9yX2Nh bGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGlsZSBleHBhbmRpbmcgZm9ybWF0 IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMK aW5kZXggOTljOWY5MWNiYS4uNDIwNWRkYTIyMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCkBA IC0xNzA4LDYgKzE3MDgsMzkgQEAgcHJvY2Vzc19vd25lZF9ieShSZWxhdGlvbiBzZXFyZWwsIExp c3QgKm93bmVkX2J5LCBib29sIGZvcl9pZGVudGl0eSkKIAkJcmVsYXRpb25fY2xvc2UodGFibGVy ZWwsIE5vTG9jayk7CiB9CiAKKy8qCisgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycywgZGV0 YWlsZWQKKyAqLworRm9ybV9wZ19zZXF1ZW5jZV9kYXRhCitnZXRfc2VxdWVuY2VfdmFsdWVzKE9p ZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAgICBlbG07CisJ UmVsYXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZURhdGEgc2VxdHVwbGU7CisJRm9ybV9wZ19z ZXF1ZW5jZV9kYXRhIHNlcTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgcmV0U2VxOworCisJLyog T3BlbiBhbmQgQWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1 ZW5jZUlkLCAmZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5j ZUlkLCBHZXRVc2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdF KSAhPSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlNVRkZJQ0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5p ZWQgZm9yIHNlcXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFy ZWwpKSkpOworCisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUp OworCXJldFNlcSA9IHBhbGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOwor CisJbWVtY3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkp OworCisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwg Tm9Mb2NrKTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2Ug cGFyYW1ldGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li5mNjRhNzIxM2I3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2lu Y2x1ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1z dGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9k LCBPaWQgdHlwbW9kb3V0KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZvcm1hdF90eXBl X3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5 cG1vZCBkZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIg KgorY2hhciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2Qs IE9pZCB0eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMK aW5kZXggNmQ0YzFjMjdhNS4uNmIyMzZlNWYxOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBA IC00NCw2ICs0NCw4IEBACiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBj aGFyICpzdHJpbmcsIGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQg Km5hcmdzLCBPaWQgKmFyZ3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9h cmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJ bmZvIGJ1ZiwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg KgkgVVNFUiBJL08gUk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzEsNiArMzMzLDI5IEBA IGZvcm1hdF9wcm9jZWR1cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogCXJldHVybiBm b3JtYXRfcHJvY2VkdXJlX2V4dGVuZGVkKHByb2NlZHVyZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNF X1FVQUxJRlkpOwogfQogCisvKgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0 cyBwcm9jIE9JRCB0byAiKGFyZ3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJn cyhPaWQgcHJvY2VkdXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9E YXRhIGJ1ZjsKKwlIZWFwVHVwbGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsK KworCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShw cm9jZWR1cmVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJl X29pZCk7CisJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisK Kwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwo cHJvY2Zvcm0sICZidWYsIGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0 dXApOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3Byb2NlZHVyZV9l eHRlbmRlZCAtIGNvbnZlcnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoK QEAgLTIwNjAsMyArMjA4NSwzMCBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpz dHJpbmcsIGJvb2wgYWxsb3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsK IH0KKworLyoKKyAqIEFwcGVuZCB0aGUgcGFyZW50aGlzZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZl biBwZ19wcm9jIHJvdyBpbnRvIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlci4gIGZvcmNlX3F1YWxpZnkg aW5kaWNhdGVzIHdoZXRoZXIgdG8gc2NoZW1hLXF1YWxpZnkgdHlwZSBuYW1lcworICogcmVnYXJk bGVzcyBvZiB2aXNpYmlsaXR5LgorICovCitzdGF0aWMgdm9pZAorZm9ybWF0X3Byb2NlZHVyZV9h cmdzX2ludGVybmFsKEZvcm1fcGdfcHJvYyBwcm9jZm9ybSwgU3RyaW5nSW5mbyBidWYsCisJCQkJ CQkJICAgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCWludAkJCWk7CisJaW50CQkJbmFyZ3MgPSBw cm9jZm9ybS0+cHJvbmFyZ3M7CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJ Zm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJeworCQlPaWQJCQl0aGlzYXJndHlwZSA9IHBy b2Nmb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV07CisKKwkJaWYgKGkgPiAwKQorCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnLCcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwK KwkJCQkJCQkgICBmb3JjZV9xdWFsaWZ5ID8KKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFs aWZpZWQodGhpc2FyZ3R5cGUpIDoKKwkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZSh0aGlzYXJndHlw ZSkpOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKaW5kZXggMmI3YjFiMGMwZi4uNTQwNGQ1N2ViYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYwpAQCAtMzU4LDcgKzM1OCw2IEBAIHN0YXRpYyBpbnQJcHJpbnRfZnVu Y3Rpb25fYXJndW1lbnRzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCwKIAkJCQkJ CQkJCSBib29sIHByaW50X3RhYmxlX2FyZ3MsIGJvb2wgcHJpbnRfZGVmYXVsdHMpOwogc3RhdGlj IHZvaWQgcHJpbnRfZnVuY3Rpb25fcmV0dHlwZShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHBy b2N0dXApOwogc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fdHJmdHlwZXMoU3RyaW5nSW5mbyBi dWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKLXN0YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3NxbGJv ZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0YXRpYyB2b2lkIHNldF9y dGFibGVfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3Bh Y2VzLAogCQkJCQkJCSBCaXRtYXBzZXQgKnJlbHNfdXNlZCk7CiBzdGF0aWMgdm9pZCBzZXRfZGVw YXJzZV9mb3JfcXVlcnkoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIFF1ZXJ5ICpxdWVyeSwKQEAg LTQ4MiwyMiArNDgxLDE1IEBAIHN0YXRpYyB2b2lkIGdldF9mcm9tX2NsYXVzZV9jb2xkZWZsaXN0 KFJhbmdlVGJsRnVuY3Rpb24gKnJ0ZnVuYywKIAkJCQkJCQkJCSAgIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xh dXNlICp0YWJsZXNhbXBsZSwKIAkJCQkJCQkJZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKLXN0 YXRpYyB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5 cGUsCi0JCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKIHN0YXRpYyBOb2RlICpwcm9jZXNzSW5kaXJl Y3Rpb24oTm9kZSAqbm9kZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lk IHByaW50U3Vic2NyaXB0cyhTdWJzY3JpcHRpbmdSZWYgKnNic3JlZiwgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0KTsKIHN0YXRpYyBjaGFyICpnZXRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpOwog c3RhdGljIGNoYXIgKmdlbmVyYXRlX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkLCBMaXN0ICpuYW1l c3BhY2VzKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShP aWQgcmVsaWQpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNp ZCwgaW50IG5hcmdzLAotCQkJCQkJCQkJTGlzdCAqYXJnbmFtZXMsIE9pZCAqYXJndHlwZXMsCi0J CQkJCQkJCQlib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCi0JCQkJCQkJ CQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRl X29wZXJhdG9yX25hbWUoT2lkIG9wZXJpZCwgT2lkIGFyZzEsIE9pZCBhcmcyKTsKIHN0YXRpYyB2 b2lkIGFkZF9jYXN0X3RvKFN0cmluZ0luZm8gYnVmLCBPaWQgdHlwaWQpOwogc3RhdGljIGNoYXIg KmdlbmVyYXRlX3F1YWxpZmllZF90eXBlX25hbWUoT2lkIHR5cGlkKTsKIHN0YXRpYyB0ZXh0ICpz dHJpbmdfdG9fdGV4dChjaGFyICpzdHIpOwotc3RhdGljIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9u cyhPaWQgcmVsaWQpOwogc3RhdGljIHZvaWQgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYs IERhdHVtIHJlbG9wdGlvbnMpOwogCiAjZGVmaW5lIG9ubHlfbWFya2VyKHJ0ZSkgICgocnRlKS0+ aW5oID8gIiIgOiAiT05MWSAiKQpAQCAtMTAxNSw2NSArMTAwNywxMiBAQCBwZ19nZXRfdHJpZ2dl cmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBwcmV0dHkpCiAJaWYgKCFpc251bGwpCiAJewog CQlOb2RlCSAgICpxdWFsOwotCQljaGFyCQlyZWxraW5kOwotCQlkZXBhcnNlX2NvbnRleHQgY29u dGV4dDsKLQkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQkJUmFuZ2VUYmxFbnRyeSAqb2xkcnRl OwotCQlSYW5nZVRibEVudHJ5ICpuZXdydGU7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygm YnVmLCAiV0hFTiAoIik7CisJCWNoYXIgICAgICAgKnF1YWxzdHI7CiAKIAkJcXVhbCA9IHN0cmlu Z1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKSk7CisJCXF1YWxzdHIgPSBwZ19nZXRf dHJpZ2dlcl93aGVuY2xhdXNlKHRyaWdyZWMsIHF1YWwsIHByZXR0eSk7CiAKLQkJcmVsa2luZCA9 IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKLQotCQkvKiBCdWlsZCBtaW5pbWFs IE9MRCBhbmQgTkVXIFJURXMgZm9yIHRoZSByZWwgKi8KLQkJb2xkcnRlID0gbWFrZU5vZGUoUmFu Z2VUYmxFbnRyeSk7Ci0JCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJb2xkcnRl LT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7 Ci0JCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW9sZHJ0ZS0+YWxp YXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7Ci0JCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxp YXM7Ci0JCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQlvbGRydGUtPmluaCA9IGZhbHNlOwot CQlvbGRydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQluZXdydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKLQkJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOwotCQluZXdydGUtPnJl bGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKLQkJ bmV3cnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJbmV3cnRlLT5hbGlhcyA9 IG1ha2VBbGlhcygibmV3IiwgTklMKTsKLQkJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsK LQkJbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW5ld3J0ZS0+aW5oID0gZmFsc2U7Ci0JCW5l d3J0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCS8qIEJ1aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAq LwotCQltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5zKSk7Ci0JCWRwbnMucnRhYmxlID0gbGlz dF9tYWtlMihvbGRydGUsIG5ld3J0ZSk7Ci0JCWRwbnMuc3VicGxhbnMgPSBOSUw7Ci0JCWRwbnMu Y3RlcyA9IE5JTDsKLQkJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKLQkJc2V0X3J0YWJsZV9uYW1l cygmZHBucywgTklMLCBOVUxMKTsKLQkJc2V0X3NpbXBsZV9jb2x1bW5fbmFtZXMoJmRwbnMpOwot Ci0JCS8qIFNldCB1cCBjb250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCi0J CWNvbnRleHQuYnVmID0gJmJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtlMSgm ZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250ZXh0LndpbmRvd1RM aXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7Ci0JCWNvbnRleHQucHJldHR5 RmxhZ3MgPSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSk7Ci0JCWNvbnRleHQud3JhcENvbHVtbiA9 IFdSQVBfQ09MVU1OX0RFRkFVTFQ7Ci0JCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQUkVUVFlJTkRF TlRfU1REOwotCQljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKLQkJ Y29udGV4dC5hcHBlbmRwYXJlbnRzID0gTlVMTDsKLQotCQlnZXRfcnVsZV9leHByKHF1YWwsICZj b250ZXh0LCBmYWxzZSk7Ci0KLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAiKSAiKTsK KwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiV0hFTiAoJXMpICIsIHF1YWxzdHIpOwogCX0KIAog CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIkVYRUNVVEUgRlVOQ1RJT04gJXMoIiwKQEAgLTExMTQs NiArMTA1Myw2NCBAQCBwZ19nZXRfdHJpZ2dlcmRlZl93b3JrZXIoT2lkIHRyaWdpZCwgYm9vbCBw cmV0dHkpCiAJcmV0dXJuIGJ1Zi5kYXRhOwogfQogCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3do ZW5jbGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wg cHJldHR5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyICAgICAgICByZWxraW5kOwor CWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFu Z2VUYmxFbnRyeSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworICAgaW5pdFN0 cmluZ0luZm8oJmJ1Zik7CisKKyAgIHJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+ dGdyZWxpZCk7CisKKyAgIC8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhl IHJlbCAqLworICAgb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisgICBvbGRydGUt PnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisgICBvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdy ZWxpZDsKKyAgIG9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisgICBvbGRydGUtPmFsaWFzID0g bWFrZUFsaWFzKCJvbGQiLCBOSUwpOworICAgb2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsK KyAgIG9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworICAgb2xkcnRlLT5pbmggPSBmYWxzZTsKKyAg IG9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisgICBuZXdydGUgPSBtYWtlTm9kZShSYW5nZVRi bEVudHJ5KTsKKyAgIG5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKKyAgIG5ld3J0ZS0+ cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworICAgbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsK KyAgIG5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7CisgICBuZXdydGUtPmVy ZWYgPSBuZXdydGUtPmFsaWFzOworICAgbmV3cnRlLT5sYXRlcmFsID0gZmFsc2U7CisgICBuZXdy dGUtPmluaCA9IGZhbHNlOworICAgbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKyAgIC8qIEJ1 aWxkIHR3by1lbGVtZW50IHJ0YWJsZSAqLworICAgbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBu cykpOworICAgZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKyAgIGRw bnMuY3RlcyA9IE5JTDsKKyAgIHNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Cisg ICBzZXRfc2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKyAgIC8qIFNldCB1cCBjb250ZXh0 IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisgICBjb250ZXh0LmJ1ZiA9ICZidWY7 CisgICBjb250ZXh0Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKyAgIGNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworICAgY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKyAgIGNv bnRleHQudmFycHJlZml4ID0gdHJ1ZTsKKyAgIGNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHkg PyBQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgOiBQUkVUVFlGTEFHX0lOREVO VDsKKyAgIGNvbnRleHQud3JhcENvbHVtbiA9IFdSQVBfQ09MVU1OX0RFRkFVTFQ7CisgICBjb250 ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKyAgIGNvbnRleHQuc3BlY2lhbF9l eHBya2luZCA9IEVYUFJfS0lORF9OT05FOworCisgICBnZXRfcnVsZV9leHByKHdoZW5DbGF1c2Us ICZjb250ZXh0LCBmYWxzZSk7CisKKyAgIHJldHVybiBidWYuZGF0YTsKK30KKwogLyogLS0tLS0t LS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBHZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5k ZXgKICAqCkBAIC0xODgwLDYgKzE4NzcsMTMgQEAgcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhP aWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIo cmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxzZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNp b24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRpdGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hh ciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lkIHJlbGlkKQoreworCXJldHVybiBwZ19n ZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAsIGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAg KiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0 aW9uLgogICovCkBAIC0yMTMxLDYgKzIxMzUsMTUgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0 KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMp KTsKIH0KIAorLyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmluaXRpb24g b2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29u c3RyYWludGRlZl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCiAv KgogICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KQEAgLTM1MDEsNyArMzUxNCw3IEBAIHBnX2dl dF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhU X1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCit2b2lkCiBwcmludF9m dW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlp bnQJCQludW1hcmdzOwpAQCAtMTEzODAsNyArMTEzOTMsNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVm KFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0 KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3Is IGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3Rh dGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxf ZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTE3NzQsNyArMTE3ODcsNyBA QCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhl IHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhp bmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShP aWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJ CQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBh cnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTYwLDcgKzEyMTczLDcgQEAgZ2V0 X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2Vu ZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9y IE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9w dGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wcm9jLmRhdAppbmRleCBhMDdlNzM3YTMzLi4wYmZhZWI5NjVkIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKQEAgLTExODIwLDQgKzExODIwLDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVh JywgcHJvYXJndHlwZXMgPT4gJ3BnX2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9z cmMgPT4gJ2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2 NDInLCBkZXNjciA9PiAnZGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBqc29uIGZvcm1hdCBz dHJpbmcnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9 PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAn ZGRsX2RlcGFyc2VfdG9fanNvbicgfSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFu ZCBqc29uIGZvcm1hdCBEREwgdG8gYSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4g J2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHBy b2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFu ZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9z cmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IGIzYjA0Y2NmYTkuLmMyYjFjYTMy ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIHN0 cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChPaWQgcmVsaWQs IGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwoUEdfRlVOQ1RJ T05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVsaWQpOworZXh0 ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9pZCBzZXF1ZW5j ZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzZXEpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJT ZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2VxU3RtdCAqc3RtdCk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2Rk bF9kZXBhcnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYmRmZGY0 N2UyZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaApA QCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5o CisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IERETF9ERVBBUlNFX0gKKyNkZWZpbmUgRERMX0RFUEFSU0VfSAorCisjaW5jbHVkZSAidGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCIKKworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIg KmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFyICpk ZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAq b2JqZWN0dHlwZSwKKwkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisKKyNlbmRp ZgkJLyogRERMX0RFUEFSU0VfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXgg OTRkZTEzZDk5MC4uYjUzMjk0YmY1NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBh cnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBA IC02Miw2ICs2Miw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJ T2lkCQkJb2JqZWN0SWQ7CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJ CUxpc3QJICAgKnN1YmNtZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApp bmRleCA4MTYzMWYxNjQ1Li43MTUwZmFiZDI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGls cy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTExNCwx MCArMTE0LDEyIEBAIGV4dGVybiBEYXR1bSBudW1lcmljX2Zsb2F0OF9ub19vdmVyZmxvdyhQR19G VU5DVElPTl9BUkdTKTsKICNkZWZpbmUgRk9STUFUX1RZUEVfRk9SQ0VfUVVBTElGWQkweDA0CS8q IGZvcmNlIHF1YWxpZmljYXRpb24gb2YgdHlwZSAqLwogI2RlZmluZSBGT1JNQVRfVFlQRV9JTlZB TElEX0FTX05VTEwJMHgwOAkvKiBOVUxMIGlmIHVuZGVmaW5lZCAqLwogZXh0ZXJuIGNoYXIgKmZv cm1hdF90eXBlX2V4dGVuZGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwgYml0czE2IGZs YWdzKTsKK2V4dGVybiBjaGFyICpmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9v aWQsIGJvb2wgZm9yY2VfcXVhbGlmeSk7CiAKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9iZShP aWQgdHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlX3F1YWxpZmllZChPaWQg dHlwZV9vaWQpOwogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QpOworZXh0ZXJuIGNoYXIgKnByaW50VHlwbW9kKGNvbnN0IGNo YXIgKnR5cG5hbWUsIGludDMyIHR5cG1vZCwgT2lkIHR5cG1vZG91dCk7CiAKIGV4dGVybiBpbnQz MiB0eXBlX21heGltdW1fc2l6ZShPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpOwogCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L3J1bGV1dGlscy5oCmluZGV4IDdkNDg5NzE4YTMuLjNkNjlhNjBjYzIgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1 dGlscy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJV TEVVVElMU19ICiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJu b2Rlcy9ub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJu b2Rlcy9wZ19saXN0LmgiCkBAIC0yMywxMiArMjQsMTYgQEAgc3RydWN0IFBsYW5uZWRTdG10Owog CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBl eHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wg cHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdf dHJpZ2dlciB0cmlncmVjLAorCQkJCQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0 dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJl dHR5KTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlk LCBib29sIHByZXR0eSk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfc2ltcGxlKE9p ZCByZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRjb25zdHJkZWZfc3RyaW5nKE9pZCBw YXJ0aXRpb25JZCwgY2hhciAqYWxpYXNuYW1lKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25z dHJhaW50ZGVmX2NvbW1hbmQoT2lkIGNvbnN0cmFpbnRJZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4g Y2hhciAqZGVwYXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJ CQkJCQkJYm9vbCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3Qg KmRlcGFyc2VfY29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpA QCAtNDAsOCArNDUsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4 cGxhaW4oTGlzdCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwog ZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJu IGNoYXIgKmdlbmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAq Z2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25h bWVzLAorCQkJCQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJ CQlib29sICp1c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9l eHBya2luZCk7CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAq Ym91bmRfZGF0dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3Ms IE9pZCBhY3R1YWxfZGF0YXR5cGUsCisJCQkJCQkJICBTdHJpbmdJbmZvIGJ1Zik7CitleHRlcm4g Y2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiAKIGV4dGVybiBjaGFyICpwZ19n ZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0YXRleHRpZCk7CitleHRlcm4gdm9pZCBw cmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7 CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCA1YjNiMzA1OTYzLi40MzE2NjNjN2VmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dApAQCAtMTYwOSw2ICsxNjA5LDkgQEAgT1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBP VkVSTEFQUEVECitPYmpFbGVtCitPYmpUcmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBP YmplY3RBY2Nlc3NOYW1lc3BhY2VTZWFyY2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE3 NSw2ICszMTc4LDcgQEAgY29sb3JtYXByYW5nZQogY29tcGFyZV9jb250ZXh0CiBjb25maWdfdmFy X3ZhbHVlCiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxfY29udGV4dAorY29udlNwZWNpZmllcgogY29u dmVydF90ZXN0ZXhwcl9jb250ZXh0CiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUK LS0gCjIuMzcuMQoK --0000000000000016cf05e932d1b9 Content-Type: application/octet-stream; name="v23-0006-Add-DDL-deparser-support-for-TEXT-SEARCH-commands-wh.patch" Content-Disposition: attachment; filename="v23-0006-Add-DDL-deparser-support-for-TEXT-SEARCH-commands-wh.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l8bv87v05 RnJvbSBiYWFhNzVhMjk4MWQ2MjNhYjM2ZGI1ZTA5OWI5NTBjNjZkNjZiYjFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFdlZCwgNyBTZXAgMjAyMiAyMDoxOToxNyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggNi82 XSBBZGQgRERMIGRlcGFyc2VyIHN1cHBvcnQgZm9yIFRFWFQgU0VBUkNIIGNvbW1hbmRzLCB3aGlj aAogaW5jbHVkZXM6IC1DUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTi9QQVJTRVIvRElD VElPTkFSWS9URU1QTEFURSAtRFJPUAogVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTi9QQVJTRVIv RElDVElPTkFSWS9URU1QTEFURSAtQUxURVIgVEVYVCBTRUFSQ0gKIENPTkZJR1VSQVRJT04gYW5k IEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkKCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2RlcGFyc2UuYyAgICAgfCA0NTYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgIDEwICsKIDMgZmlsZXMgY2hhbmdlZCwgNDcxIGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpp bmRleCAyNzI3ZGVjYmNiLi43ZjVjMWIwZGQ0IDEwMDc1NQotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKQEAgLTUzLDYgKzUzLDEwIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2Uu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfdHNfZGljdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ190c190ZW1wbGF0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVl bmNlLmgiCkBAIC0xNTUsNiArMTU5LDEwIEBAIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVt bklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90CiBzdGF0 aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNt ZCk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiAKIHN0 YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNl dCk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQg a2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOwpAQCAtNTE2NSw2ICs1MTczLDIyIEBAIGRl cGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRk cmVzcyBzZWNvbmRhcnlPYmopCiAJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUo b2JqZWN0SWQsIGRlZmluZSk7CiAJCQlicmVhazsKIAorCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VS QVRJT046CisJCQlkZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKG9iamVjdElk LCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU1BB UlNFUjoKKwkJCWRlZlN0bXQgPSBkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIob2JqZWN0SWQs IGRlZmluZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlk ZWZTdG10ID0gZGVwYXJzZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShvYmplY3RJZCwgZGVmaW5l KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlkZWZTdG10ID0g ZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisJCQlicmVh azsKKwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5k Iik7CiAJfQpAQCAtNTUyNSw2ICs1NTQ5LDQyNyBAQCBkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShP aWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKIAlyZXR1cm4gc3RtdDsKIH0KIAorc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwg RGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJlc3MgY29waWVkKQoreworCUhl YXBUdXBsZSAgIHRzY1R1cDsKKwlIZWFwVHVwbGUgICB0c3BUdXA7CisJT2JqVHJlZQkgICAqc3Rt dDsKKwlPYmpUcmVlCSAgICp0bXA7CisJRm9ybV9wZ190c19jb25maWcgdHNjRm9ybTsKKwlGb3Jt X3BnX3RzX3BhcnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxpc3Q7CisKKwl0c2NUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoVFNDT05GSUdPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gJXUiLAorCQkJIG9iamVjdElk KTsKKwl0c2NGb3JtID0gKEZvcm1fcGdfdHNfY29uZmlnKSBHRVRTVFJVQ1QodHNjVHVwKTsKKwor CXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bSh0 c2NGb3JtLT5jZmdwYXJzZXIpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBhcnNlciAl dSIsCisJCQkgdHNjRm9ybS0+Y2ZncGFyc2VyKTsKKwl0c3BGb3JtID0gKEZvcm1fcGdfdHNfcGFy c2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKgor CSAqIENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCAoJXtlbGVt czosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5 fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2NGb3JtLT5jZmduYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNjRm9ybS0+Y2ZnbmFtZSkpKTsKKworCS8qCisJ ICogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09QWSdlZCBhbiBleGlz dGluZyBjb25maWcsIGFkZAorCSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lzZSBhZGQgYSBQQVJT RVIgY2xhdXNlLgorCSAqLworCWxpc3QgPSBOSUw7CisJLyogQ09QWSAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj b3B5Iik7CisJaWYgKGNvcGllZC5vYmplY3RJZCAhPSBJbnZhbGlkT2lkKQorCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXAsICIle3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVFNDb25maWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9i amVjdElkKSk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZh bHNlKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQQVJTRVI9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBhcnNlciIpOworCWlmIChjb3BpZWQub2JqZWN0 SWQgPT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwYXJzZXJ9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSk7CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3Qoc3RtdCwgIigle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNw VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKworCXJldHVybiBzdG10OworfQorCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElk LCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlICAgdHNwVHVwOworCU9ialRyZWUJ ICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJRm9ybV9wZ190 c19wYXJzZXIgdHNwRm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9J RCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 c3BUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFy Y2ggcGFyc2VyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9IChGb3Jt X3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKgorCSAqIFZlcmJvc2Ugc3lu dGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtl bGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlhcHBl bmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCisJLyogQWRkIHRo ZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBTVEFSVCAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJTVEFSVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAic3RhcnQiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkdFVFRPS0VOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJnZXR0b2tlbiIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJv Y2VkdXJlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkVORD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAiZW5kIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiTEVYVFlQRVM9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImxleHR5cGVzIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hlYWRs aW5lKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7 ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCisJcmV0 dXJuIHN0bXQ7Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0Rp Y3Rpb25hcnkoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxl ICAgdHNkVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCUxpc3QJ ICAgKmxpc3Q7CisJRGF0dW0JCW9wdGlvbnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNf ZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGlj dGlvbmFyeSAiCisJCQkgIndpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9y bV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50 YXgKKwkgKgorCSAqIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAo JXtlbGVtczosIH1zKQorCSAqLworCXN0bXQgPSBuZXdfb2JqdHJlZSgiQ1JFQVRFIik7CisKKwlh cHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50 aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSkpOworCisJ LyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBOSUw7CisKKwkvKiBURU1Q TEFURSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJURU1QTEFURT0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidGVtcGxhdGUiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXAsICIle3RlbXBsYXRlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChUU1RlbXBsYXRlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNkRm9ybS0+ZGljdHRlbXBs YXRlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKgorCSAqIG9wdGlvbnMuICBYWFggdGhpcyBpcyBhIHByZXR0eSB1c2VsZXNzIHJlcHJlc2Vu dGF0aW9uLCBidXQgd2UgY2FuJ3QgZG8KKwkgKiBiZXR0ZXIgd2l0aG91dCBtb3JlIHRzX2NhY2hl LmMgY29vcGVyYXRpb24gLi4uCisJICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJ Q1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwK KwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAo IWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0 RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0 bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9 cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCisJcmV0dXJuIHN0bXQ7 Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIHRzdFR1cDsK KwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0Owor CUZvcm1fcGdfdHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hl MShUU1RFTVBMQVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFw VHVwbGVJc1ZhbGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciB0ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOwor CXRzdEZvcm0gPSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkv KgorCSAqIFZlcmJvc2Ugc3ludGF4CisJICoKKwkgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExB VEUgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisJICovCisJc3RtdCA9IG5ld19vYmp0cmVl KCJDUkVBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICJURVhUIFNFQVJDSCBU RU1QTEFURSAle2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0 c3RGb3JtLT50bXBsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0tPnRt cGxuYW1lKSkpOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCWxpc3QgPSBO SUw7CisKKwkvKiBJTklUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 c3RGb3JtLT50bXBsaW5pdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlh cHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIExFWElaRSAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJMRVhJWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgImxleGl6ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJl fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBsbGV4aXplKSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1 cCk7CisKKwlyZXR1cm4gc3RtdDsKK30KKworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl clRTQ29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCUFsdGVyVFND b25maWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKikgY21k LT5wYXJzZXRyZWU7CisJT2JqVHJlZSAqY29uZmlnOworCU9ialRyZWUgKnRtcDsKKwlMaXN0CSAg ICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qCisJICogVmVyYm9z ZSBzeW50YXgKKwkgKiBjYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCSAqIEFMVEVS IFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIEZPUiAl e3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAorCSAqCisJICogY2FzZSBB TFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklH VVJBVElPTiAle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5HICV7aWZfZXhpc3RzfXMgRk9SICV7dG9r ZW50eXBlfUkKKwkgKgorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1Jf VE9LRU46CisJICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQg QUxURVIgTUFQUElORyBGT1IgJXt0b2tlbnR5cGU6LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwg fUQKKwkgKgorCSAqIGNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCSAqIEFMVEVS IFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcgUkVQ TEFDRSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKwkgKgorCSAq IGNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkgKiBBTFRFUiBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIEZPUiAl e3Rva2VudHlwZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGlj dGlvbmFyeX1ECisJICovCisKKwljb25maWcgPSBuZXdfb2JqdHJlZSgiQUxURVIgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTiIpOworCisJLyogZGV0ZXJtaW5lIHRoZSBmb3JtYXQgc3RyaW5nIGFw cHJvcHJpYXRlIHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3aXRjaCAobm9kZS0+a2luZCkKKwl7 CisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6CisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjb25maWcsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkciLAorCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJ CQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKwor CQljYXNlIEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJ CQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0g bmV3X29ianRyZWVfVkEoIklGIEVYSVNUUyIsIDApOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRt cCwgInByZXNlbnQiLCBub2RlLT5taXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGNvbmZpZywgIiV7aWZfZXhpc3RzfXMiLCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRF Ul9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KGNvbmZpZywgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJ CQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFr OworCisJCWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQkJYXBwZW5kX29iamVj dF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAorCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lk LAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgor CQkJYXBwZW5kX29iamVjdF9vYmplY3QoY29uZmlnLCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJ TkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcu YWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5v YmplY3RJZCkpOworCQkJYnJlYWs7CisJfQorCisJLyogQWRkIHRoZSBhZmZlY3RlZCB0b2tlbiBs aXN0LCBmb3Igc3ViY29tbWFuZHMgdGhhdCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5raW5kID09 IEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFND T05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9U U0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJf VFNDT05GSUdfRFJPUF9NQVBQSU5HKQorCXsKKwkJbGlzdCA9IE5JTDsKKwkJZm9yZWFjaChjZWxs LCBub2RlLT50b2tlbnR5cGUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29i amVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbmZp ZywgIkZPUiAle3Rva2VudHlwZTosIH1JIiwgbGlzdCk7CisJfQorCisJLyogYWRkIGZ1cnRoZXIg c3ViY29tbWFuZC1zcGVjaWZpYyBlbGVtZW50cyAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdf QUxURVJfTUFQUElOR19GT1JfVE9LRU4pCisJeworCQkvKiBBREQgTUFQUElORyBhbmQgQUxURVIg TUFQUElORyBGT1IgbmVlZCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzICovCisJCWxpc3QgPSBOSUw7 CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmQuYXRzY2ZnLm5kaWN0czsgaSsrKQorCQl7CisJCQlP YmpUcmVlCSpkaWN0b2JqOworCisJCQlkaWN0b2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkgIGNtZC0+ZC5hdHNjZmcu ZGljdElkc1tpXSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVj dF9vYmplY3QoZGljdG9iaikpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QoY29uZmlnLCAi V0lUSCAle2RpY3Rpb25hcmllczosIH1EIiwgbGlzdCk7CisJfQorCWVsc2UgaWYgKG5vZGUtPmtp bmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUIHx8CisJCQkgbm9kZS0+a2luZCA9PSBB TFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOKQorCXsKKwkJLyogdGhlIFJFUExB Q0UgZm9ybXMgd2FudCBvbGQgYW5kIG5ldyBkaWN0aW9uYXJpZXMgKi8KKwkJQXNzZXJ0KGNtZC0+ ZC5hdHNjZmcubmRpY3RzID09IDIpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb25maWcsICJS RVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0 c2NmZy5kaWN0SWRzWzBdKSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbmZpZywgIldJVEgg JXtuZXdfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRp Y3RJZHNbMV0pKTsKKwl9CisKKwlyZXR1cm4gY29uZmlnOworfQorCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlPYmpUcmVlICphbHRlclRTRDsKKwlPYmpUcmVlICp0bXA7CisJRGF0dW0JCW9w dGlvbnM7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9IE5JTDsKKwlib29sCQlpc251bGw7CisJSGVh cFR1cGxlICAgdHNkVHVwOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSAiCisJCQkgIndpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNk VHVwKTsKKworCS8qCisJICogVmVyYm9zZSBzeW50YXgKKwkgKiBBTFRFUiBURVhUIFNFQVJDSCBE SUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwgfXMpCisJICovCisKKwlhbHRl clRTRCA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIik7CisKKwlh cHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRTRCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRp b24gbGlzdCBhY2NvcmRpbmcgdG8gdGhlIHBnX3RzX2RpY3QgZGljdGluaXRvcHRpb24gY29sdW1u ICovCisJb3B0aW9ucyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJ CQkgIEFudW1fcGdfdHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAwKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wLCAiJXtvcHRpb25zfXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlv bnMpKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJYXBwZW5kX2FycmF5X29iamVjdChhbHRlclRTRCwgIigle2RlZmluaXRpb246LCB9 cykiLCBkZWZpbml0aW9uKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKworCXJldHVybiBh bHRlclRTRDsKK30KKwogLyoKICAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4u KQogICovCkBAIC02MzU1LDYgKzY4MDAsMTAgQEAgZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFk ZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQogCQljYXNlIE9CSkVDVF9UWVBFOgogCQlj YXNlIE9CSkVDVF9DT05WRVJTSU9OOgogCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2UgT0JK RUNUX1RTRElDVElPTkFSWToKKwkJY2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCWNhc2UgT0JKRUNU X1RTVEVNUExBVEU6CisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKIAkJCXsKIAkJCQlI ZWFwVHVwbGUJb2JqVHVwOwogCQkJCVJlbGF0aW9uCWNhdGFsb2c7CkBAIC02OTg1LDYgKzc0MzQs MTAgQEAgZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCiAJCQlj b21tYW5kID0gZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKIAkJ CWJyZWFrOwogCisJCWNhc2UgVF9BbHRlclRTRGljdGlvbmFyeVN0bXQ6CisJCQljb21tYW5kID0g ZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQli cmVhazsKKwogCQlkZWZhdWx0OgogCQkJY29tbWFuZCA9IE5VTEw7CiAJCQllbG9nKExPRywgInVu cmVjb2duaXplZCBub2RlIHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCkBAIC03MTA2LDYg Kzc1NTksOSBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQs IGJvb2wgdmVyYm9zZV9tb2RlKQogCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJdHJlZSA9 IGRlcGFyc2VfQ3JlYXRlT3BDbGFzc1N0bXQoY21kKTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9B bHRlclRTQ29uZmlnOgorCQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10 KGNtZCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVk IGRlcGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMKaW5kZXggZTQ3NTE0Nzc4YS4uOWEwM2VhMTg4NiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMjU1Myw3ICsyNTUzLDExIEBAIHB1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJ0cmlnZ2VyIikgPT0gMCB8fAogCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAiY29udmVyc2lvbiIpID09IDAgfHwKIAkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlw ZSwgInBvbGljeSIpID09IDAJfHwKLQkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImV4dGVu c2lvbiIpID09IDApCisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJleHRlbnNpb24iKSA9 PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBjb25maWd1 cmF0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFy Y2ggZGljdGlvbmFyeSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInRl eHQgc2VhcmNoIHBhcnNlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg InRleHQgc2VhcmNoIHRlbXBsYXRlIikgPT0gMCkKIAkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJv cDsKIAkJZWxzZQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCmluZGV4IDljNzk0OTY2OTYuLjA2NDA1ZTc5ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1 YmxpY2F0aW9uY21kcy5jCkBAIC05NTUsNiArOTU1LDE2IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQkJQ01EVEFH X0NSRUFURV9FWFRFTlNJT04sCiAJCQlDTURUQUdfQUxURVJfRVhURU5TSU9OLAogCQkJQ01EVEFH X0RST1BfRVhURU5TSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFU SU9OLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURU QUdfRFJPUF9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhU X1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJT05B UlksCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0NS RUFURV9URVhUX1NFQVJDSF9QQVJTRVIsCisJCQlDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJT RVIsCisJCQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFHX0RS T1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUsCiAJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKIAkJCUNN RFRBR19BTFRFUl9QT0xJQ1ksCiAJCQlDTURUQUdfRFJPUF9QT0xJQ1ksCi0tIAoyLjM3LjEKCg== --0000000000000016cf05e932d1b9--