Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfKER-005OOa-2K for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jul 2026 16:25:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfKEP-002Dht-1X for pgsql-hackers@arkaria.postgresql.org; Thu, 02 Jul 2026 16:25:41 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wfKEO-002Dhl-27 for pgsql-hackers@lists.postgresql.org; Thu, 02 Jul 2026 16:25:41 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfKEL-00000001F2e-44KU for pgsql-hackers@postgresql.org; Thu, 02 Jul 2026 16:25:39 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-c126fe7d0f3so259754266b.0 for ; Thu, 02 Jul 2026 09:25:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783009536; cv=none; d=google.com; s=arc-20260327; b=fhw9txuJtf3VjPo/LJWEjZQAHra2NXk7p0N/nwcFhbk+B14Xa1Tkk1gSLVieuYiFQp UsN096ivgC6PWT5lZVbodVNFtDcL2d6WXI/IMP22L6QEGLZmSxAMDsXL2fPQKgnfsaO2 j6i0JqparUIFFWXrOCFjn+i1cCou3toLfkokpMnzzC7dZO1kW0ZbIuPFQiHmtGjJ9OX/ o+CSM4Q/Wis7/GZaiTmeDxqTy7GZrjuQBBnsGq5TTGxYUCSApKo7LJCrixQ+FRbQqQo7 GY/xyysQfcul2EuuSIV/EUbT1YTIH6nty0jwy/uGy5w+azLOgxTZ0Pm2VJq6MdSOdW8e g89Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=tJvwzziUPDCdQ6jlyBzbwSyc93Zieeq31hbEQqhPlr4=; fh=NPQhi8X2icO/dzI2s9q2Px8GDzeEFyIjwrGqWUj9bzo=; b=mXVMUU4me9d/kvyxVwLw6eHuyBaob7efA3BddiXTSZR60mCCIqrlvd6Rs3tQes6fqI SeEtScw1WVQKoWuG2BMV2unpDEHmYRqZ/U7KrIxy2c3tCRCUkq9s3JwWAqQJg5Eunqr0 j4ZbI8moE54xvAXMDfQB7oEWngxS5KM73C+pxcsTtcg5dHf7V/5AfoIe5mTiV2MzUGm7 PsJzsyGrH5G8IMJuNxm+aQO/E4F1eNPcgdPZr6kMdjrvkl2NpGDOTjQ+ffdcBx5Dk+VU oJlKK1VeKNxOrYVGysUcMCI4ZdeP8Tn01ebJKhAlTmCqIgDoNGIS/HkDdGcYU5vHaayB DDFg==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783009536; x=1783614336; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=tJvwzziUPDCdQ6jlyBzbwSyc93Zieeq31hbEQqhPlr4=; b=IPIYpPXrlCUY6zvR9jtLSLlHblpZtHnN0vu8DPxyuPQiKDeFZl1Oz8Ru4Qg6NXAcc3 eGtaxP5bLWmDuTRCoTTHcOBiZxhQXDEi2R13wk/BAwyRCawnbMMJo8B/D6cqIwxWtUhH fTYSPmJ0de2SY3ldcc7B1I1bYQnITwEBejQxHOfuCOUct7L7dKw6dSimxax74pC4RoJj oovXqJjgU94kQrG9lqhED5IdwlIj6N+8gWfaIvge3wL7cXDxVFcu/6LsOsVWuBuPs3Uw 1YqZ+vjbkSlqGLQ91/bv57YxHwAHU6uDpRTIf74HOrfhEXd+gBV1ivv3w3VoBJ9PrH2o 4w4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783009536; x=1783614336; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tJvwzziUPDCdQ6jlyBzbwSyc93Zieeq31hbEQqhPlr4=; b=MRP7jcliWbY6FMgsKzjiWKz1tEqyDdhTd0rdjcMPQhqIJqrdWnRs7QIgGWSzg5Rc6W oHdSeRZnNYMR/Ez1ELJFh10Zufi7xWqgR3TdAKGzYq5akVJbAwWsEhfHl0XIQUAPgcSy D6aKcPfFZgfki98s2TT2Im7LEcinD0MghSHRXJ6W97zGbmUW6sPFdY0FftZw6ZccQiTX nfDCsA93LCgbXDPfZQ5h/5WPDM6t8H1RGmokv4I7Qm5QukiC5KemuzmfcCoLx1Q50gZo c/zn15aJ+9Yzyq7zS/adg38eiIR0Kci5EapLEzvTqyxac8olhwJWCSbw2BBz73JWCOCA hnZg== X-Gm-Message-State: AOJu0YyF8m6MlCy6dZ+UnYyBjL2IkkQL4eke2td+X/xnETCrMLHkdpND JRovbLCNwTTk3TpXHmkhiDjzTBNusXNQ7mYgGsbnX7Z3IW1Cw402DmZ4aM0Q8uYhMgZjdXOFmqS XDr4PdmG2Fi41dmELoNAiL1Cf+3nhtQRSELX2 X-Gm-Gg: AfdE7clwG7OYhJTkIioD//wFSBNOZFN5pmM6o/XCragHx15ZL2P+UwhpHnWGGuuGqle J1AGQIW2vJaQs0b3toEryplj5pLyZq6bzqixmwgLS80dOc2clcYwdrU7DdOsQ4gw4JrjS1knI2n 6rJc42yAg17jvheSdAjZmbMkThQdg/kKlVkVB1E04EJStdH0ASLgK0vy3tK9NFFc1s60eWjGxaJ t68tRPQE7RiuXJqRtXis7JxWOdDKxDs3yO1DTQdW9sO+VoH4dAIuQ3FHvSQ6A8zRDmdYDUiEDYR 7dPT+11ynkGd83V0GjWmVq+77TaiVQ1CMQ/Xm6jD X-Received: by 2002:a17:907:c0d:b0:c12:34ed:e104 with SMTP id a640c23a62f3a-c12aa19f3a6mr330071766b.54.1783009536414; Thu, 02 Jul 2026 09:25:36 -0700 (PDT) MIME-Version: 1.0 From: Robert Haas Date: Thu, 2 Jul 2026 12:25:23 -0400 X-Gm-Features: AVVi8CePfLf1a6384jFRGjF9q795C8hgnYNIOpbd9tMEnwJJhG2a9upXpSMyR1o Message-ID: Subject: json/jsonb cleanup + FmgrInfo caching To: "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="0000000000000cfb1a0655a342ab" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000cfb1a0655a342ab Content-Type: text/plain; charset="UTF-8" Hi, While working on my "sandboxing untrusted code" project, I found myself investigating how the JSON and JSONB code calls type output and cast functions. I feel like this needs some cleanup in order to avoid blocking that project, and it turns out that there are also significant opportunities to improve performance, so here are some patches. One caveat: one of these patches causes a small backward compatibility break, because the current behavior is wrong. See below for full details. First, a quick performance demonstration: CREATE TABLE hstores AS SELECT hstore('k', g::text) x FROM generate_series(1,4000000) g; SELECT any_value(json_build_object('a', x)) FROM hstores; Unpatched, median-of-three runs was 398.571 ms. Patched, 193.714 ms. That's a 2.05x speedup, which is the highest I observed in my test queries. What I found is that this technique shows the largest gains with user-defined types like hstore, smaller gains with built-in types like int, and the smallest gains of all with container types such as a user-defined record type. Generally, jsonb benefited more than json. The aggregates - json_agg and jsonb_agg - showed very little benefit or even small regressions, but I'm pretty confident that the regressions are simply noise that goes away with a sufficiently large number of sufficiently-careful test runs. Everything else gets faster, often by 50%+. Leaving aside the aggregates which are expected to show little or no benefit, here's one of the less-sympathetic cases: CREATE TABLE ints AS SELECT x FROM generate_series(1,4000000) x; SELECT any_value(to_json(x)) FROM ints; The speedup is smaller here because it's json rather than jsonb and because it's int rather than hstore, but it's still 117.461 ms unpatched vs. 89.895 patched, a 30% speedup. OK, now let's go through the patches: 0001 refactors the json_categorize_type() function to initialize an FmgrInfo instead of returning a base function OID. All of the built-in JSON aggregates are updated to cache this FmgrInfo across calls, but it really doesn't save much. In the process of working on this refactoring it came to light that the current behavior of json_check_mutability() is incorrect: it erroneously treats record, anyarray, and anycompatiblearray as immutable when in fact they should be treated as stable. This refactoring preserves that incorrect behavior. 0002 fixes the bug discovered during the development of 0001 by removing the special case. AFAICT, the anyarray and anycompatiblearray cases are unreachable, but the record case is reachable, and the included test case shows how this could hypothetically matter. It seems unlikely we'll inconvenience any significant number of users by changing this, but in theory somebody's upgrade could fail. 0003 moves some code around to avoid problems with circular header dependencies, creating new files jsontypes.c/h. 0004 refactors the SQL-level JSON constructors -- JSON_OBJECT, JSON_ARRAY, and JSON_SCALAR -- to make use of the new type caching infrastructure. 0005 refactors the SQL-callable functions similarly. This means to_json(b), json(b)_build_object, and json(b)_build_array. Thanks, -- Robert Haas EDB: http://www.enterprisedb.com --0000000000000cfb1a0655a342ab Content-Type: application/octet-stream; name="v1-0003-Create-jsontypes.c-h-and-use-that-to-tidy-up-a-fe.patch" Content-Disposition: attachment; filename="v1-0003-Create-jsontypes.c-h-and-use-that-to-tidy-up-a-fe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3prptz2 RnJvbSBlZTdkYjBkODRiZWQwZDk2MDg1NTVmYzg0N2Q0ODVlZDUxZDk4MDA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNCBBcHIgMjAyNiAxODoyMjozMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMy81 XSBDcmVhdGUganNvbnR5cGVzLmMvaCBhbmQgdXNlIHRoYXQgdG8gdGlkeSB1cCBhIGZldwogdGhp bmdzCgpUbyBhdm9pZCBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBqc29uYi5oLCBkYXR1bV90 b19qc29uYiBoYXMKdXAgdW50aWwgbm93IGJlZW4gZGVjbGFyZWQgaW4ganNvbmZ1bmNzLmgsIGJl Y2F1c2UgaXQgZGVwZW5kcyBvbgpKc29uVHlwZUNhdGVnb3J5LCB3aGljaCBpcyBhbHNvIGRlY2xh cmVkIGluIGpzb25mdW5jcy5oLiBUaGlzIGlzCm5vdCBncmVhdCwgYmVjYXVzZSBpdCdzIGRlZmlu ZWQgaW4ganNvbmIuYy4gVGhlIG5hdHVyYWwgd2F5IHRvCmdldCB0aGlzIGRlY2xhcmF0aW9uIGlu dG8ganNvbmIuaCB3b3VsZCBiZSB0byBtYWtlIHRoYXQgZmlsZQppbmNsdWRlIGpzb25mdW5jcy5o LCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgYmVjYXVzZSBqc29uZnVuY3MuaAphbHJlYWR5IGluY2x1 ZGVzIGpzb25iLmguCgpUaGUgYmVzdCBzb2x1dGlvbiBzZWVtcyB0byBiZSB0byBjcmVhdGUgYSBu ZXcgaGVhZGVyIGZpbGUsIHNpbmNlIG92ZXIKdGltZSBqc29uZnVuY3MuaCBoYXMgYmVjb21lIGNs dXR0ZXJlZCB3aXRoIHZhcmlvdXMga2luZHMgb2YgdW5yZWxhdGVkCmRlY2xhcmF0aW9ucy4gU28s IGNyZWF0ZSBqc29udHlwZXMuaCBhbmQgbW92ZSB0aGUgZGVjbGFyYXRpb24gb2YKSnNvblR5cGVD YXRlZ29yeSB0aGVyZSwgYWxvbmcgd2l0aCB0aGUgcHVibGljIGZ1bmN0aW9ucyB0aGF0IGRlcGVu ZCBvbgppdCwgYW5kIG1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgQyBjb2RlIHRvIGEgbmV3IGZpbGUg anNvbnR5cGVzLmMuIFRoaXMKbmV3IGhlYWRlciBmaWxlIGlzIHRoZW4gaW5jbHVkZWQgYnkgYm90 aCBqc29uLmggYW5kIGpzb25iLmgsIGFsbG93aW5nCmRhdHVtX3RvX2pzb24gYW5kIGRhdHVtX3Rv X2pzb25iIHRvIGJlIGRlY2xhcmVkIGluIGpzb24uaCBhbmQganNvbmIuaCwKbWF0Y2hpbmcgd2hl cmUgdGhleSBhcmUgZGVmaW5lZC4KClRoaXMgYWxzbyBwYXZlcyB0aGUgd2F5IGZvciBicm9hZGVy IHVzZSBvZiBKc29uVHlwZUNhdGVnb3J5LCB3aGljaAp3b3VsZCBvdGhlcndpc2UgcmVxdWlyZSBp bmNyZWFzaW5nbHkgdWdseSBoYWNrcy4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvTWFrZWZp bGUgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jIHwgMjIxIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb250eXBl cy5jIHwgMjQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L21lc29uLmJ1aWxkIHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2pzb24uaCAgICAg ICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS91dGlscy9qc29uYi5oICAgICAgICAgfCAgIDMgKwog c3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmggICAgIHwgIDI1IC0tLQogc3JjL2luY2x1ZGUv dXRpbHMvanNvbnR5cGVzLmggICAgIHwgIDQxICsrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDI5MyBp bnNlcnRpb25zKCspLCAyNDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb250eXBlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1 ZGUvdXRpbHMvanNvbnR5cGVzLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvTWFrZWZpbGUKaW5kZXggMGM3NjIxOTU3 YzEuLjVkNjA0ODUwNDY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvTWFrZWZp bGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L01ha2VmaWxlCkBAIC01Niw2ICs1Niw3IEBA IE9CSlMgPSBcCiAJanNvbmJfdXRpbC5vIFwKIAlqc29uZnVuY3MubyBcCiAJanNvbmJzdWJzLm8g XAorCWpzb250eXBlcy5vIFwKIAlqc29ucGF0aC5vIFwKIAlqc29ucGF0aF9leGVjLm8gXAogCWpz b25wYXRoX2dyYW0ubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1 bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKaW5kZXggYzI4OWRiYWU3 MTUuLmY5MzFmMzg4NDY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jCkBAIC01MDYsOCAr NTA2LDYgQEAgc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVl c19vYmplY3RfZmllbGRfc3RhcnQodm9pZCAqc3RhdGUKIHN0YXRpYyBKc29uUGFyc2VFcnJvclR5 cGUgdHJhbnNmb3JtX3N0cmluZ192YWx1ZXNfYXJyYXlfZWxlbWVudF9zdGFydCh2b2lkICpzdGF0 ZSwgYm9vbCBpc251bGwpOwogc3RhdGljIEpzb25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3Ry aW5nX3ZhbHVlc19zY2FsYXIodm9pZCAqc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeXBl IHRva2VudHlwZSk7CiAKLS8qIGZ1bmN0aW9uIHN1cHBvcnRpbmcganNvbl9jYXRlZ29yaXplX3R5 cGUvanNvbl9jaGVja19tdXRhYmlsaXR5ICovCi1zdGF0aWMgT2lkIGdldF9qc29uX2Nhc3RfZm9y X3R5cGUoT2lkIHR5cG9pZCk7CiAKIC8qCiAgKiBwZ19wYXJzZV9qc29uX29yX2VycnNhdmUKQEAg LTU5NTcsMjIyICs1OTU1LDMgQEAganNvbl9nZXRfZmlyc3RfdG9rZW4odGV4dCAqanNvbiwgYm9v bCB0aHJvd19lcnJvcikKIAogCXJldHVybiBKU09OX1RPS0VOX0lOVkFMSUQ7CS8qIGludmFsaWQg anNvbiAqLwogfQotCi0vKgotICogRGV0ZXJtaW5lIGhvdyB3ZSB3YW50IHRvIHByaW50IHZhbHVl cyBvZiBhIGdpdmVuIHR5cGUgaW4gZGF0dW1fdG9fanNvbihiKS4KLSAqCi0gKiBHaXZlbiB0aGUg ZGF0YXR5cGUgT0lELCByZXR1cm4gaXRzIEpzb25UeXBlQ2F0ZWdvcnksIGFzIHdlbGwgYXMgYW4g Rm1nckluZm8KLSAqIGZvciB0aGUgdHlwZSdzIG91dHB1dCBmdW5jdGlvbiBvciBjYXN0IGZ1bmN0 aW9uLiAgRm9yIGNhdGVnb3JpZXMgdGhhdCBkbyBub3QKLSAqIHJlcXVpcmUgY2FsbGluZyBhIGZ1 bmN0aW9uLCBvdXRmbGluZm8gaXMgbm90IHRvdWNoZWQuCi0gKi8KLXZvaWQKLWpzb25fY2F0ZWdv cml6ZV90eXBlKE9pZCB0eXBvaWQsIGJvb2wgaXNfanNvbmIsCi0JCQkJCSBKc29uVHlwZUNhdGVn b3J5ICp0Y2F0ZWdvcnksIEZtZ3JJbmZvICpvdXRmbGluZm8pCi17Ci0JYm9vbAkJdXNlX3R5cGVf b3V0cHV0X2Z1bmN0aW9uID0gZmFsc2U7Ci0KLQkvKiBMb29rIHRocm91Z2ggYW55IGRvbWFpbiAq LwotCXR5cG9pZCA9IGdldEJhc2VUeXBlKHR5cG9pZCk7Ci0KLQlzd2l0Y2ggKHR5cG9pZCkKLQl7 Ci0JCWNhc2UgQk9PTE9JRDoKLQkJCSp0Y2F0ZWdvcnkgPSBKU09OVFlQRV9CT09MOwotCQkJYnJl YWs7Ci0KLQkJY2FzZSBJTlQyT0lEOgotCQljYXNlIElOVDRPSUQ6Ci0JCWNhc2UgSU5UOE9JRDoK LQkJY2FzZSBGTE9BVDRPSUQ6Ci0JCWNhc2UgRkxPQVQ4T0lEOgotCQljYXNlIE5VTUVSSUNPSUQ6 Ci0JCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24gPSB0cnVlOwotCQkJKnRjYXRlZ29yeSA9IEpT T05UWVBFX05VTUVSSUM7Ci0JCQlicmVhazsKLQotCQljYXNlIERBVEVPSUQ6Ci0JCQkqdGNhdGVn b3J5ID0gSlNPTlRZUEVfREFURTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVElNRVNUQU1QT0lEOgot CQkJKnRjYXRlZ29yeSA9IEpTT05UWVBFX1RJTUVTVEFNUDsKLQkJCWJyZWFrOwotCi0JCWNhc2Ug VElNRVNUQU1QVFpPSUQ6Ci0JCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfVElNRVNUQU1QVFo7Ci0J CQlicmVhazsKLQotCQljYXNlIEpTT05PSUQ6Ci0JCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24g PSAhaXNfanNvbmI7Ci0JCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfSlNPTjsKLQkJCWJyZWFrOwot Ci0JCWNhc2UgSlNPTkJPSUQ6Ci0JCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24gPSAhaXNfanNv bmI7Ci0JCQkqdGNhdGVnb3J5ID0gaXNfanNvbmIgPyBKU09OVFlQRV9KU09OQiA6IEpTT05UWVBF X0pTT047Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJLyogQ2hlY2sgZm9yIGFycmF5cyBh bmQgY29tcG9zaXRlcyAqLwotCQkJaWYgKE9pZElzVmFsaWQoZ2V0X2VsZW1lbnRfdHlwZSh0eXBv aWQpKSB8fCB0eXBvaWQgPT0gQU5ZQVJSQVlPSUQKLQkJCQl8fCB0eXBvaWQgPT0gQU5ZQ09NUEFU SUJMRUFSUkFZT0lEIHx8IHR5cG9pZCA9PSBSRUNPUkRBUlJBWU9JRCkKLQkJCQkqdGNhdGVnb3J5 ID0gSlNPTlRZUEVfQVJSQVk7Ci0JCQllbHNlIGlmICh0eXBlX2lzX3Jvd3R5cGUodHlwb2lkKSkJ LyogaW5jbHVkZXMgUkVDT1JET0lEICovCi0JCQkJKnRjYXRlZ29yeSA9IEpTT05UWVBFX0NPTVBP U0lURTsKLQkJCWVsc2UKLQkJCXsKLQkJCQlPaWQJCQljYXN0ZnVuYyA9IGdldF9qc29uX2Nhc3Rf Zm9yX3R5cGUodHlwb2lkKTsKLQotCQkJCWlmIChPaWRJc1ZhbGlkKGNhc3RmdW5jKSkKLQkJCQl7 Ci0JCQkJCWZtZ3JfaW5mbyhjYXN0ZnVuYywgb3V0ZmxpbmZvKTsKLQkJCQkJKnRjYXRlZ29yeSA9 IEpTT05UWVBFX0NBU1Q7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXVzZV90eXBlX291 dHB1dF9mdW5jdGlvbiA9IHRydWU7Ci0JCQkJCSp0Y2F0ZWdvcnkgPSBKU09OVFlQRV9PVEhFUjsK LQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQl9Ci0KLQlpZiAodXNlX3R5cGVfb3V0cHV0X2Z1bmN0 aW9uKQotCXsKLQkJT2lkCQkJdHlwb3V0cHV0OwotCQlib29sCQl0eXBpc3ZhcmxlbmE7Ci0KLQkJ Z2V0VHlwZU91dHB1dEluZm8odHlwb2lkLCAmdHlwb3V0cHV0LCAmdHlwaXN2YXJsZW5hKTsKLQkJ Zm1ncl9pbmZvKHR5cG91dHB1dCwgb3V0ZmxpbmZvKTsKLQl9Ci19Ci0KLS8qCi0gKiBDaGVjayB3 aGV0aGVyIGEgdHlwZSBjb252ZXJzaW9uIHRvIEpTT04gb3IgSlNPTkIgaW52b2x2ZXMgYW55IG11 dGFibGUKLSAqIGZ1bmN0aW9ucy4gIFRoaXMgcmVjdXJzZXMgaW50byBjb250YWluZXIgdHlwZXMg KGFycmF5cywgY29tcG9zaXRlcywKLSAqIHJhbmdlcywgbXVsdGlyYW5nZXMsIGRvbWFpbnMpIHRv IGNoZWNrIHRoZWlyIGVsZW1lbnQvc3ViIHR5cGVzLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBp bml0aWFsaXplICpoYXNfbXV0YWJsZSB0byBmYWxzZSBiZWZvcmUgY2FsbGluZy4KLSAqIElmIGFu eSBtdXRhYmxlIGZ1bmN0aW9uIGlzIGZvdW5kLCAqaGFzX211dGFibGUgaXMgc2V0IHRvIHRydWUu Ci0gKi8KLXZvaWQKLWpzb25fY2hlY2tfbXV0YWJpbGl0eShPaWQgdHlwb2lkLCBib29sICpoYXNf bXV0YWJsZSkKLXsKLQljaGFyCQlhdHRfdHlwdHlwZSA9IGdldF90eXB0eXBlKHR5cG9pZCk7Ci0K LQkvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2VzLCBpdCBjb3VsZCBiZSBkcml2ZW4gdG8g c3RhY2sgb3ZlcmZsb3cgKi8KLQljaGVja19zdGFja19kZXB0aCgpOwotCi0JQXNzZXJ0KGhhc19t dXRhYmxlICE9IE5VTEwpOwotCi0JaWYgKCpoYXNfbXV0YWJsZSkKLQkJcmV0dXJuOwotCi0JaWYg KGF0dF90eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQotCXsKLQkJanNvbl9jaGVja19tdXRhYmls aXR5KGdldEJhc2VUeXBlKHR5cG9pZCksIGhhc19tdXRhYmxlKTsKLQkJcmV0dXJuOwotCX0KLQll bHNlIGlmIChhdHRfdHlwdHlwZSA9PSBUWVBUWVBFX0NPTVBPU0lURSkKLQl7Ci0JCS8qCi0JCSAq IEZvciBhIGNvbXBvc2l0ZSB0eXBlLCByZWN1cnNlIGludG8gaXRzIGF0dHJpYnV0ZXMuICBVc2Ug dGhlCi0JCSAqIHR5cGNhY2hlIHRvIGF2b2lkIG9wZW5pbmcgdGhlIHJlbGF0aW9uIGRpcmVjdGx5 LgotCQkgKi8KLQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBsb29rdXBfcm93dHlwZV90dXBkZXNjKHR5 cG9pZCwgLTEpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykK LQkJewotCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywg aSk7Ci0KLQkJCWlmIChhdHRyLT5hdHRpc2Ryb3BwZWQpCi0JCQkJY29udGludWU7Ci0KLQkJCWpz b25fY2hlY2tfbXV0YWJpbGl0eShhdHRyLT5hdHR0eXBpZCwgaGFzX211dGFibGUpOwotCQkJaWYg KCpoYXNfbXV0YWJsZSkKLQkJCQlicmVhazsKLQkJfQotCQlSZWxlYXNlVHVwbGVEZXNjKHR1cGRl c2MpOwotCQlyZXR1cm47Ci0JfQotCWVsc2UgaWYgKGF0dF90eXB0eXBlID09IFRZUFRZUEVfUkFO R0UpCi0JewotCQlqc29uX2NoZWNrX211dGFiaWxpdHkoZ2V0X3JhbmdlX3N1YnR5cGUodHlwb2lk KSwgaGFzX211dGFibGUpOwotCQlyZXR1cm47Ci0JfQotCWVsc2UgaWYgKGF0dF90eXB0eXBlID09 IFRZUFRZUEVfTVVMVElSQU5HRSkKLQl7Ci0JCWpzb25fY2hlY2tfbXV0YWJpbGl0eShnZXRfbXVs dGlyYW5nZV9yYW5nZSh0eXBvaWQpLCBoYXNfbXV0YWJsZSk7Ci0JCXJldHVybjsKLQl9Ci0JZWxz ZQotCXsKLQkJT2lkCQkJYXR0X3R5cGVsZW0gPSBnZXRfZWxlbWVudF90eXBlKHR5cG9pZCk7Ci0K LQkJaWYgKE9pZElzVmFsaWQoYXR0X3R5cGVsZW0pKQotCQl7Ci0JCQkvKiByZWN1cnNlIGludG8g YXJyYXkgZWxlbWVudCB0eXBlICovCi0JCQlqc29uX2NoZWNrX211dGFiaWxpdHkoYXR0X3R5cGVs ZW0sIGhhc19tdXRhYmxlKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCXN3aXRjaCAodHlwb2lk KQotCXsKLQkJY2FzZSBCT09MT0lEOgotCQljYXNlIElOVDJPSUQ6Ci0JCWNhc2UgSU5UNE9JRDoK LQkJY2FzZSBJTlQ4T0lEOgotCQljYXNlIEZMT0FUNE9JRDoKLQkJY2FzZSBGTE9BVDhPSUQ6Ci0J CWNhc2UgTlVNRVJJQ09JRDoKLQkJY2FzZSBKU09OT0lEOgotCQljYXNlIEpTT05CT0lEOgotCQkJ Lyoga25vd24gaW1tdXRhYmxlICovCi0JCQlicmVhazsKLQkJY2FzZSBEQVRFT0lEOgotCQljYXNl IFRJTUVTVEFNUE9JRDoKLQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKLQkJCSpoYXNfbXV0YWJsZSA9 IHRydWU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXsKLQkJCQlPaWQJCQljYXN0ZnVuYyA9 IGdldF9qc29uX2Nhc3RfZm9yX3R5cGUodHlwb2lkKTsKLQkJCQlPaWQJCQlmdW5jb2lkOwotCi0J CQkJaWYgKE9pZElzVmFsaWQoY2FzdGZ1bmMpKQotCQkJCQlmdW5jb2lkID0gY2FzdGZ1bmM7Ci0J CQkJZWxzZQotCQkJCXsKLQkJCQkJYm9vbAkJdHlwaXN2YXJsZW5hOwotCi0JCQkJCWdldFR5cGVP dXRwdXRJbmZvKHR5cG9pZCwgJmZ1bmNvaWQsICZ0eXBpc3ZhcmxlbmEpOwotCQkJCX0KLQkJCQlp ZiAoZnVuY192b2xhdGlsZShmdW5jb2lkKSAhPSBQUk9WT0xBVElMRV9JTU1VVEFCTEUpCi0JCQkJ CSpoYXNfbXV0YWJsZSA9IHRydWU7Ci0JCQl9Ci0JCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gKiBS ZXR1cm4gdGhlIE9JRCBvZiBhIGNhc3QgZnVuY3Rpb24gZnJvbSB0eXBvaWQgdG8gSlNPTiwgb3Ig SW52YWxpZE9pZCBpZgotICogdGhlcmUgaXMgbm8gc3VjaCBjYXN0LiAgQXMgYSBtYXR0ZXIgb2Yg cG9saWN5LCB3ZSBvbmx5IGNvbnNpZGVyIGV4cGxpY2l0LAotICogdXNlci1kZWZpbmVkIGNhc3Rz LgotICovCi1zdGF0aWMgT2lkCi1nZXRfanNvbl9jYXN0X2Zvcl90eXBlKE9pZCB0eXBvaWQpCi17 Ci0JaWYgKHR5cG9pZCA+PSBGaXJzdE5vcm1hbE9iamVjdElkKQotCXsKLQkJT2lkCQkJY2FzdGZ1 bmM7Ci0JCUNvZXJjaW9uUGF0aFR5cGUgY3R5cGU7Ci0KLQkJY3R5cGUgPSBmaW5kX2NvZXJjaW9u X3BhdGh3YXkoSlNPTk9JRCwgdHlwb2lkLAotCQkJCQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwK LQkJCQkJCQkJCSAgJmNhc3RmdW5jKTsKLQkJaWYgKGN0eXBlID09IENPRVJDSU9OX1BBVEhfRlVO QyAmJiBPaWRJc1ZhbGlkKGNhc3RmdW5jKSkKLQkJCXJldHVybiBjYXN0ZnVuYzsKLQl9Ci0JcmV0 dXJuIEludmFsaWRPaWQ7Ci19CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bnR5cGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnR5cGVzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFkYmFjZWViYzhhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb250eXBlcy5jCkBAIC0wLDAgKzEsMjQ0IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBqc29udHlwZXMuYworICoJICBGdW5jdGlvbnMgZm9y IEpTT04gdHlwZSBjYXRlZ29yaXphdGlvbi4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2pzb250eXBlcy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0 Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCisjaW5jbHVkZSAidXRp bHMvanNvbnR5cGVzLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAi dXRpbHMvdHlwY2FjaGUuaCIKKworc3RhdGljIE9pZAlnZXRfanNvbl9jYXN0X2Zvcl90eXBlKE9p ZCB0eXBvaWQpOworCisvKgorICogRGV0ZXJtaW5lIGhvdyB3ZSB3YW50IHRvIHByaW50IHZhbHVl cyBvZiBhIGdpdmVuIHR5cGUgaW4gZGF0dW1fdG9fanNvbihiKS4KKyAqCisgKiBHaXZlbiB0aGUg ZGF0YXR5cGUgT0lELCByZXR1cm4gaXRzIEpzb25UeXBlQ2F0ZWdvcnksIGFzIHdlbGwgYXMgYW4g Rm1nckluZm8KKyAqIGZvciB0aGUgdHlwZSdzIG91dHB1dCBmdW5jdGlvbiBvciBjYXN0IGZ1bmN0 aW9uLiAgRm9yIGNhdGVnb3JpZXMgdGhhdCBkbyBub3QKKyAqIHJlcXVpcmUgY2FsbGluZyBhIGZ1 bmN0aW9uLCBvdXRmbGluZm8gaXMgbm90IHRvdWNoZWQuCisgKi8KK3ZvaWQKK2pzb25fY2F0ZWdv cml6ZV90eXBlKE9pZCB0eXBvaWQsIGJvb2wgaXNfanNvbmIsCisJCQkJCSBKc29uVHlwZUNhdGVn b3J5ICp0Y2F0ZWdvcnksIEZtZ3JJbmZvICpvdXRmbGluZm8pCit7CisJYm9vbAkJdXNlX3R5cGVf b3V0cHV0X2Z1bmN0aW9uID0gZmFsc2U7CisKKwkvKiBMb29rIHRocm91Z2ggYW55IGRvbWFpbiAq LworCXR5cG9pZCA9IGdldEJhc2VUeXBlKHR5cG9pZCk7CisKKwlzd2l0Y2ggKHR5cG9pZCkKKwl7 CisJCWNhc2UgQk9PTE9JRDoKKwkJCSp0Y2F0ZWdvcnkgPSBKU09OVFlQRV9CT09MOworCQkJYnJl YWs7CisKKwkJY2FzZSBJTlQyT0lEOgorCQljYXNlIElOVDRPSUQ6CisJCWNhc2UgSU5UOE9JRDoK KwkJY2FzZSBGTE9BVDRPSUQ6CisJCWNhc2UgRkxPQVQ4T0lEOgorCQljYXNlIE5VTUVSSUNPSUQ6 CisJCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24gPSB0cnVlOworCQkJKnRjYXRlZ29yeSA9IEpT T05UWVBFX05VTUVSSUM7CisJCQlicmVhazsKKworCQljYXNlIERBVEVPSUQ6CisJCQkqdGNhdGVn b3J5ID0gSlNPTlRZUEVfREFURTsKKwkJCWJyZWFrOworCisJCWNhc2UgVElNRVNUQU1QT0lEOgor CQkJKnRjYXRlZ29yeSA9IEpTT05UWVBFX1RJTUVTVEFNUDsKKwkJCWJyZWFrOworCisJCWNhc2Ug VElNRVNUQU1QVFpPSUQ6CisJCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfVElNRVNUQU1QVFo7CisJ CQlicmVhazsKKworCQljYXNlIEpTT05PSUQ6CisJCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24g PSAhaXNfanNvbmI7CisJCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfSlNPTjsKKwkJCWJyZWFrOwor CisJCWNhc2UgSlNPTkJPSUQ6CisJCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24gPSAhaXNfanNv bmI7CisJCQkqdGNhdGVnb3J5ID0gaXNfanNvbmIgPyBKU09OVFlQRV9KU09OQiA6IEpTT05UWVBF X0pTT047CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogQ2hlY2sgZm9yIGFycmF5cyBh bmQgY29tcG9zaXRlcyAqLworCQkJaWYgKE9pZElzVmFsaWQoZ2V0X2VsZW1lbnRfdHlwZSh0eXBv aWQpKSB8fCB0eXBvaWQgPT0gQU5ZQVJSQVlPSUQKKwkJCQl8fCB0eXBvaWQgPT0gQU5ZQ09NUEFU SUJMRUFSUkFZT0lEIHx8IHR5cG9pZCA9PSBSRUNPUkRBUlJBWU9JRCkKKwkJCQkqdGNhdGVnb3J5 ID0gSlNPTlRZUEVfQVJSQVk7CisJCQllbHNlIGlmICh0eXBlX2lzX3Jvd3R5cGUodHlwb2lkKSkJ LyogaW5jbHVkZXMgUkVDT1JET0lEICovCisJCQkJKnRjYXRlZ29yeSA9IEpTT05UWVBFX0NPTVBP U0lURTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPaWQJCQljYXN0ZnVuYyA9IGdldF9qc29uX2Nhc3Rf Zm9yX3R5cGUodHlwb2lkKTsKKworCQkJCWlmIChPaWRJc1ZhbGlkKGNhc3RmdW5jKSkKKwkJCQl7 CisJCQkJCWZtZ3JfaW5mbyhjYXN0ZnVuYywgb3V0ZmxpbmZvKTsKKwkJCQkJKnRjYXRlZ29yeSA9 IEpTT05UWVBFX0NBU1Q7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXVzZV90eXBlX291 dHB1dF9mdW5jdGlvbiA9IHRydWU7CisJCQkJCSp0Y2F0ZWdvcnkgPSBKU09OVFlQRV9PVEhFUjsK KwkJCQl9CisJCQl9CisJCQlicmVhazsKKwl9CisKKwlpZiAodXNlX3R5cGVfb3V0cHV0X2Z1bmN0 aW9uKQorCXsKKwkJT2lkCQkJdHlwb3V0cHV0OworCQlib29sCQl0eXBpc3ZhcmxlbmE7CisKKwkJ Z2V0VHlwZU91dHB1dEluZm8odHlwb2lkLCAmdHlwb3V0cHV0LCAmdHlwaXN2YXJsZW5hKTsKKwkJ Zm1ncl9pbmZvKHR5cG91dHB1dCwgb3V0ZmxpbmZvKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB3 aGV0aGVyIGEgdHlwZSBjb252ZXJzaW9uIHRvIEpTT04gb3IgSlNPTkIgaW52b2x2ZXMgYW55IG11 dGFibGUKKyAqIGZ1bmN0aW9ucy4gIFRoaXMgcmVjdXJzZXMgaW50byBjb250YWluZXIgdHlwZXMg KGFycmF5cywgY29tcG9zaXRlcywKKyAqIHJhbmdlcywgbXVsdGlyYW5nZXMsIGRvbWFpbnMpIHRv IGNoZWNrIHRoZWlyIGVsZW1lbnQvc3ViIHR5cGVzLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBp bml0aWFsaXplICpoYXNfbXV0YWJsZSB0byBmYWxzZSBiZWZvcmUgY2FsbGluZy4KKyAqIElmIGFu eSBtdXRhYmxlIGZ1bmN0aW9uIGlzIGZvdW5kLCAqaGFzX211dGFibGUgaXMgc2V0IHRvIHRydWUu CisgKi8KK3ZvaWQKK2pzb25fY2hlY2tfbXV0YWJpbGl0eShPaWQgdHlwb2lkLCBib29sICpoYXNf bXV0YWJsZSkKK3sKKwljaGFyCQlhdHRfdHlwdHlwZSA9IGdldF90eXB0eXBlKHR5cG9pZCk7CisK KwkvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2VzLCBpdCBjb3VsZCBiZSBkcml2ZW4gdG8g c3RhY2sgb3ZlcmZsb3cgKi8KKwljaGVja19zdGFja19kZXB0aCgpOworCisJQXNzZXJ0KGhhc19t dXRhYmxlICE9IE5VTEwpOworCisJaWYgKCpoYXNfbXV0YWJsZSkKKwkJcmV0dXJuOworCisJaWYg KGF0dF90eXB0eXBlID09IFRZUFRZUEVfRE9NQUlOKQorCXsKKwkJanNvbl9jaGVja19tdXRhYmls aXR5KGdldEJhc2VUeXBlKHR5cG9pZCksIGhhc19tdXRhYmxlKTsKKwkJcmV0dXJuOworCX0KKwll bHNlIGlmIChhdHRfdHlwdHlwZSA9PSBUWVBUWVBFX0NPTVBPU0lURSkKKwl7CisJCS8qCisJCSAq IEZvciBhIGNvbXBvc2l0ZSB0eXBlLCByZWN1cnNlIGludG8gaXRzIGF0dHJpYnV0ZXMuICBVc2Ug dGhlCisJCSAqIHR5cGNhY2hlIHRvIGF2b2lkIG9wZW5pbmcgdGhlIHJlbGF0aW9uIGRpcmVjdGx5 LgorCQkgKi8KKwkJVHVwbGVEZXNjCXR1cGRlc2MgPSBsb29rdXBfcm93dHlwZV90dXBkZXNjKHR5 cG9pZCwgLTEpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykK KwkJeworCQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ciA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywg aSk7CisKKwkJCWlmIChhdHRyLT5hdHRpc2Ryb3BwZWQpCisJCQkJY29udGludWU7CisKKwkJCWpz b25fY2hlY2tfbXV0YWJpbGl0eShhdHRyLT5hdHR0eXBpZCwgaGFzX211dGFibGUpOworCQkJaWYg KCpoYXNfbXV0YWJsZSkKKwkJCQlicmVhazsKKwkJfQorCQlSZWxlYXNlVHVwbGVEZXNjKHR1cGRl c2MpOworCQlyZXR1cm47CisJfQorCWVsc2UgaWYgKGF0dF90eXB0eXBlID09IFRZUFRZUEVfUkFO R0UpCisJeworCQlqc29uX2NoZWNrX211dGFiaWxpdHkoZ2V0X3JhbmdlX3N1YnR5cGUodHlwb2lk KSwgaGFzX211dGFibGUpOworCQlyZXR1cm47CisJfQorCWVsc2UgaWYgKGF0dF90eXB0eXBlID09 IFRZUFRZUEVfTVVMVElSQU5HRSkKKwl7CisJCWpzb25fY2hlY2tfbXV0YWJpbGl0eShnZXRfbXVs dGlyYW5nZV9yYW5nZSh0eXBvaWQpLCBoYXNfbXV0YWJsZSk7CisJCXJldHVybjsKKwl9CisJZWxz ZQorCXsKKwkJT2lkCQkJYXR0X3R5cGVsZW0gPSBnZXRfZWxlbWVudF90eXBlKHR5cG9pZCk7CisK KwkJaWYgKE9pZElzVmFsaWQoYXR0X3R5cGVsZW0pKQorCQl7CisJCQkvKiByZWN1cnNlIGludG8g YXJyYXkgZWxlbWVudCB0eXBlICovCisJCQlqc29uX2NoZWNrX211dGFiaWxpdHkoYXR0X3R5cGVs ZW0sIGhhc19tdXRhYmxlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXN3aXRjaCAodHlwb2lk KQorCXsKKwkJY2FzZSBCT09MT0lEOgorCQljYXNlIElOVDJPSUQ6CisJCWNhc2UgSU5UNE9JRDoK KwkJY2FzZSBJTlQ4T0lEOgorCQljYXNlIEZMT0FUNE9JRDoKKwkJY2FzZSBGTE9BVDhPSUQ6CisJ CWNhc2UgTlVNRVJJQ09JRDoKKwkJY2FzZSBKU09OT0lEOgorCQljYXNlIEpTT05CT0lEOgorCQkJ Lyoga25vd24gaW1tdXRhYmxlICovCisJCQlicmVhazsKKwkJY2FzZSBEQVRFT0lEOgorCQljYXNl IFRJTUVTVEFNUE9JRDoKKwkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJCSpoYXNfbXV0YWJsZSA9 IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQlPaWQJCQljYXN0ZnVuYyA9 IGdldF9qc29uX2Nhc3RfZm9yX3R5cGUodHlwb2lkKTsKKwkJCQlPaWQJCQlmdW5jb2lkOworCisJ CQkJaWYgKE9pZElzVmFsaWQoY2FzdGZ1bmMpKQorCQkJCQlmdW5jb2lkID0gY2FzdGZ1bmM7CisJ CQkJZWxzZQorCQkJCXsKKwkJCQkJYm9vbAkJdHlwaXN2YXJsZW5hOworCisJCQkJCWdldFR5cGVP dXRwdXRJbmZvKHR5cG9pZCwgJmZ1bmNvaWQsICZ0eXBpc3ZhcmxlbmEpOworCQkJCX0KKwkJCQlp ZiAoZnVuY192b2xhdGlsZShmdW5jb2lkKSAhPSBQUk9WT0xBVElMRV9JTU1VVEFCTEUpCisJCQkJ CSpoYXNfbXV0YWJsZSA9IHRydWU7CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBS ZXR1cm4gdGhlIE9JRCBvZiBhIGNhc3QgZnVuY3Rpb24gZnJvbSB0eXBvaWQgdG8gSlNPTiwgb3Ig SW52YWxpZE9pZCBpZgorICogdGhlcmUgaXMgbm8gc3VjaCBjYXN0LiAgQXMgYSBtYXR0ZXIgb2Yg cG9saWN5LCB3ZSBvbmx5IGNvbnNpZGVyIGV4cGxpY2l0LAorICogdXNlci1kZWZpbmVkIGNhc3Rz LgorICovCitzdGF0aWMgT2lkCitnZXRfanNvbl9jYXN0X2Zvcl90eXBlKE9pZCB0eXBvaWQpCit7 CisJaWYgKHR5cG9pZCA+PSBGaXJzdE5vcm1hbE9iamVjdElkKQorCXsKKwkJT2lkCQkJY2FzdGZ1 bmM7CisJCUNvZXJjaW9uUGF0aFR5cGUgY3R5cGU7CisKKwkJY3R5cGUgPSBmaW5kX2NvZXJjaW9u X3BhdGh3YXkoSlNPTk9JRCwgdHlwb2lkLAorCQkJCQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJVCwK KwkJCQkJCQkJCSAgJmNhc3RmdW5jKTsKKwkJaWYgKGN0eXBlID09IENPRVJDSU9OX1BBVEhfRlVO QyAmJiBPaWRJc1ZhbGlkKGNhc3RmdW5jKSkKKwkJCXJldHVybiBjYXN0ZnVuYzsKKwl9CisJcmV0 dXJuIEludmFsaWRPaWQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWVz b24uYnVpbGQgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbWVzb24uYnVpbGQKaW5kZXggZDc5M2Y4 MTQ1ZjYuLmJlODQxMWM2NmYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbWVz b24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21lc29uLmJ1aWxkCkBAIC01NSw2 ICs1NSw3IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2pzb25iX3V0aWwuYycsCiAg ICdqc29uYnN1YnMuYycsCiAgICdqc29uZnVuY3MuYycsCisgICdqc29udHlwZXMuYycsCiAgICdq c29ucGF0aC5jJywKICAgJ2pzb25wYXRoX2V4ZWMuYycsCiAgICdsaWtlLmMnLApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCmlu ZGV4IDJmNGJlNDA1MThkLi4zMWY4OGZiYmZmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvanNvbi5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaApAQCAtMTUsOCArMTUsMTEg QEAKICNkZWZpbmUgSlNPTl9ICiAKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1 ZGUgInV0aWxzL2pzb250eXBlcy5oIgogCiAvKiBmdW5jdGlvbnMgaW4ganNvbi5jICovCitleHRl cm4gRGF0dW0gZGF0dW1fdG9fanNvbihEYXR1bSB2YWwsIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVn b3J5LAorCQkJCQkJICAgRm1nckluZm8gKm91dGZsaW5mbyk7CiBleHRlcm4gdm9pZCBjb21wb3Np dGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LAogCQkJCQkJCSAg Ym9vbCB1c2VfbGluZV9mZWVkcyk7CiBleHRlcm4gdm9pZCBlc2NhcGVfanNvbihTdHJpbmdJbmZv IGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pz b25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCmluZGV4IGNhMTNlZmJhMGZiLi42N2U0 Njc1YTkwOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaAorKysgYi9zcmMv aW5jbHVkZS91dGlscy9qc29uYi5oCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlICJsaWIv c3RyaW5naW5mby5oIgogI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMv anNvbnR5cGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogCiAvKiBUb2tlbnMgdXNl ZCB3aGVuIHNlcXVlbnRpYWxseSBwcm9jZXNzaW5nIGEganNvbmIgdmFsdWUgKi8KQEAgLTQ1Nyw2 ICs0NTgsOCBAQCBleHRlcm4gRGF0dW0ganNvbmJfc2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBjb25z dCBEYXR1bSAqcGF0aCwgaW50IHBhdGhfbGVuLAogCQkJCQkJCSAgIEpzb25iVmFsdWUgKm5ld3Zh bCk7CiBleHRlcm4gRGF0dW0ganNvbmJfZ2V0X2VsZW1lbnQoSnNvbmIgKmpiLCBjb25zdCBEYXR1 bSAqcGF0aCwgaW50IG5wYXRoLAogCQkJCQkJCSAgIGJvb2wgKmlzbnVsbCwgYm9vbCBhc190ZXh0 KTsKK2V4dGVybiBEYXR1bSBkYXR1bV90b19qc29uYihEYXR1bSB2YWwsIEpzb25UeXBlQ2F0ZWdv cnkgdGNhdGVnb3J5LAorCQkJCQkJCUZtZ3JJbmZvICpvdXRmbGluZm8pOwogZXh0ZXJuIGJvb2wg dG9fanNvbmJfaXNfaW1tdXRhYmxlKE9pZCB0eXBvaWQpOwogZXh0ZXJuIERhdHVtIGpzb25iX2J1 aWxkX29iamVjdF93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9v bCAqbnVsbHMsCiAJCQkJCQkJCQkgICBjb25zdCBPaWQgKnR5cGVzLCBib29sIGFic2VudF9vbl9u dWxsLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmggYi9zcmMvaW5j bHVkZS91dGlscy9qc29uZnVuY3MuaAppbmRleCA5NjQwOTU1N2YyOS4uOGRiMTU1ZDZkMjMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRl L3V0aWxzL2pzb25mdW5jcy5oCkBAIC02NCwzMSArNjQsNiBAQCBleHRlcm4gSnNvbmIgKnRyYW5z Zm9ybV9qc29uYl9zdHJpbmdfdmFsdWVzKEpzb25iICpqc29uYiwgdm9pZCAqYWN0aW9uX3N0YXRl LAogZXh0ZXJuIHRleHQgKnRyYW5zZm9ybV9qc29uX3N0cmluZ192YWx1ZXModGV4dCAqanNvbiwg dm9pZCAqYWN0aW9uX3N0YXRlLAogCQkJCQkJCQkJCSAgSnNvblRyYW5zZm9ybVN0cmluZ1ZhbHVl c0FjdGlvbiB0cmFuc2Zvcm1fYWN0aW9uKTsKIAotLyogVHlwZSBjYXRlZ29yaWVzIHJldHVybmVk IGJ5IGpzb25fY2F0ZWdvcml6ZV90eXBlICovCi10eXBlZGVmIGVudW0KLXsKLQlKU09OVFlQRV9O VUxMLAkJCQkvKiBudWxsLCBzbyB3ZSBkaWRuJ3QgYm90aGVyIHRvIGlkZW50aWZ5ICovCi0JSlNP TlRZUEVfQk9PTCwJCQkJLyogYm9vbGVhbiAoYnVpbHQtaW4gdHlwZXMgb25seSkgKi8KLQlKU09O VFlQRV9OVU1FUklDLAkJCS8qIG51bWVyaWMgKGRpdHRvKSAqLwotCUpTT05UWVBFX0RBVEUsCQkJ CS8qIHdlIHVzZSBzcGVjaWFsIGZvcm1hdHRpbmcgZm9yIGRhdGV0aW1lcyAqLwotCUpTT05UWVBF X1RJTUVTVEFNUCwKLQlKU09OVFlQRV9USU1FU1RBTVBUWiwKLQlKU09OVFlQRV9KU09OLAkJCQkv KiBKU09OIChhbmQgSlNPTkIsIGlmIG5vdCBpc19qc29uYikgKi8KLQlKU09OVFlQRV9KU09OQiwJ CQkJLyogSlNPTkIgKGlmIGlzX2pzb25iKSAqLwotCUpTT05UWVBFX0FSUkFZLAkJCQkvKiBhcnJh eSAqLwotCUpTT05UWVBFX0NPTVBPU0lURSwJCQkvKiBjb21wb3NpdGUgKi8KLQlKU09OVFlQRV9D QVNULAkJCQkvKiBzb21ldGhpbmcgd2l0aCBhbiBleHBsaWNpdCBjYXN0IHRvIEpTT04gKi8KLQlK U09OVFlQRV9PVEhFUiwJCQkJLyogYWxsIGVsc2UgKi8KLX0gSnNvblR5cGVDYXRlZ29yeTsKLQot ZXh0ZXJuIHZvaWQganNvbl9jYXRlZ29yaXplX3R5cGUoT2lkIHR5cG9pZCwgYm9vbCBpc19qc29u YiwKLQkJCQkJCQkJIEpzb25UeXBlQ2F0ZWdvcnkgKnRjYXRlZ29yeSwKLQkJCQkJCQkJIEZtZ3JJ bmZvICpvdXRmbGluZm8pOwotZXh0ZXJuIHZvaWQganNvbl9jaGVja19tdXRhYmlsaXR5KE9pZCB0 eXBvaWQsIGJvb2wgKmhhc19tdXRhYmxlKTsKLWV4dGVybiBEYXR1bSBkYXR1bV90b19qc29uKERh dHVtIHZhbCwgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksCi0JCQkJCQkgICBGbWdySW5mbyAq b3V0ZmxpbmZvKTsKLWV4dGVybiBEYXR1bSBkYXR1bV90b19qc29uYihEYXR1bSB2YWwsIEpzb25U eXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LAotCQkJCQkJCUZtZ3JJbmZvICpvdXRmbGluZm8pOwogZXh0 ZXJuIERhdHVtIGpzb25iX2Zyb21fdGV4dCh0ZXh0ICpqcywgYm9vbCB1bmlxdWVfa2V5cyk7CiAK IGV4dGVybiBEYXR1bSBqc29uX3BvcHVsYXRlX3R5cGUoRGF0dW0ganNvbl92YWwsIE9pZCBqc29u X3R5cGUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29udHlwZXMuaCBiL3NyYy9p bmNsdWRlL3V0aWxzL2pzb250eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi40ZmUzOTExZjY5YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L2pzb250eXBlcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGpzb250eXBlcy5oCisgKgkgIERlY2xhcmF0aW9ucyBmb3IgSlNPTiB0eXBlIGNhdGVnb3JpemF0 aW9uLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5j bHVkZS91dGlscy9qc29udHlwZXMuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNp Zm5kZWYgSlNPTlRZUEVTX0gKKyNkZWZpbmUgSlNPTlRZUEVTX0gKKworI2luY2x1ZGUgImZtZ3Iu aCIKKworLyogVHlwZSBjYXRlZ29yaWVzIHJldHVybmVkIGJ5IGpzb25fY2F0ZWdvcml6ZV90eXBl ICovCit0eXBlZGVmIGVudW0KK3sKKwlKU09OVFlQRV9OVUxMLAkJCQkvKiBudWxsLCBzbyB3ZSBk aWRuJ3QgYm90aGVyIHRvIGlkZW50aWZ5ICovCisJSlNPTlRZUEVfQk9PTCwJCQkJLyogYm9vbGVh biAoYnVpbHQtaW4gdHlwZXMgb25seSkgKi8KKwlKU09OVFlQRV9OVU1FUklDLAkJCS8qIG51bWVy aWMgKGRpdHRvKSAqLworCUpTT05UWVBFX0RBVEUsCQkJCS8qIHdlIHVzZSBzcGVjaWFsIGZvcm1h dHRpbmcgZm9yIGRhdGV0aW1lcyAqLworCUpTT05UWVBFX1RJTUVTVEFNUCwKKwlKU09OVFlQRV9U SU1FU1RBTVBUWiwKKwlKU09OVFlQRV9KU09OLAkJCQkvKiBKU09OIChhbmQgSlNPTkIsIGlmIG5v dCBpc19qc29uYikgKi8KKwlKU09OVFlQRV9KU09OQiwJCQkJLyogSlNPTkIgKGlmIGlzX2pzb25i KSAqLworCUpTT05UWVBFX0FSUkFZLAkJCQkvKiBhcnJheSAqLworCUpTT05UWVBFX0NPTVBPU0lU RSwJCQkvKiBjb21wb3NpdGUgKi8KKwlKU09OVFlQRV9DQVNULAkJCQkvKiBzb21ldGhpbmcgd2l0 aCBhbiBleHBsaWNpdCBjYXN0IHRvIEpTT04gKi8KKwlKU09OVFlQRV9PVEhFUiwJCQkJLyogYWxs IGVsc2UgKi8KK30gSnNvblR5cGVDYXRlZ29yeTsKKworZXh0ZXJuIHZvaWQganNvbl9jYXRlZ29y aXplX3R5cGUoT2lkIHR5cG9pZCwgYm9vbCBpc19qc29uYiwKKwkJCQkJCQkJIEpzb25UeXBlQ2F0 ZWdvcnkgKnRjYXRlZ29yeSwKKwkJCQkJCQkJIEZtZ3JJbmZvICpvdXRmbGluZm8pOworZXh0ZXJu IHZvaWQganNvbl9jaGVja19tdXRhYmlsaXR5KE9pZCB0eXBvaWQsIGJvb2wgKmhhc19tdXRhYmxl KTsKKworI2VuZGlmCQkJCQkJCS8qIEpTT05UWVBFU19IICovCi0tIAoyLjUwLjEgKEFwcGxlIEdp dC0xNTUpCgo= --0000000000000cfb1a0655a342ab Content-Type: application/octet-stream; name="v1-0005-Cache-JSON-type-information-in-various-SQL-callab.patch" Content-Disposition: attachment; filename="v1-0005-Cache-JSON-type-information-in-various-SQL-callab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3prpud4 RnJvbSBhNzlhYjU4ZmM0MjQ5ZGUxYWY2YzY4MDU2MjJiYzEwZTg0MTNhNzFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFRodSwgMiBKdWwgMjAyNiAxMDozNjoxMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgNS81 XSBDYWNoZSBKU09OIHR5cGUgaW5mb3JtYXRpb24gaW4gdmFyaW91cyBTUUwtY2FsbGFibGUKIGZ1 bmN0aW9ucy4KCnRvX2pzb24sIGpzb25fYnVpbGRfYXJyYXksIGpzb25fYnVpbGRfb2JqZWN0LCB0 b19qc29uYiwKanNvbmJfYnVpbGRfYXJyYXksIGFuZCBqc29uYl9idWlsZF9vYmplY3Qgbm93IGNh Y2hlIGFueSBuZWVkZWQKSnNvblR5cGVDYXRlZ29yeSBhbmQgYXNzb2NpYXRlZCBGbWdySW5mbyBp biBmbl9leHRyYSwgcmF0aGVyIHRoYW4KcmVjb21wdXRpbmcgaXQgZm9yIGV2ZXJ5IGNhbGwuCgpU aGlzIG1heSBzaWduaWZpY2FudGx5IGltcHJvdmUgcGVyZm9ybWFuY2UgaW4gcXVlcmllcyB3aGlj aApleGVjdXRlIHRoZXNlIGZ1bmN0aW9ucyByZXBlYXRlZGx5LgotLS0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uLmMgICAgICB8ICA0NiArKysrLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uYi5jICAgICB8ICA0NCArKysrLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u dHlwZXMuYyB8IDE1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRl L3V0aWxzL2pzb250eXBlcy5oICAgICB8ICAxNSArKysKIHNyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0ICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDIwNyBpbnNlcnRpb25zKCspLCA1 MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwppbmRleCAyNGI0MWYwYTM3Ni4uZTFmZjZk OWY5NGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwpAQCAtNjc2LDE4ICs2NzYsMjYgQEAgdG9fanNvbihQ R19GVU5DVElPTl9BUkdTKQogewogCURhdHVtCQl2YWwgPSBQR19HRVRBUkdfREFUVU0oMCk7CiAJ T2lkCQkJdmFsX3R5cGUgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAwKTsK LQlKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeTsKLQlGbWdySW5mbwlvdXRmbGluZm87CisJSnNv blR5cGVDYWNoZSAqamNhY2hlOwogCiAJaWYgKHZhbF90eXBlID09IEludmFsaWRPaWQpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCiAJCQkJIGVycm1zZygiY291bGQgbm90IGRldGVybWluZSBpbnB1dCBkYXRhIHR5cGUiKSkp OwogCi0JanNvbl9jYXRlZ29yaXplX3R5cGUodmFsX3R5cGUsIGZhbHNlLAotCQkJCQkJICZ0Y2F0 ZWdvcnksICZvdXRmbGluZm8pOworCWlmIChmY2luZm8tPmZsaW5mby0+Zm5fZXh0cmEgPT0gTlVM TCkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAotCVBHX1JFVFVSTl9EQVRVTShk YXR1bV90b19qc29uKHZhbCwgdGNhdGVnb3J5LCAmb3V0ZmxpbmZvKSk7CisJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZmNpbmZvLT5mbGluZm8tPmZuX21jeHQpOworCQlqY2Fj aGUgPSBqc29uX2J1aWxkX3R5cGVfY2FjaGUoZmFsc2UsIDEsICZ2YWxfdHlwZSk7CisJCWZjaW5m by0+ZmxpbmZvLT5mbl9leHRyYSA9IGpjYWNoZTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCX0KKwllbHNlCisJCWpjYWNoZSA9IGZjaW5mby0+ZmxpbmZvLT5mbl9leHRy YTsKKworCVBHX1JFVFVSTl9EQVRVTShkYXR1bV90b19qc29uKHZhbCwgamNhY2hlLT5jYXRlZ29y aWVzWzBdLCAmamNhY2hlLT5mbGluZm9zWzBdKSk7CiB9CiAKIC8qCkBAIC0xMjcyLDIzICsxMjgw LDE2IEBAIGpzb25fYnVpbGRfb2JqZWN0KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJRGF0dW0JICAg KmFyZ3M7CiAJYm9vbAkgICAqbnVsbHM7Ci0JT2lkCQkgICAqdHlwZXM7CiAJaW50CQkJbmFyZ3M7 CiAJSnNvblR5cGVDYXRlZ29yeSAqY2F0ZWdvcmllczsKIAlGbWdySW5mbyAgICpvdXRmbGluZm9z OwogCi0JLyogYnVpbGQgYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBvYmplY3QgKi8KLQlu YXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIDAsIHRydWUsCi0JCQkJCQkJCSAg JmFyZ3MsICZ0eXBlcywgJm51bGxzKTsKLQorCW5hcmdzID0ganNvbl9leHRyYWN0X3ZhcmlhZGlj X2FyZ3MoZmFsc2UsIGZjaW5mbywgJmFyZ3MsICZudWxscywKKwkJCQkJCQkJCSAgICZjYXRlZ29y aWVzLCAmb3V0ZmxpbmZvcyk7CiAJaWYgKG5hcmdzIDwgMCkKIAkJUEdfUkVUVVJOX05VTEwoKTsK LQotCWNhdGVnb3JpZXMgPSBwYWxsb2NfYXJyYXkoSnNvblR5cGVDYXRlZ29yeSwgbmFyZ3MpOwot CW91dGZsaW5mb3MgPSBwYWxsb2MwX2FycmF5KEZtZ3JJbmZvLCBuYXJncyk7Ci0JZm9yIChpbnQg aSA9IDA7IGkgPCBuYXJnczsgaSsrKQotCQlqc29uX2NhdGVnb3JpemVfdHlwZSh0eXBlc1tpXSwg ZmFsc2UsCi0JCQkJCQkJICZjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tpXSk7CisJaWYgKG5h cmdzID09IDApCisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKCJ7 fSIsIDIpKTsKIAogCVBHX1JFVFVSTl9EQVRVTShqc29uX2J1aWxkX29iamVjdF93b3JrZXIobmFy Z3MsIGFyZ3MsIG51bGxzLAogCQkJCQkJCQkJCQkgY2F0ZWdvcmllcywgb3V0ZmxpbmZvcywKQEAg LTEzNDEsMjMgKzEzNDIsMTggQEAganNvbl9idWlsZF9hcnJheShQR19GVU5DVElPTl9BUkdTKQog ewogCURhdHVtCSAgICphcmdzOwogCWJvb2wJICAgKm51bGxzOwotCU9pZAkJICAgKnR5cGVzOwog CWludAkJCW5hcmdzOwogCUpzb25UeXBlQ2F0ZWdvcnkgKmNhdGVnb3JpZXM7CiAJRm1nckluZm8g ICAqb3V0ZmxpbmZvczsKIAogCS8qIGJ1aWxkIGFyZ3VtZW50IHZhbHVlcyB0byBidWlsZCB0aGUg YXJyYXkgKi8KLQluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIDAsIHRydWUs Ci0JCQkJCQkJCSAgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsKKwluYXJncyA9IGpzb25fZXh0cmFj dF92YXJpYWRpY19hcmdzKGZhbHNlLCBmY2luZm8sICZhcmdzLCAmbnVsbHMsCisJCQkJCQkJCQkg ICAmY2F0ZWdvcmllcywgJm91dGZsaW5mb3MpOwogCiAJaWYgKG5hcmdzIDwgMCkKIAkJUEdfUkVU VVJOX05VTEwoKTsKLQotCWNhdGVnb3JpZXMgPSBwYWxsb2NfYXJyYXkoSnNvblR5cGVDYXRlZ29y eSwgbmFyZ3MpOwotCW91dGZsaW5mb3MgPSBwYWxsb2MwX2FycmF5KEZtZ3JJbmZvLCBuYXJncyk7 Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSsrKQotCQlqc29uX2NhdGVnb3JpemVfdHlw ZSh0eXBlc1tpXSwgZmFsc2UsCi0JCQkJCQkJICZjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tp XSk7CisJaWYgKG5hcmdzID09IDApCisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 X3dpdGhfbGVuKCJbXSIsIDIpKTsKIAogCVBHX1JFVFVSTl9EQVRVTShqc29uX2J1aWxkX2FycmF5 X3dvcmtlcihuYXJncywgYXJncywgbnVsbHMsCiAJCQkJCQkJCQkJCWNhdGVnb3JpZXMsIG91dGZs aW5mb3MsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCmluZGV4IDU2ZTk0YWNkMmE4Li42ODc2ZWYyMjY4MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25iLmMKQEAgLTEwNTksMTggKzEwNTksMjYgQEAgdG9fanNvbmIoUEdf RlVOQ1RJT05fQVJHUykKIHsKIAlEYXR1bQkJdmFsID0gUEdfR0VUQVJHX0RBVFVNKDApOwogCU9p ZAkJCXZhbF90eXBlID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywgMCk7Ci0J SnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnk7Ci0JRm1nckluZm8Jb3V0ZmxpbmZvOworCUpzb25U eXBlQ2FjaGUgKmpjYWNoZTsKIAogCWlmICh2YWxfdHlwZSA9PSBJbnZhbGlkT2lkKQogCQllcmVw b3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAogCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1pbmUgaW5wdXQgZGF0YSB0eXBlIikpKTsK IAotCWpzb25fY2F0ZWdvcml6ZV90eXBlKHZhbF90eXBlLCB0cnVlLAotCQkJCQkJICZ0Y2F0ZWdv cnksICZvdXRmbGluZm8pOworCWlmIChmY2luZm8tPmZsaW5mby0+Zm5fZXh0cmEgPT0gTlVMTCkK Kwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAotCVBHX1JFVFVSTl9EQVRVTShkYXR1 bV90b19qc29uYih2YWwsIHRjYXRlZ29yeSwgJm91dGZsaW5mbykpOworCQlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKGZjaW5mby0+ZmxpbmZvLT5mbl9tY3h0KTsKKwkJamNhY2hl ID0ganNvbl9idWlsZF90eXBlX2NhY2hlKHRydWUsIDEsICZ2YWxfdHlwZSk7CisJCWZjaW5mby0+ ZmxpbmZvLT5mbl9leHRyYSA9IGpjYWNoZTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNv bnRleHQpOworCX0KKwllbHNlCisJCWpjYWNoZSA9IGZjaW5mby0+ZmxpbmZvLT5mbl9leHRyYTsK KworCVBHX1JFVFVSTl9EQVRVTShkYXR1bV90b19qc29uYih2YWwsIGpjYWNoZS0+Y2F0ZWdvcmll c1swXSwgJmpjYWNoZS0+ZmxpbmZvc1swXSkpOwogfQogCiAvKgpAQCAtMTE1NywyNCArMTE2NSwx NSBAQCBqc29uYl9idWlsZF9vYmplY3QoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlEYXR1bQkgICAq YXJnczsKIAlib29sCSAgICpudWxsczsKLQlPaWQJCSAgICp0eXBlczsKIAlpbnQJCQluYXJnczsK IAlKc29uVHlwZUNhdGVnb3J5ICpjYXRlZ29yaWVzOwogCUZtZ3JJbmZvICAgKm91dGZsaW5mb3M7 CiAKLQkvKiBidWlsZCBhcmd1bWVudCB2YWx1ZXMgdG8gYnVpbGQgdGhlIG9iamVjdCAqLwotCW5h cmdzID0gZXh0cmFjdF92YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgdHJ1ZSwKLQkJCQkJCQkJICAm YXJncywgJnR5cGVzLCAmbnVsbHMpOwotCisJbmFyZ3MgPSBqc29uX2V4dHJhY3RfdmFyaWFkaWNf YXJncyh0cnVlLCBmY2luZm8sICZhcmdzLCAmbnVsbHMsCisJCQkJCQkJCQkgICAmY2F0ZWdvcmll cywgJm91dGZsaW5mb3MpOwogCWlmIChuYXJncyA8IDApCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAK LQljYXRlZ29yaWVzID0gcGFsbG9jX2FycmF5KEpzb25UeXBlQ2F0ZWdvcnksIG5hcmdzKTsKLQlv dXRmbGluZm9zID0gcGFsbG9jMF9hcnJheShGbWdySW5mbywgbmFyZ3MpOwotCWZvciAoaW50IGkg PSAwOyBpIDwgbmFyZ3M7IGkrKykKLQkJanNvbl9jYXRlZ29yaXplX3R5cGUodHlwZXNbaV0sIHRy dWUsCi0JCQkJCQkJICZjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tpXSk7Ci0KIAlQR19SRVRV Uk5fREFUVU0oanNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihuYXJncywgYXJncywgbnVsbHMsCiAJ CQkJCQkJCQkJCSAgY2F0ZWdvcmllcywgb3V0ZmxpbmZvcywKIAkJCQkJCQkJCQkJICBmYWxzZSwg ZmFsc2UpKTsKQEAgLTEyMzAsMjQgKzEyMjksMTUgQEAganNvbmJfYnVpbGRfYXJyYXkoUEdfRlVO Q1RJT05fQVJHUykKIHsKIAlEYXR1bQkgICAqYXJnczsKIAlib29sCSAgICpudWxsczsKLQlPaWQJ CSAgICp0eXBlczsKIAlpbnQJCQluYXJnczsKIAlKc29uVHlwZUNhdGVnb3J5ICpjYXRlZ29yaWVz OwogCUZtZ3JJbmZvICAgKm91dGZsaW5mb3M7CiAKLQkvKiBidWlsZCBhcmd1bWVudCB2YWx1ZXMg dG8gYnVpbGQgdGhlIGFycmF5ICovCi0JbmFyZ3MgPSBleHRyYWN0X3ZhcmlhZGljX2FyZ3MoZmNp bmZvLCAwLCB0cnVlLAotCQkJCQkJCQkgICZhcmdzLCAmdHlwZXMsICZudWxscyk7Ci0KKwluYXJn cyA9IGpzb25fZXh0cmFjdF92YXJpYWRpY19hcmdzKHRydWUsIGZjaW5mbywgJmFyZ3MsICZudWxs cywKKwkJCQkJCQkJCSAgICZjYXRlZ29yaWVzLCAmb3V0ZmxpbmZvcyk7CiAJaWYgKG5hcmdzIDwg MCkKIAkJUEdfUkVUVVJOX05VTEwoKTsKIAotCWNhdGVnb3JpZXMgPSBwYWxsb2NfYXJyYXkoSnNv blR5cGVDYXRlZ29yeSwgbmFyZ3MpOwotCW91dGZsaW5mb3MgPSBwYWxsb2MwX2FycmF5KEZtZ3JJ bmZvLCBuYXJncyk7Ci0JZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSsrKQotCQlqc29uX2Nh dGVnb3JpemVfdHlwZSh0eXBlc1tpXSwgdHJ1ZSwKLQkJCQkJCQkgJmNhdGVnb3JpZXNbaV0sICZv dXRmbGluZm9zW2ldKTsKLQogCVBHX1JFVFVSTl9EQVRVTShqc29uYl9idWlsZF9hcnJheV93b3Jr ZXIobmFyZ3MsIGFyZ3MsIG51bGxzLAogCQkJCQkJCQkJCQkgY2F0ZWdvcmllcywgb3V0ZmxpbmZv cywKIAkJCQkJCQkJCQkJIGZhbHNlKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbnR5cGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnR5cGVzLmMKaW5kZXgg YWRiYWNlZWJjOGEuLjhhZjFmNDNkMDlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbnR5cGVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb250eXBlcy5jCkBA IC0xNiw4ICsxNiwxMCBAQAogI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wcm9jLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVk ZSAiZm1nci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9jb2VyY2UuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxzL2pz b250eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3R5cGNhY2hlLmgiCkBAIC0yNDIsMyArMjQ0LDE1NCBAQCBnZXRfanNvbl9jYXN0X2Zvcl90eXBl KE9pZCB0eXBvaWQpCiAJfQogCXJldHVybiBJbnZhbGlkT2lkOwogfQorCisvKgorICogUnVuIGpz b25fY2F0ZWdvcml6ZV90eXBlKCkgb3ZlciBhbiBhcnJheSBvZiB0eXBlIE9JRHMgYW5kIGJ1aWxk IGEgY2FjaGUKKyAqIGZyb20gdGhlIHJlc3VsdHMuCisgKi8KK0pzb25UeXBlQ2FjaGUgKgoranNv bl9idWlsZF90eXBlX2NhY2hlKGJvb2wgaXNfanNvbmIsIGludCBuYXJncywgT2lkICp0eXBlcykK K3sKKwlKc29uVHlwZUNhY2hlICpqY2FjaGUgPSBwYWxsb2Nfb2JqZWN0KEpzb25UeXBlQ2FjaGUp OworCisJamNhY2hlLT5uYXJncyA9IG5hcmdzOworCWpjYWNoZS0+Y2F0ZWdvcmllcyA9IHBhbGxv Y19hcnJheShKc29uVHlwZUNhdGVnb3J5LCBuYXJncyk7CisJamNhY2hlLT5mbGluZm9zID0gcGFs bG9jMF9hcnJheShGbWdySW5mbywgbmFyZ3MpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJn czsgKytpKQorCQlqc29uX2NhdGVnb3JpemVfdHlwZSh0eXBlc1tpXSwgaXNfanNvbmIsICZqY2Fj aGUtPmNhdGVnb3JpZXNbaV0sCisJCQkJCQkJICZqY2FjaGUtPmZsaW5mb3NbaV0pOworCisJcmV0 dXJuIGpjYWNoZTsKK30KKworLyoKKyAqIEV4dHJhY3QgYWxsIHRoZSBhcmd1bWVudHMgaW4gYSBw b3NzaWJseS12YXJpYWRpYyBGdW5jdGlvbkNhbGxJbmZvLCBwcm9kdWNpbmcKKyAqIGFycmF5cyBv ZiBkYXR1bXMgYW5kIG51bGwgZmxhZ3MsIGFuZCBhbHNvIGNhdGVnb3JpemUgdGhvc2UgYXJndW1l bnRzIHVzaW5nCisgKiBqc29uX2NhdGVnb3JpemVfdHlwZSwgY2FjaGluZyBzdGF0ZSBpbiBmY2lu Zm8tPmZuX2V4dHJhIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgKgorICogVGhlIHJldHVybiB2 YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHRoZSBjYWxsZXIgc2hvdWxkIHBy b2Nlc3MsIG9yCisgKiAtMSBpZiB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB1c2luZyB0aGUgVkFS SUFESUMgc3ludGF4IHdpdGggYSBOVUxMIGFycmF5LiBJZgorICogdGhlIHJldHVybiB2YWx1ZSBp cyA+MCwgKmFyZ3MgYW5kICpudWxscyBhcmUgc2V0IHRvIHBhbGxvYydkIGFycmF5cyBvZiB0aGUK KyAqIGV4dHJhY3RlZCBhcmd1bWVudHMsIGFuZCAqY2F0ZWdvcmllcyBhbmQgKm91dGZsaW5mb3Mg YXJlIHNldCB0byBhcnJheXMgd2hpY2gKKyAqIGhvbGQgdGhlIHJlc3VsdHMgb2YganNvbl9jYXRl Z29yaXplX3R5cGUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHBvc2l0aW9uLgorICov CitpbnQKK2pzb25fZXh0cmFjdF92YXJpYWRpY19hcmdzKGJvb2wgaXNfanNvbmIsCisJCQkJCQkg ICBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKKwkJCQkJCSAgIERhdHVtICoqYXJncywgYm9vbCAq Km51bGxzLAorCQkJCQkJICAgSnNvblR5cGVDYXRlZ29yeSAqKmNhdGVnb3JpZXMsCisJCQkJCQkg ICBGbWdySW5mbyAqKm91dGZsaW5mb3MpCit7CisJaW50CQluYXJnczsKKworCWlmICghZ2V0X2Zu X2V4cHJfdmFyaWFkaWMoZmNpbmZvLT5mbGluZm8pKQorCXsKKwkJSnNvblR5cGVDYWNoZSAqamNh Y2hlOworCisJCW5hcmdzID0gUEdfTkFSR1MoKTsKKwkJaWYgKG5hcmdzID09IDApCisJCQlyZXR1 cm4gMDsKKworCQkvKiBCdWlsZCBhIGNhY2hlIG9uIGZpcnN0IGNhbGwsIHRvIHNwZWVkIHVwIGZ1 dHVyZSBjYWxscy4gKi8KKwkJaWYgKGZjaW5mby0+ZmxpbmZvLT5mbl9leHRyYSA9PSBOVUxMKQor CQl7CisJCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJCQlPaWQJCSAgICp0eXBlczsKKwor CQkJdHlwZXMgPSBwYWxsb2NfYXJyYXkoT2lkLCBuYXJncyk7CisJCQlmb3IgKGludCBpID0gMDsg aSA8IG5hcmdzOyArK2kpCisJCQkJdHlwZXNbaV0gPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5m by0+ZmxpbmZvLCBpKTsKKworCQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhm Y2luZm8tPmZsaW5mby0+Zm5fbWN4dCk7CisJCQlqY2FjaGUgPSBqc29uX2J1aWxkX3R5cGVfY2Fj aGUoaXNfanNvbmIsIG5hcmdzLCB0eXBlcyk7CisJCQlmY2luZm8tPmZsaW5mby0+Zm5fZXh0cmEg PSBqY2FjaGU7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCX0KKwkJ ZWxzZQorCQkJamNhY2hlID0gZmNpbmZvLT5mbGluZm8tPmZuX2V4dHJhOworCisJCS8qIEdldCBj YXRlZ29yeSBhbmQgZmxpbmZvIGFycmF5cyBmcm9tIGNhY2hlLiAqLworCQkqY2F0ZWdvcmllcyA9 IGpjYWNoZS0+Y2F0ZWdvcmllczsKKwkJKm91dGZsaW5mb3MgPSBqY2FjaGUtPmZsaW5mb3M7CisK KwkJLyogRXh0cmFjdCBhcmd1bWVudHMgYW5kIGlzbnVsbCBmbGFncy4gKi8KKwkJKmFyZ3MgPSBw YWxsb2NfYXJyYXkoRGF0dW0sIG5hcmdzKTsKKwkJKm51bGxzID0gcGFsbG9jX2FycmF5KGJvb2ws IG5hcmdzKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgKytpKQorCQl7CisJCQlpZiAo UEdfQVJHSVNOVUxMKGkpKQorCQkJeworCQkJCSgqbnVsbHMpW2ldID0gdHJ1ZTsKKwkJCQkoKmFy Z3MpW2ldID0gKERhdHVtKSAwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCSgqbnVsbHMpW2ld ID0gZmFsc2U7CisJCQkJKCphcmdzKVtpXSA9IFBHX0dFVEFSR19EQVRVTShpKTsKKwkJCX0KKwkJ fQorCX0KKwllbHNlIGlmIChQR19BUkdJU05VTEwoMCkpCisJeworCQkvKiBTcGVjaWFsIGNhc2U6 IFZBUklBRElDIE5VTEw6OnNvbWV0eXBlW10gKi8KKwkJbmFyZ3MgPSAtMTsKKwl9CisJZWxzZQor CXsKKwkJQXJyYXlUeXBlICAqdmFyaWFkaWNfYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1Ao MCk7CisJCU9pZAkJCXZhcmlhZGljX2VsZW1lbnRfdHlwZSA9IEFSUl9FTEVNVFlQRSh2YXJpYWRp Y19hcnJheSk7CisJCWJvb2wJCXR5cGJ5dmFsOworCQljaGFyCQl0eXBhbGlnbjsKKwkJaW50MTYJ CXR5cGxlbjsKKwkJSnNvblR5cGVDYWNoZSAqamNhY2hlOworCisJCS8qIERlY29uc3RydWN0IHRo ZSBhcnJheS4gKi8KKwkJQXNzZXJ0KFBHX05BUkdTKCkgPT0gMSk7CisJCWdldF90eXBsZW5ieXZh bGFsaWduKHZhcmlhZGljX2VsZW1lbnRfdHlwZSwgJnR5cGxlbiwgJnR5cGJ5dmFsLCAmdHlwYWxp Z24pOworCQlkZWNvbnN0cnVjdF9hcnJheSh2YXJpYWRpY19hcnJheSwgdmFyaWFkaWNfZWxlbWVu dF90eXBlLCB0eXBsZW4sIHR5cGJ5dmFsLAorCQkJCQkJICB0eXBhbGlnbiwgYXJncywgbnVsbHMs ICZuYXJncyk7CisJCWlmIChuYXJncyA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyogQnVpbGQg Y2FjaGUgZm9yIHRoZSBhcnJheSBlbGVtZW50IHR5cGUgb24gZmlyc3QgcGFzcy4gKi8KKwkJaWYg KGZjaW5mby0+ZmxpbmZvLT5mbl9leHRyYSA9PSBOVUxMKQorCQl7CisJCQlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQ7CisKKwkJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZmNp bmZvLT5mbGluZm8tPmZuX21jeHQpOworCQkJamNhY2hlID0ganNvbl9idWlsZF90eXBlX2NhY2hl KGlzX2pzb25iLCAxLCAmdmFyaWFkaWNfZWxlbWVudF90eXBlKTsKKwkJCWZjaW5mby0+ZmxpbmZv LT5mbl9leHRyYSA9IGpjYWNoZTsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKKwkJfQorCQllbHNlCisJCQlqY2FjaGUgPSBmY2luZm8tPmZsaW5mby0+Zm5fZXh0cmE7CisK KwkJLyoKKwkJICogV2hlbiBhIFZBUklBRElDIGFycmF5IGlzIHBhc3NlZCwgdGhlcmUncyBvbmx5 IG9uZSBhcmd1bWVudCBkYXRhIHR5cGUsCisJCSAqIGJ1dCB0aGUgY2FsbGVyIGV4cGVjdHMgY2F0 ZWdvcnkgYW5kIGZsaW5mbyBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIGFzCisJCSAqIHRoZSBu dW1iZXIgb2YgYXJndW1lbnRzLCBhbmQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgY2FuIHZhcnkg b24gZXZlcnkKKwkJICogY2FsbC4gVG8gZ2FpbiBhcyBtdWNoIHBlcmZvcm1hbmNlIGFzIHdlIGNh biB3aXRob3V0IGNvbXBsaWNhdGluZyBjb2RlCisJCSAqIGVsc2V3aGVyZSwgc2F2ZSB0aGUgc2lu Z2xlIGRhdGEgdHlwZSBpbiB0aGUgY2FjaGUgYW5kIHRoZW4gYnVpbGQgb3V0CisJCSAqIGFycmF5 cyBvZiB0aGUgcmVxdWlzaXRlIGxlbmd0aCBieSBjb3B5aW5nLgorCQkgKi8KKwkJKmNhdGVnb3Jp ZXMgPSBwYWxsb2NfYXJyYXkoSnNvblR5cGVDYXRlZ29yeSwgbmFyZ3MpOworCQkqb3V0ZmxpbmZv cyA9IHBhbGxvYzBfYXJyYXkoRm1nckluZm8sIG5hcmdzKTsKKwkJaWYgKE9pZElzVmFsaWQoamNh Y2hlLT5mbGluZm9zWzBdLmZuX29pZCkpCisJCXsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmFy Z3M7ICsraSkKKwkJCXsKKwkJCQkoKmNhdGVnb3JpZXMpW2ldID0gamNhY2hlLT5jYXRlZ29yaWVz WzBdOworCQkJCWZtZ3JfaW5mb19jb3B5KCYoKm91dGZsaW5mb3MpW2ldLCAmamNhY2hlLT5mbGlu Zm9zWzBdLAorCQkJCQkJCSAgIEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwkJCX0KKwkJfQorCQll bHNlCisJCXsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmFyZ3M7ICsraSkKKwkJCQkoKmNhdGVn b3JpZXMpW2ldID0gamNhY2hlLT5jYXRlZ29yaWVzWzBdOworCQl9CisJfQorCisJcmV0dXJuIG5h cmdzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnR5cGVzLmggYi9zcmMv aW5jbHVkZS91dGlscy9qc29udHlwZXMuaAppbmRleCA0ZmUzOTExZjY5Yy4uMDM3MmJmOTY0MTgg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb250eXBlcy5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2pzb250eXBlcy5oCkBAIC0zMyw5ICszMywyNCBAQCB0eXBlZGVmIGVudW0KIAlK U09OVFlQRV9PVEhFUiwJCQkJLyogYWxsIGVsc2UgKi8KIH0gSnNvblR5cGVDYXRlZ29yeTsKIAor dHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQJCQluYXJnczsKKwlKc29uVHlwZUNhdGVnb3J5ICpjYXRl Z29yaWVzOworCUZtZ3JJbmZvICAgKmZsaW5mb3M7Cit9IEpzb25UeXBlQ2FjaGU7CisKIGV4dGVy biB2b2lkIGpzb25fY2F0ZWdvcml6ZV90eXBlKE9pZCB0eXBvaWQsIGJvb2wgaXNfanNvbmIsCiAJ CQkJCQkJCSBKc29uVHlwZUNhdGVnb3J5ICp0Y2F0ZWdvcnksCiAJCQkJCQkJCSBGbWdySW5mbyAq b3V0ZmxpbmZvKTsKIGV4dGVybiB2b2lkIGpzb25fY2hlY2tfbXV0YWJpbGl0eShPaWQgdHlwb2lk LCBib29sICpoYXNfbXV0YWJsZSk7CitleHRlcm4gSnNvblR5cGVDYWNoZSAqanNvbl9idWlsZF90 eXBlX2NhY2hlKGJvb2wgaXNfanNvbmIsCisJCQkJCQkJCQkJCWludCBuYXJncywKKwkJCQkJCQkJ CQkJT2lkICp0eXBlcyk7CitleHRlcm4gaW50IGpzb25fZXh0cmFjdF92YXJpYWRpY19hcmdzKGJv b2wgaXNfanNvbmIsCisJCQkJCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAorCQkJCQkJ CQkJICBEYXR1bSAqKmFyZ3MsIGJvb2wgKipudWxscywKKwkJCQkJCQkJCSAgSnNvblR5cGVDYXRl Z29yeSAqKmNhdGVnb3JpZXMsCisJCQkJCQkJCQkgIEZtZ3JJbmZvICoqb3V0ZmxpbmZvcyk7CiAK ICNlbmRpZgkJCQkJCQkvKiBKU09OVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApp bmRleCAzYTI3MjBmYjVmOS4uY2E5NzI2YzQ5MzEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC0xNTA5LDYgKzE1MDksNyBAQCBKc29uVGFibGVQbGFuU3RhdGUKIEpzb25UYWJsZVNpYmxp bmdKb2luCiBKc29uVG9rZW5UeXBlCiBKc29uVHJhbnNmb3JtU3RyaW5nVmFsdWVzQWN0aW9uCitK c29uVHlwZUNhY2hlCiBKc29uVHlwZUNhdGVnb3J5CiBKc29uVW5pcXVlQnVpbGRlclN0YXRlCiBK c29uVW5pcXVlQ2hlY2tTdGF0ZQotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --0000000000000cfb1a0655a342ab Content-Type: application/octet-stream; name="v1-0002-Don-t-treat-record-json-b-conversions-as-immutabl.patch" Content-Disposition: attachment; filename="v1-0002-Don-t-treat-record-json-b-conversions-as-immutabl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3prptp1 RnJvbSA4NTU1NzM4OGQ0MGQ2ZDNmZTNlNGFjOTFjYTdiOTdmZTI3ZTI5NzM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMSBKdWwgMjAyNiAxMDoyOTozMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMi81 XSBEb24ndCB0cmVhdCByZWNvcmQgLT4ganNvbihiKSBjb252ZXJzaW9ucyBhcwogaW1tdXRhYmxl LgoKVGhlIGV4aXN0aW5nIGJlaGF2aW9yIGlzIGFjY2lkZW50YWwgYW5kIGluY29ycmVjdC4gT3V0 cHV0IGZ1bmN0aW9ucwphcmUgcmVxdWlyZWQgdG8gYmUgc3RhYmxlLCBidXQgb25seSBzb21lIG9m IHRoZW0gYXJlIGltbXV0YWJsZTsgaGVuY2UsCm91dHB1dCBmdW5jdGlvbnMgZm9yIGNvbnRhaW5l ciB0eXBlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBzdGFibGUuClRoZSBKU09OIGNvZGUgaGFzIG5v dCBnb3R0ZW4gdGhpcyByaWdodC4gQSByZWNlbnQgcmVmYWN0b3Jpbmcgc3VyZmFjZWQKdGhlIGRl ZmVjdCBidXQgcHJlc2VydmVkIGl0IHZpYSBhIHNwZWNpYWwtY2FzZSBleGNlcHRpb247IHRoaXMg Y29tbWl0CnJlbW92ZXMgdGhhdCBleGNlcHRpb24gYW5kIHVwZGF0ZXMgdGhlIHRlc3QgYWNjb3Jk aW5nbHkuCgpUaGlzIGFsc28gcmVtb3ZlcyB0aGUgY29ycmVzcG9uZGluZyBleGNlcHRpb25zIGZv ciBhbnlhcnJheSBhbmQKYW55Y29tcGF0aWJsZWFycmF5LCB3aGljaCBhcmUgd3JvbmcgZm9yIHRo ZSBzYW1lIHJlYXNvbnMsIGJ1dCByZW1vdmluZwp0aG9zZSBleGNlcHRpb25zIGlzIG5vdCBleHBl Y3RlZCB0byBoYXZlIGFueSBzaWduaWZpY2FudCB1c2VyLXZpc2libGUKY29uc2VxdWVuY2VzLiBW YWx1ZXMgb2YgdHlwZSByZWNvcmQgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nClJPVygpLCBidXQg dGhlcmUncyBubyBlcXVpdmFsZW50IGZvciBhbnlhcnJheSBvciBhbnljb21wYXRpYmxlYXJyYXku CgpOb3RlIHRoYXQgdGhlIGNoYW5nZSBmb3IgdHlwZSByZWNvcmQgaXMgYSAobWlub3IpIGJhY2t3 YXJkIGNvbXBhdGliaWxpdHkKYnJlYWsgdGhhdCBjb3VsZCBibG9jayB1cGdyYWRlczsgc2VlIHRo ZSByZWdyZXNzaW9uIHRlc3QgZm9yIGFuIGV4YW1wbGUKb2YgYSBjYXNlIHRoYXQgd291bGQgYnJl YWsuCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5jICAgICB8IDYgLS0tLS0t CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IHwgMiArLQogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvc3FsanNvbi5zcWwgICAgICB8IDEgLQogMyBmaWxlcyBjaGFuZ2VkLCAxIGlu c2VydGlvbigrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbmZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKaW5k ZXggZjc2OWU5MGJhNWUuLmMyODlkYmFlNzE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbmZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25mdW5jcy5j CkBAIC02MTM1LDEyICs2MTM1LDYgQEAganNvbl9jaGVja19tdXRhYmlsaXR5KE9pZCB0eXBvaWQs IGJvb2wgKmhhc19tdXRhYmxlKQogCQljYXNlIFRJTUVTVEFNUFRaT0lEOgogCQkJKmhhc19tdXRh YmxlID0gdHJ1ZTsKIAkJCWJyZWFrOwotCQljYXNlIFJFQ09SRE9JRDoKLQkJY2FzZSBBTllBUlJB WU9JRDoKLQkJY2FzZSBBTllDT01QQVRJQkxFQVJSQVlPSUQ6Ci0JCQkvKiBYWFggaW5jb3JyZWN0 bHkgdHJlYXRlZCBhcyBrbm93biBpbW11dGFibGUgKi8KLQkJCWJyZWFrOwotCiAJCWRlZmF1bHQ6 CiAJCQl7CiAJCQkJT2lkCQkJY2FzdGZ1bmMgPSBnZXRfanNvbl9jYXN0X2Zvcl90eXBlKHR5cG9p ZCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dAppbmRleCBmZWRiZWNhN2EyMS4u ZjU1MDRjMTFmNjYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNv bi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dApAQCAtMTc1 OSw1ICsxNzU5LDUgQEAgU0VMRUNUIEpTT05fT0JKRUNUKCdhJzogSlNPTl9PQkpFQ1RBR0coJ2In OiAxIFJFVFVSTklORyB0ZXh0KSBGT1JNQVQgSlNPTik7CiBEUk9QIEZVTkNUSU9OIHZvbGF0aWxl X29uZSwgc3RhYmxlX29uZTsKIC0tIEpTT05fQVJSQVkoUk9XKC4uLikpIGlzIG5vdCBpbW11dGFi bGUsIHNvIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIHRvCiAtLSBjcmVhdGUgYSBnZW5lcmF0ZWQg Y29sdW1uLgotLS0gWFhYOiBDdXJyZW50bHksIHRoaXMgaXMgZXJyb25lb3VzbHkgYWxsb3dlZC4K IENSRUFURSBUQUJMRSBqc29uX2FycmF5X29mX3JvdyAoYSBpbnQsIGoganNvbiBHRU5FUkFURUQg QUxXQVlTIEFTIChKU09OX0FSUkFZKFJPVyhhKSkpIFNUT1JFRCk7CitFUlJPUjogIGdlbmVyYXRp b24gZXhwcmVzc2lvbiBpcyBub3QgaW1tdXRhYmxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCmlu ZGV4IDc3OTEwMTM3NTczLi4wNzYyYWYyNjE4OCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3FsanNvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3FsanNvbi5zcWwK QEAgLTcwOSw1ICs3MDksNCBAQCBEUk9QIEZVTkNUSU9OIHZvbGF0aWxlX29uZSwgc3RhYmxlX29u ZTsKIAogLS0gSlNPTl9BUlJBWShST1coLi4uKSkgaXMgbm90IGltbXV0YWJsZSwgc28gaXQgc2hv dWxkIGJlIGltcG9zc2libGUgdG8KIC0tIGNyZWF0ZSBhIGdlbmVyYXRlZCBjb2x1bW4uCi0tLSBY WFg6IEN1cnJlbnRseSwgdGhpcyBpcyBlcnJvbmVvdXNseSBhbGxvd2VkLgogQ1JFQVRFIFRBQkxF IGpzb25fYXJyYXlfb2Zfcm93IChhIGludCwgaiBqc29uIEdFTkVSQVRFRCBBTFdBWVMgQVMgKEpT T05fQVJSQVkoUk9XKGEpKSkgU1RPUkVEKTsKLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCg== --0000000000000cfb1a0655a342ab Content-Type: application/octet-stream; name="v1-0004-Allow-JSON_OBJECT-JSON_ARRAY-JSON_SCALAR-to-cache.patch" Content-Disposition: attachment; filename="v1-0004-Allow-JSON_OBJECT-JSON_ARRAY-JSON_SCALAR-to-cache.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3prpu53 RnJvbSBiN2IyNWM1ZjE2OGE5ZTc5YWFkNTg5NzI4NmY5OGI3MjJiNjFjZGJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFNhdCwgNCBBcHIgMjAyNiAxOToxNjoyNiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjEgNC81 XSBBbGxvdyBKU09OX09CSkVDVCwgSlNPTl9BUlJBWSwgSlNPTl9TQ0FMQVIgdG8gY2FjaGUKIEpT T04gdHlwZSBpbmZvcm1hdGlvbi4KClRoaXMgbWF5IHNpZ25pZmljYW50bHkgaW1wcm92ZSBwZXJm b3JtYW5jZSBpbiBxdWVyaWVzIHdoaWNoCmV4ZWN1dGUgdGhlc2UgZnVuY3Rpb25zIHJlcGVhdGVk bHkuCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyAgICAgICB8IDI4ICsrKyst LS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyB8IDE1ICsrLS0tCiBz cmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jICAgICAgICAgIHwgODYgKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jICAgICAgICAgfCA4OCAr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHBy LmggICAgICAgfCAgOSArLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2pzb24uaCAgICAgICAgICAgICAg fCAxNSArKystLQogc3JjL2luY2x1ZGUvdXRpbHMvanNvbmIuaCAgICAgICAgICAgICB8IDE1ICsr Ky0tCiA3IGZpbGVzIGNoYW5nZWQsIDEyOSBpbnNlcnRpb25zKCspLCAxMjcgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggODcxZmQxN2UxY2EuLjc2NmNkOTQ0OGY2IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTIzOTksMTUgKzIzOTksMTIgQEAgRXhlY0luaXRF eHByUmVjKEV4cHIgKm5vZGUsIEV4cHJTdGF0ZSAqc3RhdGUsCiAJCQkJCWpjc3RhdGUtPmNvbnN0 cnVjdG9yID0gY3RvcjsKIAkJCQkJamNzdGF0ZS0+YXJnX3ZhbHVlcyA9IHBhbGxvY19hcnJheShE YXR1bSwgbmFyZ3MpOwogCQkJCQlqY3N0YXRlLT5hcmdfbnVsbHMgPSBwYWxsb2NfYXJyYXkoYm9v bCwgbmFyZ3MpOwotCQkJCQlqY3N0YXRlLT5hcmdfdHlwZXMgPSBwYWxsb2NfYXJyYXkoT2lkLCBu YXJncyk7CiAJCQkJCWpjc3RhdGUtPm5hcmdzID0gbmFyZ3M7CiAKIAkJCQkJZm9yZWFjaChsYywg YXJncykKIAkJCQkJewogCQkJCQkJRXhwcgkgICAqYXJnID0gKEV4cHIgKikgbGZpcnN0KGxjKTsK IAotCQkJCQkJamNzdGF0ZS0+YXJnX3R5cGVzW2FyZ25vXSA9IGV4cHJUeXBlKChOb2RlICopIGFy Zyk7Ci0KIAkJCQkJCWlmIChJc0EoYXJnLCBDb25zdCkpCiAJCQkJCQl7CiAJCQkJCQkJLyogRG9u J3QgZXZhbHVhdGUgY29uc3QgYXJndW1lbnRzIGV2ZXJ5IHJvdW5kICovCkBAIC0yNDI1LDI1ICsy NDIyLDI4IEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAog CQkJCQkJYXJnbm8rKzsKIAkJCQkJfQogCi0JCQkJCS8qIHByZXBhcmUgdHlwZSBjYWNoZSBmb3Ig ZGF0dW1fdG9fanNvbltiXSgpICovCi0JCQkJCWlmIChjdG9yLT50eXBlID09IEpTQ1RPUl9KU09O X1NDQUxBUikKKwkJCQkJLyoKKwkJCQkJICogUHJlcGFyZSB0eXBlIGNhY2hlIGZvciBqc29uX2J1 aWxkXypfd29ya2VyIGFuZAorCQkJCQkgKiBkYXR1bV90b19qc29uW2JdLCB3aGljaCBhcmUgdXNl ZCBmb3IgU0NBTEFSLCBPQkpFQ1QsCisJCQkJCSAqIGFuZCBBUlJBWSBjb25zdHJ1Y3RvcnMuCisJ CQkJCSAqLworCQkJCQlpZiAoY3Rvci0+dHlwZSAhPSBKU0NUT1JfSlNPTl9QQVJTRSkKIAkJCQkJ ewogCQkJCQkJYm9vbAkJaXNfanNvbmIgPQogCQkJCQkJCWN0b3ItPnJldHVybmluZy0+Zm9ybWF0 LT5mb3JtYXRfdHlwZSA9PSBKU19GT1JNQVRfSlNPTkI7CiAKLQkJCQkJCWpjc3RhdGUtPmFyZ190 eXBlX2NhY2hlID0KLQkJCQkJCQlwYWxsb2Moc2l6ZW9mKCpqY3N0YXRlLT5hcmdfdHlwZV9jYWNo ZSkgKiBuYXJncyk7CisJCQkJCQlqY3N0YXRlLT5hcmdfY2F0ZWdvcmllcyA9CisJCQkJCQkJcGFs bG9jX2FycmF5KEpzb25UeXBlQ2F0ZWdvcnksIG5hcmdzKTsKKwkJCQkJCWpjc3RhdGUtPmFyZ19v dXRmbGluZm9zID0KKwkJCQkJCQlwYWxsb2MwX2FycmF5KEZtZ3JJbmZvLCBuYXJncyk7CiAKIAkJ CQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKIAkJCQkJCXsKLQkJCQkJCQlKc29u VHlwZUNhdGVnb3J5IGNhdGVnb3J5OwotCQkJCQkJCU9pZAkJCXR5cGlkID0gamNzdGF0ZS0+YXJn X3R5cGVzW2ldOwotCi0JCQkJCQkJanNvbl9jYXRlZ29yaXplX3R5cGUodHlwaWQsIGlzX2pzb25i LAotCQkJCQkJCQkJCQkJICZjYXRlZ29yeSwKLQkJCQkJCQkJCQkJCSAmamNzdGF0ZS0+YXJnX3R5 cGVfY2FjaGVbaV0ub3V0ZmxpbmZvKTsKKwkJCQkJCQlOb2RlCSAgICphcmcgPSAoTm9kZSAqKSBs aXN0X250aChhcmdzLCBpKTsKIAotCQkJCQkJCWpjc3RhdGUtPmFyZ190eXBlX2NhY2hlW2ldLmNh dGVnb3J5ID0gKGludCkgY2F0ZWdvcnk7CisJCQkJCQkJanNvbl9jYXRlZ29yaXplX3R5cGUoZXhw clR5cGUoYXJnKSwgaXNfanNvbmIsCisJCQkJCQkJCQkJCQkgJmpjc3RhdGUtPmFyZ19jYXRlZ29y aWVzW2ldLAorCQkJCQkJCQkJCQkJICZqY3N0YXRlLT5hcmdfb3V0ZmxpbmZvc1tpXSk7CiAJCQkJ CQl9CiAJCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggMWVi ZmIxOTBlNjcuLmE1N2JlNzNiZTQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJw LmMKQEAgLTQ3NDUsNyArNDc0NSw4IEBAIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkgICBqc29uX2J1aWxkX2FycmF5X3dvcmtl cikgKGpjc3RhdGUtPm5hcmdzLAogCQkJCQkJCQkJCSBqY3N0YXRlLT5hcmdfdmFsdWVzLAogCQkJ CQkJCQkJCSBqY3N0YXRlLT5hcmdfbnVsbHMsCi0JCQkJCQkJCQkJIGpjc3RhdGUtPmFyZ190eXBl cywKKwkJCQkJCQkJCQkgamNzdGF0ZS0+YXJnX2NhdGVnb3JpZXMsCisJCQkJCQkJCQkJIGpjc3Rh dGUtPmFyZ19vdXRmbGluZm9zLAogCQkJCQkJCQkJCSBqY3N0YXRlLT5jb25zdHJ1Y3Rvci0+YWJz ZW50X29uX251bGwpOwogCWVsc2UgaWYgKGN0b3ItPnR5cGUgPT0gSlNDVE9SX0pTT05fT0JKRUNU KQogCQlyZXMgPSAoaXNfanNvbmIgPwpAQCAtNDc1Myw3ICs0NzU0LDggQEAgRXhlY0V2YWxKc29u Q29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCSAgIGpz b25fYnVpbGRfb2JqZWN0X3dvcmtlcikgKGpjc3RhdGUtPm5hcmdzLAogCQkJCQkJCQkJCSAgamNz dGF0ZS0+YXJnX3ZhbHVlcywKIAkJCQkJCQkJCQkgIGpjc3RhdGUtPmFyZ19udWxscywKLQkJCQkJ CQkJCQkgIGpjc3RhdGUtPmFyZ190eXBlcywKKwkJCQkJCQkJCQkgIGpjc3RhdGUtPmFyZ19jYXRl Z29yaWVzLAorCQkJCQkJCQkJCSAgamNzdGF0ZS0+YXJnX291dGZsaW5mb3MsCiAJCQkJCQkJCQkJ ICBqY3N0YXRlLT5jb25zdHJ1Y3Rvci0+YWJzZW50X29uX251bGwsCiAJCQkJCQkJCQkJICBqY3N0 YXRlLT5jb25zdHJ1Y3Rvci0+dW5pcXVlKTsKIAllbHNlIGlmIChjdG9yLT50eXBlID09IEpTQ1RP Ul9KU09OX1NDQUxBUikKQEAgLTQ3NjYsMTQgKzQ3NjgsMTMgQEAgRXhlY0V2YWxKc29uQ29uc3Ry dWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJZWxzZQogCQl7CiAJ CQlEYXR1bQkJdmFsdWUgPSBqY3N0YXRlLT5hcmdfdmFsdWVzWzBdOwotCQkJRm1nckluZm8gICAq b3V0ZmxpbmZvID0gJmpjc3RhdGUtPmFyZ190eXBlX2NhY2hlWzBdLm91dGZsaW5mbzsKLQkJCUpz b25UeXBlQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoSnNvblR5cGVDYXRlZ29yeSkKLQkJCQlqY3N0YXRl LT5hcmdfdHlwZV9jYWNoZVswXS5jYXRlZ29yeTsKIAogCQkJaWYgKGlzX2pzb25iKQotCQkJCXJl cyA9IGRhdHVtX3RvX2pzb25iKHZhbHVlLCBjYXRlZ29yeSwgb3V0ZmxpbmZvKTsKKwkJCQlyZXMg PSBkYXR1bV90b19qc29uYih2YWx1ZSwgamNzdGF0ZS0+YXJnX2NhdGVnb3JpZXNbMF0sCisJCQkJ CQkJCQkgJmpjc3RhdGUtPmFyZ19vdXRmbGluZm9zWzBdKTsKIAkJCWVsc2UKLQkJCQlyZXMgPSBk YXR1bV90b19qc29uKHZhbHVlLCBjYXRlZ29yeSwgb3V0ZmxpbmZvKTsKKwkJCQlyZXMgPSBkYXR1 bV90b19qc29uKHZhbHVlLCBqY3N0YXRlLT5hcmdfY2F0ZWdvcmllc1swXSwKKwkJCQkJCQkJCSZq Y3N0YXRlLT5hcmdfb3V0ZmxpbmZvc1swXSk7CiAJCX0KIAl9CiAJZWxzZSBpZiAoY3Rvci0+dHlw ZSA9PSBKU0NUT1JfSlNPTl9QQVJTRSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCmluZGV4IDc4ODIzN2Y2YjQ4 Li4yNGI0MWYwYTM3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCkBAIC05NSw4ICs5NSw2IEBAIHN0YXRp YyB2b2lkIGFycmF5X3RvX2pzb25faW50ZXJuYWwoRGF0dW0gYXJyYXksIFN0cmluZ0luZm8gcmVz dWx0LAogc3RhdGljIHZvaWQgZGF0dW1fdG9fanNvbl9pbnRlcm5hbChEYXR1bSB2YWwsIGJvb2wg aXNfbnVsbCwgU3RyaW5nSW5mbyByZXN1bHQsCiAJCQkJCQkJCSAgIEpzb25UeXBlQ2F0ZWdvcnkg dGNhdGVnb3J5LAogCQkJCQkJCQkgICBGbWdySW5mbyAqb3V0ZmxpbmZvLCBib29sIGtleV9zY2Fs YXIpOwotc3RhdGljIHZvaWQgYWRkX2pzb24oRGF0dW0gdmFsLCBib29sIGlzX251bGwsIFN0cmlu Z0luZm8gcmVzdWx0LAotCQkJCQkgT2lkIHZhbF90eXBlLCBib29sIGtleV9zY2FsYXIpOwogc3Rh dGljIHRleHQgKmNhdGVuYXRlX3N0cmluZ2luZm9fc3RyaW5nKFN0cmluZ0luZm8gYnVmZmVyLCBj b25zdCBjaGFyICphZGRvbik7CiAKIC8qCkBAIC01OTIsMzUgKzU5MCw2IEBAIGNvbXBvc2l0ZV90 b19qc29uKERhdHVtIGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsIGJvb2wgdXNlX2xpbmVf ZmVlZHMpCiAJUmVsZWFzZVR1cGxlRGVzYyh0dXBkZXNjKTsKIH0KIAotLyoKLSAqIEFwcGVuZCBK U09OIHRleHQgZm9yICJ2YWwiIHRvICJyZXN1bHQiLgotICoKLSAqIFRoaXMgaXMganVzdCBhIHRo aW4gd3JhcHBlciBhcm91bmQgZGF0dW1fdG9fanNvbi4gIElmIHRoZSBzYW1lIHR5cGUgd2lsbCBi ZQotICogcHJpbnRlZCBtYW55IHRpbWVzLCBhdm9pZCB1c2luZyB0aGlzOyBiZXR0ZXIgdG8gZG8g dGhlIGpzb25fY2F0ZWdvcml6ZV90eXBlCi0gKiBsb29rdXBzIG9ubHkgb25jZS4KLSAqLwotc3Rh dGljIHZvaWQKLWFkZF9qc29uKERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBTdHJpbmdJbmZvIHJl c3VsdCwKLQkJIE9pZCB2YWxfdHlwZSwgYm9vbCBrZXlfc2NhbGFyKQotewotCUpzb25UeXBlQ2F0 ZWdvcnkgdGNhdGVnb3J5OwotCUZtZ3JJbmZvCW91dGZsaW5mbzsKLQotCWlmICh2YWxfdHlwZSA9 PSBJbnZhbGlkT2lkKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1pbmUg aW5wdXQgZGF0YSB0eXBlIikpKTsKLQotCWlmIChpc19udWxsKQotCQl0Y2F0ZWdvcnkgPSBKU09O VFlQRV9OVUxMOwotCWVsc2UKLQkJanNvbl9jYXRlZ29yaXplX3R5cGUodmFsX3R5cGUsIGZhbHNl LAotCQkJCQkJCSAmdGNhdGVnb3J5LCAmb3V0ZmxpbmZvKTsKLQotCWRhdHVtX3RvX2pzb25faW50 ZXJuYWwodmFsLCBpc19udWxsLCByZXN1bHQsIHRjYXRlZ29yeSwgJm91dGZsaW5mbywKLQkJCQkJ CSAgIGtleV9zY2FsYXIpOwotfQotCiAvKgogICogU1FMIGZ1bmN0aW9uIGFycmF5X3RvX2pzb24o cm93KQogICovCkBAIC0xMjAwLDcgKzExNjksOSBAQCBjYXRlbmF0ZV9zdHJpbmdpbmZvX3N0cmlu ZyhTdHJpbmdJbmZvIGJ1ZmZlciwgY29uc3QgY2hhciAqYWRkb24pCiB9CiAKIERhdHVtCi1qc29u X2J1aWxkX29iamVjdF93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3Qg Ym9vbCAqbnVsbHMsIGNvbnN0IE9pZCAqdHlwZXMsCitqc29uX2J1aWxkX29iamVjdF93b3JrZXIo aW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMsCisJCQkJCQkg Y29uc3QgSnNvblR5cGVDYXRlZ29yeSAqY2F0ZWdvcmllcywKKwkJCQkJCSBGbWdySW5mbyAqb3V0 ZmxpbmZvcywKIAkJCQkJCSBib29sIGFic2VudF9vbl9udWxsLCBib29sIHVuaXF1ZV9rZXlzKQog ewogCWludAkJCWk7CkBAIC0xMjU2LDcgKzEyMjcsOCBAQCBqc29uX2J1aWxkX29iamVjdF93b3Jr ZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMsIGNvbnN0 CiAJCS8qIHNhdmUga2V5IG9mZnNldCBiZWZvcmUgYXBwZW5kaW5nIGl0ICovCiAJCWtleV9vZmZz ZXQgPSBvdXQtPmxlbjsKIAotCQlhZGRfanNvbihhcmdzW2ldLCBmYWxzZSwgb3V0LCB0eXBlc1tp XSwgdHJ1ZSk7CisJCWRhdHVtX3RvX2pzb25faW50ZXJuYWwoYXJnc1tpXSwgZmFsc2UsIG91dCwK KwkJCQkJCQkgICBjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tpXSwgdHJ1ZSk7CiAKIAkJaWYg KHVuaXF1ZV9rZXlzKQogCQl7CkBAIC0xMjgyLDcgKzEyNTQsOSBAQCBqc29uX2J1aWxkX29iamVj dF93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMs IGNvbnN0CiAJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocmVzdWx0LCAiIDogIik7CiAKIAkJLyog cHJvY2VzcyB2YWx1ZSAqLwotCQlhZGRfanNvbihhcmdzW2kgKyAxXSwgbnVsbHNbaSArIDFdLCBy ZXN1bHQsIHR5cGVzW2kgKyAxXSwgZmFsc2UpOworCQlkYXR1bV90b19qc29uX2ludGVybmFsKGFy Z3NbaSArIDFdLCBudWxsc1tpICsgMV0sIHJlc3VsdCwKKwkJCQkJCQkgICBjYXRlZ29yaWVzW2kg KyAxXSwgJm91dGZsaW5mb3NbaSArIDFdLAorCQkJCQkJCSAgIGZhbHNlKTsKIAl9CiAKIAlhcHBl bmRTdHJpbmdJbmZvQ2hhcihyZXN1bHQsICd9Jyk7CkBAIC0xMjk5LDE1ICsxMjczLDI2IEBAIGpz b25fYnVpbGRfb2JqZWN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJRGF0dW0JICAgKmFyZ3M7CiAJYm9v bAkgICAqbnVsbHM7CiAJT2lkCQkgICAqdHlwZXM7CisJaW50CQkJbmFyZ3M7CisJSnNvblR5cGVD YXRlZ29yeSAqY2F0ZWdvcmllczsKKwlGbWdySW5mbyAgICpvdXRmbGluZm9zOwogCiAJLyogYnVp bGQgYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBvYmplY3QgKi8KLQlpbnQJCQluYXJncyA9 IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIDAsIHRydWUsCi0JCQkJCQkJCQkJCSAgJmFy Z3MsICZ0eXBlcywgJm51bGxzKTsKKwluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2lu Zm8sIDAsIHRydWUsCisJCQkJCQkJCSAgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsKIAogCWlmIChu YXJncyA8IDApCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAKLQlQR19SRVRVUk5fREFUVU0oanNvbl9i dWlsZF9vYmplY3Rfd29ya2VyKG5hcmdzLCBhcmdzLCBudWxscywgdHlwZXMsIGZhbHNlLCBmYWxz ZSkpOworCWNhdGVnb3JpZXMgPSBwYWxsb2NfYXJyYXkoSnNvblR5cGVDYXRlZ29yeSwgbmFyZ3Mp OworCW91dGZsaW5mb3MgPSBwYWxsb2MwX2FycmF5KEZtZ3JJbmZvLCBuYXJncyk7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCQlqc29uX2NhdGVnb3JpemVfdHlwZSh0eXBlc1tp XSwgZmFsc2UsCisJCQkJCQkJICZjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tpXSk7CisKKwlQ R19SRVRVUk5fREFUVU0oanNvbl9idWlsZF9vYmplY3Rfd29ya2VyKG5hcmdzLCBhcmdzLCBudWxs cywKKwkJCQkJCQkJCQkJIGNhdGVnb3JpZXMsIG91dGZsaW5mb3MsCisJCQkJCQkJCQkJCSBmYWxz ZSwgZmFsc2UpKTsKIH0KIAogLyoKQEAgLTEzMjAsOCArMTMwNSw5IEBAIGpzb25fYnVpbGRfb2Jq ZWN0X25vYXJncyhQR19GVU5DVElPTl9BUkdTKQogfQogCiBEYXR1bQotanNvbl9idWlsZF9hcnJh eV93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMs IGNvbnN0IE9pZCAqdHlwZXMsCi0JCQkJCQlib29sIGFic2VudF9vbl9udWxsKQoranNvbl9idWls ZF9hcnJheV93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAq bnVsbHMsCisJCQkJCQljb25zdCBKc29uVHlwZUNhdGVnb3J5ICpjYXRlZ29yaWVzLAorCQkJCQkJ Rm1nckluZm8gKm91dGZsaW5mb3MsIGJvb2wgYWJzZW50X29uX251bGwpCiB7CiAJaW50CQkJaTsK IAljb25zdCBjaGFyICpzZXAgPSAiIjsKQEAgLTEzMzgsNyArMTMyNCw4IEBAIGpzb25fYnVpbGRf YXJyYXlfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFyZ3MsIGNvbnN0IGJvb2wgKm51 bGxzLCBjb25zdCBPCiAKIAkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcmVzdWx0LCBzZXApOwog CQlzZXAgPSAiLCAiOwotCQlhZGRfanNvbihhcmdzW2ldLCBudWxsc1tpXSwgJnJlc3VsdCwgdHlw ZXNbaV0sIGZhbHNlKTsKKwkJZGF0dW1fdG9fanNvbl9pbnRlcm5hbChhcmdzW2ldLCBudWxsc1tp XSwgJnJlc3VsdCwKKwkJCQkJCQkgICBjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tpXSwgZmFs c2UpOwogCX0KIAogCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZyZXN1bHQsICddJyk7CkBAIC0xMzU1 LDE1ICsxMzQyLDI2IEBAIGpzb25fYnVpbGRfYXJyYXkoUEdfRlVOQ1RJT05fQVJHUykKIAlEYXR1 bQkgICAqYXJnczsKIAlib29sCSAgICpudWxsczsKIAlPaWQJCSAgICp0eXBlczsKKwlpbnQJCQlu YXJnczsKKwlKc29uVHlwZUNhdGVnb3J5ICpjYXRlZ29yaWVzOworCUZtZ3JJbmZvICAgKm91dGZs aW5mb3M7CiAKLQkvKiBidWlsZCBhcmd1bWVudCB2YWx1ZXMgdG8gYnVpbGQgdGhlIG9iamVjdCAq LwotCWludAkJCW5hcmdzID0gZXh0cmFjdF92YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgdHJ1ZSwK LQkJCQkJCQkJCQkJICAmYXJncywgJnR5cGVzLCAmbnVsbHMpOworCS8qIGJ1aWxkIGFyZ3VtZW50 IHZhbHVlcyB0byBidWlsZCB0aGUgYXJyYXkgKi8KKwluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNf YXJncyhmY2luZm8sIDAsIHRydWUsCisJCQkJCQkJCSAgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsK IAogCWlmIChuYXJncyA8IDApCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAKLQlQR19SRVRVUk5fREFU VU0oanNvbl9idWlsZF9hcnJheV93b3JrZXIobmFyZ3MsIGFyZ3MsIG51bGxzLCB0eXBlcywgZmFs c2UpKTsKKwljYXRlZ29yaWVzID0gcGFsbG9jX2FycmF5KEpzb25UeXBlQ2F0ZWdvcnksIG5hcmdz KTsKKwlvdXRmbGluZm9zID0gcGFsbG9jMF9hcnJheShGbWdySW5mbywgbmFyZ3MpOworCWZvciAo aW50IGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJanNvbl9jYXRlZ29yaXplX3R5cGUodHlwZXNb aV0sIGZhbHNlLAorCQkJCQkJCSAmY2F0ZWdvcmllc1tpXSwgJm91dGZsaW5mb3NbaV0pOworCisJ UEdfUkVUVVJOX0RBVFVNKGpzb25fYnVpbGRfYXJyYXlfd29ya2VyKG5hcmdzLCBhcmdzLCBudWxs cywKKwkJCQkJCQkJCQkJY2F0ZWdvcmllcywgb3V0ZmxpbmZvcywKKwkJCQkJCQkJCQkJZmFsc2Up KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKaW5kZXggOTRmYzNkNGVjZmIuLjU2ZTk0YWNk MmE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpAQCAtNTIsOCArNTIsNiBAQCBzdGF0aWMgdm9pZCBh cnJheV90b19qc29uYl9pbnRlcm5hbChEYXR1bSBhcnJheSwgSnNvbmJJblN0YXRlICpyZXN1bHQp Owogc3RhdGljIHZvaWQgZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwoRGF0dW0gdmFsLCBib29sIGlz X251bGwsIEpzb25iSW5TdGF0ZSAqcmVzdWx0LAogCQkJCQkJCQkJSnNvblR5cGVDYXRlZ29yeSB0 Y2F0ZWdvcnksCiAJCQkJCQkJCQlGbWdySW5mbyAqb3V0ZmxpbmZvLCBib29sIGtleV9zY2FsYXIp Owotc3RhdGljIHZvaWQgYWRkX2pzb25iKERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBKc29uYklu U3RhdGUgKnJlc3VsdCwKLQkJCQkJICBPaWQgdmFsX3R5cGUsIGJvb2wga2V5X3NjYWxhcik7CiBz dGF0aWMgY2hhciAqSnNvbmJUb0NTdHJpbmdXb3JrZXIoU3RyaW5nSW5mbyBvdXQsIEpzb25iQ29u dGFpbmVyICppbiwgaW50IGVzdGltYXRlZF9sZW4sIGJvb2wgaW5kZW50KTsKIHN0YXRpYyB2b2lk IGFkZF9pbmRlbnQoU3RyaW5nSW5mbyBvdXQsIGJvb2wgaW5kZW50LCBpbnQgbGV2ZWwpOwogCkBA IC0xMDQxLDM3ICsxMDM5LDYgQEAgY29tcG9zaXRlX3RvX2pzb25iKERhdHVtIGNvbXBvc2l0ZSwg SnNvbmJJblN0YXRlICpyZXN1bHQpCiAJUmVsZWFzZVR1cGxlRGVzYyh0dXBkZXNjKTsKIH0KIAot LyoKLSAqIEFwcGVuZCBKU09OIHRleHQgZm9yICJ2YWwiIHRvICJyZXN1bHQiLgotICoKLSAqIFRo aXMgaXMganVzdCBhIHRoaW4gd3JhcHBlciBhcm91bmQgZGF0dW1fdG9fanNvbmIuICBJZiB0aGUg c2FtZSB0eXBlIHdpbGwgYmUKLSAqIHByaW50ZWQgbWFueSB0aW1lcywgYXZvaWQgdXNpbmcgdGhp czsgYmV0dGVyIHRvIGRvIHRoZSBqc29uX2NhdGVnb3JpemVfdHlwZQotICogbG9va3VwcyBvbmx5 IG9uY2UuCi0gKi8KLQotc3RhdGljIHZvaWQKLWFkZF9qc29uYihEYXR1bSB2YWwsIGJvb2wgaXNf bnVsbCwgSnNvbmJJblN0YXRlICpyZXN1bHQsCi0JCSAgT2lkIHZhbF90eXBlLCBib29sIGtleV9z Y2FsYXIpCi17Ci0JSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnk7Ci0JRm1nckluZm8Jb3V0Zmxp bmZvOwotCi0JaWYgKHZhbF90eXBlID09IEludmFsaWRPaWQpCi0JCWVyZXBvcnQoRVJST1IsCi0J CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCi0JCQkJIGVycm1z ZygiY291bGQgbm90IGRldGVybWluZSBpbnB1dCBkYXRhIHR5cGUiKSkpOwotCi0JaWYgKGlzX251 bGwpCi0JCXRjYXRlZ29yeSA9IEpTT05UWVBFX05VTEw7Ci0JZWxzZQotCQlqc29uX2NhdGVnb3Jp emVfdHlwZSh2YWxfdHlwZSwgdHJ1ZSwKLQkJCQkJCQkgJnRjYXRlZ29yeSwgJm91dGZsaW5mbyk7 Ci0KLQlkYXR1bV90b19qc29uYl9pbnRlcm5hbCh2YWwsIGlzX251bGwsIHJlc3VsdCwgdGNhdGVn b3J5LCAmb3V0ZmxpbmZvLAotCQkJCQkJCWtleV9zY2FsYXIpOwotfQotCi0KIC8qCiAgKiBJcyB0 aGUgZ2l2ZW4gdHlwZSBpbW11dGFibGUgd2hlbiBjb21pbmcgb3V0IG9mIGEgSlNPTkIgY29udGV4 dD8KICAqLwpAQCAtMTEyOSw3ICsxMDk2LDkgQEAgZGF0dW1fdG9fanNvbmIoRGF0dW0gdmFsLCBK c29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgRm1nckluZm8gKm91dGZsaW5mbykKIH0KIAogRGF0 dW0KLWpzb25iX2J1aWxkX29iamVjdF93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJn cywgY29uc3QgYm9vbCAqbnVsbHMsIGNvbnN0IE9pZCAqdHlwZXMsCitqc29uYl9idWlsZF9vYmpl Y3Rfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFyZ3MsIGNvbnN0IGJvb2wgKm51bGxz LAorCQkJCQkJICBjb25zdCBKc29uVHlwZUNhdGVnb3J5ICpjYXRlZ29yaWVzLAorCQkJCQkJICBG bWdySW5mbyAqb3V0ZmxpbmZvcywKIAkJCQkJCSAgYm9vbCBhYnNlbnRfb25fbnVsbCwgYm9vbCB1 bmlxdWVfa2V5cykKIHsKIAlpbnQJCQlpOwpAQCAtMTE2NiwxMCArMTEzNSwxMyBAQCBqc29uYl9i dWlsZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFyZ3MsIGNvbnN0IGJv b2wgKm51bGxzLCBjb25zdAogCQlpZiAoc2tpcCAmJiAhdW5pcXVlX2tleXMpCiAJCQljb250aW51 ZTsKIAotCQlhZGRfanNvbmIoYXJnc1tpXSwgZmFsc2UsICZyZXN1bHQsIHR5cGVzW2ldLCB0cnVl KTsKKwkJZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwoYXJnc1tpXSwgZmFsc2UsICZyZXN1bHQsCisJ CQkJCQkJCWNhdGVnb3JpZXNbaV0sICZvdXRmbGluZm9zW2ldLCB0cnVlKTsKIAogCQkvKiBwcm9j ZXNzIHZhbHVlICovCi0JCWFkZF9qc29uYihhcmdzW2kgKyAxXSwgbnVsbHNbaSArIDFdLCAmcmVz dWx0LCB0eXBlc1tpICsgMV0sIGZhbHNlKTsKKwkJZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwoYXJn c1tpICsgMV0sIG51bGxzW2kgKyAxXSwgJnJlc3VsdCwKKwkJCQkJCQkJY2F0ZWdvcmllc1tpICsg MV0sICZvdXRmbGluZm9zW2kgKyAxXSwKKwkJCQkJCQkJZmFsc2UpOwogCX0KIAogCXB1c2hKc29u YlZhbHVlKCZyZXN1bHQsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKQEAgLTExODYsMTUgKzExNTgs MjYgQEAganNvbmJfYnVpbGRfb2JqZWN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJRGF0dW0JICAgKmFy Z3M7CiAJYm9vbAkgICAqbnVsbHM7CiAJT2lkCQkgICAqdHlwZXM7CisJaW50CQkJbmFyZ3M7CisJ SnNvblR5cGVDYXRlZ29yeSAqY2F0ZWdvcmllczsKKwlGbWdySW5mbyAgICpvdXRmbGluZm9zOwog CiAJLyogYnVpbGQgYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBvYmplY3QgKi8KLQlpbnQJ CQluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIDAsIHRydWUsCi0JCQkJCQkJ CQkJCSAgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsKKwluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNf YXJncyhmY2luZm8sIDAsIHRydWUsCisJCQkJCQkJCSAgJmFyZ3MsICZ0eXBlcywgJm51bGxzKTsK IAogCWlmIChuYXJncyA8IDApCiAJCVBHX1JFVFVSTl9OVUxMKCk7CiAKLQlQR19SRVRVUk5fREFU VU0oanNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihuYXJncywgYXJncywgbnVsbHMsIHR5cGVzLCBm YWxzZSwgZmFsc2UpKTsKKwljYXRlZ29yaWVzID0gcGFsbG9jX2FycmF5KEpzb25UeXBlQ2F0ZWdv cnksIG5hcmdzKTsKKwlvdXRmbGluZm9zID0gcGFsbG9jMF9hcnJheShGbWdySW5mbywgbmFyZ3Mp OworCWZvciAoaW50IGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJanNvbl9jYXRlZ29yaXplX3R5 cGUodHlwZXNbaV0sIHRydWUsCisJCQkJCQkJICZjYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZvc1tp XSk7CisKKwlQR19SRVRVUk5fREFUVU0oanNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihuYXJncywg YXJncywgbnVsbHMsCisJCQkJCQkJCQkJCSAgY2F0ZWdvcmllcywgb3V0ZmxpbmZvcywKKwkJCQkJ CQkJCQkJICBmYWxzZSwgZmFsc2UpKTsKIH0KIAogLyoKQEAgLTEyMTQsOCArMTE5Nyw5IEBAIGpz b25iX2J1aWxkX29iamVjdF9ub2FyZ3MoUEdfRlVOQ1RJT05fQVJHUykKIH0KIAogRGF0dW0KLWpz b25iX2J1aWxkX2FycmF5X3dvcmtlcihpbnQgbmFyZ3MsIGNvbnN0IERhdHVtICphcmdzLCBjb25z dCBib29sICpudWxscywgY29uc3QgT2lkICp0eXBlcywKLQkJCQkJCSBib29sIGFic2VudF9vbl9u dWxsKQoranNvbmJfYnVpbGRfYXJyYXlfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFy Z3MsIGNvbnN0IGJvb2wgKm51bGxzLAorCQkJCQkJIGNvbnN0IEpzb25UeXBlQ2F0ZWdvcnkgKmNh dGVnb3JpZXMsCisJCQkJCQkgRm1nckluZm8gKm91dGZsaW5mb3MsIGJvb2wgYWJzZW50X29uX251 bGwpCiB7CiAJaW50CQkJaTsKIAlKc29uYkluU3RhdGUgcmVzdWx0OwpAQCAtMTIyOSw3ICsxMjEz LDggQEAganNvbmJfYnVpbGRfYXJyYXlfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFy Z3MsIGNvbnN0IGJvb2wgKm51bGxzLCBjb25zdAogCQlpZiAoYWJzZW50X29uX251bGwgJiYgbnVs bHNbaV0pCiAJCQljb250aW51ZTsKIAotCQlhZGRfanNvbmIoYXJnc1tpXSwgbnVsbHNbaV0sICZy ZXN1bHQsIHR5cGVzW2ldLCBmYWxzZSk7CisJCWRhdHVtX3RvX2pzb25iX2ludGVybmFsKGFyZ3Nb aV0sIG51bGxzW2ldLCAmcmVzdWx0LAorCQkJCQkJCQljYXRlZ29yaWVzW2ldLCAmb3V0ZmxpbmZv c1tpXSwgZmFsc2UpOwogCX0KIAogCXB1c2hKc29uYlZhbHVlKCZyZXN1bHQsIFdKQl9FTkRfQVJS QVksIE5VTEwpOwpAQCAtMTI0NiwxNSArMTIzMSwyNiBAQCBqc29uYl9idWlsZF9hcnJheShQR19G VU5DVElPTl9BUkdTKQogCURhdHVtCSAgICphcmdzOwogCWJvb2wJICAgKm51bGxzOwogCU9pZAkJ ICAgKnR5cGVzOworCWludAkJCW5hcmdzOworCUpzb25UeXBlQ2F0ZWdvcnkgKmNhdGVnb3JpZXM7 CisJRm1nckluZm8gICAqb3V0ZmxpbmZvczsKIAotCS8qIGJ1aWxkIGFyZ3VtZW50IHZhbHVlcyB0 byBidWlsZCB0aGUgb2JqZWN0ICovCi0JaW50CQkJbmFyZ3MgPSBleHRyYWN0X3ZhcmlhZGljX2Fy Z3MoZmNpbmZvLCAwLCB0cnVlLAotCQkJCQkJCQkJCQkgICZhcmdzLCAmdHlwZXMsICZudWxscyk7 CisJLyogYnVpbGQgYXJndW1lbnQgdmFsdWVzIHRvIGJ1aWxkIHRoZSBhcnJheSAqLworCW5hcmdz ID0gZXh0cmFjdF92YXJpYWRpY19hcmdzKGZjaW5mbywgMCwgdHJ1ZSwKKwkJCQkJCQkJICAmYXJn cywgJnR5cGVzLCAmbnVsbHMpOwogCiAJaWYgKG5hcmdzIDwgMCkKIAkJUEdfUkVUVVJOX05VTEwo KTsKIAotCVBHX1JFVFVSTl9EQVRVTShqc29uYl9idWlsZF9hcnJheV93b3JrZXIobmFyZ3MsIGFy Z3MsIG51bGxzLCB0eXBlcywgZmFsc2UpKTsKKwljYXRlZ29yaWVzID0gcGFsbG9jX2FycmF5KEpz b25UeXBlQ2F0ZWdvcnksIG5hcmdzKTsKKwlvdXRmbGluZm9zID0gcGFsbG9jMF9hcnJheShGbWdy SW5mbywgbmFyZ3MpOworCWZvciAoaW50IGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJanNvbl9j YXRlZ29yaXplX3R5cGUodHlwZXNbaV0sIHRydWUsCisJCQkJCQkJICZjYXRlZ29yaWVzW2ldLCAm b3V0ZmxpbmZvc1tpXSk7CisKKwlQR19SRVRVUk5fREFUVU0oanNvbmJfYnVpbGRfYXJyYXlfd29y a2VyKG5hcmdzLCBhcmdzLCBudWxscywKKwkJCQkJCQkJCQkJIGNhdGVnb3JpZXMsIG91dGZsaW5m b3MsCisJCQkJCQkJCQkJCSBmYWxzZSkpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmlu ZGV4IDg2NTBmZjU3OTUyLi4xNjhhOTA4NzZmZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhl Y3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCkBA IC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUFnZy5oIgogI2luY2x1ZGUg Im5vZGVzL2V4ZWNub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL21pc2Nub2Rlcy5oIgorI2luY2x1 ZGUgInV0aWxzL2pzb250eXBlcy5oIgogCiAvKiBmb3J3YXJkIHJlZmVyZW5jZXMgdG8gYXZvaWQg Y2lyY3VsYXJpdHkgKi8KIHN0cnVjdCBFeHByRXZhbFN0ZXA7CkBAIC04MjcsMTIgKzgyOCw4IEBA IHR5cGVkZWYgc3RydWN0IEpzb25Db25zdHJ1Y3RvckV4cHJTdGF0ZQogCUpzb25Db25zdHJ1Y3Rv ckV4cHIgKmNvbnN0cnVjdG9yOwogCURhdHVtCSAgICphcmdfdmFsdWVzOwogCWJvb2wJICAgKmFy Z19udWxsczsKLQlPaWQJCSAgICphcmdfdHlwZXM7Ci0Jc3RydWN0Ci0JewotCQlpbnQJCQljYXRl Z29yeTsKLQkJRm1nckluZm8Jb3V0ZmxpbmZvOwotCX0JCSAgICphcmdfdHlwZV9jYWNoZTsgLyog Y2FjaGUgZm9yIGRhdHVtX3RvX2pzb25bYl0oKSAqLworCUpzb25UeXBlQ2F0ZWdvcnkgKmFyZ19j YXRlZ29yaWVzOworCUZtZ3JJbmZvICAgKmFyZ19vdXRmbGluZm9zOwogCWludAkJCW5hcmdzOwog fSBKc29uQ29uc3RydWN0b3JFeHByU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL2pzb24uaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaAppbmRleCAzMWY4OGZiYmZmNi4u M2Y5YzViZDdlYTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb24uaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9qc29uLmgKQEAgLTI4LDExICsyOCwxNiBAQCBleHRlcm4gdm9pZCBl c2NhcGVfanNvbl90ZXh0KFN0cmluZ0luZm8gYnVmLCBjb25zdCB0ZXh0ICp0eHQpOwogZXh0ZXJu IGNoYXIgKkpzb25FbmNvZGVEYXRlVGltZShjaGFyICpidWYsIERhdHVtIHZhbHVlLCBPaWQgdHlw aWQsCiAJCQkJCQkJCWNvbnN0IGludCAqdHpwKTsKIGV4dGVybiBib29sIHRvX2pzb25faXNfaW1t dXRhYmxlKE9pZCB0eXBvaWQpOwotZXh0ZXJuIERhdHVtIGpzb25fYnVpbGRfb2JqZWN0X3dvcmtl cihpbnQgbmFyZ3MsIGNvbnN0IERhdHVtICphcmdzLCBjb25zdCBib29sICpudWxscywKLQkJCQkJ CQkJCSAgY29uc3QgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRfb25fbnVsbCwKLQkJCQkJCQkJCSAg Ym9vbCB1bmlxdWVfa2V5cyk7Ci1leHRlcm4gRGF0dW0ganNvbl9idWlsZF9hcnJheV93b3JrZXIo aW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMsCi0JCQkJCQkJ CQkgY29uc3QgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRfb25fbnVsbCk7CitleHRlcm4gRGF0dW0g anNvbl9idWlsZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFyZ3MsCisJ CQkJCQkJCQkgIGNvbnN0IGJvb2wgKm51bGxzLAorCQkJCQkJCQkJICBjb25zdCBKc29uVHlwZUNh dGVnb3J5ICpjYXRlZ29yaWVzLAorCQkJCQkJCQkJICBGbWdySW5mbyAqb3V0ZmxpbmZvcywKKwkJ CQkJCQkJCSAgYm9vbCBhYnNlbnRfb25fbnVsbCwgYm9vbCB1bmlxdWVfa2V5cyk7CitleHRlcm4g RGF0dW0ganNvbl9idWlsZF9hcnJheV93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJn cywKKwkJCQkJCQkJCSBjb25zdCBib29sICpudWxscywKKwkJCQkJCQkJCSBjb25zdCBKc29uVHlw ZUNhdGVnb3J5ICpjYXRlZ29yaWVzLAorCQkJCQkJCQkJIEZtZ3JJbmZvICpvdXRmbGluZm9zLAor CQkJCQkJCQkJIGJvb2wgYWJzZW50X29uX251bGwpOwogZXh0ZXJuIGJvb2wganNvbl92YWxpZGF0 ZSh0ZXh0ICpqc29uLCBib29sIGNoZWNrX3VuaXF1ZV9rZXlzLCBib29sIHRocm93X2Vycm9yKTsK IAogI2VuZGlmCQkJCQkJCS8qIEpTT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvanNvbmIuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKaW5kZXggNjdlNDY3NWE5MDgu LjMzZjBlNzE2NDIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKQEAgLTQ2MSwxMCArNDYxLDE1IEBAIGV4dGVybiBE YXR1bSBqc29uYl9nZXRfZWxlbWVudChKc29uYiAqamIsIGNvbnN0IERhdHVtICpwYXRoLCBpbnQg bnBhdGgsCiBleHRlcm4gRGF0dW0gZGF0dW1fdG9fanNvbmIoRGF0dW0gdmFsLCBKc29uVHlwZUNh dGVnb3J5IHRjYXRlZ29yeSwKIAkJCQkJCQlGbWdySW5mbyAqb3V0ZmxpbmZvKTsKIGV4dGVybiBi b29sIHRvX2pzb25iX2lzX2ltbXV0YWJsZShPaWQgdHlwb2lkKTsKLWV4dGVybiBEYXR1bSBqc29u Yl9idWlsZF9vYmplY3Rfd29ya2VyKGludCBuYXJncywgY29uc3QgRGF0dW0gKmFyZ3MsIGNvbnN0 IGJvb2wgKm51bGxzLAotCQkJCQkJCQkJICAgY29uc3QgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRf b25fbnVsbCwKLQkJCQkJCQkJCSAgIGJvb2wgdW5pcXVlX2tleXMpOwotZXh0ZXJuIERhdHVtIGpz b25iX2J1aWxkX2FycmF5X3dvcmtlcihpbnQgbmFyZ3MsIGNvbnN0IERhdHVtICphcmdzLCBjb25z dCBib29sICpudWxscywKLQkJCQkJCQkJCSAgY29uc3QgT2lkICp0eXBlcywgYm9vbCBhYnNlbnRf b25fbnVsbCk7CitleHRlcm4gRGF0dW0ganNvbmJfYnVpbGRfb2JqZWN0X3dvcmtlcihpbnQgbmFy Z3MsIGNvbnN0IERhdHVtICphcmdzLAorCQkJCQkJCQkJICAgY29uc3QgYm9vbCAqbnVsbHMsCisJ CQkJCQkJCQkgICBjb25zdCBKc29uVHlwZUNhdGVnb3J5ICpjYXRlZ29yaWVzLAorCQkJCQkJCQkJ ICAgRm1nckluZm8gKm91dGZsaW5mb3MsCisJCQkJCQkJCQkgICBib29sIGFic2VudF9vbl9udWxs LCBib29sIHVuaXF1ZV9rZXlzKTsKK2V4dGVybiBEYXR1bSBqc29uYl9idWlsZF9hcnJheV93b3Jr ZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywKKwkJCQkJCQkJCSAgY29uc3QgYm9vbCAq bnVsbHMsCisJCQkJCQkJCQkgIGNvbnN0IEpzb25UeXBlQ2F0ZWdvcnkgKmNhdGVnb3JpZXMsCisJ CQkJCQkJCQkgIEZtZ3JJbmZvICpvdXRmbGluZm9zLAorCQkJCQkJCQkJICBib29sIGFic2VudF9v bl9udWxsKTsKIAogI2VuZGlmCQkJCQkJCS8qIF9fSlNPTkJfSF9fICovCi0tIAoyLjUwLjEgKEFw cGxlIEdpdC0xNTUpCgo= --0000000000000cfb1a0655a342ab Content-Type: application/octet-stream; name="v1-0001-Refactor-json_categorize_type-to-populate-an-Fmgr.patch" Content-Disposition: attachment; filename="v1-0001-Refactor-json_categorize_type-to-populate-an-Fmgr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr3prpt70 RnJvbSA0NGVmYmE0YTFkNGQ0OGVkNTMzYzVhMjZiNDU0YzJkZDdiNmFhNDMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgMzAgSnVuIDIwMjYgMTM6NDY6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxIDEv NV0gUmVmYWN0b3IganNvbl9jYXRlZ29yaXplX3R5cGUoKSB0byBwb3B1bGF0ZSBhbgogRm1ncklu Zm8gKgoKQnkgZG9pbmcgdGhpcywgYW55IGNvZGUgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2Yg anNvbl9jYXRlZ29yaXplX3R5cGUKbm93IGNhY2hlcyB0aGUgRm1nckluZm8gKiByYXRoZXIgdGhh biBqdXN0IHRoZSBmdW5jdGlvbiBPSUQsIHdoaWNoIHNhdmVzCmEgbW9kZXN0IG51bWJlciBvZiBD UFUgY3ljbGVzLiBUaGlzIGFmZmVjdHMgYWxsIG9mIHRoZSBidWlsdC1pbiBKU09OCmFnZ3JlZ2F0 ZXMgKGpzb25fYWdnLCBqc29uX2FnZ19zdHJpY3QsIGpzb25fb2JqZWN0X2FnZywganNvbmJfYWdn LApldGMuKSwgYSBmZXcgcGxhaW4gZnVuY3Rpb25zIGxpa2UgYXJyYXlfdG9fanNvbigpLCBhbmQg dGhlIEpTT05fU0NBTEFSCmNvbnN0cnVjdG9yLiBJbiBteSB0ZXN0aW5nLCB0aGUgcGVyZm9ybWFu Y2UgZ2FpbnMgYXJlIHNtYWxsIGVub3VnaCB0aGF0CnRoZXkgYXJlIGRpZmZpY3VsdCB0byBtZWFz dXJlIGF0IHRoZSBTUUwgbGV2ZWwsIGJ1dCBkb2luZyB0aGlzIG11Y2gKYWxsb3dzIGZvciBmdXR1 cmUgcmVmYWN0b3JpbmdzIHdpdGggbW9yZSBzaWduaWZpY2FudCBiZW5lZml0cy4KCkFzIGZhciBh cyB0aGlzIHJlZmFjdG9yaW5nIGdvZXMsIHRoZSBtb3N0IHByb2JsZW1hdGljIGNhbGxlciBvZgpq c29uX2NhdGVnb3JpemVfdHlwZSgpIHdhcyBqc29uX2NoZWNrX211dGFiaWxpdHkoKSwgd2hpY2gg ZG9lc24ndAphY3R1YWxseSBuZWVkIGFuIEZtZ3JJbmZvICouIFRoZXJlZm9yZSwgSSByZWZhY3Rv cmVkCmpzb25fY2hlY2tfbXV0YWJpbGl0eSgpIHRvIG5vIGxvbmdlciBjYWxsIGpzb25fY2F0ZWdv cml6ZV90eXBlKCkuCkluc3RlYWQsIGl0IGRvZXMgdGhlIHNhbWUgd29yayBkaXJlY3RseSwgZXhj ZXB0IHRoYXQgYSBsaXR0bGUgYml0IG9mCmNvbW1vbiBsb2dpYyBoYXMgYmVlbiBmYWN0b3JlZCBv dXQgaW50byBhIG5ldyBmdW5jdGlvbgpnZXRfanNvbl9jYXN0X2Zvcl90eXBlKCkuIFRoaXMgcmVm YWN0b3JpbmcgYWxzbyBtYWRlIGl0IGV2aWRlbnQgdGhhdApqc29uX2NoZWNrX211dGFiaWxpdHkn cyBpc19qc29uYiBmbGFnIGhhcyBuZXZlciBoYWQgYW55IGVmZmVjdCBvbiB0aGUKYmVoYXZpb3Is IHNvIGl0IGlzIHJlbW92ZWQuCgpTaW5jZSB0aGlzIGlzIGludGVuZGVkIGFzIGEgcmVmYWN0b3Jp bmcgY29tbWl0IG9ubHksIGl0IGF0dGVtcHRzIHRvCmF2b2lkIGNoYW5naW5nIHRoZSBiZWhhdmlv ciBvZiB0aGUgY29kZSBldmVuIHdoZW4gdGhhdCBzZWVtcyB0byBoYXZlCnByZXZpb3VzbHkgYmVl biBpbmNvcnJlY3QuIEluIHRoZSBwcmV2aW91cyBjb2RpbmcsIGpzb25fY2hlY2tfbXV0YWJpbGl0 eQpmYWlsZWQgdG8gbm90aWNlIHRoYXQgdGhlIG91dHB1dCBmdW5jdGlvbnMgZm9yIGFueWFycmF5 LAphbnljb21wYXRpYmxlYXJyYXksIGFuZCByZWNvcmQgYXJlIG5vdCBpbW11dGFibGUuIE90aGVy IGNvbnRhaW5lciB0eXBlcwp3ZXJlIGRldGVybWluZWQgdG8gYmUgbm9uLWltbXV0YWJsZSBieSBy ZWN1cnNpbmcgdG8gdGhlaXIgZWxlbWVudCBvcgpiYXNlIHR5cGVzLCBidXQgdGhlc2UgYXJlIGlt cGxlbWVudGVkIGFzIHBzZXVkb3R5cGVzLCBzbyB0aGUgcmVjdXJzaXZlCmNvZGUgZG9lcyBub3Qg cmVhbGl6ZSB0aGF0IHRoZXkgY2FuIGhhdmUgYXJiaXRyYXJ5IHR5cGVzIGFzCnN1YnN0cnVjdHVy ZS4gRm9yIG5vdywgYSBzcGVjaWFsIGNhc2UgaXMgYWRkZWQgdG8gcHJlc2VydmUgdGhlCmhpc3Rv cmljYWwgYmVoYXZpb3IsIGJ1dCBpbiBhIHNlcGFyYXRlIGNvbW1pdCB3ZSBzaG91bGQgcmVtb3Zl IHRoZQpzcGVjaWFsIGNhc2UgdG8gb2J0YWluIG1vcmUgY29ycmVjdCBiZWhhdmlvci4KLS0tCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgIHwgICA1ICstCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgICA2ICstCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbi5jICAgICAgICAgIHwgMTI1ICsrKysrKysrKysrLS0tLS0tLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmIuYyAgICAgICAgIHwgMTA5ICsrKysrKysrKy0tLS0tLS0tCiBzcmMv YmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMgICAgIHwgMTYyICsrKysrKysrKysrKysrLS0t LS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgIHwgICAyICst CiBzcmMvaW5jbHVkZS91dGlscy9qc29uZnVuY3MuaCAgICAgICAgIHwgIDEwICstCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0IHwgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3NxbGpzb24uc3FsICAgICAgfCAgIDUgKwogOSBmaWxlcyBjaGFuZ2VkLCAyMzUgaW5zZXJ0 aW9ucygrKSwgMTkzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNFeHByLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCmluZGV4IGNm ZWE3ZTE2MGMyLi44NzFmZDE3ZTFjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0V4cHIuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCkBAIC0yNDM3 LDEzICsyNDM3LDEyIEBAIEV4ZWNJbml0RXhwclJlYyhFeHByICpub2RlLCBFeHByU3RhdGUgKnN0 YXRlLAogCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSsrKQogCQkJCQkJewogCQkJ CQkJCUpzb25UeXBlQ2F0ZWdvcnkgY2F0ZWdvcnk7Ci0JCQkJCQkJT2lkCQkJb3V0ZnVuY2lkOwog CQkJCQkJCU9pZAkJCXR5cGlkID0gamNzdGF0ZS0+YXJnX3R5cGVzW2ldOwogCiAJCQkJCQkJanNv bl9jYXRlZ29yaXplX3R5cGUodHlwaWQsIGlzX2pzb25iLAotCQkJCQkJCQkJCQkJICZjYXRlZ29y eSwgJm91dGZ1bmNpZCk7CisJCQkJCQkJCQkJCQkgJmNhdGVnb3J5LAorCQkJCQkJCQkJCQkJICZq Y3N0YXRlLT5hcmdfdHlwZV9jYWNoZVtpXS5vdXRmbGluZm8pOwogCi0JCQkJCQkJamNzdGF0ZS0+ YXJnX3R5cGVfY2FjaGVbaV0ub3V0ZnVuY2lkID0gb3V0ZnVuY2lkOwogCQkJCQkJCWpjc3RhdGUt PmFyZ190eXBlX2NhY2hlW2ldLmNhdGVnb3J5ID0gKGludCkgY2F0ZWdvcnk7CiAJCQkJCQl9CiAJ CQkJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmluZGV4IDA2MzRhZjk2NGE5 Li4xZWJmYjE5MGU2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC00 NzY2LDE0ICs0NzY2LDE0IEBAIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCWVsc2UKIAkJewogCQkJRGF0dW0JCXZhbHVlID0gamNz dGF0ZS0+YXJnX3ZhbHVlc1swXTsKLQkJCU9pZAkJCW91dGZ1bmNpZCA9IGpjc3RhdGUtPmFyZ190 eXBlX2NhY2hlWzBdLm91dGZ1bmNpZDsKKwkJCUZtZ3JJbmZvICAgKm91dGZsaW5mbyA9ICZqY3N0 YXRlLT5hcmdfdHlwZV9jYWNoZVswXS5vdXRmbGluZm87CiAJCQlKc29uVHlwZUNhdGVnb3J5IGNh dGVnb3J5ID0gKEpzb25UeXBlQ2F0ZWdvcnkpCiAJCQkJamNzdGF0ZS0+YXJnX3R5cGVfY2FjaGVb MF0uY2F0ZWdvcnk7CiAKIAkJCWlmIChpc19qc29uYikKLQkJCQlyZXMgPSBkYXR1bV90b19qc29u Yih2YWx1ZSwgY2F0ZWdvcnksIG91dGZ1bmNpZCk7CisJCQkJcmVzID0gZGF0dW1fdG9fanNvbmIo dmFsdWUsIGNhdGVnb3J5LCBvdXRmbGluZm8pOwogCQkJZWxzZQotCQkJCXJlcyA9IGRhdHVtX3Rv X2pzb24odmFsdWUsIGNhdGVnb3J5LCBvdXRmdW5jaWQpOworCQkJCXJlcyA9IGRhdHVtX3RvX2pz b24odmFsdWUsIGNhdGVnb3J5LCBvdXRmbGluZm8pOwogCQl9CiAJfQogCWVsc2UgaWYgKGN0b3It PnR5cGUgPT0gSlNDVE9SX0pTT05fUEFSU0UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwppbmRleCAwZmVlMWI0 MGQ2My4uNzg4MjM3ZjZiNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwpAQCAtODAsMjEgKzgwLDIxIEBA IHR5cGVkZWYgc3RydWN0IEpzb25BZ2dTdGF0ZQogewogCVN0cmluZ0luZm8Jc3RyOwogCUpzb25U eXBlQ2F0ZWdvcnkga2V5X2NhdGVnb3J5OwotCU9pZAkJCWtleV9vdXRwdXRfZnVuYzsKKwlGbWdy SW5mbwlrZXlfZmxpbmZvOwogCUpzb25UeXBlQ2F0ZWdvcnkgdmFsX2NhdGVnb3J5OwotCU9pZAkJ CXZhbF9vdXRwdXRfZnVuYzsKKwlGbWdySW5mbwl2YWxfZmxpbmZvOwogCUpzb25VbmlxdWVCdWls ZGVyU3RhdGUgdW5pcXVlX2NoZWNrOwogfSBKc29uQWdnU3RhdGU7CiAKIHN0YXRpYyB2b2lkIGFy cmF5X2RpbV90b19qc29uKFN0cmluZ0luZm8gcmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMsIGlu dCAqZGltcywKIAkJCQkJCQkgIGNvbnN0IERhdHVtICp2YWxzLCBjb25zdCBib29sICpudWxscywg aW50ICp2YWxjb3VudCwKLQkJCQkJCQkgIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LCBPaWQg b3V0ZnVuY29pZCwKKwkJCQkJCQkgIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LCBGbWdySW5m byAqZmxpbmZvLAogCQkJCQkJCSAgYm9vbCB1c2VfbGluZV9mZWVkcyk7CiBzdGF0aWMgdm9pZCBh cnJheV90b19qc29uX2ludGVybmFsKERhdHVtIGFycmF5LCBTdHJpbmdJbmZvIHJlc3VsdCwKIAkJ CQkJCQkJICAgYm9vbCB1c2VfbGluZV9mZWVkcyk7CiBzdGF0aWMgdm9pZCBkYXR1bV90b19qc29u X2ludGVybmFsKERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBTdHJpbmdJbmZvIHJlc3VsdCwKLQkJ CQkJCQkJICAgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLAotCQkJ CQkJCQkgICBib29sIGtleV9zY2FsYXIpOworCQkJCQkJCQkgICBKc29uVHlwZUNhdGVnb3J5IHRj YXRlZ29yeSwKKwkJCQkJCQkJICAgRm1nckluZm8gKm91dGZsaW5mbywgYm9vbCBrZXlfc2NhbGFy KTsKIHN0YXRpYyB2b2lkIGFkZF9qc29uKERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBTdHJpbmdJ bmZvIHJlc3VsdCwKIAkJCQkJIE9pZCB2YWxfdHlwZSwgYm9vbCBrZXlfc2NhbGFyKTsKIHN0YXRp YyB0ZXh0ICpjYXRlbmF0ZV9zdHJpbmdpbmZvX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZmZlciwgY29u c3QgY2hhciAqYWRkb24pOwpAQCAtMTY4LDE1ICsxNjgsMTkgQEAganNvbl9yZWN2KFBHX0ZVTkNU SU9OX0FSR1MpCiAvKgogICogVHVybiBhIERhdHVtIGludG8gSlNPTiB0ZXh0LCBhcHBlbmRpbmcg dGhlIHN0cmluZyB0byAicmVzdWx0Ii4KICAqCi0gKiB0Y2F0ZWdvcnkgYW5kIG91dGZ1bmNvaWQg YXJlIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGpzb25fY2F0ZWdvcml6ZV90eXBlLAotICogZXhj ZXB0IHRoYXQgaWYgaXNfbnVsbCBpcyB0cnVlIHRoZW4gdGhleSBjYW4gYmUgaW52YWxpZC4KKyAq IHRjYXRlZ29yeSBpcyBmcm9tIGEgcHJldmlvdXMgY2FsbCB0byBqc29uX2NhdGVnb3JpemVfdHlw ZSwgZXhjZXB0IHRoYXQgaWYKKyAqIGlzX251bGwgaXMgdHJ1ZSB0aGVuIGl0IGNhbiBiZSBpbnZh bGlkLgorICoKKyAqIG91dGZsaW5mbyBpcyBhIHBvaW50ZXIgdG8gYW4gRm1nckluZm8gcG9wdWxh dGVkIGJ5IHRoZSBzYW1lIGNhbGwgdG8KKyAqIGpzb25fY2F0ZWdvcml6ZV90eXBlLCBidXQgaXQg aXMgb25seSBuZWVkZWQgZm9yIGNhdGVnb3JpZXMgd2hlcmUKKyAqIGpzb25fY2F0ZWdvcml6ZV90 eXBlIGFjdHVhbGx5IHBvcHVsYXRlcyBpdC4KICAqCiAgKiBJZiBrZXlfc2NhbGFyIGlzIHRydWUs IHRoZSB2YWx1ZSBpcyBiZWluZyBwcmludGVkIGFzIGEga2V5LCBzbyBpbnNpc3QKICAqIGl0J3Mg b2YgYW4gYWNjZXB0YWJsZSB0eXBlLCBhbmQgZm9yY2UgaXQgdG8gYmUgcXVvdGVkLgogICovCiBz dGF0aWMgdm9pZAogZGF0dW1fdG9fanNvbl9pbnRlcm5hbChEYXR1bSB2YWwsIGJvb2wgaXNfbnVs bCwgU3RyaW5nSW5mbyByZXN1bHQsCi0JCQkJCSAgIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5 LCBPaWQgb3V0ZnVuY29pZCwKKwkJCQkJICAgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIEZt Z3JJbmZvICpvdXRmbGluZm8sCiAJCQkJCSAgIGJvb2wga2V5X3NjYWxhcikKIHsKIAljaGFyCSAg ICpvdXRwdXRzdHI7CkBAIC0yMjEsNyArMjI1LDcgQEAgZGF0dW1fdG9fanNvbl9pbnRlcm5hbChE YXR1bSB2YWwsIGJvb2wgaXNfbnVsbCwgU3RyaW5nSW5mbyByZXN1bHQsCiAJCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIocmVzdWx0LCAnIicpOwogCQkJYnJlYWs7CiAJCWNhc2UgSlNPTlRZUEVfTlVN RVJJQzoKLQkJCW91dHB1dHN0ciA9IE9pZE91dHB1dEZ1bmN0aW9uQ2FsbChvdXRmdW5jb2lkLCB2 YWwpOworCQkJb3V0cHV0c3RyID0gT3V0cHV0RnVuY3Rpb25DYWxsKG91dGZsaW5mbywgdmFsKTsK IAogCQkJLyoKIAkJCSAqIERvbid0IHF1b3RlIGEgbm9uLWtleSBpZiBpdCdzIGEgdmFsaWQgSlNP TiBudW1iZXIgKGkuZS4sIG5vdApAQCAtMjc0LDI1ICsyNzgsMjYgQEAgZGF0dW1fdG9fanNvbl9p bnRlcm5hbChEYXR1bSB2YWwsIGJvb2wgaXNfbnVsbCwgU3RyaW5nSW5mbyByZXN1bHQsCiAJCQli cmVhazsKIAkJY2FzZSBKU09OVFlQRV9KU09OOgogCQkJLyogSlNPTiBhbmQgSlNPTkIgb3V0cHV0 IHdpbGwgYWxyZWFkeSBiZSBlc2NhcGVkICovCi0JCQlvdXRwdXRzdHIgPSBPaWRPdXRwdXRGdW5j dGlvbkNhbGwob3V0ZnVuY29pZCwgdmFsKTsKKwkJCW91dHB1dHN0ciA9IE91dHB1dEZ1bmN0aW9u Q2FsbChvdXRmbGluZm8sIHZhbCk7CiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKHJlc3VsdCwg b3V0cHV0c3RyKTsKIAkJCXBmcmVlKG91dHB1dHN0cik7CiAJCQlicmVhazsKIAkJY2FzZSBKU09O VFlQRV9DQVNUOgotCQkJLyogb3V0ZnVuY29pZCByZWZlcnMgdG8gYSBjYXN0IGZ1bmN0aW9uLCBu b3QgYW4gb3V0cHV0IGZ1bmN0aW9uICovCi0JCQlqc29udGV4dCA9IERhdHVtR2V0VGV4dFBQKE9p ZEZ1bmN0aW9uQ2FsbDEob3V0ZnVuY29pZCwgdmFsKSk7CisJCQkvKiBvdXRmbGluZm8gcmVmZXJz IHRvIGEgY2FzdCBmdW5jdGlvbiwgbm90IGFuIG91dHB1dCBmdW5jdGlvbiAqLworCQkJanNvbnRl eHQgPSBEYXR1bUdldFRleHRQUChGdW5jdGlvbkNhbGwxKG91dGZsaW5mbywgdmFsKSk7CiAJCQlh cHBlbmRCaW5hcnlTdHJpbmdJbmZvKHJlc3VsdCwgVkFSREFUQV9BTlkoanNvbnRleHQpLAogCQkJ CQkJCQkgICBWQVJTSVpFX0FOWV9FWEhEUihqc29udGV4dCkpOwogCQkJcGZyZWUoanNvbnRleHQp OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBzcGVjaWFsLWNhc2UgdGV4dCB0eXBlcyB0 byBzYXZlIHVzZWxlc3MgcGFsbG9jL21lbWNweSBjeWNsZXMgKi8KLQkJCWlmIChvdXRmdW5jb2lk ID09IEZfVEVYVE9VVCB8fCBvdXRmdW5jb2lkID09IEZfVkFSQ0hBUk9VVCB8fAotCQkJCW91dGZ1 bmNvaWQgPT0gRl9CUENIQVJPVVQpCisJCQlpZiAob3V0ZmxpbmZvLT5mbl9vaWQgPT0gRl9URVhU T1VUIHx8CisJCQkJb3V0ZmxpbmZvLT5mbl9vaWQgPT0gRl9WQVJDSEFST1VUIHx8CisJCQkJb3V0 ZmxpbmZvLT5mbl9vaWQgPT0gRl9CUENIQVJPVVQpCiAJCQkJZXNjYXBlX2pzb25fdGV4dChyZXN1 bHQsICh0ZXh0ICopIERhdHVtR2V0UG9pbnRlcih2YWwpKTsKIAkJCWVsc2UKIAkJCXsKLQkJCQlv dXRwdXRzdHIgPSBPaWRPdXRwdXRGdW5jdGlvbkNhbGwob3V0ZnVuY29pZCwgdmFsKTsKKwkJCQlv dXRwdXRzdHIgPSBPdXRwdXRGdW5jdGlvbkNhbGwob3V0ZmxpbmZvLCB2YWwpOwogCQkJCWVzY2Fw ZV9qc29uKHJlc3VsdCwgb3V0cHV0c3RyKTsKIAkJCQlwZnJlZShvdXRwdXRzdHIpOwogCQkJfQpA QCAtNDI5LDcgKzQzNCw3IEBAIEpzb25FbmNvZGVEYXRlVGltZShjaGFyICpidWYsIERhdHVtIHZh bHVlLCBPaWQgdHlwaWQsIGNvbnN0IGludCAqdHpwKQogc3RhdGljIHZvaWQKIGFycmF5X2RpbV90 b19qc29uKFN0cmluZ0luZm8gcmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMsIGludCAqZGltcywg Y29uc3QgRGF0dW0gKnZhbHMsCiAJCQkJICBjb25zdCBib29sICpudWxscywgaW50ICp2YWxjb3Vu dCwgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksCi0JCQkJICBPaWQgb3V0ZnVuY29pZCwgYm9v bCB1c2VfbGluZV9mZWVkcykKKwkJCQkgIEZtZ3JJbmZvICpvdXRmbGluZm8sIGJvb2wgdXNlX2xp bmVfZmVlZHMpCiB7CiAJaW50CQkJaTsKIAljb25zdCBjaGFyICpzZXA7CkBAIC00NDgsOCArNDUz LDcgQEAgYXJyYXlfZGltX3RvX2pzb24oU3RyaW5nSW5mbyByZXN1bHQsIGludCBkaW0sIGludCBu ZGltcywgaW50ICpkaW1zLCBjb25zdCBEYXR1bQogCQlpZiAoZGltICsgMSA9PSBuZGltcykKIAkJ ewogCQkJZGF0dW1fdG9fanNvbl9pbnRlcm5hbCh2YWxzWyp2YWxjb3VudF0sIG51bGxzWyp2YWxj b3VudF0sCi0JCQkJCQkJCSAgIHJlc3VsdCwgdGNhdGVnb3J5LAotCQkJCQkJCQkgICBvdXRmdW5j b2lkLCBmYWxzZSk7CisJCQkJCQkJCSAgIHJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmbGluZm8sIGZh bHNlKTsKIAkJCSgqdmFsY291bnQpKys7CiAJCX0KIAkJZWxzZQpAQCAtNDU5LDcgKzQ2Myw3IEBA IGFycmF5X2RpbV90b19qc29uKFN0cmluZ0luZm8gcmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMs IGludCAqZGltcywgY29uc3QgRGF0dW0KIAkJCSAqIHdlJ2xsIHNheSBuby4KIAkJCSAqLwogCQkJ YXJyYXlfZGltX3RvX2pzb24ocmVzdWx0LCBkaW0gKyAxLCBuZGltcywgZGltcywgdmFscywgbnVs bHMsCi0JCQkJCQkJICB2YWxjb3VudCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lkLCBmYWxzZSk7CisJ CQkJCQkJICB2YWxjb3VudCwgdGNhdGVnb3J5LCBvdXRmbGluZm8sIGZhbHNlKTsKIAkJfQogCX0K IApAQCAtNDg0LDcgKzQ4OCw3IEBAIGFycmF5X3RvX2pzb25faW50ZXJuYWwoRGF0dW0gYXJyYXks IFN0cmluZ0luZm8gcmVzdWx0LCBib29sIHVzZV9saW5lX2ZlZWRzKQogCWJvb2wJCXR5cGJ5dmFs OwogCWNoYXIJCXR5cGFsaWduOwogCUpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5OwotCU9pZAkJ CW91dGZ1bmNvaWQ7CisJRm1nckluZm8Jb3V0ZmxpbmZvOwogCiAJbmRpbSA9IEFSUl9ORElNKHYp OwogCWRpbSA9IEFSUl9ESU1TKHYpOwpAQCAtNTAwLDE0ICs1MDQsMTQgQEAgYXJyYXlfdG9fanNv bl9pbnRlcm5hbChEYXR1bSBhcnJheSwgU3RyaW5nSW5mbyByZXN1bHQsIGJvb2wgdXNlX2xpbmVf ZmVlZHMpCiAJCQkJCQkgJnR5cGxlbiwgJnR5cGJ5dmFsLCAmdHlwYWxpZ24pOwogCiAJanNvbl9j YXRlZ29yaXplX3R5cGUoZWxlbWVudF90eXBlLCBmYWxzZSwKLQkJCQkJCSAmdGNhdGVnb3J5LCAm b3V0ZnVuY29pZCk7CisJCQkJCQkgJnRjYXRlZ29yeSwgJm91dGZsaW5mbyk7CiAKIAlkZWNvbnN0 cnVjdF9hcnJheSh2LCBlbGVtZW50X3R5cGUsIHR5cGxlbiwgdHlwYnl2YWwsCiAJCQkJCSAgdHlw YWxpZ24sICZlbGVtZW50cywgJm51bGxzLAogCQkJCQkgICZuaXRlbXMpOwogCiAJYXJyYXlfZGlt X3RvX2pzb24ocmVzdWx0LCAwLCBuZGltLCBkaW0sIGVsZW1lbnRzLCBudWxscywgJmNvdW50LCB0 Y2F0ZWdvcnksCi0JCQkJCSAgb3V0ZnVuY29pZCwgdXNlX2xpbmVfZmVlZHMpOworCQkJCQkgICZv dXRmbGluZm8sIHVzZV9saW5lX2ZlZWRzKTsKIAogCXBmcmVlKGVsZW1lbnRzKTsKIAlwZnJlZShu dWxscyk7CkBAIC01NTgsNyArNTYyLDcgQEAgY29tcG9zaXRlX3RvX2pzb24oRGF0dW0gY29tcG9z aXRlLCBTdHJpbmdJbmZvIHJlc3VsdCwgYm9vbCB1c2VfbGluZV9mZWVkcykKIAkJYm9vbAkJaXNu dWxsOwogCQljaGFyCSAgICphdHRuYW1lOwogCQlKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeTsK LQkJT2lkCQkJb3V0ZnVuY29pZDsKKwkJRm1nckluZm8Jb3V0ZmxpbmZvOwogCQlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOwogCiAJCWlmIChhdHQtPmF0 dGlzZHJvcHBlZCkKQEAgLTU3NSwxNiArNTc5LDEzIEBAIGNvbXBvc2l0ZV90b19qc29uKERhdHVt IGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsIGJvb2wgdXNlX2xpbmVfZmVlZHMpCiAJCXZh bCA9IGhlYXBfZ2V0YXR0cih0dXBsZSwgaSArIDEsIHR1cGRlc2MsICZpc251bGwpOwogCiAJCWlm IChpc251bGwpCi0JCXsKIAkJCXRjYXRlZ29yeSA9IEpTT05UWVBFX05VTEw7Ci0JCQlvdXRmdW5j b2lkID0gSW52YWxpZE9pZDsKLQkJfQogCQllbHNlCiAJCQlqc29uX2NhdGVnb3JpemVfdHlwZShh dHQtPmF0dHR5cGlkLCBmYWxzZSwgJnRjYXRlZ29yeSwKLQkJCQkJCQkJICZvdXRmdW5jb2lkKTsK KwkJCQkJCQkJICZvdXRmbGluZm8pOwogCi0JCWRhdHVtX3RvX2pzb25faW50ZXJuYWwodmFsLCBp c251bGwsIHJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lkLAotCQkJCQkJCSAgIGZhbHNlKTsK KwkJZGF0dW1fdG9fanNvbl9pbnRlcm5hbCh2YWwsIGlzbnVsbCwgcmVzdWx0LAorCQkJCQkJCSAg IHRjYXRlZ29yeSwgJm91dGZsaW5mbywgZmFsc2UpOwogCX0KIAogCWFwcGVuZFN0cmluZ0luZm9D aGFyKHJlc3VsdCwgJ30nKTsKQEAgLTYwMyw3ICs2MDQsNyBAQCBhZGRfanNvbihEYXR1bSB2YWws IGJvb2wgaXNfbnVsbCwgU3RyaW5nSW5mbyByZXN1bHQsCiAJCSBPaWQgdmFsX3R5cGUsIGJvb2wg a2V5X3NjYWxhcikKIHsKIAlKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeTsKLQlPaWQJCQlvdXRm dW5jb2lkOworCUZtZ3JJbmZvCW91dGZsaW5mbzsKIAogCWlmICh2YWxfdHlwZSA9PSBJbnZhbGlk T2lkKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNjExLDE1ICs2MTIsMTIgQEAgYWRkX2pzb24oRGF0 dW0gdmFsLCBib29sIGlzX251bGwsIFN0cmluZ0luZm8gcmVzdWx0LAogCQkJCSBlcnJtc2coImNv dWxkIG5vdCBkZXRlcm1pbmUgaW5wdXQgZGF0YSB0eXBlIikpKTsKIAogCWlmIChpc19udWxsKQot CXsKIAkJdGNhdGVnb3J5ID0gSlNPTlRZUEVfTlVMTDsKLQkJb3V0ZnVuY29pZCA9IEludmFsaWRP aWQ7Ci0JfQogCWVsc2UKIAkJanNvbl9jYXRlZ29yaXplX3R5cGUodmFsX3R5cGUsIGZhbHNlLAot CQkJCQkJCSAmdGNhdGVnb3J5LCAmb3V0ZnVuY29pZCk7CisJCQkJCQkJICZ0Y2F0ZWdvcnksICZv dXRmbGluZm8pOwogCi0JZGF0dW1fdG9fanNvbl9pbnRlcm5hbCh2YWwsIGlzX251bGwsIHJlc3Vs dCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lkLAorCWRhdHVtX3RvX2pzb25faW50ZXJuYWwodmFsLCBp c19udWxsLCByZXN1bHQsIHRjYXRlZ29yeSwgJm91dGZsaW5mbywKIAkJCQkJCSAgIGtleV9zY2Fs YXIpOwogfQogCkBAIC02OTcsNyArNjk1LDcgQEAgdG9fanNvbl9pc19pbW11dGFibGUoT2lkIHR5 cG9pZCkKIHsKIAlib29sCQloYXNfbXV0YWJsZSA9IGZhbHNlOwogCi0JanNvbl9jaGVja19tdXRh YmlsaXR5KHR5cG9pZCwgZmFsc2UsICZoYXNfbXV0YWJsZSk7CisJanNvbl9jaGVja19tdXRhYmls aXR5KHR5cG9pZCwgJmhhc19tdXRhYmxlKTsKIAlyZXR1cm4gIWhhc19tdXRhYmxlOwogfQogCkBA IC03MTAsNyArNzA4LDcgQEAgdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQogCURhdHVtCQl2YWwg PSBQR19HRVRBUkdfREFUVU0oMCk7CiAJT2lkCQkJdmFsX3R5cGUgPSBnZXRfZm5fZXhwcl9hcmd0 eXBlKGZjaW5mby0+ZmxpbmZvLCAwKTsKIAlKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeTsKLQlP aWQJCQlvdXRmdW5jb2lkOworCUZtZ3JJbmZvCW91dGZsaW5mbzsKIAogCWlmICh2YWxfdHlwZSA9 PSBJbnZhbGlkT2lkKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNzE4LDI0ICs3MTYsMjcgQEAgdG9f anNvbihQR19GVU5DVElPTl9BUkdTKQogCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1pbmUg aW5wdXQgZGF0YSB0eXBlIikpKTsKIAogCWpzb25fY2F0ZWdvcml6ZV90eXBlKHZhbF90eXBlLCBm YWxzZSwKLQkJCQkJCSAmdGNhdGVnb3J5LCAmb3V0ZnVuY29pZCk7CisJCQkJCQkgJnRjYXRlZ29y eSwgJm91dGZsaW5mbyk7CiAKLQlQR19SRVRVUk5fREFUVU0oZGF0dW1fdG9fanNvbih2YWwsIHRj YXRlZ29yeSwgb3V0ZnVuY29pZCkpOworCVBHX1JFVFVSTl9EQVRVTShkYXR1bV90b19qc29uKHZh bCwgdGNhdGVnb3J5LCAmb3V0ZmxpbmZvKSk7CiB9CiAKIC8qCiAgKiBUdXJuIGEgRGF0dW0gaW50 byBKU09OIHRleHQuCiAgKgotICogdGNhdGVnb3J5IGFuZCBvdXRmdW5jb2lkIGFyZSBmcm9tIGEg cHJldmlvdXMgY2FsbCB0byBqc29uX2NhdGVnb3JpemVfdHlwZS4KKyAqIHRjYXRlZ29yeSBpcyBm cm9tIGEgcHJldmlvdXMgY2FsbCB0byBqc29uX2NhdGVnb3JpemVfdHlwZS4KKyAqCisgKiBvdXRm bGluZm8gaXMgYSBwb2ludGVyIHRvIGFuIEZtZ3JJbmZvIHBvcHVsYXRlZCBieSB0aGUgc2FtZSBj YWxsIHRvCisgKiBqc29uX2NhdGVnb3JpemVfdHlwZSwgYnV0IGl0IGlzIG9ubHkgbmVlZGVkIGZv ciBjYXRlZ29yaWVzIHdoZXJlCisgKiBqc29uX2NhdGVnb3JpemVfdHlwZSBhY3R1YWxseSBwb3B1 bGF0ZXMgaXQuCiAgKi8KIERhdHVtCi1kYXR1bV90b19qc29uKERhdHVtIHZhbCwgSnNvblR5cGVD YXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkKQorZGF0dW1fdG9fanNvbihEYXR1bSB2 YWwsIEpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LCBGbWdySW5mbyAqb3V0ZmxpbmZvKQogewog CVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAogCWluaXRTdHJpbmdJbmZvKCZyZXN1bHQpOwotCWRh dHVtX3RvX2pzb25faW50ZXJuYWwodmFsLCBmYWxzZSwgJnJlc3VsdCwgdGNhdGVnb3J5LCBvdXRm dW5jb2lkLAotCQkJCQkJICAgZmFsc2UpOworCWRhdHVtX3RvX2pzb25faW50ZXJuYWwodmFsLCBm YWxzZSwgJnJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmbGluZm8sIGZhbHNlKTsKIAogCXJldHVybiBQ b2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKHJlc3VsdC5kYXRhLCByZXN1 bHQubGVuKSk7CiB9CkBAIC03NzIsMTYgKzc3MywxOSBAQCBqc29uX2FnZ190cmFuc2ZuX3dvcmtl cihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBhYnNlbnRfb25fbnVsbCkKIAkJICogTWFr ZSB0aGlzIHN0YXRlIG9iamVjdCBpbiBhIGNvbnRleHQgd2hlcmUgaXQgd2lsbCBwZXJzaXN0IGZv ciB0aGUKIAkJICogZHVyYXRpb24gb2YgdGhlIGFnZ3JlZ2F0ZSBjYWxsLiAgTWVtb3J5Q29udGV4 dFN3aXRjaFRvIGlzIG9ubHkKIAkJICogbmVlZGVkIHRoZSBmaXJzdCB0aW1lLCBhcyB0aGUgU3Ry aW5nSW5mbyByb3V0aW5lcyBtYWtlIHN1cmUgdGhleQotCQkgKiB1c2UgdGhlIHJpZ2h0IGNvbnRl eHQgdG8gZW5sYXJnZSB0aGUgb2JqZWN0IGlmIG5lY2Vzc2FyeS4KKwkJICogdXNlIHRoZSByaWdo dCBjb250ZXh0IHRvIGVubGFyZ2UgdGhlIG9iamVjdCBpZiBuZWNlc3NhcnksIGFuZAorCQkgKiB2 YWxfZmxpbmZvIHdpbGwgYWxzbyBrZWVwIHRyYWNrIG9mIHRoZSBjb250ZXh0IHVzZWQgdG8gaW5p dGlhbGl6ZQorCQkgKiBpdC4KIAkJICovCiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oYWdnY29udGV4dCk7CiAJCXN0YXRlID0gcGFsbG9jX29iamVjdChKc29uQWdnU3RhdGUp OwogCQlzdGF0ZS0+c3RyID0gbWFrZVN0cmluZ0luZm8oKTsKKworCQlqc29uX2NhdGVnb3JpemVf dHlwZShhcmdfdHlwZSwgZmFsc2UsICZzdGF0ZS0+dmFsX2NhdGVnb3J5LAorCQkJCQkJCSAmc3Rh dGUtPnZhbF9mbGluZm8pOwogCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAK IAkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RhdGUtPnN0ciwgJ1snKTsKLQkJanNvbl9jYXRlZ29y aXplX3R5cGUoYXJnX3R5cGUsIGZhbHNlLCAmc3RhdGUtPnZhbF9jYXRlZ29yeSwKLQkJCQkJCQkg JnN0YXRlLT52YWxfb3V0cHV0X2Z1bmMpOwogCX0KIAllbHNlCiAJewpAQCAtNzk4LDcgKzgwMiw3 IEBAIGpzb25fYWdnX3RyYW5zZm5fd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29s IGFic2VudF9vbl9udWxsKQogCWlmIChQR19BUkdJU05VTEwoMSkpCiAJewogCQlkYXR1bV90b19q c29uX2ludGVybmFsKChEYXR1bSkgMCwgdHJ1ZSwgc3RhdGUtPnN0ciwgSlNPTlRZUEVfTlVMTCwK LQkJCQkJCQkgICBJbnZhbGlkT2lkLCBmYWxzZSk7CisJCQkJCQkJICAgTlVMTCwgZmFsc2UpOwog CQlQR19SRVRVUk5fUE9JTlRFUihzdGF0ZSk7CiAJfQogCkBAIC04MTMsNyArODE3LDcgQEAganNv bl9hZ2dfdHJhbnNmbl93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgYWJzZW50 X29uX251bGwpCiAJfQogCiAJZGF0dW1fdG9fanNvbl9pbnRlcm5hbCh2YWwsIGZhbHNlLCBzdGF0 ZS0+c3RyLCBzdGF0ZS0+dmFsX2NhdGVnb3J5LAotCQkJCQkJICAgc3RhdGUtPnZhbF9vdXRwdXRf ZnVuYywgZmFsc2UpOworCQkJCQkJICAgJnN0YXRlLT52YWxfZmxpbmZvLCBmYWxzZSk7CiAKIAkv KgogCSAqIFRoZSB0cmFuc2l0aW9uIHR5cGUgZm9yIGpzb25fYWdnKCkgaXMgZGVjbGFyZWQgdG8g YmUgImludGVybmFsIiwgd2hpY2gKQEAgLTk5MSwxMCArOTk1LDE1IEBAIGpzb25fb2JqZWN0X2Fn Z190cmFuc2ZuX3dvcmtlcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJT2lkCQkJYXJnX3R5 cGU7CiAKIAkJLyoKLQkJICogTWFrZSB0aGUgU3RyaW5nSW5mbyBpbiBhIGNvbnRleHQgd2hlcmUg aXQgd2lsbCBwZXJzaXN0IGZvciB0aGUKLQkJICogZHVyYXRpb24gb2YgdGhlIGFnZ3JlZ2F0ZSBj YWxsLiBTd2l0Y2hpbmcgY29udGV4dCBpcyBvbmx5IG5lZWRlZAotCQkgKiBmb3IgdGhpcyBpbml0 aWFsIHN0ZXAsIGFzIHRoZSBTdHJpbmdJbmZvIGFuZCBkeW5haGFzaCByb3V0aW5lcyBtYWtlCi0J CSAqIHN1cmUgdGhleSB1c2UgdGhlIHJpZ2h0IGNvbnRleHQgdG8gZW5sYXJnZSB0aGUgb2JqZWN0 IGlmIG5lY2Vzc2FyeS4KKwkJICogRm9yIHRoaXMgaW5pdGlhbCBjYWxsLCB3ZSBuZWVkIHRvIHN3 aXRjaCB0byBhZ2djb250ZXh0LiBUaGF0J3MKKwkJICogaW1wb3J0YW50IGZvciB0aGUgU3RyaW5n SW5mbywgZm9yIHRoZSBkeW5haGFzaCBjcmVhdGVkIGJ5IHRoZSBjYWxsCisJCSAqIHRvIGpzb25f dW5pcXVlX2J1aWxkZXJfaW5pdCgpLCBhbmQgZm9yIHRoZSBjYWxscyB0bworCQkgKiBqc29uX2Nh dGVnb3JpemVfdHlwZSwgd2hpY2ggc2V0IHVwIHN0YXRlLT5rZXlfZmxpbmZvIGFuZAorCQkgKiBz dGF0ZS0+dmFsX2ZsaW5mby4KKwkJICoKKwkJICogKEl0IHdvbid0IGJlIG5lY2Vzc2FyeSB0byBz d2l0Y2ggY29udGV4dHMgb24gc3Vic2VxdWVudCBjYWxscyB0bworCQkgKiB0aGlzIGZ1bmN0aW9u LCBzaW5jZSBhbGwgb2YgdGhlc2Ugb2JqZWN0cyBhcmUgY2FyZWZ1bCB0byBtYWtlIHN1cmUKKwkJ ICogdGhhdCBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIHVzZSB0aGUgY29ycmVjdCBjb250ZXh0LikK IAkJICovCiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oYWdnY29udGV4dCk7 CiAJCXN0YXRlID0gcGFsbG9jX29iamVjdChKc29uQWdnU3RhdGUpOwpAQCAtMTAwMyw3ICsxMDEy LDYgQEAganNvbl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNp bmZvLAogCQkJanNvbl91bmlxdWVfYnVpbGRlcl9pbml0KCZzdGF0ZS0+dW5pcXVlX2NoZWNrKTsK IAkJZWxzZQogCQkJbWVtc2V0KCZzdGF0ZS0+dW5pcXVlX2NoZWNrLCAwLCBzaXplb2Yoc3RhdGUt PnVuaXF1ZV9jaGVjaykpOwotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAK IAkJYXJnX3R5cGUgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+ZmxpbmZvLCAxKTsKIApA QCAtMTAxMyw3ICsxMDIxLDcgQEAganNvbl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZGV0ZXJtaW5lIGRh dGEgdHlwZSBmb3IgYXJndW1lbnQgJWQiLCAxKSkpOwogCiAJCWpzb25fY2F0ZWdvcml6ZV90eXBl KGFyZ190eXBlLCBmYWxzZSwgJnN0YXRlLT5rZXlfY2F0ZWdvcnksCi0JCQkJCQkJICZzdGF0ZS0+ a2V5X291dHB1dF9mdW5jKTsKKwkJCQkJCQkgJnN0YXRlLT5rZXlfZmxpbmZvKTsKIAogCQlhcmdf dHlwZSA9IGdldF9mbl9leHByX2FyZ3R5cGUoZmNpbmZvLT5mbGluZm8sIDIpOwogCkBAIC0xMDIz LDcgKzEwMzEsOCBAQCBqc29uX29iamVjdF9hZ2dfdHJhbnNmbl93b3JrZXIoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8sCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBkZXRlcm1pbmUgZGF0YSB0eXBl IGZvciBhcmd1bWVudCAlZCIsIDIpKSk7CiAKIAkJanNvbl9jYXRlZ29yaXplX3R5cGUoYXJnX3R5 cGUsIGZhbHNlLCAmc3RhdGUtPnZhbF9jYXRlZ29yeSwKLQkJCQkJCQkgJnN0YXRlLT52YWxfb3V0 cHV0X2Z1bmMpOworCQkJCQkJCSAmc3RhdGUtPnZhbF9mbGluZm8pOworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdGF0ZS0+ c3RyLCAieyAiKTsKIAl9CkBAIC0xMDc3LDcgKzEwODYsNyBAQCBqc29uX29iamVjdF9hZ2dfdHJh bnNmbl93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJa2V5X29mZnNldCA9IG91dC0+ bGVuOwogCiAJZGF0dW1fdG9fanNvbl9pbnRlcm5hbChhcmcsIGZhbHNlLCBvdXQsIHN0YXRlLT5r ZXlfY2F0ZWdvcnksCi0JCQkJCQkgICBzdGF0ZS0+a2V5X291dHB1dF9mdW5jLCB0cnVlKTsKKwkJ CQkJCSAgICZzdGF0ZS0+a2V5X2ZsaW5mbywgdHJ1ZSk7CiAKIAlpZiAodW5pcXVlX2tleXMpCiAJ ewpAQCAtMTEwNyw4ICsxMTE2LDggQEAganNvbl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQlhcmcgPSBQR19HRVRBUkdfREFUVU0oMik7CiAKIAlk YXR1bV90b19qc29uX2ludGVybmFsKGFyZywgUEdfQVJHSVNOVUxMKDIpLCBzdGF0ZS0+c3RyLAot CQkJCQkJICAgc3RhdGUtPnZhbF9jYXRlZ29yeSwKLQkJCQkJCSAgIHN0YXRlLT52YWxfb3V0cHV0 X2Z1bmMsIGZhbHNlKTsKKwkJCQkJCSAgIHN0YXRlLT52YWxfY2F0ZWdvcnksICZzdGF0ZS0+dmFs X2ZsaW5mbywKKwkJCQkJCSAgIGZhbHNlKTsKIAogCVBHX1JFVFVSTl9QT0lOVEVSKHN0YXRlKTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25iLmMKaW5kZXggODY0YzVhYzFjODUuLjk0ZmMzZDRlY2ZiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmIuYwpAQCAtMjksOSArMjksOSBAQCB0eXBlZGVmIHN0cnVjdCBKc29uYkFn Z1N0YXRlCiB7CiAJSnNvbmJJblN0YXRlIHBzdGF0ZTsKIAlKc29uVHlwZUNhdGVnb3J5IGtleV9j YXRlZ29yeTsKLQlPaWQJCQlrZXlfb3V0cHV0X2Z1bmM7CisJRm1nckluZm8Ja2V5X2ZsaW5mbzsK IAlKc29uVHlwZUNhdGVnb3J5IHZhbF9jYXRlZ29yeTsKLQlPaWQJCQl2YWxfb3V0cHV0X2Z1bmM7 CisJRm1nckluZm8JdmFsX2ZsaW5mbzsKIH0gSnNvbmJBZ2dTdGF0ZTsKIAogc3RhdGljIGlubGlu ZSBEYXR1bSBqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9vbCB1bmlx dWVfa2V5cywKQEAgLTQ3LDExICs0NywxMSBAQCBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIGpz b25iX2luX3NjYWxhcih2b2lkICpwc3RhdGUsIGNoYXIgKnRva2VuLCBKc29uVG9rZW5UeQogc3Rh dGljIHZvaWQgY29tcG9zaXRlX3RvX2pzb25iKERhdHVtIGNvbXBvc2l0ZSwgSnNvbmJJblN0YXRl ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgYXJyYXlfZGltX3RvX2pzb25iKEpzb25iSW5TdGF0ZSAq cmVzdWx0LCBpbnQgZGltLCBpbnQgbmRpbXMsIGludCAqZGltcywKIAkJCQkJCQkgICBjb25zdCBE YXR1bSAqdmFscywgY29uc3QgYm9vbCAqbnVsbHMsIGludCAqdmFsY291bnQsCi0JCQkJCQkJICAg SnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkKTsKKwkJCQkJCQkgICBK c29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgRm1nckluZm8gKm91dGZsaW5mbyk7CiBzdGF0aWMg dm9pZCBhcnJheV90b19qc29uYl9pbnRlcm5hbChEYXR1bSBhcnJheSwgSnNvbmJJblN0YXRlICpy ZXN1bHQpOwogc3RhdGljIHZvaWQgZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwoRGF0dW0gdmFsLCBi b29sIGlzX251bGwsIEpzb25iSW5TdGF0ZSAqcmVzdWx0LAotCQkJCQkJCQkJSnNvblR5cGVDYXRl Z29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLAotCQkJCQkJCQkJYm9vbCBrZXlfc2NhbGFy KTsKKwkJCQkJCQkJCUpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5LAorCQkJCQkJCQkJRm1ncklu Zm8gKm91dGZsaW5mbywgYm9vbCBrZXlfc2NhbGFyKTsKIHN0YXRpYyB2b2lkIGFkZF9qc29uYihE YXR1bSB2YWwsIGJvb2wgaXNfbnVsbCwgSnNvbmJJblN0YXRlICpyZXN1bHQsCiAJCQkJCSAgT2lk IHZhbF90eXBlLCBib29sIGtleV9zY2FsYXIpOwogc3RhdGljIGNoYXIgKkpzb25iVG9DU3RyaW5n V29ya2VyKFN0cmluZ0luZm8gb3V0LCBKc29uYkNvbnRhaW5lciAqaW4sIGludCBlc3RpbWF0ZWRf bGVuLCBib29sIGluZGVudCk7CkBAIC02MTcsOCArNjE3LDEyIEBAIGFkZF9pbmRlbnQoU3RyaW5n SW5mbyBvdXQsIGJvb2wgaW5kZW50LCBpbnQgbGV2ZWwpCiAvKgogICogVHVybiBhIERhdHVtIGlu dG8ganNvbmIsIGFkZGluZyBpdCB0byB0aGUgcmVzdWx0IEpzb25iSW5TdGF0ZS4KICAqCi0gKiB0 Y2F0ZWdvcnkgYW5kIG91dGZ1bmNvaWQgYXJlIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGpzb25f Y2F0ZWdvcml6ZV90eXBlLAotICogZXhjZXB0IHRoYXQgaWYgaXNfbnVsbCBpcyB0cnVlIHRoZW4g dGhleSBjYW4gYmUgaW52YWxpZC4KKyAqIHRjYXRlZ29yeSBpcyBmcm9tIGEgcHJldmlvdXMgY2Fs bCB0byBqc29uX2NhdGVnb3JpemVfdHlwZSwgZXhjZXB0IHRoYXQgaWYKKyAqIGlzX251bGwgaXMg dHJ1ZSB0aGVuIGl0IGNhbiBiZSBpbnZhbGlkLgorICoKKyAqIG91dGZsaW5mbyBpcyBhIHBvaW50 ZXIgdG8gYW4gRm1nckluZm8gcG9wdWxhdGVkIGJ5IHRoZSBzYW1lIGNhbGwgdG8KKyAqIGpzb25f Y2F0ZWdvcml6ZV90eXBlLCBidXQgaXQgaXMgb25seSBuZWVkZWQgZm9yIGNhdGVnb3JpZXMgd2hl cmUKKyAqIGpzb25fY2F0ZWdvcml6ZV90eXBlIGFjdHVhbGx5IHBvcHVsYXRlcyBpdC4KICAqCiAg KiBJZiBrZXlfc2NhbGFyIGlzIHRydWUsIHRoZSB2YWx1ZSBpcyBzdG9yZWQgYXMgYSBrZXksIHNv IGluc2lzdAogICogaXQncyBvZiBhbiBhY2NlcHRhYmxlIHR5cGUsIGFuZCBmb3JjZSBpdCB0byBi ZSBhIGpidlN0cmluZy4KQEAgLTYyOCw3ICs2MzIsNyBAQCBhZGRfaW5kZW50KFN0cmluZ0luZm8g b3V0LCBib29sIGluZGVudCwgaW50IGxldmVsKQogICovCiBzdGF0aWMgdm9pZAogZGF0dW1fdG9f anNvbmJfaW50ZXJuYWwoRGF0dW0gdmFsLCBib29sIGlzX251bGwsIEpzb25iSW5TdGF0ZSAqcmVz dWx0LAotCQkJCQkJSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkLAor CQkJCQkJSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIEZtZ3JJbmZvICpvdXRmbGluZm8sCiAJ CQkJCQlib29sIGtleV9zY2FsYXIpCiB7CiAJY2hhcgkgICAqb3V0cHV0c3RyOwpAQCAtNjkxLDcg KzY5NSw3IEBAIGRhdHVtX3RvX2pzb25iX2ludGVybmFsKERhdHVtIHZhbCwgYm9vbCBpc19udWxs LCBKc29uYkluU3RhdGUgKnJlc3VsdCwKIAkJCQl7CiAJCQkJCURhdHVtCQludW1kOwogCi0JCQkJ CXN3aXRjaCAob3V0ZnVuY29pZCkKKwkJCQkJc3dpdGNoIChvdXRmbGluZm8tPmZuX29pZCkKIAkJ CQkJewogCQkJCQkJY2FzZSBGX05VTUVSSUNfT1VUOgogCQkJCQkJCW51bWVyaWNfdmFsID0gRGF0 dW1HZXROdW1lcmljKHZhbCk7CkBAIC03MjUsNyArNzI5LDcgQEAgZGF0dW1fdG9fanNvbmJfaW50 ZXJuYWwoRGF0dW0gdmFsLCBib29sIGlzX251bGwsIEpzb25iSW5TdGF0ZSAqcmVzdWx0LAogCQkJ CQkJCWJyZWFrOwogI2VuZGlmCiAJCQkJCQlkZWZhdWx0OgotCQkJCQkJCW91dHB1dHN0ciA9IE9p ZE91dHB1dEZ1bmN0aW9uQ2FsbChvdXRmdW5jb2lkLCB2YWwpOworCQkJCQkJCW91dHB1dHN0ciA9 IE91dHB1dEZ1bmN0aW9uQ2FsbChvdXRmbGluZm8sIHZhbCk7CiAJCQkJCQkJbnVtZCA9IERpcmVj dEZ1bmN0aW9uQ2FsbDMobnVtZXJpY19pbiwKIAkJCQkJCQkJCQkJCQkgICBDU3RyaW5nR2V0RGF0 dW0ob3V0cHV0c3RyKSwKIAkJCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKEludmFsaWRP aWQpLApAQCAtNzM5LDcgKzc0Myw3IEBAIGRhdHVtX3RvX2pzb25iX2ludGVybmFsKERhdHVtIHZh bCwgYm9vbCBpc19udWxsLCBKc29uYkluU3RhdGUgKnJlc3VsdCwKIAkJCQl9CiAJCQkJaWYgKG51 bWVyaWNfdG9fc3RyaW5nKQogCQkJCXsKLQkJCQkJb3V0cHV0c3RyID0gT2lkT3V0cHV0RnVuY3Rp b25DYWxsKG91dGZ1bmNvaWQsIHZhbCk7CisJCQkJCW91dHB1dHN0ciA9IE91dHB1dEZ1bmN0aW9u Q2FsbChvdXRmbGluZm8sIHZhbCk7CiAJCQkJCWpiLnR5cGUgPSBqYnZTdHJpbmc7CiAJCQkJCWpi LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG91dHB1dHN0cik7CiAJCQkJCWpiLnZhbC5zdHJpbmcu dmFsID0gb3V0cHV0c3RyOwpAQCAtNzcwLDcgKzc3NCw3IEBAIGRhdHVtX3RvX2pzb25iX2ludGVy bmFsKERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBKc29uYkluU3RhdGUgKnJlc3VsdCwKIAkJCQli cmVhazsKIAkJCWNhc2UgSlNPTlRZUEVfQ0FTVDoKIAkJCQkvKiBjYXN0IHRvIEpTT04sIGFuZCB0 aGVuIHByb2Nlc3MgYXMgSlNPTiAqLwotCQkJCXZhbCA9IE9pZEZ1bmN0aW9uQ2FsbDEob3V0ZnVu Y29pZCwgdmFsKTsKKwkJCQl2YWwgPSBGdW5jdGlvbkNhbGwxKG91dGZsaW5mbywgdmFsKTsKIAkJ CQlwZ19mYWxsdGhyb3VnaDsKIAkJCWNhc2UgSlNPTlRZUEVfSlNPTjoKIAkJCQl7CkBAIC04Mjgs OSArODMyLDkgQEAgZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwoRGF0dW0gdmFsLCBib29sIGlzX251 bGwsIEpzb25iSW5TdGF0ZSAqcmVzdWx0LAogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkv KiBzcGVjaWFsLWNhc2UgdGV4dCB0eXBlcyB0byBzYXZlIHVzZWxlc3MgcGFsbG9jL21lbWNweSBv cHMgKi8KLQkJCQlpZiAob3V0ZnVuY29pZCA9PSBGX1RFWFRPVVQgfHwKLQkJCQkJb3V0ZnVuY29p ZCA9PSBGX1ZBUkNIQVJPVVQgfHwKLQkJCQkJb3V0ZnVuY29pZCA9PSBGX0JQQ0hBUk9VVCkKKwkJ CQlpZiAob3V0ZmxpbmZvLT5mbl9vaWQgPT0gRl9URVhUT1VUIHx8CisJCQkJCW91dGZsaW5mby0+ Zm5fb2lkID09IEZfVkFSQ0hBUk9VVCB8fAorCQkJCQlvdXRmbGluZm8tPmZuX29pZCA9PSBGX0JQ Q0hBUk9VVCkKIAkJCQl7CiAJCQkJCXRleHQJICAgKnR4dCA9IERhdHVtR2V0VGV4dFBQKHZhbCk7 CiAKQEAgLTgzOSw3ICs4NDMsNyBAQCBkYXR1bV90b19qc29uYl9pbnRlcm5hbChEYXR1bSB2YWws IGJvb2wgaXNfbnVsbCwgSnNvbmJJblN0YXRlICpyZXN1bHQsCiAJCQkJfQogCQkJCWVsc2UKIAkJ CQl7Ci0JCQkJCW91dHB1dHN0ciA9IE9pZE91dHB1dEZ1bmN0aW9uQ2FsbChvdXRmdW5jb2lkLCB2 YWwpOworCQkJCQlvdXRwdXRzdHIgPSBPdXRwdXRGdW5jdGlvbkNhbGwob3V0ZmxpbmZvLCB2YWwp OwogCQkJCQlqYi52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvdXRwdXRzdHIpOwogCQkJCQlqYi52 YWwuc3RyaW5nLnZhbCA9IG91dHB1dHN0cjsKIAkJCQl9CkBAIC04OTcsNyArOTAxLDcgQEAgZGF0 dW1fdG9fanNvbmJfaW50ZXJuYWwoRGF0dW0gdmFsLCBib29sIGlzX251bGwsIEpzb25iSW5TdGF0 ZSAqcmVzdWx0LAogc3RhdGljIHZvaWQKIGFycmF5X2RpbV90b19qc29uYihKc29uYkluU3RhdGUg KnJlc3VsdCwgaW50IGRpbSwgaW50IG5kaW1zLCBpbnQgKmRpbXMsIGNvbnN0IERhdHVtICp2YWxz LAogCQkJCSAgIGNvbnN0IGJvb2wgKm51bGxzLCBpbnQgKnZhbGNvdW50LCBKc29uVHlwZUNhdGVn b3J5IHRjYXRlZ29yeSwKLQkJCQkgICBPaWQgb3V0ZnVuY29pZCkKKwkJCQkgICBGbWdySW5mbyAq b3V0ZmxpbmZvKQogewogCWludAkJCWk7CiAKQEAgLTkwOSwxNCArOTEzLDE0IEBAIGFycmF5X2Rp bV90b19qc29uYihKc29uYkluU3RhdGUgKnJlc3VsdCwgaW50IGRpbSwgaW50IG5kaW1zLCBpbnQg KmRpbXMsIGNvbnN0IERhCiAJewogCQlpZiAoZGltICsgMSA9PSBuZGltcykKIAkJewotCQkJZGF0 dW1fdG9fanNvbmJfaW50ZXJuYWwodmFsc1sqdmFsY291bnRdLCBudWxsc1sqdmFsY291bnRdLCBy ZXN1bHQsIHRjYXRlZ29yeSwKLQkJCQkJCQkJCW91dGZ1bmNvaWQsIGZhbHNlKTsKKwkJCWRhdHVt X3RvX2pzb25iX2ludGVybmFsKHZhbHNbKnZhbGNvdW50XSwgbnVsbHNbKnZhbGNvdW50XSwKKwkJ CQkJCQkJCXJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmbGluZm8sIGZhbHNlKTsKIAkJCSgqdmFsY291 bnQpKys7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQlhcnJheV9kaW1fdG9fanNvbmIocmVzdWx0LCBk aW0gKyAxLCBuZGltcywgZGltcywgdmFscywgbnVsbHMsCi0JCQkJCQkJICAgdmFsY291bnQsIHRj YXRlZ29yeSwgb3V0ZnVuY29pZCk7CisJCQkJCQkJICAgdmFsY291bnQsIHRjYXRlZ29yeSwgb3V0 ZmxpbmZvKTsKIAkJfQogCX0KIApAQCAtOTQxLDcgKzk0NSw3IEBAIGFycmF5X3RvX2pzb25iX2lu dGVybmFsKERhdHVtIGFycmF5LCBKc29uYkluU3RhdGUgKnJlc3VsdCkKIAlib29sCQl0eXBieXZh bDsKIAljaGFyCQl0eXBhbGlnbjsKIAlKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeTsKLQlPaWQJ CQlvdXRmdW5jb2lkOworCUZtZ3JJbmZvCW91dGZsaW5mbzsKIAogCW5kaW0gPSBBUlJfTkRJTSh2 KTsKIAlkaW0gPSBBUlJfRElNUyh2KTsKQEAgLTk1OCwxNCArOTYyLDE0IEBAIGFycmF5X3RvX2pz b25iX2ludGVybmFsKERhdHVtIGFycmF5LCBKc29uYkluU3RhdGUgKnJlc3VsdCkKIAkJCQkJCSAm dHlwbGVuLCAmdHlwYnl2YWwsICZ0eXBhbGlnbik7CiAKIAlqc29uX2NhdGVnb3JpemVfdHlwZShl bGVtZW50X3R5cGUsIHRydWUsCi0JCQkJCQkgJnRjYXRlZ29yeSwgJm91dGZ1bmNvaWQpOworCQkJ CQkJICZ0Y2F0ZWdvcnksICZvdXRmbGluZm8pOwogCiAJZGVjb25zdHJ1Y3RfYXJyYXkodiwgZWxl bWVudF90eXBlLCB0eXBsZW4sIHR5cGJ5dmFsLAogCQkJCQkgIHR5cGFsaWduLCAmZWxlbWVudHMs ICZudWxscywKIAkJCQkJICAmbml0ZW1zKTsKIAotCWFycmF5X2RpbV90b19qc29uYihyZXN1bHQs IDAsIG5kaW0sIGRpbSwgZWxlbWVudHMsIG51bGxzLCAmY291bnQsIHRjYXRlZ29yeSwKLQkJCQkJ ICAgb3V0ZnVuY29pZCk7CisJYXJyYXlfZGltX3RvX2pzb25iKHJlc3VsdCwgMCwgbmRpbSwgZGlt LCBlbGVtZW50cywgbnVsbHMsICZjb3VudCwKKwkJCQkJICAgdGNhdGVnb3J5LCAmb3V0ZmxpbmZv KTsKIAogCXBmcmVlKGVsZW1lbnRzKTsKIAlwZnJlZShudWxscyk7CkBAIC0xMDA1LDcgKzEwMDks NyBAQCBjb21wb3NpdGVfdG9fanNvbmIoRGF0dW0gY29tcG9zaXRlLCBKc29uYkluU3RhdGUgKnJl c3VsdCkKIAkJYm9vbAkJaXNudWxsOwogCQljaGFyCSAgICphdHRuYW1lOwogCQlKc29uVHlwZUNh dGVnb3J5IHRjYXRlZ29yeTsKLQkJT2lkCQkJb3V0ZnVuY29pZDsKKwkJRm1nckluZm8Jb3V0Zmxp bmZvOwogCQlKc29uYlZhbHVlCXY7CiAJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVz Y0F0dHIodHVwZGVzYywgaSk7CiAKQEAgLTEwMjQsMTUgKzEwMjgsMTIgQEAgY29tcG9zaXRlX3Rv X2pzb25iKERhdHVtIGNvbXBvc2l0ZSwgSnNvbmJJblN0YXRlICpyZXN1bHQpCiAJCXZhbCA9IGhl YXBfZ2V0YXR0cih0dXBsZSwgaSArIDEsIHR1cGRlc2MsICZpc251bGwpOwogCiAJCWlmIChpc251 bGwpCi0JCXsKIAkJCXRjYXRlZ29yeSA9IEpTT05UWVBFX05VTEw7Ci0JCQlvdXRmdW5jb2lkID0g SW52YWxpZE9pZDsKLQkJfQogCQllbHNlCiAJCQlqc29uX2NhdGVnb3JpemVfdHlwZShhdHQtPmF0 dHR5cGlkLCB0cnVlLCAmdGNhdGVnb3J5LAotCQkJCQkJCQkgJm91dGZ1bmNvaWQpOworCQkJCQkJ CQkgJm91dGZsaW5mbyk7CiAKLQkJZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwodmFsLCBpc251bGws IHJlc3VsdCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lkLAorCQlkYXR1bV90b19qc29uYl9pbnRlcm5h bCh2YWwsIGlzbnVsbCwgcmVzdWx0LCB0Y2F0ZWdvcnksICZvdXRmbGluZm8sCiAJCQkJCQkJCWZh bHNlKTsKIAl9CiAKQEAgLTEwNTMsNyArMTA1NCw3IEBAIGFkZF9qc29uYihEYXR1bSB2YWwsIGJv b2wgaXNfbnVsbCwgSnNvbmJJblN0YXRlICpyZXN1bHQsCiAJCSAgT2lkIHZhbF90eXBlLCBib29s IGtleV9zY2FsYXIpCiB7CiAJSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnk7Ci0JT2lkCQkJb3V0 ZnVuY29pZDsKKwlGbWdySW5mbwlvdXRmbGluZm87CiAKIAlpZiAodmFsX3R5cGUgPT0gSW52YWxp ZE9pZCkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTEwNjEsMTUgKzEwNjIsMTIgQEAgYWRkX2pzb25i KERhdHVtIHZhbCwgYm9vbCBpc19udWxsLCBKc29uYkluU3RhdGUgKnJlc3VsdCwKIAkJCQkgZXJy bXNnKCJjb3VsZCBub3QgZGV0ZXJtaW5lIGlucHV0IGRhdGEgdHlwZSIpKSk7CiAKIAlpZiAoaXNf bnVsbCkKLQl7CiAJCXRjYXRlZ29yeSA9IEpTT05UWVBFX05VTEw7Ci0JCW91dGZ1bmNvaWQgPSBJ bnZhbGlkT2lkOwotCX0KIAllbHNlCiAJCWpzb25fY2F0ZWdvcml6ZV90eXBlKHZhbF90eXBlLCB0 cnVlLAotCQkJCQkJCSAmdGNhdGVnb3J5LCAmb3V0ZnVuY29pZCk7CisJCQkJCQkJICZ0Y2F0ZWdv cnksICZvdXRmbGluZm8pOwogCi0JZGF0dW1fdG9fanNvbmJfaW50ZXJuYWwodmFsLCBpc19udWxs LCByZXN1bHQsIHRjYXRlZ29yeSwgb3V0ZnVuY29pZCwKKwlkYXR1bV90b19qc29uYl9pbnRlcm5h bCh2YWwsIGlzX251bGwsIHJlc3VsdCwgdGNhdGVnb3J5LCAmb3V0ZmxpbmZvLAogCQkJCQkJCWtl eV9zY2FsYXIpOwogfQogCkBAIC0xMDgyLDcgKzEwODAsNyBAQCB0b19qc29uYl9pc19pbW11dGFi bGUoT2lkIHR5cG9pZCkKIHsKIAlib29sCQloYXNfbXV0YWJsZSA9IGZhbHNlOwogCi0JanNvbl9j aGVja19tdXRhYmlsaXR5KHR5cG9pZCwgdHJ1ZSwgJmhhc19tdXRhYmxlKTsKKwlqc29uX2NoZWNr X211dGFiaWxpdHkodHlwb2lkLCAmaGFzX211dGFibGUpOwogCXJldHVybiAhaGFzX211dGFibGU7 CiB9CiAKQEAgLTEwOTUsNyArMTA5Myw3IEBAIHRvX2pzb25iKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ RGF0dW0JCXZhbCA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAlPaWQJCQl2YWxfdHlwZSA9IGdldF9m bl9leHByX2FyZ3R5cGUoZmNpbmZvLT5mbGluZm8sIDApOwogCUpzb25UeXBlQ2F0ZWdvcnkgdGNh dGVnb3J5OwotCU9pZAkJCW91dGZ1bmNvaWQ7CisJRm1nckluZm8Jb3V0ZmxpbmZvOwogCiAJaWYg KHZhbF90eXBlID09IEludmFsaWRPaWQpCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xMTAzLDI0ICsx MTAxLDI4IEBAIHRvX2pzb25iKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJIGVycm1zZygiY291bGQg bm90IGRldGVybWluZSBpbnB1dCBkYXRhIHR5cGUiKSkpOwogCiAJanNvbl9jYXRlZ29yaXplX3R5 cGUodmFsX3R5cGUsIHRydWUsCi0JCQkJCQkgJnRjYXRlZ29yeSwgJm91dGZ1bmNvaWQpOworCQkJ CQkJICZ0Y2F0ZWdvcnksICZvdXRmbGluZm8pOwogCi0JUEdfUkVUVVJOX0RBVFVNKGRhdHVtX3Rv X2pzb25iKHZhbCwgdGNhdGVnb3J5LCBvdXRmdW5jb2lkKSk7CisJUEdfUkVUVVJOX0RBVFVNKGRh dHVtX3RvX2pzb25iKHZhbCwgdGNhdGVnb3J5LCAmb3V0ZmxpbmZvKSk7CiB9CiAKIC8qCiAgKiBU dXJuIGEgRGF0dW0gaW50byBqc29uYi4KICAqCi0gKiB0Y2F0ZWdvcnkgYW5kIG91dGZ1bmNvaWQg YXJlIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGpzb25fY2F0ZWdvcml6ZV90eXBlLgorICogdGNh dGVnb3J5IGlzIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvIGpzb25fY2F0ZWdvcml6ZV90eXBlLgor ICoKKyAqIG91dGZsaW5mbyBpcyBhIHBvaW50ZXIgdG8gYW4gRm1nckluZm8gcG9wdWxhdGVkIGJ5 IHRoZSBzYW1lIGNhbGwgdG8KKyAqIGpzb25fY2F0ZWdvcml6ZV90eXBlLCBidXQgaXQgaXMgb25s eSBuZWVkZWQgZm9yIGNhdGVnb3JpZXMgd2hlcmUKKyAqIGpzb25fY2F0ZWdvcml6ZV90eXBlIGFj dHVhbGx5IHBvcHVsYXRlcyBpdC4KICAqLwogRGF0dW0KLWRhdHVtX3RvX2pzb25iKERhdHVtIHZh bCwgSnNvblR5cGVDYXRlZ29yeSB0Y2F0ZWdvcnksIE9pZCBvdXRmdW5jb2lkKQorZGF0dW1fdG9f anNvbmIoRGF0dW0gdmFsLCBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgRm1nckluZm8gKm91 dGZsaW5mbykKIHsKIAlKc29uYkluU3RhdGUgcmVzdWx0OwogCiAJbWVtc2V0KCZyZXN1bHQsIDAs IHNpemVvZihKc29uYkluU3RhdGUpKTsKIAotCWRhdHVtX3RvX2pzb25iX2ludGVybmFsKHZhbCwg ZmFsc2UsICZyZXN1bHQsIHRjYXRlZ29yeSwgb3V0ZnVuY29pZCwKKwlkYXR1bV90b19qc29uYl9p bnRlcm5hbCh2YWwsIGZhbHNlLCAmcmVzdWx0LCB0Y2F0ZWdvcnksIG91dGZsaW5mbywKIAkJCQkJ CQlmYWxzZSk7CiAKIAlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIocmVz dWx0LnJlc3VsdCkpOwpAQCAtMTQ5MCw2ICsxNDkyLDcgQEAganNvbmJfYWdnX3RyYW5zZm5fd29y a2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBib29sIGFic2VudF9vbl9udWxsKQogCWlmIChQ R19BUkdJU05VTEwoMCkpCiAJewogCQlPaWQJCQlhcmdfdHlwZSA9IGdldF9mbl9leHByX2FyZ3R5 cGUoZmNpbmZvLT5mbGluZm8sIDEpOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CiAKIAkJ aWYgKGFyZ190eXBlID09IEludmFsaWRPaWQpCiAJCQllcmVwb3J0KEVSUk9SLApAQCAtMTUwMSw4 ICsxNTA0LDExIEBAIGpzb25iX2FnZ190cmFuc2ZuX3dvcmtlcihGdW5jdGlvbkNhbGxJbmZvIGZj aW5mbywgYm9vbCBhYnNlbnRfb25fbnVsbCkKIAkJcmVzdWx0LT5vdXRjb250ZXh0ID0gYWdnY29u dGV4dDsKIAkJcHVzaEpzb25iVmFsdWUocmVzdWx0LCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOwog CisJCS8qIG1ha2Ugc3VyZSB0byBzZXQgdXAgdmFsX2ZsaW5mbyBpbiB0aGUgY29ycmVjdCBjb250 ZXh0ICovCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oYWdnY29udGV4dCk7 CiAJCWpzb25fY2F0ZWdvcml6ZV90eXBlKGFyZ190eXBlLCB0cnVlLCAmc3RhdGUtPnZhbF9jYXRl Z29yeSwKLQkJCQkJCQkgJnN0YXRlLT52YWxfb3V0cHV0X2Z1bmMpOworCQkJCQkJCSAmc3RhdGUt PnZhbF9mbGluZm8pOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAJfQog CWVsc2UKIAl7CkBAIC0xNTIyLDcgKzE1MjgsNyBAQCBqc29uYl9hZ2dfdHJhbnNmbl93b3JrZXIo RnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sIGJvb2wgYWJzZW50X29uX251bGwpCiAJdmFsID0gUEdf QVJHSVNOVUxMKDEpID8gKERhdHVtKSAwIDogUEdfR0VUQVJHX0RBVFVNKDEpOwogCiAJZGF0dW1f dG9fanNvbmJfaW50ZXJuYWwodmFsLCBQR19BUkdJU05VTEwoMSksIHJlc3VsdCwgc3RhdGUtPnZh bF9jYXRlZ29yeSwKLQkJCQkJCQlzdGF0ZS0+dmFsX291dHB1dF9mdW5jLCBmYWxzZSk7CisJCQkJ CQkJJnN0YXRlLT52YWxfZmxpbmZvLCBmYWxzZSk7CiAKIAlQR19SRVRVUk5fUE9JTlRFUihzdGF0 ZSk7CiB9CkBAIC0xNTk5LDYgKzE2MDUsNyBAQCBqc29uYl9vYmplY3RfYWdnX3RyYW5zZm5fd29y a2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCWlmIChQR19BUkdJU05VTEwoMCkpCiAJewog CQlPaWQJCQlhcmdfdHlwZTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwogCiAJCXN0YXRl ID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhhZ2djb250ZXh0LCBzaXplb2YoSnNvbmJBZ2dTdGF0 ZSkpOwogCQlyZXN1bHQgPSAmc3RhdGUtPnBzdGF0ZTsKQEAgLTE2MDcsNiArMTYxNCw5IEBAIGpz b25iX29iamVjdF9hZ2dfdHJhbnNmbl93b3JrZXIoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJ CXJlc3VsdC0+cGFyc2VTdGF0ZS0+dW5pcXVlX2tleXMgPSB1bmlxdWVfa2V5czsKIAkJcmVzdWx0 LT5wYXJzZVN0YXRlLT5za2lwX251bGxzID0gYWJzZW50X29uX251bGw7CiAKKwkJLyogbWFrZSBz dXJlIHRvIHNldCB1cCBrZXlfZmxpbmZvL3ZhbF9mbGluZm8gaW4gdGhlIGNvcnJlY3QgY29udGV4 dCAqLworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ2NvbnRleHQpOwor CiAJCWFyZ190eXBlID0gZ2V0X2ZuX2V4cHJfYXJndHlwZShmY2luZm8tPmZsaW5mbywgMSk7CiAK IAkJaWYgKGFyZ190eXBlID09IEludmFsaWRPaWQpCkBAIC0xNjE1LDcgKzE2MjUsNyBAQCBqc29u Yl9vYmplY3RfYWdnX3RyYW5zZm5fd29ya2VyKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJ CQkgZXJybXNnKCJjb3VsZCBub3QgZGV0ZXJtaW5lIGlucHV0IGRhdGEgdHlwZSIpKSk7CiAKIAkJ anNvbl9jYXRlZ29yaXplX3R5cGUoYXJnX3R5cGUsIHRydWUsICZzdGF0ZS0+a2V5X2NhdGVnb3J5 LAotCQkJCQkJCSAmc3RhdGUtPmtleV9vdXRwdXRfZnVuYyk7CisJCQkJCQkJICZzdGF0ZS0+a2V5 X2ZsaW5mbyk7CiAKIAkJYXJnX3R5cGUgPSBnZXRfZm5fZXhwcl9hcmd0eXBlKGZjaW5mby0+Zmxp bmZvLCAyKTsKIApAQCAtMTYyNSw3ICsxNjM1LDggQEAganNvbmJfb2JqZWN0X2FnZ190cmFuc2Zu X3dvcmtlcihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQkJIGVycm1zZygiY291bGQgbm90 IGRldGVybWluZSBpbnB1dCBkYXRhIHR5cGUiKSkpOwogCiAJCWpzb25fY2F0ZWdvcml6ZV90eXBl KGFyZ190eXBlLCB0cnVlLCAmc3RhdGUtPnZhbF9jYXRlZ29yeSwKLQkJCQkJCQkgJnN0YXRlLT52 YWxfb3V0cHV0X2Z1bmMpOworCQkJCQkJCSAmc3RhdGUtPnZhbF9mbGluZm8pOworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAJfQogCWVsc2UKIAl7CkBAIC0xNjU2LDEyICsx NjY3LDEyIEBAIGpzb25iX29iamVjdF9hZ2dfdHJhbnNmbl93b3JrZXIoRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sCiAJdmFsID0gUEdfR0VUQVJHX0RBVFVNKDEpOwogCiAJZGF0dW1fdG9fanNvbmJf aW50ZXJuYWwodmFsLCBmYWxzZSwgcmVzdWx0LCBzdGF0ZS0+a2V5X2NhdGVnb3J5LAotCQkJCQkJ CXN0YXRlLT5rZXlfb3V0cHV0X2Z1bmMsIHRydWUpOworCQkJCQkJCSZzdGF0ZS0+a2V5X2ZsaW5m bywgdHJ1ZSk7CiAKIAl2YWwgPSBQR19BUkdJU05VTEwoMikgPyAoRGF0dW0pIDAgOiBQR19HRVRB UkdfREFUVU0oMik7CiAKIAlkYXR1bV90b19qc29uYl9pbnRlcm5hbCh2YWwsIFBHX0FSR0lTTlVM TCgyKSwgcmVzdWx0LCBzdGF0ZS0+dmFsX2NhdGVnb3J5LAotCQkJCQkJCXN0YXRlLT52YWxfb3V0 cHV0X2Z1bmMsIGZhbHNlKTsKKwkJCQkJCQkmc3RhdGUtPnZhbF9mbGluZm8sIGZhbHNlKTsKIAog CVBHX1JFVFVSTl9QT0lOVEVSKHN0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYwpp bmRleCA5N2NjM2Q2MDM0MC4uZjc2OWU5MGJhNWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmZ1bmNz LmMKQEAgLTUwNiw2ICs1MDYsOCBAQCBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBlIHRyYW5zZm9y bV9zdHJpbmdfdmFsdWVzX29iamVjdF9maWVsZF9zdGFydCh2b2lkICpzdGF0ZQogc3RhdGljIEpz b25QYXJzZUVycm9yVHlwZSB0cmFuc2Zvcm1fc3RyaW5nX3ZhbHVlc19hcnJheV9lbGVtZW50X3N0 YXJ0KHZvaWQgKnN0YXRlLCBib29sIGlzbnVsbCk7CiBzdGF0aWMgSnNvblBhcnNlRXJyb3JUeXBl IHRyYW5zZm9ybV9zdHJpbmdfdmFsdWVzX3NjYWxhcih2b2lkICpzdGF0ZSwgY2hhciAqdG9rZW4s IEpzb25Ub2tlblR5cGUgdG9rZW50eXBlKTsKIAorLyogZnVuY3Rpb24gc3VwcG9ydGluZyBqc29u X2NhdGVnb3JpemVfdHlwZS9qc29uX2NoZWNrX211dGFiaWxpdHkgKi8KK3N0YXRpYyBPaWQgZ2V0 X2pzb25fY2FzdF9mb3JfdHlwZShPaWQgdHlwb2lkKTsKIAogLyoKICAqIHBnX3BhcnNlX2pzb25f b3JfZXJyc2F2ZQpAQCAtNTk1OSwyNSArNTk2MSwyMiBAQCBqc29uX2dldF9maXJzdF90b2tlbih0 ZXh0ICpqc29uLCBib29sIHRocm93X2Vycm9yKQogLyoKICAqIERldGVybWluZSBob3cgd2Ugd2Fu dCB0byBwcmludCB2YWx1ZXMgb2YgYSBnaXZlbiB0eXBlIGluIGRhdHVtX3RvX2pzb24oYikuCiAg KgotICogR2l2ZW4gdGhlIGRhdGF0eXBlIE9JRCwgcmV0dXJuIGl0cyBKc29uVHlwZUNhdGVnb3J5 LCBhcyB3ZWxsIGFzIHRoZSB0eXBlJ3MKLSAqIG91dHB1dCBmdW5jdGlvbiBPSUQuICBJZiB0aGUg cmV0dXJuZWQgY2F0ZWdvcnkgaXMgSlNPTlRZUEVfQ0FTVCwgd2UgcmV0dXJuCi0gKiB0aGUgT0lE IG9mIHRoZSB0eXBlLT5KU09OIGNhc3QgZnVuY3Rpb24gaW5zdGVhZC4KKyAqIEdpdmVuIHRoZSBk YXRhdHlwZSBPSUQsIHJldHVybiBpdHMgSnNvblR5cGVDYXRlZ29yeSwgYXMgd2VsbCBhcyBhbiBG bWdySW5mbworICogZm9yIHRoZSB0eXBlJ3Mgb3V0cHV0IGZ1bmN0aW9uIG9yIGNhc3QgZnVuY3Rp b24uICBGb3IgY2F0ZWdvcmllcyB0aGF0IGRvIG5vdAorICogcmVxdWlyZSBjYWxsaW5nIGEgZnVu Y3Rpb24sIG91dGZsaW5mbyBpcyBub3QgdG91Y2hlZC4KICAqLwogdm9pZAoganNvbl9jYXRlZ29y aXplX3R5cGUoT2lkIHR5cG9pZCwgYm9vbCBpc19qc29uYiwKLQkJCQkJIEpzb25UeXBlQ2F0ZWdv cnkgKnRjYXRlZ29yeSwgT2lkICpvdXRmdW5jb2lkKQorCQkJCQkgSnNvblR5cGVDYXRlZ29yeSAq dGNhdGVnb3J5LCBGbWdySW5mbyAqb3V0ZmxpbmZvKQogewotCWJvb2wJCXR5cGlzdmFybGVuYTsK Kwlib29sCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24gPSBmYWxzZTsKIAogCS8qIExvb2sgdGhy b3VnaCBhbnkgZG9tYWluICovCiAJdHlwb2lkID0gZ2V0QmFzZVR5cGUodHlwb2lkKTsKIAotCSpv dXRmdW5jb2lkID0gSW52YWxpZE9pZDsKLQogCXN3aXRjaCAodHlwb2lkKQogCXsKIAkJY2FzZSBC T09MT0lEOgotCQkJKm91dGZ1bmNvaWQgPSBGX0JPT0xPVVQ7CiAJCQkqdGNhdGVnb3J5ID0gSlNP TlRZUEVfQk9PTDsKIAkJCWJyZWFrOwogCkBAIC01OTg3LDMyICs1OTg2LDI5IEBAIGpzb25fY2F0 ZWdvcml6ZV90eXBlKE9pZCB0eXBvaWQsIGJvb2wgaXNfanNvbmIsCiAJCWNhc2UgRkxPQVQ0T0lE OgogCQljYXNlIEZMT0FUOE9JRDoKIAkJY2FzZSBOVU1FUklDT0lEOgotCQkJZ2V0VHlwZU91dHB1 dEluZm8odHlwb2lkLCBvdXRmdW5jb2lkLCAmdHlwaXN2YXJsZW5hKTsKKwkJCXVzZV90eXBlX291 dHB1dF9mdW5jdGlvbiA9IHRydWU7CiAJCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfTlVNRVJJQzsK IAkJCWJyZWFrOwogCiAJCWNhc2UgREFURU9JRDoKLQkJCSpvdXRmdW5jb2lkID0gRl9EQVRFX09V VDsKIAkJCSp0Y2F0ZWdvcnkgPSBKU09OVFlQRV9EQVRFOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBU SU1FU1RBTVBPSUQ6Ci0JCQkqb3V0ZnVuY29pZCA9IEZfVElNRVNUQU1QX09VVDsKIAkJCSp0Y2F0 ZWdvcnkgPSBKU09OVFlQRV9USU1FU1RBTVA7CiAJCQlicmVhazsKIAogCQljYXNlIFRJTUVTVEFN UFRaT0lEOgotCQkJKm91dGZ1bmNvaWQgPSBGX1RJTUVTVEFNUFRaX09VVDsKIAkJCSp0Y2F0ZWdv cnkgPSBKU09OVFlQRV9USU1FU1RBTVBUWjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSlNPTk9JRDoK LQkJCWdldFR5cGVPdXRwdXRJbmZvKHR5cG9pZCwgb3V0ZnVuY29pZCwgJnR5cGlzdmFybGVuYSk7 CisJCQl1c2VfdHlwZV9vdXRwdXRfZnVuY3Rpb24gPSAhaXNfanNvbmI7CiAJCQkqdGNhdGVnb3J5 ID0gSlNPTlRZUEVfSlNPTjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSlNPTkJPSUQ6Ci0JCQlnZXRU eXBlT3V0cHV0SW5mbyh0eXBvaWQsIG91dGZ1bmNvaWQsICZ0eXBpc3ZhcmxlbmEpOworCQkJdXNl X3R5cGVfb3V0cHV0X2Z1bmN0aW9uID0gIWlzX2pzb25iOwogCQkJKnRjYXRlZ29yeSA9IGlzX2pz b25iID8gSlNPTlRZUEVfSlNPTkIgOiBKU09OVFlQRV9KU09OOwogCQkJYnJlYWs7CiAKQEAgLTYw MjAsNTAgKzYwMTYsMzUgQEAganNvbl9jYXRlZ29yaXplX3R5cGUoT2lkIHR5cG9pZCwgYm9vbCBp c19qc29uYiwKIAkJCS8qIENoZWNrIGZvciBhcnJheXMgYW5kIGNvbXBvc2l0ZXMgKi8KIAkJCWlm IChPaWRJc1ZhbGlkKGdldF9lbGVtZW50X3R5cGUodHlwb2lkKSkgfHwgdHlwb2lkID09IEFOWUFS UkFZT0lECiAJCQkJfHwgdHlwb2lkID09IEFOWUNPTVBBVElCTEVBUlJBWU9JRCB8fCB0eXBvaWQg PT0gUkVDT1JEQVJSQVlPSUQpCi0JCQl7Ci0JCQkJKm91dGZ1bmNvaWQgPSBGX0FSUkFZX09VVDsK IAkJCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfQVJSQVk7Ci0JCQl9CiAJCQllbHNlIGlmICh0eXBl X2lzX3Jvd3R5cGUodHlwb2lkKSkJLyogaW5jbHVkZXMgUkVDT1JET0lEICovCi0JCQl7Ci0JCQkJ Km91dGZ1bmNvaWQgPSBGX1JFQ09SRF9PVVQ7CiAJCQkJKnRjYXRlZ29yeSA9IEpTT05UWVBFX0NP TVBPU0lURTsKLQkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQkvKgotCQkJCSAqIEl0J3MgcHJvYmFi bHkgdGhlIGdlbmVyYWwgY2FzZS4gIEJ1dCBsZXQncyBsb29rIGZvciBhIGNhc3QKLQkJCQkgKiB0 byBqc29uIChub3RlOiBub3QgdG8ganNvbmIgZXZlbiBpZiBpc19qc29uYiBpcyB0cnVlKSwgaWYK LQkJCQkgKiBpdCdzIG5vdCBidWlsdC1pbi4KLQkJCQkgKi8KLQkJCQkqdGNhdGVnb3J5ID0gSlNP TlRZUEVfT1RIRVI7Ci0JCQkJaWYgKHR5cG9pZCA+PSBGaXJzdE5vcm1hbE9iamVjdElkKQorCQkJ CU9pZAkJCWNhc3RmdW5jID0gZ2V0X2pzb25fY2FzdF9mb3JfdHlwZSh0eXBvaWQpOworCisJCQkJ aWYgKE9pZElzVmFsaWQoY2FzdGZ1bmMpKQogCQkJCXsKLQkJCQkJT2lkCQkJY2FzdGZ1bmM7Ci0J CQkJCUNvZXJjaW9uUGF0aFR5cGUgY3R5cGU7Ci0KLQkJCQkJY3R5cGUgPSBmaW5kX2NvZXJjaW9u X3BhdGh3YXkoSlNPTk9JRCwgdHlwb2lkLAotCQkJCQkJCQkJCQkJICBDT0VSQ0lPTl9FWFBMSUNJ VCwKLQkJCQkJCQkJCQkJCSAgJmNhc3RmdW5jKTsKLQkJCQkJaWYgKGN0eXBlID09IENPRVJDSU9O X1BBVEhfRlVOQyAmJiBPaWRJc1ZhbGlkKGNhc3RmdW5jKSkKLQkJCQkJewotCQkJCQkJKm91dGZ1 bmNvaWQgPSBjYXN0ZnVuYzsKLQkJCQkJCSp0Y2F0ZWdvcnkgPSBKU09OVFlQRV9DQVNUOwotCQkJ CQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkJLyogbm9uIGJ1aWx0aW4gdHlwZSB3aXRoIG5v IGNhc3QgKi8KLQkJCQkJCWdldFR5cGVPdXRwdXRJbmZvKHR5cG9pZCwgb3V0ZnVuY29pZCwgJnR5 cGlzdmFybGVuYSk7Ci0JCQkJCX0KKwkJCQkJZm1ncl9pbmZvKGNhc3RmdW5jLCBvdXRmbGluZm8p OworCQkJCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfQ0FTVDsKIAkJCQl9CiAJCQkJZWxzZQogCQkJ CXsKLQkJCQkJLyogYW55IG90aGVyIGJ1aWx0aW4gdHlwZSAqLwotCQkJCQlnZXRUeXBlT3V0cHV0 SW5mbyh0eXBvaWQsIG91dGZ1bmNvaWQsICZ0eXBpc3ZhcmxlbmEpOworCQkJCQl1c2VfdHlwZV9v dXRwdXRfZnVuY3Rpb24gPSB0cnVlOworCQkJCQkqdGNhdGVnb3J5ID0gSlNPTlRZUEVfT1RIRVI7 CiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CiAJfQorCisJaWYgKHVzZV90eXBlX291dHB1dF9mdW5j dGlvbikKKwl7CisJCU9pZAkJCXR5cG91dHB1dDsKKwkJYm9vbAkJdHlwaXN2YXJsZW5hOworCisJ CWdldFR5cGVPdXRwdXRJbmZvKHR5cG9pZCwgJnR5cG91dHB1dCwgJnR5cGlzdmFybGVuYSk7CisJ CWZtZ3JfaW5mbyh0eXBvdXRwdXQsIG91dGZsaW5mbyk7CisJfQogfQogCiAvKgpAQCAtNjA3NSwx MSArNjA1Niw5IEBAIGpzb25fY2F0ZWdvcml6ZV90eXBlKE9pZCB0eXBvaWQsIGJvb2wgaXNfanNv bmIsCiAgKiBJZiBhbnkgbXV0YWJsZSBmdW5jdGlvbiBpcyBmb3VuZCwgKmhhc19tdXRhYmxlIGlz IHNldCB0byB0cnVlLgogICovCiB2b2lkCi1qc29uX2NoZWNrX211dGFiaWxpdHkoT2lkIHR5cG9p ZCwgYm9vbCBpc19qc29uYiwgYm9vbCAqaGFzX211dGFibGUpCitqc29uX2NoZWNrX211dGFiaWxp dHkoT2lkIHR5cG9pZCwgYm9vbCAqaGFzX211dGFibGUpCiB7CiAJY2hhcgkJYXR0X3R5cHR5cGUg PSBnZXRfdHlwdHlwZSh0eXBvaWQpOwotCUpzb25UeXBlQ2F0ZWdvcnkgdGNhdGVnb3J5OwotCU9p ZAkJCW91dGZ1bmNvaWQ7CiAKIAkvKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2VzLCBpdCBj b3VsZCBiZSBkcml2ZW4gdG8gc3RhY2sgb3ZlcmZsb3cgKi8KIAljaGVja19zdGFja19kZXB0aCgp OwpAQCAtNjA5MSw3ICs2MDcwLDcgQEAganNvbl9jaGVja19tdXRhYmlsaXR5KE9pZCB0eXBvaWQs IGJvb2wgaXNfanNvbmIsIGJvb2wgKmhhc19tdXRhYmxlKQogCiAJaWYgKGF0dF90eXB0eXBlID09 IFRZUFRZUEVfRE9NQUlOKQogCXsKLQkJanNvbl9jaGVja19tdXRhYmlsaXR5KGdldEJhc2VUeXBl KHR5cG9pZCksIGlzX2pzb25iLCBoYXNfbXV0YWJsZSk7CisJCWpzb25fY2hlY2tfbXV0YWJpbGl0 eShnZXRCYXNlVHlwZSh0eXBvaWQpLCBoYXNfbXV0YWJsZSk7CiAJCXJldHVybjsKIAl9CiAJZWxz ZSBpZiAoYXR0X3R5cHR5cGUgPT0gVFlQVFlQRV9DT01QT1NJVEUpCkBAIC02MTA5LDcgKzYwODgs NyBAQCBqc29uX2NoZWNrX211dGFiaWxpdHkoT2lkIHR5cG9pZCwgYm9vbCBpc19qc29uYiwgYm9v bCAqaGFzX211dGFibGUpCiAJCQlpZiAoYXR0ci0+YXR0aXNkcm9wcGVkKQogCQkJCWNvbnRpbnVl OwogCi0JCQlqc29uX2NoZWNrX211dGFiaWxpdHkoYXR0ci0+YXR0dHlwaWQsIGlzX2pzb25iLCBo YXNfbXV0YWJsZSk7CisJCQlqc29uX2NoZWNrX211dGFiaWxpdHkoYXR0ci0+YXR0dHlwaWQsIGhh c19tdXRhYmxlKTsKIAkJCWlmICgqaGFzX211dGFibGUpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTYx MTgsMTQgKzYwOTcsMTIgQEAganNvbl9jaGVja19tdXRhYmlsaXR5KE9pZCB0eXBvaWQsIGJvb2wg aXNfanNvbmIsIGJvb2wgKmhhc19tdXRhYmxlKQogCX0KIAllbHNlIGlmIChhdHRfdHlwdHlwZSA9 PSBUWVBUWVBFX1JBTkdFKQogCXsKLQkJanNvbl9jaGVja19tdXRhYmlsaXR5KGdldF9yYW5nZV9z dWJ0eXBlKHR5cG9pZCksIGlzX2pzb25iLAotCQkJCQkJCSAgaGFzX211dGFibGUpOworCQlqc29u X2NoZWNrX211dGFiaWxpdHkoZ2V0X3JhbmdlX3N1YnR5cGUodHlwb2lkKSwgaGFzX211dGFibGUp OwogCQlyZXR1cm47CiAJfQogCWVsc2UgaWYgKGF0dF90eXB0eXBlID09IFRZUFRZUEVfTVVMVElS QU5HRSkKIAl7Ci0JCWpzb25fY2hlY2tfbXV0YWJpbGl0eShnZXRfbXVsdGlyYW5nZV9yYW5nZSh0 eXBvaWQpLCBpc19qc29uYiwKLQkJCQkJCQkgIGhhc19tdXRhYmxlKTsKKwkJanNvbl9jaGVja19t dXRhYmlsaXR5KGdldF9tdWx0aXJhbmdlX3JhbmdlKHR5cG9pZCksIGhhc19tdXRhYmxlKTsKIAkJ cmV0dXJuOwogCX0KIAllbHNlCkBAIC02MTM1LDM2ICs2MTEyLDczIEBAIGpzb25fY2hlY2tfbXV0 YWJpbGl0eShPaWQgdHlwb2lkLCBib29sIGlzX2pzb25iLCBib29sICpoYXNfbXV0YWJsZSkKIAkJ aWYgKE9pZElzVmFsaWQoYXR0X3R5cGVsZW0pKQogCQl7CiAJCQkvKiByZWN1cnNlIGludG8gYXJy YXkgZWxlbWVudCB0eXBlICovCi0JCQlqc29uX2NoZWNrX211dGFiaWxpdHkoYXR0X3R5cGVsZW0s IGlzX2pzb25iLCBoYXNfbXV0YWJsZSk7CisJCQlqc29uX2NoZWNrX211dGFiaWxpdHkoYXR0X3R5 cGVsZW0sIGhhc19tdXRhYmxlKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCWpzb25fY2F0ZWdv cml6ZV90eXBlKHR5cG9pZCwgaXNfanNvbmIsICZ0Y2F0ZWdvcnksICZvdXRmdW5jb2lkKTsKLQot CXN3aXRjaCAodGNhdGVnb3J5KQorCXN3aXRjaCAodHlwb2lkKQogCXsKLQkJY2FzZSBKU09OVFlQ RV9OVUxMOgotCQljYXNlIEpTT05UWVBFX0JPT0w6Ci0JCWNhc2UgSlNPTlRZUEVfTlVNRVJJQzoK KwkJY2FzZSBCT09MT0lEOgorCQljYXNlIElOVDJPSUQ6CisJCWNhc2UgSU5UNE9JRDoKKwkJY2Fz ZSBJTlQ4T0lEOgorCQljYXNlIEZMT0FUNE9JRDoKKwkJY2FzZSBGTE9BVDhPSUQ6CisJCWNhc2Ug TlVNRVJJQ09JRDoKKwkJY2FzZSBKU09OT0lEOgorCQljYXNlIEpTT05CT0lEOgorCQkJLyoga25v d24gaW1tdXRhYmxlICovCiAJCQlicmVhazsKLQotCQljYXNlIEpTT05UWVBFX0RBVEU6Ci0JCWNh c2UgSlNPTlRZUEVfVElNRVNUQU1QOgotCQljYXNlIEpTT05UWVBFX1RJTUVTVEFNUFRaOgorCQlj YXNlIERBVEVPSUQ6CisJCWNhc2UgVElNRVNUQU1QT0lEOgorCQljYXNlIFRJTUVTVEFNUFRaT0lE OgogCQkJKmhhc19tdXRhYmxlID0gdHJ1ZTsKIAkJCWJyZWFrOwotCi0JCWNhc2UgSlNPTlRZUEVf SlNPTjoKLQkJY2FzZSBKU09OVFlQRV9KU09OQjoKLQkJY2FzZSBKU09OVFlQRV9BUlJBWToKLQkJ Y2FzZSBKU09OVFlQRV9DT01QT1NJVEU6CisJCWNhc2UgUkVDT1JET0lEOgorCQljYXNlIEFOWUFS UkFZT0lEOgorCQljYXNlIEFOWUNPTVBBVElCTEVBUlJBWU9JRDoKKwkJCS8qIFhYWCBpbmNvcnJl Y3RseSB0cmVhdGVkIGFzIGtub3duIGltbXV0YWJsZSAqLwogCQkJYnJlYWs7CiAKLQkJY2FzZSBK U09OVFlQRV9DQVNUOgotCQljYXNlIEpTT05UWVBFX09USEVSOgotCQkJaWYgKGZ1bmNfdm9sYXRp bGUob3V0ZnVuY29pZCkgIT0gUFJPVk9MQVRJTEVfSU1NVVRBQkxFKQotCQkJCSpoYXNfbXV0YWJs ZSA9IHRydWU7CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJT2lkCQkJY2FzdGZ1bmMgPSBnZXRfanNv bl9jYXN0X2Zvcl90eXBlKHR5cG9pZCk7CisJCQkJT2lkCQkJZnVuY29pZDsKKworCQkJCWlmIChP aWRJc1ZhbGlkKGNhc3RmdW5jKSkKKwkJCQkJZnVuY29pZCA9IGNhc3RmdW5jOworCQkJCWVsc2UK KwkJCQl7CisJCQkJCWJvb2wJCXR5cGlzdmFybGVuYTsKKworCQkJCQlnZXRUeXBlT3V0cHV0SW5m byh0eXBvaWQsICZmdW5jb2lkLCAmdHlwaXN2YXJsZW5hKTsKKwkJCQl9CisJCQkJaWYgKGZ1bmNf dm9sYXRpbGUoZnVuY29pZCkgIT0gUFJPVk9MQVRJTEVfSU1NVVRBQkxFKQorCQkJCQkqaGFzX211 dGFibGUgPSB0cnVlOworCQkJfQogCQkJYnJlYWs7CiAJfQogfQorCisvKgorICogUmV0dXJuIHRo ZSBPSUQgb2YgYSBjYXN0IGZ1bmN0aW9uIGZyb20gdHlwb2lkIHRvIEpTT04sIG9yIEludmFsaWRP aWQgaWYKKyAqIHRoZXJlIGlzIG5vIHN1Y2ggY2FzdC4gIEFzIGEgbWF0dGVyIG9mIHBvbGljeSwg d2Ugb25seSBjb25zaWRlciBleHBsaWNpdCwKKyAqIHVzZXItZGVmaW5lZCBjYXN0cy4KKyAqLwor c3RhdGljIE9pZAorZ2V0X2pzb25fY2FzdF9mb3JfdHlwZShPaWQgdHlwb2lkKQoreworCWlmICh0 eXBvaWQgPj0gRmlyc3ROb3JtYWxPYmplY3RJZCkKKwl7CisJCU9pZAkJCWNhc3RmdW5jOworCQlD b2VyY2lvblBhdGhUeXBlIGN0eXBlOworCisJCWN0eXBlID0gZmluZF9jb2VyY2lvbl9wYXRod2F5 KEpTT05PSUQsIHR5cG9pZCwKKwkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsCisJCQkJCQkJ CQkgICZjYXN0ZnVuYyk7CisJCWlmIChjdHlwZSA9PSBDT0VSQ0lPTl9QQVRIX0ZVTkMgJiYgT2lk SXNWYWxpZChjYXN0ZnVuYykpCisJCQlyZXR1cm4gY2FzdGZ1bmM7CisJfQorCXJldHVybiBJbnZh bGlkT2lkOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKaW5kZXggYzYxYjNkNjI0ZDUuLjg2NTBm ZjU3OTUyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTgzMSw3ICs4MzEsNyBAQCB0eXBl ZGVmIHN0cnVjdCBKc29uQ29uc3RydWN0b3JFeHByU3RhdGUKIAlzdHJ1Y3QKIAl7CiAJCWludAkJ CWNhdGVnb3J5OwotCQlPaWQJCQlvdXRmdW5jaWQ7CisJCUZtZ3JJbmZvCW91dGZsaW5mbzsKIAl9 CQkgICAqYXJnX3R5cGVfY2FjaGU7IC8qIGNhY2hlIGZvciBkYXR1bV90b19qc29uW2JdKCkgKi8K IAlpbnQJCQluYXJnczsKIH0gSnNvbkNvbnN0cnVjdG9yRXhwclN0YXRlOwpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvanNvbmZ1bmNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uZnVu Y3MuaAppbmRleCAyNzcxM2JlM2FlYi4uOTY0MDk1NTdmMjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2pzb25mdW5jcy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25mdW5jcy5o CkBAIC04MiwxMyArODIsMTMgQEAgdHlwZWRlZiBlbnVtCiB9IEpzb25UeXBlQ2F0ZWdvcnk7CiAK IGV4dGVybiB2b2lkIGpzb25fY2F0ZWdvcml6ZV90eXBlKE9pZCB0eXBvaWQsIGJvb2wgaXNfanNv bmIsCi0JCQkJCQkJCSBKc29uVHlwZUNhdGVnb3J5ICp0Y2F0ZWdvcnksIE9pZCAqb3V0ZnVuY29p ZCk7Ci1leHRlcm4gdm9pZCBqc29uX2NoZWNrX211dGFiaWxpdHkoT2lkIHR5cG9pZCwgYm9vbCBp c19qc29uYiwKLQkJCQkJCQkJICBib29sICpoYXNfbXV0YWJsZSk7CisJCQkJCQkJCSBKc29uVHlw ZUNhdGVnb3J5ICp0Y2F0ZWdvcnksCisJCQkJCQkJCSBGbWdySW5mbyAqb3V0ZmxpbmZvKTsKK2V4 dGVybiB2b2lkIGpzb25fY2hlY2tfbXV0YWJpbGl0eShPaWQgdHlwb2lkLCBib29sICpoYXNfbXV0 YWJsZSk7CiBleHRlcm4gRGF0dW0gZGF0dW1fdG9fanNvbihEYXR1bSB2YWwsIEpzb25UeXBlQ2F0 ZWdvcnkgdGNhdGVnb3J5LAotCQkJCQkJICAgT2lkIG91dGZ1bmNvaWQpOworCQkJCQkJICAgRm1n ckluZm8gKm91dGZsaW5mbyk7CiBleHRlcm4gRGF0dW0gZGF0dW1fdG9fanNvbmIoRGF0dW0gdmFs LCBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwKLQkJCQkJCQlPaWQgb3V0ZnVuY29pZCk7CisJ CQkJCQkJRm1nckluZm8gKm91dGZsaW5mbyk7CiBleHRlcm4gRGF0dW0ganNvbmJfZnJvbV90ZXh0 KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKTsKIAogZXh0ZXJuIERhdHVtIGpzb25fcG9wdWxh dGVfdHlwZShEYXR1bSBqc29uX3ZhbCwgT2lkIGpzb25fdHlwZSwKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3FsanNvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3NxbGpzb24ub3V0CmluZGV4IDBmMzM3YmRhMzI1Li5mZWRiZWNhN2EyMSAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zcWxqc29uLm91dAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3NxbGpzb24ub3V0CkBAIC0xNzU3LDMgKzE3NTcsNyBAQCBTRUxFQ1Qg SlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVEFHRygnYic6IDEgUkVUVVJOSU5HIHRleHQpIEZP Uk1BVCBKU09OKTsKICgxIHJvdykKIAogRFJPUCBGVU5DVElPTiB2b2xhdGlsZV9vbmUsIHN0YWJs ZV9vbmU7CistLSBKU09OX0FSUkFZKFJPVyguLi4pKSBpcyBub3QgaW1tdXRhYmxlLCBzbyBpdCBz aG91bGQgYmUgaW1wb3NzaWJsZSB0bworLS0gY3JlYXRlIGEgZ2VuZXJhdGVkIGNvbHVtbi4KKy0t IFhYWDogQ3VycmVudGx5LCB0aGlzIGlzIGVycm9uZW91c2x5IGFsbG93ZWQuCitDUkVBVEUgVEFC TEUganNvbl9hcnJheV9vZl9yb3cgKGEgaW50LCBqIGpzb24gR0VORVJBVEVEIEFMV0FZUyBBUyAo SlNPTl9BUlJBWShST1coYSkpKSBTVE9SRUQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc3FsanNvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zcWxqc29uLnNxbAppbmRl eCBhNjg3NDc3MzNhMS4uNzc5MTAxMzc1NzMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3NxbGpzb24uc3FsCkBA IC03MDYsMyArNzA2LDggQEAgU0VMRUNUIEpTT05fT0JKRUNUKCdhJzogSlNPTl9PQkpFQ1RBR0co J2InOiBzdGFibGVfb25lKCkgUkVUVVJOSU5HIHRleHQpIEZPUk1BVAogRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKSBTRUxFQ1QgSlNPTl9PQkpFQ1QoJ2EnOiBKU09OX09CSkVDVEFHRygnYic6 IDEgUkVUVVJOSU5HIHRleHQpIEZPUk1BVCBKU09OKTsKIFNFTEVDVCBKU09OX09CSkVDVCgnYSc6 IEpTT05fT0JKRUNUQUdHKCdiJzogMSBSRVRVUk5JTkcgdGV4dCkgRk9STUFUIEpTT04pOwogRFJP UCBGVU5DVElPTiB2b2xhdGlsZV9vbmUsIHN0YWJsZV9vbmU7CisKKy0tIEpTT05fQVJSQVkoUk9X KC4uLikpIGlzIG5vdCBpbW11dGFibGUsIHNvIGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlIHRvCist LSBjcmVhdGUgYSBnZW5lcmF0ZWQgY29sdW1uLgorLS0gWFhYOiBDdXJyZW50bHksIHRoaXMgaXMg ZXJyb25lb3VzbHkgYWxsb3dlZC4KK0NSRUFURSBUQUJMRSBqc29uX2FycmF5X29mX3JvdyAoYSBp bnQsIGoganNvbiBHRU5FUkFURUQgQUxXQVlTIEFTIChKU09OX0FSUkFZKFJPVyhhKSkpIFNUT1JF RCk7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --0000000000000cfb1a0655a342ab--