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 1pEUnl-0003Zi-DR for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Jan 2023 12:29:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pEUml-0002Ao-AU for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Jan 2023 12:28:23 +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 1pEUmk-00029h-RF for pgsql-hackers@lists.postgresql.org; Sun, 08 Jan 2023 12:28:23 +0000 Received: from mail-qk1-x730.google.com ([2607:f8b0:4864:20::730]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pEUmd-0004nZ-M2 for pgsql-hackers@lists.postgresql.org; Sun, 08 Jan 2023 12:28:22 +0000 Received: by mail-qk1-x730.google.com with SMTP id e6so2876149qkl.4 for ; Sun, 08 Jan 2023 04:28:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=JxCKXFolsuLdgvyxq7wBbeLkDmElWXIObCYZZgU2n04=; b=koQz5PcrWoiDnmuXOm/CCp/dG9YUNr2rmsLrHemrq+0iD1U2d6GMc3jfqnnLJY4MNu DS2AMz1E0IFzB2LT2QulqPHM4leRuC3AzF/nuT7Bvy7ol+bfN08yA5+wmYA7RM0AIcjc VQZgFUoRwOWtvc9qUoUVnZ4VNWuwZXcRJfTYvn138WzvMhunBAV5lbq2WC3vuDxO5KrL vhjroBNVJs8l0E9vz2aMMzxLbkyYSJ3QkbO1vJS51WREZiNVEcYWMA7drgLbRmg48moZ Y9rAgsP+BKS5oi/sDYY25jtHXeXeKNk47p21pSlStbpwvLbynFxeXyZl4s8nMG2VDhU2 PvIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JxCKXFolsuLdgvyxq7wBbeLkDmElWXIObCYZZgU2n04=; b=J9nPA3spbyeHeZTu+ARtrK6lfUCYHGuOMEIWEtZME3OVNFqJcvcp85cYfOfSEgHfmv rCvD0RP9zIUQ9ZCuDNhILC/invUquAa7rVo/Dhx0Q5LWiFVxuDGWqbKXJJtoOneNuI6Q ZFMxDUM8qx+mUIb4sYHldtYusMyE0Cj6w10pRSvGZaLZbWByxwJA8Bj4VgqczDWAEzVe 4OgDX963IK5AvTPSRxdJK33CcixfRgRyJ7ELoH4yOKeBDf5RimX1AeYbVyaITIvtRokT HQkki32jONSDlLfF54LOut/jQ9w/ZzYXYxyn99FA0RM1S3eX84tlnc2r8wK6JR8FKSKK YD1w== X-Gm-Message-State: AFqh2krzX1zy++sIPJcq1m8gFgEHWLpAUPzUTVQ/F7VxCVCNLKXKQ/ns wkoaJ3UohOr4ptzZ/MFZSyQSntsZEusFu6B9J2XLlBwHQHc= X-Google-Smtp-Source: AMrXdXvbQOUYju8USSfeWA5FzcDMo43UchSQURABZ18WWMLAsI4Dgr5WGGQIdLTERCP+q2J99VVigf24eQ+CgxSq0fU= X-Received: by 2002:a05:620a:e16:b0:6ff:91ac:8a5b with SMTP id y22-20020a05620a0e1600b006ff91ac8a5bmr3324014qkm.577.1673180893487; Sun, 08 Jan 2023 04:28:13 -0800 (PST) MIME-Version: 1.0 From: Dean Rasheed Date: Sun, 8 Jan 2023 12:28:02 +0000 Message-ID: Subject: MERGE ... RETURNING To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cd619405f1bfc813" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cd619405f1bfc813 Content-Type: text/plain; charset="UTF-8" I've been thinking about adding RETURNING support to MERGE in order to let the user see what changed. I considered allowing a separate RETURNING list at the end of each action, but rapidly dismissed that idea. Firstly, it introduces shift/reduce conflicts to the grammar. These can be resolved by making the "AS" before column aliases non-optional, but that's pretty ugly, and there may be a better way. More serious drawbacks are that this syntax is much more cumbersome for the end user, having to repeat the RETURNING clause several times, and the implementation is likely to be pretty complex, so I didn't pursue it. A much simpler approach is to just have a single RETURNING list at the end of the command. That's much easier to implement, and easier for the end user. The main drawback is that it's impossible for the user to work out from the values returned which action was actually taken, and I think that's a pretty essential piece of information (at least it seems pretty limiting to me, not being able to work that out). So playing around with it (and inspired by the WITH ORDINALITY syntax for SRFs), I had the idea of allowing "WITH WHEN CLAUSE" at the end of the returning list, which adds an integer column to the list, whose value is set to the index of the when clause executed, as in the attached very rough patch. So, quoting an example from the tests, this allows things like: WITH t AS ( MERGE INTO sq_target t USING v ON tid = sid WHEN MATCHED AND tid > 2 THEN UPDATE SET balance = t.balance + delta WHEN NOT MATCHED THEN INSERT (balance, tid) VALUES (balance + delta, sid) WHEN MATCHED AND tid < 2 THEN DELETE RETURNING t.* WITH WHEN CLAUSE ) SELECT CASE when_clause WHEN 1 THEN 'UPDATE' WHEN 2 THEN 'INSERT' WHEN 3 THEN 'DELETE' END, * FROM t; case | tid | balance | when_clause --------+-----+---------+------------- INSERT | -1 | -11 | 2 DELETE | 1 | 100 | 3 (2 rows) 1 row is returned for each merge action executed (other than DO NOTHING actions), and as usual, the values represent old target values for DELETE actions, and new target values for INSERT/UPDATE actions. It's also possible to return the source values, and a bare "*" in the returning list expands to all the source columns, followed by all the target columns. The name of the added column, if included, can be changed by specifying "WITH WHEN CLAUSE [AS] col_alias". I chose the syntax "WHEN CLAUSE" and "when_clause" as the default column name because those match the existing terminology used in the docs. Anyway, this feels like a good point to stop playing around and get feedback on whether this seems useful, or if anyone has other ideas. Regards, Dean --000000000000cd619405f1bfc813 Content-Type: text/x-patch; charset="US-ASCII"; name="POC-support-MERGE-RETURNING.patch" Content-Disposition: attachment; filename="POC-support-MERGE-RETURNING.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lcnbx4ej0 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvbWVyZ2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvbWVyZ2Uuc2dtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTk1ZmUwLi40ZmMwYTY1 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvbWVyZ2Uuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVm L21lcmdlLnNnbWwKQEAgLTI1LDYgKzI1LDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiBN RVJHRSBJTlRPIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YXJnZXRf dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgWyBBUyBdIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj50YXJnZXRfYWxpYXM8L3JlcGxhY2VhYmxlPiBdCiBVU0lORyA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZGF0YV9zb3VyY2U8L3JlcGxhY2VhYmxlPiBPTiA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+am9pbl9jb25kaXRpb248L3JlcGxhY2VhYmxlPgog PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndoZW5fY2xhdXNlPC9yZXBsYWNlYWJsZT4g Wy4uLl0KK1sgUkVUVVJOSU5HICogfCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3V0 cHV0X2V4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBbIFsgQVMgXSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+b3V0cHV0X25hbWU8L3JlcGxhY2VhYmxlPiBdIFssIC4uLl0KKyAgWyBXSVRI IFdIRU4gQ0xBVVNFIFsgWyBBUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2xf YWxpYXM8L3JlcGxhY2VhYmxlPiBdIF0gXQogCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5kYXRhX3NvdXJjZTwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9jb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM0ZjU4My4uYWEzY2Nh MAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jCkBAIC0yNzQsMTIgKzI3NCw2IEBAIERvQ29weShQYXJzZVN0YXRlICpwc3Rh dGUsIGNvbnN0IENvcHlTdG0KIAl7CiAJCUFzc2VydChzdG10LT5xdWVyeSk7CiAKLQkJLyogTUVS R0UgaXMgYWxsb3dlZCBieSBwYXJzZXIsIGJ1dCB1bmltcGxlbWVudGVkLiBSZWplY3QgZm9yIG5v dyAqLwotCQlpZiAoSXNBKHN0bXQtPnF1ZXJ5LCBNZXJnZVN0bXQpKQotCQkJZXJlcG9ydChFUlJP UiwKLQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJCWVy cm1zZygiTUVSR0Ugbm90IHN1cHBvcnRlZCBpbiBDT1BZIikpOwotCiAJCXF1ZXJ5ID0gbWFrZU5v ZGUoUmF3U3RtdCk7CiAJCXF1ZXJ5LT5zdG10ID0gc3RtdC0+cXVlcnk7CiAJCXF1ZXJ5LT5zdG10 X2xvY2F0aW9uID0gc3RtdF9sb2NhdGlvbjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NvcHl0by5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggODA0M2I0ZS4uZTAyZDdkMAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5dG8uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwpAQCAtNTEwLDcg KzUxMCw4IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJewogCQkJQXNzZXJ0 KHF1ZXJ5LT5jb21tYW5kVHlwZSA9PSBDTURfSU5TRVJUIHx8CiAJCQkJICAgcXVlcnktPmNvbW1h bmRUeXBlID09IENNRF9VUERBVEUgfHwKLQkJCQkgICBxdWVyeS0+Y29tbWFuZFR5cGUgPT0gQ01E X0RFTEVURSk7CisJCQkJICAgcXVlcnktPmNvbW1hbmRUeXBlID09IENNRF9ERUxFVEUgfHwKKwkJ CQkgICBxdWVyeS0+Y29tbWFuZFR5cGUgPT0gQ01EX01FUkdFKTsKIAogCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MWFk MjQuLjMzOTEyNjkKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYwpAQCAtNjEyLDYgKzYxMiw5 IEBAIEV4ZWNJbml0UGFydGl0aW9uSW5mbyhNb2RpZnlUYWJsZVN0YXRlICoKIAkgKiBjYXNlIG9y IGluIHRoZSBjYXNlIG9mIFVQREFURSB0dXBsZSByb3V0aW5nIHdoZXJlIHdlIGRpZG4ndCBmaW5k IGEKIAkgKiByZXN1bHQgcmVsIHRvIHJldXNlLgogCSAqLworCisJLyogWFhYOiBXaGF0IGFib3V0 IHRoZSBNRVJHRSBjYXNlID8/PyAqLworCiAJaWYgKG5vZGUgJiYgbm9kZS0+cmV0dXJuaW5nTGlz dHMgIT0gTklMKQogCXsKIAkJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CkBAIC04NzcsNiArODgwLDcg QEAgRXhlY0luaXRQYXJ0aXRpb25JbmZvKE1vZGlmeVRhYmxlU3RhdGUgKgogCQlMaXN0CSAgICpm aXJzdE1lcmdlQWN0aW9uTGlzdCA9IGxpbml0aWFsKG5vZGUtPm1lcmdlQWN0aW9uTGlzdHMpOwog CQlMaXN0Q2VsbCAgICpsYzsKIAkJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gbXRzdGF0ZS0+cHMu cHNfRXhwckNvbnRleHQ7CisJCWludAkJCWFjdGlvbl9pZHggPSAxOwogCiAJCWlmIChwYXJ0X2F0 dG1hcCA9PSBOVUxMKQogCQkJcGFydF9hdHRtYXAgPQpAQCAtODk3LDYgKzkwMSw3IEBAIEV4ZWNJ bml0UGFydGl0aW9uSW5mbyhNb2RpZnlUYWJsZVN0YXRlICoKIAkJCS8qIEdlbmVyYXRlIHRoZSBh Y3Rpb24ncyBzdGF0ZSBmb3IgdGhpcyByZWxhdGlvbiAqLwogCQkJYWN0aW9uX3N0YXRlID0gbWFr ZU5vZGUoTWVyZ2VBY3Rpb25TdGF0ZSk7CiAJCQlhY3Rpb25fc3RhdGUtPm1hc19hY3Rpb24gPSBh Y3Rpb247CisJCQlhY3Rpb25fc3RhdGUtPm1hc19hY3Rpb25faWR4ID0gYWN0aW9uX2lkeCsrOwog CiAJCQkvKiBBbmQgcHV0IHRoZSBhY3Rpb24gaW4gdGhlIGFwcHJvcHJpYXRlIGxpc3QgKi8KIAkJ CWlmIChhY3Rpb24tPm1hdGNoZWQpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9m dW5jdGlvbnMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2Z1bmN0aW9ucy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDUwZTA2ZWMuLjdlNDcxN2EKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZnVuY3Rpb25zLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZnVuY3Rpb25zLmMKQEAg LTE2NjUsOCArMTY2NSw4IEBAIGNoZWNrX3NxbF9mbl9yZXR2YWwoTGlzdCAqcXVlcnlUcmVlTGlz dHMKIAogCS8qCiAJICogSWYgaXQncyBhIHBsYWluIFNFTEVDVCwgaXQgcmV0dXJucyB3aGF0ZXZl ciB0aGUgdGFyZ2V0bGlzdCBzYXlzLgotCSAqIE90aGVyd2lzZSwgaWYgaXQncyBJTlNFUlQvVVBE QVRFL0RFTEVURSB3aXRoIFJFVFVSTklORywgaXQgcmV0dXJucwotCSAqIHRoYXQuIE90aGVyd2lz ZSwgdGhlIGZ1bmN0aW9uIHJldHVybiB0eXBlIG11c3QgYmUgVk9JRC4KKwkgKiBPdGhlcndpc2Us IGlmIGl0J3MgSU5TRVJUL1VQREFURS9ERUxFVEUvTUVSR0Ugd2l0aCBSRVRVUk5JTkcsIGl0CisJ ICogcmV0dXJucyB0aGF0LiBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXR1cm4gdHlwZSBtdXN0 IGJlIFZPSUQuCiAJICoKIAkgKiBOb3RlOiBldmVudHVhbGx5IHJlcGxhY2UgdGhpcyB0ZXN0IHdp dGggUXVlcnlSZXR1cm5zVHVwbGVzPwlXZSdkIG5lZWQKIAkgKiBhIG1vcmUgZ2VuZXJhbCBtZXRo b2Qgb2YgZGV0ZXJtaW5pbmcgdGhlIG91dHB1dCB0eXBlLCB0aG91Z2guICBBbHNvLCBpdApAQCAt MTY4NCw3ICsxNjg0LDggQEAgY2hlY2tfc3FsX2ZuX3JldHZhbChMaXN0ICpxdWVyeVRyZWVMaXN0 cwogCWVsc2UgaWYgKHBhcnNlICYmCiAJCQkgKHBhcnNlLT5jb21tYW5kVHlwZSA9PSBDTURfSU5T RVJUIHx8CiAJCQkgIHBhcnNlLT5jb21tYW5kVHlwZSA9PSBDTURfVVBEQVRFIHx8Ci0JCQkgIHBh cnNlLT5jb21tYW5kVHlwZSA9PSBDTURfREVMRVRFKSAmJgorCQkJICBwYXJzZS0+Y29tbWFuZFR5 cGUgPT0gQ01EX0RFTEVURSB8fAorCQkJICBwYXJzZS0+Y29tbWFuZFR5cGUgPT0gQ01EX01FUkdF KSAmJgogCQkJIHBhcnNlLT5yZXR1cm5pbmdMaXN0KQogCXsKIAkJdGxpc3QgPSBwYXJzZS0+cmV0 dXJuaW5nTGlzdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggNjg3YTU0Mi4uNjRmNjUzMQotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9k aWZ5VGFibGUuYwpAQCAtMzYsOCArMzYsNyBAQAogICoJCVJFVFVSTklORyB0dXBsZSBhZnRlciBj b21wbGV0aW5nIGVhY2ggcm93IGluc2VydCwgdXBkYXRlLCBvciBkZWxldGUuCiAgKgkJSXQgbXVz dCBiZSBjYWxsZWQgYWdhaW4gdG8gY29udGludWUgdGhlIG9wZXJhdGlvbi4gIFdpdGhvdXQgUkVU VVJOSU5HLAogICoJCXdlIGp1c3QgbG9vcCB3aXRoaW4gdGhlIG5vZGUgdW50aWwgYWxsIHRoZSB3 b3JrIGlzIGRvbmUsIHRoZW4KLSAqCQlyZXR1cm4gTlVMTC4gIFRoaXMgYXZvaWRzIHVzZWxlc3Mg Y2FsbC9yZXR1cm4gb3ZlcmhlYWQuICAoTUVSR0UgZG9lcwotICoJCW5vdCBzdXBwb3J0IFJFVFVS TklORy4pCisgKgkJcmV0dXJuIE5VTEwuICBUaGlzIGF2b2lkcyB1c2VsZXNzIGNhbGwvcmV0dXJu IG92ZXJoZWFkLgogICovCiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgpAQCAtMTcyLDEzICsxNzEs MTQgQEAgc3RhdGljIFR1cGxlVGFibGVTbG90ICpFeGVjTWVyZ2UoTW9kaWZ5VAogCQkJCQkJCQkg SXRlbVBvaW50ZXIgdHVwbGVpZCwKIAkJCQkJCQkJIGJvb2wgY2FuU2V0VGFnKTsKIHN0YXRpYyB2 b2lkIEV4ZWNJbml0TWVyZ2UoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwgRVN0YXRlICplc3Rh dGUpOwotc3RhdGljIGJvb2wgRXhlY01lcmdlTWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNv bnRleHQsCi0JCQkJCQkJIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCi0JCQkJCQkJIEl0 ZW1Qb2ludGVyIHR1cGxlaWQsCi0JCQkJCQkJIGJvb2wgY2FuU2V0VGFnKTsKLXN0YXRpYyB2b2lk IEV4ZWNNZXJnZU5vdE1hdGNoZWQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAotCQkJCQkJ CQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQlib29sIGNhblNldFRhZyk7 CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkV4ZWNNZXJnZU1hdGNoZWQoTW9kaWZ5VGFibGVDb250 ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCisJ CQkJCQkJCQkJSXRlbVBvaW50ZXIgdHVwbGVpZCwKKwkJCQkJCQkJCQlib29sIGNhblNldFRhZywK KwkJCQkJCQkJCQlib29sICptYXRjaGVkKTsKK3N0YXRpYyBUdXBsZVRhYmxlU2xvdCAqRXhlY01l cmdlTm90TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJICAg UmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkgICBib29sIGNhblNldFRh Zyk7CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKm1lcmdlR2V0VXBkYXRlTmV3VHVwbGUoUmVzdWx0 UmVsSW5mbyAqcmVsaW5mbywKIAkJCQkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqcGxhblNsb3Qs CiAJCQkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKm9sZFNsb3QsCkBAIC0yNjkyLDYgKzI2OTIs NyBAQCBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgogRXhlY01lcmdlKE1vZGlmeVRhYmxlQ29udGV4 dCAqY29udGV4dCwgUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJICBJdGVtUG9pbnRl ciB0dXBsZWlkLCBib29sIGNhblNldFRhZykKIHsKKwlUdXBsZVRhYmxlU2xvdCAqcnNsb3QgPSBO VUxMOwogCWJvb2wJCW1hdGNoZWQ7CiAKIAkvKi0tLS0tCkBAIC0yNzM5LDcgKzI3NDAsOCBAQCBF eGVjTWVyZ2UoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LCBSCiAJICovCiAJbWF0Y2hlZCA9 IHR1cGxlaWQgIT0gTlVMTDsKIAlpZiAobWF0Y2hlZCkKLQkJbWF0Y2hlZCA9IEV4ZWNNZXJnZU1h dGNoZWQoY29udGV4dCwgcmVzdWx0UmVsSW5mbywgdHVwbGVpZCwgY2FuU2V0VGFnKTsKKwkJcnNs b3QgPSBFeGVjTWVyZ2VNYXRjaGVkKGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIHR1cGxlaWQsIGNh blNldFRhZywKKwkJCQkJCQkJICZtYXRjaGVkKTsKIAogCS8qCiAJICogRWl0aGVyIHdlIHdlcmUg ZGVhbGluZyB3aXRoIGEgTk9UIE1BVENIRUQgdHVwbGUgb3IgRXhlY01lcmdlTWF0Y2hlZCgpCkBA IC0yNzQ3LDEwICsyNzQ5LDkgQEAgRXhlY01lcmdlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4 dCwgUgogCSAqIG1hdGNoZXMuCiAJICovCiAJaWYgKCFtYXRjaGVkKQotCQlFeGVjTWVyZ2VOb3RN YXRjaGVkKGNvbnRleHQsIHJlc3VsdFJlbEluZm8sIGNhblNldFRhZyk7CisJCXJzbG90ID0gRXhl Y01lcmdlTm90TWF0Y2hlZChjb250ZXh0LCByZXN1bHRSZWxJbmZvLCBjYW5TZXRUYWcpOwogCi0J LyogTm8gUkVUVVJOSU5HIHN1cHBvcnQgeWV0ICovCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJz bG90OwogfQogCiAvKgpAQCAtMjc2MCw4ICsyNzYxLDggQEAgRXhlY01lcmdlKE1vZGlmeVRhYmxl Q29udGV4dCAqY29udGV4dCwgUgogICogV2Ugc3RhcnQgZnJvbSB0aGUgZmlyc3QgV0hFTiBNQVRD SEVEIGFjdGlvbiBhbmQgY2hlY2sgaWYgdGhlIFdIRU4gcXVhbHMKICAqIHBhc3MsIGlmIGFueS4g SWYgdGhlIFdIRU4gcXVhbHMgZm9yIHRoZSBmaXJzdCBhY3Rpb24gZG8gbm90IHBhc3MsIHdlCiAg KiBjaGVjayB0aGUgc2Vjb25kLCB0aGVuIHRoZSB0aGlyZCBhbmQgc28gb24uIElmIHdlIHJlYWNo IHRvIHRoZSBlbmQsIG5vCi0gKiBhY3Rpb24gaXMgdGFrZW4gYW5kIHdlIHJldHVybiB0cnVlLCBp bmRpY2F0aW5nIHRoYXQgbm8gZnVydGhlciBhY3Rpb24gaXMKLSAqIHJlcXVpcmVkIGZvciB0aGlz IHR1cGxlLgorICogYWN0aW9uIGlzIHRha2VuIGFuZCAibWF0Y2hlZCIgaXMgc2V0IHRvIHRydWUs IGluZGljYXRpbmcgdGhhdCBubyBmdXJ0aGVyCisgKiBhY3Rpb24gaXMgcmVxdWlyZWQgZm9yIHRo aXMgdHVwbGUuCiAgKgogICogSWYgd2UgZG8gZmluZCBhIHF1YWxpZnlpbmcgYWN0aW9uLCB0aGVu IHdlIGF0dGVtcHQgdG8gZXhlY3V0ZSB0aGUgYWN0aW9uLgogICoKQEAgLTI3NzAsMTUgKzI3NzEs MTcgQEAgRXhlY01lcmdlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwgUgogICogd2l0aCBp bmRpdmlkdWFsIGFjdGlvbnMgYXJlIGV2YWx1YXRlZCBieSB0aGlzIHJvdXRpbmUgdmlhIEV4ZWNR dWFsLCB3aGlsZQogICogRXZhbFBsYW5RdWFsIGNoZWNrcyBmb3IgdGhlIGpvaW4gcXVhbHMuIElm IEV2YWxQbGFuUXVhbCB0ZWxscyB1cyB0aGF0IHRoZQogICogdXBkYXRlZCB0dXBsZSBzdGlsbCBw YXNzZXMgdGhlIGpvaW4gcXVhbHMsIHRoZW4gd2UgcmVzdGFydCBmcm9tIHRoZSBmaXJzdAotICog YWN0aW9uIHRvIGxvb2sgZm9yIGEgcXVhbGlmeWluZyBhY3Rpb24uIE90aGVyd2lzZSwgd2UgcmV0 dXJuIGZhbHNlIC0tCi0gKiBtZWFuaW5nIHRoYXQgYSBOT1QgTUFUQ0hFRCBhY3Rpb24gbXVzdCBu b3cgYmUgZXhlY3V0ZWQgZm9yIHRoZSBjdXJyZW50Ci0gKiBzb3VyY2UgdHVwbGUuCisgKiBhY3Rp b24gdG8gbG9vayBmb3IgYSBxdWFsaWZ5aW5nIGFjdGlvbi4gT3RoZXJ3aXNlLCAibWF0Y2hlZCIg aXMgc2V0IHRvCisgKiBmYWxzZSAtLSBtZWFuaW5nIHRoYXQgYSBOT1QgTUFUQ0hFRCBhY3Rpb24g bXVzdCBub3cgYmUgZXhlY3V0ZWQgZm9yIHRoZQorICogY3VycmVudCBzb3VyY2UgdHVwbGUuCiAg Ki8KLXN0YXRpYyBib29sCitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKgogRXhlY01lcmdlTWF0Y2hl ZChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCi0JCQkJIEl0ZW1Qb2ludGVyIHR1cGxlaWQsIGJvb2wgY2FuU2V0VGFnKQorCQkJCSBJdGVt UG9pbnRlciB0dXBsZWlkLCBib29sIGNhblNldFRhZywgYm9vbCAqbWF0Y2hlZCkKIHsKIAlNb2Rp ZnlUYWJsZVN0YXRlICptdHN0YXRlID0gY29udGV4dC0+bXRzdGF0ZTsKKwlNb2RpZnlUYWJsZSAq bm9kZSA9IChNb2RpZnlUYWJsZSAqKSBtdHN0YXRlLT5wcy5wbGFuOworCVR1cGxlVGFibGVTbG90 ICpyc2xvdCA9IE5VTEw7CiAJVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3Q7CiAJRVN0YXRlCSAgICpl c3RhdGUgPSBjb250ZXh0LT5lc3RhdGU7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0ID0gbXRzdGF0 ZS0+cHMucHNfRXhwckNvbnRleHQ7CkBAIC0yNzkwLDcgKzI3OTMsMTAgQEAgRXhlY01lcmdlTWF0 Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbgogCSAqIElmIHRoZXJlIGFyZSBubyBXSEVOIE1B VENIRUQgYWN0aW9ucywgd2UgYXJlIGRvbmUuCiAJICovCiAJaWYgKHJlc3VsdFJlbEluZm8tPnJp X21hdGNoZWRNZXJnZUFjdGlvbiA9PSBOSUwpCi0JCXJldHVybiB0cnVlOworCXsKKwkJKm1hdGNo ZWQgPSB0cnVlOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAkvKgogCSAqIE1ha2UgdHVwbGUgYW5k IGFueSBuZWVkZWQgam9pbiB2YXJpYWJsZXMgYXZhaWxhYmxlIHRvIEV4ZWNRdWFsIGFuZApAQCAt Mjk1Miw3ICsyOTU4LDggQEAgbG1lcmdlX21hdGNoZWQ6CiAJCQkJICogSWYgdGhlIHR1cGxlIHdh cyBhbHJlYWR5IGRlbGV0ZWQsIHJldHVybiB0byBsZXQgY2FsbGVyCiAJCQkJICogaGFuZGxlIGl0 IHVuZGVyIE5PVCBNQVRDSEVEIGNsYXVzZXMuCiAJCQkJICovCi0JCQkJcmV0dXJuIGZhbHNlOwor CQkJCSptYXRjaGVkID0gZmFsc2U7CisJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCWNhc2UgVE1fVXBk YXRlZDoKIAkJCQl7CkBAIC0zMDIwLDEzICszMDI3LDE5IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJ CQkJCSAqIE5PVCBNQVRDSEVEIGFjdGlvbnMuCiAJCQkJCQkJICovCiAJCQkJCQkJaWYgKFR1cElz TnVsbChlcHFzbG90KSkKLQkJCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCXsKKwkJCQkJCQkJ Km1hdGNoZWQgPSBmYWxzZTsKKwkJCQkJCQkJcmV0dXJuIE5VTEw7CisJCQkJCQkJfQogCiAJCQkJ CQkJKHZvaWQpIEV4ZWNHZXRKdW5rQXR0cmlidXRlKGVwcXNsb3QsCiAJCQkJCQkJCQkJCQkJCXJl c3VsdFJlbEluZm8tPnJpX1Jvd0lkQXR0Tm8sCiAJCQkJCQkJCQkJCQkJCSZpc051bGwpOwogCQkJ CQkJCWlmIChpc051bGwpCi0JCQkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJCQl7CisJCQkJCQkJ CSptYXRjaGVkID0gZmFsc2U7CisJCQkJCQkJCXJldHVybiBOVUxMOworCQkJCQkJCX0KIAogCQkJ CQkJCS8qCiAJCQkJCQkJICogV2hlbiBhIHR1cGxlIHdhcyB1cGRhdGVkIGFuZCBtaWdyYXRlZCB0 bwpAQCAtMzA2MSw3ICszMDc0LDggQEAgbG1lcmdlX21hdGNoZWQ6CiAJCQkJCQkJICogdHVwbGUg YWxyZWFkeSBkZWxldGVkOyB0ZWxsIGNhbGxlciB0byBydW4gTk9UCiAJCQkJCQkJICogTUFUQ0hF RCBhY3Rpb25zCiAJCQkJCQkJICovCi0JCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCSptYXRj aGVkID0gZmFsc2U7CisJCQkJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCQkJCWNhc2UgVE1fU2VsZk1v ZGlmaWVkOgogCkBAIC0zMDgxLDEzICszMDk1LDE0IEBAIGxtZXJnZV9tYXRjaGVkOgogCQkJCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfVFJJR0dFUkVEX0RBVEFfQ0hBTkdFX1ZJT0xBVElPTiksCiAJ CQkJCQkJCQkJIGVycm1zZygidHVwbGUgdG8gYmUgdXBkYXRlZCBvciBkZWxldGVkIHdhcyBhbHJl YWR5IG1vZGlmaWVkIGJ5IGFuIG9wZXJhdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgY29t bWFuZCIpLAogCQkJCQkJCQkJCSBlcnJoaW50KCJDb25zaWRlciB1c2luZyBhbiBBRlRFUiB0cmln Z2VyIGluc3RlYWQgb2YgYSBCRUZPUkUgdHJpZ2dlciB0byBwcm9wYWdhdGUgY2hhbmdlcyB0byBv dGhlciByb3dzLiIpKSk7Ci0JCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCSptYXRjaGVkID0g ZmFsc2U7CisJCQkJCQkJcmV0dXJuIE5VTEw7CiAKIAkJCQkJCWRlZmF1bHQ6CiAJCQkJCQkJLyog c2VlIHRhYmxlX3R1cGxlX2xvY2sgY2FsbCBpbiBFeGVjRGVsZXRlKCkgKi8KIAkJCQkJCQllbG9n KEVSUk9SLCAidW5leHBlY3RlZCB0YWJsZV90dXBsZV9sb2NrIHN0YXR1czogJXUiLAogCQkJCQkJ CQkgcmVzdWx0KTsKLQkJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCQkJcmV0dXJuIE5VTEw7CiAJ CQkJCX0KIAkJCQl9CiAKQEAgLTMwOTksNiArMzExNCwzOSBAQCBsbWVyZ2VfbWF0Y2hlZDoKIAkJ CQlicmVhazsKIAkJfQogCisJCS8qIFByb2Nlc3MgUkVUVVJOSU5HIGlmIHByZXNlbnQgKi8KKwkJ aWYgKHJlc3VsdFJlbEluZm8tPnJpX3Byb2plY3RSZXR1cm5pbmcpCisJCXsKKwkJCXN3aXRjaCAo Y29tbWFuZFR5cGUpCisJCQl7CisJCQkJY2FzZSBDTURfVVBEQVRFOgorCQkJCQlyc2xvdCA9IEV4 ZWNQcm9jZXNzUmV0dXJuaW5nKHJlc3VsdFJlbEluZm8sIG5ld3Nsb3QsCisJCQkJCQkJCQkJCQkg Y29udGV4dC0+cGxhblNsb3QpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQ01EX0RFTEVURToK KwkJCQkJcnNsb3QgPSBFeGVjUHJvY2Vzc1JldHVybmluZyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJ CQkJCQkJIHJlc3VsdFJlbEluZm8tPnJpX29sZFR1cGxlU2xvdCwKKwkJCQkJCQkJCQkJCSBjb250 ZXh0LT5wbGFuU2xvdCk7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBDTURfTk9USElORzoKKwkJ CQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9nKEVSUk9SLCAidW5rbm93biBhY3Rp b24gaW4gTUVSR0UgV0hFTiBNQVRDSEVEIGNsYXVzZSIpOworCQkJfQorCQl9CisKKwkJLyogU2V0 IFJFVFVSTklORyBXSVRIIFdIRU4gQ0xBVVNFIHJlc3VsdCwgaWYgcmVxdWlyZWQgKi8KKwkJaWYg KHJzbG90ICYmIG5vZGUtPmhhc1JldHVybmluZ1doZW5DbGF1c2UpCisJCXsKKwkJCWludAkJCWF0 dG51bSA9IHJzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLT5uYXR0cyAtIDE7CisKKwkJCXJzbG90 LT50dHNfdmFsdWVzW2F0dG51bV0gPSBJbnQzMkdldERhdHVtKHJlbGFjdGlvbi0+bWFzX2FjdGlv bl9pZHgpOworCQkJcnNsb3QtPnR0c19pc251bGxbYXR0bnVtXSA9IGZhbHNlOworCQl9CisKIAkJ LyoKIAkJICogV2UndmUgYWN0aXZhdGVkIG9uZSBvZiB0aGUgV0hFTiBjbGF1c2VzLCBzbyB3ZSBk b24ndCBzZWFyY2gKIAkJICogZnVydGhlci4gVGhpcyBpcyByZXF1aXJlZCBiZWhhdmlvdXIsIG5v dCBhbiBvcHRpbWl6YXRpb24uCkBAIC0zMTA5LDE5ICszMTU3LDIzIEBAIGxtZXJnZV9tYXRjaGVk OgogCS8qCiAJICogU3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkIGFuIGFjdGlvbiBvciBubyBxdWFsaWZ5 aW5nIGFjdGlvbiB3YXMgZm91bmQuCiAJICovCi0JcmV0dXJuIHRydWU7CisJKm1hdGNoZWQgPSB0 cnVlOworCisJcmV0dXJuIHJzbG90OwogfQogCiAvKgogICogRXhlY3V0ZSB0aGUgZmlyc3QgcXVh bGlmeWluZyBOT1QgTUFUQ0hFRCBhY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgVHVw bGVUYWJsZVNsb3QgKgogRXhlY01lcmdlTm90TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKmNv bnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCQkJCWJvb2wgY2FuU2V0VGFn KQogewogCU1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUgPSBjb250ZXh0LT5tdHN0YXRlOworCU1v ZGlmeVRhYmxlICpub2RlID0gKE1vZGlmeVRhYmxlICopIG10c3RhdGUtPnBzLnBsYW47CiAJRXhw ckNvbnRleHQgKmVjb250ZXh0ID0gbXRzdGF0ZS0+cHMucHNfRXhwckNvbnRleHQ7CiAJTGlzdAkg ICAqYWN0aW9uU3RhdGVzID0gTklMOworCVR1cGxlVGFibGVTbG90ICpyc2xvdCA9IE5VTEw7CiAJ TGlzdENlbGwgICAqbDsKIAogCS8qCkBAIC0zMTczLDkgKzMyMjUsMTggQEAgRXhlY01lcmdlTm90 TWF0Y2hlZChNb2RpZnlUYWJsZUNvbnRleHQgKgogCQkJCW5ld3Nsb3QgPSBFeGVjUHJvamVjdChh Y3Rpb24tPm1hc19wcm9qKTsKIAkJCQljb250ZXh0LT5yZWxhY3Rpb24gPSBhY3Rpb247CiAKLQkJ CQkodm9pZCkgRXhlY0luc2VydChjb250ZXh0LCBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbywg bmV3c2xvdCwKLQkJCQkJCQkJICBjYW5TZXRUYWcsIE5VTEwsIE5VTEwpOworCQkJCXJzbG90ID0g RXhlY0luc2VydChjb250ZXh0LCBtdHN0YXRlLT5yb290UmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJ ICAgbmV3c2xvdCwgY2FuU2V0VGFnLCBOVUxMLCBOVUxMKTsKIAkJCQltdHN0YXRlLT5tdF9tZXJn ZV9pbnNlcnRlZCArPSAxOworCisJCQkJLyogU2V0IFJFVFVSTklORyBXSVRIIFdIRU4gQ0xBVVNF IHJlc3VsdCwgaWYgcmVxdWVzdGVkICovCisJCQkJaWYgKHJzbG90ICYmIG5vZGUtPmhhc1JldHVy bmluZ1doZW5DbGF1c2UpCisJCQkJeworCQkJCQlpbnQJCQlhdHRudW0gPSByc2xvdC0+dHRzX3R1 cGxlRGVzY3JpcHRvci0+bmF0dHMgLSAxOworCisJCQkJCXJzbG90LT50dHNfdmFsdWVzW2F0dG51 bV0gPSBJbnQzMkdldERhdHVtKGFjdGlvbi0+bWFzX2FjdGlvbl9pZHgpOworCQkJCQlyc2xvdC0+ dHRzX2lzbnVsbFthdHRudW1dID0gZmFsc2U7CisJCQkJfQogCQkJCWJyZWFrOwogCQkJY2FzZSBD TURfTk9USElORzoKIAkJCQkvKiBEbyBub3RoaW5nICovCkBAIC0zMTkwLDYgKzMyNTEsOCBAQCBF eGVjTWVyZ2VOb3RNYXRjaGVkKE1vZGlmeVRhYmxlQ29udGV4dCAqCiAJCSAqLwogCQlicmVhazsK IAl9CisKKwlyZXR1cm4gcnNsb3Q7CiB9CiAKIC8qCkBAIC0zMjI3LDYgKzMyOTAsNyBAQCBFeGVj SW5pdE1lcmdlKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCUxpc3QJICAgKm1lcmdlQWN0 aW9uTGlzdCA9IGxmaXJzdChsYyk7CiAJCVR1cGxlRGVzYwlyZWxhdGlvbkRlc2M7CiAJCUxpc3RD ZWxsICAgKmw7CisJCWludAkJCWFjdGlvbl9pZHg7CiAKIAkJcmVzdWx0UmVsSW5mbyA9IG10c3Rh dGUtPnJlc3VsdFJlbEluZm8gKyBpOwogCQlpKys7CkBAIC0zMjM2LDYgKzMzMDAsNyBAQCBFeGVj SW5pdE1lcmdlKE1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJCWlmICh1bmxpa2VseSghcmVz dWx0UmVsSW5mby0+cmlfcHJvamVjdE5ld0luZm9WYWxpZCkpCiAJCQlFeGVjSW5pdE1lcmdlVHVw bGVTbG90cyhtdHN0YXRlLCByZXN1bHRSZWxJbmZvKTsKIAorCQlhY3Rpb25faWR4ID0gMTsKIAkJ Zm9yZWFjaChsLCBtZXJnZUFjdGlvbkxpc3QpCiAJCXsKIAkJCU1lcmdlQWN0aW9uICphY3Rpb24g PSAoTWVyZ2VBY3Rpb24gKikgbGZpcnN0KGwpOwpAQCAtMzI1MCw2ICszMzE1LDcgQEAgRXhlY0lu aXRNZXJnZShNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogCQkJICovCiAJCQlhY3Rpb25fc3Rh dGUgPSBtYWtlTm9kZShNZXJnZUFjdGlvblN0YXRlKTsKIAkJCWFjdGlvbl9zdGF0ZS0+bWFzX2Fj dGlvbiA9IGFjdGlvbjsKKwkJCWFjdGlvbl9zdGF0ZS0+bWFzX2FjdGlvbl9pZHggPSBhY3Rpb25f aWR4Kys7CiAJCQlhY3Rpb25fc3RhdGUtPm1hc193aGVucXVhbCA9IEV4ZWNJbml0UXVhbCgoTGlz dCAqKSBhY3Rpb24tPnF1YWwsCiAJCQkJCQkJCQkJCQkJICAmbXRzdGF0ZS0+cHMpOwogCkBAIC0z NjcxLDggKzM3MzcsMTcgQEAgRXhlY01vZGlmeVRhYmxlKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJ CXsKIAkJCQkJRXZhbFBsYW5RdWFsU2V0U2xvdCgmbm9kZS0+bXRfZXBxc3RhdGUsIGNvbnRleHQu cGxhblNsb3QpOwogCi0JCQkJCUV4ZWNNZXJnZSgmY29udGV4dCwgbm9kZS0+cmVzdWx0UmVsSW5m bywgTlVMTCwgbm9kZS0+Y2FuU2V0VGFnKTsKLQkJCQkJY29udGludWU7CS8qIG5vIFJFVFVSTklO RyBzdXBwb3J0IHlldCAqLworCQkJCQlzbG90ID0gRXhlY01lcmdlKCZjb250ZXh0LCBub2RlLT5y ZXN1bHRSZWxJbmZvLCBOVUxMLAorCQkJCQkJCQkJIG5vZGUtPmNhblNldFRhZyk7CisKKwkJCQkJ LyoKKwkJCQkJICogSWYgd2UgZ290IGEgUkVUVVJOSU5HIHJlc3VsdCwgcmV0dXJuIGl0IHRvIHRo ZSBjYWxsZXIuCisJCQkJCSAqIFdlJ2xsIGNvbnRpbnVlIHRoZSB3b3JrIG9uIG5leHQgY2FsbC4K KwkJCQkJICovCisJCQkJCWlmIChzbG90KQorCQkJCQkJcmV0dXJuIHNsb3Q7CisKKwkJCQkJY29u dGludWU7CS8qIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgdHVwbGUgKi8KIAkJCQl9CiAKIAkJCQll bG9nKEVSUk9SLCAidGFibGVvaWQgaXMgTlVMTCIpOwpAQCAtMzc0OSw4ICszODI0LDE3IEBAIEV4 ZWNNb2RpZnlUYWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJCQkJewogCQkJCQkJRXZhbFBsYW5R dWFsU2V0U2xvdCgmbm9kZS0+bXRfZXBxc3RhdGUsIGNvbnRleHQucGxhblNsb3QpOwogCi0JCQkJ CQlFeGVjTWVyZ2UoJmNvbnRleHQsIG5vZGUtPnJlc3VsdFJlbEluZm8sIE5VTEwsIG5vZGUtPmNh blNldFRhZyk7Ci0JCQkJCQljb250aW51ZTsJLyogbm8gUkVUVVJOSU5HIHN1cHBvcnQgeWV0ICov CisJCQkJCQlzbG90ID0gRXhlY01lcmdlKCZjb250ZXh0LCBub2RlLT5yZXN1bHRSZWxJbmZvLCBO VUxMLAorCQkJCQkJCQkJCSBub2RlLT5jYW5TZXRUYWcpOworCisJCQkJCQkvKgorCQkJCQkJICog SWYgd2UgZ290IGEgUkVUVVJOSU5HIHJlc3VsdCwgcmV0dXJuIGl0IHRvIHRoZQorCQkJCQkJICog Y2FsbGVyLiAgV2UnbGwgY29udGludWUgdGhlIHdvcmsgb24gbmV4dCBjYWxsLgorCQkJCQkJICov CisJCQkJCQlpZiAoc2xvdCkKKwkJCQkJCQlyZXR1cm4gc2xvdDsKKworCQkJCQkJY29udGludWU7 CS8qIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgdHVwbGUgKi8KIAkJCQkJfQogCiAJCQkJCWVsb2co RVJST1IsICJjdGlkIGlzIE5VTEwiKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTI0OTU4Li45MGI3ZmRjCi0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTcwNTYsNiArNzA1Niw3IEBAIG1ha2VfbW9k aWZ5dGFibGUoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4KIAlub2RlLT5yb3dNYXJrcyA9IHJvd01h cmtzOwogCW5vZGUtPm1lcmdlQWN0aW9uTGlzdHMgPSBtZXJnZUFjdGlvbkxpc3RzOwogCW5vZGUt PmVwcVBhcmFtID0gZXBxUGFyYW07CisJbm9kZS0+aGFzUmV0dXJuaW5nV2hlbkNsYXVzZSA9IHJv b3QtPnBhcnNlLT5oYXNSZXR1cm5pbmdXaGVuQ2xhdXNlOwogCiAJLyoKIAkgKiBGb3IgZWFjaCBy ZXN1bHQgcmVsYXRpb24gdGhhdCBpcyBhIGZvcmVpZ24gdGFibGUsIGFsbG93IHRoZSBGRFcgdG8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9w YXJzZXIvYW5hbHl6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViOTA5NzQuLjUwMjg1 YTIKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvYW5hbHl6ZS5jCkBAIC03Myw3ICs3Myw2IEBAIHN0YXRpYyB2b2lkIGRldGVybWluZVJl Y3Vyc2l2ZUNvbFR5cGVzKFAKIAkJCQkJCQkJCSAgIE5vZGUgKmxhcmcsIExpc3QgKm5ydGFyZ2V0 bGlzdCk7CiBzdGF0aWMgUXVlcnkgKnRyYW5zZm9ybVJldHVyblN0bXQoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBSZXR1cm5TdG10ICpzdG10KTsKIHN0YXRpYyBRdWVyeSAqdHJhbnNmb3JtVXBkYXRlU3Rt dChQYXJzZVN0YXRlICpwc3RhdGUsIFVwZGF0ZVN0bXQgKnN0bXQpOwotc3RhdGljIExpc3QgKnRy YW5zZm9ybVJldHVybmluZ0xpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpyZXR1cm5pbmdM aXN0KTsKIHN0YXRpYyBRdWVyeSAqdHJhbnNmb3JtUExBc3NpZ25TdG10KFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCQkJCQkJCVBMQXNzaWduU3RtdCAqc3RtdCk7CiBzdGF0aWMgUXVlcnkgKnRyYW5z Zm9ybURlY2xhcmVDdXJzb3JTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwKQEAgLTI1MDEsNyArMjUw MCw3IEBAIHRyYW5zZm9ybVVwZGF0ZVRhcmdldExpc3QoUGFyc2VTdGF0ZSAqcHMKICAqIHRyYW5z Zm9ybVJldHVybmluZ0xpc3QgLQogICoJaGFuZGxlIGEgUkVUVVJOSU5HIGNsYXVzZSBpbiBJTlNF UlQvVVBEQVRFL0RFTEVURQogICovCi1zdGF0aWMgTGlzdCAqCitMaXN0ICoKIHRyYW5zZm9ybVJl dHVybmluZ0xpc3QoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpyZXR1cm5pbmdMaXN0KQogewog CUxpc3QJICAgKnJsaXN0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBi L3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAx MzgzOC4uY2Y4NTk5YQotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9i YWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTE1MSw2ICsxNTEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3Qg S2V5QWN0aW9ucwogCUtleUFjdGlvbiAqZGVsZXRlQWN0aW9uOwogfSBLZXlBY3Rpb25zOwogCisv KiBQcml2YXRlIHN0cnVjdCBmb3IgdGhlIHJlc3VsdCBvZiBtZXJnZV9yZXR1cm5pbmdfY2xhdXNl ICovCit0eXBlZGVmIHN0cnVjdCBNZXJnZVJldHVybmluZ0NsYXVzZQoreworCUxpc3QJICAgKnJl dHVybmluZ0xpc3Q7CisJY2hhcgkgICAqcmV0dXJuaW5nV2hlbkNsYXVzZTsKK30gTWVyZ2VSZXR1 cm5pbmdDbGF1c2U7CisKIC8qIENvbnN0cmFpbnRBdHRyaWJ1dGVTcGVjIHlpZWxkcyBhbiBpbnRl Z2VyIGJpdG1hc2sgb2YgdGhlc2UgZmxhZ3M6ICovCiAjZGVmaW5lIENBU19OT1RfREVGRVJSQUJM RQkJCTB4MDEKICNkZWZpbmUgQ0FTX0RFRkVSUkFCTEUJCQkJMHgwMgpAQCAtMjc0LDYgKzI4MSw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGEKIAlTZXRRdWFudGlm aWVyIHNldHF1YW50aWZpZXI7CiAJc3RydWN0IEdyb3VwQ2xhdXNlICpncm91cGNsYXVzZTsKIAlN ZXJnZVdoZW5DbGF1c2UgKm1lcmdld2hlbjsKKwlzdHJ1Y3QgTWVyZ2VSZXR1cm5pbmdDbGF1c2Ug Km1lcmdlcmV0dXJuaW5nOwogCXN0cnVjdCBLZXlBY3Rpb25zICprZXlhY3Rpb25zOwogCXN0cnVj dCBLZXlBY3Rpb24gKmtleWFjdGlvbjsKIH0KQEAgLTUxMSw2ICs1MTksNyBAQCBzdGF0aWMgTm9k ZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhCiAldHlwZSA8aW5mZXI+CW9wdF9jb25mX2V4 cHIKICV0eXBlIDxvbmNvbmZsaWN0PiBvcHRfb25fY29uZmxpY3QKICV0eXBlIDxtZXJnZXdoZW4+ CW1lcmdlX2luc2VydCBtZXJnZV91cGRhdGUgbWVyZ2VfZGVsZXRlCisldHlwZSA8bWVyZ2VyZXR1 cm5pbmc+IG1lcmdlX3JldHVybmluZ19jbGF1c2UKIAogJXR5cGUgPG5vZGU+CW1lcmdlX3doZW5f Y2xhdXNlIG9wdF9tZXJnZV93aGVuX2NvbmRpdGlvbgogJXR5cGUgPGxpc3Q+CW1lcmdlX3doZW5f bGlzdApAQCAtNjc3LDcgKzY4Niw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1Nl bGVjdChjaGEKIAlCT09MRUFOX1AgQk9USCBCUkVBRFRIIEJZCiAKIAlDQUNIRSBDQUxMIENBTExF RCBDQVNDQURFIENBU0NBREVEIENBU0UgQ0FTVCBDQVRBTE9HX1AgQ0hBSU4gQ0hBUl9QCi0JQ0hB UkFDVEVSIENIQVJBQ1RFUklTVElDUyBDSEVDSyBDSEVDS1BPSU5UIENMQVNTIENMT1NFCisJQ0hB UkFDVEVSIENIQVJBQ1RFUklTVElDUyBDSEVDSyBDSEVDS1BPSU5UIENMQVNTIENMQVVTRSBDTE9T RQogCUNMVVNURVIgQ09BTEVTQ0UgQ09MTEFURSBDT0xMQVRJT04gQ09MVU1OIENPTFVNTlMgQ09N TUVOVCBDT01NRU5UUyBDT01NSVQKIAlDT01NSVRURUQgQ09NUFJFU1NJT04gQ09OQ1VSUkVOVExZ IENPTkZJR1VSQVRJT04gQ09ORkxJQ1QKIAlDT05ORUNUSU9OIENPTlNUUkFJTlQgQ09OU1RSQUlO VFMgQ09OVEVOVF9QIENPTlRJTlVFX1AgQ09OVkVSU0lPTl9QIENPUFkKQEAgLTEyMjQxLDYgKzEy MjUwLDcgQEAgTWVyZ2VTdG10OgogCQkJVVNJTkcgdGFibGVfcmVmCiAJCQlPTiBhX2V4cHIKIAkJ CW1lcmdlX3doZW5fbGlzdAorCQkJbWVyZ2VfcmV0dXJuaW5nX2NsYXVzZQogCQkJCXsKIAkJCQkJ TWVyZ2VTdG10ICAqbSA9IG1ha2VOb2RlKE1lcmdlU3RtdCk7CiAKQEAgLTEyMjQ5LDYgKzEyMjU5 LDggQEAgTWVyZ2VTdG10OgogCQkJCQltLT5zb3VyY2VSZWxhdGlvbiA9ICQ2OwogCQkJCQltLT5q b2luQ29uZGl0aW9uID0gJDg7CiAJCQkJCW0tPm1lcmdlV2hlbkNsYXVzZXMgPSAkOTsKKwkJCQkJ bS0+cmV0dXJuaW5nTGlzdCA9ICQxMCA/ICQxMC0+cmV0dXJuaW5nTGlzdCA6IE5JTDsKKwkJCQkJ bS0+cmV0dXJuaW5nV2hlbkNsYXVzZSA9ICQxMCA/ICQxMC0+cmV0dXJuaW5nV2hlbkNsYXVzZSA6 IE5VTEw7CiAKIAkJCQkJJCQgPSAoTm9kZSAqKSBtOwogCQkJCX0KQEAgLTEyMzg5LDYgKzEyNDAx LDQ1IEBAIG1lcmdlX3ZhbHVlc19jbGF1c2U6CiAJCQkJfQogCQk7CiAKK21lcmdlX3JldHVybmlu Z19jbGF1c2U6CisJCQlSRVRVUk5JTkcgdGFyZ2V0X2xpc3QgV0lUSCBXSEVOIENMQVVTRSBBUyBD b2xMYWJlbAorCQkJCXsKKwkJCQkJTWVyZ2VSZXR1cm5pbmdDbGF1c2UgKm4gPSBwYWxsb2Moc2l6 ZW9mKE1lcmdlUmV0dXJuaW5nQ2xhdXNlKSk7CisKKwkJCQkJbi0+cmV0dXJuaW5nTGlzdCA9ICQy OworCQkJCQluLT5yZXR1cm5pbmdXaGVuQ2xhdXNlID0gJDc7CisJCQkJCSQkID0gbjsKKwkJCQl9 CisJCQl8IFJFVFVSTklORyB0YXJnZXRfbGlzdCBXSVRIIFdIRU4gQ0xBVVNFIENvbExhYmVsCisJ CQkJeworCQkJCQlNZXJnZVJldHVybmluZ0NsYXVzZSAqbiA9IHBhbGxvYyhzaXplb2YoTWVyZ2VS ZXR1cm5pbmdDbGF1c2UpKTsKKworCQkJCQluLT5yZXR1cm5pbmdMaXN0ID0gJDI7CisJCQkJCW4t PnJldHVybmluZ1doZW5DbGF1c2UgPSAkNjsKKwkJCQkJJCQgPSBuOworCQkJCX0KKwkJCXwgUkVU VVJOSU5HIHRhcmdldF9saXN0IFdJVEggV0hFTiBDTEFVU0UKKwkJCQl7CisJCQkJCU1lcmdlUmV0 dXJuaW5nQ2xhdXNlICpuID0gcGFsbG9jKHNpemVvZihNZXJnZVJldHVybmluZ0NsYXVzZSkpOwor CisJCQkJCW4tPnJldHVybmluZ0xpc3QgPSAkMjsKKwkJCQkJbi0+cmV0dXJuaW5nV2hlbkNsYXVz ZSA9IHBzdHJkdXAoIndoZW5fY2xhdXNlIik7CisJCQkJCSQkID0gbjsKKwkJCQl9CisJCQl8IFJF VFVSTklORyB0YXJnZXRfbGlzdAorCQkJCXsKKwkJCQkJTWVyZ2VSZXR1cm5pbmdDbGF1c2UgKm4g PSBwYWxsb2Moc2l6ZW9mKE1lcmdlUmV0dXJuaW5nQ2xhdXNlKSk7CisKKwkJCQkJbi0+cmV0dXJu aW5nTGlzdCA9ICQyOworCQkJCQluLT5yZXR1cm5pbmdXaGVuQ2xhdXNlID0gTlVMTDsKKwkJCQkJ JCQgPSBuOworCQkJCX0KKwkJCXwgLyogRU1QVFkgKi8KKwkJCQl7CisJCQkJCSQkID0gTlVMTDsK KwkJCQl9CisJCTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJCVFVRVJZOgpAQCAt MTY3NDQsNiArMTY3OTUsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IENIQVJBQ1RFUklT VElDUwogCQkJfCBDSEVDS1BPSU5UCiAJCQl8IENMQVNTCisJCQl8IENMQVVTRQogCQkJfCBDTE9T RQogCQkJfCBDTFVTVEVSCiAJCQl8IENPTFVNTlMKQEAgLTE3MjY5LDYgKzE3MzIxLDcgQEAgYmFy ZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBDSEVDSwogCQkJfCBDSEVDS1BPSU5UCiAJCQl8IENMQVNT CisJCQl8IENMQVVTRQogCQkJfCBDTE9TRQogCQkJfCBDTFVTVEVSCiAJCQl8IENPQUxFU0NFCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY3RlLmMgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfY3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzViMWE0OS4uYWQz YzUyNQotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfY3RlLmMKKysrIGIvc3JjL2JhY2tl bmQvcGFyc2VyL3BhcnNlX2N0ZS5jCkBAIC0xMjYsMTMgKzEyNiw2IEBAIHRyYW5zZm9ybVdpdGhD bGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQlDb21tb25UYWJsZUV4cHIgKmN0ZSA9IChDb21t b25UYWJsZUV4cHIgKikgbGZpcnN0KGxjKTsKIAkJTGlzdENlbGwgICAqcmVzdDsKIAotCQkvKiBN RVJHRSBpcyBhbGxvd2VkIGJ5IHBhcnNlciwgYnV0IHVuaW1wbGVtZW50ZWQuIFJlamVjdCBmb3Ig bm93ICovCi0JCWlmIChJc0EoY3RlLT5jdGVxdWVyeSwgTWVyZ2VTdG10KSkKLQkJCWVyZXBvcnQo RVJST1IsCi0JCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJ CQllcnJtc2coIk1FUkdFIG5vdCBzdXBwb3J0ZWQgaW4gV0lUSCBxdWVyeSIpLAotCQkJCQlwYXJz ZXJfZXJycG9zaXRpb24ocHN0YXRlLCBjdGUtPmxvY2F0aW9uKSk7Ci0KIAkJZm9yX2VhY2hfY2Vs bChyZXN0LCB3aXRoQ2xhdXNlLT5jdGVzLCBsbmV4dCh3aXRoQ2xhdXNlLT5jdGVzLCBsYykpCiAJ CXsKIAkJCUNvbW1vblRhYmxlRXhwciAqY3RlMiA9IChDb21tb25UYWJsZUV4cHIgKikgbGZpcnN0 KHJlc3QpOwpAQCAtMTUzLDcgKzE0Niw4IEBAIHRyYW5zZm9ybVdpdGhDbGF1c2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCQkJLyogbXVzdCBiZSBhIGRhdGEtbW9kaWZ5aW5nIHN0YXRlbWVudCAqLwog CQkJQXNzZXJ0KElzQShjdGUtPmN0ZXF1ZXJ5LCBJbnNlcnRTdG10KSB8fAogCQkJCSAgIElzQShj dGUtPmN0ZXF1ZXJ5LCBVcGRhdGVTdG10KSB8fAotCQkJCSAgIElzQShjdGUtPmN0ZXF1ZXJ5LCBE ZWxldGVTdG10KSk7CisJCQkJICAgSXNBKGN0ZS0+Y3RlcXVlcnksIERlbGV0ZVN0bXQpIHx8CisJ CQkJICAgSXNBKGN0ZS0+Y3RlcXVlcnksIE1lcmdlU3RtdCkpOwogCiAJCQlwc3RhdGUtPnBfaGFz TW9kaWZ5aW5nQ1RFID0gdHJ1ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX21lcmdlLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfbWVyZ2UuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA2MTFkZmNlLi4wYmExMTRjCi0tLSBhL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9tZXJnZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9tZXJnZS5j CkBAIC0yMzMsNiArMjMzLDM0IEBAIHRyYW5zZm9ybU1lcmdlU3RtdChQYXJzZVN0YXRlICpwc3Rh dGUsIE0KIAkgKi8KIAlxcnktPmpvaW50cmVlID0gbWFrZUZyb21FeHByKHBzdGF0ZS0+cF9qb2lu bGlzdCwgam9pbkV4cHIpOwogCisJLyogVHJhbnNmb3JtIHRoZSBSRVRVUk5JTkcgbGlzdCwgaWYg YW55ICovCisJcXJ5LT5yZXR1cm5pbmdMaXN0ID0gdHJhbnNmb3JtUmV0dXJuaW5nTGlzdChwc3Rh dGUsIHN0bXQtPnJldHVybmluZ0xpc3QpOworCisJLyogQWRkIGludGVnZXIgY29sdW1uIGZvciBS RVRVUk5JTkcgLi4uIFdJVEggV0hFTiBDTEFVU0UsIGlmIHNwZWNpZmllZCAqLworCWlmIChzdG10 LT5yZXR1cm5pbmdXaGVuQ2xhdXNlKQorCXsKKwkJRXhwcgkgICAqbnVsbF9leHByOworCQlUYXJn ZXRFbnRyeSAqdGxlOworCisJCW51bGxfZXhwciA9IChFeHByICopIG1ha2VDb25zdChJTlQ0T0lE LAorCQkJCQkJCQkJICAgLTEsCisJCQkJCQkJCQkgICBJbnZhbGlkT2lkLAorCQkJCQkJCQkJICAg c2l6ZW9mKGludDMyKSwKKwkJCQkJCQkJCSAgIChEYXR1bSkgMCwKKwkJCQkJCQkJCSAgIHRydWUs CisJCQkJCQkJCQkgICB0cnVlKTsKKworCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkobnVsbF9leHBy LAorCQkJCQkJCSAgbGlzdF9sZW5ndGgocXJ5LT5yZXR1cm5pbmdMaXN0KSArIDEsCisJCQkJCQkJ ICBzdG10LT5yZXR1cm5pbmdXaGVuQ2xhdXNlLAorCQkJCQkJCSAgZmFsc2UpOworCisJCXFyeS0+ cmV0dXJuaW5nTGlzdCA9IGxhcHBlbmQocXJ5LT5yZXR1cm5pbmdMaXN0LCB0bGUpOworCQlxcnkt Pmhhc1JldHVybmluZ1doZW5DbGF1c2UgPSB0cnVlOworCX0KKwllbHNlCisJCXFyeS0+aGFzUmV0 dXJuaW5nV2hlbkNsYXVzZSA9IGZhbHNlOworCiAJLyoKIAkgKiBXZSBub3cgaGF2ZSBhIGdvb2Qg cXVlcnkgc2hhcGUsIHNvIG5vdyBsb29rIGF0IHRoZSBXSEVOIGNvbmRpdGlvbnMgYW5kCiAJICog YWN0aW9uIHRhcmdldGxpc3RzLgpAQCAtMzkwLDkgKzQxOCw2IEBAIHRyYW5zZm9ybU1lcmdlU3Rt dChQYXJzZVN0YXRlICpwc3RhdGUsIE0KIAogCXFyeS0+bWVyZ2VBY3Rpb25MaXN0ID0gbWVyZ2VB Y3Rpb25MaXN0OwogCi0JLyogUkVUVVJOSU5HIGNvdWxkIHBvdGVudGlhbGx5IGJlIGFkZGVkIGlu IHRoZSBmdXR1cmUsIGJ1dCBub3QgaW4gU1FMIHN0ZCAqLwotCXFyeS0+cmV0dXJuaW5nTGlzdCA9 IE5VTEw7Ci0KIAlxcnktPmhhc1RhcmdldFNSRnMgPSBmYWxzZTsKIAlxcnktPmhhc1N1Ykxpbmtz ID0gcHN0YXRlLT5wX2hhc1N1YkxpbmtzOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9yZWxhdGlvbi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODlhMGUuLjE2MmEzMDUKLS0tIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3JlbGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3JlbGF0aW9uLmMKQEAgLTIzMTMsOSArMjMxMywxMCBAQCBhZGRSYW5nZVRhYmxlRW50cnlG b3JDVEUoUGFyc2VTdGF0ZSAqcHN0CiAJCWN0ZS0+Y3RlcmVmY291bnQrKzsKIAogCS8qCi0JICog V2UgdGhyb3cgZXJyb3IgaWYgdGhlIENURSBpcyBJTlNFUlQvVVBEQVRFL0RFTEVURSB3aXRob3V0 IFJFVFVSTklORy4KLQkgKiBUaGlzIHdvbid0IGdldCBjaGVja2VkIGluIGNhc2Ugb2YgYSBzZWxm LXJlZmVyZW5jZSwgYnV0IHRoYXQncyBPSwotCSAqIGJlY2F1c2UgZGF0YS1tb2RpZnlpbmcgQ1RF cyBhcmVuJ3QgYWxsb3dlZCB0byBiZSByZWN1cnNpdmUgYW55aG93LgorCSAqIFdlIHRocm93IGVy cm9yIGlmIHRoZSBDVEUgaXMgSU5TRVJUL1VQREFURS9ERUxFVEUvTUVSR0Ugd2l0aG91dAorCSAq IFJFVFVSTklORy4gIFRoaXMgd29uJ3QgZ2V0IGNoZWNrZWQgaW4gY2FzZSBvZiBhIHNlbGYtcmVm ZXJlbmNlLCBidXQKKwkgKiB0aGF0J3MgT0sgYmVjYXVzZSBkYXRhLW1vZGlmeWluZyBDVEVzIGFy ZW4ndCBhbGxvd2VkIHRvIGJlIHJlY3Vyc2l2ZQorCSAqIGFueWhvdy4KIAkgKi8KIAlpZiAoSXNB KGN0ZS0+Y3RlcXVlcnksIFF1ZXJ5KSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXdy aXRlL3Jld3JpdGVIYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk2MGRhZC4uYWM1YTBjNwotLS0gYS9zcmMv YmFja2VuZC9yZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0 ZS9yZXdyaXRlSGFuZGxlci5jCkBAIC0zNjQwLDcgKzM2NDAsOCBAQCBSZXdyaXRlUXVlcnkoUXVl cnkgKnBhcnNldHJlZSwgTGlzdCAqcmV3CiAJCQlpZiAoIShjdGVxdWVyeS0+Y29tbWFuZFR5cGUg PT0gQ01EX1NFTEVDVCB8fAogCQkJCSAgY3RlcXVlcnktPmNvbW1hbmRUeXBlID09IENNRF9VUERB VEUgfHwKIAkJCQkgIGN0ZXF1ZXJ5LT5jb21tYW5kVHlwZSA9PSBDTURfSU5TRVJUIHx8Ci0JCQkJ ICBjdGVxdWVyeS0+Y29tbWFuZFR5cGUgPT0gQ01EX0RFTEVURSkpCisJCQkJICBjdGVxdWVyeS0+ Y29tbWFuZFR5cGUgPT0gQ01EX0RFTEVURSB8fAorCQkJCSAgY3RlcXVlcnktPmNvbW1hbmRUeXBl ID09IENNRF9NRVJHRSkpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBDdXJyZW50bHkgaXQgY291bGQg b25seSBiZSBOT1RJRlk7IHRoaXMgZXJyb3IgbWVzc2FnZSB3aWxsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZDlkOTYuLmQzOTNmNTEKLS0tIGEvc3JjL2JhY2tlbmQv dGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTIxMzEs MTEgKzIxMzEsMTAgQEAgUXVlcnlSZXR1cm5zVHVwbGVzKFF1ZXJ5ICpwYXJzZXRyZWUpCiAJCWNh c2UgQ01EX1NFTEVDVDoKIAkJCS8qIHJldHVybnMgdHVwbGVzICovCiAJCQlyZXR1cm4gdHJ1ZTsK LQkJY2FzZSBDTURfTUVSR0U6Ci0JCQlyZXR1cm4gZmFsc2U7CiAJCWNhc2UgQ01EX0lOU0VSVDoK IAkJY2FzZSBDTURfVVBEQVRFOgogCQljYXNlIENNRF9ERUxFVEU6CisJCWNhc2UgQ01EX01FUkdF OgogCQkJLyogdGhlIGZvcm1zIHdpdGggUkVUVVJOSU5HIHJldHVybiB0dXBsZXMgKi8KIAkJCWlm IChwYXJzZXRyZWUtPnJldHVybmluZ0xpc3QpCiAJCQkJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3BzcWwvY29tbW9uLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMzhmOWIxMC4uMDI0ZTc1YQotLS0gYS9zcmMvYmluL3BzcWwvY29t bW9uLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jCkBAIC05NjIsMTMgKzk2MiwxNyBAQCBQ cmludFF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wKIAkJCWVsc2UKIAkJCQlzdWNj ZXNzID0gdHJ1ZTsKIAotCQkJLyogaWYgaXQncyBJTlNFUlQvVVBEQVRFL0RFTEVURSBSRVRVUk5J TkcsIGFsc28gcHJpbnQgc3RhdHVzICovCisJCQkvKgorCQkJICogSWYgaXQncyBJTlNFUlQvVVBE QVRFL0RFTEVURS9NRVJHRSBSRVRVUk5JTkcsIGFsc28gcHJpbnQKKwkJCSAqIHN0YXR1cy4KKwkJ CSAqLwogCQkJaWYgKGxhc3QgfHwgcHNldC5zaG93X2FsbF9yZXN1bHRzKQogCQkJewogCQkJCWNt ZHN0YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdCk7CiAJCQkJaWYgKHN0cm5jbXAoY21kc3RhdHVz LCAiSU5TRVJUIiwgNikgPT0gMCB8fAogCQkJCQlzdHJuY21wKGNtZHN0YXR1cywgIlVQREFURSIs IDYpID09IDAgfHwKLQkJCQkJc3RybmNtcChjbWRzdGF0dXMsICJERUxFVEUiLCA2KSA9PSAwKQor CQkJCQlzdHJuY21wKGNtZHN0YXR1cywgIkRFTEVURSIsIDYpID09IDAgfHwKKwkJCQkJc3RybmNt cChjbWRzdGF0dXMsICJNRVJHRSIsIDUpID09IDApCiAJCQkJCVByaW50UXVlcnlTdGF0dXMocmVz dWx0LCBwcmludFN0YXR1c0ZvdXQpOwogCQkJfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDIwZjRjOGIuLjNhMjVjOTMKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTQx NSw2ICs0MTUsNyBAQCB0eXBlZGVmIHN0cnVjdCBNZXJnZUFjdGlvblN0YXRlCiAJTm9kZVRhZwkJ dHlwZTsKIAogCU1lcmdlQWN0aW9uICptYXNfYWN0aW9uOwkvKiBhc3NvY2lhdGVkIE1lcmdlQWN0 aW9uIG5vZGUgKi8KKwlpbnQJCQltYXNfYWN0aW9uX2lkeDsJLyogMS1iYXNlZCBpbmRleCBvZiBN ZXJnZUFjdGlvbiBub2RlICovCiAJUHJvamVjdGlvbkluZm8gKm1hc19wcm9qOwkvKiBwcm9qZWN0 aW9uIG9mIHRoZSBhY3Rpb24ncyB0YXJnZXRsaXN0IGZvcgogCQkJCQkJCQkgKiB0aGlzIHJlbCAq LwogCUV4cHJTdGF0ZSAgKm1hc193aGVucXVhbDsJLyogV0hFTiBbTk9UXSBNQVRDSEVEIEFORCBj b25kaXRpb25zICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggY2ZlY2E5Ni4uYzhmYzc2YwotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0xNjAsNiArMTYwLDcgQEAg dHlwZWRlZiBzdHJ1Y3QgUXVlcnkKIAogCUxpc3QJICAgKm1lcmdlQWN0aW9uTGlzdDsJLyogbGlz dCBvZiBhY3Rpb25zIGZvciBNRVJHRSAob25seSkgKi8KIAlib29sCQltZXJnZVVzZU91dGVySm9p bjsJLyogd2hldGhlciB0byB1c2Ugb3V0ZXIgam9pbiAqLworCWJvb2wJCWhhc1JldHVybmluZ1do ZW5DbGF1c2U7CS8qIGhhcyBSRVRVUk5JTkcgV0lUSCBXSEVOIENMQVVTRSAqLwogCiAJTGlzdAkg ICAqdGFyZ2V0TGlzdDsJCS8qIHRhcmdldCBsaXN0IChvZiBUYXJnZXRFbnRyeSkgKi8KIApAQCAt MTcxMyw2ICsxNzE0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VTdG10CiAJTm9kZQkgICAqc291 cmNlUmVsYXRpb247IC8qIHNvdXJjZSByZWxhdGlvbiAqLwogCU5vZGUJICAgKmpvaW5Db25kaXRp b247CS8qIGpvaW4gY29uZGl0aW9uIGJldHdlZW4gc291cmNlIGFuZCB0YXJnZXQgKi8KIAlMaXN0 CSAgICptZXJnZVdoZW5DbGF1c2VzOwkvKiBsaXN0IG9mIE1lcmdlV2hlbkNsYXVzZShlcykgKi8K KwlMaXN0CSAgICpyZXR1cm5pbmdMaXN0OwkvKiBsaXN0IG9mIGV4cHJlc3Npb25zIHRvIHJldHVy biAqLworCWNoYXIJICAgKnJldHVybmluZ1doZW5DbGF1c2U7CS8qIFJFVFVSTklORyAuLi4gV0lU SCBXSEVOIENMQVVTRQorCQkJCQkJCQkJCSAqIGNvbHVtbiBhbGlhcyAqLwogCVdpdGhDbGF1c2Ug KndpdGhDbGF1c2U7CQkvKiBXSVRIIGNsYXVzZSAqLwogfSBNZXJnZVN0bXQ7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEyMzRmYy4uYzhjOGI5NwotLS0g YS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaApAQCAtMjU0LDYgKzI1NCw3IEBAIHR5cGVkZWYgc3RydWN0IE1vZGlmeVRhYmxl CiAJTGlzdAkgICAqZXhjbFJlbFRsaXN0OwkvKiB0bGlzdCBvZiB0aGUgRVhDTFVERUQgcHNldWRv IHJlbGF0aW9uICovCiAJTGlzdAkgICAqbWVyZ2VBY3Rpb25MaXN0czsJLyogcGVyLXRhcmdldC10 YWJsZSBsaXN0cyBvZiBhY3Rpb25zIGZvcgogCQkJCQkJCQkJICogTUVSR0UgKi8KKwlib29sCQlo YXNSZXR1cm5pbmdXaGVuQ2xhdXNlOwkvKiBoYXMgUkVUVVJOSU5HIFdJVEggV0hFTiBDTEFVU0Ug Ki8KIH0gTW9kaWZ5VGFibGU7CiAKIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87CQkvKiBmb3J3 YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3BhcnNlci9hbmFseXplLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGM5N2JlNmUuLjM0Y2MxZWMKLS0tIGEvc3JjL2luY2x1ZGUvcGFy c2VyL2FuYWx5emUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvYW5hbHl6ZS5oCkBAIC00NCw2 ICs0NCw3IEBAIGV4dGVybiBMaXN0ICp0cmFuc2Zvcm1JbnNlcnRSb3coUGFyc2VTdGEKIAkJCQkJ CQkJYm9vbCBzdHJpcF9pbmRpcmVjdGlvbik7CiBleHRlcm4gTGlzdCAqdHJhbnNmb3JtVXBkYXRl VGFyZ2V0TGlzdChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCQkgICBMaXN0ICpvcmlnVGxp c3QpOworZXh0ZXJuIExpc3QgKnRyYW5zZm9ybVJldHVybmluZ0xpc3QoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBMaXN0ICpyZXR1cm5pbmdMaXN0KTsKIGV4dGVybiBRdWVyeSAqdHJhbnNmb3JtVG9wTGV2 ZWxTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgUmF3U3RtdCAqcGFyc2VUcmVlKTsKIGV4dGVybiBR dWVyeSAqdHJhbnNmb3JtU3RtdChQYXJzZVN0YXRlICpwc3RhdGUsIE5vZGUgKnBhcnNlVHJlZSk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjM2MjEzLi5lMzg2 MGZhCi0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9w YXJzZXIva3dsaXN0LmgKQEAgLTc5LDYgKzc5LDcgQEAgUEdfS0VZV09SRCgiY2hhcmFjdGVyaXN0 aWNzIiwgQ0hBUkFDVEVSSQogUEdfS0VZV09SRCgiY2hlY2siLCBDSEVDSywgUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNoZWNrcG9pbnQiLCBDSEVDS1BPSU5ULCBV TlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJjbGFzcyIsIENMQVNT LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlXT1JEKCJjbGF1c2UiLCBD TEFVU0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNsb3Nl IiwgQ0xPU0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImNs dXN0ZXIiLCBDTFVTVEVSLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJjb2FsZXNjZSIsIENPQUxFU0NFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9tZXJnZS5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL21lcmdlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2 YzhhMThmLi4wYWRmN2MxCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWVyZ2Uub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWVyZ2Uub3V0CkBAIC0xMjMsMjAgKzEy MywyMCBAQCBPTiB0aWQgPSB0aWQKIFdIRU4gTUFUQ0hFRCBUSEVOIERPIE5PVEhJTkc7CiBFUlJP UjogIG5hbWUgInRhcmdldCIgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlCiBERVRBSUw6ICBUaGUg bmFtZSBpcyB1c2VkIGJvdGggYXMgTUVSR0UgdGFyZ2V0IHRhYmxlIGFuZCBkYXRhIHNvdXJjZS4K LS0tIHVzZWQgaW4gYSBDVEUKKy0tIHVzZWQgaW4gYSBDVEUgd2l0aG91dCBSRVRVUk5JTkcKIFdJ VEggZm9vIEFTICgKICAgTUVSR0UgSU5UTyB0YXJnZXQgVVNJTkcgc291cmNlIE9OICh0cnVlKQog ICBXSEVOIE1BVENIRUQgVEhFTiBERUxFVEUKICkgU0VMRUNUICogRlJPTSBmb287Ci1FUlJPUjog IE1FUkdFIG5vdCBzdXBwb3J0ZWQgaW4gV0lUSCBxdWVyeQotTElORSAxOiBXSVRIIGZvbyBBUyAo Ci0gICAgICAgICAgICAgXgotLS0gdXNlZCBpbiBDT1BZCitFUlJPUjogIFdJVEggcXVlcnkgImZv byIgZG9lcyBub3QgaGF2ZSBhIFJFVFVSTklORyBjbGF1c2UKK0xJTkUgNDogKSBTRUxFQ1QgKiBG Uk9NIGZvbzsKKyAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIHVzZWQgaW4gQ09QWSB3aXRo b3V0IFJFVFVSTklORwogQ09QWSAoCiAgIE1FUkdFIElOVE8gdGFyZ2V0IFVTSU5HIHNvdXJjZSBP TiAodHJ1ZSkKICAgV0hFTiBNQVRDSEVEIFRIRU4gREVMRVRFCiApIFRPIHN0ZG91dDsKLUVSUk9S OiAgTUVSR0Ugbm90IHN1cHBvcnRlZCBpbiBDT1BZCitFUlJPUjogIENPUFkgcXVlcnkgbXVzdCBo YXZlIGEgUkVUVVJOSU5HIGNsYXVzZQogLS0gdW5zdXBwb3J0ZWQgcmVsYXRpb24gdHlwZXMKIC0t IHZpZXcKIENSRUFURSBWSUVXIHR2IEFTIFNFTEVDVCAqIEZST00gdGFyZ2V0OwpAQCAtMTI5OSwx MSArMTI5OSw2OSBAQCBXSEVOIE5PVCBNQVRDSEVEIFRIRU4KIAlJTlNFUlQgKGJhbGFuY2UsIHRp ZCkgVkFMVUVTIChiYWxhbmNlICsgZGVsdGEsIHNpZCkKIFdIRU4gTUFUQ0hFRCBBTkQgdGlkIDwg MiBUSEVOCiAJREVMRVRFCi1SRVRVUk5JTkcgKjsKLUVSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9y IG5lYXIgIlJFVFVSTklORyIKLUxJTkUgMTA6IFJFVFVSTklORyAqOwotICAgICAgICAgXgorUkVU VVJOSU5HIHQuKjsKKyB0aWQgfCBiYWxhbmNlIAorLS0tLS0rLS0tLS0tLS0tCisgIC0xIHwgICAg IC0xMQorICAgMSB8ICAgICAxMDAKKygyIHJvd3MpCisKK1JPTExCQUNLOworLS0gUkVUVVJOSU5H IC4uLiBXSVRIIFdIRU4gQ0xBVVNFCitCRUdJTjsKK0lOU0VSVCBJTlRPIHNxX3NvdXJjZSAoc2lk LCBiYWxhbmNlLCBkZWx0YSkgVkFMVUVTICgtMSwgLTEsIC0xMCk7CitXSVRIIHQgQVMgKAorICAg IE1FUkdFIElOVE8gc3FfdGFyZ2V0IHQKKyAgICBVU0lORyB2CisgICAgT04gdGlkID0gc2lkCisg ICAgV0hFTiBNQVRDSEVEIEFORCB0aWQgPiAyIFRIRU4KKyAgICAgICAgVVBEQVRFIFNFVCBiYWxh bmNlID0gdC5iYWxhbmNlICsgZGVsdGEKKyAgICBXSEVOIE5PVCBNQVRDSEVEIFRIRU4KKyAgICAg ICAgSU5TRVJUIChiYWxhbmNlLCB0aWQpIFZBTFVFUyAoYmFsYW5jZSArIGRlbHRhLCBzaWQpCisg ICAgV0hFTiBNQVRDSEVEIEFORCB0aWQgPCAyIFRIRU4KKyAgICAgICAgREVMRVRFCisgICAgUkVU VVJOSU5HIHQuKiBXSVRIIFdIRU4gQ0xBVVNFCispCitTRUxFQ1QgQ0FTRSB3aGVuX2NsYXVzZQor ICAgICAgICAgV0hFTiAxIFRIRU4gJ1VQREFURScKKyAgICAgICAgIFdIRU4gMiBUSEVOICdJTlNF UlQnCisgICAgICAgICBXSEVOIDMgVEhFTiAnREVMRVRFJworICAgICAgIEVORCwgKgorRlJPTSB0 OworICBjYXNlICB8IHRpZCB8IGJhbGFuY2UgfCB3aGVuX2NsYXVzZSAKKy0tLS0tLS0tKy0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgSU5TRVJUIHwgIC0xIHwgICAgIC0xMSB8ICAgICAg ICAgICAyCisgREVMRVRFIHwgICAxIHwgICAgIDEwMCB8ICAgICAgICAgICAzCisoMiByb3dzKQor CiBST0xMQkFDSzsKKy0tIFJFVFVSTklORyAuLi4gV0lUSCBXSEVOIENMQVVTRSBbQVNdIGFsaWFz CitNRVJHRSBJTlRPIHNxX3RhcmdldCB0CitVU0lORyBzcV9zb3VyY2UgcworT04gdGlkID0gc2lk CitXSEVOIE1BVENIRUQgQU5EIHRpZCA9IDEgVEhFTgorICAgIERPIE5PVEhJTkcKK1dIRU4gTUFU Q0hFRCBUSEVOCisgICAgVVBEQVRFIFNFVCBiYWxhbmNlID0gdC5iYWxhbmNlICsgZGVsdGEKK1JF VFVSTklORyB0LiogV0lUSCBXSEVOIENMQVVTRSBBUyB3YzsKKyB0aWQgfCBiYWxhbmNlIHwgd2Mg CistLS0tLSstLS0tLS0tLS0rLS0tLQorICAgMiB8ICAgICAyMjAgfCAgMgorKDEgcm93KQorCitN RVJHRSBJTlRPIHNxX3RhcmdldCB0CitVU0lORyBzcV9zb3VyY2UgcworT04gdGlkID0gc2lkCitX SEVOIE1BVENIRUQgQU5EIHRpZCA9IDIgVEhFTgorICAgIFVQREFURSBTRVQgYmFsYW5jZSA9IHQu YmFsYW5jZSAtIGRlbHRhCitXSEVOIE1BVENIRUQgVEhFTgorICAgIERPIE5PVEhJTkcKK1JFVFVS TklORyB0LiogV0lUSCBXSEVOIENMQVVTRSB3YzsKKyB0aWQgfCBiYWxhbmNlIHwgd2MgCistLS0t LSstLS0tLS0tLS0rLS0tLQorICAgMiB8ICAgICAyMDAgfCAgMQorKDEgcm93KQorCiAtLSBFWFBM QUlOCiBDUkVBVEUgVEFCTEUgZXhfbXRhcmdldCAoYSBpbnQsIGIgaW50KQogICBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQ9b2ZmKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21l cmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21lcmdlLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA5OGZlMTA0Li40MmYyNDgzCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21l cmdlLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9tZXJnZS5zcWwKQEAgLTg2LDEyICs4 NiwxMiBAQCBNRVJHRSBJTlRPIHRhcmdldAogVVNJTkcgdGFyZ2V0CiBPTiB0aWQgPSB0aWQKIFdI RU4gTUFUQ0hFRCBUSEVOIERPIE5PVEhJTkc7Ci0tLSB1c2VkIGluIGEgQ1RFCistLSB1c2VkIGlu IGEgQ1RFIHdpdGhvdXQgUkVUVVJOSU5HCiBXSVRIIGZvbyBBUyAoCiAgIE1FUkdFIElOVE8gdGFy Z2V0IFVTSU5HIHNvdXJjZSBPTiAodHJ1ZSkKICAgV0hFTiBNQVRDSEVEIFRIRU4gREVMRVRFCiAp IFNFTEVDVCAqIEZST00gZm9vOwotLS0gdXNlZCBpbiBDT1BZCistLSB1c2VkIGluIENPUFkgd2l0 aG91dCBSRVRVUk5JTkcKIENPUFkgKAogICBNRVJHRSBJTlRPIHRhcmdldCBVU0lORyBzb3VyY2Ug T04gKHRydWUpCiAgIFdIRU4gTUFUQ0hFRCBUSEVOIERFTEVURQpAQCAtODU0LDkgKzg1NCw1MSBA QCBXSEVOIE5PVCBNQVRDSEVEIFRIRU4KIAlJTlNFUlQgKGJhbGFuY2UsIHRpZCkgVkFMVUVTIChi YWxhbmNlICsgZGVsdGEsIHNpZCkKIFdIRU4gTUFUQ0hFRCBBTkQgdGlkIDwgMiBUSEVOCiAJREVM RVRFCi1SRVRVUk5JTkcgKjsKK1JFVFVSTklORyB0Lio7CitST0xMQkFDSzsKKworLS0gUkVUVVJO SU5HIC4uLiBXSVRIIFdIRU4gQ0xBVVNFCitCRUdJTjsKK0lOU0VSVCBJTlRPIHNxX3NvdXJjZSAo c2lkLCBiYWxhbmNlLCBkZWx0YSkgVkFMVUVTICgtMSwgLTEsIC0xMCk7CitXSVRIIHQgQVMgKAor ICAgIE1FUkdFIElOVE8gc3FfdGFyZ2V0IHQKKyAgICBVU0lORyB2CisgICAgT04gdGlkID0gc2lk CisgICAgV0hFTiBNQVRDSEVEIEFORCB0aWQgPiAyIFRIRU4KKyAgICAgICAgVVBEQVRFIFNFVCBi YWxhbmNlID0gdC5iYWxhbmNlICsgZGVsdGEKKyAgICBXSEVOIE5PVCBNQVRDSEVEIFRIRU4KKyAg ICAgICAgSU5TRVJUIChiYWxhbmNlLCB0aWQpIFZBTFVFUyAoYmFsYW5jZSArIGRlbHRhLCBzaWQp CisgICAgV0hFTiBNQVRDSEVEIEFORCB0aWQgPCAyIFRIRU4KKyAgICAgICAgREVMRVRFCisgICAg UkVUVVJOSU5HIHQuKiBXSVRIIFdIRU4gQ0xBVVNFCispCitTRUxFQ1QgQ0FTRSB3aGVuX2NsYXVz ZQorICAgICAgICAgV0hFTiAxIFRIRU4gJ1VQREFURScKKyAgICAgICAgIFdIRU4gMiBUSEVOICdJ TlNFUlQnCisgICAgICAgICBXSEVOIDMgVEhFTiAnREVMRVRFJworICAgICAgIEVORCwgKgorRlJP TSB0OwogUk9MTEJBQ0s7CiAKKy0tIFJFVFVSTklORyAuLi4gV0lUSCBXSEVOIENMQVVTRSBbQVNd IGFsaWFzCitNRVJHRSBJTlRPIHNxX3RhcmdldCB0CitVU0lORyBzcV9zb3VyY2UgcworT04gdGlk ID0gc2lkCitXSEVOIE1BVENIRUQgQU5EIHRpZCA9IDEgVEhFTgorICAgIERPIE5PVEhJTkcKK1dI RU4gTUFUQ0hFRCBUSEVOCisgICAgVVBEQVRFIFNFVCBiYWxhbmNlID0gdC5iYWxhbmNlICsgZGVs dGEKK1JFVFVSTklORyB0LiogV0lUSCBXSEVOIENMQVVTRSBBUyB3YzsKKworTUVSR0UgSU5UTyBz cV90YXJnZXQgdAorVVNJTkcgc3Ffc291cmNlIHMKK09OIHRpZCA9IHNpZAorV0hFTiBNQVRDSEVE IEFORCB0aWQgPSAyIFRIRU4KKyAgICBVUERBVEUgU0VUIGJhbGFuY2UgPSB0LmJhbGFuY2UgLSBk ZWx0YQorV0hFTiBNQVRDSEVEIFRIRU4KKyAgICBETyBOT1RISU5HCitSRVRVUk5JTkcgdC4qIFdJ VEggV0hFTiBDTEFVU0Ugd2M7CisKIC0tIEVYUExBSU4KIENSRUFURSBUQUJMRSBleF9tdGFyZ2V0 IChhIGludCwgYiBpbnQpCiAgIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1vZmYpOwo= --000000000000cd619405f1bfc813--