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 1vzRcD-0010jO-2N for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 03:49:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzRcC-00DSAX-0O for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 03:49:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzRcB-00DSAO-2J for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 03:49:08 +0000 Received: from mail-vs1-xe2c.google.com ([2607:f8b0:4864:20::e2c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzRc9-00000001jUq-1qTg for pgsql-hackers@postgresql.org; Mon, 09 Mar 2026 03:49:07 +0000 Received: by mail-vs1-xe2c.google.com with SMTP id ada2fe7eead31-5ffa0b23a60so1871849137.0 for ; Sun, 08 Mar 2026 20:49:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773028143; cv=none; d=google.com; s=arc-20240605; b=fp1T1QAheWpOllJC7rk6AAkSdYVs5YuUtUUZ3lLaXjPCxNCTJ9NpSv9+9LJNMxxzZx PRy4eOPGcDy6b6E/mt2sJ3E3f6XvEk2LshNdxQyx2qZL0BIFN8IY3hsjhCr8ediTGlgR kcUkAahMVajBEJjpXZt96uFm71HiTowVH+94yfI2AyZE+W+vvebFH2URn/YdvephONps YDIzscoRG2eUStjWPFbzX8qYzJ2ZoRwUry8t3/2UAKTKOCLmqUJSW8e88K0ysvtSOym8 2SlSmBRy7NToQ8YBxE6JvtqS+8KpNbZWh9kF9h9/879yDBvENR6EWfu8iFDB8c73uCeN pMuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=3+fQ9PNGRMn8AOmsNP6av+fhsIEs85BZ5t7crdGv0o4=; fh=nVsIcma9Zx11yMuJvamQ6vd4+o9QOrSOZaOvG3B2QXU=; b=GKbVkbaa9gZC9kkZtdKWQ70RvqTZARMY0a2m4rHPZvU2QJ8HM70nT1+9aqPFI/jHkq 8/6J4XPMm7kLgCnTw2N/NbZK2ztIWsIEbC26H6mB6CYj9jFCTilpUWnk8Qa9F9colVWj H6NoFn/APoR+zPkoiEBqZLpUo6BuQAAdf1MP1TM6xR+TC9iiBpDWzAWdA+YXxGBJl1ZJ NAUhpvBFsN3RqwfwmbO7tWILPYuNpmrqDAgM8zlpg0rzb77ihStzWsgHAYgVCGT9ANxQ bHn+OC0i0tG1KtlLLsrHPStnCThK6PPsAeasKB2tpMLcS8p3LSAE+BXdSXPciOEoxr/q dGJg==; 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=20230601; t=1773028143; x=1773632943; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3+fQ9PNGRMn8AOmsNP6av+fhsIEs85BZ5t7crdGv0o4=; b=LQwQfUH+Yd9juPpJat2DwK7MfXqoAtYuHMOJg1zb5qxuK/T3VMPIfUuxCgWtr+49dA S6jiIwLApLf8qRpFJ+ltADFGHTLTvDlO0McCK1g39t9rm4a5fsVxqRKuvPiIY4lm2n4w 6DAaJ32ucwFiLORDCfkUIRnecQJDmoSq+9rnMvpDALEQlohDjhxcbngI7tmGsdwtMgEF BnQiyd9I8dxfioIgrcdi1V4iCAvkUvB6JmHd76fDf++1B5tcYFOB+8RCEIHKgOGqVpZd +Tp/RRtuuZx8jHDDUIpwDQpWpk8PWej53+0AadU508CFebEmbijnyGjZpgNQGM3Tz706 SFPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773028143; x=1773632943; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=3+fQ9PNGRMn8AOmsNP6av+fhsIEs85BZ5t7crdGv0o4=; b=vC+ONcXbvEGWdH3/6M4R+PoWmryCDoG/iQEGteRTlm/JJzYv9ijb82x5V/N92laakI Kt7gc8HteOtP5NpVtFzWB3Ik2bkPuUiFUBmXJpXyi6wqzS3aMhU5dooA/ujcTn7rxzQE 6kByctXYJ5ar3bxtyFOVuXZ43oedds44wYgZvhiM6ZkBQslJGcXKZJLpnOwuvCir7CF9 0PpMkstxgwtHz7yGitLf+lTZFhGBQs93tNWqBau7ZieHeXim1Owt9zBERV7WGIsKPFeC xt3Z83nqKQkUcI4koWH9nn7prjsCeEIkY6ayS9wenqZay1gnPRNyvb5iJ/wr43uvDYMI wdug== X-Forwarded-Encrypted: i=1; AJvYcCX/AyVH0HT+ptP3YL+2xyjtOQEBlAkuBLJMdG6aaXTIFVedubhomj+uVwcbpw8CzRh957Izp0krya0jqDZ0@postgresql.org X-Gm-Message-State: AOJu0YzOgjmfnQCrqXKeuPAWuaSCmaSOPSt9tWeS0KdPVSVM9nYkHIrz WQ9BuT4gb6y7YqIN2XOgxpV5nJTiwxMQ27V6eRmyLTVAVJaJMP5Fjf7CWWPTJKJszukRUYud8j9 hpX3ZRNcdp4PdqjIcuk/81cekELFKvwo= X-Gm-Gg: ATEYQzzAS51lA5VZAighbv1ORkr6iZ4h5xtp/5feBj4xjTdANc8xgBS8NpVGTDcMyQn jtJHTj4UJYnyV/lyCln+BSIFDVIiVUiMjRXTQ6U+rtjW8yhm5R4Tz6sdIggGskd3yrcePXtG5N+ iIhGU+z5R/nsUouSCtXmmm/ozyQcheNl/mNlx62DZUKaSmfOTnAlASJyY30Cr5aPdNNr0ZO9Kth ULwhNpJAUhpm2Vda1UqKuPS7zThdlWiaNvhfcpVjUeJZuxJdDceo0ygViJoNPJTIaM01lGoyMA/ plw1y3eR0MqIlNrX6uSBt0ZidVx6sfHlxPYnnWwGuqKBD5no48PzqBL7/jqtl8kXBF2IyEFfgr0 P/imJs8qxG2uTHMLok44y9eYfyZ+cHSk2sLAkZ6JhSbpWZmLlE0/IHICC4ni1kwfg1jqCP3DmRo EdtEfcwkwxoJnUteMQeQPFmg== X-Received: by 2002:a05:6102:b16:b0:600:a2:138d with SMTP id ada2fe7eead31-60000a2334emr1754651137.19.1773028143551; Sun, 08 Mar 2026 20:49:03 -0700 (PDT) MIME-Version: 1.0 References: <74d3b4e2-d201-489d-9b9a-1a6d0eb492a6@dunslane.net> <6cbbf7f3-da4a-4201-98a6-4347a3c35db0@joeconway.com> <8154f8e2-7d9c-442f-a7cb-a5caf38f6a12@dunslane.net> <57db4b6e-51ba-4984-9343-bc62a3ee0b7c@dunslane.net> In-Reply-To: From: jian he Date: Mon, 9 Mar 2026 11:48:26 +0800 X-Gm-Features: AaiRm53eHZjc3YEdRVM6c3z4idJt2YY8IIPk_cx3GNCZfJ3rcnC9Q3lVoykM3mQ Message-ID: Subject: Re: Emitting JSON to file using COPY TO To: Andrew Dunstan Cc: Joe Conway , Junwang Zhao , Florents Tselai , "Andrey M. Borodin" , Dean Rasheed , Daniel Verite , Davin Shearer , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000ac7966064c8f482d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ac7966064c8f482d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 9, 2026 at 3:44=E2=80=AFAM Andrew Dunstan = wrote: > > Hmm. But should we be scribbling on slot->tts_tupleDescriptor like that? > How about something like this?: > > - * Full table or query without column list. Ensure the slot uses > - * cstate->tupDesc so that the datum is stamped with the right ty= pe; > - * for queries output type is RECORDOID this must be the blessed > - * descriptor so that composite_to_json can look it up via > - * lookup_rowtype_tupdesc. > + * Full table or query without column list. For queries, the slo= t's > + * TupleDesc may carry RECORDOID, which is not registered in the > type > + * cache and would cause composite_to_json's lookup_rowtype_tupde= sc > + * call to fail. Build a HeapTuple stamped with the blessed > + * descriptor so the type can be looked up correctly. > */ > if (!cstate->rel && slot->tts_tupleDescriptor->tdtypeid =3D=3D > RECORDOID) > - slot->tts_tupleDescriptor =3D cstate->queryDesc->tupDesc; > + { > + HeapTuple tup; > > - rowdata =3D ExecFetchSlotHeapTupleDatum(slot); > + tup =3D heap_form_tuple(cstate->tupDesc, > + slot->tts_values, > + slot->tts_isnull); > + rowdata =3D HeapTupleGetDatum(tup); > + } > + else > + { > + rowdata =3D ExecFetchSlotHeapTupleDatum(slot); > + } > This is better. I've tried to get rid of json_projvalues and json_projnulls= . Just using heap_form_tuple, but it won't work. I incorporated the v28-0004 COPY column list into v9-0002. With this patch set, we added four fields to the struct CopyToStateData. + StringInfo json_buf; /* reusable buffer for JSON output, + * initialized in BeginCopyTo */ + TupleDesc tupDesc; /* Descriptor for JSON output; for a colu= mn + * list this is a projected descriptor */ + Datum *json_projvalues; /* pre-allocated projection values, o= r + * NULL */ + bool *json_projnulls; /* pre-allocated projection nulls, or NULL= */ Using the script in https://www.postgresql.org/message-id/CACJufxFFZqxC3p4WjpTEi4riaJm%3DpADX%2= Bpy0yQ0%3DRWTn5cqK3Q%40mail.gmail.com I tested it again on macOS and Linux, and there are no regressions for COPY TO with the TEXT and CSV formats. -- jian https://www.enterprisedb.com/ --000000000000ac7966064c8f482d Content-Type: text/x-patch; charset="US-ASCII"; name="v29-0002-json-format-for-COPY-TO.patch" Content-Disposition: attachment; filename="v29-0002-json-format-for-COPY-TO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmin4mak1 RnJvbSBlOWZkZmFlMmYwODI5YjJhZjJlNWVlNDA0NzIzMGVjMTI0YmQ3MmI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgOSBNYXIgMjAyNiAxMDoyMTozMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjI5 IDIvM10ganNvbiBmb3JtYXQgZm9yIENPUFkgVE8KClRoaXMgaW50cm9kdWNlcyB0aGUgSlNPTiBm b3JtYXQgb3B0aW9uIGZvciB0aGUgQ09QWSBUTyBjb21tYW5kLCBhbGxvd2luZyB1c2Vycwp0byBl eHBvcnQgcXVlcnkgcmVzdWx0cyBvciB0YWJsZSBkYXRhIGRpcmVjdGx5IGFzIGEgc2luZ2xlIEpT T04gb2JqZWN0IG9yIGEKc3RyZWFtIG9mIEpTT04gb2JqZWN0cy4KClRoZSBKU09OIGZvcm1hdCBp cyBjdXJyZW50bHkgc3VwcG9ydGVkIG9ubHkgZm9yIENPUFkgVE8gb3BlcmF0aW9uczsgaXQKaXMg bm90IGF2YWlsYWJsZSBmb3IgQ09QWSBGUk9NLgoKSlNPTiBmb3JtYXQgaXMgaW5jb21wYXRpYmxl IHdpdGggc29tZSBzdGFuZGFyZCB0ZXh0L0NTViBwYXJzaW5nIG9yIGZvcm1hdHRpbmcgb3B0aW9u cywKaW5jbHVkaW5nOgotIEhFQURFUgotIERFRkFVTFQKLSBOVUxMCi0gREVMSU1JVEVSCi0gRk9S Q0UgUVVPVEUgLyBGT1JDRSBOT1QgTlVMTAoKUmVncmVzc2lvbiB0ZXN0cyBjb3ZlcmluZyB2YWxp ZCBKU09OIGV4cG9ydHMgYW5kIGVycm9yIGhhbmRsaW5nIGZvcgppbmNvbXBhdGlibGUgb3B0aW9u cyBoYXZlIGJlZW4gYWRkZWQgdG8gc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwuCgpBdXRo b3I6IEpvZSBDb253YXkgPG1haWxAam9lY29ud2F5LmNvbT4KQXV0aG9yOiBqaWFuIGhlIDxqaWFu LnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+CkF1dGhvcjogQW5kcmV3IER1bnN0YW4gPGFuZHJld0Bk dW5zbGFuZS5uZXQ+LApSZXZpZXdlZC1ieTogIkFuZHJleSBNLiBCb3JvZGluIiA8eDRtbW1AeWFu ZGV4LXRlYW0ucnU+LApSZXZpZXdlZC1ieTogRGVhbiBSYXNoZWVkIDxkZWFuLmEucmFzaGVlZEBn bWFpbC5jb20+LApSZXZpZXdlZC1ieTogRGFuaWVsIFZlcml0ZSA8ZGFuaWVsQG1hbml0b3UtbWFp bC5vcmc+LApSZXZpZXdlZC1ieTogRGF2aW4gU2hlYXJlciA8ZGF2aW5AYXBhY2hlLm9yZz4sClJl dmlld2VkLWJ5OiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNvbT4sClJldmll d2VkLWJ5OiBBbHZhcm8gSGVycmVyYSA8YWx2aGVycmVAYWx2aC5uby1pcC5vcmc+ClJldmlld2Vk LWJ5OiBKdW53YW5nIFpoYW8gPHpoandwa3VAZ21haWwuY29tPgoKZGlzY3Vzc2lvbjogaHR0cHM6 Ly9wb3N0Z3IuZXMvbS9DQUx2ZlVrQnhUWXk1dVdQRlZ3cGtfN2lpMnpnVDA3dDNkLXlSX2N5NHNm cnJMVSUzRGtjZyU0MG1haWwuZ21haWwuY29tCmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vNmEwNDYyOGQtMGQ1My00MWQ5LTllMzUtNWE4ZGMzMDJjMzRjQGpvZWNvbndheS5jb20KLS0t CiBkb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCAgICAgICAgIHwgIDEzICsrLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvY29weS5jICAgICAgICB8ICA0OSArKysrKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvcHl0by5jICAgICAgfCAxNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0K IHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgfCAgIDggKysKIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uLmMgICAgICAgfCAgIDUgKy0KIHNyYy9iaW4vcHNxbC90YWItY29tcGxl dGUuaW4uYyAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2NvcHkuaCAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oICAgICAgICAgICB8ICAgMiArCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0IHwgMTQ2ICsrKysrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNxbCAgICAgIHwgIDg4ICsrKysrKysr KysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDQ0NCBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sCmluZGV4IDBhZDg5MGVmOTVmLi43NWY1NWJiZjZmOCAxMDA2NDQK LS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9j b3B5LnNnbWwKQEAgLTIyOCwxMCArMjI4LDE1IEBAIENPUFkgeyA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFibGUKICAg ICAgIFNlbGVjdHMgdGhlIGRhdGEgZm9ybWF0IHRvIGJlIHJlYWQgb3Igd3JpdHRlbjoKICAgICAg IDxsaXRlcmFsPnRleHQ8L2xpdGVyYWw+LAogICAgICAgPGxpdGVyYWw+Y3N2PC9saXRlcmFsPiAo Q29tbWEgU2VwYXJhdGVkIFZhbHVlcyksCisgICAgICA8bGl0ZXJhbD5qc29uPC9saXRlcmFsPiAo SmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pLAogICAgICAgb3IgPGxpdGVyYWw+YmluYXJ5PC9s aXRlcmFsPi4KICAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPnRleHQ8L2xpdGVyYWw+Lgog ICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNxbC1jb3B5LWZpbGUtZm9ybWF0cyIvPiBiZWxvdyBm b3IgZGV0YWlscy4KICAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSA8bGl0ZXJh bD5qc29uPC9saXRlcmFsPiBvcHRpb24gaXMgYWxsb3dlZCBvbmx5IGluCisgICAgICA8Y29tbWFu ZD5DT1BZIFRPPC9jb21tYW5kPi4KKyAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8 L3Zhcmxpc3RlbnRyeT4KIApAQCAtMjY2LDcgKzI3MSw3IEBAIENPUFkgeyA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKCA8cmVwbGFjZWFi bGUKICAgICAgIChsaW5lKSBvZiB0aGUgZmlsZS4gIFRoZSBkZWZhdWx0IGlzIGEgdGFiIGNoYXJh Y3RlciBpbiB0ZXh0IGZvcm1hdCwKICAgICAgIGEgY29tbWEgaW4gPGxpdGVyYWw+Q1NWPC9saXRl cmFsPiBmb3JtYXQuCiAgICAgICBUaGlzIG11c3QgYmUgYSBzaW5nbGUgb25lLWJ5dGUgY2hhcmFj dGVyLgotICAgICAgVGhpcyBvcHRpb24gaXMgbm90IGFsbG93ZWQgd2hlbiB1c2luZyA8bGl0ZXJh bD5iaW5hcnk8L2xpdGVyYWw+IGZvcm1hdC4KKyAgICAgIFRoaXMgb3B0aW9uIGlzIG5vdCBhbGxv d2VkIHdoZW4gdXNpbmcgPGxpdGVyYWw+YmluYXJ5PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5qc29u PC9saXRlcmFsPiBmb3JtYXQuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92 YXJsaXN0ZW50cnk+CkBAIC0yODAsNyArMjg1LDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQog ICAgICAgc3RyaW5nIGluIDxsaXRlcmFsPkNTVjwvbGl0ZXJhbD4gZm9ybWF0LiBZb3UgbWlnaHQg cHJlZmVyIGFuCiAgICAgICBlbXB0eSBzdHJpbmcgZXZlbiBpbiB0ZXh0IGZvcm1hdCBmb3IgY2Fz ZXMgd2hlcmUgeW91IGRvbid0IHdhbnQgdG8KICAgICAgIGRpc3Rpbmd1aXNoIG51bGxzIGZyb20g ZW1wdHkgc3RyaW5ncy4KLSAgICAgIFRoaXMgb3B0aW9uIGlzIG5vdCBhbGxvd2VkIHdoZW4gdXNp bmcgPGxpdGVyYWw+YmluYXJ5PC9saXRlcmFsPiBmb3JtYXQuCisgICAgICBUaGlzIG9wdGlvbiBp cyBub3QgYWxsb3dlZCB3aGVuIHVzaW5nIDxsaXRlcmFsPmJpbmFyeTwvbGl0ZXJhbD4gb3IgPGxp dGVyYWw+anNvbjwvbGl0ZXJhbD4gZm9ybWF0LgogICAgICA8L3BhcmE+CiAKICAgICAgPG5vdGU+ CkBAIC0zMDMsNyArMzA4LDcgQEAgQ09QWSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAoIDxyZXBsYWNlYWJsZQogICAgICAgaXMgZm91 bmQgaW4gdGhlIGlucHV0IGZpbGUsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjb3JyZXNwb25k aW5nIGNvbHVtbgogICAgICAgd2lsbCBiZSB1c2VkLgogICAgICAgVGhpcyBvcHRpb24gaXMgYWxs b3dlZCBvbmx5IGluIDxjb21tYW5kPkNPUFkgRlJPTTwvY29tbWFuZD4sIGFuZCBvbmx5IHdoZW4K LSAgICAgIG5vdCB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IGZvcm1hdC4KKyAgICAg IG5vdCB1c2luZyA8bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPmpzb248L2xp dGVyYWw+IGZvcm1hdC4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxp c3RlbnRyeT4KQEAgLTMzMCw3ICszMzUsNyBAQCBDT1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAg ICA8Y29tbWFuZD5DT1BZIEZST008L2NvbW1hbmQ+IGNvbW1hbmRzLgogICAgICA8L3BhcmE+CiAg ICAgIDxwYXJhPgotICAgICAgVGhpcyBvcHRpb24gaXMgbm90IGFsbG93ZWQgd2hlbiB1c2luZyA8 bGl0ZXJhbD5iaW5hcnk8L2xpdGVyYWw+IGZvcm1hdC4KKyAgICAgIFRoaXMgb3B0aW9uIGlzIG5v dCBhbGxvd2VkIHdoZW4gdXNpbmcgPGxpdGVyYWw+YmluYXJ5PC9saXRlcmFsPiBvciA8bGl0ZXJh bD5qc29uPC9saXRlcmFsPiBmb3JtYXQuCiAgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgog ICAgPC92YXJsaXN0ZW50cnk+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKaW5kZXggMmY0NmJlNTE2ZjIuLjI5YzEy MWM3ZjA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jCkBAIC01OTcsNiArNTk3LDggQEAgUHJvY2Vzc0NvcHlP cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlvcHRzX291dC0+Zm9ybWF0ID0gQ09QWV9G T1JNQVRfQ1NWOwogCQkJZWxzZSBpZiAoc3RyY21wKGZtdCwgImJpbmFyeSIpID09IDApCiAJCQkJ b3B0c19vdXQtPmZvcm1hdCA9IENPUFlfRk9STUFUX0JJTkFSWTsKKwkJCWVsc2UgaWYgKHN0cmNt cChmbXQsICJqc29uIikgPT0gMCkKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID0gQ09QWV9GT1JNQVRf SlNPTjsKIAkJCWVsc2UKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC03NTYsMjEgKzc1OCwzMiBAQCBQcm9jZXNz Q29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCSAqIENoZWNrIGZvciBpbmNvbXBhdGli bGUgb3B0aW9ucyAobXVzdCBkbyB0aGVzZSB0aHJlZSBiZWZvcmUgaW5zZXJ0aW5nCiAJICogZGVm YXVsdHMpCiAJICovCi0JaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZ ICYmIG9wdHNfb3V0LT5kZWxpbSkKKwlpZiAob3B0c19vdXQtPmRlbGltICYmCisJCShvcHRzX291 dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSB8fAorCQkgb3B0c19vdXQtPmZvcm1hdCA9 PSBDT1BZX0ZPUk1BVF9KU09OKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJD T0RFX1NZTlRBWF9FUlJPUiksCi0JCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBh IENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCi0JCQkJIGVycm1zZygiY2Fubm90IHNwZWNp ZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiREVMSU1JVEVSIikpKTsKKwkJCQllcnJjb2RlKEVSUkNP REVfU1lOVEFYX0VSUk9SKSwKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJ TkFSWQorCQkJCT8gZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJE RUxJTUlURVIiKQorCQkJCTogZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBKU09OIG1vZGUi LCAiREVMSU1JVEVSIikpOwogCi0JaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRf QklOQVJZICYmIG9wdHNfb3V0LT5udWxsX3ByaW50KQorCWlmIChvcHRzX291dC0+bnVsbF9wcmlu dCAmJgorCQkob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgfHwKKwkJIG9w dHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfSlNPTikpCiAJCWVyZXBvcnQoRVJST1IsCi0J CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAotCQkJCSBlcnJtc2coImNhbm5vdCBz cGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIk5VTEwiKSkpOworCQkJCWVycmNvZGUoRVJSQ09E RV9TWU5UQVhfRVJST1IpLAorCQkJCW9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklO QVJZCisJCQkJPyBlcnJtc2coImNhbm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIk5V TEwiKQorCQkJCTogZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBKU09OIG1vZGUiLCAiTlVM TCIpKTsKIAotCWlmIChvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBv cHRzX291dC0+ZGVmYXVsdF9wcmludCkKKwlpZiAob3B0c19vdXQtPmRlZmF1bHRfcHJpbnQgJiYK KwkJKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZIHx8CisJCSBvcHRzX291 dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0pTT04pKQogCQllcmVwb3J0KEVSUk9SLAotCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKLQkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lm eSAlcyBpbiBCSU5BUlkgbW9kZSIsICJERUZBVUxUIikpKTsKKwkJCQllcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFS WQorCQkJCT8gZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJERUZB VUxUIikKKwkJCQk6IGVycm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gSlNPTiBtb2RlIiwgIkRF RkFVTFQiKSk7CiAKIAkvKiBTZXQgZGVmYXVsdHMgZm9yIG9taXR0ZWQgb3B0aW9ucyAqLwogCWlm ICghb3B0c19vdXQtPmRlbGltKQpAQCAtODM2LDExICs4NDksMTUgQEAgUHJvY2Vzc0NvcHlPcHRp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkgZXJybXNnKCJDT1BZIGRlbGltaXRlciBjYW5u b3QgYmUgXCIlc1wiIiwgb3B0c19vdXQtPmRlbGltKSkpOwogCiAJLyogQ2hlY2sgaGVhZGVyICov Ci0JaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZICYmIG9wdHNfb3V0 LT5oZWFkZXJfbGluZSAhPSBDT1BZX0hFQURFUl9GQUxTRSkKKwlpZiAob3B0c19vdXQtPmhlYWRl cl9saW5lICE9IENPUFlfSEVBREVSX0ZBTFNFICYmCisJCShvcHRzX291dC0+Zm9ybWF0ID09IENP UFlfRk9STUFUX0JJTkFSWSB8fAorCQkgb3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9K U09OKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcu IE9OX0VSUk9SICovCi0JCQkJIGVycm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1v ZGUiLCAiSEVBREVSIikpKTsKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJ TkFSWQorCQkJCT8gZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJI RUFERVIiKQorCQkJCTogZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAlcyBpbiBKU09OIG1vZGUiLCAi SEVBREVSIikpOwogCiAJLyogQ2hlY2sgcXVvdGUgKi8KIAlpZiAob3B0c19vdXQtPmZvcm1hdCAh PSBDT1BZX0ZPUk1BVF9DU1YgJiYgb3B0c19vdXQtPnF1b3RlICE9IE5VTEwpCkBAIC05NDQsNiAr OTYxLDEyIEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJIGVy cm1zZygiQ09QWSAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiwgIkZSRUVaRSIsCiAJCQkJCQki Q09QWSBUTyIpKSk7CiAKKwkvKiBDaGVjayBqc29uIGZvcm1hdCAqLworCWlmIChvcHRzX291dC0+ Zm9ybWF0ID09IENPUFlfRk9STUFUX0pTT04gJiYgaXNfZnJvbSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1z ZygiQ09QWSAlcyBtb2RlIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLCAiSlNPTiIsICJDT1BZIEZS T00iKSk7CisKIAlpZiAob3B0c19vdXQtPmRlZmF1bHRfcHJpbnQpCiAJewogCQlpZiAoIWlzX2Zy b20pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2NvcHl0by5jCmluZGV4IGIwZWU5MWZjOWMxLi45ZDhkODMxODk1NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weXRvLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9l eGVjZGVzYy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvdHVwdGFibGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibGlicHEv bGlicHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1iL3BnX3dj aGFyLmgiCkBAIC0zMyw2ICszNCw3IEBACiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGls cy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTg1LDYgKzg3LDEzIEBAIHR5 cGVkZWYgc3RydWN0IENvcHlUb1N0YXRlRGF0YQogCUxpc3QJICAgKmF0dG51bWxpc3Q7CQkvKiBp bnRlZ2VyIGxpc3Qgb2YgYXR0bnVtcyB0byBjb3B5ICovCiAJY2hhcgkgICAqZmlsZW5hbWU7CQkv KiBmaWxlbmFtZSwgb3IgTlVMTCBmb3IgU1RET1VUICovCiAJYm9vbAkJaXNfcHJvZ3JhbTsJCS8q IGlzICdmaWxlbmFtZScgYSBwcm9ncmFtIHRvIHBvcGVuPyAqLworCVN0cmluZ0luZm8JanNvbl9i dWY7CQkvKiByZXVzYWJsZSBidWZmZXIgZm9yIEpTT04gb3V0cHV0LAorCQkJCQkJCQkgKiBpbml0 aWFsaXplZCBpbiBCZWdpbkNvcHlUbyAqLworCVR1cGxlRGVzYwl0dXBEZXNjOwkJLyogRGVzY3Jp cHRvciBmb3IgSlNPTiBvdXRwdXQ7IGZvciBhIGNvbHVtbgorCQkJCQkJCQkgKiBsaXN0IHRoaXMg aXMgYSBwcm9qZWN0ZWQgZGVzY3JpcHRvciAqLworCURhdHVtCSAgICpqc29uX3Byb2p2YWx1ZXM7 CS8qIHByZS1hbGxvY2F0ZWQgcHJvamVjdGlvbiB2YWx1ZXMsIG9yCisJCQkJCQkJCQkgKiBOVUxM ICovCisJYm9vbAkgICAqanNvbl9wcm9qbnVsbHM7IC8qIHByZS1hbGxvY2F0ZWQgcHJvamVjdGlv biBudWxscywgb3IgTlVMTCAqLwogCWNvcHlfZGF0YV9kZXN0X2NiIGRhdGFfZGVzdF9jYjsgLyog ZnVuY3Rpb24gZm9yIHdyaXRpbmcgZGF0YSAqLwogCiAJQ29weUZvcm1hdE9wdGlvbnMgb3B0czsK QEAgLTEzMSw2ICsxNDAsNyBAQCBzdGF0aWMgdm9pZCBDb3B5VG9DU1ZPbmVSb3coQ29weVRvU3Rh dGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBzdGF0aWMgdm9pZCBDb3B5VG9UZXh0 TGlrZU9uZVJvdyhDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJ CQkJCQkgYm9vbCBpc19jc3YpOwogc3RhdGljIHZvaWQgQ29weVRvVGV4dExpa2VFbmQoQ29weVRv U3RhdGUgY3N0YXRlKTsKK3N0YXRpYyB2b2lkIENvcHlUb0pzb25PbmVSb3coQ29weVRvU3RhdGUg Y3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBzdGF0aWMgdm9pZCBDb3B5VG9CaW5hcnlT dGFydChDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlRGVzYyB0dXBEZXNjKTsKIHN0YXRpYyB2b2lk IENvcHlUb0JpbmFyeU91dEZ1bmMoQ29weVRvU3RhdGUgY3N0YXRlLCBPaWQgYXR0dHlwaWQsIEZt Z3JJbmZvICpmaW5mbyk7CiBzdGF0aWMgdm9pZCBDb3B5VG9CaW5hcnlPbmVSb3coQ29weVRvU3Rh dGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CkBAIC0xNDksOSArMTU5LDYgQEAgc3Rh dGljIHZvaWQgQ29weVNlbmRJbnQxNihDb3B5VG9TdGF0ZSBjc3RhdGUsIGludDE2IHZhbCk7CiAK IC8qCiAgKiBDT1BZIFRPIHJvdXRpbmVzIGZvciBidWlsdC1pbiBmb3JtYXRzLgotICoKLSAqIENT ViBhbmQgdGV4dCBmb3JtYXRzIHNoYXJlIHRoZSBzYW1lIFRleHRMaWtlIHJvdXRpbmVzIGV4Y2Vw dCBmb3IgdGhlCi0gKiBvbmUtcm93IGNhbGxiYWNrLgogICovCiAKIC8qIHRleHQgZm9ybWF0ICov CkBAIC0xNzAsNiArMTc3LDE0IEBAIHN0YXRpYyBjb25zdCBDb3B5VG9Sb3V0aW5lIENvcHlUb1Jv dXRpbmVDU1YgPSB7CiAJLkNvcHlUb0VuZCA9IENvcHlUb1RleHRMaWtlRW5kLAogfTsKIAorLyog anNvbiBmb3JtYXQgKi8KK3N0YXRpYyBjb25zdCBDb3B5VG9Sb3V0aW5lIENvcHlUb1JvdXRpbmVK c29uID0geworCS5Db3B5VG9TdGFydCA9IENvcHlUb1RleHRMaWtlU3RhcnQsCisJLkNvcHlUb091 dEZ1bmMgPSBDb3B5VG9UZXh0TGlrZU91dEZ1bmMsCisJLkNvcHlUb09uZVJvdyA9IENvcHlUb0pz b25PbmVSb3csCisJLkNvcHlUb0VuZCA9IENvcHlUb1RleHRMaWtlRW5kLAorfTsKKwogLyogYmlu YXJ5IGZvcm1hdCAqLwogc3RhdGljIGNvbnN0IENvcHlUb1JvdXRpbmUgQ29weVRvUm91dGluZUJp bmFyeSA9IHsKIAkuQ29weVRvU3RhcnQgPSBDb3B5VG9CaW5hcnlTdGFydCwKQEAgLTE4NiwxMiAr MjAxLDE0IEBAIENvcHlUb0dldFJvdXRpbmUoY29uc3QgQ29weUZvcm1hdE9wdGlvbnMgKm9wdHMp CiAJCXJldHVybiAmQ29weVRvUm91dGluZUNTVjsKIAllbHNlIGlmIChvcHRzLT5mb3JtYXQgPT0g Q09QWV9GT1JNQVRfQklOQVJZKQogCQlyZXR1cm4gJkNvcHlUb1JvdXRpbmVCaW5hcnk7CisJZWxz ZSBpZiAob3B0cy0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0pTT04pCisJCXJldHVybiAmQ29weVRv Um91dGluZUpzb247CiAKIAkvKiBkZWZhdWx0IGlzIHRleHQgKi8KIAlyZXR1cm4gJkNvcHlUb1Jv dXRpbmVUZXh0OwogfQogCi0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhcnQgY2FsbGJhY2sg Zm9yIHRleHQgYW5kIENTViBmb3JtYXRzICovCisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Rh cnQgY2FsbGJhY2sgZm9yIHRleHQsIENTViwgYW5kIGpzb24gZm9ybWF0cyAqLwogc3RhdGljIHZv aWQKIENvcHlUb1RleHRMaWtlU3RhcnQoQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZURlc2MgdHVw RGVzYykKIHsKQEAgLTIxMCw2ICsyMjcsOCBAQCBDb3B5VG9UZXh0TGlrZVN0YXJ0KENvcHlUb1N0 YXRlIGNzdGF0ZSwgVHVwbGVEZXNjIHR1cERlc2MpCiAJCUxpc3RDZWxsICAgKmN1cjsKIAkJYm9v bAkJaGRyX2RlbGltID0gZmFsc2U7CiAKKwkJQXNzZXJ0KGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0g Q09QWV9GT1JNQVRfSlNPTik7CisKIAkJZm9yZWFjaChjdXIsIGNzdGF0ZS0+YXR0bnVtbGlzdCkK IAkJewogCQkJaW50CQkJYXR0bnVtID0gbGZpcnN0X2ludChjdXIpOwpAQCAtMjMyLDcgKzI1MSw3 IEBAIENvcHlUb1RleHRMaWtlU3RhcnQoQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBsZURlc2MgdHVw RGVzYykKIH0KIAogLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBvdXRmdW5jIGNhbGxiYWNr IGZvciB0ZXh0IGFuZCBDU1YgZm9ybWF0cy4gQXNzaWduCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0 aGUgb3V0ZnVuYyBjYWxsYmFjayBmb3IgdGV4dCwgQ1NWLCBhbmQganNvbiBmb3JtYXRzLiBBc3Np Z24KICAqIHRoZSBvdXRwdXQgZnVuY3Rpb24gZGF0YSB0byB0aGUgZ2l2ZW4gKmZpbmZvLgogICov CiBzdGF0aWMgdm9pZApAQCAtMzA1LDEzICszMjQsNzkgQEAgQ29weVRvVGV4dExpa2VPbmVSb3co Q29weVRvU3RhdGUgY3N0YXRlLAogCUNvcHlTZW5kVGV4dExpa2VFbmRPZlJvdyhjc3RhdGUpOwog fQogCi0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZW5kIGNhbGxiYWNrIGZvciB0ZXh0IGFuZCBD U1YgZm9ybWF0cyAqLworLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGVuZCBjYWxsYmFjayBmb3Ig dGV4dCwgQ1NWLCBhbmQganNvbiBmb3JtYXRzICovCiBzdGF0aWMgdm9pZAogQ29weVRvVGV4dExp a2VFbmQoQ29weVRvU3RhdGUgY3N0YXRlKQogewogCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwog fQogCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBwZXItcm93IGNhbGxiYWNrIGZvciBqc29uIGZvcm1h dCAqLworc3RhdGljIHZvaWQKK0NvcHlUb0pzb25PbmVSb3coQ29weVRvU3RhdGUgY3N0YXRlLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlEYXR1bQkJcm93ZGF0YTsKKworCXJlc2V0U3RyaW5n SW5mbyhjc3RhdGUtPmpzb25fYnVmKTsKKworCWlmIChjc3RhdGUtPmpzb25fcHJvanZhbHVlcyAh PSBOVUxMKQorCXsKKwkJLyoKKwkJICogQ29sdW1uIGxpc3QgY2FzZTogcHJvamVjdCBzZWxlY3Rl ZCBjb2x1bW4gdmFsdWVzIGludG8gc2VxdWVudGlhbAorCQkgKiBwb3NpdGlvbnMgbWF0Y2hpbmcg dGhlIGN1c3RvbSBUdXBsZURlc2MsIHRoZW4gZm9ybSBhIG5ldyB0dXBsZS4KKwkJICovCisJCUhl YXBUdXBsZQl0dXA7CisJCWludAkJCWkgPSAwOworCisJCWZvcmVhY2hfaW50KGF0dG51bSwgY3N0 YXRlLT5hdHRudW1saXN0KQorCQl7CisJCQljc3RhdGUtPmpzb25fcHJvanZhbHVlc1tpXSA9IHNs b3QtPnR0c192YWx1ZXNbYXR0bnVtIC0gMV07CisJCQljc3RhdGUtPmpzb25fcHJvam51bGxzW2ld ID0gc2xvdC0+dHRzX2lzbnVsbFthdHRudW0gLSAxXTsKKwkJCWkrKzsKKwkJfQorCisJCXR1cCA9 IGhlYXBfZm9ybV90dXBsZShjc3RhdGUtPnR1cERlc2MsCisJCQkJCQkJICBjc3RhdGUtPmpzb25f cHJvanZhbHVlcywKKwkJCQkJCQkgIGNzdGF0ZS0+anNvbl9wcm9qbnVsbHMpOworCisJCS8qCisJ CSAqIGhlYXBfZm9ybV90dXBsZSBhbHJlYWR5IHN0YW1wcyB0aGUgZGF0dW0tbGVuZ3RoLCB0eXBl LWlkLCBhbmQKKwkJICogdHlwZS1tb2QgZmllbGRzIG9uIHRfZGF0YSwgc28gd2UgY2FuIHVzZSBp dCBkaXJlY3RseSBhcyBhIGNvbXBvc2l0ZQorCQkgKiBEYXR1bSB3aXRob3V0IHRoZSBleHRyYSBw YWxsb2NtZW1jcHkgdGhhdCBoZWFwX2NvcHlfdHVwbGVfYXNfZGF0dW0KKwkJICogd291bGQgZG8u ICBBbnkgVE9BU1QgcG9pbnRlcnMgaW4gdGhlIHByb2plY3RlZCB2YWx1ZXMgd2lsbCBiZQorCQkg KiBkZXRvYXN0ZWQgYnkgdGhlIHBlci1jb2x1bW4gb3V0cHV0IGZ1bmN0aW9ucyBjYWxsZWQgZnJv bQorCQkgKiBjb21wb3NpdGVfdG9fanNvbi4KKwkJICovCisJCXJvd2RhdGEgPSBIZWFwVHVwbGVH ZXREYXR1bSh0dXApOworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGdWxsIHRhYmxlIG9yIHF1 ZXJ5IHdpdGhvdXQgY29sdW1uIGxpc3QuICBGb3IgcXVlcmllcywgdGhlIHNsb3QncworCQkgKiBU dXBsZURlc2MgbWF5IGNhcnJ5IFJFQ09SRE9JRCwgd2hpY2ggaXMgbm90IHJlZ2lzdGVyZWQgaW4g dGhlIHR5cGUKKwkJICogY2FjaGUgYW5kIHdvdWxkIGNhdXNlIGNvbXBvc2l0ZV90b19qc29uJ3Mg bG9va3VwX3Jvd3R5cGVfdHVwZGVzYworCQkgKiBjYWxsIHRvIGZhaWwuICBCdWlsZCBhIEhlYXBU dXBsZSBzdGFtcGVkIHdpdGggdGhlIGJsZXNzZWQKKwkJICogZGVzY3JpcHRvciBzbyB0aGUgdHlw ZSBjYW4gYmUgbG9va2VkIHVwIGNvcnJlY3RseS4KKwkJICovCisJCWlmICghY3N0YXRlLT5yZWwg JiYgc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvci0+dGR0eXBlaWQgPT0gUkVDT1JET0lEKQorCQl7 CisJCQlIZWFwVHVwbGUJdHVwID0gaGVhcF9mb3JtX3R1cGxlKGNzdGF0ZS0+dHVwRGVzYywKKwkJ CQkJCQkJCQkJICBzbG90LT50dHNfdmFsdWVzLAorCQkJCQkJCQkJCQkgIHNsb3QtPnR0c19pc251 bGwpOworCisJCQlyb3dkYXRhID0gSGVhcFR1cGxlR2V0RGF0dW0odHVwKTsKKwkJfQorCQllbHNl CisJCQlyb3dkYXRhID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZURhdHVtKHNsb3QpOworCX0KKwor CWNvbXBvc2l0ZV90b19qc29uKHJvd2RhdGEsIGNzdGF0ZS0+anNvbl9idWYsIGZhbHNlKTsKKwor CUNvcHlTZW5kRGF0YShjc3RhdGUsIGNzdGF0ZS0+anNvbl9idWYtPmRhdGEsIGNzdGF0ZS0+anNv bl9idWYtPmxlbik7CisKKwlDb3B5U2VuZFRleHRMaWtlRW5kT2ZSb3coY3N0YXRlKTsKK30KKwog LyoKICAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFydCBjYWxsYmFjayBmb3IgYmluYXJ5IGZv cm1hdC4gU2VuZCBhIGhlYWRlcgogICogZm9yIGEgYmluYXJ5IGNvcHkuCkBAIC00MDMsOSArNDg4 LDIzIEBAIFNlbmRDb3B5QmVnaW4oQ29weVRvU3RhdGUgY3N0YXRlKQogCiAJcHFfYmVnaW5tZXNz YWdlKCZidWYsIFBxTXNnX0NvcHlPdXRSZXNwb25zZSk7CiAJcHFfc2VuZGJ5dGUoJmJ1ZiwgZm9y bWF0KTsJLyogb3ZlcmFsbCBmb3JtYXQgKi8KLQlwcV9zZW5kaW50MTYoJmJ1ZiwgbmF0dHMpOwot CWZvciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQotCQlwcV9zZW5kaW50MTYoJmJ1ZiwgZm9ybWF0 KTsgLyogcGVyLWNvbHVtbiBmb3JtYXRzICovCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgIT0g Q09QWV9GT1JNQVRfSlNPTikKKwl7CisJCXBxX3NlbmRpbnQxNigmYnVmLCBuYXR0cyk7CisJCWZv ciAoaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCQkJcHFfc2VuZGludDE2KCZidWYsIGZvcm1hdCk7 IC8qIHBlci1jb2x1bW4gZm9ybWF0cyAqLworCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGb3Ig SlNPTiBmb3JtYXQsIHJlcG9ydCBvbmUgdGV4dC1mb3JtYXQgY29sdW1uLiAgRWFjaCBDb3B5RGF0 YQorCQkgKiBtZXNzYWdlIGNvbnRhaW5zIG9uZSBjb21wbGV0ZSBKU09OIG9iamVjdCwgbm90IGlu ZGl2aWR1YWwgY29sdW1uCisJCSAqIHZhbHVlcywgc28gdGhlIHBlci1jb2x1bW4gY291bnQgaXMg YWx3YXlzIDEuCisJCSAqLworCQlwcV9zZW5kaW50MTYoJmJ1ZiwgMSk7CisJCXBxX3NlbmRpbnQx NigmYnVmLCAwKTsKKwl9CisKIAlwcV9lbmRtZXNzYWdlKCZidWYpOwogCWNzdGF0ZS0+Y29weV9k ZXN0ID0gQ09QWV9GUk9OVEVORDsKIH0KQEAgLTUwNyw3ICs2MDYsNyBAQCBDb3B5U2VuZEVuZE9m Um93KENvcHlUb1N0YXRlIGNzdGF0ZSkKIH0KIAogLyoKLSAqIFdyYXBwZXIgZnVuY3Rpb24gb2Yg Q29weVNlbmRFbmRPZlJvdyBmb3IgdGV4dCBhbmQgQ1NWIGZvcm1hdHMuIFNlbmRzIHRoZQorICog V3JhcHBlciBmdW5jdGlvbiBvZiBDb3B5U2VuZEVuZE9mUm93IGZvciB0ZXh0LCBDU1YsIGFuZCBq c29uIGZvcm1hdHMuIFNlbmRzIHRoZQogICogbGluZSB0ZXJtaW5hdGlvbiBhbmQgZG8gY29tbW9u IGFwcHJvcHJpYXRlIHRoaW5ncyBmb3IgdGhlIGVuZCBvZiByb3cuCiAgKi8KIHN0YXRpYyBpbmxp bmUgdm9pZApAQCAtNzUwLDYgKzg0OSw3IEBAIEJlZ2luQ29weVRvKFBhcnNlU3RhdGUgKnBzdGF0 ZSwKIAogCQl0dXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihjc3RhdGUtPnJlbCk7CiAJCWNzdGF0 ZS0+cGFydGl0aW9ucyA9IGNoaWxkcmVuOworCQljc3RhdGUtPnR1cERlc2MgPSB0dXBEZXNjOwog CX0KIAllbHNlCiAJewpAQCAtODg2LDExICs5ODYsNTIgQEAgQmVnaW5Db3B5VG8oUGFyc2VTdGF0 ZSAqcHN0YXRlLAogCQlFeGVjdXRvclN0YXJ0KGNzdGF0ZS0+cXVlcnlEZXNjLCAwKTsKIAogCQl0 dXBEZXNjID0gY3N0YXRlLT5xdWVyeURlc2MtPnR1cERlc2M7CisJCXR1cERlc2MgPSBCbGVzc1R1 cGxlRGVzYyh0dXBEZXNjKTsKKwkJY3N0YXRlLT50dXBEZXNjID0gdHVwRGVzYzsKIAl9CiAKIAkv KiBHZW5lcmF0ZSBvciBjb252ZXJ0IGxpc3Qgb2YgYXR0cmlidXRlcyB0byBwcm9jZXNzICovCiAJ Y3N0YXRlLT5hdHRudW1saXN0ID0gQ29weUdldEF0dG51bXModHVwRGVzYywgY3N0YXRlLT5yZWws IGF0dG5hbWVsaXN0KTsKIAorCS8qIFNldCB1cCBKU09OLXNwZWNpZmljIHN0YXRlICovCisJaWYg KGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfSlNPTikKKwl7CisJCWNzdGF0ZS0+ anNvbl9idWYgPSBtYWtlU3RyaW5nSW5mbygpOworCisJCWlmIChhdHRuYW1lbGlzdCAhPSBOSUwg JiYgcmVsKQorCQl7CisJCQlpbnQJCQluYXR0cyA9IGxpc3RfbGVuZ3RoKGNzdGF0ZS0+YXR0bnVt bGlzdCk7CisJCQlUdXBsZURlc2MJcmVzdWx0RGVzYzsKKworCQkJLyoKKwkJCSAqIEJ1aWxkIGEg VHVwbGVEZXNjIGRlc2NyaWJpbmcgb25seSB0aGUgc2VsZWN0ZWQgY29sdW1ucyBzbyB0aGF0CisJ CQkgKiBjb21wb3NpdGVfdG9fanNvbigpIGVtaXRzIHRoZSByaWdodCBjb2x1bW4gbmFtZXMgYW5k IHR5cGVzLgorCQkJICovCisJCQlyZXN1bHREZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mo bmF0dHMpOworCisJCQlmb3JlYWNoX2ludChhdHRudW0sIGNzdGF0ZS0+YXR0bnVtbGlzdCkKKwkJ CXsKKwkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBEZXNjLCBh dHRudW0gLSAxKTsKKworCQkJCVR1cGxlRGVzY0luaXRFbnRyeShyZXN1bHREZXNjLAorCQkJCQkJ CQkgICBmb3JlYWNoX2N1cnJlbnRfaW5kZXgoYXR0bnVtKSArIDEsCisJCQkJCQkJCSAgIE5hbWVT dHIoYXR0ci0+YXR0bmFtZSksCisJCQkJCQkJCSAgIGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCQkg ICBhdHRyLT5hdHR0eXBtb2QsCisJCQkJCQkJCSAgIGF0dHItPmF0dG5kaW1zKTsKKwkJCX0KKwor CQkJY3N0YXRlLT50dXBEZXNjID0gQmxlc3NUdXBsZURlc2MocmVzdWx0RGVzYyk7CisKKwkJCS8q CisJCQkgKiAqIFByZS1hbGxvY2F0ZSBhcnJheXMgZm9yIHByb2plY3Rpbmcgc2VsZWN0ZWQgY29s dW1uIHZhbHVlcworCQkJICogaW50byAgc2VxdWVudGlhbCBwb3NpdGlvbnMgbWF0Y2hpbmcgdGhl IGN1c3RvbSBUdXBsZURlc2MuCisJCQkgKi8KKwkJCWNzdGF0ZS0+anNvbl9wcm9qdmFsdWVzID0g cGFsbG9jX2FycmF5KERhdHVtLCBuYXR0cyk7CisJCQljc3RhdGUtPmpzb25fcHJvam51bGxzID0g cGFsbG9jX2FycmF5KGJvb2wsIG5hdHRzKTsKKwkJfQorCX0KKwogCW51bV9waHlzX2F0dHJzID0g dHVwRGVzYy0+bmF0dHM7CiAKIAkvKiBDb252ZXJ0IEZPUkNFX1FVT1RFIG5hbWUgbGlzdCB0byBw ZXItY29sdW1uIGZsYWdzLCBjaGVjayB2YWxpZGl0eSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggOWNiZThl YWZjNDUuLjEzNmZkMTliODU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTM2MTIsNiArMzYxMiwxMCBAQCBj b3B5X29wdF9pdGVtOgogCQkJCXsKIAkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9ybWF0IiwgKE5v ZGUgKikgbWFrZVN0cmluZygiY3N2IiksIEAxKTsKIAkJCQl9CisJCQl8IEpTT04KKwkJCQl7CisJ CQkJCSQkID0gbWFrZURlZkVsZW0oImZvcm1hdCIsIChOb2RlICopIG1ha2VTdHJpbmcoImpzb24i KSwgQDEpOworCQkJCX0KIAkJCXwgSEVBREVSX1AKIAkJCQl7CiAJCQkJCSQkID0gbWFrZURlZkVs ZW0oImhlYWRlciIsIChOb2RlICopIG1ha2VCb29sZWFuKHRydWUpLCBAMSk7CkBAIC0zNjk0LDYg KzM2OTgsMTAgQEAgY29weV9nZW5lcmljX29wdF9lbGVtOgogCQkJCXsKIAkJCQkJJCQgPSBtYWtl RGVmRWxlbSgkMSwgJDIsIEAxKTsKIAkJCQl9CisJCQl8IEZPUk1BVF9MQSBjb3B5X2dlbmVyaWNf b3B0X2FyZworCQkJCXsKKwkJCQkJJCQgPSBtYWtlRGVmRWxlbSgiZm9ybWF0IiwgJDIsIEAxKTsK KwkJCQl9CiAJCTsKIAogY29weV9nZW5lcmljX29wdF9hcmc6CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwppbmRl eCAwYjE2MTM5ODQ2NS4uZjYwOWQ3Yjk0MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29uLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYwpAQCAtODYsOCAr ODYsNiBAQCB0eXBlZGVmIHN0cnVjdCBKc29uQWdnU3RhdGUKIAlKc29uVW5pcXVlQnVpbGRlclN0 YXRlIHVuaXF1ZV9jaGVjazsKIH0gSnNvbkFnZ1N0YXRlOwogCi1zdGF0aWMgdm9pZCBjb21wb3Np dGVfdG9fanNvbihEYXR1bSBjb21wb3NpdGUsIFN0cmluZ0luZm8gcmVzdWx0LAotCQkJCQkJCSAg Ym9vbCB1c2VfbGluZV9mZWVkcyk7CiBzdGF0aWMgdm9pZCBhcnJheV9kaW1fdG9fanNvbihTdHJp bmdJbmZvIHJlc3VsdCwgaW50IGRpbSwgaW50IG5kaW1zLCBpbnQgKmRpbXMsCiAJCQkJCQkJICBj b25zdCBEYXR1bSAqdmFscywgY29uc3QgYm9vbCAqbnVsbHMsIGludCAqdmFsY291bnQsCiAJCQkJ CQkJICBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQsCkBAIC01MTcs OCArNTE1LDkgQEAgYXJyYXlfdG9fanNvbl9pbnRlcm5hbChEYXR1bSBhcnJheSwgU3RyaW5nSW5m byByZXN1bHQsIGJvb2wgdXNlX2xpbmVfZmVlZHMpCiAKIC8qCiAgKiBUdXJuIGEgY29tcG9zaXRl IC8gcmVjb3JkIGludG8gSlNPTi4KKyAqIEV4cG9ydGVkIHNvIENPUFkgVE8gY2FuIHVzZSBpdC4K ICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGNvbXBvc2l0ZV90b19qc29uKERhdHVtIGNvbXBvc2l0 ZSwgU3RyaW5nSW5mbyByZXN1bHQsIGJvb2wgdXNlX2xpbmVfZmVlZHMpCiB7CiAJSGVhcFR1cGxl SGVhZGVyIHRkOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IDY0ODRjNmEzZGQ0Li5iYjgyYmRi Y2M0OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3Ny Yy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwpAQCAtMzQyNSw3ICszNDI1LDcgQEAgbWF0Y2hf cHJldmlvdXNfd29yZHMoaW50IHBhdHRlcm5faWQsCiAKIAkJCS8qIENvbXBsZXRlIENPUFkgPHN0 aD4gRlJPTXxUTyBmaWxlbmFtZSBXSVRIIChGT1JNQVQgKi8KIAkJCWVsc2UgaWYgKFRhaWxNYXRj aGVzKCJGT1JNQVQiKSkKLQkJCQlDT01QTEVURV9XSVRIKCJiaW5hcnkiLCAiY3N2IiwgInRleHQi KTsKKwkJCQlDT01QTEVURV9XSVRIKCJiaW5hcnkiLCAiY3N2IiwgInRleHQiLCAianNvbiIpOwog CiAJCQkvKiBDb21wbGV0ZSBDT1BZIDxzdGg+IEZST018VE8gZmlsZW5hbWUgV0lUSCAoRlJFRVpF ICovCiAJCQllbHNlIGlmIChUYWlsTWF0Y2hlcygiRlJFRVpFIikpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgKaW5k ZXggMjQzMGZiMGIyZTUuLjJiNWJlZjY3MzhlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21t YW5kcy9jb3B5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCkBAIC01Nyw2ICs1 Nyw3IEBAIHR5cGVkZWYgZW51bSBDb3B5Rm9ybWF0CiAJQ09QWV9GT1JNQVRfVEVYVCA9IDAsCiAJ Q09QWV9GT1JNQVRfQklOQVJZLAogCUNPUFlfRk9STUFUX0NTViwKKwlDT1BZX0ZPUk1BVF9KU09O LAogfSBDb3B5Rm9ybWF0OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNv bi5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCmluZGV4IGY4Y2M1MmIxZTc4Li4yZjRiZTQw NTE4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbi5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2pzb24uaApAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgImxpYi9zdHJpbmdp bmZvLmgiCiAKIC8qIGZ1bmN0aW9ucyBpbiBqc29uLmMgKi8KK2V4dGVybiB2b2lkIGNvbXBvc2l0 ZV90b19qc29uKERhdHVtIGNvbXBvc2l0ZSwgU3RyaW5nSW5mbyByZXN1bHQsCisJCQkJCQkJICBi b29sIHVzZV9saW5lX2ZlZWRzKTsKIGV4dGVybiB2b2lkIGVzY2FwZV9qc29uKFN0cmluZ0luZm8g YnVmLCBjb25zdCBjaGFyICpzdHIpOwogZXh0ZXJuIHZvaWQgZXNjYXBlX2pzb25fd2l0aF9sZW4o U3RyaW5nSW5mbyBidWYsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbik7CiBleHRlcm4gdm9pZCBl c2NhcGVfanNvbl90ZXh0KFN0cmluZ0luZm8gYnVmLCBjb25zdCB0ZXh0ICp0eHQpOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvY29weS5vdXQKaW5kZXggZDBkNTYzZTBmYTguLjliNjY3NTQ0OTA1IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weS5vdXQKQEAgLTczLDYgKzczLDE1MiBAQCBjb3B5IGNvcHl0 ZXN0MyB0byBzdGRvdXQgY3N2IGhlYWRlcjsKIGMxLCJjb2wgd2l0aCAsIGNvbW1hIiwiY29sIHdp dGggIiIgcXVvdGUiCiAxLGEsMQogMixiLDIKKy0tLSB0ZXN0IGNvcHlpbmcgaW4gSlNPTiBtb2Rl IHdpdGggdmFyaW91cyBzdHlsZXMKK2NvcHkgKHNlbGVjdCAxIHVuaW9uIGFsbCBzZWxlY3QgMikg dG8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29uKTsKK3siP2NvbHVtbj8iOjF9Cit7Ij9jb2x1bW4/ IjoyfQorY29weSAoc2VsZWN0IDEgYXMgZm9vIHVuaW9uIGFsbCBzZWxlY3QgMikgdG8gc3Rkb3V0 IHdpdGggKGZvcm1hdCBqc29uKTsKK3siZm9vIjoxfQoreyJmb28iOjJ9Citjb3B5ICh2YWx1ZXMg KDEpLCAoMikpIFRPIHN0ZG91dCB3aXRoIChmb3JtYXQganNvbik7Cit7ImNvbHVtbjEiOjF9Cit7 ImNvbHVtbjEiOjJ9Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCBqc29uOworeyJzdHlsZSI6IkRP UyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6IlVuaXgiLCJ0ZXN0 IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVm IiwiZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFcXHJcXFxyXFxcblxc bmIiLCJmaWxsZXIiOjR9Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOwor eyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQoreyJzdHlsZSI6 IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9Cit7InN0eWxlIjoiTWFjIiwidGVz dCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQoreyJzdHlsZSI6ImVzY1xcYXBlIiwidGVzdCI6ImFc XHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9Citjb3B5IChzZWxlY3QgKiBmcm9tIGNvcHl0ZXN0 KSB0byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKK3sic3R5bGUiOiJET1MiLCJ0ZXN0IjoiYWJjXHJc bmRlZiIsImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmls bGVyIjoyfQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxlciI6M30KK3si c3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmlsbGVyIjo0fQor LS0gYWxsIG9mIHRoZSBmb2xsb3dpbmcgc2hvdWxkIHlpZWxkIGVycm9yCitjb3B5IGNvcHl0ZXN0 IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGRlbGltaXRlciAnfCcpOworRVJST1I6ICBjYW5ub3Qg c3BlY2lmeSBERUxJTUlURVIgaW4gSlNPTiBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAo Zm9ybWF0IGpzb24sIG51bGwgJ1xOJyk7CitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IE5VTEwgaW4g SlNPTiBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGRlZmF1bHQg J3wnKTsKK0VSUk9SOiAgY2Fubm90IHNwZWNpZnkgREVGQVVMVCBpbiBKU09OIG1vZGUKK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgaGVhZGVyKTsKK0VSUk9SOiAgY2Fubm90 IHNwZWNpZnkgSEVBREVSIGluIEpTT04gbW9kZQorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZv cm1hdCBqc29uLCBoZWFkZXIgMSk7CitFUlJPUjogIGNhbm5vdCBzcGVjaWZ5IEhFQURFUiBpbiBK U09OIG1vZGUKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgcXVvdGUgJyIn KTsKK0VSUk9SOiAgQ09QWSBRVU9URSByZXF1aXJlcyBDU1YgbW9kZQorY29weSBjb3B5dGVzdCB0 byBzdGRvdXQgKGZvcm1hdCBqc29uLCBlc2NhcGUgJyInKTsKK0VSUk9SOiAgQ09QWSBFU0NBUEUg cmVxdWlyZXMgQ1NWIG1vZGUKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwg Zm9yY2VfcXVvdGUgKik7CitFUlJPUjogIENPUFkgRk9SQ0VfUVVPVEUgcmVxdWlyZXMgQ1NWIG1v ZGUKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2Vfbm90X251bGwg Kik7CitFUlJPUjogIENPUFkgRk9SQ0VfTk9UX05VTEwgcmVxdWlyZXMgQ1NWIG1vZGUKK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZm9yY2VfbnVsbCAqKTsKK0VSUk9SOiAg Q09QWSBGT1JDRV9OVUxMIHJlcXVpcmVzIENTViBtb2RlCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91 dCAoZm9ybWF0IGpzb24sIG9uX2Vycm9yIGlnbm9yZSk7CitFUlJPUjogIENPUFkgT05fRVJST1Ig Y2Fubm90IGJlIHVzZWQgd2l0aCBDT1BZIFRPCitMSU5FIDE6IGNvcHkgY29weXRlc3QgdG8gc3Rk b3V0IChmb3JtYXQganNvbiwgb25fZXJyb3IgaWdub3JlKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCitjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9y bWF0IGpzb24sIHJlamVjdF9saW1pdCAxKTsKK0VSUk9SOiAgQ09QWSBSRUpFQ1RfTElNSVQgcmVx dWlyZXMgT05fRVJST1IgdG8gYmUgc2V0IHRvIElHTk9SRQorY29weSBjb3B5dGVzdCBmcm9tIHN0 ZGluKGZvcm1hdCBqc29uKTsKK0VSUk9SOiAgQ09QWSBKU09OIG1vZGUgY2Fubm90IGJlIHVzZWQg d2l0aCBDT1BZIEZST00KKy0tIGFsbCBvZiB0aGUgYWJvdmUgc2hvdWxkIHlpZWxkIGVycm9yCist LSBjb2x1bW4gbGlzdCB3aXRoIGpzb24gZm9ybWF0Citjb3B5IGNvcHl0ZXN0IChzdHlsZSwgdGVz dCwgZmlsbGVyKSB0byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKK3sic3R5bGUiOiJET1MiLCJ0ZXN0 IjoiYWJjXHJcbmRlZiIsImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4IiwidGVzdCI6ImFiY1xu ZGVmIiwiZmlsbGVyIjoyfQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNccmRlZiIsImZpbGxl ciI6M30KK3sic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxcXG5cXG5iIiwiZmls bGVyIjo0fQorLS0gY29sdW1uIGxpc3Qgd2l0aCBkaXZlcnNlIGRhdGEgdHlwZXMKK2NyZWF0ZSB0 ZW1wIHRhYmxlIGNvcHlqc29udGVzdF90eXBlcyAoCisgICAgaWQgaW50LAorICAgIGpzIGpzb24s CisgICAganNiIGpzb25iLAorICAgIGFyciBpbnRbXSwKKyAgICBuIG51bWVyaWMoMTAsMiksCisg ICAgYiBib29sZWFuLAorICAgIHRzIHRpbWVzdGFtcCwKKyAgICB0IHRleHQpOworaW5zZXJ0IGlu dG8gY29weWpzb250ZXN0X3R5cGVzIHZhbHVlcworKDEsICd7ImEiOjF9JywgJ3siYiI6Mn0nLCAn ezEsMiwzfScsIDMuMTQsIHRydWUsCisgJzIwMjQtMDEtMTUgMTA6MzA6MDAnLCAnaGVsbG8nKSwK KygyLCAnWzEsbnVsbCwieCJdJywgJ3sibmVzdGVkIjp7ImsiOiJ2In19JywgJ3s0LDV9JywgLTk5 Ljk5LCBmYWxzZSwKKyAnMjAyNC0wNi0zMCAyMzo1OTo1OScsICd3b3JsZCcpLAorKDMsICdudWxs JywgJ251bGwnLCAne30nLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKy0tIGZ1bGwgdGFibGUK K2NvcHkgY29weWpzb250ZXN0X3R5cGVzIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworeyJpZCI6 MSwianMiOnsiYSI6MX0sImpzYiI6eyJiIjogMn0sImFyciI6WzEsMiwzXSwibiI6My4xNCwiYiI6 dHJ1ZSwidHMiOiIyMDI0LTAxLTE1VDEwOjMwOjAwIiwidCI6ImhlbGxvIn0KK3siaWQiOjIsImpz IjpbMSxudWxsLCJ4Il0sImpzYiI6eyJuZXN0ZWQiOiB7ImsiOiAidiJ9fSwiYXJyIjpbNCw1XSwi biI6LTk5Ljk5LCJiIjpmYWxzZSwidHMiOiIyMDI0LTA2LTMwVDIzOjU5OjU5IiwidCI6Indvcmxk In0KK3siaWQiOjMsImpzIjpudWxsLCJqc2IiOm51bGwsImFyciI6W10sIm4iOm51bGwsImIiOm51 bGwsInRzIjpudWxsLCJ0IjpudWxsfQorLS0gY29sdW1uIHN1YnNldHMgZXhlcmNpc2luZyBlYWNo IHR5cGUKK2NvcHkgY29weWpzb250ZXN0X3R5cGVzIChpZCwganMsIGpzYikgdG8gc3Rkb3V0IChm b3JtYXQganNvbik7Cit7ImlkIjoxLCJqcyI6eyJhIjoxfSwianNiIjp7ImIiOiAyfX0KK3siaWQi OjIsImpzIjpbMSxudWxsLCJ4Il0sImpzYiI6eyJuZXN0ZWQiOiB7ImsiOiAidiJ9fX0KK3siaWQi OjMsImpzIjpudWxsLCJqc2IiOm51bGx9Citjb3B5IGNvcHlqc29udGVzdF90eXBlcyAoaWQsIGFy ciwgbiwgYikgdG8gc3Rkb3V0IChmb3JtYXQganNvbik7Cit7ImlkIjoxLCJhcnIiOlsxLDIsM10s Im4iOjMuMTQsImIiOnRydWV9Cit7ImlkIjoyLCJhcnIiOls0LDVdLCJuIjotOTkuOTksImIiOmZh bHNlfQoreyJpZCI6MywiYXJyIjpbXSwibiI6bnVsbCwiYiI6bnVsbH0KK2NvcHkgY29weWpzb250 ZXN0X3R5cGVzIChqc2IsIHQpIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworeyJqc2IiOnsiYiI6 IDJ9LCJ0IjoiaGVsbG8ifQoreyJqc2IiOnsibmVzdGVkIjogeyJrIjogInYifX0sInQiOiJ3b3Js ZCJ9Cit7ImpzYiI6bnVsbCwidCI6bnVsbH0KK2NvcHkgY29weWpzb250ZXN0X3R5cGVzIChpZCwg dHMpIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworeyJpZCI6MSwidHMiOiIyMDI0LTAxLTE1VDEw OjMwOjAwIn0KK3siaWQiOjIsInRzIjoiMjAyNC0wNi0zMFQyMzo1OTo1OSJ9Cit7ImlkIjozLCJ0 cyI6bnVsbH0KKy0tIHNpbmdsZSBjb2x1bW46IGpzb24gYW5kIGpzb25iCitjb3B5IGNvcHlqc29u dGVzdF90eXBlcyAoanMpIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworeyJqcyI6eyJhIjoxfX0K K3sianMiOlsxLG51bGwsIngiXX0KK3sianMiOm51bGx9Citjb3B5IGNvcHlqc29udGVzdF90eXBl cyAoanNiKSB0byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKK3sianNiIjp7ImIiOiAyfX0KK3sianNi Ijp7Im5lc3RlZCI6IHsiayI6ICJ2In19fQoreyJqc2IiOm51bGx9Citkcm9wIHRhYmxlIGNvcHlq c29udGVzdF90eXBlczsKKy0tIGVtYmVkZGVkIGVzY2FwZWQgY2hhcmFjdGVycworY3JlYXRlIHRl bXAgdGFibGUgY29weWpzb250ZXN0ICgKKyAgICBpZCBiaWdzZXJpYWwsCisgICAgZjEgdGV4dCwK KyAgICBmMiB0aW1lc3RhbXB0eik7CitpbnNlcnQgaW50byBjb3B5anNvbnRlc3QKKyAgc2VsZWN0 IGcuaSwKKyAgICAgICAgIENBU0UgV0hFTiBnLmkgJSAyID0gMCBUSEVOCisgICAgICAgICAgICds aW5lIHdpdGggJycgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0CisgICAgICAgICBFTFNFCisgICAgICAg ICAgICdsaW5lIHdpdGggIiBpbiBpdDogJyB8fCBnLmk6OnRleHQKKyAgICAgICAgIEVORCwKKyAg ICAgICAgICdNb24gRmViIDEwIDE3OjMyOjAxIDE5OTcgUFNUJworICBmcm9tIGdlbmVyYXRlX3Nl cmllcygxLDUpIGFzIGcoaSk7CitpbnNlcnQgaW50byBjb3B5anNvbnRlc3QgKGYxKSB2YWx1ZXMK KyhFJ2FhYVwiYmJiJzo6dGV4dCksCisoRSdhYWFcXGJiYic6OnRleHQpLAorKEUnYWFhXC9iYmIn Ojp0ZXh0KSwKKyhFJ2FhYVxiYmJiJzo6dGV4dCksCisoRSdhYWFcZmJiYic6OnRleHQpLAorKEUn YWFhXG5iYmInOjp0ZXh0KSwKKyhFJ2FhYVxyYmJiJzo6dGV4dCksCisoRSdhYWFcdGJiYic6OnRl eHQpOworY29weSBjb3B5anNvbnRlc3QgdG8gc3Rkb3V0IGpzb247Cit7ImlkIjoxLCJmMSI6Imxp bmUgd2l0aCBcIiBpbiBpdDogMSIsImYyIjoiMTk5Ny0wMi0xMFQxNzozMjowMS0wODowMCJ9Cit7 ImlkIjoyLCJmMSI6ImxpbmUgd2l0aCAnIGluIGl0OiAyIiwiZjIiOiIxOTk3LTAyLTEwVDE3OjMy OjAxLTA4OjAwIn0KK3siaWQiOjMsImYxIjoibGluZSB3aXRoIFwiIGluIGl0OiAzIiwiZjIiOiIx OTk3LTAyLTEwVDE3OjMyOjAxLTA4OjAwIn0KK3siaWQiOjQsImYxIjoibGluZSB3aXRoICcgaW4g aXQ6IDQiLCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6MDAifQoreyJpZCI6NSwiZjEiOiJs aW5lIHdpdGggXCIgaW4gaXQ6IDUiLCJmMiI6IjE5OTctMDItMTBUMTc6MzI6MDEtMDg6MDAifQor eyJpZCI6MSwiZjEiOiJhYWFcImJiYiIsImYyIjpudWxsfQoreyJpZCI6MiwiZjEiOiJhYWFcXGJi YiIsImYyIjpudWxsfQoreyJpZCI6MywiZjEiOiJhYWEvYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo0 LCJmMSI6ImFhYVxiYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo1LCJmMSI6ImFhYVxmYmJiIiwiZjIi Om51bGx9Cit7ImlkIjo2LCJmMSI6ImFhYVxuYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo3LCJmMSI6 ImFhYVxyYmJiIiwiZjIiOm51bGx9Cit7ImlkIjo4LCJmMSI6ImFhYVx0YmJiIiwiZjIiOm51bGx9 CiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5dGVzdDQgKAogCWMxIGludCwKIAkiY29sbmFtZSB3aXRo IHRhYjogCSIgdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5LnNx bCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCmluZGV4IDY1Y2JkYWY3ZjNlLi40MDRm NDMyMTA4NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwKQEAgLTgyLDYgKzgyLDk0IEBAIHRoaXMgaXMg anVzdCBhIGxpbmUgZnVsbCBvZiBqdW5rIHRoYXQgd291bGQgZXJyb3Igb3V0IGlmIHBhcnNlZAog CiBjb3B5IGNvcHl0ZXN0MyB0byBzdGRvdXQgY3N2IGhlYWRlcjsKIAorLS0tIHRlc3QgY29weWlu ZyBpbiBKU09OIG1vZGUgd2l0aCB2YXJpb3VzIHN0eWxlcworY29weSAoc2VsZWN0IDEgdW5pb24g YWxsIHNlbGVjdCAyKSB0byBzdGRvdXQgd2l0aCAoZm9ybWF0IGpzb24pOworY29weSAoc2VsZWN0 IDEgYXMgZm9vIHVuaW9uIGFsbCBzZWxlY3QgMikgdG8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29u KTsKK2NvcHkgKHZhbHVlcyAoMSksICgyKSkgVE8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29uKTsK K2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IGpzb247Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAo Zm9ybWF0IGpzb24pOworY29weSAoc2VsZWN0ICogZnJvbSBjb3B5dGVzdCkgdG8gc3Rkb3V0IChm b3JtYXQganNvbik7CisKKy0tIGFsbCBvZiB0aGUgZm9sbG93aW5nIHNob3VsZCB5aWVsZCBlcnJv cgorY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBkZWxpbWl0ZXIgJ3wnKTsK K2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgbnVsbCAnXE4nKTsKK2NvcHkg Y29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwgZGVmYXVsdCAnfCcpOworY29weSBjb3B5 dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBoZWFkZXIpOworY29weSBjb3B5dGVzdCB0byBz dGRvdXQgKGZvcm1hdCBqc29uLCBoZWFkZXIgMSk7Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAo Zm9ybWF0IGpzb24sIHF1b3RlICciJyk7Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0 IGpzb24sIGVzY2FwZSAnIicpOworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29u LCBmb3JjZV9xdW90ZSAqKTsKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0IChmb3JtYXQganNvbiwg Zm9yY2Vfbm90X251bGwgKik7Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24s IGZvcmNlX251bGwgKik7Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIG9u X2Vycm9yIGlnbm9yZSk7Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIHJl amVjdF9saW1pdCAxKTsKK2NvcHkgY29weXRlc3QgZnJvbSBzdGRpbihmb3JtYXQganNvbik7Cist LSBhbGwgb2YgdGhlIGFib3ZlIHNob3VsZCB5aWVsZCBlcnJvcgorCistLSBjb2x1bW4gbGlzdCB3 aXRoIGpzb24gZm9ybWF0Citjb3B5IGNvcHl0ZXN0IChzdHlsZSwgdGVzdCwgZmlsbGVyKSB0byBz dGRvdXQgKGZvcm1hdCBqc29uKTsKKworLS0gY29sdW1uIGxpc3Qgd2l0aCBkaXZlcnNlIGRhdGEg dHlwZXMKK2NyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVzdF90eXBlcyAoCisgICAgaWQgaW50 LAorICAgIGpzIGpzb24sCisgICAganNiIGpzb25iLAorICAgIGFyciBpbnRbXSwKKyAgICBuIG51 bWVyaWMoMTAsMiksCisgICAgYiBib29sZWFuLAorICAgIHRzIHRpbWVzdGFtcCwKKyAgICB0IHRl eHQpOworCitpbnNlcnQgaW50byBjb3B5anNvbnRlc3RfdHlwZXMgdmFsdWVzCisoMSwgJ3siYSI6 MX0nLCAneyJiIjoyfScsICd7MSwyLDN9JywgMy4xNCwgdHJ1ZSwKKyAnMjAyNC0wMS0xNSAxMDoz MDowMCcsICdoZWxsbycpLAorKDIsICdbMSxudWxsLCJ4Il0nLCAneyJuZXN0ZWQiOnsiayI6InYi fX0nLCAnezQsNX0nLCAtOTkuOTksIGZhbHNlLAorICcyMDI0LTA2LTMwIDIzOjU5OjU5JywgJ3dv cmxkJyksCisoMywgJ251bGwnLCAnbnVsbCcsICd7fScsIG51bGwsIG51bGwsIG51bGwsIG51bGwp OworCistLSBmdWxsIHRhYmxlCitjb3B5IGNvcHlqc29udGVzdF90eXBlcyB0byBzdGRvdXQgKGZv cm1hdCBqc29uKTsKKworLS0gY29sdW1uIHN1YnNldHMgZXhlcmNpc2luZyBlYWNoIHR5cGUKK2Nv cHkgY29weWpzb250ZXN0X3R5cGVzIChpZCwganMsIGpzYikgdG8gc3Rkb3V0IChmb3JtYXQganNv bik7Citjb3B5IGNvcHlqc29udGVzdF90eXBlcyAoaWQsIGFyciwgbiwgYikgdG8gc3Rkb3V0IChm b3JtYXQganNvbik7Citjb3B5IGNvcHlqc29udGVzdF90eXBlcyAoanNiLCB0KSB0byBzdGRvdXQg KGZvcm1hdCBqc29uKTsKK2NvcHkgY29weWpzb250ZXN0X3R5cGVzIChpZCwgdHMpIHRvIHN0ZG91 dCAoZm9ybWF0IGpzb24pOworCistLSBzaW5nbGUgY29sdW1uOiBqc29uIGFuZCBqc29uYgorY29w eSBjb3B5anNvbnRlc3RfdHlwZXMgKGpzKSB0byBzdGRvdXQgKGZvcm1hdCBqc29uKTsKK2NvcHkg Y29weWpzb250ZXN0X3R5cGVzIChqc2IpIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOworCitkcm9w IHRhYmxlIGNvcHlqc29udGVzdF90eXBlczsKKworLS0gZW1iZWRkZWQgZXNjYXBlZCBjaGFyYWN0 ZXJzCitjcmVhdGUgdGVtcCB0YWJsZSBjb3B5anNvbnRlc3QgKAorICAgIGlkIGJpZ3NlcmlhbCwK KyAgICBmMSB0ZXh0LAorICAgIGYyIHRpbWVzdGFtcHR6KTsKKworaW5zZXJ0IGludG8gY29weWpz b250ZXN0CisgIHNlbGVjdCBnLmksCisgICAgICAgICBDQVNFIFdIRU4gZy5pICUgMiA9IDAgVEhF TgorICAgICAgICAgICAnbGluZSB3aXRoICcnIGluIGl0OiAnIHx8IGcuaTo6dGV4dAorICAgICAg ICAgRUxTRQorICAgICAgICAgICAnbGluZSB3aXRoICIgaW4gaXQ6ICcgfHwgZy5pOjp0ZXh0Cisg ICAgICAgICBFTkQsCisgICAgICAgICAnTW9uIEZlYiAxMCAxNzozMjowMSAxOTk3IFBTVCcKKyAg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBhcyBnKGkpOworCitpbnNlcnQgaW50byBjb3B5anNv bnRlc3QgKGYxKSB2YWx1ZXMKKyhFJ2FhYVwiYmJiJzo6dGV4dCksCisoRSdhYWFcXGJiYic6OnRl eHQpLAorKEUnYWFhXC9iYmInOjp0ZXh0KSwKKyhFJ2FhYVxiYmJiJzo6dGV4dCksCisoRSdhYWFc ZmJiYic6OnRleHQpLAorKEUnYWFhXG5iYmInOjp0ZXh0KSwKKyhFJ2FhYVxyYmJiJzo6dGV4dCks CisoRSdhYWFcdGJiYic6OnRleHQpOworCitjb3B5IGNvcHlqc29udGVzdCB0byBzdGRvdXQganNv bjsKKwogY3JlYXRlIHRlbXAgdGFibGUgY29weXRlc3Q0ICgKIAljMSBpbnQsCiAJImNvbG5hbWUg d2l0aCB0YWI6IAkiIHRleHQpOwotLSAKMi4zNC4xCgo= --000000000000ac7966064c8f482d Content-Type: text/x-patch; charset="US-ASCII"; name="v29-0001-introduce-CopyFormat-refactor-CopyFormatOptions.patch" Content-Disposition: attachment; filename="v29-0001-introduce-CopyFormat-refactor-CopyFormatOptions.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmin4mao2 RnJvbSBjYzc0N2RmMzkyOTkxMzA3OGI4NWRkNWZiZWU1YTg1MmFhN2QwZDUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjEgSmFuIDIwMjYgMTg6Mzg6MjQgKzA4MDAKU3ViamVjdDogW1BBVENIIHYy OSAxLzNdIGludHJvZHVjZSBDb3B5Rm9ybWF0IHJlZmFjdG9yIENvcHlGb3JtYXRPcHRpb25zCgpD dXJyZW50bHksIENPUFkgY29tbWFuZCBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0d28gYm9vbGVh bnMgKGJpbmFyeSwgY3N2X21vZGUpCmZpZWxkcyBpbiBDb3B5Rm9ybWF0T3B0aW9ucyBUaGlzIGFw cHJvYWNoLCB3aGlsZSBmdW5jdGlvbmFsLCBpc24ndCBpZGVhbCBmb3IKZnV0dXJlIG90aGVyIGlt cGxlbWVudCBvdGhlciBmb3JtYXQuCgpUbyBzaW1wbGlmeSBhZGRpbmcgbmV3IGZvcm1hdHMsIHdl J3ZlIGludHJvZHVjZWQgYW4gZW51bSBDb3B5Rm9ybWF0LiBUaGlzIG1ha2VzCnRoZSBjb2RlIGNs ZWFuZXIgYW5kIG1vcmUgbWFpbnRhaW5hYmxlLCBhbGxvd2luZyBmb3IgZWFzaWVyIGludGVncmF0 aW9uIG9mCmFkZGl0aW9uYWwgZm9ybWF0cyBkb3duIHRoZSBsaW5lLgoKVGhlIENvcHlGb3JtYXQg ZW51bSB3YXMgb3JpZ2luYWxseSBjb250cmlidXRlZCBieSBKb2VsIEphY29ic29uIDxqb2VsQGNv bXBpbGVyLm9yZz4sCmxhdGVyIHJlZmFjdG9yZWQgYnkgSmlhbiBIZSB0byBhZGRyZXNzIHZhcmlv dXMgaXNzdWVzLgoKZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUx2ZlVrQnhUWXk1 dVdQRlZ3cGtfN2lpMnpnVDA3dDNkLXlSX2N5NHNmcnJMVSUzRGtjZyU0MG1haWwuZ21haWwuY29t CmRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vNmEwNDYyOGQtMGQ1My00MWQ5LTllMzUt NWE4ZGMzMDJjMzRjQGpvZWNvbndheS5jb20KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 LmMgICAgICAgICAgfCA1MCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgfCAgNiArKy0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9jb3B5ZnJvbXBhcnNlLmMgfCAgNyArKy0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8u YyAgICAgICAgfCAgOCArKy0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oICAgICAgICAg IHwgMTMgKysrKysrLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICB8ICAx ICsKIDYgZmlsZXMgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weS5jCmluZGV4IDYzYjg2ODAyYmEyLi4yZjQ2YmU1MTZmMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHkuYwpAQCAtNTc2LDYgKzU3Niw4IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsCiAJCW9wdHNfb3V0ID0gcGFsbG9jMF9vYmplY3QoQ29weUZvcm1hdE9wdGlvbnMpOwog CiAJb3B0c19vdXQtPmZpbGVfZW5jb2RpbmcgPSAtMTsKKwkvKiBkZWZhdWx0IGZvcm1hdCAqLwor CW9wdHNfb3V0LT5mb3JtYXQgPSBDT1BZX0ZPUk1BVF9URVhUOwogCiAJLyogRXh0cmFjdCBvcHRp b25zIGZyb20gdGhlIHN0YXRlbWVudCBub2RlIHRyZWUgKi8KIAlmb3JlYWNoKG9wdGlvbiwgb3B0 aW9ucykKQEAgLTU5MCwxMSArNTkyLDExIEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CiAJ CQlmb3JtYXRfc3BlY2lmaWVkID0gdHJ1ZTsKIAkJCWlmIChzdHJjbXAoZm10LCAidGV4dCIpID09 IDApCi0JCQkJIC8qIGRlZmF1bHQgZm9ybWF0ICovIDsKKwkJCQlvcHRzX291dC0+Zm9ybWF0ID0g Q09QWV9GT1JNQVRfVEVYVDsKIAkJCWVsc2UgaWYgKHN0cmNtcChmbXQsICJjc3YiKSA9PSAwKQot CQkJCW9wdHNfb3V0LT5jc3ZfbW9kZSA9IHRydWU7CisJCQkJb3B0c19vdXQtPmZvcm1hdCA9IENP UFlfRk9STUFUX0NTVjsKIAkJCWVsc2UgaWYgKHN0cmNtcChmbXQsICJiaW5hcnkiKSA9PSAwKQot CQkJCW9wdHNfb3V0LT5iaW5hcnkgPSB0cnVlOworCQkJCW9wdHNfb3V0LT5mb3JtYXQgPSBDT1BZ X0ZPUk1BVF9CSU5BUlk7CiAJCQllbHNlCiAJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLApAQCAtNzU0LDMxICs3NTYsMzEg QEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKiBDaGVjayBmb3Ig aW5jb21wYXRpYmxlIG9wdGlvbnMgKG11c3QgZG8gdGhlc2UgdGhyZWUgYmVmb3JlIGluc2VydGlu ZwogCSAqIGRlZmF1bHRzKQogCSAqLwotCWlmIChvcHRzX291dC0+YmluYXJ5ICYmIG9wdHNfb3V0 LT5kZWxpbSkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9CSU5BUlkgJiYg b3B0c19vdXQtPmRlbGltKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKIAkJLyotIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1lIG9mIGEgQ09Q WSBvcHRpb24sIGUuZy4gT05fRVJST1IgKi8KIAkJCQkgZXJybXNnKCJjYW5ub3Qgc3BlY2lmeSAl cyBpbiBCSU5BUlkgbW9kZSIsICJERUxJTUlURVIiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5iaW5h cnkgJiYgb3B0c19vdXQtPm51bGxfcHJpbnQpCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09Q WV9GT1JNQVRfQklOQVJZICYmIG9wdHNfb3V0LT5udWxsX3ByaW50KQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJjYW5u b3Qgc3BlY2lmeSAlcyBpbiBCSU5BUlkgbW9kZSIsICJOVUxMIikpKTsKIAotCWlmIChvcHRzX291 dC0+YmluYXJ5ICYmIG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50KQorCWlmIChvcHRzX291dC0+Zm9y bWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+ZGVmYXVsdF9wcmludCkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJ IGVycm1zZygiY2Fubm90IHNwZWNpZnkgJXMgaW4gQklOQVJZIG1vZGUiLCAiREVGQVVMVCIpKSk7 CiAKIAkvKiBTZXQgZGVmYXVsdHMgZm9yIG9taXR0ZWQgb3B0aW9ucyAqLwogCWlmICghb3B0c19v dXQtPmRlbGltKQotCQlvcHRzX291dC0+ZGVsaW0gPSBvcHRzX291dC0+Y3N2X21vZGUgPyAiLCIg OiAiXHQiOworCQlvcHRzX291dC0+ZGVsaW0gPSAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZP Uk1BVF9DU1YpID8gIiwiIDogIlx0IjsKIAogCWlmICghb3B0c19vdXQtPm51bGxfcHJpbnQpCi0J CW9wdHNfb3V0LT5udWxsX3ByaW50ID0gb3B0c19vdXQtPmNzdl9tb2RlID8gIiIgOiAiXFxOIjsK KwkJb3B0c19vdXQtPm51bGxfcHJpbnQgPSAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1B VF9DU1YpID8gIiIgOiAiXFxOIjsKIAlvcHRzX291dC0+bnVsbF9wcmludF9sZW4gPSBzdHJsZW4o b3B0c19vdXQtPm51bGxfcHJpbnQpOwogCi0JaWYgKG9wdHNfb3V0LT5jc3ZfbW9kZSkKKwlpZiAo b3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YpCiAJewogCQlpZiAoIW9wdHNfb3V0 LT5xdW90ZSkKIAkJCW9wdHNfb3V0LT5xdW90ZSA9ICJcIiI7CkBAIC04MjYsNyArODI4LDcgQEAg UHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkgKiBmdXR1cmUtcHJvb2Zp bmcuICBMaWtld2lzZSB3ZSBkaXNhbGxvdyBhbGwgZGlnaXRzIHRob3VnaCBvbmx5IG9jdGFsCiAJ ICogZGlnaXRzIGFyZSBhY3R1YWxseSBkYW5nZXJvdXMuCiAJICovCi0JaWYgKCFvcHRzX291dC0+ Y3N2X21vZGUgJiYKKwlpZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYK IAkJc3RyY2hyKCJcXC5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLAogCQkJ ICAgb3B0c19vdXQtPmRlbGltWzBdKSAhPSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLApAQCAtODM0 LDQzICs4MzYsNDMgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJ CQkgZXJybXNnKCJDT1BZIGRlbGltaXRlciBjYW5ub3QgYmUgXCIlc1wiIiwgb3B0c19vdXQtPmRl bGltKSkpOwogCiAJLyogQ2hlY2sgaGVhZGVyICovCi0JaWYgKG9wdHNfb3V0LT5iaW5hcnkgJiYg b3B0c19vdXQtPmhlYWRlcl9saW5lICE9IENPUFlfSEVBREVSX0ZBTFNFKQorCWlmIChvcHRzX291 dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+aGVhZGVyX2xpbmUg IT0gQ09QWV9IRUFERVJfRkFMU0UpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhl IG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBPTl9FUlJPUiAqLwogCQkJCSBlcnJtc2coImNh bm5vdCBzcGVjaWZ5ICVzIGluIEJJTkFSWSBtb2RlIiwgIkhFQURFUiIpKSk7CiAKIAkvKiBDaGVj ayBxdW90ZSAqLwotCWlmICghb3B0c19vdXQtPmNzdl9tb2RlICYmIG9wdHNfb3V0LT5xdW90ZSAh PSBOVUxMKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ICE9IENPUFlfRk9STUFUX0NTViAmJiBvcHRz X291dC0+cXVvdGUgIT0gTlVMTCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUg bmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCiAJCQkJIGVycm1zZygiQ09Q WSAlcyByZXF1aXJlcyBDU1YgbW9kZSIsICJRVU9URSIpKSk7CiAKLQlpZiAob3B0c19vdXQtPmNz dl9tb2RlICYmIHN0cmxlbihvcHRzX291dC0+cXVvdGUpICE9IDEpCisJaWYgKG9wdHNfb3V0LT5m b3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWICYmIHN0cmxlbihvcHRzX291dC0+cXVvdGUpICE9IDEp CiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAogCQkJCSBlcnJtc2coIkNPUFkgcXVvdGUgbXVzdCBiZSBhIHNpbmdsZSBvbmUtYnl0 ZSBjaGFyYWN0ZXIiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+ ZGVsaW1bMF0gPT0gb3B0c19vdXQtPnF1b3RlWzBdKQorCWlmIChvcHRzX291dC0+Zm9ybWF0ID09 IENPUFlfRk9STUFUX0NTViAmJiBvcHRzX291dC0+ZGVsaW1bMF0gPT0gb3B0c19vdXQtPnF1b3Rl WzBdKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAogCQkJCSBlcnJtc2coIkNPUFkgZGVsaW1pdGVyIGFuZCBxdW90ZSBtdXN0 IGJlIGRpZmZlcmVudCIpKSk7CiAKIAkvKiBDaGVjayBlc2NhcGUgKi8KLQlpZiAoIW9wdHNfb3V0 LT5jc3ZfbW9kZSAmJiBvcHRzX291dC0+ZXNjYXBlICE9IE5VTEwpCisJaWYgKG9wdHNfb3V0LT5m b3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIG9wdHNfb3V0LT5lc2NhcGUgIT0gTlVMTCkKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBl LmcuIE9OX0VSUk9SICovCiAJCQkJIGVycm1zZygiQ09QWSAlcyByZXF1aXJlcyBDU1YgbW9kZSIs ICJFU0NBUEUiKSkpOwogCi0JaWYgKG9wdHNfb3V0LT5jc3ZfbW9kZSAmJiBzdHJsZW4ob3B0c19v dXQtPmVzY2FwZSkgIT0gMSkKKwlpZiAob3B0c19vdXQtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9D U1YgJiYgc3RybGVuKG9wdHNfb3V0LT5lc2NhcGUpICE9IDEpCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2co IkNPUFkgZXNjYXBlIG11c3QgYmUgYSBzaW5nbGUgb25lLWJ5dGUgY2hhcmFjdGVyIikpKTsKIAog CS8qIENoZWNrIGZvcmNlX3F1b3RlICovCi0JaWYgKCFvcHRzX291dC0+Y3N2X21vZGUgJiYgKG9w dHNfb3V0LT5mb3JjZV9xdW90ZSB8fCBvcHRzX291dC0+Zm9yY2VfcXVvdGVfYWxsKSkKKwlpZiAo b3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYgKG9wdHNfb3V0LT5mb3JjZV9x dW90ZSB8fCBvcHRzX291dC0+Zm9yY2VfcXVvdGVfYWxsKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCS8qLSB0cmFuc2xh dG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcuIE9OX0VSUk9SICovCkBA IC04ODQsOCArODg2LDggQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwK IAkJCQkJCSJDT1BZIEZST00iKSkpOwogCiAJLyogQ2hlY2sgZm9yY2Vfbm90bnVsbCAqLwotCWlm ICghb3B0c19vdXQtPmNzdl9tb2RlICYmIChvcHRzX291dC0+Zm9yY2Vfbm90bnVsbCAhPSBOSUwg fHwKLQkJCQkJCQkJb3B0c19vdXQtPmZvcmNlX25vdG51bGxfYWxsKSkKKwlpZiAob3B0c19vdXQt PmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9DU1YgJiYgKG9wdHNfb3V0LT5mb3JjZV9ub3RudWxsICE9 IE5JTCB8fAorCQkJCQkJCQkJCQkJb3B0c19vdXQtPmZvcmNlX25vdG51bGxfYWxsKSkKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CiAJCS8qLSB0cmFuc2xhdG9yOiAlcyBpcyB0aGUgbmFtZSBvZiBhIENPUFkgb3B0aW9uLCBlLmcu IE9OX0VSUk9SICovCkBAIC05MDAsOCArOTAyLDggQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSJDT1BZIFRPIikpKTsKIAogCS8qIENoZWNrIGZvcmNlX251 bGwgKi8KLQlpZiAoIW9wdHNfb3V0LT5jc3ZfbW9kZSAmJiAob3B0c19vdXQtPmZvcmNlX251bGwg IT0gTklMIHx8Ci0JCQkJCQkJCW9wdHNfb3V0LT5mb3JjZV9udWxsX2FsbCkpCisJaWYgKG9wdHNf b3V0LT5mb3JtYXQgIT0gQ09QWV9GT1JNQVRfQ1NWICYmIChvcHRzX291dC0+Zm9yY2VfbnVsbCAh PSBOSUwgfHwKKwkJCQkJCQkJCQkJCW9wdHNfb3V0LT5mb3JjZV9udWxsX2FsbCkpCiAJCWVyZXBv cnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAog CQkvKi0gdHJhbnNsYXRvcjogJXMgaXMgdGhlIG5hbWUgb2YgYSBDT1BZIG9wdGlvbiwgZS5nLiBP Tl9FUlJPUiAqLwpAQCAtOTI1LDcgKzkyNyw3IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0 YXRlICpwc3RhdGUsCiAJCQkJCQkiTlVMTCIpKSk7CiAKIAkvKiBEb24ndCBhbGxvdyB0aGUgQ1NW IHF1b3RlIGNoYXIgdG8gYXBwZWFyIGluIHRoZSBudWxsIHN0cmluZy4gKi8KLQlpZiAob3B0c19v dXQtPmNzdl9tb2RlICYmCisJaWYgKG9wdHNfb3V0LT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NW ICYmCiAJCXN0cmNocihvcHRzX291dC0+bnVsbF9wcmludCwgb3B0c19vdXQtPnF1b3RlWzBdKSAh PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLApAQCAtOTYxLDcgKzk2Myw3IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJIkRFRkFVTFQiKSkpOwogCiAJCS8qIERvbid0IGFs bG93IHRoZSBDU1YgcXVvdGUgY2hhciB0byBhcHBlYXIgaW4gdGhlIGRlZmF1bHQgc3RyaW5nLiAq LwotCQlpZiAob3B0c19vdXQtPmNzdl9tb2RlICYmCisJCWlmIChvcHRzX291dC0+Zm9ybWF0ID09 IENPUFlfRk9STUFUX0NTViAmJgogCQkJc3RyY2hyKG9wdHNfb3V0LT5kZWZhdWx0X3ByaW50LCBv cHRzX291dC0+cXVvdGVbMF0pICE9IE5VTEwpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJy Y29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCkBAIC05NzgsNyArOTgwLDcgQEAg UHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJIGVycm1zZygiTlVM TCBzcGVjaWZpY2F0aW9uIGFuZCBERUZBVUxUIHNwZWNpZmljYXRpb24gY2Fubm90IGJlIHRoZSBz YW1lIikpKTsKIAl9CiAJLyogQ2hlY2sgb25fZXJyb3IgKi8KLQlpZiAob3B0c19vdXQtPmJpbmFy eSAmJiBvcHRzX291dC0+b25fZXJyb3IgIT0gQ09QWV9PTl9FUlJPUl9TVE9QKQorCWlmIChvcHRz X291dC0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSAmJiBvcHRzX291dC0+b25fZXJyb3Ig IT0gQ09QWV9PTl9FUlJPUl9TVE9QKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVS UkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJvbmx5IE9OX0VSUk9SIFNUT1AgaXMg YWxsb3dlZCBpbiBCSU5BUlkgbW9kZSIpKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCAy ZjQyZjU1ZTIyOS4uNGQ5Mjc0MTAxNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtMTU2 LDkgKzE1Niw5IEBAIHN0YXRpYyBjb25zdCBDb3B5RnJvbVJvdXRpbmUgQ29weUZyb21Sb3V0aW5l QmluYXJ5ID0gewogc3RhdGljIGNvbnN0IENvcHlGcm9tUm91dGluZSAqCiBDb3B5RnJvbUdldFJv dXRpbmUoY29uc3QgQ29weUZvcm1hdE9wdGlvbnMgKm9wdHMpCiB7Ci0JaWYgKG9wdHMtPmNzdl9t b2RlKQorCWlmIChvcHRzLT5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKQogCQlyZXR1cm4gJkNv cHlGcm9tUm91dGluZUNTVjsKLQllbHNlIGlmIChvcHRzLT5iaW5hcnkpCisJZWxzZSBpZiAob3B0 cy0+Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSkKIAkJcmV0dXJuICZDb3B5RnJvbVJvdXRp bmVCaW5hcnk7CiAKIAkvKiBkZWZhdWx0IGlzIHRleHQgKi8KQEAgLTI2Miw3ICsyNjIsNyBAQCBD b3B5RnJvbUVycm9yQ2FsbGJhY2sodm9pZCAqYXJnKQogCQkJCSAgIGNzdGF0ZS0+Y3VyX3JlbG5h bWUpOwogCQlyZXR1cm47CiAJfQotCWlmIChjc3RhdGUtPm9wdHMuYmluYXJ5KQorCWlmIChjc3Rh dGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSkKIAl7CiAJCS8qIGNhbid0IHVz ZWZ1bGx5IGRpc3BsYXkgdGhlIGRhdGEgKi8KIAkJaWYgKGNzdGF0ZS0+Y3VyX2F0dG5hbWUpCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKaW5kZXggODRjODgwOWE4ODkuLjVmMGM1NTFl N2VjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbXBhcnNlLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb21wYXJzZS5jCkBAIC0xNzMsNyArMTczLDcg QEAgUmVjZWl2ZUNvcHlCZWdpbihDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIHsKIAlTdHJpbmdJbmZv RGF0YSBidWY7CiAJaW50CQkJbmF0dHMgPSBsaXN0X2xlbmd0aChjc3RhdGUtPmF0dG51bWxpc3Qp OwotCWludDE2CQlmb3JtYXQgPSAoY3N0YXRlLT5vcHRzLmJpbmFyeSA/IDEgOiAwKTsKKwlpbnQx NgkJZm9ybWF0ID0gKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQklOQVJZID8g MSA6IDApOwogCWludAkJCWk7CiAKIAlwcV9iZWdpbm1lc3NhZ2UoJmJ1ZiwgUHFNc2dfQ29weUlu UmVzcG9uc2UpOwpAQCAtNzUxLDcgKzc1MSw3IEBAIGJvb2wKIE5leHRDb3B5RnJvbVJhd0ZpZWxk cyhDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgY2hhciAqKipmaWVsZHMsIGludCAqbmZpZWxkcykKIHsK IAlyZXR1cm4gTmV4dENvcHlGcm9tUmF3RmllbGRzSW50ZXJuYWwoY3N0YXRlLCBmaWVsZHMsIG5m aWVsZHMsCi0JCQkJCQkJCQkJIGNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSk7CisJCQkJCQkJCQkJIGNz dGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfQ1NWKTsKIH0KIAogLyoKQEAgLTc3OCw3 ICs3NzgsOCBAQCBOZXh0Q29weUZyb21SYXdGaWVsZHNJbnRlcm5hbChDb3B5RnJvbVN0YXRlIGNz dGF0ZSwgY2hhciAqKipmaWVsZHMsIGludCAqbmZpZWxkcwogCWJvb2wJCWRvbmUgPSBmYWxzZTsK IAogCS8qIG9ubHkgYXZhaWxhYmxlIGZvciB0ZXh0IG9yIGNzdiBpbnB1dCAqLwotCUFzc2VydCgh Y3N0YXRlLT5vcHRzLmJpbmFyeSk7CisJQXNzZXJ0KGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09Q WV9GT1JNQVRfVEVYVCB8fAorCQkgICBjc3RhdGUtPm9wdHMuZm9ybWF0ID09IENPUFlfRk9STUFU X0NTVik7CiAKIAkvKiBvbiBpbnB1dCBjaGVjayB0aGF0IHRoZSBoZWFkZXIgbGluZSBpcyBjb3Jy ZWN0IGlmIG5lZWRlZCAqLwogCWlmIChjc3RhdGUtPmN1cl9saW5lbm8gPT0gMCAmJiBjc3RhdGUt Pm9wdHMuaGVhZGVyX2xpbmUgIT0gQ09QWV9IRUFERVJfRkFMU0UpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5j CmluZGV4IGQ2ZWY3Mjc1YTY0Li5iMGVlOTFmYzljMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY29weXRvLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weXRvLmMKQEAg LTE4Miw5ICsxODIsOSBAQCBzdGF0aWMgY29uc3QgQ29weVRvUm91dGluZSBDb3B5VG9Sb3V0aW5l QmluYXJ5ID0gewogc3RhdGljIGNvbnN0IENvcHlUb1JvdXRpbmUgKgogQ29weVRvR2V0Um91dGlu ZShjb25zdCBDb3B5Rm9ybWF0T3B0aW9ucyAqb3B0cykKIHsKLQlpZiAob3B0cy0+Y3N2X21vZGUp CisJaWYgKG9wdHMtPmZvcm1hdCA9PSBDT1BZX0ZPUk1BVF9DU1YpCiAJCXJldHVybiAmQ29weVRv Um91dGluZUNTVjsKLQllbHNlIGlmIChvcHRzLT5iaW5hcnkpCisJZWxzZSBpZiAob3B0cy0+Zm9y bWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSkKIAkJcmV0dXJuICZDb3B5VG9Sb3V0aW5lQmluYXJ5 OwogCiAJLyogZGVmYXVsdCBpcyB0ZXh0ICovCkBAIC0yMjEsNyArMjIxLDcgQEAgQ29weVRvVGV4 dExpa2VTdGFydChDb3B5VG9TdGF0ZSBjc3RhdGUsIFR1cGxlRGVzYyB0dXBEZXNjKQogCiAJCQlj b2xuYW1lID0gTmFtZVN0cihUdXBsZURlc2NBdHRyKHR1cERlc2MsIGF0dG51bSAtIDEpLT5hdHRu YW1lKTsKIAotCQkJaWYgKGNzdGF0ZS0+b3B0cy5jc3ZfbW9kZSkKKwkJCWlmIChjc3RhdGUtPm9w dHMuZm9ybWF0ID09IENPUFlfRk9STUFUX0NTVikKIAkJCQlDb3B5QXR0cmlidXRlT3V0Q1NWKGNz dGF0ZSwgY29sbmFtZSwgZmFsc2UpOwogCQkJZWxzZQogCQkJCUNvcHlBdHRyaWJ1dGVPdXRUZXh0 KGNzdGF0ZSwgY29sbmFtZSk7CkBAIC0zOTgsNyArMzk4LDcgQEAgU2VuZENvcHlCZWdpbihDb3B5 VG9TdGF0ZSBjc3RhdGUpCiB7CiAJU3RyaW5nSW5mb0RhdGEgYnVmOwogCWludAkJCW5hdHRzID0g bGlzdF9sZW5ndGgoY3N0YXRlLT5hdHRudW1saXN0KTsKLQlpbnQxNgkJZm9ybWF0ID0gKGNzdGF0 ZS0+b3B0cy5iaW5hcnkgPyAxIDogMCk7CisJaW50MTYJCWZvcm1hdCA9IChjc3RhdGUtPm9wdHMu Zm9ybWF0ID09IENPUFlfRk9STUFUX0JJTkFSWSA/IDEgOiAwKTsKIAlpbnQJCQlpOwogCiAJcHFf YmVnaW5tZXNzYWdlKCZidWYsIFBxTXNnX0NvcHlPdXRSZXNwb25zZSk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5LmgK aW5kZXggODc3MjAyYWY2N2IuLjI0MzBmYjBiMmU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9jb3B5LmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCkBAIC00OSw2 ICs0OSwxNiBAQCB0eXBlZGVmIGVudW0gQ29weUxvZ1ZlcmJvc2l0eUNob2ljZQogCUNPUFlfTE9H X1ZFUkJPU0lUWV9WRVJCT1NFLCAvKiBsb2dzIGFkZGl0aW9uYWwgbWVzc2FnZXMgKi8KIH0gQ29w eUxvZ1ZlcmJvc2l0eUNob2ljZTsKIAorLyoKKyAqIFJlcHJlc2VudHMgdGhlIGZvcm1hdCBvZiB0 aGUgQ09QWSBvcGVyYXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBDb3B5Rm9ybWF0Cit7CisJQ09Q WV9GT1JNQVRfVEVYVCA9IDAsCisJQ09QWV9GT1JNQVRfQklOQVJZLAorCUNPUFlfRk9STUFUX0NT ViwKK30gQ29weUZvcm1hdDsKKwogLyoKICAqIEEgc3RydWN0IHRvIGhvbGQgQ09QWSBvcHRpb25z LCBpbiBhIHBhcnNlZCBmb3JtLiBBbGwgb2YgdGhlc2UgYXJlIHJlbGF0ZWQKICAqIHRvIGZvcm1h dHRpbmcsIGV4Y2VwdCBmb3IgJ2ZyZWV6ZScsIHdoaWNoIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBo ZXJlLCBidXQKQEAgLTU5LDkgKzY5LDggQEAgdHlwZWRlZiBzdHJ1Y3QgQ29weUZvcm1hdE9wdGlv bnMKIAkvKiBwYXJhbWV0ZXJzIGZyb20gdGhlIENPUFkgY29tbWFuZCAqLwogCWludAkJCWZpbGVf ZW5jb2Rpbmc7CS8qIGZpbGUgb3IgcmVtb3RlIHNpZGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcsCiAJ CQkJCQkJCSAqIC0xIGlmIG5vdCBzcGVjaWZpZWQgKi8KLQlib29sCQliaW5hcnk7CQkJLyogYmlu YXJ5IGZvcm1hdD8gKi8KKwlDb3B5Rm9ybWF0CWZvcm1hdDsJCQkvKiBmb3JtYXQgb2YgdGhlIENP UFkgb3BlcmF0aW9uICovCiAJYm9vbAkJZnJlZXplOwkJCS8qIGZyZWV6ZSByb3dzIG9uIGxvYWRp bmc/ICovCi0JYm9vbAkJY3N2X21vZGU7CQkvKiBDb21tYSBTZXBhcmF0ZWQgVmFsdWUgZm9ybWF0 PyAqLwogCWludAkJCWhlYWRlcl9saW5lOwkvKiBudW1iZXIgb2YgbGluZXMgdG8gc2tpcCBvciBD T1BZX0hFQURFUl9YWFgKIAkJCQkJCQkJICogdmFsdWUgKHNlZSB0aGUgYWJvdmUpICovCiAJY2hh cgkgICAqbnVsbF9wcmludDsJCS8qIE5VTEwgbWFya2VyIHN0cmluZyAoc2VydmVyIGVuY29kaW5n ISkgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzI1MDU2NGQ0ZmYuLjUyMGNkZDM2 ODAwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNTI4LDYgKzUyOCw3IEBAIENvbnZl cnNpb25Mb2NhdGlvbgogQ29udmVydFJvd3R5cGVFeHByCiBDb29rZWRDb25zdHJhaW50CiBDb3B5 RGVzdAorQ29weUZvcm1hdAogQ29weUZvcm1hdE9wdGlvbnMKIENvcHlGcm9tUm91dGluZQogQ29w eUZyb21TdGF0ZQotLSAKMi4zNC4xCgo= --000000000000ac7966064c8f482d Content-Type: text/x-patch; charset="US-ASCII"; name="v29-0003-Add-option-force_array-for-COPY-JSON-FORMAT.patch" Content-Disposition: attachment; filename="v29-0003-Add-option-force_array-for-COPY-JSON-FORMAT.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmin4ma30 RnJvbSA1MTBmMWYwNDM1YmM3NGI4MDU3NWIwYjhhZjIxMzQ4MTdmZWRmYTA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IE1vbiwgOSBNYXIgMjAyNiAxMDoyNzozNyArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjI5 IDMvM10gQWRkIG9wdGlvbiBmb3JjZV9hcnJheSBmb3IgQ09QWSBKU09OIEZPUk1BVAoKVGhpcyBh ZGRzIHRoZSBmb3JjZV9hcnJheSBvcHRpb24sIHdoaWNoIGlzIGF2YWlsYWJsZSBleGNsdXNpdmVs eQp3aGVuIHVzaW5nIENPUFkgVE8gd2l0aCB0aGUgSlNPTiBmb3JtYXQuCgpXaGVuIGVuYWJsZWQs IHRoaXMgb3B0aW9uIHdyYXBzIHRoZSBvdXRwdXQgaW4gYSB0b3AtbGV2ZWwgSlNPTiBhcnJheQoo ZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzIHdpdGggY29tbWEtc2VwYXJhdGVkIGVsZW1lbnRz KSwgbWFraW5nIHRoZQplbnRpcmUgcmVzdWx0IGEgdmFsaWQgc2luZ2xlIEpTT04gdmFsdWUuIFdp dGhvdXQgdGhpcyBvcHRpb24sIHRoZSBkZWZhdWx0CmJlaGF2aW9yIGlzIHRvIG91dHB1dCBhIHN0 cmVhbSBvZiBpbmRlcGVuZGVudCBKU09OIG9iamVjdHMuCgpBdHRlbXB0aW5nIHRvIHVzZSB0aGlz IG9wdGlvbiB3aXRoIENPUFkgRlJPTSBvciB3aXRoIGZvcm1hdHMgb3RoZXIgdGhhbgpKU09OIHdp bGwgcmFpc2UgYW4gZXJyb3IuCgpBdXRob3I6IEpvZSBDb253YXkgPG1haWxAam9lY29ud2F5LmNv bT4KQXV0aG9yOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ClJldmlld2Vk LWJ5OiBKdW53YW5nIFpoYW8gPHpoandwa3VAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogTWFzYWhp a28gU2F3YWRhIDxzYXdhZGEubXNoa0BnbWFpbC5jb20+LApSZXZpZXdlZC1ieTogRmxvcmVudHMg VHNlbGFpIDxmbG9yZW50cy50c2VsYWlAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogQW5kcmV3IER1 bnN0YW4gPGFuZHJld0BkdW5zbGFuZS5uZXQ+CgpkaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL0NBTHZmVWtCeFRZeTV1V1BGVndwa183aWkyemdUMDd0M2QteVJfY3k0c2ZyckxVJTNEa2Nn JTQwbWFpbC5nbWFpbC5jb20KZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS82YTA0NjI4 ZC0wZDUzLTQxZDktOWUzNS01YThkYzMwMmMzNGNAam9lY29ud2F5LmNvbQotLS0KIGRvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sICAgICAgICAgfCAzMCArKysrKysrKysrKysrKysrKysrKysrCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMgICAgICAgIHwgMTMgKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29weXRvLmMgICAgICB8IDQxICsrKysrKysrKysrKysrKysrKysrKysr KysrKystLQogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jICAgICB8ICAyICstCiBzcmMv aW5jbHVkZS9jb21tYW5kcy9jb3B5LmggICAgICAgIHwgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9jb3B5Lm91dCB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weS5zcWwgICAgICB8IDEwICsrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQs IDEyNyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9yZWYvY29weS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jb3B5LnNnbWwKaW5kZXggNzVm NTViYmY2ZjguLmE3OTU4N2Y3NjEzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NvcHku c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NvcHkuc2dtbApAQCAtNDAsNiArNDAsNyBAQCBD T1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2Vh YmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgSEVBREVSIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmJvb2xlYW48L3JlcGxhY2VhYmxlPiB8IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5pbnRlZ2VyPC9yZXBsYWNlYWJsZT4gfCBNQVRDSCBdCiAgICAgUVVPVEUgJzxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdW90ZV9jaGFyYWN0ZXI8L3JlcGxhY2VhYmxlPicK ICAgICBFU0NBUEUgJzxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5lc2NhcGVfY2hhcmFj dGVyPC9yZXBsYWNlYWJsZT4nCisgICAgRk9SQ0VfQVJSQVkgWyA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Ym9vbGVhbjwvcmVwbGFjZWFibGU+IF0KICAgICBGT1JDRV9RVU9URSB7ICgg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4g WywgLi4uXSApIHwgKiB9CiAgICAgRk9SQ0VfTk9UX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQog ICAgIEZPUkNFX05VTEwgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5f bmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSB8ICogfQpAQCAtMzY2LDYgKzM2NywxOSBAQCBD T1BZIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2Vh YmxlPiBbICggPHJlcGxhY2VhYmxlCiAgICAgPC9saXN0aXRlbT4KICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICA8dmFybGlzdGVudHJ5IGlkPSJzcWwtY29weS1wYXJhbXMtZm9yY2UtYXJyYXkiPgor ICAgIDx0ZXJtPjxsaXRlcmFsPkZPUkNFX0FSUkFZPC9saXRlcmFsPjwvdGVybT4KKyAgICA8bGlz dGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgRm9yY2Ugb3V0cHV0IG9mIHNxdWFyZSBicmFja2V0 cyBhcyBhcnJheSBkZWNvcmF0aW9ucyBhdCB0aGUgYmVnaW5uaW5nCisgICAgICBhbmQgZW5kIG9m IG91dHB1dCwgYW5kIGNvbW1hcyBiZXR3ZWVuIHRoZSByb3dzLiBJdCBpcyBhbGxvd2VkIG9ubHkg aW4KKyAgICAgIDxjb21tYW5kPkNPUFkgVE88L2NvbW1hbmQ+LCBhbmQgb25seSB3aGVuIHVzaW5n CisgICAgICA8bGl0ZXJhbD5qc29uPC9saXRlcmFsPiBmb3JtYXQuIFRoZSBkZWZhdWx0IGlzCisg ICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3Rp dGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKICAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1jb3B5 LXBhcmFtcy1mb3JjZS1xdW90ZSI+CiAgICAgPHRlcm0+PGxpdGVyYWw+Rk9SQ0VfUVVPVEU8L2xp dGVyYWw+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KQEAgLTExMDMsNiArMTExNywyMiBAQCBDT1BZ IGNvdW50cnkgVE8gU1RET1VUIChERUxJTUlURVIgJ3wnKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+CiAg IDwvcGFyYT4KIAorPHBhcmE+CisgICBXaGVuIHRoZSA8bGl0ZXJhbD5GT1JDRV9BUlJBWTwvbGl0 ZXJhbD4gb3B0aW9uIGlzIGVuYWJsZWQsCisgICB0aGUgZW50aXJlIG91dHB1dCBpcyB3cmFwcGVk IGluIGEgc2luZ2xlIEpTT04gYXJyYXkgd2l0aCByb3dzIHNlcGFyYXRlZCBieSBjb21tYXM6Cis8 cHJvZ3JhbWxpc3Rpbmc+CitDT1BZIChTRUxFQ1QgKiBGUk9NIChWQUxVRVMoMSksKDIpKSB2YWwo aWQpKSBUTyBTVERPVVQgIChGT1JNQVQgSlNPTiwgRk9SQ0VfQVJSQVkpOworPC9wcm9ncmFtbGlz dGluZz4KK1RoZSBvdXRwdXQgaXMgYXMgZm9sbG93czoKKzxzY3JlZW4+CitbCisgeyJpZCI6MX0K Kyx7ImlkIjoyfQorXQorPC9zY3JlZW4+Cis8L3BhcmE+CisKKwogICA8cGFyYT4KICAgIFRvIGNv cHkgZGF0YSBmcm9tIGEgZmlsZSBpbnRvIHRoZSA8bGl0ZXJhbD5jb3VudHJ5PC9saXRlcmFsPiB0 YWJsZToKIDxwcm9ncmFtbGlzdGluZz4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHkuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwppbmRleCAyOWMxMjFjN2YwOC4u ODQyNTRkNDZhNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMKQEAgLTU2OSw2ICs1NjksNyBAQCBQcm9jZXNz Q29weU9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCWJvb2wJCW9uX2Vycm9yX3NwZWNpZmll ZCA9IGZhbHNlOwogCWJvb2wJCWxvZ192ZXJib3NpdHlfc3BlY2lmaWVkID0gZmFsc2U7CiAJYm9v bAkJcmVqZWN0X2xpbWl0X3NwZWNpZmllZCA9IGZhbHNlOworCWJvb2wJCWZvcmNlX2FycmF5X3Nw ZWNpZmllZCA9IGZhbHNlOwogCUxpc3RDZWxsICAgKm9wdGlvbjsKIAogCS8qIFN1cHBvcnQgZXh0 ZXJuYWwgdXNlIGZvciBvcHRpb24gc2FuaXR5IGNoZWNraW5nICovCkBAIC03MjUsNiArNzI2LDEz IEBAIFByb2Nlc3NDb3B5T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJCQkJCWRlZmVs LT5kZWZuYW1lKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBkZWZlbC0+bG9j YXRpb24pKSk7CiAJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiZm9yY2Vf YXJyYXkiKSA9PSAwKQorCQl7CisJCQlpZiAoZm9yY2VfYXJyYXlfc3BlY2lmaWVkKQorCQkJCWVy cm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworCQkJZm9yY2VfYXJyYXlfc3Bl Y2lmaWVkID0gdHJ1ZTsKKwkJCW9wdHNfb3V0LT5mb3JjZV9hcnJheSA9IGRlZkdldEJvb2xlYW4o ZGVmZWwpOworCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgIm9uX2Vycm9y IikgPT0gMCkKIAkJewogCQkJaWYgKG9uX2Vycm9yX3NwZWNpZmllZCkKQEAgLTk2Nyw2ICs5NzUs MTEgQEAgUHJvY2Vzc0NvcHlPcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQllcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCWVycm1zZygiQ09QWSAlcyBt b2RlIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiLCAiSlNPTiIsICJDT1BZIEZST00iKSk7CiAKKwlp ZiAob3B0c19vdXQtPmZvcm1hdCAhPSBDT1BZX0ZPUk1BVF9KU09OICYmIG9wdHNfb3V0LT5mb3Jj ZV9hcnJheSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygiQ09QWSAlcyBjYW4gb25seSBiZSB1c2VkIHdp dGggSlNPTiBtb2RlIiwgIkZPUkNFX0FSUkFZIikpOworCiAJaWYgKG9wdHNfb3V0LT5kZWZhdWx0 X3ByaW50KQogCXsKIAkJaWYgKCFpc19mcm9tKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29weXRvLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5dG8uYwppbmRleCA5ZDhk ODMxODk1Ny4uODVjYTdjOTQ3ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHl0by5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHl0by5jCkBAIC04Nyw2ICs4Nyw3 IEBAIHR5cGVkZWYgc3RydWN0IENvcHlUb1N0YXRlRGF0YQogCUxpc3QJICAgKmF0dG51bWxpc3Q7 CQkvKiBpbnRlZ2VyIGxpc3Qgb2YgYXR0bnVtcyB0byBjb3B5ICovCiAJY2hhcgkgICAqZmlsZW5h bWU7CQkvKiBmaWxlbmFtZSwgb3IgTlVMTCBmb3IgU1RET1VUICovCiAJYm9vbAkJaXNfcHJvZ3Jh bTsJCS8qIGlzICdmaWxlbmFtZScgYSBwcm9ncmFtIHRvIHBvcGVuPyAqLworCWJvb2wJCWpzb25f cm93X2RlbGltX25lZWRlZDsJLyogbmVlZCBkZWxpbWl0ZXIgYmVmb3JlIG5leHQgcm93ICovCiAJ U3RyaW5nSW5mbwlqc29uX2J1ZjsJCS8qIHJldXNhYmxlIGJ1ZmZlciBmb3IgSlNPTiBvdXRwdXQs CiAJCQkJCQkJCSAqIGluaXRpYWxpemVkIGluIEJlZ2luQ29weVRvICovCiAJVHVwbGVEZXNjCXR1 cERlc2M7CQkvKiBEZXNjcmlwdG9yIGZvciBKU09OIG91dHB1dDsgZm9yIGEgY29sdW1uCkBAIC0x NDEsNiArMTQyLDcgQEAgc3RhdGljIHZvaWQgQ29weVRvVGV4dExpa2VPbmVSb3coQ29weVRvU3Rh dGUgY3N0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJIGJvb2wgaXNfY3N2KTsK IHN0YXRpYyB2b2lkIENvcHlUb1RleHRMaWtlRW5kKENvcHlUb1N0YXRlIGNzdGF0ZSk7CiBzdGF0 aWMgdm9pZCBDb3B5VG9Kc29uT25lUm93KENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNs b3QgKnNsb3QpOworc3RhdGljIHZvaWQgQ29weVRvSnNvbkVuZChDb3B5VG9TdGF0ZSBjc3RhdGUp Owogc3RhdGljIHZvaWQgQ29weVRvQmluYXJ5U3RhcnQoQ29weVRvU3RhdGUgY3N0YXRlLCBUdXBs ZURlc2MgdHVwRGVzYyk7CiBzdGF0aWMgdm9pZCBDb3B5VG9CaW5hcnlPdXRGdW5jKENvcHlUb1N0 YXRlIGNzdGF0ZSwgT2lkIGF0dHR5cGlkLCBGbWdySW5mbyAqZmluZm8pOwogc3RhdGljIHZvaWQg Q29weVRvQmluYXJ5T25lUm93KENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOwpAQCAtMTgyLDcgKzE4NCw3IEBAIHN0YXRpYyBjb25zdCBDb3B5VG9Sb3V0aW5lIENvcHlU b1JvdXRpbmVKc29uID0gewogCS5Db3B5VG9TdGFydCA9IENvcHlUb1RleHRMaWtlU3RhcnQsCiAJ LkNvcHlUb091dEZ1bmMgPSBDb3B5VG9UZXh0TGlrZU91dEZ1bmMsCiAJLkNvcHlUb09uZVJvdyA9 IENvcHlUb0pzb25PbmVSb3csCi0JLkNvcHlUb0VuZCA9IENvcHlUb1RleHRMaWtlRW5kLAorCS5D b3B5VG9FbmQgPSBDb3B5VG9Kc29uRW5kLAogfTsKIAogLyogYmluYXJ5IGZvcm1hdCAqLwpAQCAt MjQ4LDYgKzI1MCwxOCBAQCBDb3B5VG9UZXh0TGlrZVN0YXJ0KENvcHlUb1N0YXRlIGNzdGF0ZSwg VHVwbGVEZXNjIHR1cERlc2MpCiAKIAkJQ29weVNlbmRUZXh0TGlrZUVuZE9mUm93KGNzdGF0ZSk7 CiAJfQorCisJaWYgKGNzdGF0ZS0+b3B0cy5mb3JtYXQgPT0gQ09QWV9GT1JNQVRfSlNPTikKKwl7 CisJCS8qCisJCSAqIElmIEZPUkNFX0FSUkFZIGhhcyBiZWVuIHNwZWNpZmllZCwgc2VuZCB0aGUg b3BlbmluZyBicmFja2V0LgorCQkgKi8KKwkJaWYgKGNzdGF0ZS0+b3B0cy5mb3JjZV9hcnJheSkK KwkJeworCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJ1snKTsKKwkJCUNvcHlTZW5kVGV4dExpa2VF bmRPZlJvdyhjc3RhdGUpOworCQl9CisJfQogfQogCiAvKgpAQCAtMzI0LDEzICszMzgsMjQgQEAg Q29weVRvVGV4dExpa2VPbmVSb3coQ29weVRvU3RhdGUgY3N0YXRlLAogCUNvcHlTZW5kVGV4dExp a2VFbmRPZlJvdyhjc3RhdGUpOwogfQogCi0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZW5kIGNh bGxiYWNrIGZvciB0ZXh0LCBDU1YsIGFuZCBqc29uIGZvcm1hdHMgKi8KKy8qIEltcGxlbWVudGF0 aW9uIG9mIHRoZSBlbmQgY2FsbGJhY2sgZm9yIHRleHQgYW5kIENTViBmb3JtYXRzICovCiBzdGF0 aWMgdm9pZAogQ29weVRvVGV4dExpa2VFbmQoQ29weVRvU3RhdGUgY3N0YXRlKQogewogCS8qIE5v dGhpbmcgdG8gZG8gaGVyZSAqLwogfQogCisvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZW5kIGNh bGxiYWNrIGZvciBqc29uIGZvcm1hdCAqLworc3RhdGljIHZvaWQKK0NvcHlUb0pzb25FbmQoQ29w eVRvU3RhdGUgY3N0YXRlKQoreworCWlmIChjc3RhdGUtPm9wdHMuZm9yY2VfYXJyYXkpCisJewor CQlDb3B5U2VuZENoYXIoY3N0YXRlLCAnXScpOworCQlDb3B5U2VuZFRleHRMaWtlRW5kT2ZSb3co Y3N0YXRlKTsKKwl9Cit9CisKIC8qIEltcGxlbWVudGF0aW9uIG9mIHBlci1yb3cgY2FsbGJhY2sg Zm9yIGpzb24gZm9ybWF0ICovCiBzdGF0aWMgdm9pZAogQ29weVRvSnNvbk9uZVJvdyhDb3B5VG9T dGF0ZSBjc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQpAQCAtMzkyLDYgKzQxNywxOCBAQCBD b3B5VG9Kc29uT25lUm93KENvcHlUb1N0YXRlIGNzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp CiAKIAljb21wb3NpdGVfdG9fanNvbihyb3dkYXRhLCBjc3RhdGUtPmpzb25fYnVmLCBmYWxzZSk7 CiAKKwlpZiAoY3N0YXRlLT5vcHRzLmZvcmNlX2FycmF5KQorCXsKKwkJaWYgKGNzdGF0ZS0+anNv bl9yb3dfZGVsaW1fbmVlZGVkKQorCQkJQ29weVNlbmRDaGFyKGNzdGF0ZSwgJywnKTsKKwkJZWxz ZQorCQl7CisJCQkvKiBmaXJzdCByb3cgbmVlZHMgbm8gZGVsaW1pdGVyICovCisJCQlDb3B5U2Vu ZENoYXIoY3N0YXRlLCAnICcpOworCQkJY3N0YXRlLT5qc29uX3Jvd19kZWxpbV9uZWVkZWQgPSB0 cnVlOworCQl9CisJfQorCiAJQ29weVNlbmREYXRhKGNzdGF0ZSwgY3N0YXRlLT5qc29uX2J1Zi0+ ZGF0YSwgY3N0YXRlLT5qc29uX2J1Zi0+bGVuKTsKIAogCUNvcHlTZW5kVGV4dExpa2VFbmRPZlJv dyhjc3RhdGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jIGIv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCmluZGV4IGJiODJiZGJjYzQ4Li4wMDQ1OGNm YjRiYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jCisrKyBiL3Ny Yy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4uYwpAQCAtMTIzMiw3ICsxMjMyLDcgQEAgQ29weV9j b21tb25fb3B0aW9ucywgIkRFRkFVTFQiLCAiRk9SQ0VfTk9UX05VTEwiLCAiRk9SQ0VfTlVMTCIs ICJGUkVFWkUiLCBcCiAKIC8qIENPUFkgVE8gb3B0aW9ucyAqLwogI2RlZmluZSBDb3B5X3RvX29w dGlvbnMgXAotQ29weV9jb21tb25fb3B0aW9ucywgIkZPUkNFX1FVT1RFIgorQ29weV9jb21tb25f b3B0aW9ucywgIkZPUkNFX1FVT1RFIiwgIkZPUkNFX0FSUkFZIgogCiAvKgogICogVGhlc2Ugb2Jq ZWN0IHR5cGVzIHdlcmUgaW50cm9kdWNlZCBsYXRlciB0aGFuIG91ciBzdXBwb3J0IGN1dG9mZiBv ZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvY29weS5oCmluZGV4IDJiNWJlZjY3MzhlLi5hYmVjZmU1MTA5OCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRz L2NvcHkuaApAQCAtODgsNiArODgsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3B5Rm9ybWF0T3B0aW9u cwogCUxpc3QJICAgKmZvcmNlX25vdG51bGw7CS8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzICovCiAJ Ym9vbAkJZm9yY2Vfbm90bnVsbF9hbGw7CS8qIEZPUkNFX05PVF9OVUxMICo/ICovCiAJYm9vbAkg ICAqZm9yY2Vfbm90bnVsbF9mbGFnczsJLyogcGVyLWNvbHVtbiBDU1YgRk5OIGZsYWdzICovCisJ Ym9vbAkJZm9yY2VfYXJyYXk7CS8qIGFkZCBKU09OIGFycmF5IGRlY29yYXRpb25zICovCiAJTGlz dAkgICAqZm9yY2VfbnVsbDsJCS8qIGxpc3Qgb2YgY29sdW1uIG5hbWVzICovCiAJYm9vbAkJZm9y Y2VfbnVsbF9hbGw7IC8qIEZPUkNFX05VTEwgKj8gKi8KIAlib29sCSAgICpmb3JjZV9udWxsX2Zs YWdzOwkvKiBwZXItY29sdW1uIENTViBGTiBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29w eS5vdXQKaW5kZXggOWI2Njc1NDQ5MDUuLmJjZjQ1ODQ1YjYxIDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2NvcHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29weS5vdXQKQEAgLTgzLDYgKzgzLDE2IEBAIGNvcHkgKHNlbGVjdCAxIGFzIGZvbyB1bmlv biBhbGwgc2VsZWN0IDIpIHRvIHN0ZG91dCB3aXRoIChmb3JtYXQganNvbik7CiBjb3B5ICh2YWx1 ZXMgKDEpLCAoMikpIFRPIHN0ZG91dCB3aXRoIChmb3JtYXQganNvbik7CiB7ImNvbHVtbjEiOjF9 CiB7ImNvbHVtbjEiOjJ9Citjb3B5IChzZWxlY3QgMSB1bmlvbiBhbGwgc2VsZWN0IDIpIHRvIHN0 ZG91dCB3aXRoIChmb3JtYXQganNvbiwgZm9yY2VfYXJyYXkgdHJ1ZSk7CitbCisgeyI/Y29sdW1u PyI6MX0KKyx7Ij9jb2x1bW4/IjoyfQorXQorY29weSAodmFsdWVzICgxKSwgKDIpKSBUTyBzdGRv dXQgd2l0aCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IHRydWUpOworWworIHsiY29sdW1uMSI6 MX0KKyx7ImNvbHVtbjEiOjJ9CitdCiBjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCBqc29uOwogeyJz dHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQogeyJzdHlsZSI6IlVu aXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9CkBAIC0xMzQsNiArMTQ0LDI5IEBAIGNv cHkgY29weXRlc3QgKHN0eWxlLCB0ZXN0LCBmaWxsZXIpIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24p OwogeyJzdHlsZSI6IlVuaXgiLCJ0ZXN0IjoiYWJjXG5kZWYiLCJmaWxsZXIiOjJ9CiB7InN0eWxl IjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIiwiZmlsbGVyIjozfQogeyJzdHlsZSI6ImVzY1xcYXBl IiwidGVzdCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CistLSBzaG91bGQgZmFpbDog Zm9yY2VfYXJyYXkgcmVxdWlyZXMganNvbiBmb3JtYXQKK2NvcHkgY29weXRlc3QgdG8gc3Rkb3V0 IChmb3JtYXQgY3N2LCBmb3JjZV9hcnJheSB0cnVlKTsKK0VSUk9SOiAgQ09QWSBGT1JDRV9BUlJB WSBjYW4gb25seSBiZSB1c2VkIHdpdGggSlNPTiBtb2RlCistLSBmb3JjZV9hcnJheSB2YXJpYW50 cworY29weSBjb3B5dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSk7Citb CisgeyJzdHlsZSI6IkRPUyIsInRlc3QiOiJhYmNcclxuZGVmIiwiZmlsbGVyIjoxfQorLHsic3R5 bGUiOiJVbml4IiwidGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQorLHsic3R5bGUiOiJNYWMi LCJ0ZXN0IjoiYWJjXHJkZWYiLCJmaWxsZXIiOjN9CisseyJzdHlsZSI6ImVzY1xcYXBlIiwidGVz dCI6ImFcXHJcXFxyXFxcblxcbmIiLCJmaWxsZXIiOjR9CitdCitjb3B5IGNvcHl0ZXN0KHN0eWxl LCB0ZXN0KSB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSB0cnVlKTsKK1sKKyB7 InN0eWxlIjoiRE9TIiwidGVzdCI6ImFiY1xyXG5kZWYifQorLHsic3R5bGUiOiJVbml4IiwidGVz dCI6ImFiY1xuZGVmIn0KKyx7InN0eWxlIjoiTWFjIiwidGVzdCI6ImFiY1xyZGVmIn0KKyx7InN0 eWxlIjoiZXNjXFxhcGUiLCJ0ZXN0IjoiYVxcclxcXHJcXFxuXFxuYiJ9CitdCitjb3B5IGNvcHl0 ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IGZhbHNlKTsKK3sic3R5bGUi OiJET1MiLCJ0ZXN0IjoiYWJjXHJcbmRlZiIsImZpbGxlciI6MX0KK3sic3R5bGUiOiJVbml4Iiwi dGVzdCI6ImFiY1xuZGVmIiwiZmlsbGVyIjoyfQoreyJzdHlsZSI6Ik1hYyIsInRlc3QiOiJhYmNc cmRlZiIsImZpbGxlciI6M30KK3sic3R5bGUiOiJlc2NcXGFwZSIsInRlc3QiOiJhXFxyXFxcclxc XG5cXG5iIiwiZmlsbGVyIjo0fQogLS0gY29sdW1uIGxpc3Qgd2l0aCBkaXZlcnNlIGRhdGEgdHlw ZXMKIGNyZWF0ZSB0ZW1wIHRhYmxlIGNvcHlqc29udGVzdF90eXBlcyAoCiAgICAgaWQgaW50LApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weS5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9jb3B5LnNxbAppbmRleCA0MDRmNDMyMTA4NS4uYmMxMmFjODc5ZWYgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHkuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2NvcHkuc3FsCkBAIC04Niw2ICs4Niw4IEBAIGNvcHkgY29weXRlc3QzIHRvIHN0ZG91dCBj c3YgaGVhZGVyOwogY29weSAoc2VsZWN0IDEgdW5pb24gYWxsIHNlbGVjdCAyKSB0byBzdGRvdXQg d2l0aCAoZm9ybWF0IGpzb24pOwogY29weSAoc2VsZWN0IDEgYXMgZm9vIHVuaW9uIGFsbCBzZWxl Y3QgMikgdG8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29uKTsKIGNvcHkgKHZhbHVlcyAoMSksICgy KSkgVE8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29uKTsKK2NvcHkgKHNlbGVjdCAxIHVuaW9uIGFs bCBzZWxlY3QgMikgdG8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSB0cnVl KTsKK2NvcHkgKHZhbHVlcyAoMSksICgyKSkgVE8gc3Rkb3V0IHdpdGggKGZvcm1hdCBqc29uLCBm b3JjZV9hcnJheSB0cnVlKTsKIGNvcHkgY29weXRlc3QgdG8gc3Rkb3V0IGpzb247CiBjb3B5IGNv cHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGpzb24pOwogY29weSAoc2VsZWN0ICogZnJvbSBjb3B5 dGVzdCkgdG8gc3Rkb3V0IChmb3JtYXQganNvbik7CkBAIC0xMDksNiArMTExLDE0IEBAIGNvcHkg Y29weXRlc3QgZnJvbSBzdGRpbihmb3JtYXQganNvbik7CiAtLSBjb2x1bW4gbGlzdCB3aXRoIGpz b24gZm9ybWF0CiBjb3B5IGNvcHl0ZXN0IChzdHlsZSwgdGVzdCwgZmlsbGVyKSB0byBzdGRvdXQg KGZvcm1hdCBqc29uKTsKIAorLS0gc2hvdWxkIGZhaWw6IGZvcmNlX2FycmF5IHJlcXVpcmVzIGpz b24gZm9ybWF0Citjb3B5IGNvcHl0ZXN0IHRvIHN0ZG91dCAoZm9ybWF0IGNzdiwgZm9yY2VfYXJy YXkgdHJ1ZSk7CisKKy0tIGZvcmNlX2FycmF5IHZhcmlhbnRzCitjb3B5IGNvcHl0ZXN0IHRvIHN0 ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5KTsKK2NvcHkgY29weXRlc3Qoc3R5bGUsIHRl c3QpIHRvIHN0ZG91dCAoZm9ybWF0IGpzb24sIGZvcmNlX2FycmF5IHRydWUpOworY29weSBjb3B5 dGVzdCB0byBzdGRvdXQgKGZvcm1hdCBqc29uLCBmb3JjZV9hcnJheSBmYWxzZSk7CisKIC0tIGNv bHVtbiBsaXN0IHdpdGggZGl2ZXJzZSBkYXRhIHR5cGVzCiBjcmVhdGUgdGVtcCB0YWJsZSBjb3B5 anNvbnRlc3RfdHlwZXMgKAogICAgIGlkIGludCwKLS0gCjIuMzQuMQoK --000000000000ac7966064c8f482d--