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.94.2) (envelope-from ) id 1tiq8Z-002rpX-HV for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Feb 2025 07:29:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tiq8W-004kEI-LO for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Feb 2025 07:29:21 +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.94.2) (envelope-from ) id 1tiq8W-004kC6-8B for pgsql-hackers@lists.postgresql.org; Fri, 14 Feb 2025 07:29:21 +0000 Received: from mail-yw1-x112a.google.com ([2607:f8b0:4864:20::112a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tiq8U-000lHr-1u for pgsql-hackers@lists.postgresql.org; Fri, 14 Feb 2025 07:29:20 +0000 Received: by mail-yw1-x112a.google.com with SMTP id 00721157ae682-6f9e95c66fdso13427417b3.3 for ; Thu, 13 Feb 2025 23:29:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739518157; x=1740122957; darn=lists.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=EIOrEHVWeu/xVgm5kfTEymlhn11zuuw1ui+GiH83N5s=; b=d6cZ4Xj5SXKBrh3ICoM2ygUl8Sd5heh96xGP14/Jc0SF+Mqum3OjTEGO8KTgQlNBnC JycBiBIqac/lqyniHq/P0iBYYwIzPVRq088qiBR/elQXsKEd2gVunRGMZluw/0eqrdbE UouXzR4jRd58zb1A/EgzquhUFEyzxcmja6QazPGP+Ub8LwN3VcJYag3+444T7esRzk9u Bda6BeE2wy42UMC/97YtFeA3LljAuyXcGku5XLcn82nty5dR8KtzFRUg6/dk3D3dS5f1 wokrK1OZ1eyKBpdYDIeMmM68ZAFXpIEBb9xSgkBXhgPiEfC3pCEtq19aH81kdE8hT4wE sM2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739518157; x=1740122957; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=EIOrEHVWeu/xVgm5kfTEymlhn11zuuw1ui+GiH83N5s=; b=t0HQmVEzBC2zUgaWTyCatK9+Ltin0xrKBZO3201DaacSuQwdakjA/qC/3bTkTmDd2f y1w8tsSb+tNjusqP4zzj6V9JPsPvwMNLMtJIcDqbnN/pAQ1zgoNR8Qaimx7vsM3GqikB Ic4npHZ2+yU1KPCjzj5NEJI8FX3G/WApAFkNz0aE9Y+ew0+HMWVV97NRc6BGXZNerqIE DHeUPN5Nf+p/U3jmCqGlP3p5uIPwDw7KkUVdRrdbUZN+YB0Lsm/l4wv+OwTGqt1H6vLm Xvs90tzlPpxXaJYo02UM3get48TwtA0fzdktOdMmsJbNLuyJEKWsVnXarb+VLVx3Sb05 YLcQ== X-Forwarded-Encrypted: i=1; AJvYcCW2kz0mDAWexZpT+Cqqmir/mHJcmGx/4R9FbAkHZDi+cCcVHcEsQOT+0VPyX8Y29jtpT67bTJqZ2nortL10@lists.postgresql.org X-Gm-Message-State: AOJu0YzqM9mMaMB1DRCNEwD7FbS4BGD6DuhC9mtOCKUBQKUS25lS4lR9 /AJJLqvtViVXmBI4EZ4qV8q3lAl84nO3W8Mc/nAhLJnb05NxZaJHtDtBMdcB89nrqOL27be8f+l Dqd6xKo1aQNI1ezrDJ+1lBppi1Yw= X-Gm-Gg: ASbGncsUR4eDOgDgfPWnCRRitIFF5EJdxgND+cfKHvj7tO/Omjygp+bOEgcPPPi5lz5 tmcgPTanI7s/klqcaR6MiaLHKB1gC3zrt/qJFbDyVKFRxfxLJbUo4pcG4ORVZQypyFs3wyECiDj 4= X-Google-Smtp-Source: AGHT+IG/SXmpoI/F5LbjM+c7F6e30fkEJUP9Mw0Sgi2bRo5cOcuxqcC7fNAzSbrdaNCZKwHPIBvtV592PVM0oDf5OWQ= X-Received: by 2002:a05:690c:6c0f:b0:6f9:8d47:35b8 with SMTP id 00721157ae682-6fb32c9c939mr65999877b3.13.1739518156841; Thu, 13 Feb 2025 23:29:16 -0800 (PST) MIME-Version: 1.0 References: <202502050844.4lrgg3aoudat@alvherre.pgsql> In-Reply-To: From: Shlok Kyal Date: Fri, 14 Feb 2025 12:59:05 +0530 X-Gm-Features: AWEUYZntG6KnyQdXTz4awhn_26P2Jl5g8IieBYN0acC7KnChZaJ6HBPD7O8OZkM Message-ID: Subject: Re: Restrict publishing of partitioned table with a foreign table as partition To: vignesh C Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Sergey Tatarintsev , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000d21a75062e1521dc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d21a75062e1521dc Content-Type: text/plain; charset="UTF-8" On Thu, 13 Feb 2025 at 20:12, vignesh C wrote: > > On Thu, 13 Feb 2025 at 15:50, Shlok Kyal wrote: > > > > > > I have fixed the issue. Attached the updated v6 patch. > > There is another concurrency issue: > In case of create publication for all tables with > publish_via_partition_root we will call check_foreign_tables: > @@ -876,6 +876,10 @@ CreatePublication(ParseState *pstate, > CreatePublicationStmt *stmt) > /* Associate objects with the publication. */ > if (stmt->for_all_tables) > { > + /* Check if any foreign table is a part of partitioned table */ > + if (publish_via_partition_root) > + check_foreign_tables(stmt->pubname); > > At the time of check in check_foreign_tables, there are no foreign > tables so this check will be successful: > +check_foreign_tables_in_schema(Oid schemaid, char *pubname) > +{ > + Relation classRel; > + ScanKeyData key[2]; > + TableScanDesc scan; > + HeapTuple tuple; > + > + classRel = table_open(RelationRelationId, AccessShareLock); > + > + ScanKeyInit(&key[0], > + Anum_pg_class_relnamespace, > + BTEqualStrategyNumber, F_OIDEQ, > + schemaid); > + ScanKeyInit(&key[1], > + Anum_pg_class_relkind, > + BTEqualStrategyNumber, F_CHAREQ, > + CharGetDatum(RELKIND_PARTITIONED_TABLE)); > + > + scan = table_beginscan_catalog(classRel, 2, key); > + while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) > > Now immediately after execution of this, create a foreign table: > postgres=# CREATE FOREIGN TABLE part22 PARTITION OF part2 FOR VALUES > FROM (10) TO (15) SERVER fdw; > CREATE FOREIGN TABLE > > And then continue execution of create publication, it will also be successful: > postgres=# create publication pub1 for all tables with ( > publish_via_partition_root =true); > CREATE PUBLICATION > > One probable way to fix this is to do the search similar to > check_foreign_tables_in_schema where we can skip including schemaid > key for all tables. > > How about something like the attached patch. > Hi Vignesh, I have used the changes suggested by you. Also I have updated the comments and the function name. Thanks and Regards, Shlok Kyal --000000000000d21a75062e1521dc Content-Type: application/octet-stream; name="v7-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Disposition: attachment; filename="v7-0001-Restrict-publishing-of-partitioned-table-with-for.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m74g64ct0 RnJvbSBhNzUyOGJhMjdjN2RiZDMxNTljOTQzNjNjNjUwZjk2NzRhNjNkNWUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTaGxvayBLeWFsIDxzaGxvay5reWFsLm9zc0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMTEgRmViIDIwMjUgMTU6MzI6NTUgKzA1MzAKU3ViamVjdDogW1BBVENIIHY3 XSBSZXN0cmljdCBwdWJsaXNoaW5nIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9yZWlnbgog cGFydGl0aW9uCgpMb2dpY2FsIHJlcGxpY2F0aW9uIG9mIGZvcmVpZ24gdGFibGUgaXMgbm90IHN1 cHBvcnRlZCBhbmQgd2UgdGhyb3cgYW4KZXJyb3IgaW4gdGhpcyBjYXNlLiBCdXQgd2hlbiBjcmVh dGUgYSBwdWJsaWNhdGlvbiBvbiBhIHBhcnRpdGlvbmVkCnRhYmxlIHRoYXQgaGFzIGEgZm9yZWln biBwYXJ0aXRpb24sIHRoZSBpbml0aWFsIHN5bmMgb2Ygc3VjaCB0YWJsZSBpcwpzdWNjZXNzZnVs IGFuZCB3ZSBzaG91bGQgYXZvaWQgc3VjaCBjYXNlcy4KCkN1cnJlbnQgQmVoYXZpb3VyLCB3aGVu IHB1YmxpY2F0aW9uIGlzIGNyZWF0ZWQ6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlClJvb3QgdGFibGUgaXMgcHVibGlzaGVkIGFuZCB0aGUgaW5pdGlhbCBkYXRhIG9m IGZvcmVpZ24gcGFydGl0aW9ucwphcmUgcmVwbGljYXRlZC4KCjIuIHdpdGggcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQgRk9SIEFMTCBUQUJMRVMKQWxsIGxlYWYgdGFibGVz IGV4Y2VwdCBmb3JlaWduIHBhcnRpdGlvbnMgYXJlIHB1Ymxpc2hlZC4KCjMuIHdpdGggcHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBhbmQKRk9SIFRBQkxFLyBGT1IgVEFCTEVTIElO IFNDSEVNQQpBbGwgbGVhZiB0YWJsZXMgYXJlIHB1Ymxpc2hlZC4gSW5pdGlhbCBkYXRhIG9mIGZv cmVpZ24gcGFydGl0aW9ucyBhcmUKcmVwbGljYXRlZC4KCldpdGggdGhpcyBwYXRjaCB3ZSBoYXZl IGZvbGxvd2luZyBiZWhhdmlvdXI6CjEuIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlCldlIHRocm93IGFuIGVycm9yIHdoZW4gd2UgdHJ5IHRvIHB1Ymxpc2ggYSBmb3JlaWdu IHBhcnRpdGl0b24uIEVycm9yCmlzIHRocm93biB3aGVuIHdlIHRyeSB0byBjcmVhdGUgYSBwdWJs aWNhdGlvbiBvbiAob3IgYWRkIHRvIGV4aXN0aW5nCnB1YmxpY2F0aW9uKSBhIHBhcnRpdGlvbmVk IHRhYmxlIHdpdGggZm9yZWlnbiBwYXJ0aXRpb24sIHdoZW4gdHJ5IHRvCmNyZWF0ZSBhIGZvcmVp Z24gcGFydGl0aW9uIGFuZCB3aGVuIHdlIHRyeSB0byBhdHRhY2ggZm9yZWlnbiB0YWJsZSAob3IK YSB0YWJsZSB3aXRoIGZvcmVpZ24gcGFydGl0aW9uKSB0byBleGlzdGluZyBwdWJsaXNoZWQgdGFi bGVzLgoKMi4gd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCldlIHNraXAg cHVibGlzaGluZyBmb3JlaWduIHBhcnRpdGlvbiB3aGljaCBhcmUgcGFydCBvZiB0aGUgcHVibGlj YXRpb24uClRoaXMgaXMgZG9uZSBieSBhdm9pZCBhZGRpbmcgZm9yZWlnbiBwYXJ0aXRpb25zIGlu IHBnX3N1YnNjcmlwdGlvbl9yZWwKY2F0YWxvZyB0YWJsZS4KLS0tCiBzcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICB8IDE0NiArKysrKysrKysrKysrKysrKysrLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5jICAgICAgICB8ICA0NyArKysrKysrCiBz cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICB8ICA0NyArKysrKysrCiBz cmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICB8ICA1MyArKysrKysrKwog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgfCAgIDUgKwogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgfCAgODkgKysrKysrKysrKysrKwog c3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsICAgICAgfCAgODEgKysrKysrKysr KysrCiA3IGZpbGVzIGNoYW5nZWQsIDQ1MSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggZDZmOTRkYjVkOS4uMmRmMmIx ZDk0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisr KyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAtNTMsNyArNTMsNyBA QCB0eXBlZGVmIHN0cnVjdAogICogZXJyb3IgaWYgbm90LgogICovCiBzdGF0aWMgdm9pZAotY2hl Y2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKFJlbGF0aW9uIHRhcmdldHJlbCkKK2NoZWNrX3B1 YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRyZWwsIFB1YmxpY2F0aW9uICpw dWIpCiB7CiAJLyogTXVzdCBiZSBhIHJlZ3VsYXIgb3IgcGFydGl0aW9uZWQgdGFibGUgKi8KIAlp ZiAoUmVsYXRpb25HZXRGb3JtKHRhcmdldHJlbCktPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElP TiAmJgpAQCAtNjQsNiArNjQsMTkgQEAgY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKFJl bGF0aW9uIHRhcmdldHJlbCkKIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRhcmdldHJl bCkpLAogCQkJCSBlcnJkZXRhaWxfcmVsa2luZF9ub3Rfc3VwcG9ydGVkKFJlbGF0aW9uR2V0Rm9y bSh0YXJnZXRyZWwpLT5yZWxraW5kKSkpOwogCisJLyoKKwkgKiBwdWJsaXNoX3ZpYV9yb290X3Bh cnRpdGlvbiBjYW5ub3QgYmUgdHJ1ZSBpZiBpdCBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlCisJICog YW5kIGhhcyBhbnkgZm9yZWlnbiBwYXJ0aXRpb24KKwkgKi8KKwlpZiAocHViLT5wdWJ2aWFyb290 ICYmCisJCWNoZWNrX3BhcnRyZWxfaGFzX2ZvcmVpZ25fdGFibGUoUmVsYXRpb25HZXRGb3JtKHRh cmdldHJlbCkpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImNhbm5vdCBzZXQgcGFyYW1ldGVyIFwi JXNcIiB0byB0cnVlIGZvciBwdWJsaWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJInB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290IiwgcHViLT5uYW1lKSwKKwkJCQkgZXJyZGV0YWlsKCJwYXJ0aXRpb24g dGFibGUgXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24i LAorCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVsKSkpKTsKKwogCS8q IENhbid0IGJlIHN5c3RlbSB0YWJsZSAqLwogCWlmIChJc0NhdGFsb2dSZWxhdGlvbih0YXJnZXRy ZWwpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMzA0LDcgKzMxNyw3IEBAIGNoZWNrX2FuZF9mZXRj aF9jb2x1bW5fbGlzdChQdWJsaWNhdGlvbiAqcHViLCBPaWQgcmVsaWQsIE1lbW9yeUNvbnRleHQg bWN4dCwKIAogLyoKICAqIEdldHMgdGhlIHJlbGF0aW9ucyBiYXNlZCBvbiB0aGUgcHVibGljYXRp b24gcGFydGl0aW9uIG9wdGlvbiBmb3IgYSBzcGVjaWZpZWQKLSAqIHJlbGF0aW9uLgorICogcmVs YXRpb24uIEZvcmVpZ24gdGFibGVzIGFyZSBub3QgaW5jbHVkZWQuCiAgKi8KIExpc3QgKgogR2V0 UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKExpc3QgKnJlc3VsdCwgUHVibGljYXRpb25QYXJ0 T3B0IHB1Yl9wYXJ0b3B0LApAQCAtMzEzLDI1ICszMjYsMjEgQEAgR2V0UHViUGFydGl0aW9uT3B0 aW9uUmVsYXRpb25zKExpc3QgKnJlc3VsdCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0 LAogCWlmIChnZXRfcmVsX3JlbGtpbmQocmVsaWQpID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUgJiYKIAkJcHViX3BhcnRvcHQgIT0gUFVCTElDQVRJT05fUEFSVF9ST09UKQogCXsKLQkJTGlz dAkgICAqYWxsX3BhcnRzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhyZWxpZCwgTm9Mb2NrLAotCQkJ CQkJCQkJCQkJCU5VTEwpOworCQlMaXN0CSAgICphbGxfcGFydHMgPSBmaW5kX2FsbF9pbmhlcml0 b3JzKHJlbGlkLCBOb0xvY2ssIE5VTEwpOwogCi0JCWlmIChwdWJfcGFydG9wdCA9PSBQVUJMSUNB VElPTl9QQVJUX0FMTCkKLQkJCXJlc3VsdCA9IGxpc3RfY29uY2F0KHJlc3VsdCwgYWxsX3BhcnRz KTsKLQkJZWxzZSBpZiAocHViX3BhcnRvcHQgPT0gUFVCTElDQVRJT05fUEFSVF9MRUFGKQorCQlm b3JlYWNoX29pZChwYXJ0T2lkLCBhbGxfcGFydHMpCiAJCXsKLQkJCUxpc3RDZWxsICAgKmxjOwor CQkJY2hhcgkJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZChwYXJ0T2lkKTsKIAotCQkJZm9yZWFj aChsYywgYWxsX3BhcnRzKQotCQkJewotCQkJCU9pZAkJCXBhcnRPaWQgPSBsZmlyc3Rfb2lkKGxj KTsKKwkJCWlmIChyZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCQljb250aW51 ZTsKIAotCQkJCWlmIChnZXRfcmVsX3JlbGtpbmQocGFydE9pZCkgIT0gUkVMS0lORF9QQVJUSVRJ T05FRF9UQUJMRSkKLQkJCQkJcmVzdWx0ID0gbGFwcGVuZF9vaWQocmVzdWx0LCBwYXJ0T2lkKTsK LQkJCX0KKwkJCWlmIChwdWJfcGFydG9wdCA9PSBQVUJMSUNBVElPTl9QQVJUX0xFQUYgJiYKKwkJ CQlyZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJY29udGludWU7CisK KwkJCXJlc3VsdCA9IGxhcHBlbmRfb2lkKHJlc3VsdCwgcGFydE9pZCk7CiAJCX0KLQkJZWxzZQot CQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAJZWxzZQogCQlyZXN1bHQgPSBsYXBwZW5kX29pZChyZXN1 bHQsIHJlbGlkKTsKQEAgLTQ2Myw3ICs0NzIsNyBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24o T2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHRhcmdldHJlbCksIHB1Yi0+bmFtZSkpKTsKIAl9CiAKLQljaGVja19wdWJsaWNh dGlvbl9hZGRfcmVsYXRpb24odGFyZ2V0cmVsKTsKKwljaGVja19wdWJsaWNhdGlvbl9hZGRfcmVs YXRpb24odGFyZ2V0cmVsLCBwdWIpOwogCiAJLyogVmFsaWRhdGUgYW5kIHRyYW5zbGF0ZSBjb2x1 bW4gbmFtZXMgaW50byBhIEJpdG1hcHNldCBvZiBhdHRudW1zLiAqLwogCWF0dG51bXMgPSBwdWJf Y29sbGlzdF92YWxpZGF0ZShwcmktPnJlbGF0aW9uLCBwcmktPmNvbHVtbnMpOwpAQCAtNzAzLDYg KzcxMiwxMyBAQCBwdWJsaWNhdGlvbl9hZGRfc2NoZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlk LCBib29sIGlmX25vdF9leGlzdHMpCiAKIAljaGVja19wdWJsaWNhdGlvbl9hZGRfc2NoZW1hKHNj aGVtYWlkKTsKIAorCS8qCisJICogSWYgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgdHJ1 ZSwgY2hlY2sgaWYgc2NoZW1hIGhhcyBhbnkgZm9yZWlnbgorCSAqIHBhcnRpdGlvbgorCSAqLwor CWlmIChwdWItPnB1YnZpYXJvb3QpCisJCWNoZWNrX2ZvcmVpZ25fdGFibGVzKHNjaGVtYWlkLCBw dWItPm5hbWUpOworCiAJLyogRm9ybSBhIHR1cGxlICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6 ZW9mKHZhbHVlcykpOwogCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpAQCAt MTMzMiwzICsxMzQ4LDk5IEBAIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05f QVJHUykKIAogCVNSRl9SRVRVUk5fRE9ORShmdW5jY3R4KTsKIH0KKworLyogQ2hlY2sgaWYgYSBw YXJ0aXRpb25lZCB0YWJsZSBoYXMgYSBmb3JlaWduIHBhcnRpdGlvbiAqLworYm9vbAorY2hlY2tf cGFydHJlbF9oYXNfZm9yZWlnbl90YWJsZShGb3JtX3BnX2NsYXNzIHJlbGZvcm0pCit7CisJYm9v bAkJaGFzX2ZvcmVpZ25fdGJsID0gZmFsc2U7CisKKwlpZiAocmVsZm9ybS0+cmVsa2luZCA9PSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJTGlzdAkgICAqcmVsaWRzID0gTklMOwor CisJCXJlbGlkcyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocmVsZm9ybS0+b2lkLCBOb0xvY2ssIE5V TEwpOworCisJCWZvcmVhY2hfb2lkKHJlbGlkLCByZWxpZHMpCisJCXsKKwkJCVJlbGF0aW9uCXJl bCA9IHRhYmxlX29wZW4ocmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCWlmIChSZWxhdGlv bkdldEZvcm0ocmVsKS0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisJCQkJaGFz X2ZvcmVpZ25fdGJsID0gdHJ1ZTsKKworCQkJdGFibGVfY2xvc2UocmVsLCBOb0xvY2spOworCisJ CQlpZiAoaGFzX2ZvcmVpZ25fdGJsKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGhh c19mb3JlaWduX3RibDsKK30KKworLyoKKyAqIElmIHZhbGlkIHNjaGVtYWlkIHByb3ZpZGVkLCBj aGVjayBpZiB0aGUgc2NoZW1hIGhhcyBhIHBhcnRpdGlvbiB0YWJsZSB3aGljaAorICogaGFzIGEg Zm9yZWlnbiBwYXJ0aXRpb24uIFRoZSBwYXJ0aXRpb24gdGFibGVzIGluIGEgc2NoZW1hIGNhbiBo YXZlIHBhcnRpdGlvbnMKKyAqIGluIG90aGVyIHNjaGVtYS4gV2UgYWxzbyBuZWVkIHRvIGNoZWNr IGlmIHN1Y2ggcGFydGl0aW9ucyBhcmUgZm9yZWlnbgorICogcGFydGl0aW9uLgorICoKKyAqIElm IHZhbGlkIHNjaGVtYWlkIGlzIG5vdCBwcm92aWRlZCwgd2UgZ2V0IGFsbCBwYXJ0aXRpb24gdGFi bGVzIGFuZCBjaGVjayBpZgorICogaXQgaGFzIGFueSBmb3JlaWduIHBhcnRpdGlvbi4gV2UgdGFr ZSBhIGxvY2sgb24gcGFydGl0aW9uIHRhYmxlcyBzbyBubyBuZXcKKyAqIGZvcmVpZ24gcGFydGl0 aW9ucyBhcmUgYWRkZWQgY29uY3VycmVudGx5LgorICovCit2b2lkCitjaGVja19mb3JlaWduX3Rh YmxlcyhPaWQgc2NoZW1haWQsIGNoYXIgKnB1Ym5hbWUpCit7CisJUmVsYXRpb24JY2xhc3NSZWw7 CisJU2NhbktleURhdGEga2V5WzJdOworCWludAkJCWtleWNvdW50ID0gMDsKKwlUYWJsZVNjYW5E ZXNjIHNjYW47CisJSGVhcFR1cGxlCXR1cGxlOworCisJY2xhc3NSZWwgPSB0YWJsZV9vcGVuKFJl bGF0aW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlb a2V5Y291bnQrK10sCisJCQkJQW51bV9wZ19jbGFzc19yZWxraW5kLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9DSEFSRVEsCisJCQkJQ2hhckdldERhdHVtKFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpKTsKKworCWlmIChPaWRJc1ZhbGlkKHNjaGVtYWlkKSkKKwkJU2NhbktleUluaXQo JmtleVtrZXljb3VudCsrXSwKKwkJCQkJQW51bV9wZ19jbGFzc19yZWxuYW1lc3BhY2UsCisJCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJc2NoZW1haWQpOworCisJc2Nh biA9IHRhYmxlX2JlZ2luc2Nhbl9jYXRhbG9nKGNsYXNzUmVsLCBrZXljb3VudCwga2V5KTsKKwl3 aGlsZSAoKHR1cGxlID0gaGVhcF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkg IT0gTlVMTCkKKwl7CisJCUZvcm1fcGdfY2xhc3MgcmVsRm9ybSA9IChGb3JtX3BnX2NsYXNzKSBH RVRTVFJVQ1QodHVwbGUpOworCisJCWlmIChjaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxl KHJlbEZvcm0pKQorCQl7CisJCQlMaXN0CSAgICphbmNlc3RvcnMgPSBnZXRfcGFydGl0aW9uX2Fu Y2VzdG9ycyhyZWxGb3JtLT5vaWQpOworCQkJT2lkCQkJcGFyZW50X29pZCA9IHJlbEZvcm0tPm9p ZDsKKwkJCWNoYXIJICAgKnBhcmVudF9uYW1lOworCisJCQlmb3JlYWNoX29pZChhbmNlc3Rvciwg YW5jZXN0b3JzKQorCQkJeworCQkJCU9pZAkJCWFuY2VzdG9yX3NjaGVtYWlkID0gZ2V0X3JlbF9u YW1lc3BhY2UoYW5jZXN0b3IpOworCisJCQkJaWYgKGFuY2VzdG9yX3NjaGVtYWlkID09IHNjaGVt YWlkKQorCQkJCQlwYXJlbnRfb2lkID0gYW5jZXN0b3I7CisJCQl9CisKKwkJCWxpc3RfZnJlZShh bmNlc3RvcnMpOworCQkJcGFyZW50X25hbWUgPSBnZXRfcmVsX25hbWUocGFyZW50X29pZCk7CisK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0IHBhcmFtZXRlciBcIiVzXCIgdG8g dHJ1ZSBmb3IgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkicHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QiLCBwdWJuYW1lKSwKKwkJCQkJIGVycmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwi JXNcIiBpbiBwdWJsaWNhdGlvbiBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uIiwKKwkJCQkJ CQkgICBwYXJlbnRfbmFtZSkpKTsKKwkJfQorCX0KKworCXRhYmxlX2VuZHNjYW4oc2Nhbik7CisJ dGFibGVfY2xvc2UoY2xhc3NSZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Zm9yZWlnbmNtZHMuYwppbmRleCBjMTRlMDM4ZDU0Li5mNDFhMjRhZWEzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9mb3JlaWduY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2ZvcmVpZ25jbWRzLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2Rl cGVuZGVuY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9vYmplY3RhY2Nlc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BhcnRpdGlvbi5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19mb3JlaWduX3Rh YmxlLmgiCkBAIC0xNDIzLDYgKzE0MjQsNTIgQEAgQ3JlYXRlRm9yZWlnblRhYmxlKENyZWF0ZUZv cmVpZ25UYWJsZVN0bXQgKnN0bXQsIE9pZCByZWxpZCkKIAogCWZ0cmVsID0gdGFibGVfb3BlbihG b3JlaWduVGFibGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCS8qCisJICogQ2hl Y2sgaWYgaXQgaXMgYSBmb3JlaWduIHBhcnRpdGlvbiBhbmQgdGhlIHBhcnRpdGlvbmVkIHRhYmxl IGlzIG5vdAorCSAqIHB1Ymxpc2hlZCBvciBwdWJsaXNoZWQgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCBvcHRpb24gYXMgZmFsc2UuCisJICovCisJaWYgKHN0bXQtPmJhc2UucGFydGJv dW5kICE9IE5VTEwpCisJeworCQlSYW5nZVZhciAgICpyb290ID0gY2FzdE5vZGUoUmFuZ2VWYXIs IGxmaXJzdChsaXN0X2hlYWQoc3RtdC0+YmFzZS5pbmhSZWxhdGlvbnMpKSk7CisJCVJlbGF0aW9u CXJvb3RyZWwgPSB0YWJsZV9vcGVucnYocm9vdCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlpZiAo UmVsYXRpb25HZXRGb3JtKHJvb3RyZWwpLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURf VEFCTEUpCisJCXsKKwkJCU9pZAkJCXNjaGVtYWlkID0gUmVsYXRpb25HZXROYW1lc3BhY2Uocm9v dHJlbCk7CisJCQlMaXN0CSAgICpwdWJvaWRzID0gR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocm9v dHJlbC0+cmRfaWQpOworCQkJTGlzdAkgICAqYW5jZXN0b3JzOworCisJCQlwdWJvaWRzID0gbGlz dF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnMoKSk7 CisJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hlbWFQ dWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5j ZXN0b3JzKHJvb3RyZWwtPnJkX2lkKTsKKworCQkJZm9yZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2Vz dG9ycykKKwkJCXsKKwkJCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRz LAorCQkJCQkJCQkJCQkJIEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQkJ c2NoZW1haWQgPSBnZXRfcmVsX25hbWVzcGFjZShhbmNlc3Rvcik7CisJCQkJcHVib2lkcyA9IGxp c3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJCQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJs aWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJCX0KKwkJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCisJ CQlmb3JlYWNoX29pZChwdWJvaWQsIHB1Ym9pZHMpCisJCQl7CisJCQkJUHVibGljYXRpb24gKnB1 YiA9IEdldFB1YmxpY2F0aW9uKHB1Ym9pZCk7CisKKwkJCQlpZiAocHViLT5wdWJ2aWFyb290KQor CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNU X1RZUEUpLAorCQkJCQkJCSBlcnJtc2coImNhbm5vdCBjcmVhdGUgdGFibGUgZm9yZWlnbiBwYXJ0 aXRpb24gXCIlc1wiIiwKKwkJCQkJCQkJCWdldF9yZWxfbmFtZShyZWxpZCkpLAorCQkJCQkJCSBl cnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9u IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJvb3RyZWwpKSkpOworCQkJfQorCQl9CisKKwkJdGFibGVfY2xvc2Uocm9vdHJl bCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKIAkvKgogCSAqIEZvciBub3cgdGhlIG93bmVyIGNh bm5vdCBiZSBzcGVjaWZpZWQgb24gY3JlYXRlLiBVc2UgZWZmZWN0aXZlIHVzZXIgSUQuCiAJICov CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCmluZGV4IDE1MGE3NjhkMTYuLmUx MTIxYTk0ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC04NzYs NiArODc2LDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRl UHVibGljYXRpb25TdG10ICpzdG10KQogCS8qIEFzc29jaWF0ZSBvYmplY3RzIHdpdGggdGhlIHB1 YmxpY2F0aW9uLiAqLwogCWlmIChzdG10LT5mb3JfYWxsX3RhYmxlcykKIAl7CisJCS8qIENoZWNr IGlmIGFueSBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgZm9yZWlnbiBwYXJ0aXRpb24gKi8KKwkJaWYg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KQorCQkJY2hlY2tfZm9yZWlnbl90YWJsZXMoSW52 YWxpZE9pZCwgc3RtdC0+cHVibmFtZSk7CisKIAkJLyogSW52YWxpZGF0ZSByZWxjYWNoZSBzbyB0 aGF0IHB1YmxpY2F0aW9uIGluZm8gaXMgcmVidWlsdC4gKi8KIAkJQ2FjaGVJbnZhbGlkYXRlUmVs Y2FjaGVBbGwoKTsKIAl9CkBAIC0xMDQxLDYgKzEwNDUsNDkgQEAgQWx0ZXJQdWJsaWNhdGlvbk9w dGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJ fQogCX0KIAorCS8qCisJICogSWYgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgaXMgc2V0IHRv IHRydWUsIGNoZWNrIGlmIHRoZSBwdWJsaWNhdGlvbgorCSAqIGFscmVhZHkgaGF2ZSBhbnkgZm9y ZWlnbiBwYXJ0aXRpb24KKwkgKi8KKwlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2 ZW4gJiYgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpCisJeworCQlMaXN0CSAgICpzY2hlbWFv aWRzID0gTklMOworCQlMaXN0CSAgICpyZWxpZHMgPSBOSUw7CisKKwkJY2hhcgkgICAqcHVibmFt ZSA9IHN0bXQtPnB1Ym5hbWU7CisKKwkJaWYgKHB1YmZvcm0tPnB1YmFsbHRhYmxlcykKKwkJCWNo ZWNrX2ZvcmVpZ25fdGFibGVzKEludmFsaWRPaWQsIHB1Ym5hbWUpOworCisJCXNjaGVtYW9pZHMg PSBHZXRQdWJsaWNhdGlvblNjaGVtYXMocHViZm9ybS0+b2lkKTsKKworCQlmb3JlYWNoX29pZChz Y2hlbWFvaWQsIHNjaGVtYW9pZHMpCisJCQljaGVja19mb3JlaWduX3RhYmxlcyhzY2hlbWFvaWQs IHB1Ym5hbWUpOworCisJCXJlbGlkcyA9IEdldFB1YmxpY2F0aW9uUmVsYXRpb25zKHB1YmZvcm0t Pm9pZCwgUFVCTElDQVRJT05fUEFSVF9ST09UKTsKKworCQlmb3JlYWNoX29pZChyZWxpZCwgcmVs aWRzKQorCQl7CisJCQlIZWFwVHVwbGUJcmVsdHVwOworCQkJRm9ybV9wZ19jbGFzcyByZWxmb3Jt OworCisJCQlyZWx0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJZEdldERhdHVt KHJlbGlkKSk7CisJCQlyZWxmb3JtID0gKEZvcm1fcGdfY2xhc3MpIEdFVFNUUlVDVChyZWx0dXAp OworCisJCQlSZWxlYXNlU3lzQ2FjaGUocmVsdHVwKTsKKworCQkJaWYgKGNoZWNrX3BhcnRyZWxf aGFzX2ZvcmVpZ25fdGFibGUocmVsZm9ybSkpCisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiY2Fubm90IHNldCBwYXJhbWV0ZXIgXCIlc1wiIHRvIHRydWUgZm9yIHB1YmxpY2F0aW9u IFwiJXNcIiIsCisJCQkJCQkJCSJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIsIHB1Ym5hbWUp LAorCQkJCQkJIGVycmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpbiBwdWJsaWNhdGlv biBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uIiwKKwkJCQkJCQkJICAgZ2V0X3JlbF9uYW1l KHJlbGlkKSkpKTsKKwkJCX0KKwkJfQorCX0KKwogCS8qIEV2ZXJ5dGhpbmcgb2ssIGZvcm0gYSBu ZXcgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOwogCW1lbXNl dChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpp bmRleCA1ODIzZmNlOTM0Li5mY2NjMTA4MmY0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpA QCAtMTk0NDAsNiArMTk0NDAsNTkgQEAgQVRFeGVjQXR0YWNoUGFydGl0aW9uKExpc3QgKip3cXVl dWUsIFJlbGF0aW9uIHJlbCwgUGFydGl0aW9uQ21kICpjbWQsCiAJCQkJKGVycmNvZGUoRVJSQ09E RV9XUk9OR19PQkpFQ1RfVFlQRSksCiAJCQkJIGVycm1zZygiY2Fubm90IGF0dGFjaCB0ZW1wb3Jh cnkgcmVsYXRpb24gb2YgYW5vdGhlciBzZXNzaW9uIGFzIHBhcnRpdGlvbiIpKSk7CiAKKwkvKgor CSAqIENoZWNrIGlmIGF0dGFjaHJlbCBpcyBhIGZvcmVpZ24gdGFibGUgb3IgYSBwYXJ0aXRpb25l ZCB0YWJsZSB3aXRoCisJICogZm9yZWlnbiBwYXJ0aXRpb24gYW5kIHJlbCBpcyBub3QgcGFydCBv ZiBwdWJsaWNhdGlvbiB3aXRoIG9wdGlvbgorCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 IGFzIHRydWUuCisJICovCisJaWYgKGF0dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfRk9SRUlHTl9UQUJMRSB8fAorCQljaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlKFJl bGF0aW9uR2V0Rm9ybShhdHRhY2hyZWwpKSkKKwl7CisJCU9pZAkJCXNjaGVtYWlkID0gUmVsYXRp b25HZXROYW1lc3BhY2UocmVsKTsKKwkJTGlzdAkgICAqcHVib2lkcyA9IEdldFJlbGF0aW9uUHVi bGljYXRpb25zKHJlbC0+cmRfaWQpOworCQlMaXN0CSAgICphbmNlc3RvcnM7CisJCWNoYXIJICAg KnJlbG5hbWUgPSBnZXRfcmVsX25hbWUocmVsLT5yZF9pZCk7CisJCWNoYXIJICAgKmF0dGFjaHJl bG5hbWUgPSBnZXRfcmVsX25hbWUoYXR0YWNocmVsLT5yZF9pZCk7CisKKwkJcHVib2lkcyA9IGxp c3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywgR2V0QWxsVGFibGVzUHVibGljYXRpb25zKCkp OworCQlwdWJvaWRzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChwdWJvaWRzLCBHZXRTY2hlbWFQ dWJsaWNhdGlvbnMoc2NoZW1haWQpKTsKKwkJYW5jZXN0b3JzID0gZ2V0X3BhcnRpdGlvbl9hbmNl c3RvcnMocmVsLT5yZF9pZCk7CisKKwkJZm9yZWFjaF9vaWQoYW5jZXN0b3IsIGFuY2VzdG9ycykK KwkJeworCQkJcHVib2lkcyA9IGxpc3RfY29uY2F0X3VuaXF1ZV9vaWQocHVib2lkcywKKwkJCQkJ CQkJCQkJIEdldFJlbGF0aW9uUHVibGljYXRpb25zKGFuY2VzdG9yKSk7CisJCQlzY2hlbWFpZCA9 IGdldF9yZWxfbmFtZXNwYWNlKGFuY2VzdG9yKTsKKwkJCXB1Ym9pZHMgPSBsaXN0X2NvbmNhdF91 bmlxdWVfb2lkKHB1Ym9pZHMsCisJCQkJCQkJCQkJCSBHZXRTY2hlbWFQdWJsaWNhdGlvbnMoc2No ZW1haWQpKTsKKwkJfQorCisJCWxpc3RfZnJlZShhbmNlc3RvcnMpOworCisJCWZvcmVhY2hfb2lk KHB1Ym9pZCwgcHVib2lkcykKKwkJeworCQkJUHVibGljYXRpb24gKnB1YiA9IEdldFB1YmxpY2F0 aW9uKHB1Ym9pZCk7CisKKwkJCWlmIChwdWItPnB1YnZpYXJvb3QpCisJCQl7CisJCQkJaWYgKGF0 dGFjaHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKKwkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBF KSwKKwkJCQkJCQkgZXJybXNnKCJjYW5ub3QgYXR0YWNoIGZvcmVpZ24gdGFibGUgXCIlc1wiIHRv IHBhcnRpdGlvbiB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJYXR0YWNocmVsbmFtZSwgcmVsbmFt ZSksCisJCQkJCQkJIGVycmRldGFpbCgicGFydGl0aW9uIHRhYmxlIFwiJXNcIiBpcyBwdWJsaXNo ZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QiLAorCQkJCQkJCQkJICAg cmVsbmFtZSkpKTsKKwkJCQllbHNlCisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkJIGVycm1zZygiY2Fubm90IGF0 dGFjaCB0YWJsZSBcIiVzXCIgd2l0aCBmb3JlaWduIHBhcnRpdGlvbiB0byBwYXJ0aXRpb24gdGFi bGUgXCIlc1wiIiwKKwkJCQkJCQkJCWF0dGFjaHJlbG5hbWUsIHJlbG5hbWUpLAorCQkJCQkJCSBl cnJkZXRhaWwoInBhcnRpdGlvbiB0YWJsZSBcIiVzXCIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9u IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IiwKKwkJCQkJCQkJCSAgIHJlbG5hbWUpKSk7CisJ CQl9CisJCX0KKwl9CisKIAkvKgogCSAqIENoZWNrIGlmIGF0dGFjaHJlbCBoYXMgYW55IGlkZW50 aXR5IGNvbHVtbnMgb3IgYW55IGNvbHVtbnMgdGhhdCBhcmVuJ3QKIAkgKiBpbiB0aGUgcGFyZW50 LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCmluZGV4IDQ4YzdkMWE4NjEuLjUwNzA1 ZDEyYzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAor KysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTE5LDYgKzE5LDcg QEAKIAogI2luY2x1ZGUgImNhdGFsb2cvZ2VuYmtpLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmpl Y3RhZGRyZXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfcHVibGljYXRpb25fZC5oIgkvKiBJV1lVIHByYWdtYTogZXhwb3J0ICovCiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MSw0ICsxOTIsOCBAQCBleHRlcm4gQml0bWFwc2V0ICpw dWJfY29sbGlzdF90b19iaXRtYXBzZXQoQml0bWFwc2V0ICpjb2x1bW5zLCBEYXR1bSBwdWJjb2xz LAogZXh0ZXJuIEJpdG1hcHNldCAqcHViX2Zvcm1fY29sc19tYXAoUmVsYXRpb24gcmVsYXRpb24s CiAJCQkJCQkJCQlQdWJsaXNoR2VuY29sc1R5cGUgaW5jbHVkZV9nZW5jb2xzX3R5cGUpOwogCitl eHRlcm4gYm9vbCBjaGVja19wYXJ0cmVsX2hhc19mb3JlaWduX3RhYmxlKEZvcm1fcGdfY2xhc3Mg cmVsZm9ybSk7CisKK2V4dGVybiB2b2lkIGNoZWNrX2ZvcmVpZ25fdGFibGVzKE9pZCBzY2hlbWFp ZCwgY2hhciAqcHVibmFtZSk7CisKICNlbmRpZgkJCQkJCQkvKiBQR19QVUJMSUNBVElPTl9IICov CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDRkZTk2YzA0 ZjkuLjZhMGMyNDViZDYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVi bGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0CkBAIC0xOTI0LDYgKzE5MjQsOTUgQEAgRFJPUCBQVUJMSUNBVElPTiBwdWIxOwogRFJPUCBQ VUJMSUNBVElPTiBwdWIyOwogRFJPUCBUQUJMRSBnZW5jb2xzOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0gVGVzdCB3aGVuIGZvcmVpZ24gdGFibGUgaXMgYSBwYXJ0aXRpb24gb2Yg YSBwYXJ0aXRpb25lZCB0YWJsZSBvbiB3aGljaAorLS0gcHVibGljYXRpb24gaXMgY3JlYXRlZAor U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIEZPUkVJR04gREFUQSBX UkFQUEVSIHRlc3RfZmR3OworQ1JFQVRFIFNFUlZFUiBmZHdfc2VydmVyIEZPUkVJR04gREFUQSBX UkFQUEVSIHRlc3RfZmR3OworQ1JFQVRFIFNDSEVNQSBzY2gzOworQ1JFQVRFIFRBQkxFIHNjaDMu dG1haW4oaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRFIFRBQkxFIHNjaDMu cGFydDEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoNSk7 CitDUkVBVEUgVEFCTEUgc2NoMy5wYXJ0MihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7 CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQyXzEgUEFSVElUSU9OIE9GIHNjaDMucGFy dDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApIFNFUlZFUiBmZHdfc2VydmVyOworQUxURVIg VEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVFUyBG Uk9NICg1KSBUTyAoMTApOworLS0gQ2FuJ3QgY3JlYXRlIHB1YmxpY2F0aW9ucyB3aXRoIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSwgaWYgdGFibGUKKy0tIGhhcyBhIGZvcmVpZ24g cGFydGl0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFCTEUgc2NoMy50bWFpbiBX SVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CitFUlJPUjogIGNhbm5vdCBzZXQgcGFy YW1ldGVyICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIgdG8gdHJ1ZSBmb3IgcHVibGljYXRp b24gInB1YjEiCitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpbiBwdWJsaWNhdGlv biBjb250YWlucyBhIGZvcmVpZ24gcGFydGl0aW9uCitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBG T1IgVEFCTEVTIElOIFNDSEVNQSBzY2gzIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 KTsKK0VSUk9SOiAgY2Fubm90IHNldCBwYXJhbWV0ZXIgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290IiB0byB0cnVlIGZvciBwdWJsaWNhdGlvbiAicHViMSIKK0RFVEFJTDogIHBhcnRpdGlvbiB0 YWJsZSAidG1haW4iIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9yZWlnbiBwYXJ0aXRpb24K K0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290KTsKK0VSUk9SOiAgY2Fubm90IHNldCBwYXJhbWV0ZXIgInB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290IiB0byB0cnVlIGZvciBwdWJsaWNhdGlvbiAicHViMSIKK0RFVEFJ TDogIHBhcnRpdGlvbiB0YWJsZSAidG1haW4iIGluIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgZm9y ZWlnbiBwYXJ0aXRpb24KKy0tIFRlc3Qgd2hlbiBhIHBhcnRpdGlvbmVkIHRhYmxlIHdpdGggZm9y ZWlnbiB0YWJsZSBhcyBhIHBhcnRpdGlvbiBpcyBhdHRhY2hlZAorLS0gdG8gcGFydGl0aW9uZWQg dGFibGUgd2hpY2ggaXMgYWxyZWFkeSBwdWJsaXNoZWQKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4g REVUQUNIIFBBUlRJVElPTiBzY2gzLnBhcnQyOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9S IFRBQkxFIHNjaDMudG1haW4gV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworQUxU RVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIgRk9SIFZBTFVF UyBGUk9NICg1KSBUTyAoMTApOworRVJST1I6ICBjYW5ub3QgYXR0YWNoIHRhYmxlICJwYXJ0MiIg d2l0aCBmb3JlaWduIHBhcnRpdGlvbiB0byBwYXJ0aXRpb24gdGFibGUgInRtYWluIgorREVUQUlM OiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290CistLSBDYW4ndCBjcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24g b2YgcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0g dHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18xIFBBUlRJVElPTiBPRiBzY2gz LnRtYWluIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSkgU0VSVkVSIGZkd19zZXJ2ZXI7CitF UlJPUjogIGNhbm5vdCBjcmVhdGUgdGFibGUgZm9yZWlnbiBwYXJ0aXRpb24gInBhcnQzXzEiCitE RVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpcyBwdWJsaXNoZWQgd2l0aCBvcHRpb24g cHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QKKy0tIENhbid0IGF0dGFjaCBmb3JlaWduIHBhcnRp dGlvbiB0byBwdWJsaXNoZWQgdGFibGUgd2l0aAorLS0gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jv b3QgPSB0cnVlCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQzXzIoaWQgaW50KSBTRVJW RVIgZmR3X3NlcnZlcjsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJVElPTiBz Y2gzLnBhcnQzXzIgRk9SIFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0VSUk9SOiAgY2Fubm90 IGF0dGFjaCBmb3JlaWduIHRhYmxlICJwYXJ0M18yIiB0byBwYXJ0aXRpb24gdGFibGUgInRtYWlu IgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaXMgcHVibGlzaGVkIHdpdGggb3B0 aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290CitDUkVBVEUgU0NIRU1BIHNjaDQ7CitDUkVB VEUgVEFCTEUgc2NoNC50bWFpbihpZCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRShpZCk7CistLSBw dWJsaWNhdGlvbiBjcmVhdGVkIHdpdGggRk9SIFRBQkxFUyBJTiBTQ0hFTUEKK0RST1AgUFVCTElD QVRJT04gcHViMTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1B IHNjaDQgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworLS0gQ2FuJ3QgY3JlYXRl IGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNf MSBQQVJUSVRJT04gT0Ygc2NoNC50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNF UlZFUiBmZHdfc2VydmVyOworRVJST1I6ICBjYW5ub3QgY3JlYXRlIHRhYmxlIGZvcmVpZ24gcGFy dGl0aW9uICJwYXJ0M18xIgorREVUQUlMOiAgcGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaXMgcHVi bGlzaGVkIHdpdGggb3B0aW9uIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290CistLSBDYW4ndCBh dHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZQorQUxURVIgVEFCTEUgc2NoNC50bWFpbiBBVFRB Q0ggUEFSVElUSU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOwor RVJST1I6ICBjYW5ub3QgYXR0YWNoIGZvcmVpZ24gdGFibGUgInBhcnQzXzIiIHRvIHBhcnRpdGlv biB0YWJsZSAidG1haW4iCitERVRBSUw6ICBwYXJ0aXRpb24gdGFibGUgInRtYWluIiBpcyBwdWJs aXNoZWQgd2l0aCBvcHRpb24gcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QKK0RST1AgUFVCTElD QVRJT04gcHViMTsKKy0tIFRlc3Qgd2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZh bHNlCistLSBGb3JlaWduIHBhcnRpdGlvbnMgYXJlIHNraXBwZWQgYnkgZGVmYXVsdAorQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1YjEgRk9SIFRBQkxFIHNjaDMudG1haW47CitDUkVBVEUgUFVCTElDQVRJ T04gcHViMiBGT1IgVEFCTEVTIElOIFNDSEVNQSBzY2gzOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1 YjMgRk9SIEFMTCBUQUJMRVM7CistLSBDcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVibGlz aGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UKK0NS RUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBG T1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworLS0gQXR0YWNo IGZvcmVpZ24gcGFydGl0aW9uIHRvIHB1Ymxpc2hlZCB0YWJsZQorLS0gcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSBmYWxzZQorQUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElU SU9OIHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworLS0gQ2hlY2sg dGhlIHB1Ymxpc2hlZCB0YWJsZXMKK1NFTEVDVCBwdWJuYW1lLCB0YWJsZW5hbWUgRlJPTSBwZ19w dWJsaWNhdGlvbl90YWJsZXMgV0hFUkUgc2NoZW1hbmFtZSBpbiAoJ3NjaDMnLCAnc2NoNCcpIE9S REVSIEJZIHB1Ym5hbWUsIHRhYmxlbmFtZTsKKyBwdWJuYW1lIHwgdGFibGVuYW1lIAorLS0tLS0t LS0tKy0tLS0tLS0tLS0tCisgcHViMSAgICB8IHBhcnQxCisgcHViMiAgICB8IHBhcnQxCisgcHVi MyAgICB8IHBhcnQxCisoMyByb3dzKQorCistLSBDYW4ndCBhbHRlciBwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCB0byB0cnVlLCBpZiBwdWJsaWNhdGlvbiBhbHJlYWR5IGhhdmUKKy0tIGZvcmVp Z24gcGFydGl0aW9uCitBTFRFUiBQVUJMSUNBVElPTiBwdWIxIFNFVCAocHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QpOworRVJST1I6ICBjYW5ub3Qgc2V0IHBhcmFtZXRlciAicHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QiIHRvIHRydWUgZm9yIHB1YmxpY2F0aW9uICJwdWIxIgorREVUQUlMOiAg cGFydGl0aW9uIHRhYmxlICJ0bWFpbiIgaW4gcHVibGljYXRpb24gY29udGFpbnMgYSBmb3JlaWdu IHBhcnRpdGlvbgorRFJPUCBQVUJMSUNBVElPTiBwdWIxOworRFJPUCBQVUJMSUNBVElPTiBwdWIy OworRFJPUCBQVUJMSUNBVElPTiBwdWIzOworRFJPUCBTQ0hFTUEgc2NoMyBDQVNDQURFOworRFJP UCBTQ0hFTUEgc2NoNCBDQVNDQURFOworRFJPUCBTRVJWRVIgZmR3X3NlcnZlcjsKK0RST1AgRk9S RUlHTiBEQVRBIFdSQVBQRVIgdGVzdF9mZHc7CiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047 CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcl9kdW1teTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAppbmRleCA2ODAwMWRlNDAwLi40OWM5ZDk4YjY2IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC0xMjIzLDYgKzEyMjMsODcgQEAg RFJPUCBQVUJMSUNBVElPTiBwdWIyOwogRFJPUCBUQUJMRSBnZW5jb2xzOwogCiBSRVNFVCBjbGll bnRfbWluX21lc3NhZ2VzOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisKKy0tIFRlc3Qgd2hlbiBmb3JlaWduIHRhYmxlIGlzIGEgcGFy dGl0aW9uIG9mIGEgcGFydGl0aW9uZWQgdGFibGUgb24gd2hpY2gKKy0tIHB1YmxpY2F0aW9uIGlz IGNyZWF0ZWQKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBGT1JF SUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKK0NSRUFURSBTRVJWRVIgZmR3X3NlcnZlciBGT1JF SUdOIERBVEEgV1JBUFBFUiB0ZXN0X2ZkdzsKKworQ1JFQVRFIFNDSEVNQSBzY2gzOworQ1JFQVRF IFRBQkxFIHNjaDMudG1haW4oaWQgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoaWQpOworQ1JFQVRF IFRBQkxFIHNjaDMucGFydDEgUEFSVElUSU9OIE9GIHNjaDMudG1haW4gRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoNSk7CitDUkVBVEUgVEFCTEUgc2NoMy5wYXJ0MihpZCBpbnQpIFBBUlRJVElPTiBC WSBSQU5HRShpZCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBzY2gzLnBhcnQyXzEgUEFSVElUSU9O IE9GIHNjaDMucGFydDIgRk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApIFNFUlZFUiBmZHdfc2Vy dmVyOworQUxURVIgVEFCTEUgc2NoMy50bWFpbiBBVFRBQ0ggUEFSVElUSU9OIHNjaDMucGFydDIg Rk9SIFZBTFVFUyBGUk9NICg1KSBUTyAoMTApOworCistLSBDYW4ndCBjcmVhdGUgcHVibGljYXRp b25zIHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlLCBpZiB0YWJsZQorLS0g aGFzIGEgZm9yZWlnbiBwYXJ0aXRpb24KK0NSRUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJM RSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKK0NSRUFURSBQ VUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHNjaDMgV0lUSCAocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9SIEFMTCBUQUJM RVMgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpOworCistLSBUZXN0IHdoZW4gYSBw YXJ0aXRpb25lZCB0YWJsZSB3aXRoIGZvcmVpZ24gdGFibGUgYXMgYSBwYXJ0aXRpb24gaXMgYXR0 YWNoZWQKKy0tIHRvIHBhcnRpdGlvbmVkIHRhYmxlIHdoaWNoIGlzIGFscmVhZHkgcHVibGlzaGVk CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIERFVEFDSCBQQVJUSVRJT04gc2NoMy5wYXJ0MjsKK0NS RUFURSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluIFdJVEggKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290KTsKK0FMVEVSIFRBQkxFIHNjaDMudG1haW4gQVRUQUNIIFBBUlRJ VElPTiBzY2gzLnBhcnQyIEZPUiBWQUxVRVMgRlJPTSAoNSkgVE8gKDEwKTsKKworLS0gQ2FuJ3Qg Y3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRoCistLSBwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMu cGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFpbiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAo MTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBDYW4ndCBhdHRhY2ggZm9yZWlnbiBwYXJ0aXRp b24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290 ID0gdHJ1ZQorQ1JFQVRFIEZPUkVJR04gVEFCTEUgc2NoMy5wYXJ0M18yKGlkIGludCkgU0VSVkVS IGZkd19zZXJ2ZXI7CitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQQVJUSVRJT04gc2No My5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CisKK0NSRUFURSBTQ0hFTUEg c2NoNDsKK0NSRUFURSBUQUJMRSBzY2g0LnRtYWluKGlkIGludCkgUEFSVElUSU9OIEJZIFJBTkdF KGlkKTsKKworLS0gcHVibGljYXRpb24gY3JlYXRlZCB3aXRoIEZPUiBUQUJMRVMgSU4gU0NIRU1B CitEUk9QIFBVQkxJQ0FUSU9OIHB1YjE7CitDUkVBVEUgUFVCTElDQVRJT04gcHViMSBGT1IgVEFC TEVTIElOIFNDSEVNQSBzY2g0IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwor LS0gQ2FuJ3QgY3JlYXRlIGZvcmVpZ24gcGFydGl0aW9uIG9mIHB1Ymxpc2hlZCB0YWJsZSB3aXRo CistLSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUKK0NSRUFURSBGT1JFSUdOIFRB QkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoNC50bWFpbiBGT1IgVkFMVUVTIEZST00g KDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBDYW4ndCBhdHRhY2ggZm9yZWln biBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZQorQUxURVIgVEFCTEUgc2NoNC50bWFpbiBBVFRBQ0ggUEFSVElUSU9O IHNjaDMucGFydDNfMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworRFJPUCBQVUJMSUNB VElPTiBwdWIxOworCistLSBUZXN0IHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBm YWxzZQorLS0gRm9yZWlnbiBwYXJ0aXRpb25zIGFyZSBza2lwcGVkIGJ5IGRlZmF1bHQKK0NSRUFU RSBQVUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSBzY2gzLnRtYWluOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1YjIgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgc2NoMzsKK0NSRUFURSBQVUJMSUNBVElPTiBw dWIzIEZPUiBBTEwgVEFCTEVTOworCistLSBDcmVhdGUgZm9yZWlnbiBwYXJ0aXRpb24gb2YgcHVi bGlzaGVkIHRhYmxlIHdpdGgKKy0tIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UK K0NSRUFURSBGT1JFSUdOIFRBQkxFIHNjaDMucGFydDNfMSBQQVJUSVRJT04gT0Ygc2NoMy50bWFp biBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpIFNFUlZFUiBmZHdfc2VydmVyOworCistLSBB dHRhY2ggZm9yZWlnbiBwYXJ0aXRpb24gdG8gcHVibGlzaGVkIHRhYmxlCistLSBwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlCitBTFRFUiBUQUJMRSBzY2gzLnRtYWluIEFUVEFDSCBQ QVJUSVRJT04gc2NoMy5wYXJ0M18yIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgyMCk7CisKKy0t IENoZWNrIHRoZSBwdWJsaXNoZWQgdGFibGVzCitTRUxFQ1QgcHVibmFtZSwgdGFibGVuYW1lIEZS T00gcGdfcHVibGljYXRpb25fdGFibGVzIFdIRVJFIHNjaGVtYW5hbWUgaW4gKCdzY2gzJywgJ3Nj aDQnKSBPUkRFUiBCWSBwdWJuYW1lLCB0YWJsZW5hbWU7CisKKy0tIENhbid0IGFsdGVyIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290IHRvIHRydWUsIGlmIHB1YmxpY2F0aW9uIGFscmVhZHkgaGF2 ZQorLS0gZm9yZWlnbiBwYXJ0aXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgU0VUIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisKK0RST1AgUFVCTElDQVRJT04gcHViMTsKK0RST1Ag UFVCTElDQVRJT04gcHViMjsKK0RST1AgUFVCTElDQVRJT04gcHViMzsKK0RST1AgU0NIRU1BIHNj aDMgQ0FTQ0FERTsKK0RST1AgU0NIRU1BIHNjaDQgQ0FTQ0FERTsKK0RST1AgU0VSVkVSIGZkd19z ZXJ2ZXI7CitEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSIHRlc3RfZmR3OworCiBSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlcl9kdW1teTsKLS0gCjIuMzQuMQoK --000000000000d21a75062e1521dc--