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 1tX9ox-004Oks-GX for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Jan 2025 02:04:52 +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 1tX9ow-005ZB9-5B for pgsql-hackers@arkaria.postgresql.org; Mon, 13 Jan 2025 02:04:50 +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 1tX9ov-005ZAs-IY for pgsql-hackers@lists.postgresql.org; Mon, 13 Jan 2025 02:04:50 +0000 Received: from mail-yb1-xb2e.google.com ([2607:f8b0:4864:20::b2e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tX9os-0005iI-3C for pgsql-hackers@lists.postgresql.org; Mon, 13 Jan 2025 02:04:49 +0000 Received: by mail-yb1-xb2e.google.com with SMTP id 3f1490d57ef6-e461015fbd4so5327742276.2 for ; Sun, 12 Jan 2025 18:04:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736733885; x=1737338685; 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=9O06zOfqGIeBFjKNgs55pgv/0XqCk8VvGLsCSuP9QxY=; b=YnX9mtee6b0QFBCGuDv65zuKLhZMSzIDddS7LRXxfql4ycGMu+IYL6CcXqXROPb34S elPXhH9N3qcNaDtOkX2vV+r6Ye3rpjpKPJ1ikL3vXGNpEUpi7bgx0hDJr7BztjxUrm0k PsG+XMBwJqZgpDYtpEBcGuTLfiLVhBV8eXW73Moo/of2waCTiKZVGaPzLph0nnZH/uSM Ka0UJcZTRHU6EvYDCPNqvbiI0cQX81fd4u4yBtPVt65R11n5b6cQX2qC61GzAQwv66p9 bCnVmmahr6Mt+04JmofCDkV5+fhBR7WhLmvLCudyfe1VBgcykpN8a2ZJWNUKNy/smZQ1 Y6ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736733885; x=1737338685; 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=9O06zOfqGIeBFjKNgs55pgv/0XqCk8VvGLsCSuP9QxY=; b=IA1gVg/SZikr3Db6UJri0oIYNHNRKVzY0nhhaxYPpLZENfOZ9nP8rYdY2GiHRQz0Nl MdlhnX+y2StqUcfy9THXw+kmJ2qz2Gpv2VFV/InJ0IDJJqzoocnai9nzp2K8COamoWaU vVvhkGT/IJy1nbOvtIjoyGqDuy7seewIsnjLO3AFLJnTh4hzKgvj7jURXwMLHzrqiUQe 5nLXDN/62U5w7qS/qI86kjfLWs8gb6rYc4xvK9LmTBTXnzjPXGw3OZ19Urmv0KgvgJPT /4WyP5aSDEJpbV1lnshK1qNYd3nVWiihwGG/32ELPB7ytCyWo4FrZ/kWGkQGgInJXHGj rUVg== X-Forwarded-Encrypted: i=1; AJvYcCXhOzsXXnA9culvsbNN9JyOhE9hlb0J8oDuSEfq2Q8cJGXf7Gy/SCEjk8pGEySREGDlFe+E4JFH8y2VZlPD@lists.postgresql.org X-Gm-Message-State: AOJu0Yyps6s8KKGZNFdVGwUaWe56KJhmAqDWfnySvEFzYMH8fpWfLZOv BIlcDh1fBFVf2Kld2x/wA6+OcfSK7SWKN4EBQV5HSM0wTASbsooowyRRprYtY0NSfMOZmkceZP9 qVsfn8NSAxbnVQ6u92Xxxp8ItQxU= X-Gm-Gg: ASbGnctRRnTARIZwX0VyvEOh3Z73YgmdcW57RCYelJSOZlEWl5yBu6j9nJwVW44X6Gf a6oniyQna3GQEifOAe98JDRvoPFM2b3D4cJ5j878xR8eL1UuMD3XYFY1wn4hOOFSKqY2Bc/wt X-Google-Smtp-Source: AGHT+IEuUk9BSGx4b3CoiLY7yL9VGqMdSgajrlrpDWcIiEceYppQMhxeq/6z37Dg0jwkgXs4eOYHGgBsTaUOcGfEiXs= X-Received: by 2002:a05:690c:630d:b0:6f2:8dde:b66 with SMTP id 00721157ae682-6f531246a58mr156355927b3.12.1736733885224; Sun, 12 Jan 2025 18:04:45 -0800 (PST) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Mon, 13 Jan 2025 11:04:34 +0900 X-Gm-Features: AbW1kvaAm0-kt2pUIFoGIwdExQicz00QTcIvMc6nefjAOxpq-CoYLkUnqHoPBrc Message-ID: Subject: Re: Eager aggregation, take 3 To: Robert Haas Cc: Tender Wang , Paul George , Andy Fan , PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000004cbe01062b8cdef5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004cbe01062b8cdef5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Dec 21, 2024 at 10:05=E2=80=AFAM Richard Guo wrote: > Attached is the latest patch, which also includes some cosmetic > tweaks. I am seeking the possibility of pushing this by the end of > January, so that I can have enough time to react to any bugs before > the feature freeze. Attached is an updated version of this patch that addresses Jian's review comments, along with some more cosmetic tweaks. I'm going to be looking at this patch again from the point of view of committing it, with the plan to commit it late this week or early next week, barring any further comments or objections. Thanks Richard --0000000000004cbe01062b8cdef5 Content-Type: application/octet-stream; name="v16-0001-Implement-Eager-Aggregation.patch" Content-Disposition: attachment; filename="v16-0001-Implement-Eager-Aggregation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5uei1dt0 RnJvbSA5MzlhZDVkNDdlNmZkYmMyNjBmZGY0MWI2NGZmZTJiZGQzZTRhZDJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjE2 XSBJbXBsZW1lbnQgRWFnZXIgQWdncmVnYXRpb24KCkVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGEgcXVl cnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSB0aGF0IHBhcnRpYWxseQpwdXNoZXMgYWdncmVnYXRp b24gcGFzdCBhIGpvaW4sIGFuZCBmaW5hbGl6ZXMgaXQgb25jZSBhbGwgdGhlCnJlbGF0aW9ucyBh cmUgam9pbmVkLiAgRWFnZXIgYWdncmVnYXRpb24gbWF5IHJlZHVjZSB0aGUgbnVtYmVyIG9mCmlu cHV0IHJvd3MgdG8gdGhlIGpvaW4gYW5kIHRodXMgY291bGQgcmVzdWx0IGluIGEgYmV0dGVyIG92 ZXJhbGwgcGxhbi4KCkEgcGxhbiB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIGxvb2tzIGxpa2U6Cgog RVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGEuaSwgYXZnKGIueSkKIEZST00gYSBKT0lOIGIg T04gYS5pID0gYi5qCiBHUk9VUCBCWSBhLmk7CgogRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQogICBH cm91cCBLZXk6IGEuaQogICAtPiAgTmVzdGVkIExvb3AKICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuagogICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gYgogICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtl eSBvbiBhCiAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpID0gYi5qKQoKRHVyaW5nIHRoZSBj b25zdHJ1Y3Rpb24gb2YgdGhlIGpvaW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yCmpv aW4gcmVsYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGNhbiBiZSBhcHBs aWVkLiAgSWYKZmVhc2libGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIFJlbE9wdEluZm8gY2FsbGVk IGEgImdyb3VwZWQgcmVsYXRpb24iCmFuZCBzdG9yZSBpdCBpbiBhIGRlZGljYXRlZCBsaXN0LgoK R3JvdXBlZCByZWxhdGlvbiBwYXRocyBjYW4gYmUgZ2VuZXJhdGVkIGluIHR3byB3YXlzLiAgVGhl IGZpcnN0IG1ldGhvZAppbnZvbHZlcyBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQgcGFydGlhbCBh Z2dyZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YKdGhlIG5vbi1ncm91cGVkIHBhdGhzLiAgVG8gbGlt aXQgcGxhbm5pbmcgdGltZSwgd2Ugb25seSBjb25zaWRlciB0aGUKY2hlYXBlc3Qgb3Igc3VpdGFi bHktc29ydGVkIG5vbi1ncm91cGVkIHBhdGhzIGR1cmluZyB0aGlzIHBoYXNlLgoKQWx0ZXJuYXRp dmVseSwgZ3JvdXBlZCBwYXRocyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IGpvaW5pbmcgYSBncm91cGVk CnJlbGF0aW9uIHdpdGggYSBub24tZ3JvdXBlZCByZWxhdGlvbi4gIEpvaW5pbmcgdHdvIGdyb3Vw ZWQgcmVsYXRpb25zCmRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeSB1c2VmdWwgYW5kIGlzIGN1cnJl bnRseSBub3Qgc3VwcG9ydGVkLgoKRm9yIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHRoYXQgaXMg cHVzaGVkIGRvd24gdG8gYSBub24tYWdncmVnYXRlZApyZWxhdGlvbiwgd2UgbmVlZCB0byBjb25z aWRlciBhbGwgZXhwcmVzc2lvbnMgZnJvbSB0aGlzIHJlbGF0aW9uIHRoYXQKYXJlIGludm9sdmVk IGluIHVwcGVyIGpvaW4gY2xhdXNlcyBhbmQgaW5jbHVkZSB0aGVtIGluIHRoZSBncm91cGluZwpr ZXlzLCB1c2luZyBjb21wYXRpYmxlIG9wZXJhdG9ycy4gIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVu c3VyZSB0aGF0IGFuCmFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhlIHBhcnRpYWwgYWdncmVnYXRpb24g bWF0Y2hlcyB0aGUgb3RoZXIgc2lkZSBvZgp0aGUgam9pbiBpZiBhbmQgb25seSBpZiBlYWNoIHJv dyBpbiB0aGUgcGFydGlhbCBncm91cCBkb2VzLiAgVGhpcwplbnN1cmVzIHRoYXQgYWxsIHJvd3Mg d2l0aGluIHRoZSBzYW1lIHBhcnRpYWwgZ3JvdXAgc2hhcmUgdGhlIHNhbWUKJ2Rlc3RpbnknLCB3 aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4KCk9uZSByZXN0cmlj dGlvbiBpcyB0aGF0IHdlIGNhbm5vdCBwdXNoIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byBh CnJlbGF0aW9uIHRoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIgam9pbiwg YmVjYXVzZSB0aGUKTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBqb2lu IHdvdWxkIG5vdCBiZSBhdmFpbGFibGUKd2hlbiB3ZSBwZXJmb3JtIHRoZSBwYXJ0aWFsIGFnZ3Jl Z2F0aW9uLCB3aGlsZSB3aXRoIGEKbm9uLWVhZ2VyLWFnZ3JlZ2F0aW9uIHBsYW4gdGhlc2Ugcm93 cyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgdG9wLWxldmVsCmFnZ3JlZ2F0aW9uLiAgUHVzaGluZyBw YXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkgcmVzdWx0IGluCnRoZSByb3dzIGJl aW5nIGdyb3VwZWQgZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJl Y3QKdmFsdWVzIGZyb20gdGhlIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMuCgpJZiB3ZSBoYXZlIGdlbmVy YXRlZCBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSB0b3Btb3N0IGpvaW4gcmVsYXRpb24sCndl IGZpbmFsaXplIGl0cyBwYXRocyBhdCB0aGUgZW5kLiAgVGhlIGZpbmFsIHBhdGhzIHdpbGwgY29t cGV0ZSBpbiB0aGUKdXN1YWwgd2F5IHdpdGggcGF0aHMgYnVpbHQgZnJvbSByZWd1bGFyIHBsYW5u aW5nLgoKU2luY2UgZWFnZXIgYWdncmVnYXRpb24gY2FuIGdlbmVyYXRlIG1hbnkgZ3JvdXBlZCBy ZWxhdGlvbnMsIHdlCmludHJvZHVjZSBhIFJlbEluZm9MaXN0IHN0cnVjdHVyZSwgd2hpY2ggZW5j YXBzdWxhdGVzIGJvdGggYSBsaXN0IGFuZAphIGhhc2ggdGFibGUsIHNvIHRoYXQgd2UgY2FuIGxl dmVyYWdlIHRoZSBoYXNoIHRhYmxlIGZvciBmYXN0ZXIKbG9va3VwcyBub3Qgb25seSBmb3Igam9p biByZWxhdGlvbnMgYnV0IGFsc28gZm9yIGdyb3VwZWQgcmVsYXRpb25zLgoKRWFnZXIgYWdncmVn YXRpb24gY2FuIHVzZSBzaWduaWZpY2FudGx5IG1vcmUgQ1BVIHRpbWUgYW5kIG1lbW9yeSB0aGFu CnJlZ3VsYXIgcGxhbm5pbmcgd2hlbiB0aGUgcXVlcnkgaW52b2x2ZXMgYWdncmVnYXRlcyBhbmQg bWFueSBqb2luaW5nCnJlbGF0aW9ucy4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHRoZSByZXN1 bHRpbmcgcGxhbiBjYW4gYmUgbXVjaApiZXR0ZXIsIGp1c3RpZnlpbmcgdGhlIGFkZGl0aW9uYWwg cGxhbm5pbmcgZWZmb3J0LiAgQWxsIHRoZSBzYW1lLCBmb3IKbm93LCB0dXJuIHRoaXMgZmVhdHVy ZSBvZmYgYnkgZGVmYXVsdC4KClRoZSBwYXRjaCB3YXMgb3JpZ2luYWxseSBwcm9wb3NlZCBieSBB bnRvbmluIEhvdXNrYSBpbiAyMDE3LiAgVGhpcwpjb21taXQgcmV3b3JrcyB2YXJpb3VzIGltcG9y dGFudCBhc3BlY3RzIGFuZCByZXdyaXRlcyBtb3N0IG9mIHRoZQpjdXJyZW50IGNvZGUuICBIb3dl dmVyLCB0aGUgb3JpZ2luYWwgcGF0Y2ggYW5kIHJldmlld3Mgd2VyZSB2ZXJ5CnVzZWZ1bC4KCkF1 dGhvcjogUmljaGFyZCBHdW8sIEFudG9uaW4gSG91c2thClJldmlld2VkLWJ5OiBSb2JlcnQgSGFh cywgSmlhbiBIZSwgVGVuZGVyIFdhbmcsIFBhdWwgR2VvcmdlLCBUb20gTGFuZQpSZXZpZXdlZC1i eTogVG9tYXMgVm9uZHJhLCBBbmR5IEZhbiwgQXNodXRvc2ggQmFwYXQKRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9DQU1iV3M0OGp6THJQdDFKXzAwWmNQWlhXVVFLYXdRT0ZFOFJPYy1B RGlZcXNxcnBCTndAbWFpbC5nbWFpbC5jb20KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYyAgICAgICAgICAgfCAgICAzICstCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFE TUUgICAgICAgICAgICAgICAgICB8ICAgODAgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8v Z2Vxb19ldmFsLmMgICAgICAgIHwgICA5OCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv YWxscGF0aHMuYyAgICAgICAgIHwgIDQ1NSArKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgOTUgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2pvaW5yZWxzLmMgICAgICAgICB8ICAxNDEgKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jICAgICAgICB8ICAyNTggKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm1haW4uYyAgICAgICAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm5lci5jICAgICAgICAgIHwgICA5OSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvYXBwZW5kaW5mby5jICAgICAgIHwgICA2MCArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wYXRobm9kZS5jICAgICAgICAgfCAgIDQ3ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgICAgICAgICAgfCAgNzU0ICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMTAgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgMTU3ICstCiBzcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aG5vZGUuaCAgICAgICAgICAgICAgfCAgICA3ICsKIHNyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oICAgICAgICAgICAgICAgICB8ICAgIDUgKwogc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BsYW5tYWluLmggICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQgfCAxMzA4ICsrKysrKysrKysrKysrKysrCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCAgICAgICAgfCAgICAzICstCiBzcmMv dGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsICAgICAgfCAgMTkyICsrKwogc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgNyArLQogMjQg ZmlsZXMgY2hhbmdlZCwgMzY1NSBpbnNlcnRpb25zKCspLCAxNjAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVn YXRlLnNxbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5j IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggYjkyZTJhMGZjOS4u NzZmODhiZDNlMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTYwODksNyAr NjA4OSw4IEBAIGZvcmVpZ25fam9pbl9vayhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq am9pbnJlbCwgSm9pblR5cGUgam9pbnR5cGUsCiAJICovCiAJQXNzZXJ0KGZwaW5mby0+cmVsYXRp b25faW5kZXggPT0gMCk7CS8qIHNob3VsZG4ndCBiZSBzZXQgeWV0ICovCiAJZnBpbmZvLT5yZWxh dGlvbl9pbmRleCA9Ci0JCWxpc3RfbGVuZ3RoKHJvb3QtPnBhcnNlLT5ydGFibGUpICsgbGlzdF9s ZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7CisJCWxpc3RfbGVuZ3RoKHJvb3QtPnBhcnNlLT5y dGFibGUpICsKKwkJbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOwogCiAJ cmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggM2Y0MWExN2IxZi4uMDlhM2M0Y2FmMiAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbApAQCAtNTI0MSw2ICs1MjQxLDIxIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtZW5hYmxlLWVhZ2VyLWFnZ3JlZ2F0ZSIgeHJlZmxhYmVsPSJlbmFibGVfZWFn ZXJfYWdncmVnYXRlIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9lYWdlcl9hZ2dyZWdh dGU8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+Cisg ICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZTwvdmFybmFtZT4g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAg ICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5h YmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIGFiaWxpdHkgdG8gcGFydGlhbGx5 IHB1c2gKKyAgICAgICAgYWdncmVnYXRpb24gcGFzdCBhIGpvaW4sIGFuZCBmaW5hbGl6ZSBpdCBv bmNlIGFsbCB0aGUgcmVsYXRpb25zIGFyZQorICAgICAgICBqb2luZWQuIFRoZSBkZWZhdWx0IGlz IDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVu YWJsZS1nYXRoZXJtZXJnZSIgeHJlZmxhYmVsPSJlbmFibGVfZ2F0aGVybWVyZ2UiPgogICAgICAg PHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2dhdGhlcm1lcmdlPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVh bjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL1JFQURNRSBiL3NyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUKaW5kZXggZjM0MWQ5 ZjMwMy4uNDUyMzZjYTQ2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURN RQorKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FCkBAIC0xNDk3LDMgKzE0OTcsODMg QEAgYnJlYWtpbmcgZG93biBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBvdmVyIGEgcGFydGl0aW9u ZWQgcmVsYXRpb24gaW50bwogYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBpdHMgcGFydGl0 aW9ucyBpcyBjYWxsZWQgcGFydGl0aW9ud2lzZQogYWdncmVnYXRpb24uICBFc3BlY2lhbGx5IHdo ZW4gdGhlIHBhcnRpdGlvbiBrZXlzIG1hdGNoIHRoZSBHUk9VUCBCWSBjbGF1c2UsCiB0aGlzIGNh biBiZSBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSByZWd1bGFyIG1ldGhvZC4KKworRWFn ZXIgYWdncmVnYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0VhZ2VyIGFnZ3JlZ2F0aW9uIGlz IGEgcXVlcnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSB0aGF0IHBhcnRpYWxseSBwdXNoZXMKK2Fn Z3JlZ2F0aW9uIHBhc3QgYSBqb2luLCBhbmQgZmluYWxpemVzIGl0IG9uY2UgYWxsIHRoZSByZWxh dGlvbnMgYXJlIGpvaW5lZC4KK0VhZ2VyIGFnZ3JlZ2F0aW9uIG1heSByZWR1Y2UgdGhlIG51bWJl ciBvZiBpbnB1dCByb3dzIHRvIHRoZSBqb2luIGFuZCB0aHVzCitjb3VsZCByZXN1bHQgaW4gYSBi ZXR0ZXIgb3ZlcmFsbCBwbGFuLgorCitGb3IgZXhhbXBsZToKKworIEVYUExBSU4gKENPU1RTIE9G RikKKyBTRUxFQ1QgYS5pLCBhdmcoYi55KQorIEZST00gYSBKT0lOIGIgT04gYS5pID0gYi5qCisg R1JPVVAgQlkgYS5pOworCisgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBh LmkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBiLmoKKyAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBiCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBh CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaSA9IGIuaikKKworSWYgdGhlIHBhcnRpYWwg YWdncmVnYXRpb24gb24gdGFibGUgQiBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG51bWJlciBv ZgoraW5wdXQgcm93cywgdGhlIGpvaW4gYWJvdmUgd2lsbCBiZSBtdWNoIGNoZWFwZXIsIGxlYWRp bmcgdG8gYSBtb3JlIGVmZmljaWVudAorZmluYWwgcGxhbi4KKworRm9yIHRoZSBwYXJ0aWFsIGFn Z3JlZ2F0aW9uIHRoYXQgaXMgcHVzaGVkIGRvd24gdG8gYSBub24tYWdncmVnYXRlZCByZWxhdGlv biwKK3dlIG5lZWQgdG8gY29uc2lkZXIgYWxsIGV4cHJlc3Npb25zIGZyb20gdGhpcyByZWxhdGlv biB0aGF0IGFyZSBpbnZvbHZlZCBpbgordXBwZXIgam9pbiBjbGF1c2VzIGFuZCBpbmNsdWRlIHRo ZW0gaW4gdGhlIGdyb3VwaW5nIGtleXMsIHVzaW5nIGNvbXBhdGlibGUKK29wZXJhdG9ycy4gIFRo aXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGF0IGFuIGFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhl IHBhcnRpYWwKK2FnZ3JlZ2F0aW9uIG1hdGNoZXMgdGhlIG90aGVyIHNpZGUgb2YgdGhlIGpvaW4g aWYgYW5kIG9ubHkgaWYgZWFjaCByb3cgaW4gdGhlCitwYXJ0aWFsIGdyb3VwIGRvZXMuICBUaGlz IGVuc3VyZXMgdGhhdCBhbGwgcm93cyB3aXRoaW4gdGhlIHNhbWUgcGFydGlhbCBncm91cAorc2hh cmUgdGhlIHNhbWUgJ2Rlc3RpbnknLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBj b3JyZWN0bmVzcy4KKworT25lIHJlc3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFy dGlhbCBhZ2dyZWdhdGlvbiBkb3duIHRvIGEgcmVsYXRpb24KK3RoYXQgaXMgaW4gdGhlIG51bGxh YmxlIHNpZGUgb2YgYW4gb3V0ZXIgam9pbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dz Citwcm9kdWNlZCBieSB0aGUgb3V0ZXIgam9pbiB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIHdoZW4g d2UgcGVyZm9ybSB0aGUgcGFydGlhbAorYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYSBub24tZWFn ZXItYWdncmVnYXRpb24gcGxhbiB0aGVzZSByb3dzIGFyZSBhdmFpbGFibGUKK2ZvciB0aGUgdG9w LWxldmVsIGFnZ3JlZ2F0aW9uLiAgUHVzaGluZyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMg Y2FzZSBtYXkKK3Jlc3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkIGRpZmZlcmVudGx5IHRo YW4gZXhwZWN0ZWQsIG9yIHByb2R1Y2UKK2luY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgYWdncmVn YXRlIGZ1bmN0aW9ucy4KKworV2UgY2FuIGFsc28gYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gdG8g YSBqb2luOgorCisgRVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCBhLmksIGF2ZyhiLnkgKyBj LnopCisgRlJPTSBhIEpPSU4gYiBPTiBhLmkgPSBiLmoKKyAgICAgICAgSk9JTiBjIE9OIGIuaiA9 IGMuaQorIEdST1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3Vw IEtleTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiLmogPSBjLmkp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBjCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoaSA9IGIuaikKKworRHVyaW5nIHRoZSBjb25zdHJ1Y3Rp b24gb2YgdGhlIGpvaW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yIGpvaW4KK3JlbGF0 aW9uIHRvIGRldGVybWluZSBpZiBlYWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUgYXBwbGllZC4gIElm IGZlYXNpYmxlLCB3ZQorY3JlYXRlIGEgc2VwYXJhdGUgUmVsT3B0SW5mbyBjYWxsZWQgYSAiZ3Jv dXBlZCByZWxhdGlvbiIgYW5kIGdlbmVyYXRlIGdyb3VwZWQKK3BhdGhzIGJ5IGFkZGluZyBzb3J0 ZWQgYW5kIGhhc2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiB0aGUKK25v bi1ncm91cGVkIHBhdGhzLiAgVG8gbGltaXQgcGxhbm5pbmcgdGltZSwgd2UgY29uc2lkZXIgb25s eSB0aGUgY2hlYXBlc3Qgb3IKK3N1aXRhYmx5LXNvcnRlZCBub24tZ3JvdXBlZCBwYXRocyBpbiB0 aGlzIHN0ZXAuCisKK0Fub3RoZXIgd2F5IHRvIGdlbmVyYXRlIGdyb3VwZWQgcGF0aHMgaXMgdG8g am9pbiBhIGdyb3VwZWQgcmVsYXRpb24gd2l0aCBhCitub24tZ3JvdXBlZCByZWxhdGlvbi4gIEpv aW5pbmcgdHdvIGdyb3VwZWQgcmVsYXRpb25zIGRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeQordXNl ZnVsIGFuZCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKworSWYgd2UgaGF2ZSBnZW5lcmF0 ZWQgYSBncm91cGVkIHJlbGF0aW9uIGZvciB0aGUgdG9wbW9zdCBqb2luIHJlbGF0aW9uLCB3ZSBu ZWVkCit0byBmaW5hbGl6ZSBpdHMgcGF0aHMgYXQgdGhlIGVuZC4gIFRoZSBmaW5hbCBwYXRocyB3 aWxsIGNvbXBldGUgaW4gdGhlIHVzdWFsCit3YXkgd2l0aCBwYXRocyBidWlsdCBmcm9tIHJlZ3Vs YXIgcGxhbm5pbmcuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFv X2V2YWwuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCmluZGV4IGYw N2QxZGM4YWMuLmU2OWVhYzliZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9n ZXFvL2dlcW9fZXZhbC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZh bC5jCkBAIC0zOSwxMCArMzksMjAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlzaXplOwkJCS8q IG51bWJlciBvZiBpbnB1dCByZWxhdGlvbnMgaW4gY2x1bXAgKi8KIH0gQ2x1bXA7CiAKKy8qIFRo ZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbEluZm9MaXN0ICovCit0eXBl ZGVmIHN0cnVjdAoreworCWludAkJCXNhdmVsZW5ndGg7CisJc3RydWN0IEhUQUIgKnNhdmVoYXNo OworfSBSZWxJbmZvTGlzdEluZm87CisKIHN0YXRpYyBMaXN0ICptZXJnZV9jbHVtcChQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqY2x1bXBzLCBDbHVtcCAqbmV3X2NsdW1wLAogCQkJCQkJIGludCBu dW1fZ2VuZSwgYm9vbCBmb3JjZSk7CiBzdGF0aWMgYm9vbCBkZXNpcmFibGVfam9pbihQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwgUmVsT3B0SW5mbyAq aW5uZXJfcmVsKTsKK3N0YXRpYyBSZWxJbmZvTGlzdEluZm8gc2F2ZV9yZWxpbmZvbGlzdChSZWxJ bmZvTGlzdCAqcmVsaW5mb19saXN0KTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfcmVsaW5mb2xpc3Qo UmVsSW5mb0xpc3QgKnJlbGluZm9fbGlzdCwKKwkJCQkJCQkJUmVsSW5mb0xpc3RJbmZvICppbmZv KTsKIAogCiAvKgpAQCAtNjAsOCArNzAsOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3Qs IEdlbmUgKnRvdXIsIGludCBudW1fZ2VuZSkKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlSZWxP cHRJbmZvICpqb2lucmVsOwogCUNvc3QJCWZpdG5lc3M7Ci0JaW50CQkJc2F2ZWxlbmd0aDsKLQlz dHJ1Y3QgSFRBQiAqc2F2ZWhhc2g7CisJUmVsSW5mb0xpc3RJbmZvIHNhdmVfam9pbl9yZWw7CisJ UmVsSW5mb0xpc3RJbmZvIHNhdmVfZ3JvdXBlZF9yZWw7CiAKIAkvKgogCSAqIENyZWF0ZSBhIHBy aXZhdGUgbWVtb3J5IGNvbnRleHQgdGhhdCB3aWxsIGhvbGQgYWxsIHRlbXAgc3RvcmFnZQpAQCAt NzgsMjUgKzg4LDI5IEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwg aW50IG51bV9nZW5lKQogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhteWNvbnRleHQp OwogCiAJLyoKLQkgKiBnaW1tZV90cmVlIHdpbGwgYWRkIGVudHJpZXMgdG8gcm9vdC0+am9pbl9y ZWxfbGlzdCwgd2hpY2ggbWF5IG9yIG1heQotCSAqIG5vdCBhbHJlYWR5IGNvbnRhaW4gc29tZSBl bnRyaWVzLiAgVGhlIG5ld2x5IGFkZGVkIGVudHJpZXMgd2lsbCBiZQotCSAqIHJlY3ljbGVkIGJ5 IHRoZSBNZW1vcnlDb250ZXh0RGVsZXRlIGJlbG93LCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRo ZQotCSAqIGxpc3QgaXMgcmVzdG9yZWQgdG8gaXRzIGZvcm1lciBzdGF0ZSBiZWZvcmUgZXhpdGlu Zy4gIFdlIGNhbiBkbyB0aGlzIGJ5Ci0JICogdHJ1bmNhdGluZyB0aGUgbGlzdCB0byBpdHMgb3Jp Z2luYWwgbGVuZ3RoLiAgTk9URSB0aGlzIGFzc3VtZXMgdGhhdCBhbnkKLQkgKiBhZGRlZCBlbnRy aWVzIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kIQorCSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50 cmllcyB0byByb290LT5qb2luX3JlbF9saXN0IGFuZAorCSAqIHJvb3QtPmdyb3VwZWRfcmVsX2xp c3QsIHdoaWNoIG1heSBvciBtYXkgbm90IGFscmVhZHkgY29udGFpbiBzb21lCisJICogZW50cmll cy4gIFRoZSBuZXdseSBhZGRlZCBlbnRyaWVzIHdpbGwgYmUgcmVjeWNsZWQgYnkgdGhlCisJICog TWVtb3J5Q29udGV4dERlbGV0ZSBiZWxvdywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBlYWNoIGxp c3Qgd2l0aGluIHRoZQorCSAqIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMgaXMgcmVzdG9yZWQgdG8g aXRzIGZvcm1lciBzdGF0ZSBiZWZvcmUgZXhpdGluZy4KKwkgKiBXZSBjYW4gZG8gdGhpcyBieSB0 cnVuY2F0aW5nIGVhY2ggbGlzdCB0byBpdHMgb3JpZ2luYWwgbGVuZ3RoLiAgTk9URQorCSAqIHRo aXMgYXNzdW1lcyB0aGF0IGFueSBhZGRlZCBlbnRyaWVzIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5k IQogCSAqCi0JICogV2UgYWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8gbWVzcyB1cCB0aGUgb3V0 ZXIgam9pbl9yZWxfaGFzaCwgaWYgdGhlcmUKLQkgKiBpcyBvbmUuICBXZSBjYW4gZG8gdGhpcyBi eSBqdXN0IHRlbXBvcmFyaWx5IHNldHRpbmcgdGhlIGxpbmsgdG8gTlVMTC4KLQkgKiAoSWYgd2Ug YXJlIGRlYWxpbmcgd2l0aCBlbm91Z2ggam9pbiByZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseSBh cmUsIGEKLQkgKiBuZXcgaGFzaCB0YWJsZSB3aWxsIGdldCBidWlsdCBhbmQgdXNlZCBsb2NhbGx5 LikKKwkgKiBXZSBhbHNvIG11c3QgdGFrZSBjYXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBo YXNoIHRhYmxlcyB3aXRoaW4gdGhlCisJICogUmVsSW5mb0xpc3Qgc3RydWN0dXJlcywgaWYgYW55 LiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseQorCSAqIHNldHRpbmcgZWFjaCBs aW5rIHRvIE5VTEwuICAoSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBlbm91Z2ggam9pbiByZWxzIG9y CisJICogZ3JvdXBlZCByZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIG5ldyBoYXNoIHRh YmxlcyB3aWxsIGdldCBidWlsdAorCSAqIGFuZCB1c2VkIGxvY2FsbHkuKQogCSAqCiAJICogam9p bl9yZWxfbGV2ZWxbXSBzaG91bGRuJ3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24n dC4KIAkgKi8KLQlzYXZlbGVuZ3RoID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7 Ci0Jc2F2ZWhhc2ggPSByb290LT5qb2luX3JlbF9oYXNoOworCXNhdmVfam9pbl9yZWwgPSBzYXZl X3JlbGluZm9saXN0KHJvb3QtPmpvaW5fcmVsX2xpc3QpOworCXNhdmVfZ3JvdXBlZF9yZWwgPSBz YXZlX3JlbGluZm9saXN0KHJvb3QtPmdyb3VwZWRfcmVsX2xpc3QpOworCiAJQXNzZXJ0KHJvb3Qt PmpvaW5fcmVsX2xldmVsID09IE5VTEwpOwogCi0Jcm9vdC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7 CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CisJcm9vdC0+Z3JvdXBlZF9yZWxf bGlzdC0+aGFzaCA9IE5VTEw7CiAKIAkvKiBjb25zdHJ1Y3QgdGhlIGJlc3QgcGF0aCBmb3IgdGhl IGdpdmVuIGNvbWJpbmF0aW9uIG9mIHJlbGF0aW9ucyAqLwogCWpvaW5yZWwgPSBnaW1tZV90cmVl KHJvb3QsIHRvdXIsIG51bV9nZW5lKTsKQEAgLTExOCwxMiArMTMyLDExIEBAIGdlcW9fZXZhbChQ bGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwgaW50IG51bV9nZW5lKQogCQlmaXRuZXNzID0g REJMX01BWDsKIAogCS8qCi0JICogUmVzdG9yZSBqb2luX3JlbF9saXN0IHRvIGl0cyBmb3JtZXIg c3RhdGUsIGFuZCBwdXQgYmFjayBvcmlnaW5hbAotCSAqIGhhc2h0YWJsZSBpZiBhbnkuCisJICog UmVzdG9yZSBlYWNoIG9mIHRoZSBsaXN0IGluIGpvaW5fcmVsX2xpc3QgYW5kIGdyb3VwZWRfcmVs X2xpc3QgdG8gaXRzCisJICogZm9ybWVyIHN0YXRlLCBhbmQgcHV0IGJhY2sgb3JpZ2luYWwgaGFz aHRhYmxlcyBpZiBhbnkuCiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxpc3RfdHJ1bmNh dGUocm9vdC0+am9pbl9yZWxfbGlzdCwKLQkJCQkJCQkJCQlzYXZlbGVuZ3RoKTsKLQlyb290LT5q b2luX3JlbF9oYXNoID0gc2F2ZWhhc2g7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5qb2lu X3JlbF9saXN0LCAmc2F2ZV9qb2luX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5n cm91cGVkX3JlbF9saXN0LCAmc2F2ZV9ncm91cGVkX3JlbCk7CiAKIAkvKiByZWxlYXNlIGFsbCB0 aGUgbWVtb3J5IGFjcXVpcmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7CkBAIC0yNzksNiArMjkyLDI3IEBAIG1lcmdlX2NsdW1wKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpjbHVtcHMsIENsdW1wICpuZXdfY2x1bXAsIGludCBudW1fZ2VuZSwK IAkJCQkvKiBGaW5kIGFuZCBzYXZlIHRoZSBjaGVhcGVzdCBwYXRocyBmb3IgdGhpcyBqb2lucmVs ICovCiAJCQkJc2V0X2NoZWFwZXN0KGpvaW5yZWwpOwogCisJCQkJLyoKKwkJCQkgKiBFeGNlcHQg Zm9yIHRoZSB0b3Btb3N0IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVyYXRpbmcKKwkJCQkg KiBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiBvbiB0 b3AKKwkJCQkgKiBvZiB0aGUgcGF0aHMgb2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBk b25lIGNyZWF0aW5nCisJCQkJICogcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uLCBzbyBy dW4gc2V0X2NoZWFwZXN0KCkuCisJCQkJICovCisJCQkJaWYgKCFibXNfZXF1YWwoam9pbnJlbC0+ cmVsaWRzLCByb290LT5hbGxfcXVlcnlfcmVscykpCisJCQkJeworCQkJCQlSZWxPcHRJbmZvICpy ZWxfZ3JvdXBlZDsKKworCQkJCQlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwg am9pbnJlbC0+cmVsaWRzKTsKKwkJCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJCQl7CisJCQkJCQlB c3NlcnQoSVNfR1JPVVBFRF9SRUwocmVsX2dyb3VwZWQpKTsKKworCQkJCQkJZ2VuZXJhdGVfZ3Jv dXBlZF9wYXRocyhyb290LCByZWxfZ3JvdXBlZCwgam9pbnJlbCwKKwkJCQkJCQkJCQkJICAgcmVs X2dyb3VwZWQtPmFnZ19pbmZvKTsKKwkJCQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJ CQkJCX0KKwkJCQl9CisKIAkJCQkvKiBBYnNvcmIgbmV3IGNsdW1wIGludG8gb2xkICovCiAJCQkJ b2xkX2NsdW1wLT5qb2lucmVsID0gam9pbnJlbDsKIAkJCQlvbGRfY2x1bXAtPnNpemUgKz0gbmV3 X2NsdW1wLT5zaXplOwpAQCAtMzM2LDMgKzM3MCwyNyBAQCBkZXNpcmFibGVfam9pbihQbGFubmVy SW5mbyAqcm9vdCwKIAkvKiBPdGhlcndpc2UgcG9zdHBvbmUgdGhlIGpvaW4gdGlsbCBsYXRlci4g Ki8KIAlyZXR1cm4gZmFsc2U7CiB9CisKKy8qCisgKiBTYXZlIHRoZSBvcmlnaW5hbCBsZW5ndGgg YW5kIGhhc2h0YWJsZSBvZiBhIFJlbEluZm9MaXN0LgorICovCitzdGF0aWMgUmVsSW5mb0xpc3RJ bmZvCitzYXZlX3JlbGluZm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3QpCit7CisJUmVs SW5mb0xpc3RJbmZvIGluZm87CisKKwlpbmZvLnNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyZWxp bmZvX2xpc3QtPml0ZW1zKTsKKwlpbmZvLnNhdmVoYXNoID0gcmVsaW5mb19saXN0LT5oYXNoOwor CisJcmV0dXJuIGluZm87Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBsZW5ndGgg YW5kIGhhc2h0YWJsZSBvZiBhIFJlbEluZm9MaXN0LgorICovCitzdGF0aWMgdm9pZAorcmVzdG9y ZV9yZWxpbmZvbGlzdChSZWxJbmZvTGlzdCAqcmVsaW5mb19saXN0LCBSZWxJbmZvTGlzdEluZm8g KmluZm8pCit7CisJcmVsaW5mb19saXN0LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocmVsaW5mb19s aXN0LT5pdGVtcywgaW5mby0+c2F2ZWxlbmd0aCk7CisJcmVsaW5mb19saXN0LT5oYXNoID0gaW5m by0+c2F2ZWhhc2g7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCAz MzY0NTg5MzkxLi44MzZjMGJjYmY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgi CisjaW5jbHVkZSAib3B0aW1pemVyL3ByZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3Qu aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3Bh cnNldHJlZS5oIgpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMu aCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAKIAogLyogQml0bWFzayBm bGFncyBmb3IgcHVzaGRvd25fc2FmZXR5X2luZm8udW5zYWZlRmxhZ3MgKi8KQEAgLTc3LDYgKzc5 LDcgQEAgdHlwZWRlZiBlbnVtIHB1c2hkb3duX3NhZmVfdHlwZQogCiAvKiBUaGVzZSBwYXJhbWV0 ZXJzIGFyZSBzZXQgYnkgR1VDICovCiBib29sCQllbmFibGVfZ2VxbyA9IGZhbHNlOwkvKiBqdXN0 IGluIGNhc2UgR1VDIGRvZXNuJ3Qgc2V0IGl0ICovCitib29sCQllbmFibGVfZWFnZXJfYWdncmVn YXRlID0gZmFsc2U7CiBpbnQJCQlnZXFvX3RocmVzaG9sZDsKIGludAkJCW1pbl9wYXJhbGxlbF90 YWJsZV9zY2FuX3NpemU7CiBpbnQJCQltaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwpAQCAt OTAsNiArOTMsNyBAQCBqb2luX3NlYXJjaF9ob29rX3R5cGUgam9pbl9zZWFyY2hfaG9vayA9IE5V TEw7CiAKIHN0YXRpYyB2b2lkIHNldF9iYXNlX3JlbF9jb25zaWRlcl9zdGFydHVwKFBsYW5uZXJJ bmZvICpyb290KTsKIHN0YXRpYyB2b2lkIHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVySW5mbyAq cm9vdCk7CitzdGF0aWMgdm9pZCBzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAq cm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfcGF0aGxpc3RzKFBsYW5uZXJJbmZvICpy b290KTsKIHN0YXRpYyB2b2lkIHNldF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCQkJCQkJIEluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKQEAgLTEx NCw2ICsxMTgsNyBAQCBzdGF0aWMgdm9pZCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCUluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRy eSAqcnRlKTsKIHN0YXRpYyB2b2lkIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQlJbmRleCBydGksIFJhbmdlVGJsRW50 cnkgKnJ0ZSk7CitzdGF0aWMgdm9pZCBzZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9vcmRlcmVk YXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJ CQkJIExpc3QgKmxpdmVfY2hpbGRyZWxzLAogCQkJCQkJCQkJCSBMaXN0ICphbGxfY2hpbGRfcGF0 aGtleXMpOwpAQCAtMTgyLDYgKzE4NywxMSBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmpvaW5saXN0KQogCSAqLwogCXNldF9iYXNlX3JlbF9zaXplcyhyb290KTsKIAor CS8qCisJICogQnVpbGQgZ3JvdXBlZCByZWxhdGlvbnMgZm9yIGJhc2UgcmVscyB3aGVyZSBwb3Nz aWJsZS4KKwkgKi8KKwlzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhyb290KTsKKwogCS8qCiAJICog V2Ugc2hvdWxkIG5vdyBoYXZlIHNpemUgZXN0aW1hdGVzIGZvciBldmVyeSBhY3R1YWwgdGFibGUg aW52b2x2ZWQgaW4KIAkgKiB0aGUgcXVlcnksIGFuZCB3ZSBhbHNvIGtub3cgd2hpY2ggaWYgYW55 IGhhdmUgYmVlbiBkZWxldGVkIGZyb20gdGhlCkBAIC0zMjMsNiArMzMzLDQ1IEBAIHNldF9iYXNl X3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCkKIAl9CiB9CiAKKy8qCisgKiBzZXR1cF9iYXNl X2dyb3VwZWRfcmVscworICoJICBGb3IgZWFjaCAicGxhaW4iIGJhc2UgcmVsYXRpb24sIGJ1aWxk IGEgZ3JvdXBlZCBiYXNlIHJlbGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFnZ3JlZ2F0aW9uIGlzIHBv c3NpYmxlIGFuZCBpZiB0aGlzIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMuCisg Ki8KK3N0YXRpYyB2b2lkCitzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9v dCkKK3sKKwlJbmRleAkJcnRpOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRl IGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0 aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09 IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwlm b3IgKHJ0aSA9IDE7IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKyspCisJ eworCQlSZWxPcHRJbmZvICpyZWwgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3J0aV07CisJCVJl bE9wdEluZm8gKnJlbF9ncm91cGVkOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBj b3JyZXNwb25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9PSBOVUxMKQor CQkJY29udGludWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsJLyogc2FuaXR5IGNo ZWNrIG9uIGFycmF5ICovCisJCUFzc2VydChJU19TSU1QTEVfUkVMKHJlbCkpOyAvKiBzYW5pdHkg Y2hlY2sgb24gcmVsICovCisKKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9zaW1wbGVfZ3JvdXBlZF9y ZWwocm9vdCwgcmVsKTsKKwkJaWYgKHJlbF9ncm91cGVkKQorCQl7CisJCQkvKiBNYWtlIHRoZSBn cm91cGVkIHJlbGF0aW9uIGF2YWlsYWJsZSBmb3Igam9pbmluZy4gKi8KKwkJCWFkZF9ncm91cGVk X3JlbChyb290LCByZWxfZ3JvdXBlZCk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBzZXRfYmFzZV9y ZWxfcGF0aGxpc3RzCiAgKgkgIEZpbmRzIGFsbCBwYXRocyBhdmFpbGFibGUgZm9yIHNjYW5uaW5n IGVhY2ggYmFzZS1yZWxhdGlvbiBlbnRyeS4KQEAgLTU1OSw2ICs2MDgsMTUgQEAgc2V0X3JlbF9w YXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCS8qIE5vdyBmaW5k IHRoZSBjaGVhcGVzdCBvZiB0aGUgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJc2V0X2NoZWFwZXN0 KHJlbCk7CiAKKwkvKgorCSAqIElmIGEgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhpcyByZWwgZXhp c3RzLCBidWlsZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCisJICogcGF0aHMgZm9yIGl0LgorCSAqCisJ ICogTm90ZSB0aGF0IHRoaXMgY2FuIG9ubHkgaGFwcGVuIGFmdGVyIHdlJ3ZlIGNhbGxlZCBzZXRf Y2hlYXBlc3QoKSBmb3IKKwkgKiB0aGlzIGJhc2UgcmVsLCBiZWNhdXNlIHdlIG5lZWQgaXRzIGNo ZWFwZXN0IHBhdGhzLgorCSAqLworCXNldF9ncm91cGVkX3JlbF9wYXRobGlzdChyb290LCByZWwp OworCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAJcHByaW50KHJlbCk7CiAjZW5kaWYKQEAgLTEy OTgsNiArMTM1NiwzNiBAQCBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCWFkZF9wYXRoc190b19hcHBlbmRfcmVsKHJvb3QsIHJlbCwg bGl2ZV9jaGlsZHJlbHMpOwogfQogCisvKgorICogc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0Cisg KgkgIElmIGEgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIGdpdmVuICdyZWwnIGV4aXN0cywgYnVp bGQgcGFydGlhbAorICoJICBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgaXQuCisgKi8KK3N0YXRpYyB2 b2lkCitzZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCkKK3sKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCS8qCisJICogSWYgdGhl cmUgYXJlIG5vIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBvciBncm91cGluZyBleHByZXNzaW9ucywg ZWFnZXIKKwkgKiBhZ2dyZWdhdGlvbiBpcyBub3QgcG9zc2libGUuCisJICovCisJaWYgKHJvb3Qt PmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwgfHwKKwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID09IE5J TCkKKwkJcmV0dXJuOworCisJLyogQWRkIHBhdGhzIHRvIHRoZSBncm91cGVkIGJhc2UgcmVsYXRp b24gaWYgb25lIGV4aXN0cy4gKi8KKwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9v dCwgcmVsLT5yZWxpZHMpOworCWlmIChyZWxfZ3JvdXBlZCkKKwl7CisJCUFzc2VydChJU19HUk9V UEVEX1JFTChyZWxfZ3JvdXBlZCkpOworCisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwg cmVsX2dyb3VwZWQsIHJlbCwKKwkJCQkJCQkgICByZWxfZ3JvdXBlZC0+YWdnX2luZm8pOworCQlz ZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQpOworCX0KK30KKwogCiAvKgogICogYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwKQEAgLTMzMDYsNiArMzM5NCwzMTggQEAgZ2VuZXJhdGVfdXNlZnVsX2dhdGhl cl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBib29sIG92ZXJyaWRl X3IKIAl9CiB9CiAKKy8qCisgKiBnZW5lcmF0ZV9ncm91cGVkX3BhdGhzCisgKgkJR2VuZXJhdGUg cGF0aHMgZm9yIGEgZ3JvdXBlZCByZWxhdGlvbiBieSBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQK KyAqCQlwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgcGxh aW4gYmFzZSBvciBqb2luCisgKgkJcmVsYXRpb24uCisgKgorICogVGhlIGluZm9ybWF0aW9uIG5l ZWRlZCBhcmUgcHJvdmlkZWQgYnkgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlLgorICovCit2b2lk CitnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWxfZ3JvdXBlZCwKKwkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX3BsYWluLCBSZWxBZ2dJbmZvICph Z2dfaW5mbykKK3sKKwlBZ2dDbGF1c2VDb3N0cyBhZ2dfY29zdHM7CisJYm9vbAkJY2FuX2hhc2g7 CisJYm9vbAkJY2FuX3NvcnQ7CisJUGF0aAkgICAqY2hlYXBlc3RfdG90YWxfcGF0aCA9IE5VTEw7 CisJUGF0aAkgICAqY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gTlVMTDsKKwlkb3VibGUJCWROdW1H cm91cHMgPSAwOworCWRvdWJsZQkJZE51bVBhcnRpYWxHcm91cHMgPSAwOworCisJaWYgKElTX0RV TU1ZX1JFTChyZWxfcGxhaW4pKQorCXsKKwkJbWFya19kdW1teV9yZWwocmVsX2dyb3VwZWQpOwor CQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZ3JvdXBlZCBwYXRocyBmb3IgdGhlIGdp dmVuIHJlbGF0aW9uIGFyZSBub3QgY29uc2lkZXJlZCB1c2VmdWwsCisJICogZG8gbm90IGJvdGhl ciB0byBnZW5lcmF0ZSB0aGVtLgorCSAqLworCWlmICghYWdnX2luZm8tPmFnZ191c2VmdWwpCisJ CXJldHVybjsKKworCU1lbVNldCgmYWdnX2Nvc3RzLCAwLCBzaXplb2YoQWdnQ2xhdXNlQ29zdHMp KTsKKwlnZXRfYWdnX2NsYXVzZV9jb3N0cyhyb290LCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwg JmFnZ19jb3N0cyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIGl0J3MgcG9zc2libGUg dG8gcGVyZm9ybSBzb3J0LWJhc2VkIGltcGxlbWVudGF0aW9ucworCSAqIG9mIGdyb3VwaW5nLgor CSAqLworCWNhbl9zb3J0ID0gZ3JvdXBpbmdfaXNfc29ydGFibGUoYWdnX2luZm8tPmdyb3VwX2Ns YXVzZXMpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgY29uc2lkZXIg aGFzaC1iYXNlZCBpbXBsZW1lbnRhdGlvbnMgb2YKKwkgKiBncm91cGluZy4KKwkgKi8KKwlBc3Nl cnQocm9vdC0+bnVtT3JkZXJlZEFnZ3MgPT0gMCk7CisJY2FuX2hhc2ggPSAoYWdnX2luZm8tPmdy b3VwX2NsYXVzZXMgIT0gTklMICYmCisJCQkJZ3JvdXBpbmdfaXNfaGFzaGFibGUoYWdnX2luZm8t Pmdyb3VwX2NsYXVzZXMpKTsKKworCS8qCisJICogQ29uc2lkZXIgd2hldGhlciB3ZSBzaG91bGQg Z2VuZXJhdGUgcGFydGlhbGx5IGFnZ3JlZ2F0ZWQgbm9uLXBhcnRpYWwKKwkgKiBwYXRocy4gIFdl IGNhbiBvbmx5IGRvIHRoaXMgaWYgd2UgaGF2ZSBhIG5vbi1wYXJ0aWFsIHBhdGguCisJICovCisJ aWYgKHJlbF9wbGFpbi0+cGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfdG90YWxfcGF0 aCA9IHJlbF9wbGFpbi0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKKwkJQXNzZXJ0KGNoZWFwZXN0X3Rv dGFsX3BhdGggIT0gTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiBwYXJhbGxlbGlzbSBpcyBwb3Nz aWJsZSBmb3IgcmVsX2dyb3VwZWQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyCisJICogZ2VuZXJh dGluZyBwYXJ0aWFsbHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAgSG93ZXZlciwgaWYgdGhlIHBs YWluIHJlbAorCSAqIGhhcyBubyBwYXJ0aWFsIHBhdGhzLCB0aGVuIHdlIGNhbid0LgorCSAqLwor CWlmIChyZWxfZ3JvdXBlZC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgcmVsX3BsYWluLT5wYXJ0aWFs X3BhdGhsaXN0ICE9IE5JTCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFs KHJlbF9wbGFpbi0+cGFydGlhbF9wYXRobGlzdCk7CisJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFs X3BhdGggIT0gTlVMTCk7CisJfQorCisJLyogRXN0aW1hdGUgbnVtYmVyIG9mIHBhcnRpYWwgZ3Jv dXBzLiAqLworCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCisJCWROdW1Hcm91cHMg PSBlc3RpbWF0ZV9udW1fZ3JvdXBzKHJvb3QsCisJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9l eHBycywKKwkJCQkJCQkJCQkgY2hlYXBlc3RfdG90YWxfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkg TlVMTCwgTlVMTCk7CisJaWYgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCQlkTnVt UGFydGlhbEdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkJCWFn Z19pbmZvLT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aC0+ cm93cywKKwkJCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCisJaWYgKGNhbl9zb3J0ICYmIGNoZWFw ZXN0X3RvdGFsX3BhdGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qCisJ CSAqIFVzZSBhbnkgYXZhaWxhYmxlIHN1aXRhYmx5LXNvcnRlZCBwYXRoIGFzIGlucHV0LCBhbmQg YWxzbyBjb25zaWRlcgorCQkgKiBzb3J0aW5nIHRoZSBjaGVhcGVzdC10b3RhbCBwYXRoLgorCQkg Ki8KKwkJZm9yZWFjaChsYywgcmVsX3BsYWluLT5wYXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAq aW5wdXRfcGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJ Ym9vbAkJaXNfc29ydGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkg KiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gYSBub24tZ3JvdXBlZCByZWxhdGlvbiB0 aGF0IGlzCisJCQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5z dXJlIHRoYXQgaXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciBwYXJ0aWFs IGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rp b25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkg ICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJ CWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2dfaW5mby0+Z3JvdXBf cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJJnBy ZXNvcnRlZF9rZXlzKTsKKwkJCWlmICghaXNfc29ydGVkKQorCQkJeworCQkJCS8qCisJCQkJICog VHJ5IGF0IGxlYXN0IHNvcnRpbmcgdGhlIGNoZWFwZXN0IHBhdGggYW5kIGFsc28gdHJ5CisJCQkJ ICogaW5jcmVtZW50YWxseSBzb3J0aW5nIGFueSBwYXRoIHdoaWNoIGlzIHBhcnRpYWxseSBzb3J0 ZWQKKwkJCQkgKiBhbHJlYWR5IChubyBuZWVkIHRvIGRlYWwgd2l0aCBwYXRocyB3aGljaCBoYXZl IHByZXNvcnRlZAorCQkJCSAqIGtleXMgd2hlbiBpbmNyZW1lbnRhbCBzb3J0IGlzIGRpc2FibGVk IHVubGVzcyBpdCdzIHRoZQorCQkJCSAqIGNoZWFwZXN0IGlucHV0IHBhdGgpLgorCQkJCSAqLwor CQkJCWlmIChpbnB1dF9wYXRoICE9IGNoZWFwZXN0X3RvdGFsX3BhdGggJiYKKwkJCQkJKHByZXNv cnRlZF9rZXlzID09IDAgfHwgIWVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0KSkKKwkJCQkJY29udGlu dWU7CisKKwkJCQkvKgorCQkJCSAqIFdlJ3ZlIG5vIG5lZWQgdG8gY29uc2lkZXIgYm90aCBhIHNv cnQgYW5kIGluY3JlbWVudGFsIHNvcnQuCisJCQkJICogV2UnbGwganVzdCBkbyBhIHNvcnQgaWYg dGhlcmUgYXJlIG5vIHByZXNvcnRlZCBrZXlzIGFuZCBhbgorCQkJCSAqIGluY3JlbWVudGFsIHNv cnQgd2hlbiB0aGVyZSBhcmUgcHJlc29ydGVkIGtleXMuCisJCQkJICovCisJCQkJaWYgKHByZXNv cnRlZF9rZXlzID09IDAgfHwgIWVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0KQorCQkJCQlwYXRoID0g KFBhdGggKikgY3JlYXRlX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCSByZWxfZ3JvdXBl ZCwKKwkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3Bh dGhrZXlzLAorCQkJCQkJCQkJCQkJCSAtMS4wKTsKKwkJCQllbHNlCisJCQkJCXBhdGggPSAoUGF0 aCAqKSBjcmVhdGVfaW5jcmVtZW50YWxfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkJ IHJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCQkJCSBh Z2dfaW5mby0+Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQkJIHByZXNvcnRlZF9rZXlz LAorCQkJCQkJCQkJCQkJCQkJCSAtMS4wKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIHF1YWwgaXMg TklMIGJlY2F1c2UgdGhlIEhBVklORyBjbGF1c2UgY2Fubm90IGJlIGV2YWx1YXRlZCB1bnRpbAor CQkJICogdGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCQkgKi8K KwkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJcmVs X2dyb3VwZWQsCisJCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT50YXJnZXQs CisJCQkJCQkJCQkJCUFHR19TT1JURUQsCisJCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxfU0VS SUFMLAorCQkJCQkJCQkJCQlhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQkJTklM LAorCQkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCQlkTnVtR3JvdXBzKTsKKworCQkJ YWRkX3BhdGgocmVsX2dyb3VwZWQsIHBhdGgpOworCQl9CisJfQorCisJaWYgKGNhbl9zb3J0ICYm IGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisK KwkJLyogU2ltaWxhciB0byBhYm92ZSBsb2dpYywgYnV0IGZvciBwYXJ0aWFsIHBhdGhzLiAqLwor CQlmb3JlYWNoKGxjLCByZWxfcGxhaW4tPnBhcnRpYWxfcGF0aGxpc3QpCisJCXsKKwkJCVBhdGgJ ICAgKmlucHV0X3BhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOworCQkJUGF0aAkgICAqcGF0aDsK KwkJCWJvb2wJCWlzX3NvcnRlZDsKKwkJCWludAkJCXByZXNvcnRlZF9rZXlzOworCisJCQkvKgor CQkJICogU2luY2UgdGhlIHBhdGggb3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVsYXRp b24gdGhhdCBpcworCQkJICogbm90IGF3YXJlIG9mIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3ZSBtdXN0 IGVuc3VyZSB0aGF0IGl0IHByb3ZpZGVzCisJCQkgKiB0aGUgY29ycmVjdCBpbnB1dCBmb3IgcGFy dGlhbCBhZ2dyZWdhdGlvbi4KKwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9q ZWN0aW9uX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJ CQkJICAgaW5wdXRfcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOwor CisJCQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oYWdnX2luZm8tPmdy b3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJ CSZwcmVzb3J0ZWRfa2V5cyk7CisKKwkJCWlmICghaXNfc29ydGVkKQorCQkJeworCQkJCS8qCisJ CQkJICogVHJ5IGF0IGxlYXN0IHNvcnRpbmcgdGhlIGNoZWFwZXN0IHBhdGggYW5kIGFsc28gdHJ5 CisJCQkJICogaW5jcmVtZW50YWxseSBzb3J0aW5nIGFueSBwYXRoIHdoaWNoIGlzIHBhcnRpYWxs eSBzb3J0ZWQKKwkJCQkgKiBhbHJlYWR5IChubyBuZWVkIHRvIGRlYWwgd2l0aCBwYXRocyB3aGlj aCBoYXZlIHByZXNvcnRlZAorCQkJCSAqIGtleXMgd2hlbiBpbmNyZW1lbnRhbCBzb3J0IGlzIGRp c2FibGVkIHVubGVzcyBpdCdzIHRoZQorCQkJCSAqIGNoZWFwZXN0IGlucHV0IHBhdGgpLgorCQkJ CSAqLworCQkJCWlmIChpbnB1dF9wYXRoICE9IGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAmJgorCQkJ CQkocHJlc29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpKQorCQkJ CQljb250aW51ZTsKKworCQkJCS8qCisJCQkJICogV2UndmUgbm8gbmVlZCB0byBjb25zaWRlciBi b3RoIGEgc29ydCBhbmQgaW5jcmVtZW50YWwgc29ydC4KKwkJCQkgKiBXZSdsbCBqdXN0IGRvIGEg c29ydCBpZiB0aGVyZSBhcmUgbm8gcHJlc29ydGVkIGtleXMgYW5kIGFuCisJCQkJICogaW5jcmVt ZW50YWwgc29ydCB3aGVuIHRoZXJlIGFyZSBwcmVzb3J0ZWQga2V5cy4KKwkJCQkgKi8KKwkJCQlp ZiAocHJlc29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJ CXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJIHJl bF9ncm91cGVkLAorCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCSBhZ2dfaW5mby0+ Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWVsc2UKKwkJCQkJcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJ CQkJCQkJCQkgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJ CQkJCQkJIGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgcHJlc29y dGVkX2tleXMsCisJCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJfQorCisJCQkvKgorCQkJICog cXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVk IHVudGlsCisJCQkgKiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4K KwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJ CQkJCQlyZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQkJYWdnX2luZm8t PnRhcmdldCwKKwkJCQkJCQkJCQkJQUdHX1NPUlRFRCwKKwkJCQkJCQkJCQkJQUdHU1BMSVRfSU5J VElBTF9TRVJJQUwsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJ CQkJCQlOSUwsCisJCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJCWROdW1QYXJ0aWFs R3JvdXBzKTsKKworCQkJYWRkX3BhcnRpYWxfcGF0aChyZWxfZ3JvdXBlZCwgcGF0aCk7CisJCX0K Kwl9CisKKwkvKgorCSAqIEFkZCBhIHBhcnRpYWxseS1ncm91cGVkIEhhc2hBZ2cgUGF0aCB3aGVy ZSBwb3NzaWJsZQorCSAqLworCWlmIChjYW5faGFzaCAmJiBjaGVhcGVzdF90b3RhbF9wYXRoICE9 IE5VTEwpCisJeworCQlQYXRoCSAgICpwYXRoOworCisJCS8qCisJCSAqIFNpbmNlIHRoZSBwYXRo IG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1ncm91cGVkIHJlbGF0aW9uIHRoYXQgaXMgbm90CisJCSAq IGF3YXJlIG9mIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IGl0IHByb3Zp ZGVzIHRoZQorCQkgKiBjb3JyZWN0IGlucHV0IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkg Ki8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0aW9uX3BhdGgocm9vdCwKKwkJCQkJ CQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCSAgIGNoZWFwZXN0X3RvdGFsX3BhdGgs CisJCQkJCQkJCQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOworCisJCS8qCisJCSAqIHF1YWwg aXMgTklMIGJlY2F1c2UgdGhlIEhBVklORyBjbGF1c2UgY2Fubm90IGJlIGV2YWx1YXRlZCB1bnRp bCB0aGUKKwkJICogZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4KKwkJICov CisJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKKwkJCQkJCQkJCQlyZWxf Z3JvdXBlZCwKKwkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCWFnZ19pbmZvLT50YXJnZXQsCisJ CQkJCQkJCQkJQUdHX0hBU0hFRCwKKwkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFMX1NFUklBTCwK KwkJCQkJCQkJCQlhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQlOSUwsCisJCQkJ CQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQlkTnVtR3JvdXBzKTsKKworCQlhZGRfcGF0aChy ZWxfZ3JvdXBlZCwgcGF0aCk7CisJfQorCisJLyoKKwkgKiBOb3cgYWRkIGEgcGFydGlhbGx5LWdy b3VwZWQgSGFzaEFnZyBwYXJ0aWFsIFBhdGggd2hlcmUgcG9zc2libGUKKwkgKi8KKwlpZiAoY2Fu X2hhc2ggJiYgY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJeworCQlQYXRoCSAgICpw YXRoOworCisJCS8qCisJCSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1n cm91cGVkIHJlbGF0aW9uIHRoYXQgaXMgbm90CisJCSAqIGF3YXJlIG9mIGVhZ2VyIGFnZ3JlZ2F0 aW9uLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IGl0IHByb3ZpZGVzIHRoZQorCQkgKiBjb3JyZWN0IGlu cHV0IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNy ZWF0ZV9wcm9qZWN0aW9uX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJ CQkJCQkJCQkJCSAgIGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKKwkJCQkJCQkJCQkJICAgYWdnX2lu Zm8tPmFnZ19pbnB1dCk7CisKKwkJLyoKKwkJICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFW SU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGlsIHRoZQorCQkgKiBmaW5hbCB2YWx1 ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNy ZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCXBh dGgsCisJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdldCwKKwkJCQkJCQkJCQlBR0dfSEFTSEVELAor CQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxfU0VSSUFMLAorCQkJCQkJCQkJCWFnZ19pbmZvLT5n cm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJ CQkJCQkJCWROdW1QYXJ0aWFsR3JvdXBzKTsKKworCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91 cGVkLCBwYXRoKTsKKwl9Cit9CisKIC8qCiAgKiBtYWtlX3JlbF9mcm9tX2pvaW5saXN0CiAgKgkg IEJ1aWxkIGFjY2VzcyBwYXRocyB1c2luZyBhICJqb2lubGlzdCIgdG8gZ3VpZGUgdGhlIGpvaW4g cGF0aCBzZWFyY2guCkBAIC0zNDE0LDkgKzM4MTQsMTAgQEAgbWFrZV9yZWxfZnJvbV9qb2lubGlz dChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCiAgKiBuZWVkZWQgZm9yIHRoZXNl IHBhdGhzIG5lZWQgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZC4KICAqCiAgKiBOb3RlIHRvIHBsdWdp biBhdXRob3JzOiB0aGUgZnVuY3Rpb25zIGludm9rZWQgZHVyaW5nIHN0YW5kYXJkX2pvaW5fc2Vh cmNoKCkKLSAqIG1vZGlmeSByb290LT5qb2luX3JlbF9saXN0IGFuZCByb290LT5qb2luX3JlbF9o YXNoLiAgSWYgeW91IHdhbnQgdG8gZG8gbW9yZQotICogdGhhbiBvbmUgam9pbi1vcmRlciBzZWFy Y2gsIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlCi0gKiBvcmln aW5hbCBzdGF0ZXMgb2YgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLiAgU2VlIGdlcW9fZXZhbCgpIGZv ciBhbiBleGFtcGxlLgorICogbW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zIGFuZCBy b290LT5qb2luX3JlbF9saXN0LT5oYXNoLiAgSWYgeW91CisgKiB3YW50IHRvIGRvIG1vcmUgdGhh biBvbmUgam9pbi1vcmRlciBzZWFyY2gsIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIHNhdmUgYW5k CisgKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBzdGF0ZXMgb2YgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVz LiAgU2VlIGdlcW9fZXZhbCgpIGZvcgorICogYW4gZXhhbXBsZS4KICAqLwogUmVsT3B0SW5mbyAq CiBzdGFuZGFyZF9qb2luX3NlYXJjaChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19uZWVk ZWQsIExpc3QgKmluaXRpYWxfcmVscykKQEAgLTM0NjUsNiArMzg2NiwxMCBAQCBzdGFuZGFyZF9q b2luX3NlYXJjaChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19uZWVkZWQsIExpc3QgKmlu aXRpYWxfcmVscykKIAkJICoKIAkJICogQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBw YXRocyBmb3IgdGhlIGpvaW5yZWwsIHNvIHJ1bgogCQkgKiBzZXRfY2hlYXBlc3QoKS4KKwkJICoK KwkJICogSW4gYWRkaXRpb24sIHdlIGFsc28gcnVuIGdlbmVyYXRlX2dyb3VwZWRfcGF0aHMoKSBm b3IgdGhlIGdyb3VwZWQKKwkJICogcmVsYXRpb24gb2YgZWFjaCBqdXN0LXByb2Nlc3NlZCBqb2lu cmVsLCBhbmQgcnVuIHNldF9jaGVhcGVzdCgpIGZvcgorCQkgKiB0aGUgZ3JvdXBlZCByZWxhdGlv biBhZnRlcndhcmRzLgogCQkgKi8KIAkJZm9yZWFjaChsYywgcm9vdC0+am9pbl9yZWxfbGV2ZWxb bGV2XSkKIAkJewpAQCAtMzQ4NSw2ICszODkwLDI3IEBAIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBs YW5uZXJJbmZvICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQog CQkJLyogRmluZCBhbmQgc2F2ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJ CQlzZXRfY2hlYXBlc3QocmVsKTsKIAorCQkJLyoKKwkJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1v c3Qgc2Nhbi9qb2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZworCQkJICogcGFydGlhbCBhZ2dy ZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wIG9mCisJCQkgKiB0 aGUgcGF0aHMgb2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBh dGhzCisJCQkgKiBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3Qo KS4KKwkJCSAqLworCQkJaWYgKCFibXNfZXF1YWwocmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9xdWVy eV9yZWxzKSkKKwkJCXsKKwkJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCQkJCXJlbF9n cm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJlbGlkcyk7CisJCQkJaWYgKHJl bF9ncm91cGVkKQorCQkJCXsKKwkJCQkJQXNzZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVk KSk7CisKKwkJCQkJZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocyhyb290LCByZWxfZ3JvdXBlZCwgcmVs LAorCQkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLT5hZ2dfaW5mbyk7CisJCQkJCXNldF9jaGVhcGVz dChyZWxfZ3JvdXBlZCk7CisJCQkJfQorCQkJfQorCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAJ CQlwcHJpbnQocmVsKTsKICNlbmRpZgpAQCAtNDM1Myw2ICs0Nzc5LDI5IEBAIGdlbmVyYXRlX3Bh cnRpdGlvbndpc2Vfam9pbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs KQogCQlpZiAoSVNfRFVNTVlfUkVMKGNoaWxkX3JlbCkpCiAJCQljb250aW51ZTsKIAorCQkvKgor CQkgKiBFeGNlcHQgZm9yIHRoZSB0b3Btb3N0IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVy YXRpbmcgcGFydGlhbAorCQkgKiBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVs YXRpb24gb24gdG9wIG9mIHRoZSBwYXRocyBvZgorCQkgKiB0aGlzIHBhcnRpdGlvbmVkIGNoaWxk LWpvaW4uICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzCisJCSAqIGZvciB0 aGUgZ3JvdXBlZCByZWxhdGlvbiwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgorCQkgKi8KKwkJaWYg KCFibXNfZXF1YWwoSVNfT1RIRVJfUkVMKHJlbCkgPworCQkJCQkgICByZWwtPnRvcF9wYXJlbnRf cmVsaWRzIDogcmVsLT5yZWxpZHMsCisJCQkJCSAgIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkKKwkJ eworCQkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisKKwkJCXJlbF9ncm91cGVkID0gZmluZF9n cm91cGVkX3JlbChyb290LCBjaGlsZF9yZWwtPnJlbGlkcyk7CisJCQlpZiAocmVsX2dyb3VwZWQp CisJCQl7CisJCQkJQXNzZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisKKwkJCQln ZW5lcmF0ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCBjaGlsZF9yZWwsCisJCQkJ CQkJCQkgICByZWxfZ3JvdXBlZC0+YWdnX2luZm8pOworCQkJCXNldF9jaGVhcGVzdChyZWxfZ3Jv dXBlZCk7CisJCQl9CisJCX0KKwogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwogCQlwcHJpbnQoY2hp bGRfcmVsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXgg ZWMwMDRlZDk0OS4uNzhlYTY1NTBhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6 ZS5jCkBAIC0xODAsNiArMTgwLDggQEAgc3RhdGljIGJvb2wgY29zdF9xdWFsX2V2YWxfd2Fsa2Vy KE5vZGUgKm5vZGUsIGNvc3RfcXVhbF9ldmFsX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZv aWQgZ2V0X3Jlc3RyaWN0aW9uX3F1YWxfY29zdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqYmFzZXJlbCwKIAkJCQkJCQkJCSAgUGFyYW1QYXRoSW5mbyAqcGFyYW1faW5mbywKIAkJCQkJ CQkJCSAgUXVhbENvc3QgKnFwcXVhbF9jb3N0KTsKK3N0YXRpYyB2b2lkIHNldF9qb2lucGF0aF9z aXplKFBsYW5uZXJJbmZvICpyb290LCBKb2luUGF0aCAqanBhdGgsCisJCQkJCQkJICBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbyk7CiBzdGF0aWMgYm9vbCBoYXNfaW5kZXhlZF9qb2luX3F1YWxzKE5l c3RQYXRoICpwYXRoKTsKIHN0YXRpYyBkb3VibGUgYXBwcm94X3R1cGxlX2NvdW50KFBsYW5uZXJJ bmZvICpyb290LCBKb2luUGF0aCAqcGF0aCwKIAkJCQkJCQkJIExpc3QgKnF1YWxzKTsKQEAgLTMz NzAsMTkgKzMzNzIsNyBAQCBmaW5hbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBO ZXN0UGF0aCAqcGF0aCwKIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCiAJCWlubmVyX3BhdGhf cm93cyA9IDE7CiAJLyogTWFyayB0aGUgcGF0aCB3aXRoIHRoZSBjb3JyZWN0IHJvdyBlc3RpbWF0 ZSAqLwotCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFtX2luZm8pCi0JCXBhdGgtPmpwYXRoLnBh dGgucm93cyA9IHBhdGgtPmpwYXRoLnBhdGgucGFyYW1faW5mby0+cHBpX3Jvd3M7Ci0JZWxzZQot CQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRoLnBhcmVudC0+cm93czsK LQotCS8qIEZvciBwYXJ0aWFsIHBhdGhzLCBzY2FsZSByb3cgZXN0aW1hdGUuICovCi0JaWYgKHBh dGgtPmpwYXRoLnBhdGgucGFyYWxsZWxfd29ya2VycyA+IDApCi0JewotCQlkb3VibGUJCXBhcmFs bGVsX2Rpdmlzb3IgPSBnZXRfcGFyYWxsZWxfZGl2aXNvcigmcGF0aC0+anBhdGgucGF0aCk7Ci0K LQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0KLQkJCWNsYW1wX3Jvd19lc3QocGF0aC0+anBhdGgu cGF0aC5yb3dzIC8gcGFyYWxsZWxfZGl2aXNvcik7Ci0JfQorCXNldF9qb2lucGF0aF9zaXplKHJv b3QsICZwYXRoLT5qcGF0aCwgZXh0cmEtPnNqaW5mbyk7CiAKIAkvKiBjb3N0IG9mIGlubmVyLXJl bGF0aW9uIHNvdXJjZSBkYXRhICh3ZSBhbHJlYWR5IGRlYWx0IHdpdGggb3V0ZXIgcmVsKSAqLwog CkBAIC0zODY3LDE5ICszODU3LDcgQEAgZmluYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8g KnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkJaW5uZXJfcGF0aF9yb3dzID0gMTsKIAogCS8qIE1h cmsgdGhlIHBhdGggd2l0aCB0aGUgY29ycmVjdCByb3cgZXN0aW1hdGUgKi8KLQlpZiAocGF0aC0+ anBhdGgucGF0aC5wYXJhbV9pbmZvKQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5q cGF0aC5wYXRoLnBhcmFtX2luZm8tPnBwaV9yb3dzOwotCWVsc2UKLQkJcGF0aC0+anBhdGgucGF0 aC5yb3dzID0gcGF0aC0+anBhdGgucGF0aC5wYXJlbnQtPnJvd3M7Ci0KLQkvKiBGb3IgcGFydGlh bCBwYXRocywgc2NhbGUgcm93IGVzdGltYXRlLiAqLwotCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBh cmFsbGVsX3dvcmtlcnMgPiAwKQotCXsKLQkJZG91YmxlCQlwYXJhbGxlbF9kaXZpc29yID0gZ2V0 X3BhcmFsbGVsX2Rpdmlzb3IoJnBhdGgtPmpwYXRoLnBhdGgpOwotCi0JCXBhdGgtPmpwYXRoLnBh dGgucm93cyA9Ci0JCQljbGFtcF9yb3dfZXN0KHBhdGgtPmpwYXRoLnBhdGgucm93cyAvIHBhcmFs bGVsX2Rpdmlzb3IpOwotCX0KKwlzZXRfam9pbnBhdGhfc2l6ZShyb290LCAmcGF0aC0+anBhdGgs IGV4dHJhLT5zamluZm8pOwogCiAJLyoKIAkgKiBDb21wdXRlIGNvc3Qgb2YgdGhlIG1lcmdlcXVh bHMgYW5kIHFwcXVhbHMgKG90aGVyIHJlc3RyaWN0aW9uIGNsYXVzZXMpCkBAIC00Mjk5LDE5ICs0 Mjc3LDcgQEAgZmluYWxfY29zdF9oYXNoam9pbihQbGFubmVySW5mbyAqcm9vdCwgSGFzaFBhdGgg KnBhdGgsCiAJcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlz YWJsZWRfbm9kZXM7CiAKIAkvKiBNYXJrIHRoZSBwYXRoIHdpdGggdGhlIGNvcnJlY3Qgcm93IGVz dGltYXRlICovCi0JaWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYW1faW5mbykKLQkJcGF0aC0+anBh dGgucGF0aC5yb3dzID0gcGF0aC0+anBhdGgucGF0aC5wYXJhbV9pbmZvLT5wcGlfcm93czsKLQll bHNlCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9IHBhdGgtPmpwYXRoLnBhdGgucGFyZW50LT5y b3dzOwotCi0JLyogRm9yIHBhcnRpYWwgcGF0aHMsIHNjYWxlIHJvdyBlc3RpbWF0ZS4gKi8KLQlp ZiAocGF0aC0+anBhdGgucGF0aC5wYXJhbGxlbF93b3JrZXJzID4gMCkKLQl7Ci0JCWRvdWJsZQkJ cGFyYWxsZWxfZGl2aXNvciA9IGdldF9wYXJhbGxlbF9kaXZpc29yKCZwYXRoLT5qcGF0aC5wYXRo KTsKLQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPQotCQkJY2xhbXBfcm93X2VzdChwYXRoLT5q cGF0aC5wYXRoLnJvd3MgLyBwYXJhbGxlbF9kaXZpc29yKTsKLQl9CisJc2V0X2pvaW5wYXRoX3Np emUocm9vdCwgJnBhdGgtPmpwYXRoLCBleHRyYS0+c2ppbmZvKTsKIAogCS8qIG1hcmsgdGhlIHBh dGggd2l0aCBlc3RpbWF0ZWQgIyBvZiBiYXRjaGVzICovCiAJcGF0aC0+bnVtX2JhdGNoZXMgPSBu dW1iYXRjaGVzOwpAQCAtNTA2MSw2ICs1MDI3LDU3IEBAIGdldF9yZXN0cmljdGlvbl9xdWFsX2Nv c3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJCSpxcHF1YWxfY29z dCA9IGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Q7CiB9CiAKKy8qCisgKiBzZXRfam9pbnBhdGhf c2l6ZQorICoJICBTZXQgdGhlIGNvcnJlY3Qgcm93IGVzdGltYXRlIGZvciB0aGUgZ2l2ZW4gam9p biBwYXRoLgorICoKKyAqICdqcGF0aCcgaXMgdGhlIGpvaW4gcGF0aCB1bmRlciBjb25zaWRlcmF0 aW9uLgorICogJ3NqaW5mbycgaXMgYW55IFNwZWNpYWxKb2luSW5mbyByZWxldmFudCB0byB0aGlz IGpvaW4uCisgKgorICogTm90ZSB0aGF0IGZvciBhIGdyb3VwZWQgam9pbiByZWxhdGlvbiwgaXRz IHBhdGhzIGNvdWxkIGhhdmUgdmVyeSBkaWZmZXJlbnQKKyAqIHJvd2NvdW50IGVzdGltYXRlcywg c28gd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHJvd2NvdW50IGVzdGltYXRlIHVzaW5nIHRoZQor ICogb3V0ZXIgcGF0aCBhbmQgaW5uZXIgcGF0aCBvZiB0aGUgZ2l2ZW4gam9pbiBwYXRoLgorICov CitzdGF0aWMgdm9pZAorc2V0X2pvaW5wYXRoX3NpemUoUGxhbm5lckluZm8gKnJvb3QsIEpvaW5Q YXRoICpqcGF0aCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCit7CisJaWYgKElTX0dST1VQRURf UkVMKGpwYXRoLT5wYXRoLnBhcmVudCkpCisJeworCQlQYXRoCSAgICpvdXRlcl9wYXRoID0ganBh dGgtPm91dGVyam9pbnBhdGg7CisJCVBhdGgJICAgKmlubmVyX3BhdGggPSBqcGF0aC0+aW5uZXJq b2lucGF0aDsKKworCQkvKgorCQkgKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIHJvd3Mgb2YgdGhp cyBncm91cGVkIGpvaW4gcGF0aCBhcyB0aGUgc2l6ZXMKKwkJICogb2YgdGhlIG91dGVyIGFuZCBp bm5lciBwYXRocyB0aW1lcyB0aGUgc2VsZWN0aXZpdHkgb2YgdGhlIGNsYXVzZXMKKwkJICogdGhh dCBoYXZlIGVuZGVkIHVwIGF0IHRoaXMgam9pbiBub2RlLgorCQkgKi8KKwkJanBhdGgtPnBhdGgu cm93cyA9IGNhbGNfam9pbnJlbF9zaXplX2VzdGltYXRlKHJvb3QsCisJCQkJCQkJCQkJCQkJICBq cGF0aC0+cGF0aC5wYXJlbnQsCisJCQkJCQkJCQkJCQkJICBvdXRlcl9wYXRoLT5wYXJlbnQsCisJ CQkJCQkJCQkJCQkJICBpbm5lcl9wYXRoLT5wYXJlbnQsCisJCQkJCQkJCQkJCQkJICBvdXRlcl9w YXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJCSAgaW5uZXJfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkJ CQkgIHNqaW5mbywKKwkJCQkJCQkJCQkJCQkgIGpwYXRoLT5qb2lucmVzdHJpY3RpbmZvKTsKKwl9 CisJZWxzZQorCXsKKwkJaWYgKGpwYXRoLT5wYXRoLnBhcmFtX2luZm8pCisJCQlqcGF0aC0+cGF0 aC5yb3dzID0ganBhdGgtPnBhdGgucGFyYW1faW5mby0+cHBpX3Jvd3M7CisJCWVsc2UKKwkJCWpw YXRoLT5wYXRoLnJvd3MgPSBqcGF0aC0+cGF0aC5wYXJlbnQtPnJvd3M7CisKKwkJLyogRm9yIHBh cnRpYWwgcGF0aHMsIHNjYWxlIHJvdyBlc3RpbWF0ZS4gKi8KKwkJaWYgKGpwYXRoLT5wYXRoLnBh cmFsbGVsX3dvcmtlcnMgPiAwKQorCQl7CisJCQlkb3VibGUJCXBhcmFsbGVsX2Rpdmlzb3IgPSBn ZXRfcGFyYWxsZWxfZGl2aXNvcigmanBhdGgtPnBhdGgpOworCisJCQlqcGF0aC0+cGF0aC5yb3dz ID0KKwkJCQljbGFtcF9yb3dfZXN0KGpwYXRoLT5wYXRoLnJvd3MgLyBwYXJhbGxlbF9kaXZpc29y KTsKKwkJfQorCX0KK30KKwogCiAvKgogICogY29tcHV0ZV9zZW1pX2FudGlfam9pbl9mYWN0b3Jz CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCBjMmViMzAwZWE5Li44OGFi MjcyNDc5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTM1LDYgKzM1 LDkgQEAgc3RhdGljIGJvb2wgaGFzX2xlZ2FsX2pvaW5jbGF1c2UoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgYm9vbCByZXN0cmljdGlvbl9pc19jb25zdGFudF9m YWxzZShMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVs LAogCQkJCQkJCQkJCSAgYm9vbCBvbmx5X3B1c2hlZF9kb3duKTsKK3N0YXRpYyB2b2lkIG1ha2Vf Z3JvdXBlZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwKKwkJ CQkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkg IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3QpOwogc3RhdGljIHZv aWQgcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwxLAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDIsIFJlbE9wdEluZm8gKmpvaW5y ZWwsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlz dCk7CkBAIC03NzEsNiArNzc0LDEwIEBAIG1ha2Vfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIpCiAJCXJldHVybiBqb2lucmVsOwog CX0KIAorCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGZvciAnam9pbnJlbCcgaWYg cG9zc2libGUuICovCisJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJvb3QsIHJlbDEsIHJlbDIsIGpv aW5yZWwsIHNqaW5mbywKKwkJCQkJCSAgcmVzdHJpY3RsaXN0KTsKKwogCS8qIEFkZCBwYXRocyB0 byB0aGUgam9pbiByZWxhdGlvbi4gKi8KIAlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9v dCwgcmVsMSwgcmVsMiwgam9pbnJlbCwgc2ppbmZvLAogCQkJCQkJCQlyZXN0cmljdGxpc3QpOwpA QCAtODgyLDYgKzg4OSwxMzUgQEAgYWRkX291dGVyX2pvaW5zX3RvX3JlbGlkcyhQbGFubmVySW5m byAqcm9vdCwgUmVsaWRzIGlucHV0X3JlbGlkcywKIAlyZXR1cm4gaW5wdXRfcmVsaWRzOwogfQog CisvKgorICogbWFrZV9ncm91cGVkX2pvaW5fcmVsCisgKgkgIEJ1aWxkIGEgZ3JvdXBlZCBqb2lu IHJlbGF0aW9uIG91dCBvZiAnam9pbnJlbCcgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMKKyAqCSAg cG9zc2libGUgYW5kIHRoZSAnam9pbnJlbCcgY2FuIHByb2R1Y2UgZ3JvdXBlZCBwYXRocy4KKyAq CisgKiBXZSBhbHNvIGdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBn cm91cGVkIHJlbGF0aW9uIGJ5CisgKiBqb2luaW5nIHRoZSBncm91cGVkIHBhdGhzIG9mICdyZWwx JyB0byB0aGUgcGxhaW4gcGF0aHMgb2YgJ3JlbDInLCBvciBieQorICogam9pbmluZyB0aGUgZ3Jv dXBlZCBwYXRocyBvZiAncmVsMicgdG8gdGhlIHBsYWluIHBhdGhzIG9mICdyZWwxJy4KKyAqLwor c3RhdGljIHZvaWQKK21ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsMSwKKwkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpqb2lu cmVsLAorCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3Qp Cit7CisJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsT3B0SW5mbyAqcmVsMV9ncm91cGVk OworCVJlbE9wdEluZm8gKnJlbDJfZ3JvdXBlZDsKKwlib29sCQlyZWwxX2VtcHR5OworCWJvb2wJ CXJlbDJfZW1wdHk7CisJYm9vbAkJeWV0X3RvX2FkZCA9IGZhbHNlOworCisJLyoKKwkgKiBJZiB0 aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25z LCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9v dC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0g TklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBncm91 cGVkIGpvaW5yZWwgZm9yIHRoaXMgam9pbnJlbC4KKwkgKi8KKwlyZWxfZ3JvdXBlZCA9IGZpbmRf Z3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+cmVsaWRzKTsKKworCS8qCisJICogQ29uc3RydWN0 IGEgbmV3IFJlbE9wdEluZm8gZm9yIHRoZSBncm91cGVkIGpvaW4gcmVsYXRpb24gaWYgdGhlcmUg aXMgbm8KKwkgKiBleGlzdGluZyBvbmUuCisJICovCisJaWYgKHJlbF9ncm91cGVkID09IE5VTEwp CisJeworCQlSZWxBZ2dJbmZvICphZ2dfaW5mbyA9IE5VTEw7CisKKwkJLyoKKwkJICogUHJlcGFy ZSB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciB0aGlz CisJCSAqIGpvaW4gcmVsYXRpb24uCisJCSAqLworCQlhZ2dfaW5mbyA9IGNyZWF0ZV9yZWxfYWdn X2luZm8ocm9vdCwgam9pbnJlbCk7CisJCWlmIChhZ2dfaW5mbyA9PSBOVUxMKQorCQkJcmV0dXJu OworCisJCS8qIGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0 aW9uICovCisJCXJlbF9ncm91cGVkID0gYnVpbGRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbCk7 CisJCXJlbF9ncm91cGVkLT5yZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCQlyZWxfZ3Jv dXBlZC0+cm93cyA9IGFnZ19pbmZvLT5ncm91cGVkX3Jvd3M7CisJCXJlbF9ncm91cGVkLT5hZ2df aW5mbyA9IGFnZ19pbmZvOworCisJCS8qCisJCSAqIElmIHRoZSBncm91cGVkIHBhdGhzIGZvciB0 aGUgZ2l2ZW4gam9pbiByZWxhdGlvbiBhcmUgY29uc2lkZXJlZAorCQkgKiB1c2VmdWwsIGFkZCB0 aGUgZ3JvdXBlZCByZWxhdGlvbiB3ZSBqdXN0IGJ1aWx0IHRvIHRoZSBQbGFubmVySW5mbworCQkg KiB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgZnVydGhlciBqb2luaW5nIG9yIGZvciBhY3Rpbmcg YXMgdGhlIHVwcGVyCisJCSAqIHJlbCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiBwYXJ0aWFs IGFnZ3JlZ2F0aW9uLiAgT3RoZXJ3aXNlLCB3ZQorCQkgKiBuZWVkIHRvIHBvc3Rwb25lIHRoZSBk ZWNpc2lvbiBvbiBhZGRpbmcgdGhlIGdyb3VwZWQgcmVsYXRpb24gdG8gdGhlCisJCSAqIFBsYW5u ZXJJbmZvLCBhcyBpdCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgY2FuIGdlbmVyYXRlIGFueSBncm91 cGVkCisJCSAqIHBhdGhzIGJ5IGpvaW5pbmcgdGhlIGdpdmVuIHBhaXIgb2YgaW5wdXQgcmVsYXRp b25zLgorCQkgKi8KKwkJaWYgKGFnZ19pbmZvLT5hZ2dfdXNlZnVsKQorCQkJYWRkX2dyb3VwZWRf cmVsKHJvb3QsIHJlbF9ncm91cGVkKTsKKwkJZWxzZQorCQkJeWV0X3RvX2FkZCA9IHRydWU7CisJ fQorCisJQXNzZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisKKwkvKiBXZSBtYXkg aGF2ZSBhbHJlYWR5IHByb3ZlbiB0aGlzIGdyb3VwZWQgam9pbiByZWxhdGlvbiB0byBiZSBkdW1t eS4gKi8KKwlpZiAoSVNfRFVNTVlfUkVMKHJlbF9ncm91cGVkKSkKKwkJcmV0dXJuOworCisJLyog UmV0cmlldmUgdGhlIGdyb3VwZWQgcmVsYXRpb25zIGZvciB0aGUgdHdvIGlucHV0IHJlbHMgKi8K KwlyZWwxX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJlbDEtPnJlbGlkcyk7CisJ cmVsMl9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwyLT5yZWxpZHMpOworCisJ cmVsMV9lbXB0eSA9IChyZWwxX2dyb3VwZWQgPT0gTlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMV9n cm91cGVkKSk7CisJcmVsMl9lbXB0eSA9IChyZWwyX2dyb3VwZWQgPT0gTlVMTCB8fCBJU19EVU1N WV9SRUwocmVsMl9ncm91cGVkKSk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8g Z3JvdXBlZCByZWxhdGlvbi4gKi8KKwlpZiAocmVsMV9lbXB0eSAmJiByZWwyX2VtcHR5KQorCQly ZXR1cm47CisKKwkvKiBKb2luaW5nIHR3byBncm91cGVkIHJlbGF0aW9ucyBpcyBjdXJyZW50bHkg bm90IHN1cHBvcnRlZCAqLworCWlmICghcmVsMV9lbXB0eSAmJiAhcmVsMl9lbXB0eSkKKwkJcmV0 dXJuOworCisJLyogR2VuZXJhdGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdy b3VwZWQgcmVsYXRpb24gKi8KKwlpZiAoIXJlbDFfZW1wdHkpCisJeworCQlwb3B1bGF0ZV9qb2lu cmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMV9ncm91cGVkLCByZWwyLCByZWxfZ3JvdXBlZCwKKwkJ CQkJCQkJCXNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKworCQkvKgorCQkgKiBJdCBzaG91bGRuJ3Qg aGFwcGVuIHRoYXQgd2UgaGF2ZSBtYXJrZWQgcmVsMV9ncm91cGVkIGFzIGR1bW15IGluCisJCSAq IHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyBkdWUgdG8gcHJvdmFibHkgY29uc3RhbnQtZmFs c2Ugam9pbgorCQkgKiByZXN0cmljdGlvbnMsIGhlbmNlIHdlIHdvdWxkbid0IGVuZCB1cCB3aXRo IGEgcGxhbiB0aGF0IGhhcyBBZ2dyZWYKKwkJICogaW4gbm9uLUFnZyBwbGFuIG5vZGUuCisJCSAq LworCQlBc3NlcnQoIUlTX0RVTU1ZX1JFTChyZWwxX2dyb3VwZWQpKTsKKwl9CisJZWxzZSBpZiAo IXJlbDJfZW1wdHkpCisJeworCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgcmVs MSwgcmVsMl9ncm91cGVkLCByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCXNqaW5mbywgcmVzdHJpY3Rs aXN0KTsKKworCQkvKgorCQkgKiBJdCBzaG91bGRuJ3QgaGFwcGVuIHRoYXQgd2UgaGF2ZSBtYXJr ZWQgcmVsMl9ncm91cGVkIGFzIGR1bW15IGluCisJCSAqIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9w YXRocyBkdWUgdG8gcHJvdmFibHkgY29uc3RhbnQtZmFsc2Ugam9pbgorCQkgKiByZXN0cmljdGlv bnMsIGhlbmNlIHdlIHdvdWxkbid0IGVuZCB1cCB3aXRoIGEgcGxhbiB0aGF0IGhhcyBBZ2dyZWYK KwkJICogaW4gbm9uLUFnZyBwbGFuIG5vZGUuCisJCSAqLworCQlBc3NlcnQoIUlTX0RVTU1ZX1JF TChyZWwyX2dyb3VwZWQpKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlIGhhdmUgZ2VuZXJhdGVk IGdyb3VwZWQgcGF0aHMgYnkgam9pbmluZyB0aGUgZ2l2ZW4gcGFpciBvZgorCSAqIGlucHV0IHJl bGF0aW9ucywgYWRkIHRoZSBncm91cGVkIHJlbGF0aW9uIHRvIHRoZSBQbGFubmVySW5mbyBpZiB3 ZSBoYXZlCisJICogbm90IGFscmVhZHkgZG9uZSBzby4KKwkgKi8KKwlpZiAoeWV0X3RvX2FkZCkK KwkJYWRkX2dyb3VwZWRfcmVsKHJvb3QsIHJlbF9ncm91cGVkKTsKK30KKwogLyoKICAqIHBvcHVs YXRlX2pvaW5yZWxfd2l0aF9wYXRocwogICoJICBBZGQgcGF0aHMgdG8gdGhlIGdpdmVuIGpvaW5y ZWwgZm9yIGdpdmVuIHBhaXIgb2Ygam9pbmluZyByZWxhdGlvbnMuIFRoZQpAQCAtMTY3NCw2ICsx ODEwLDExIEBAIHRyeV9wYXJ0aXRpb253aXNlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQkJCQkgYWRqdXN0X2NoaWxkX3JlbGlk cyhqb2lucmVsLT5yZWxpZHMsCiAJCQkJCQkJCQkJCSBuYXBwaW5mb3MsIGFwcGluZm9zKSkpOwog CisJCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGZvciAnY2hpbGRfam9pbnJlbCcg aWYgcG9zc2libGUgKi8KKwkJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJvb3QsIGNoaWxkX3JlbDEs IGNoaWxkX3JlbDIsCisJCQkJCQkJICBjaGlsZF9qb2lucmVsLCBjaGlsZF9zamluZm8sCisJCQkJ CQkJICBjaGlsZF9yZXN0cmljdGxpc3QpOworCiAJCS8qIEFuZCBtYWtlIHBhdGhzIGZvciB0aGUg Y2hpbGQgam9pbiAqLwogCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRf cmVsMSwgY2hpbGRfcmVsMiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5kZXggMmNiMGFlNmQ2NS4uMDgy MTcyMzc1NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFu LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKQEAgLTE0LDYg KzE0LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3Mv bmJ0cmVlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCkBAIC04MSw2 ICs4Miw4IEBAIHR5cGVkZWYgc3RydWN0IEpvaW5UcmVlSXRlbQogfSBKb2luVHJlZUl0ZW07CiAK IAorc3RhdGljIHZvaWQgY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3MoUGxhbm5lckluZm8gKnJvb3Qp Oworc3RhdGljIHZvaWQgY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MoUGxhbm5lckluZm8gKnJv b3QpOwogc3RhdGljIHZvaWQgZXh0cmFjdF9sYXRlcmFsX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmJyZWwsCiAJCQkJCQkJCQkgICBJbmRleCBydGluZGV4KTsKIHN0 YXRpYyBMaXN0ICpkZWNvbnN0cnVjdF9yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpq dG5vZGUsCkBAIC02MjgsNiArNjMxLDI2MSBAQCByZW1vdmVfdXNlbGVzc19ncm91cGJ5X2NvbHVt bnMoUGxhbm5lckluZm8gKnJvb3QpCiAJfQogfQogCisvKgorICogc2V0dXBfZWFnZXJfYWdncmVn YXRpb24KKyAqCSAgQ2hlY2sgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMgYXBwbGljYWJsZSwgYW5k IGlmIHNvIGNvbGxlY3Qgc3VpdGFibGUKKyAqCSAgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBn cm91cGluZyBleHByZXNzaW9ucyBpbiB0aGUgcXVlcnkuCisgKi8KK3ZvaWQKK3NldHVwX2VhZ2Vy X2FnZ3JlZ2F0aW9uKFBsYW5uZXJJbmZvICpyb290KQoreworCS8qCisJICogRG9uJ3QgYXBwbHkg ZWFnZXIgYWdncmVnYXRpb24gaWYgZGlzYWJsZWQgYnkgdXNlci4KKwkgKi8KKwlpZiAoIWVuYWJs ZV9lYWdlcl9hZ2dyZWdhdGUpCisJCXJldHVybjsKKworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFn ZXIgYWdncmVnYXRpb24gaWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBHUk9VUCBCWQorCSAqIGNs YXVzZXMuCisJICovCisJaWYgKCFyb290LT5wcm9jZXNzZWRfZ3JvdXBDbGF1c2UpCisJCXJldHVy bjsKKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9ydCBncm91cGluZyBz ZXRzLgorCSAqLworCWlmIChyb290LT5wYXJzZS0+Z3JvdXBpbmdTZXRzKQorCQlyZXR1cm47CisK KwkvKgorCSAqIEZvciBub3cgd2UgZG9uJ3QgdHJ5IHRvIHN1cHBvcnQgRElTVElOQ1Qgb3IgT1JE RVIgQlkgYWdncmVnYXRlcy4KKwkgKi8KKwlpZiAocm9vdC0+bnVtT3JkZXJlZEFnZ3MgPiAwKQor CQlyZXR1cm47CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgYWdncmVnYXRlcyB0aGF0IGRv IG5vdCBzdXBwb3J0IHBhcnRpYWwgbW9kZSwgb3IgYW55CisJICogcGFydGlhbCBhZ2dyZWdhdGVz IHRoYXQgYXJlIG5vbi1zZXJpYWxpemFibGUsIGRvIG5vdCBhcHBseSBlYWdlcgorCSAqIGFnZ3Jl Z2F0aW9uLgorCSAqLworCWlmIChyb290LT5oYXNOb25QYXJ0aWFsQWdncyB8fCByb290LT5oYXNO b25TZXJpYWxBZ2dzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGRvbid0IHRyeSB0byBhcHBs eSBlYWdlciBhZ2dyZWdhdGlvbiBpZiB0aGVyZSBhcmUgc2V0LXJldHVybmluZworCSAqIGZ1bmN0 aW9ucyBpbiB0YXJnZXRsaXN0LgorCSAqLworCWlmIChyb290LT5wYXJzZS0+aGFzVGFyZ2V0U1JG cykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBFYWdlciBhZ2dyZWdhdGlvbiBvbmx5IG1ha2VzIHNl bnNlIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBiYXNlIHJlbHMgaW4KKwkgKiB0aGUgcXVlcnkuCisJ ICovCisJaWYgKGJtc19tZW1iZXJzaGlwKHJvb3QtPmFsbF9iYXNlcmVscykgIT0gQk1TX01VTFRJ UExFKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3QgYWdncmVnYXRlIGV4cHJlc3Npb25z IGFuZCBwbGFpbiBWYXJzIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QKKwkgKiBhbmQgaGF2aW5n UXVhbC4KKwkgKi8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhyb290KTsKKworCS8qCisJICog SWYgdGhlcmUgYXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucywgd2UgY2Fubm90 IGFwcGx5IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1 c2VfbGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBncm91cGluZyBl eHByZXNzaW9ucyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBjbGF1c2VzLgorCSAqLworCWNyZWF0 ZV9ncm91cGluZ19leHByX2luZm9zKHJvb3QpOworfQorCisvKgorICogY3JlYXRlX2FnZ19jbGF1 c2VfaW5mb3MKKyAqCSAgU2VhcmNoIHRoZSB0YXJnZXRsaXN0IGFuZCBoYXZpbmdRdWFsIGZvciBB Z2dyZWZzIGFuZCBwbGFpbiBWYXJzLCBhbmQKKyAqCSAgY3JlYXRlIGFuIEFnZ0NsYXVzZUluZm8g Zm9yIGVhY2ggQWdncmVmIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfYWdnX2NsYXVz ZV9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlMaXN0CSAgICp0bGlzdF9leHByczsKKwlM aXN0CSAgICphZ2dfY2xhdXNlX2xpc3QgPSBOSUw7CisJTGlzdAkgICAqdGxpc3RfdmFycyA9IE5J TDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCUFzc2VydChyb290LT5hZ2dfY2xhdXNlX2xpc3QgPT0g TklMKTsKKwlBc3NlcnQocm9vdC0+dGxpc3RfdmFycyA9PSBOSUwpOworCisJdGxpc3RfZXhwcnMg PSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0LAorCQkJCQkJ CQkgIFBWQ19JTkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBWQ19SRUNVUlNFX1dJTkRP V0ZVTkNTIHwKKwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCisJLyoKKwkg KiBBZ2dyZWdhdGVzIHdpdGhpbiB0aGUgSEFWSU5HIGNsYXVzZSBuZWVkIHRvIGJlIHByb2Nlc3Nl ZCBpbiB0aGUgc2FtZQorCSAqIHdheSBhcyB0aG9zZSBpbiB0aGUgdGFyZ2V0bGlzdC4gIE5vdGUg dGhhdCBIQVZJTkcgY2FuIGNvbnRhaW4gQWdncmVmcworCSAqIGJ1dCBub3QgV2luZG93RnVuY3Mu CisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsICE9IE5VTEwpCisJeworCQlMaXN0 CSAgICpoYXZpbmdfZXhwcnM7CisKKwkJaGF2aW5nX2V4cHJzID0gcHVsbF92YXJfY2xhdXNlKChO b2RlICopIHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJICAgUFZDX0lOQ0xVREVf QUdHUkVHQVRFUyB8CisJCQkJCQkJCQkgICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCQlp ZiAoaGF2aW5nX2V4cHJzICE9IE5JTCkKKwkJeworCQkJdGxpc3RfZXhwcnMgPSBsaXN0X2NvbmNh dCh0bGlzdF9leHBycywgaGF2aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJlZShoYXZpbmdfZXhwcnMp OworCQl9CisJfQorCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpl eHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisJCUFnZ0Ns YXVzZUluZm8gKmFjX2luZm87CisKKwkJLyogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9y dCBHUk9VUElORygpIGV4cHJlc3Npb25zICovCisJCWlmIChJc0EoZXhwciwgR3JvdXBpbmdGdW5j KSkKKwkJeworCQkJbGlzdF9mcmVlX2RlZXAoYWdnX2NsYXVzZV9saXN0KTsKKwkJCWxpc3RfZnJl ZSh0bGlzdF92YXJzKTsKKwkJCWxpc3RfZnJlZSh0bGlzdF9leHBycyk7CisKKwkJCXJldHVybjsK KwkJfQorCisJCS8qIENvbGxlY3QgcGxhaW4gVmFycyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLwor CQlpZiAoSXNBKGV4cHIsIFZhcikpCisJCXsKKwkJCXRsaXN0X3ZhcnMgPSBsaXN0X2FwcGVuZF91 bmlxdWUodGxpc3RfdmFycywgZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFnZ3JlZiA9 IGNhc3ROb2RlKEFnZ3JlZiwgZXhwcik7CisKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnb3JkZXIgPT0g TklMKTsKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnZGlzdGluY3QgPT0gTklMKTsKKworCQkvKgorCQkg KiBJZiB0aGVyZSBhcmUgYW55IHNlY3VyaXR5UXVhbHMsIGRvIG5vdCB0cnkgdG8gYXBwbHkgZWFn ZXIKKwkJICogYWdncmVnYXRpb24gaWYgYW55IG5vbi1sZWFrcHJvb2YgYWdncmVnYXRlIGZ1bmN0 aW9ucyBhcmUgcHJlc2VudC4KKwkJICogVGhpcyBpcyBvdmVybHkgc3RyaWN0LCBidXQgZm9yIG5v dy4uLgorCQkgKi8KKwkJaWYgKHJvb3QtPnF1YWxfc2VjdXJpdHlfbGV2ZWwgPiAwICYmCisJCQkh Z2V0X2Z1bmNfbGVha3Byb29mKGFnZ3JlZi0+YWdnZm5vaWQpKQorCQl7CisJCQlsaXN0X2ZyZWVf ZGVlcChhZ2dfY2xhdXNlX2xpc3QpOworCQkJbGlzdF9mcmVlKHRsaXN0X3ZhcnMpOworCQkJbGlz dF9mcmVlKHRsaXN0X2V4cHJzKTsKKworCQkJcmV0dXJuOworCQl9CisKKwkJYWNfaW5mbyA9IG1h a2VOb2RlKEFnZ0NsYXVzZUluZm8pOworCQlhY19pbmZvLT5hZ2dyZWYgPSBhZ2dyZWY7CisJCWFj X2luZm8tPmFnZ19ldmFsX2F0ID0gcHVsbF92YXJub3Mocm9vdCwgKE5vZGUgKikgYWdncmVmKTsK KworCQlhZ2dfY2xhdXNlX2xpc3QgPSBsaXN0X2FwcGVuZF91bmlxdWUoYWdnX2NsYXVzZV9saXN0 LCBhY19pbmZvKTsKKwl9CisKKwlsaXN0X2ZyZWUodGxpc3RfZXhwcnMpOworCisJcm9vdC0+YWdn X2NsYXVzZV9saXN0ID0gYWdnX2NsYXVzZV9saXN0OworCXJvb3QtPnRsaXN0X3ZhcnMgPSB0bGlz dF92YXJzOworfQorCisvKgorICogY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MKKyAqCSAgQ3Jl YXRlIEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1c2FibGUgYXMgZ3JvdXBpbmcg a2V5LgorICoKKyAqIElmIGFueSBncm91cGluZyBleHByZXNzaW9uIGlzIG5vdCBzdWl0YWJsZSwg d2Ugd2lsbCBqdXN0IHJldHVybiB3aXRoCisgKiByb290LT5ncm91cF9leHByX2xpc3QgYmVpbmcg TklMLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MoUGxhbm5l ckluZm8gKnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJTGlzdAkgICAqc29ydGdy b3VwcmVmcyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWlsaWVzID0gTklMOworCUxpc3RD ZWxsICAgKmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJCQkgICAqbGMzOworCisJQXNz ZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJZm9yZWFjaChsYywgcm9vdC0+ cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3VwQ2xhdXNlICpzZ2MgPSBsZmly c3Rfbm9kZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IGdldF9z b3J0Z3JvdXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0KTsKKwkJVHlwZUNh Y2hlRW50cnkgKnRjZTsKKwkJT2lkCQkJZXF1YWxpbWFnZXByb2M7CisKKwkJQXNzZXJ0KHRsZS0+ cmVzc29ydGdyb3VwcmVmID4gMCk7CisKKwkJLyoKKwkJICogRm9yIG5vdyB3ZSBvbmx5IHN1cHBv cnQgcGxhaW4gVmFycyBhcyBncm91cGluZyBleHByZXNzaW9ucy4KKwkJICovCisJCWlmICghSXNB KHRsZS0+ZXhwciwgVmFyKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBFYWdlciBhZ2dyZWdh dGlvbiBpcyBvbmx5IHBvc3NpYmxlIGlmIGVxdWFsaXR5IGltcGxpZXMgaW1hZ2UKKwkJICogZXF1 YWxpdHkgZm9yIGVhY2ggZ3JvdXBpbmcga2V5LiAgT3RoZXJ3aXNlLCBwbGFjaW5nIGtleXMgd2l0 aAorCQkgKiBkaWZmZXJlbnQgYnl0ZSBpbWFnZXMgaW50byB0aGUgc2FtZSBncm91cCBtYXkgcmVz dWx0IGluIHRoZSBsb3NzIG9mCisJCSAqIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgbmVjZXNz YXJ5IHRvIGV2YWx1YXRlIHVwcGVyIHF1YWwgY2xhdXNlcy4KKwkJICoKKwkJICogRm9yIGluc3Rh bmNlLCB0aGUgTlVNRVJJQyBkYXRhIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgYXMgdmFsdWVzCisJ CSAqIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYnkgdGhlIGVxdWFsaXR5IG9wZXJhdG9yIChl LmcuLCAwIGFuZAorCQkgKiAwLjApIGNhbiBoYXZlIGRpZmZlcmVudCBzY2FsZXMuCisJCSAqLwor CQl0Y2UgPSBsb29rdXBfdHlwZV9jYWNoZShleHByVHlwZSgoTm9kZSAqKSB0bGUtPmV4cHIpLAor CQkJCQkJCQlUWVBFQ0FDSEVfQlRSRUVfT1BGQU1JTFkpOworCQlpZiAoIU9pZElzVmFsaWQodGNl LT5idHJlZV9vcGYpIHx8CisJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkKKwkJ CXJldHVybjsKKworCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+YnRy ZWVfb3BmLAorCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJICAg dGNlLT5idHJlZV9vcGludHlwZSwKKwkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJPQyk7CisJ CWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJCSFEYXR1bUdldEJvb2woT2lk RnVuY3Rpb25DYWxsMUNvbGwoZXF1YWxpbWFnZXByb2MsCisJCQkJCQkJCQkJCSAgIHRjZS0+dHlw Y29sbGF0aW9uLAorCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHRjZS0+YnRyZWVfb3Bp bnR5cGUpKSkpCisJCQlyZXR1cm47CisKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB0bGUtPmV4 cHIpOworCQlzb3J0Z3JvdXByZWZzID0gbGFwcGVuZF9pbnQoc29ydGdyb3VwcmVmcywgdGxlLT5y ZXNzb3J0Z3JvdXByZWYpOworCQlidHJlZV9vcGZhbWlsaWVzID0gbGFwcGVuZF9vaWQoYnRyZWVf b3BmYW1pbGllcywgdGNlLT5idHJlZV9vcGYpOworCX0KKworCS8qCisJICogQ29uc3RydWN0IEdy b3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbi4KKwkgKi8KKwlmb3J0aHJlZShsYzEsIGV4 cHJzLCBsYzIsIHNvcnRncm91cHJlZnMsIGxjMywgYnRyZWVfb3BmYW1pbGllcykKKwl7CisJCUV4 cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMxKTsKKwkJaW50CQkJc29ydGdyb3VwcmVm ID0gbGZpcnN0X2ludChsYzIpOworCQlPaWQJCQlidHJlZV9vcGZhbWlseSA9IGxmaXJzdF9vaWQo bGMzKTsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbzsKKworCQlnZV9pbmZvID0gbWFrZU5vZGUo R3JvdXBFeHBySW5mbyk7CisJCWdlX2luZm8tPmV4cHIgPSAoRXhwciAqKSBjb3B5T2JqZWN0KGV4 cHIpOworCQlnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPSBzb3J0Z3JvdXByZWY7CisJCWdlX2luZm8t PmJ0cmVlX29wZmFtaWx5ID0gYnRyZWVfb3BmYW1pbHk7CisKKwkJcm9vdC0+Z3JvdXBfZXhwcl9s aXN0ID0gbGFwcGVuZChyb290LT5ncm91cF9leHByX2xpc3QsIGdlX2luZm8pOworCX0KK30KKwog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiAgKgogICoJICBMQVRFUkFMIFJFRkVSRU5DRVMKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCmluZGV4IGFkZTIzZmQ5ZDUuLjMwY2VjNmQ5YjIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtNjQsOCArNjQsMTIgQEAg cXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBOT1RFOiBhcHBlbmRfcmVsX2xp c3Qgd2FzIHNldCB1cCBieSBzdWJxdWVyeV9wbGFubmVyLCBzbyBkbyBub3QgdG91Y2gKIAkgKiBo ZXJlLgogCSAqLwotCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBOSUw7Ci0Jcm9vdC0+am9pbl9yZWxf aGFzaCA9IE5VTEw7CisJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2RlKFJlbEluZm9MaXN0 KTsKKwlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKKwlyb290LT5qb2luX3JlbF9s aXN0LT5oYXNoID0gTlVMTDsKKwlyb290LT5ncm91cGVkX3JlbF9saXN0ID0gbWFrZU5vZGUoUmVs SW5mb0xpc3QpOworCXJvb3QtPmdyb3VwZWRfcmVsX2xpc3QtPml0ZW1zID0gTklMOworCXJvb3Qt Pmdyb3VwZWRfcmVsX2xpc3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xldmVsID0g TlVMTDsKIAlyb290LT5qb2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0aGtleXMg PSBOSUw7CkBAIC03Niw2ICs4MCw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3Qs CiAJcm9vdC0+cGxhY2Vob2xkZXJfbGlzdCA9IE5JTDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJh eSA9IE5VTEw7CiAJcm9vdC0+cGxhY2Vob2xkZXJfYXJyYXlfc2l6ZSA9IDA7CisJcm9vdC0+YWdn X2NsYXVzZV9saXN0ID0gTklMOworCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9IE5JTDsKKwlyb290 LT50bGlzdF92YXJzID0gTklMOwogCXJvb3QtPmZrZXlfbGlzdCA9IE5JTDsKIAlyb290LT5pbml0 aWFsX3JlbHMgPSBOSUw7CiAKQEAgLTI2MCw2ICsyNjcsMTIgQEAgcXVlcnlfcGxhbm5lcihQbGFu bmVySW5mbyAqcm9vdCwKIAkgKi8KIAlleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2NsYXVzZXMocm9v dCk7CiAKKwkvKgorCSAqIENoZWNrIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2FibGUs IGFuZCBpZiBzbywgc2V0IHVwCisJICogcm9vdC0+YWdnX2NsYXVzZV9saXN0IGFuZCByb290LT5n cm91cF9leHByX2xpc3QuCisJICovCisJc2V0dXBfZWFnZXJfYWdncmVnYXRpb24ocm9vdCk7CisK IAkvKgogCSAqIE5vdyBleHBhbmQgYXBwZW5kcmVscyBieSBhZGRpbmcgIm90aGVycmVscyIgZm9y IHRoZWlyIGNoaWxkcmVuLiAgV2UKIAkgKiBkZWxheSB0aGlzIHRvIHRoZSBlbmQgc28gdGhhdCB3 ZSBoYXZlIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYwppbmRleCA2ODAzZWRkMDg1Li5kY2U1MGU0ODM3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC0yMjksNyArMjI5LDYgQEAgc3RhdGljIHZvaWQgYWRk X3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5w dXRfcmVsLAogCQkJCQkJCQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJ CQkJCQkJCQkgIGNvbnN0IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkJCQkgIGdy b3VwaW5nX3NldHNfZGF0YSAqZ2QsCi0JCQkJCQkJCQkgIGRvdWJsZSBkTnVtR3JvdXBzLAogCQkJ CQkJCQkJICBHcm91cFBhdGhFeHRyYURhdGEgKmV4dHJhKTsKIHN0YXRpYyBSZWxPcHRJbmZvICpj cmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJ CQkJCSBSZWxPcHRJbmZvICpncm91cGVkX3JlbCwKQEAgLTM5MTUsOSArMzkxNCw3IEBAIGNyZWF0 ZV9vcmRpbmFyeV9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq aW5wdXRfcmVsLAogCQkJCQkJCSAgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEsCiAJCQkJCQkJ ICAgUmVsT3B0SW5mbyAqKnBhcnRpYWxseV9ncm91cGVkX3JlbF9wKQogewotCVBhdGgJICAgKmNo ZWFwZXN0X3BhdGggPSBpbnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJUmVsT3B0SW5m byAqcGFydGlhbGx5X2dyb3VwZWRfcmVsID0gTlVMTDsKLQlkb3VibGUJCWROdW1Hcm91cHM7CiAJ UGFydGl0aW9ud2lzZUFnZ3JlZ2F0ZVR5cGUgcGF0eXBlID0gUEFSVElUSU9OV0lTRV9BR0dSRUdB VEVfTk9ORTsKIAogCS8qCkBAIC0zOTk5LDIzICszOTk2LDE2IEBAIGNyZWF0ZV9vcmRpbmFyeV9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAog CiAJLyogR2F0aGVyIGFueSBwYXJ0aWFsbHkgZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAqLwogCWlm IChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXJ0aWFs X3BhdGhsaXN0KQotCXsKIAkJZ2F0aGVyX2dyb3VwaW5nX3BhdGhzKHJvb3QsIHBhcnRpYWxseV9n cm91cGVkX3JlbCk7Ci0JCXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwotCX0K IAotCS8qCi0JICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4KLQkgKi8KLQlkTnVtR3JvdXBz ID0gZ2V0X251bWJlcl9vZl9ncm91cHMocm9vdCwKLQkJCQkJCQkJCSAgY2hlYXBlc3RfcGF0aC0+ cm93cywKLQkJCQkJCQkJCSAgZ2QsCi0JCQkJCQkJCQkgIGV4dHJhLT50YXJnZXRMaXN0KTsKKwkv KiBOb3cgY2hvb3NlIHRoZSBiZXN0IHBhdGgocykgZm9yIHBhcnRpYWxseV9ncm91cGVkX3JlbC4g Ki8KKwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+ cGF0aGxpc3QpCisJCXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwogCiAJLyog QnVpbGQgZmluYWwgZ3JvdXBpbmcgcGF0aHMgKi8KIAlhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVs KHJvb3QsIGlucHV0X3JlbCwgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJICBwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwsIGFnZ19jb3N0cywgZ2QsCi0JCQkJCQkJICBkTnVtR3JvdXBzLCBleHRyYSk7CisJCQkJ CQkJICBleHRyYSk7CiAKIAkvKiBHaXZlIGEgaGVscGZ1bCBlcnJvciBpZiB3ZSBmYWlsZWQgdG8g ZmluZCBhbnkgaW1wbGVtZW50YXRpb24gKi8KIAlpZiAoZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09 IE5JTCkKQEAgLTY5MDYsMTYgKzY4OTYsNDIgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJICBSZWxPcHRJ bmZvICpncm91cGVkX3JlbCwKIAkJCQkJCSAgUmVsT3B0SW5mbyAqcGFydGlhbGx5X2dyb3VwZWRf cmVsLAogCQkJCQkJICBjb25zdCBBZ2dDbGF1c2VDb3N0cyAqYWdnX2Nvc3RzLAotCQkJCQkJICBn cm91cGluZ19zZXRzX2RhdGEgKmdkLCBkb3VibGUgZE51bUdyb3VwcywKKwkJCQkJCSAgZ3JvdXBp bmdfc2V0c19kYXRhICpnZCwKIAkJCQkJCSAgR3JvdXBQYXRoRXh0cmFEYXRhICpleHRyYSkKIHsK IAlRdWVyeQkgICAqcGFyc2UgPSByb290LT5wYXJzZTsKIAlQYXRoCSAgICpjaGVhcGVzdF9wYXRo ID0gaW5wdXRfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCVBhdGgJICAgKmNoZWFwZXN0X3Bh cnRpYWxseV9ncm91cGVkX3BhdGggPSBOVUxMOwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWNh bl9oYXNoID0gKGV4dHJhLT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfSEFTSCkgIT0gMDsKIAli b29sCQljYW5fc29ydCA9IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX1NPUlQpICE9 IDA7CiAJTGlzdAkgICAqaGF2aW5nUXVhbCA9IChMaXN0ICopIGV4dHJhLT5oYXZpbmdRdWFsOwog CUFnZ0NsYXVzZUNvc3RzICphZ2dfZmluYWxfY29zdHMgPSAmZXh0cmEtPmFnZ19maW5hbF9jb3N0 czsKKwlkb3VibGUJCWROdW1Hcm91cHMgPSAwOworCWRvdWJsZQkJZE51bUZpbmFsR3JvdXBzID0g MDsKKworCS8qCisJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3VwcyBmb3Igbm9uLXNwbGl0IGFn Z3JlZ2F0aW9uLgorCSAqLworCWROdW1Hcm91cHMgPSBnZXRfbnVtYmVyX29mX2dyb3Vwcyhyb290 LAorCQkJCQkJCQkJICBjaGVhcGVzdF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJICBnZCwKKwkJCQkJ CQkJCSAgZXh0cmEtPnRhcmdldExpc3QpOworCisJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAm JiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0KQorCXsKKwkJY2hlYXBlc3RfcGFydGlh bGx5X2dyb3VwZWRfcGF0aCA9CisJCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3Rv dGFsX3BhdGg7CisKKwkJLyoKKwkJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3VwcyBmb3IgZmlu YWwgcGhhc2Ugb2YgcGFydGlhbCBhZ2dyZWdhdGlvbi4KKwkJICovCisJCWROdW1GaW5hbEdyb3Vw cyA9CisJCQlnZXRfbnVtYmVyX29mX2dyb3Vwcyhyb290LAorCQkJCQkJCQkgY2hlYXBlc3RfcGFy dGlhbGx5X2dyb3VwZWRfcGF0aC0+cm93cywKKwkJCQkJCQkJIGdkLAorCQkJCQkJCQkgZXh0cmEt PnRhcmdldExpc3QpOworCX0KIAogCWlmIChjYW5fc29ydCkKIAl7CkBAIC03MDI4LDcgKzcwNDQs NyBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbnB1dF9yZWwsCiAJCQkJCXBhdGggPSBtYWtlX29yZGVyZWRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkgcGFy dGlhbGx5X2dyb3VwZWRfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAorCQkJCQkJCQkJCQkgY2hl YXBlc3RfcGFydGlhbGx5X2dyb3VwZWRfcGF0aCwKIAkJCQkJCQkJCQkJIGluZm8tPnBhdGhrZXlz LAogCQkJCQkJCQkJCQkgLTEuMCk7CiAKQEAgLTcwNDYsNyArNzA2Miw3IEBAIGFkZF9wYXRoc190 b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwK IAkJCQkJCQkJCQkJCSBpbmZvLT5jbGF1c2VzLAogCQkJCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJ CQkJCQkJCQkJCQkgYWdnX2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsK KwkJCQkJCQkJCQkJCSBkTnVtRmluYWxHcm91cHMpKTsKIAkJCQkJZWxzZQogCQkJCQkJYWRkX3Bh dGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290 LApAQCAtNzA1NCw3ICs3MDcwLDcgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJCQkJICAgcGF0aCwK IAkJCQkJCQkJCQkJCSAgIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgICBoYXZpbmdRdWFs LAotCQkJCQkJCQkJCQkJICAgZE51bUdyb3VwcykpOworCQkJCQkJCQkJCQkJICAgZE51bUZpbmFs R3JvdXBzKSk7CiAKIAkJCQl9CiAJCQl9CkBAIC03MDk2LDE5ICs3MTEyLDE3IEBAIGFkZF9wYXRo c190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3Jl bCwKIAkJICovCiAJCWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT5wYXRobGlzdCkKIAkJewotCQkJUGF0aAkgICAqcGF0aCA9IHBhcnRpYWxseV9ncm91 cGVkX3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKLQogCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWws IChQYXRoICopCiAJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKIAkJCQkJCQkJCSBncm91cGVk X3JlbCwKLQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91 cGVkX3BhdGgsCiAJCQkJCQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCSBB R0dfSEFTSEVELAogCQkJCQkJCQkJIEFHR1NQTElUX0ZJTkFMX0RFU0VSSUFMLAogCQkJCQkJCQkJ IHJvb3QtPnByb2Nlc3NlZF9ncm91cENsYXVzZSwKIAkJCQkJCQkJCSBoYXZpbmdRdWFsLAogCQkJ CQkJCQkJIGFnZ19maW5hbF9jb3N0cywKLQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCQkJ CQkgZE51bUZpbmFsR3JvdXBzKSk7CiAJCX0KIAl9CiAKQEAgLTcxNTgsNiArNzE3MiwyMSBAQCBj cmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlib29sCQlj YW5faGFzaCA9IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gpICE9IDA7CiAJ Ym9vbAkJY2FuX3NvcnQgPSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9TT1JUKSAh PSAwOwogCisJLyoKKwkgKiBUaGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhhdmUgYmVl biBhbHJlYWR5IGNyZWF0ZWQgZHVlIHRvIGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJ cGFydGlhbGx5X2dyb3VwZWRfcmVsID0gZmluZF9ncm91cGVkX3JlbChyb290LCBpbnB1dF9yZWwt PnJlbGlkcyk7CisJQXNzZXJ0KGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgfHwgcGFydGlhbGx5X2dy b3VwZWRfcmVsID09IE5VTEwpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwgY3JlYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlz IGR1bW15LiAgSW4gdGhpcyBjYXNlIHdlIGp1c3Qgc2V0IGl0IHRvIE5VTEwuICBJdCBtaWdodAor CSAqIGJlIGNyZWF0ZWQgYWdhaW4gYnkgdGhlIGZvbGxvd2luZyBsb2dpYyBpZiBwb3NzaWJsZS4K KwkgKi8KKwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIElTX0RVTU1ZX1JFTChwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwpKQorCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBOVUxMOworCiAJLyoK IAkgKiBDb25zaWRlciB3aGV0aGVyIHdlIHNob3VsZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVn YXRlZCBub24tcGFydGlhbAogCSAqIHBhdGhzLiAgV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBo YXZlIGEgbm9uLXBhcnRpYWwgcGF0aCwgYW5kIG9ubHkgaWYKQEAgLTcxODEsMTkgKzcyMTAsMjcg QEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICog SWYgd2UgY2FuJ3QgcGFydGlhbGx5IGFnZ3JlZ2F0ZSBwYXJ0aWFsIHBhdGhzLCBhbmQgd2UgY2Fu J3QgcGFydGlhbGx5CiAJICogYWdncmVnYXRlIG5vbi1wYXJ0aWFsIHBhdGhzLCB0aGVuIGRvbid0 IGJvdGhlciBjcmVhdGluZyB0aGUgbmV3CiAJICogUmVsT3B0SW5mbyBhdCBhbGwsIHVubGVzcyB0 aGUgY2FsbGVyIHNwZWNpZmllZCBmb3JjZV9yZWxfY3JlYXRpb24uCisJICoKKwkgKiBOb3RlIHRo YXQgdGhlIHBhcnRpYWxseV9ncm91cGVkX3JlbCBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVh dGVkIGFuZAorCSAqIHBvcHVsYXRlZCB3aXRoIGFwcHJvcHJpYXRlIHBhdGhzIGJ5IGVhZ2VyIGFn Z3JlZ2F0aW9uLgogCSAqLwogCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoID09IE5VTEwgJiYKIAkJ Y2hlYXBlc3RfcGFydGlhbF9wYXRoID09IE5VTEwgJiYKKwkJKHBhcnRpYWxseV9ncm91cGVkX3Jl bCA9PSBOVUxMIHx8CisJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkg JiYKIAkJIWZvcmNlX3JlbF9jcmVhdGlvbikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEJ1 aWxkIGEgbmV3IHVwcGVyIHJlbGF0aW9uIHRvIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHBhcnRp YWxseQotCSAqIGFnZ3JlZ2F0aW5nIHRoZSByb3dzIGZyb20gdGhlIGlucHV0IHJlbGF0aW9uLgot CSAqLwotCXBhcnRpYWxseV9ncm91cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAotCQkJ CQkJCQkJCQlVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHRywKLQkJCQkJCQkJCQkJZ3JvdXBlZF9y ZWwtPnJlbGlkcyk7CisJICogYWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVs YXRpb24uICBUaGUgcmVsYXRpb24gbWF5IGFscmVhZHkKKwkgKiBleGlzdCBkdWUgdG8gZWFnZXIg YWdncmVnYXRpb24sIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUKKwkgKiBp dC4KKwkgKi8KKwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwpCisJCXBhcnRpYWxs eV9ncm91cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAorCQkJCQkJCQkJCQkJVVBQRVJS RUxfUEFSVElBTF9HUk9VUF9BR0csCisJCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRzKTsK IAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0KIAkJZ3JvdXBlZF9y ZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2lu ZCA9IGdyb3VwZWRfcmVsLT5yZWxvcHRraW5kOwpAQCAtNzIwMiw2ICs3MjM5LDE0IEBAIGNyZWF0 ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCXBhcnRpYWxseV9n cm91cGVkX3JlbC0+dXNlcmlkaXNjdXJyZW50ID0gZ3JvdXBlZF9yZWwtPnVzZXJpZGlzY3VycmVu dDsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmZkd3JvdXRpbmUgPSBncm91cGVkX3JlbC0+ZmR3 cm91dGluZTsKIAorCS8qCisJICogUGFydGlhbGx5LWdyb3VwZWQgcGFydGlhbCBwYXRocyBtYXkg aGF2ZSBiZWVuIGdlbmVyYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLiAgSWYgd2UgZmlu ZCB0aGF0IHBhcmFsbGVsaXNtIGlzIG5vdCBwb3NzaWJsZSBmb3IKKwkgKiBwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwsIHdlIG5lZWQgdG8gZHJvcCB0aGVzZSBwYXJ0aWFsIHBhdGhzLgorCSAqLworCWlm ICghcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCkKKwkJcGFydGlhbGx5 X2dyb3VwZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCiAJLyoKIAkgKiBCdWlsZCB0 YXJnZXQgbGlzdCBmb3IgcGFydGlhbCBhZ2dyZWdhdGUgcGF0aHMuICBUaGVzZSBwYXRocyBjYW5u b3QganVzdAogCSAqIGVtaXQgdGhlIHNhbWUgdGxpc3QgYXMgcmVndWxhciBhZ2dyZWdhdGUgcGF0 aHMsIGJlY2F1c2UgKDEpIHdlIG11c3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2FwcGVuZGluZm8uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGlu Zm8uYwppbmRleCBjZWNlM2E1YmU3Li4yMGNmZTk1MzQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvYXBwZW5kaW5mby5jCkBAIC00OTksNiArNDk5LDY2IEBAIGFkanVzdF9hcHBlbmRyZWxf YXR0cnNfbXV0YXRvcihOb2RlICpub2RlLAogCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsKIAl9 CiAKKwkvKgorCSAqIFdlIGhhdmUgdG8gcHJvY2VzcyBSZWxBZ2dJbmZvIG5vZGVzIHNwZWNpYWxs eS4KKwkgKi8KKwlpZiAoSXNBKG5vZGUsIFJlbEFnZ0luZm8pKQorCXsKKwkJUmVsQWdnSW5mbyAq b2xkaW5mbyA9IChSZWxBZ2dJbmZvICopIG5vZGU7CisJCVJlbEFnZ0luZm8gKm5ld2luZm8gPSBt YWtlTm9kZShSZWxBZ2dJbmZvKTsKKworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxk cyAqLworCQltZW1jcHkobmV3aW5mbywgb2xkaW5mbywgc2l6ZW9mKFJlbEFnZ0luZm8pKTsKKwor CQluZXdpbmZvLT5yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPnJlbGlkcywK KwkJCQkJCQkJCQkJICBjb250ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCSAgY29udGV4dC0+ YXBwaW5mb3MpOworCisJCW5ld2luZm8tPnRhcmdldCA9IChQYXRoVGFyZ2V0ICopCisJCQlhZGp1 c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+dGFyZ2V0LAorCQkJ CQkJCQkJCSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmFnZ19pbnB1dCA9IChQYXRoVGFyZ2V0 ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+ YWdnX2lucHV0LAorCQkJCQkJCQkJCSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmdyb3VwX2Ns YXVzZXMgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2Rl ICopIG9sZGluZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJ bmV3aW5mby0+Z3JvdXBfZXhwcnMgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRy c19tdXRhdG9yKChOb2RlICopIG9sZGluZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCSAgIGNv bnRleHQpOworCisJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOworCX0KKworCS8qCisJICogV2Ug aGF2ZSB0byBwcm9jZXNzIFBhdGhUYXJnZXQgbm9kZXMgc3BlY2lhbGx5LgorCSAqLworCWlmIChJ c0Eobm9kZSwgUGF0aFRhcmdldCkpCisJeworCQlQYXRoVGFyZ2V0ICpvbGR0YXJnZXQgPSAoUGF0 aFRhcmdldCAqKSBub2RlOworCQlQYXRoVGFyZ2V0ICpuZXd0YXJnZXQgPSBtYWtlTm9kZShQYXRo VGFyZ2V0KTsKKworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLworCQltZW1j cHkobmV3dGFyZ2V0LCBvbGR0YXJnZXQsIHNpemVvZihQYXRoVGFyZ2V0KSk7CisKKwkJaWYgKG9s ZHRhcmdldC0+c29ydGdyb3VwcmVmcykKKwkJeworCQkJU2l6ZQkJbmJ5dGVzID0gbGlzdF9sZW5n dGgob2xkdGFyZ2V0LT5leHBycykgKiBzaXplb2YoSW5kZXgpOworCisJCQluZXd0YXJnZXQtPmV4 cHJzID0gKExpc3QgKikKKwkJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUg Kikgb2xkdGFyZ2V0LT5leHBycywKKwkJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJCW5ld3Rh cmdldC0+c29ydGdyb3VwcmVmcyA9IChJbmRleCAqKSBwYWxsb2MobmJ5dGVzKTsKKwkJCW1lbWNw eShuZXd0YXJnZXQtPnNvcnRncm91cHJlZnMsIG9sZHRhcmdldC0+c29ydGdyb3VwcmVmcywgbmJ5 dGVzKTsKKwkJfQorCisJCXJldHVybiAoTm9kZSAqKSBuZXd0YXJnZXQ7CisJfQorCiAJLyoKIAkg KiBOT1RFOiB3ZSBkbyBub3QgbmVlZCB0byByZWN1cnNlIGludG8gc3VibGlua3MsIGJlY2F1c2Ug dGhleSBzaG91bGQKIAkgKiBhbHJlYWR5IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gc3VicGxhbnMg YmVmb3JlIHdlIHNlZSB0aGVtLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGF0aG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5k ZXggOTNlNzNjYjQ0ZC4uOWQ1ZGYwNTUzYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCkBAIC0yNjIsNiArMjYyLDEyIEBAIGNvbXBhcmVfcGF0aF9jb3N0c19mdXp6aWx5KFBh dGggKnBhdGgxLCBQYXRoICpwYXRoMiwgZG91YmxlIGZ1enpfZmFjdG9yKQogICogdW5wYXJhbWV0 ZXJpemVkIHBhdGgsIHRvbywgaWYgdGhlcmUgaXMgb25lOyB0aGUgdXNlcnMgb2YgdGhhdCBsaXN0 IGZpbmQKICAqIGl0IG1vcmUgY29udmVuaWVudCBpZiB0aGF0J3MgaW5jbHVkZWQuCiAgKgorICog Y2hlYXBlc3RfcGFyYW1ldGVyaXplZF9wYXRocyBhbHNvIGFsd2F5cyBpbmNsdWRlcyB0aGUgZmV3 ZXN0LXJvdworICogdW5wYXJhbWV0ZXJpemVkIHBhdGgsIGlmIHRoZXJlIGlzIG9uZSwgZm9yIGdy b3VwZWQgcmVsYXRpb25zLiAgRGlmZmVyZW50CisgKiBwYXRocyBvZiBhIGdyb3VwZWQgcmVsYXRp b24gY2FuIGhhdmUgdmVyeSBkaWZmZXJlbnQgcm93IGNvdW50cywgYW5kIGluIHNvbWUKKyAqIGNh c2VzIHRoZSBjaGVhcGVzdC10b3RhbCB1bnBhcmFtZXRlcml6ZWQgcGF0aCBtYXkgbm90IGJlIHRo ZSBvbmUgd2l0aCB0aGUKKyAqIGZld2VzdCByb3cuCisgKgogICogVGhpcyBpcyBub3JtYWxseSBj YWxsZWQgb25seSBhZnRlciB3ZSd2ZSBmaW5pc2hlZCBjb25zdHJ1Y3RpbmcgdGhlIHBhdGgKICAq IGxpc3QgZm9yIHRoZSByZWwgbm9kZS4KICAqLwpAQCAtMjcxLDYgKzI3Nyw3IEBAIHNldF9jaGVh cGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCVBhdGgJICAgKmNoZWFwZXN0X3N0YXJ0dXBf cGF0aDsKIAlQYXRoCSAgICpjaGVhcGVzdF90b3RhbF9wYXRoOwogCVBhdGgJICAgKmJlc3RfcGFy YW1fcGF0aDsKKwlQYXRoCSAgICpmZXdlc3Rfcm93X3BhdGg7CiAJTGlzdAkgICAqcGFyYW1ldGVy aXplZF9wYXRoczsKIAlMaXN0Q2VsbCAgICpwOwogCkBAIC0yODAsNiArMjg3LDcgQEAgc2V0X2No ZWFwZXN0KFJlbE9wdEluZm8gKnBhcmVudF9yZWwpCiAJCWVsb2coRVJST1IsICJjb3VsZCBub3Qg ZGV2aXNlIGEgcXVlcnkgcGxhbiBmb3IgdGhlIGdpdmVuIHF1ZXJ5Iik7CiAKIAljaGVhcGVzdF9z dGFydHVwX3BhdGggPSBjaGVhcGVzdF90b3RhbF9wYXRoID0gYmVzdF9wYXJhbV9wYXRoID0gTlVM TDsKKwlmZXdlc3Rfcm93X3BhdGggPSBOVUxMOwogCXBhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7 CiAKIAlmb3JlYWNoKHAsIHBhcmVudF9yZWwtPnBhdGhsaXN0KQpAQCAtMzQxLDYgKzM0OSw4IEBA IHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCQkJaWYgKGNoZWFwZXN0X3Rv dGFsX3BhdGggPT0gTlVMTCkKIAkJCXsKIAkJCQljaGVhcGVzdF9zdGFydHVwX3BhdGggPSBjaGVh cGVzdF90b3RhbF9wYXRoID0gcGF0aDsKKwkJCQlpZiAoSVNfR1JPVVBFRF9SRUwocGFyZW50X3Jl bCkpCisJCQkJCWZld2VzdF9yb3dfcGF0aCA9IHBhdGg7CiAJCQkJY29udGludWU7CiAJCQl9CiAK QEAgLTM2NCw2ICszNzQsMjcgQEAgc2V0X2NoZWFwZXN0KFJlbE9wdEluZm8gKnBhcmVudF9yZWwp CiAJCQkJIGNvbXBhcmVfcGF0aGtleXMoY2hlYXBlc3RfdG90YWxfcGF0aC0+cGF0aGtleXMsCiAJ CQkJCQkJCSAgcGF0aC0+cGF0aGtleXMpID09IFBBVEhLRVlTX0JFVFRFUjIpKQogCQkJCWNoZWFw ZXN0X3RvdGFsX3BhdGggPSBwYXRoOworCisJCQkvKgorCQkJICogRmluZCB0aGUgZmV3ZXN0LXJv dyB1bnBhcmFtZXRlcml6ZWQgcGF0aCBmb3IgYSBncm91cGVkCisJCQkgKiByZWxhdGlvbi4gIElm IHdlIGZpbmQgdHdvIHBhdGhzIG9mIHRoZSBzYW1lIHJvdyBjb3VudCwgdHJ5IHRvCisJCQkgKiBr ZWVwIHRoZSBvbmUgd2l0aCB0aGUgY2hlYXBlciB0b3RhbCBjb3N0OyBpZiB0aGUgY29zdHMgYXJl CisJCQkgKiBpZGVudGljYWwsIGtlZXAgdGhlIGJldHRlci1zb3J0ZWQgb25lLgorCQkJICovCisJ CQlpZiAoSVNfR1JPVVBFRF9SRUwocGFyZW50X3JlbCkpCisJCQl7CisJCQkJaWYgKGZld2VzdF9y b3dfcGF0aC0+cm93cyA+IHBhdGgtPnJvd3MpCisJCQkJCWZld2VzdF9yb3dfcGF0aCA9IHBhdGg7 CisJCQkJZWxzZSBpZiAoZmV3ZXN0X3Jvd19wYXRoLT5yb3dzID09IHBhdGgtPnJvd3MpCisJCQkJ eworCQkJCQljbXAgPSBjb21wYXJlX3BhdGhfY29zdHMoZmV3ZXN0X3Jvd19wYXRoLCBwYXRoLCBU T1RBTF9DT1NUKTsKKwkJCQkJaWYgKGNtcCA+IDAgfHwKKwkJCQkJCShjbXAgPT0gMCAmJgorCQkJ CQkJIGNvbXBhcmVfcGF0aGtleXMoZmV3ZXN0X3Jvd19wYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJ CQkgIHBhdGgtPnBhdGhrZXlzKSA9PSBQQVRIS0VZU19CRVRURVIyKSkKKwkJCQkJCWZld2VzdF9y b3dfcGF0aCA9IHBhdGg7CisJCQkJfQorCQkJfQogCQl9CiAJfQogCkBAIC0zNzEsNiArNDAyLDEw IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCWlmIChjaGVhcGVzdF90 b3RhbF9wYXRoKQogCQlwYXJhbWV0ZXJpemVkX3BhdGhzID0gbGNvbnMoY2hlYXBlc3RfdG90YWxf cGF0aCwgcGFyYW1ldGVyaXplZF9wYXRocyk7CiAKKwkvKiBBZGQgZmV3ZXN0LXJvdyB1bnBhcmFt ZXRlcml6ZWQgcGF0aCwgaWYgYW55LCB0byBwYXJhbWV0ZXJpemVkX3BhdGhzICovCisJaWYgKGZl d2VzdF9yb3dfcGF0aCAmJiBmZXdlc3Rfcm93X3BhdGggIT0gY2hlYXBlc3RfdG90YWxfcGF0aCkK KwkJcGFyYW1ldGVyaXplZF9wYXRocyA9IGxjb25zKGZld2VzdF9yb3dfcGF0aCwgcGFyYW1ldGVy aXplZF9wYXRocyk7CisKIAkvKgogCSAqIElmIHRoZXJlIGlzIG5vIHVucGFyYW1ldGVyaXplZCBw YXRoLCB1c2UgdGhlIGJlc3QgcGFyYW1ldGVyaXplZCBwYXRoIGFzCiAJICogY2hlYXBlc3RfdG90 YWxfcGF0aCAoYnV0IG5vdCBhcyBjaGVhcGVzdF9zdGFydHVwX3BhdGgpLgpAQCAtMjc4Nyw4ICsy ODIyLDcgQEAgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRo bm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfUmVzdWx0OwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9 IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3cs IGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICov Ci0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFy YW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxf YXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25z aWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlICYmCkBAIC0zMDQzLDgg KzMwNzcsNyBAQCBjcmVhdGVfaW5jcmVtZW50YWxfc29ydF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LAogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAkvKiBTb3J0IGRvZXNuJ3QgcHJvamVj dCwgc28gdXNlIHNvdXJjZSBwYXRoJ3MgcGF0aHRhcmdldCAqLwogCXBhdGhub2RlLT5wYXRoLnBh dGh0YXJnZXQgPSBzdWJwYXRoLT5wYXRodGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBh cmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUt PnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1 YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxz ZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxl bCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpAQCAtMzA5MSw4ICszMTI0LDcgQEAgY3Jl YXRlX3NvcnRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQg PSByZWw7CiAJLyogU29ydCBkb2Vzbid0IHByb2plY3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBh dGh0YXJnZXQgKi8KIAlwYXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRh cmdldDsKLQkvKiBGb3Igbm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8g cGFyYW1ldGVyaXphdGlvbiAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOwor CXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhu b2RlLT5wYXRoLnBhcmFsbGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxs ZWxfc2FmZSA9IHJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxf c2FmZTsKQEAgLTMyNTMsOCArMzI4NSw3IEBAIGNyZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfQWdnOwogCXBhdGhub2RlLT5wYXRo LnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8q IEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJp emF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUt PnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgu cGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0g cmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGZmNTA3MzMxYTAuLjBmNzIxMTAwNjMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTE2LDYgKzE2LDggQEAKIAog I2luY2x1ZGUgPGxpbWl0cy5oPgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZv LmgiCkBAIC0yNywxOSArMjksMjcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvcGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxh bmNhdC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL3Jlc3RyaWN0aW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgorI2luY2x1 ZGUgInBhcnNlci9wYXJzZV9vcGVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9u LmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1dGlscy9o c2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMv c2VsZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCiAKLXR5cGVkZWYgc3Ry dWN0IEpvaW5IYXNoRW50cnkKKy8qCisgKiBBbiBlbnRyeSBvZiBhIGhhc2ggdGFibGUgdGhhdCB3 ZSB1c2UgdG8gbWFrZSBsb29rdXAgZm9yIFJlbE9wdEluZm8KKyAqIHN0cnVjdHVyZXMgbW9yZSBl ZmZpY2llbnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJlbEhhc2hFbnRyeQogewotCVJlbGlkcwkJ am9pbl9yZWxpZHM7CS8qIGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCi0JUmVsT3B0SW5m byAqam9pbl9yZWw7Ci19IEpvaW5IYXNoRW50cnk7CisJUmVsaWRzCQlyZWxpZHM7CQkJLyogaGFz aCBrZXkgLS0tIE1VU1QgQkUgRklSU1QgKi8KKwlSZWxPcHRJbmZvICpyZWw7Cit9IFJlbEhhc2hF bnRyeTsKIAogc3RhdGljIHZvaWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLApA QCAtODMsNyArOTMsMTcgQEAgc3RhdGljIHZvaWQgYnVpbGRfY2hpbGRfam9pbl9yZWx0YXJnZXQo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpjaGlsZHJlbCwKIAkJ CQkJCQkJCSAgIGludCBuYXBwaW5mb3MsCiAJCQkJCQkJCQkgICBBcHBlbmRSZWxJbmZvICoqYXBw aW5mb3MpOwotCitzdGF0aWMgYm9vbCBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVs YXRpb24oUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsK K3N0YXRpYyBib29sIGluaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAorCQkJCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAq YWdnX2lucHV0LAorCQkJCQkJCQkgIExpc3QgKipncm91cF9jbGF1c2VzLCBMaXN0ICoqZ3JvdXBf ZXhwcnMpOworc3RhdGljIGJvb2wgaXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZvICpy b290LCBWYXIgKnZhcik7CitzdGF0aWMgYm9vbCBpc192YXJfbmVlZGVkX2J5X2pvaW4oUGxhbm5l ckluZm8gKnJvb3QsIFZhciAqdmFyLCBSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIEluZGV4IGdl dF9leHByZXNzaW9uX3NvcnRncm91cHJlZihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcik7 CisKKy8qIE1pbmltdW0gcm93IHJlZHVjdGlvbiByYXRpbyBhdCB3aGljaCBhIGdyb3VwZWQgcGF0 aCBpcyBjb25zaWRlcmVkIHVzZWZ1bCAqLworI2RlZmluZSBFQUdFUl9BR0dSRUdBVEVfUkFUSU8g MC41CiAKIC8qCiAgKiBzZXR1cF9zaW1wbGVfcmVsX2FycmF5cwpAQCAtMjc2LDYgKzI5Niw3IEBA IGJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5m byAqcGFyZW50KQogCXJlbC0+am9pbmluZm8gPSBOSUw7CiAJcmVsLT5oYXNfZWNsYXNzX2pvaW5z ID0gZmFsc2U7CiAJcmVsLT5jb25zaWRlcl9wYXJ0aXRpb253aXNlX2pvaW4gPSBmYWxzZTsJLyog bWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlyZWwtPmFnZ19pbmZvID0gTlVMTDsKIAlyZWwt PnBhcnRfc2NoZW1lID0gTlVMTDsKIAlyZWwtPm5wYXJ0cyA9IC0xOwogCXJlbC0+Ym91bmRpbmZv ID0gTlVMTDsKQEAgLTQwNiw2ICs0MjcsOTkgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5m byAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmV0dXJuIHJlbDsKIH0K IAorLyoKKyAqIGJ1aWxkX3NpbXBsZV9ncm91cGVkX3JlbAorICoJICBDb25zdHJ1Y3QgYSBuZXcg UmVsT3B0SW5mbyBmb3IgYSBncm91cGVkIGJhc2UgcmVsYXRpb24gb3V0IG9mIGFuIGV4aXN0aW5n CisgKgkgIG5vbi1ncm91cGVkIGJhc2UgcmVsYXRpb24uCisgKi8KK1JlbE9wdEluZm8gKgorYnVp bGRfc2ltcGxlX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxf cGxhaW4pCit7CisJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdnSW5mbyAqYWdnX2lu Zm87CisKKwkvKgorCSAqIFdlIHNob3VsZCBoYXZlIGF2YWlsYWJsZSBhZ2dyZWdhdGUgZXhwcmVz c2lvbnMgYW5kIGdyb3VwaW5nCisJICogZXhwcmVzc2lvbnMsIG90aGVyd2lzZSB3ZSBjYW5ub3Qg cmVhY2ggaGVyZS4KKwkgKi8KKwlBc3NlcnQocm9vdC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7 CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCAhPSBOSUwpOworCisJLyogbm90aGluZyB0 byBkbyBmb3IgZHVtbXkgcmVsICovCisJaWYgKElTX0RVTU1ZX1JFTChyZWxfcGxhaW4pKQorCQly ZXR1cm4gTlVMTDsKKworCS8qCisJICogUHJlcGFyZSB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRv IGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciB0aGlzIGJhc2UKKwkgKiByZWxhdGlvbi4KKwkgKi8K KwlhZ2dfaW5mbyA9IGNyZWF0ZV9yZWxfYWdnX2luZm8ocm9vdCwgcmVsX3BsYWluKTsKKwlpZiAo YWdnX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIElmIHRoZSBncm91 cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4gYmFzZSByZWxhdGlvbiBhcmUgbm90IGNvbnNpZGVyZWQK KwkgKiB1c2VmdWwsIGRvIG5vdCBidWlsZCB0aGUgZ3JvdXBlZCByZWxhdGlvbi4KKwkgKi8KKwlp ZiAoIWFnZ19pbmZvLT5hZ2dfdXNlZnVsKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGJ1aWxkIGEg Z3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0aW9uICovCisJcmVsX2dyb3Vw ZWQgPSBidWlsZF9ncm91cGVkX3JlbChyb290LCByZWxfcGxhaW4pOworCXJlbF9ncm91cGVkLT5y ZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCXJlbF9ncm91cGVkLT5yb3dzID0gYWdnX2lu Zm8tPmdyb3VwZWRfcm93czsKKwlyZWxfZ3JvdXBlZC0+YWdnX2luZm8gPSBhZ2dfaW5mbzsKKwor CXJldHVybiByZWxfZ3JvdXBlZDsKK30KKworLyoKKyAqIGJ1aWxkX2dyb3VwZWRfcmVsCisgKgkg IEJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBieSBmbGF0IGNvcHlpbmcgYSBwbGFpbiByZWxhdGlv biBhbmQgcmVzZXR0aW5nCisgKgkgIHRoZSBuZWNlc3NhcnkgZmllbGRzLgorICovCitSZWxPcHRJ bmZvICoKK2J1aWxkX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWxfcGxhaW4pCit7CisJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisKKwlyZWxfZ3JvdXBlZCA9 IG1ha2VOb2RlKFJlbE9wdEluZm8pOworCW1lbWNweShyZWxfZ3JvdXBlZCwgcmVsX3BsYWluLCBz aXplb2YoUmVsT3B0SW5mbykpOworCisJLyoKKwkgKiBjbGVhciBwYXRoIGluZm8KKwkgKi8KKwly ZWxfZ3JvdXBlZC0+cGF0aGxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQtPnBwaWxpc3QgPSBOSUw7 CisJcmVsX2dyb3VwZWQtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQtPmNo ZWFwZXN0X3N0YXJ0dXBfcGF0aCA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3RvdGFs X3BhdGggPSBOVUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF91bmlxdWVfcGF0aCA9IE5VTEw7 CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7CisKKwkv KgorCSAqIGNsZWFyIHBhcnRpdGlvbiBpbmZvCisJICovCisJcmVsX2dyb3VwZWQtPnBhcnRfc2No ZW1lID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+bnBhcnRzID0gLTE7CisJcmVsX2dyb3VwZWQtPmJv dW5kaW5mbyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPnBhcnRib3VuZHNfbWVyZ2VkID0gZmFsc2U7 CisJcmVsX2dyb3VwZWQtPnBhcnRpdGlvbl9xdWFsID0gTklMOworCXJlbF9ncm91cGVkLT5wYXJ0 X3JlbHMgPSBOVUxMOworCXJlbF9ncm91cGVkLT5saXZlX3BhcnRzID0gTlVMTDsKKwlyZWxfZ3Jv dXBlZC0+YWxsX3BhcnRyZWxzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+cGFydGV4cHJzID0gTlVM TDsKKwlyZWxfZ3JvdXBlZC0+bnVsbGFibGVfcGFydGV4cHJzID0gTlVMTDsKKwlyZWxfZ3JvdXBl ZC0+Y29uc2lkZXJfcGFydGl0aW9ud2lzZV9qb2luID0gZmFsc2U7CisKKwkvKgorCSAqIGNsZWFy IHNpemUgZXN0aW1hdGVzCisJICovCisJcmVsX2dyb3VwZWQtPnJvd3MgPSAwOworCisJcmV0dXJu IHJlbF9ncm91cGVkOworfQorCiAvKgogICogZmluZF9iYXNlX3JlbAogICoJICBGaW5kIGEgYmFz ZSBvciBvdGhlcnJlbCByZWxhdGlvbiBlbnRyeSwgd2hpY2ggbXVzdCBhbHJlYWR5IGV4aXN0LgpA QCAtNDc5LDExICs1OTMsMTEgQEAgZmluZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5m byAqcm9vdCwgaW50IHJlbGlkKQogfQogCiAvKgotICogYnVpbGRfam9pbl9yZWxfaGFzaAotICoJ ICBDb25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRhYmxlIGZvciBqb2luIHJlbGF0aW9ucy4K KyAqIGJ1aWxkX3JlbF9oYXNoCisgKgkgIENvbnN0cnVjdCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFi bGUgZm9yIHJlbGF0aW9ucy4KICAqLwogc3RhdGljIHZvaWQKLWJ1aWxkX2pvaW5fcmVsX2hhc2go UGxhbm5lckluZm8gKnJvb3QpCitidWlsZF9yZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIHsK IAlIVEFCCSAgICpoYXNodGFiOwogCUhBU0hDVEwJCWhhc2hfY3RsOwpAQCAtNDkxLDQ3ICs2MDUs NDYgQEAgYnVpbGRfam9pbl9yZWxfaGFzaChQbGFubmVySW5mbyAqcm9vdCkKIAogCS8qIENyZWF0 ZSB0aGUgaGFzaCB0YWJsZSAqLwogCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoUmVsaWRzKTsK LQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2YoSm9pbkhhc2hFbnRyeSk7CisJaGFzaF9jdGwu ZW50cnlzaXplID0gc2l6ZW9mKFJlbEhhc2hFbnRyeSk7CiAJaGFzaF9jdGwuaGFzaCA9IGJpdG1h cF9oYXNoOwogCWhhc2hfY3RsLm1hdGNoID0gYml0bWFwX21hdGNoOwogCWhhc2hfY3RsLmhjeHQg PSBDdXJyZW50TWVtb3J5Q29udGV4dDsKLQloYXNodGFiID0gaGFzaF9jcmVhdGUoIkpvaW5SZWxI YXNoVGFibGUiLAorCWhhc2h0YWIgPSBoYXNoX2NyZWF0ZSgiUmVsSGFzaFRhYmxlIiwKIAkJCQkJ CSAgMjU2TCwKIAkJCQkJCSAgJmhhc2hfY3RsLAogCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0ZV TkNUSU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9DT05URVhUKTsKIAotCS8qIEluc2VydCBhbGwg dGhlIGFscmVhZHktZXhpc3Rpbmcgam9pbnJlbHMgKi8KLQlmb3JlYWNoKGwsIHJvb3QtPmpvaW5f cmVsX2xpc3QpCisJLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyBSZWxPcHRJbmZv cyAqLworCWZvcmVhY2gobCwgbGlzdC0+aXRlbXMpCiAJewogCQlSZWxPcHRJbmZvICpyZWwgPSAo UmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7Ci0JCUpvaW5IYXNoRW50cnkgKmhlbnRyeTsKKwkJUmVs SGFzaEVudHJ5ICpoZW50cnk7CiAJCWJvb2wJCWZvdW5kOwogCi0JCWhlbnRyeSA9IChKb2luSGFz aEVudHJ5ICopIGhhc2hfc2VhcmNoKGhhc2h0YWIsCi0JCQkJCQkJCQkJCSAgICYocmVsLT5yZWxp ZHMpLAotCQkJCQkJCQkJCQkgICBIQVNIX0VOVEVSLAotCQkJCQkJCQkJCQkgICAmZm91bmQpOwor CQloZW50cnkgPSAoUmVsSGFzaEVudHJ5ICopIGhhc2hfc2VhcmNoKGhhc2h0YWIsCisJCQkJCQkJ CQkJCSAgJihyZWwtPnJlbGlkcyksCisJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwKKwkJCQkJCQkJ CQkJICAmZm91bmQpOwogCQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5LT5qb2luX3JlbCA9IHJl bDsKKwkJaGVudHJ5LT5yZWwgPSByZWw7CiAJfQogCi0Jcm9vdC0+am9pbl9yZWxfaGFzaCA9IGhh c2h0YWI7CisJbGlzdC0+aGFzaCA9IGhhc2h0YWI7CiB9CiAKIC8qCi0gKiBmaW5kX2pvaW5fcmVs Ci0gKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAo YSBzZXQgb2YgUlQgaW5kZXhlcyksCi0gKgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlz IGlzIGZvciBqb2luIHJlbGF0aW9ucy4KKyAqIGZpbmRfcmVsX2luZm8KKyAqCSAgRmluZCBhIFJl bE9wdEluZm8gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJy4KICAqLwotUmVsT3B0SW5m byAqCi1maW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQorc3Rh dGljIFJlbE9wdEluZm8gKgorZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRz IHJlbGlkcykKIHsKIAkvKgogCSAqIFN3aXRjaCB0byB1c2luZyBoYXNoIGxvb2t1cCB3aGVuIGxp c3QgZ3Jvd3MgInRvbyBsb25nIi4gIFRoZSB0aHJlc2hvbGQKIAkgKiBpcyBhcmJpdHJhcnkgYW5k IGlzIGtub3duIG9ubHkgaGVyZS4KIAkgKi8KLQlpZiAoIXJvb3QtPmpvaW5fcmVsX2hhc2ggJiYg bGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCkgPiAzMikKLQkJYnVpbGRfam9pbl9yZWxf aGFzaChyb290KTsKKwlpZiAoIWxpc3QtPmhhc2ggJiYgbGlzdF9sZW5ndGgobGlzdC0+aXRlbXMp ID4gMzIpCisJCWJ1aWxkX3JlbF9oYXNoKGxpc3QpOwogCiAJLyoKIAkgKiBVc2UgZWl0aGVyIGhh c2h0YWJsZSBsb29rdXAgb3IgbGluZWFyIHNlYXJjaCwgYXMgYXBwcm9wcmlhdGUuCkBAIC01NDEs MjMgKzY1NCwyMyBAQCBmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVs aWRzKQogCSAqIHNvIHdvdWxkIGZvcmNlIHJlbGlkcyBvdXQgb2YgYSByZWdpc3RlciBhbmQgdGh1 cyBwcm9iYWJseSBzbG93IGRvd24gdGhlCiAJICogbGlzdC1zZWFyY2ggY2FzZS4KIAkgKi8KLQlp ZiAocm9vdC0+am9pbl9yZWxfaGFzaCkKKwlpZiAobGlzdC0+aGFzaCkKIAl7CiAJCVJlbGlkcwkJ aGFzaGtleSA9IHJlbGlkczsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5OworCQlSZWxIYXNoRW50 cnkgKmhlbnRyeTsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBoYXNoX3NlYXJjaChy b290LT5qb2luX3JlbF9oYXNoLAotCQkJCQkJCQkJCQkgICAmaGFzaGtleSwKLQkJCQkJCQkJCQkJ ICAgSEFTSF9GSU5ELAotCQkJCQkJCQkJCQkgICBOVUxMKTsKKwkJaGVudHJ5ID0gKFJlbEhhc2hF bnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0LT5oYXNoLAorCQkJCQkJCQkJCQkgICZoYXNoa2V5LAor CQkJCQkJCQkJCQkgIEhBU0hfRklORCwKKwkJCQkJCQkJCQkJICBOVUxMKTsKIAkJaWYgKGhlbnRy eSkKLQkJCXJldHVybiBoZW50cnktPmpvaW5fcmVsOworCQkJcmV0dXJuIGhlbnRyeS0+cmVsOwog CX0KIAllbHNlCiAJewogCQlMaXN0Q2VsbCAgICpsOwogCi0JCWZvcmVhY2gobCwgcm9vdC0+am9p bl9yZWxfbGlzdCkKKwkJZm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJewogCQkJUmVsT3B0SW5m byAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOwogCkBAIC01NjksNiArNjgyLDI4IEBA IGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpCiAJcmV0dXJu IE5VTEw7CiB9CiAKKy8qCisgKiBmaW5kX2pvaW5fcmVsCisgKgkgIFJldHVybnMgcmVsYXRpb24g ZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2YgUlQgaW5kZXhlcyksCisg KgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBqb2luIHJlbGF0aW9ucy4K KyAqLworUmVsT3B0SW5mbyAqCitmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzKQoreworCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3Qs IHJlbGlkcyk7Cit9CisKKy8qCisgKiBmaW5kX2dyb3VwZWRfcmVsCisgKgkgIFJldHVybnMgcmVs YXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2YgUlQgaW5kZXhl cyksCisgKgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBncm91cGVkIHJl bGF0aW9ucy4KKyAqLworUmVsT3B0SW5mbyAqCitmaW5kX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxpZHMgcmVsaWRzKQoreworCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3QtPmdy b3VwZWRfcmVsX2xpc3QsIHJlbGlkcyk7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWlnbl9yZWxfcHJv cGVydGllcwogICoJCVNldCB1cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVyIGFuZCBpbm5l ciByZWxhdGlvbiBhcmUgZm9yZWlnbgpAQCAtNjE5LDMxICs3NTQsNTMgQEAgc2V0X2ZvcmVpZ25f cmVsX3Byb3BlcnRpZXMoUmVsT3B0SW5mbyAqam9pbnJlbCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVs LAogfQogCiAvKgotICogYWRkX2pvaW5fcmVsCi0gKgkJQWRkIGdpdmVuIGpvaW4gcmVsYXRpb24g dG8gdGhlIGxpc3Qgb2Ygam9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCi0gKgkJUGxhbm5lcklu Zm8uIEFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkgaGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9u ZS4KKyAqIGFkZF9yZWxfaW5mbworICoJCUFkZCBnaXZlbiByZWxhdGlvbiB0byB0aGUgbGlzdCwg YW5kIGFsc28gYWRkIGl0IHRvIHRoZSBhdXhpbGlhcnkKKyAqCQloYXNodGFibGUgaWYgdGhlcmUg aXMgb25lLgogICovCiBzdGF0aWMgdm9pZAotYWRkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpqb2lucmVsKQorYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBS ZWxPcHRJbmZvICpyZWwpCiB7Ci0JLyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5l dyBqb2lucmVsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QhICovCi0Jcm9vdC0+am9pbl9yZWxfbGlz dCA9IGxhcHBlbmQocm9vdC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7CisJLyogR0VRTyByZXF1 aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyByZWxhdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaXN0 ISAqLworCWxpc3QtPml0ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVtcywgcmVsKTsKIAogCS8qIHN0 b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLiAqLwot CWlmIChyb290LT5qb2luX3JlbF9oYXNoKQorCWlmIChsaXN0LT5oYXNoKQogCXsKLQkJSm9pbkhh c2hFbnRyeSAqaGVudHJ5OworCQlSZWxIYXNoRW50cnkgKmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7 CiAKLQkJaGVudHJ5ID0gKEpvaW5IYXNoRW50cnkgKikgaGFzaF9zZWFyY2gocm9vdC0+am9pbl9y ZWxfaGFzaCwKLQkJCQkJCQkJCQkJICAgJihqb2lucmVsLT5yZWxpZHMpLAotCQkJCQkJCQkJCQkg ICBIQVNIX0VOVEVSLAotCQkJCQkJCQkJCQkgICAmZm91bmQpOworCQloZW50cnkgPSAoUmVsSGFz aEVudHJ5ICopIGhhc2hfc2VhcmNoKGxpc3QtPmhhc2gsCisJCQkJCQkJCQkJCSAgJihyZWwtPnJl bGlkcyksCisJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwKKwkJCQkJCQkJCQkJICAmZm91bmQpOwog CQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5LT5qb2luX3JlbCA9IGpvaW5yZWw7CisJCWhlbnRy eS0+cmVsID0gcmVsOwogCX0KIH0KIAorLyoKKyAqIGFkZF9qb2luX3JlbAorICoJCUFkZCBnaXZl biBqb2luIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGpvaW4gcmVsYXRpb25zIGluIHRoZSBnaXZl bgorICoJCVBsYW5uZXJJbmZvLgorICovCitzdGF0aWMgdm9pZAorYWRkX2pvaW5fcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsKQoreworCWFkZF9yZWxfaW5mbyhyb290 LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsKK30KKworLyoKKyAqIGFkZF9ncm91cGVkX3JlbAor ICoJCUFkZCBnaXZlbiBncm91cGVkIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGdyb3VwZWQgcmVs YXRpb25zIGluIHRoZQorICoJCWdpdmVuIFBsYW5uZXJJbmZvLgorICovCit2b2lkCithZGRfZ3Jv dXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlhZGRfcmVs X2luZm8ocm9vdC0+Z3JvdXBlZF9yZWxfbGlzdCwgcmVsKTsKK30KKwogLyoKICAqIGJ1aWxkX2pv aW5fcmVsCiAgKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUg dW5pb24gb2YgdHdvIGdpdmVuIHJlbHMsCkBAIC03NTUsNiArOTEyLDcgQEAgYnVpbGRfam9pbl9y ZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJam9pbnJlbC0+am9pbmluZm8gPSBOSUw7CiAJam9pbnJl bC0+aGFzX2VjbGFzc19qb2lucyA9IGZhbHNlOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcnRpdGlv bndpc2Vfam9pbiA9IGZhbHNlOwkvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLworCWpvaW5y ZWwtPmFnZ19pbmZvID0gTlVMTDsKIAlqb2lucmVsLT5wYXJlbnQgPSBOVUxMOwogCWpvaW5yZWwt PnRvcF9wYXJlbnQgPSBOVUxMOwogCWpvaW5yZWwtPnRvcF9wYXJlbnRfcmVsaWRzID0gTlVMTDsK QEAgLTkzOSw2ICsxMDk3LDcgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlqb2lucmVsLT5qb2luaW5mbyA9IE5JTDsKIAlq b2lucmVsLT5oYXNfZWNsYXNzX2pvaW5zID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFy dGl0aW9ud2lzZV9qb2luID0gZmFsc2U7CS8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICovCisJ am9pbnJlbC0+YWdnX2luZm8gPSBOVUxMOwogCWpvaW5yZWwtPnBhcmVudCA9IHBhcmVudF9qb2lu cmVsOwogCWpvaW5yZWwtPnRvcF9wYXJlbnQgPSBwYXJlbnRfam9pbnJlbC0+dG9wX3BhcmVudCA/ IHBhcmVudF9qb2lucmVsLT50b3BfcGFyZW50IDogcGFyZW50X2pvaW5yZWw7CiAJam9pbnJlbC0+ dG9wX3BhcmVudF9yZWxpZHMgPSBqb2lucmVsLT50b3BfcGFyZW50LT5yZWxpZHM7CkBAIC0yNTE4 LDMgKzI2NzcsNTA0IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVsdGFyZ2V0KFBsYW5uZXJJbmZvICpy b290LAogCWNoaWxkcmVsLT5yZWx0YXJnZXQtPmNvc3QucGVyX3R1cGxlID0gcGFyZW50cmVsLT5y ZWx0YXJnZXQtPmNvc3QucGVyX3R1cGxlOwogCWNoaWxkcmVsLT5yZWx0YXJnZXQtPndpZHRoID0g cGFyZW50cmVsLT5yZWx0YXJnZXQtPndpZHRoOwogfQorCisvKgorICogY3JlYXRlX3JlbF9hZ2df aW5mbworICoJICBDcmVhdGUgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlIGZvciB0aGUgZ2l2ZW4g cmVsYXRpb24gaWYgaXQgY2FuIHByb2R1Y2UKKyAqCSAgZ3JvdXBlZCBwYXRocy4gIFRoZSBnaXZl biByZWxhdGlvbiBpcyB0aGUgbm9uLWdyb3VwZWQgb25lIHdoaWNoIGhhcyB0aGUKKyAqCSAgcmVs dGFyZ2V0IGFscmVhZHkgY29uc3RydWN0ZWQuCisgKi8KK1JlbEFnZ0luZm8gKgorY3JlYXRlX3Jl bF9hZ2dfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQoreworCUxpc3RD ZWxsICAgKmxjOworCVJlbEFnZ0luZm8gKnJlc3VsdDsKKwlQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7 CisJUGF0aFRhcmdldCAqdGFyZ2V0OworCUxpc3QJICAgKmdyb3VwX2NsYXVzZXMgPSBOSUw7CisJ TGlzdAkgICAqZ3JvdXBfZXhwcnMgPSBOSUw7CisKKwkvKgorCSAqIFRoZSBsaXN0cyBvZiBhZ2dy ZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlCisJ ICogYmVlbiBjb25zdHJ1Y3RlZC4KKwkgKi8KKwlBc3NlcnQocm9vdC0+YWdnX2NsYXVzZV9saXN0 ICE9IE5JTCk7CisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCAhPSBOSUwpOworCisJLyoK KwkgKiBJZiB0aGlzIGlzIGEgY2hpbGQgcmVsLCB0aGUgZ3JvdXBlZCByZWwgZm9yIGl0cyBwYXJl bnQgcmVsIG11c3QgaGF2ZQorCSAqIGJlZW4gY3JlYXRlZCBpZiBpdCBjYW4uICBTbyB3ZSBjYW4g anVzdCB1c2UgcGFyZW50J3MgUmVsQWdnSW5mbyBpZgorCSAqIHRoZXJlIGlzIG9uZSwgd2l0aCBh cHByb3ByaWF0ZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25zLgorCSAqLworCWlmIChJU19PVEhFUl9S RUwocmVsKSkKKwl7CisJCVJlbE9wdEluZm8gKnJlbF9ncm91cGVkOworCQlSZWxBZ2dJbmZvICph Z2dfaW5mbzsKKworCQlBc3NlcnQoIWJtc19pc19lbXB0eShyZWwtPnRvcF9wYXJlbnRfcmVsaWRz KSk7CisJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnRvcF9wYXJl bnRfcmVsaWRzKTsKKworCQlpZiAocmVsX2dyb3VwZWQgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxM OworCisJCUFzc2VydChJU19HUk9VUEVEX1JFTChyZWxfZ3JvdXBlZCkpOworCQkvKiBNdXN0IGRv IG11bHRpLWxldmVsIHRyYW5zZm9ybWF0aW9uICovCisJCWFnZ19pbmZvID0gKFJlbEFnZ0luZm8g KikKKwkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXVsdGlsZXZlbChyb290LAorCQkJCQkJCQkJ CQkgIChOb2RlICopIHJlbF9ncm91cGVkLT5hZ2dfaW5mbywKKwkJCQkJCQkJCQkJICByZWwsCisJ CQkJCQkJCQkJCSAgcmVsLT50b3BfcGFyZW50KTsKKworCQlhZ2dfaW5mby0+Z3JvdXBlZF9yb3dz ID0KKwkJCWVzdGltYXRlX251bV9ncm91cHMocm9vdCwgYWdnX2luZm8tPmdyb3VwX2V4cHJzLAor CQkJCQkJCQlyZWwtPnJvd3MsIE5VTEwsIE5VTEwpOworCisJCS8qCisJCSAqIFRoZSBncm91cGVk IHBhdGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24gYXJlIGNvbnNpZGVyZWQgdXNlZnVsIGlmZgor CQkgKiB0aGUgcm93IHJlZHVjdGlvbiByYXRpbyBpcyBubyBsZXNzIHRoYW4gRUFHRVJfQUdHUkVH QVRFX1JBVElPLgorCQkgKi8KKwkJYWdnX2luZm8tPmFnZ191c2VmdWwgPQorCQkJKGFnZ19pbmZv LT5ncm91cGVkX3Jvd3MgPD0gcmVsLT5yb3dzICogKDEgLSBFQUdFUl9BR0dSRUdBVEVfUkFUSU8p KTsKKworCQlyZXR1cm4gYWdnX2luZm87CisJfQorCisJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJs ZSB0byBwcm9kdWNlIGdyb3VwZWQgcGF0aHMgZm9yIHRoaXMgcmVsYXRpb24uICovCisJaWYgKCFl YWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24ocm9vdCwgcmVsKSkKKwkJcmV0 dXJuIE5VTEw7CisKKwkvKgorCSAqIENyZWF0ZSB0YXJnZXRzIGZvciB0aGUgZ3JvdXBlZCBwYXRo cyBhbmQgZm9yIHRoZSBpbnB1dCBwYXRocyBvZiB0aGUKKwkgKiBncm91cGVkIHBhdGhzLgorCSAq LworCXRhcmdldCA9IGNyZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CisJYWdnX2lucHV0ID0gY3Jl YXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKKworCS8qIC4uLiBhbmQgaW5pdGlhbGl6ZSB0aGVzZSB0 YXJnZXRzICovCisJaWYgKCFpbml0X2dyb3VwaW5nX3RhcmdldHMocm9vdCwgcmVsLCB0YXJnZXQs IGFnZ19pbnB1dCwKKwkJCQkJCQkgICAmZ3JvdXBfY2xhdXNlcywgJmdyb3VwX2V4cHJzKSkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIG5vdCBhcHBsaWNh YmxlIGlmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgZ3JvdXBpbmcKKwkgKiBleHByZXNzaW9ucy4K KwkgKi8KKwlpZiAobGlzdF9sZW5ndGgoZ3JvdXBfY2xhdXNlcykgPT0gMCkKKwkJcmV0dXJuIE5V TEw7CisKKwkvKiBidWlsZCB0aGUgUmVsQWdnSW5mbyByZXN1bHQgKi8KKwlyZXN1bHQgPSBtYWtl Tm9kZShSZWxBZ2dJbmZvKTsKKworCXJlc3VsdC0+Z3JvdXBfY2xhdXNlcyA9IGdyb3VwX2NsYXVz ZXM7CisJcmVzdWx0LT5ncm91cF9leHBycyA9IGdyb3VwX2V4cHJzOworCisJLyogQ2FsY3VsYXRl IHBhdGhrZXlzIHRoYXQgcmVwcmVzZW50IHRoaXMgZ3JvdXBpbmcgcmVxdWlyZW1lbnRzICovCisJ cmVzdWx0LT5ncm91cF9wYXRoa2V5cyA9CisJCW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2Vz KHJvb3QsIHJlc3VsdC0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCSAgbWFrZV90bGlzdF9mcm9t X3BhdGh0YXJnZXQodGFyZ2V0KSk7CisKKwkvKiBBZGQgYWdncmVnYXRlcyB0byB0aGUgZ3JvdXBp bmcgdGFyZ2V0ICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJ QWdnQ2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsK KwkJQWdncmVmCSAgICphZ2dyZWY7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFn Z3JlZikpOworCisJCWFnZ3JlZiA9IChBZ2dyZWYgKikgY29weU9iamVjdChhY19pbmZvLT5hZ2dy ZWYpOworCQltYXJrX3BhcnRpYWxfYWdncmVmKGFnZ3JlZiwgQUdHU1BMSVRfSU5JVElBTF9TRVJJ QUwpOworCisJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHByICopIGFnZ3Jl ZiwgMCk7CisJfQorCisJLyogU2V0IHRoZSBlc3RpbWF0ZWQgZXZhbCBjb3N0IGFuZCBvdXRwdXQg d2lkdGggZm9yIGJvdGggdGFyZ2V0cyAqLworCXNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lkdGgocm9v dCwgdGFyZ2V0KTsKKwlzZXRfcGF0aHRhcmdldF9jb3N0X3dpZHRoKHJvb3QsIGFnZ19pbnB1dCk7 CisKKwlyZXN1bHQtPnJlbGlkcyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsKKwlyZXN1bHQtPnRh cmdldCA9IHRhcmdldDsKKwlyZXN1bHQtPmFnZ19pbnB1dCA9IGFnZ19pbnB1dDsKKwlyZXN1bHQt Pmdyb3VwZWRfcm93cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwgcmVzdWx0LT5ncm91cF9l eHBycywKKwkJCQkJCQkJCQkJICAgcmVsLT5yb3dzLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICog VGhlIGdyb3VwZWQgcGF0aHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbiBhcmUgY29uc2lkZXJlZCB1 c2VmdWwgaWZmIHRoZQorCSAqIHJvdyByZWR1Y3Rpb24gcmF0aW8gaXMgbm8gbGVzcyB0aGFuIEVB R0VSX0FHR1JFR0FURV9SQVRJTy4KKwkgKi8KKwlyZXN1bHQtPmFnZ191c2VmdWwgPQorCQkocmVz dWx0LT5ncm91cGVkX3Jvd3MgPD0gcmVsLT5yb3dzICogKDEgLSBFQUdFUl9BR0dSRUdBVEVfUkFU SU8pKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBlYWdlcl9hZ2dyZWdhdGlvbl9w b3NzaWJsZV9mb3JfcmVsYXRpb24KKyAqIAkgIENoZWNrIGlmIGl0J3MgcG9zc2libGUgdG8gcHJv ZHVjZSBncm91cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCisgKi8KK3N0YXRpYyBi b29sCitlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQljdXJf cmVsaWQ7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMg aW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIKKwkgKiBqb2luLiAgSW4gdGhpcyBjYXNl LCB3ZSBjYW5ub3QgcHVzaCBhIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byB0aGUKKwkgKiBy ZWxhdGlvbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBv dXRlciBqb2luCisJICogd291bGQgbm90IGJlIGF2YWlsYWJsZSB3aGVuIHdlIHBlcmZvcm0gdGhl IHBhcnRpYWwgYWdncmVnYXRpb24sIHdoaWxlCisJICogd2l0aCBhIG5vbi1lYWdlci1hZ2dyZWdh dGlvbiBwbGFuIHRoZXNlIHJvd3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCisJICogdG9wLWxldmVs IGFnZ3JlZ2F0aW9uLiAgRG9pbmcgc28gbWF5IHJlc3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91 cGVkCisJICogZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJlY3Qg dmFsdWVzIGZyb20gdGhlCisJICogYWdncmVnYXRlIGZ1bmN0aW9ucy4KKwkgKi8KKwljdXJfcmVs aWQgPSAtMTsKKwl3aGlsZSAoKGN1cl9yZWxpZCA9IGJtc19uZXh0X21lbWJlcihyZWwtPnJlbGlk cywgY3VyX3JlbGlkKSkgPj0gMCkKKwl7CisJCVJlbE9wdEluZm8gKmJhc2VyZWwgPSBmaW5kX2Jh c2VfcmVsX2lnbm9yZV9qb2luKHJvb3QsIGN1cl9yZWxpZCk7CisKKwkJaWYgKGJhc2VyZWwgPT0g TlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8qIGlnbm9yZSBvdXRlciBqb2lucyBpbiByZWwtPnJlbGlk cyAqLworCisJCWlmICghYm1zX2lzX3N1YnNldChiYXNlcmVsLT5udWxsaW5nX3JlbGlkcywgcmVs LT5yZWxpZHMpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRm9yIG5vdyB3ZSBk b24ndCB0cnkgdG8gc3VwcG9ydCBQbGFjZUhvbGRlclZhcnMuCisJICovCisJZm9yZWFjaChsYywg cmVsLT5yZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IGxmaXJzdChsYyk7 CisKKwkJaWYgKElzQShleHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1cm4gZmFsc2U7CisJ fQorCisJLyogQ2FsbGVyIHNob3VsZCBvbmx5IHBhc3MgYmFzZSByZWxhdGlvbnMgb3Igam9pbnMu ICovCisJQXNzZXJ0KHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCB8fAorCQkgICBy ZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5SRUwpOworCisJLyoKKwkgKiBDaGVjayBpZiBh bGwgYWdncmVnYXRlIGV4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgb24gdGhpcyByZWxhdGlv bgorCSAqIGxldmVsLgorCSAqLworCWZvcmVhY2gobGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkK Kwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZv LCBsYyk7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCS8q CisJCSAqIEdpdmUgdXAgaWYgYW55IGFnZ3JlZ2F0ZSByZXF1aXJlcyByZWxhdGlvbnMgb3RoZXIg dGhhbiB0aGUgY3VycmVudAorCQkgKiBvbmUuICBJZiB0aGUgYWdncmVnYXRlIHJlcXVpcmVzIHRo ZSBjdXJyZW50IHJlbGF0aW9uIHBsdXMKKwkJICogYWRkaXRpb25hbCByZWxhdGlvbnMsIGdyb3Vw aW5nIHRoZSBjdXJyZW50IHJlbGF0aW9uIGNvdWxkIG1ha2Ugc29tZQorCQkgKiBpbnB1dCByb3dz IHVuYXZhaWxhYmxlIGZvciB0aGUgaGlnaGVyIGFnZ3JlZ2F0ZSBhbmQgbWF5IHJlZHVjZSB0aGUK KwkJICogbnVtYmVyIG9mIGlucHV0IHJvd3MgaXQgcmVjZWl2ZXMuICBJZiB0aGUgYWdncmVnYXRl IGRvZXMgbm90CisJCSAqIHJlcXVpcmUgdGhlIGN1cnJlbnQgcmVsYXRpb24gYXQgYWxsLCBpdCBz aG91bGQgbm90IGJlIGdyb3VwZWQsIGFzCisJCSAqIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW5pbmcg dHdvIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vic2V0KGFjX2lu Zm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0X2dyb3VwaW5nX3RhcmdldHMKKyAqCSAgSW5p dGlhbGl6ZSB0aGUgdGFyZ2V0IGZvciBncm91cGVkIHBhdGhzICh0YXJnZXQpIGFzIHdlbGwgYXMg dGhlIHRhcmdldAorICoJICBmb3IgcGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhlIGdy b3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogV2UgYWxzbyBjb25zdHJ1Y3QgdGhlIGxp c3Qgb2YgU29ydEdyb3VwQ2xhdXNlcyBhbmQgdGhlIGxpc3Qgb2YgZ3JvdXBpbmcKKyAqIGV4cHJl c3Npb25zIGZvciB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbiwgYW5kIHJldHVybiB0aGVtIGluICpn cm91cF9jbGF1c2UKKyAqIGFuZCAqZ3JvdXBfZXhwcnMuCisgKgorICogUmV0dXJuIHRydWUgaWYg dGhlIHRhcmdldHMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLwor c3RhdGljIGJvb2wKK2luaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAorCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdn X2lucHV0LAorCQkJCQkgIExpc3QgKipncm91cF9jbGF1c2VzLCBMaXN0ICoqZ3JvdXBfZXhwcnMp Cit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqcG9zc2libHlfZGVwZW5kZW50ID0gTklM OworCUluZGV4CQltYXhTb3J0R3JvdXBSZWY7CisKKwkvKiBJZGVudGlmeSB0aGUgbWF4IHNvcnRn cm91cHJlZiAqLworCW1heFNvcnRHcm91cFJlZiA9IDA7CisJZm9yZWFjaChsYywgcm9vdC0+cHJv Y2Vzc2VkX3RsaXN0KQorCXsKKwkJSW5kZXgJCXJlZiA9ICgoVGFyZ2V0RW50cnkgKikgbGZpcnN0 KGxjKSktPnJlc3NvcnRncm91cHJlZjsKKworCQlpZiAocmVmID4gbWF4U29ydEdyb3VwUmVmKQor CQkJbWF4U29ydEdyb3VwUmVmID0gcmVmOworCX0KKworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFy Z2V0LT5leHBycykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOwor CQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJCS8qCisJCSAqIEdpdmVuIHRoYXQgUGxhY2VIb2xk ZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVzIGZyb20gZG9pbmcgZWFnZXIKKwkJICogYWdncmVn YXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNhbm5vdCBjb250YWluIGFueXRoaW5nIG1vcmUgY29t cGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkgKi8KKwkJQXNzZXJ0KElzQShleHByLCBWYXIpKTsK KworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJlZiBpZiB0aGUgZXhwciBjYW4gYWN0IGFzIGdyb3Vw aW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRncm91cHJlZiA9IGdldF9leHByZXNzaW9uX3NvcnRn cm91cHJlZihyb290LCBleHByKTsKKwkJaWYgKHNvcnRncm91cHJlZiA+IDApCisJCXsKKwkJCVNv cnRHcm91cENsYXVzZSAqc2djOworCisJCQkvKiBGaW5kIHRoZSBtYXRjaGluZyBTb3J0R3JvdXBD bGF1c2UgKi8KKwkJCXNnYyA9IGdldF9zb3J0Z3JvdXByZWZfY2xhdXNlKHNvcnRncm91cHJlZiwg cm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKTsKKwkJCUFzc2VydChzZ2MtPnRsZVNvcnRHcm91 cFJlZiA8PSBtYXhTb3J0R3JvdXBSZWYpOworCisJCQkvKgorCQkJICogSWYgdGhlIHRhcmdldCBl eHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcga2V5LCBpdAorCQkJICogc2hvdWxk IGJlIGVtaXR0ZWQgYnkgdGhlIGdyb3VwZWQgcGF0aHMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkCisJ CQkgKiBkb3duIHRvIHRoaXMgcmVsYXRpb24gbGV2ZWwuCisJCQkgKi8KKwkJCWFkZF9jb2x1bW5f dG9fcGF0aHRhcmdldCh0YXJnZXQsIGV4cHIsIHNvcnRncm91cHJlZik7CisKKwkJCS8qCisJCQkg KiAuLi4gYW5kIGl0IGFsc28gc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHBhdGhzLgor CQkJICovCisJCQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQoYWdnX2lucHV0LCBleHByLCBzb3J0 Z3JvdXByZWYpOworCisJCQkvKgorCQkJICogUmVjb3JkIHRoaXMgU29ydEdyb3VwQ2xhdXNlIGFu ZCBncm91cGluZyBleHByZXNzaW9uLiAgTm90ZSB0aGF0CisJCQkgKiB0aGlzIFNvcnRHcm91cENs YXVzZSBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiByZWNvcmRlZC4KKwkJCSAqLworCQkJaWYgKCFs aXN0X21lbWJlcigqZ3JvdXBfY2xhdXNlcywgc2djKSkKKwkJCXsKKwkJCQkqZ3JvdXBfY2xhdXNl cyA9IGxhcHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNnYyk7CisJCQkJKmdyb3VwX2V4cHJzID0gbGFw cGVuZCgqZ3JvdXBfZXhwcnMsIGV4cHIpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGlzX3Zhcl9u ZWVkZWRfYnlfam9pbihyb290LCAoVmFyICopIGV4cHIsIHJlbCkpCisJCXsKKwkJCS8qCisJCQkg KiBUaGUgZXhwcmVzc2lvbiBpcyBuZWVkZWQgZm9yIGFuIHVwcGVyIGpvaW4gYnV0IGlzIG5laXRo ZXIgaW4KKwkJCSAqIHRoZSBHUk9VUCBCWSBjbGF1c2Ugbm9yIGRlcml2YWJsZSBmcm9tIGl0IHVz aW5nIEVDIChvdGhlcndpc2UsCisJCQkgKiBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBpbmNs dWRlZCBpbiB0aGUgdGFyZ2V0cyBhYm92ZSkuICBXZQorCQkJICogbmVlZCB0byBjcmVhdGUgYSBz cGVjaWFsIFNvcnRHcm91cENsYXVzZSBmb3IgdGhpcyBleHByZXNzaW9uLgorCQkJICoKKwkJCSAq IEl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIHN1Y2ggZXhwcmVzc2lvbnMgaW4gdGhlIGdyb3Vw aW5nCisJCQkgKiBrZXlzLiAgVGhpcyBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgYW4gYWdn cmVnYXRlZCByb3cgZnJvbQorCQkJICogdGhlIHBhcnRpYWwgYWdncmVnYXRpb24gbWF0Y2hlcyB0 aGUgb3RoZXIgc2lkZSBvZiB0aGUgam9pbiBpZgorCQkJICogYW5kIG9ubHkgaWYgZWFjaCByb3cg aW4gdGhlIHBhcnRpYWwgZ3JvdXAgZG9lcy4gIFRoaXMgZW5zdXJlcworCQkJICogdGhhdCBhbGwg cm93cyB3aXRoaW4gdGhlIHNhbWUgcGFydGlhbCBncm91cCBzaGFyZSB0aGUgc2FtZQorCQkJICog J2Rlc3RpbnknLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4K KwkJCSAqLworCQkJU29ydEdyb3VwQ2xhdXNlICpzZ2M7CisJCQlUeXBlQ2FjaGVFbnRyeSAqdGNl OworCQkJT2lkCQkJZXF1YWxpbWFnZXByb2M7CisKKwkJCS8qCisJCQkgKiBCdXQgZmlyc3QsIGNo ZWNrIGlmIGVxdWFsaXR5IGltcGxpZXMgaW1hZ2UgZXF1YWxpdHkgZm9yIHRoaXMKKwkJCSAqIGV4 cHJlc3Npb24uICBJZiBub3QsIHdlIGNhbm5vdCB1c2UgaXQgYXMgYSBncm91cGluZyBrZXkuICBT ZWUKKwkJCSAqIGNvbW1lbnRzIGluIGNyZWF0ZV9ncm91cGluZ19leHByX2luZm9zKCkuCisJCQkg Ki8KKwkJCXRjZSA9IGxvb2t1cF90eXBlX2NhY2hlKGV4cHJUeXBlKChOb2RlICopIGV4cHIpLAor CQkJCQkJCQkJVFlQRUNBQ0hFX0JUUkVFX09QRkFNSUxZKTsKKwkJCWlmICghT2lkSXNWYWxpZCh0 Y2UtPmJ0cmVlX29wZikgfHwKKwkJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkK KwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCWVxdWFsaW1hZ2Vwcm9jID0gZ2V0X29wZmFtaWx5X3By b2ModGNlLT5idHJlZV9vcGYsCisJCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJ CQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJCSAgIEJURVFVQUxJ TUFHRV9QUk9DKTsKKwkJCWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJCQkh RGF0dW1HZXRCb29sKE9pZEZ1bmN0aW9uQ2FsbDFDb2xsKGVxdWFsaW1hZ2Vwcm9jLAorCQkJCQkJ CQkJCQkJICAgdGNlLT50eXBjb2xsYXRpb24sCisJCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERh dHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUpKSkpCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQkvKiBD cmVhdGUgdGhlIFNvcnRHcm91cENsYXVzZS4gKi8KKwkJCXNnYyA9IG1ha2VOb2RlKFNvcnRHcm91 cENsYXVzZSk7CisKKwkJCS8qIEluaXRpYWxpemUgdGhlIFNvcnRHcm91cENsYXVzZS4gKi8KKwkJ CXNnYy0+dGxlU29ydEdyb3VwUmVmID0gKyttYXhTb3J0R3JvdXBSZWY7CisJCQlnZXRfc29ydF9n cm91cF9vcGVyYXRvcnMoZXhwclR5cGUoKE5vZGUgKikgZXhwciksCisJCQkJCQkJCQkgZmFsc2Us IHRydWUsIGZhbHNlLAorCQkJCQkJCQkJICZzZ2MtPnNvcnRvcCwgJnNnYy0+ZXFvcCwgTlVMTCwK KwkJCQkJCQkJCSAmc2djLT5oYXNoYWJsZSk7CisKKwkJCS8qIFRoaXMgZXhwcmVzc2lvbiBzaG91 bGQgYmUgZW1pdHRlZCBieSB0aGUgZ3JvdXBlZCBwYXRocyAqLworCQkJYWRkX2NvbHVtbl90b19w YXRodGFyZ2V0KHRhcmdldCwgZXhwciwgc2djLT50bGVTb3J0R3JvdXBSZWYpOworCisJCQkvKiAu Li4gYW5kIGl0IGFsc28gc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHBhdGhzLiAqLwor CQkJYWRkX2NvbHVtbl90b19wYXRodGFyZ2V0KGFnZ19pbnB1dCwgZXhwciwgc2djLT50bGVTb3J0 R3JvdXBSZWYpOworCisJCQkvKiBSZWNvcmQgdGhpcyBTb3J0R3JvdXBDbGF1c2UgYW5kIGdyb3Vw aW5nIGV4cHJlc3Npb24gKi8KKwkJCSpncm91cF9jbGF1c2VzID0gbGFwcGVuZCgqZ3JvdXBfY2xh dXNlcywgc2djKTsKKwkJCSpncm91cF9leHBycyA9IGxhcHBlbmQoKmdyb3VwX2V4cHJzLCBleHBy KTsKKwkJfQorCQllbHNlIGlmIChpc192YXJfaW5fYWdncmVmX29ubHkocm9vdCwgKFZhciAqKSBl eHByKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHByZXNzaW9uIGlzIHJlZmVyZW5jZWQgYnkg YW4gYWdncmVnYXRlIGZ1bmN0aW9uIHB1c2hlZAorCQkJICogZG93biB0byB0aGlzIHJlbGF0aW9u IGFuZCBkb2VzIG5vdCBhcHBlYXIgZWxzZXdoZXJlIGluIHRoZQorCQkJICogdGFyZ2V0bGlzdCBv ciBoYXZpbmdRdWFsLiAgQWRkIGl0IHRvICdhZ2dfaW5wdXQnIGJ1dCBub3QgdG8KKwkJCSAqICd0 YXJnZXQnLgorCQkJICovCisJCQlhZGRfbmV3X2NvbHVtbl90b19wYXRodGFyZ2V0KGFnZ19pbnB1 dCwgZXhwcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGhlIGV4cHJlc3Npb24g bWF5IGJlIGZ1bmN0aW9uYWxseSBkZXBlbmRlbnQgb24gb3RoZXIKKwkJCSAqIGV4cHJlc3Npb25z IGluIHRoZSB0YXJnZXQsIGJ1dCB3ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgdW50aWwgYWxsCisJCQkg KiB0YXJnZXQgZXhwcmVzc2lvbnMgaGF2ZSBiZWVuIGNvbnN0cnVjdGVkLgorCQkJICovCisJCQlw b3NzaWJseV9kZXBlbmRlbnQgPSBsYXBwZW5kKHBvc3NpYmx5X2RlcGVuZGVudCwgZXhwcik7CisJ CX0KKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBjYW4gdmVyaWZ5IHdoZXRoZXIgYW4gZXhwcmVzc2lv biBpcyBmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uCisJICogb3RoZXJzLgorCSAqLworCWZvcmVh Y2gobGMsIHBvc3NpYmx5X2RlcGVuZGVudCkKKwl7CisJCVZhcgkJICAgKnR2YXI7CisJCUxpc3QJ ICAgKmRlcHMgPSBOSUw7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKworCQl0dmFyID0gbGZpcnN0 X25vZGUoVmFyLCBsYyk7CisJCXJ0ZSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbdHZhci0+dmFy bm9dOworCisJCWlmIChjaGVja19mdW5jdGlvbmFsX2dyb3VwaW5nKHJ0ZS0+cmVsaWQsIHR2YXIt PnZhcm5vLAorCQkJCQkJCQkJICB0dmFyLT52YXJsZXZlbHN1cCwKKwkJCQkJCQkJCSAgdGFyZ2V0 LT5leHBycywgJmRlcHMpKQorCQl7CisJCQkvKgorCQkJICogVGhlIGV4cHJlc3Npb24gaXMgZnVu Y3Rpb25hbGx5IGRlcGVuZGVudCBvbiBvdGhlciB0YXJnZXQKKwkJCSAqIGV4cHJlc3Npb25zLCBz byBpdCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIHRhcmdldHMuICBTaW5jZSBpdAorCQkJICogd2ls bCBub3QgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIGtleSwgYSBzb3J0Z3JvdXByZWYgaXMgbm90CisJ CQkgKiBuZWVkZWQgZm9yIGl0LgorCQkJICovCisJCQlhZGRfbmV3X2NvbHVtbl90b19wYXRodGFy Z2V0KHRhcmdldCwgKEV4cHIgKikgdHZhcik7CisJCQlhZGRfbmV3X2NvbHVtbl90b19wYXRodGFy Z2V0KGFnZ19pbnB1dCwgKEV4cHIgKikgdHZhcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogV2UgbWF5IGFycml2ZSBoZXJlIHdpdGggYSBncm91cGluZyBleHByZXNzaW9uIHRoYXQg aXMgcHJvdmVuCisJCQkgKiByZWR1bmRhbnQgYnkgRXF1aXZhbGVuY2VDbGFzcyBwcm9jZXNzaW5n LCBzdWNoIGFzICd0MS5hJyBpbiB0aGUKKwkJCSAqIHF1ZXJ5IGJlbG93LgorCQkJICoKKwkJCSAq IHNlbGVjdCBtYXgodDEuYykgZnJvbSB0IHQxLCB0IHQyIHdoZXJlIHQxLmEgPSAxIGdyb3VwIGJ5 IHQxLmEsCisJCQkgKiB0MS5iOworCQkJICoKKwkJCSAqIEZvciBub3cgd2UganVzdCBnaXZlIHVw IGluIHRoaXMgY2FzZS4KKwkJCSAqLworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qCisgKiBpc192YXJfaW5fYWdncmVmX29ubHkKKyAqCSAgQ2hlY2sg d2hldGhlciB0aGUgZ2l2ZW4gVmFyIGFwcGVhcnMgaW4gYWdncmVnYXRlIGV4cHJlc3Npb25zIGFu ZCBub3QKKyAqCSAgZWxzZXdoZXJlIGluIHRoZSB0YXJnZXRsaXN0IG9yIGhhdmluZ1F1YWwuCisg Ki8KK3N0YXRpYyBib29sCitpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lckluZm8gKnJvb3Qs IFZhciAqdmFyKQoreworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBTZWFyY2ggdGhlIGxp c3Qgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25zIGZvciB0aGUgVmFyLgorCSAqLworCWZvcmVhY2go bGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8g PSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisJCUxpc3QJICAgKnZhcnM7CisKKwkJ QXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWlmICghYm1zX2lzX21l bWJlcih2YXItPnZhcm5vLCBhY19pbmZvLT5hZ2dfZXZhbF9hdCkpCisJCQljb250aW51ZTsKKwor CQl2YXJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIGFjX2luZm8tPmFnZ3JlZiwKKwkJCQkJ CQkgICBQVkNfUkVDVVJTRV9BR0dSRUdBVEVTIHwKKwkJCQkJCQkgICBQVkNfUkVDVVJTRV9XSU5E T1dGVU5DUyB8CisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfUExBQ0VIT0xERVJTKTsKKworCQlpZiAo bGlzdF9tZW1iZXIodmFycywgdmFyKSkKKwkJeworCQkJbGlzdF9mcmVlKHZhcnMpOworCQkJYnJl YWs7CisJCX0KKworCQlsaXN0X2ZyZWUodmFycyk7CisJfQorCisJcmV0dXJuIChsYyAhPSBOVUxM ICYmICFsaXN0X21lbWJlcihyb290LT50bGlzdF92YXJzLCB2YXIpKTsKK30KKworLyoKKyAqIGlz X3Zhcl9uZWVkZWRfYnlfam9pbgorICoJICBDaGVjayBpZiB0aGUgZ2l2ZW4gVmFyIGlzIG5lZWRl ZCBieSBqb2lucyBhYm92ZSB0aGUgY3VycmVudCByZWwuCisgKi8KK3N0YXRpYyBib29sCitpc192 YXJfbmVlZGVkX2J5X2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBSZWxPcHRJbmZv ICpyZWwpCit7CisJUmVsaWRzCQlyZWxpZHM7CisJaW50CQkJYXR0bm87CisJUmVsT3B0SW5mbyAq YmFzZXJlbDsKKworCS8qCisJICogTm90ZSB0aGF0IHdoZW4gY2hlY2tpbmcgaWYgdGhlIFZhciBp cyBuZWVkZWQgYnkgam9pbnMgYWJvdmUsIHdlIHdhbnQgdG8KKwkgKiBleGNsdWRlIGNhc2VzIHdo ZXJlIHRoZSBWYXIgaXMgb25seSBuZWVkZWQgaW4gdGhlIGZpbmFsIG91dHB1dC4gIFNvCisJICog aW5jbHVkZSAicmVsYXRpb24gMCIgaW4gdGhlIGNoZWNrLgorCSAqLworCXJlbGlkcyA9IGJtc19j b3B5KHJlbC0+cmVsaWRzKTsKKwlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIDApOwor CisJYmFzZXJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgdmFyLT52YXJubyk7CisJYXR0bm8gPSB2 YXItPnZhcmF0dG5vIC0gYmFzZXJlbC0+bWluX2F0dHI7CisKKwlyZXR1cm4gYm1zX25vbmVtcHR5 X2RpZmZlcmVuY2UoYmFzZXJlbC0+YXR0cl9uZWVkZWRbYXR0bm9dLCByZWxpZHMpOworfQorCisv KgorICogZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmCisgKgkgIFJldHVybiBzb3J0Z3JvdXBy ZWYgaWYgdGhlIGdpdmVuICdleHByJyBjYW4gYWN0IGFzIGdyb3VwaW5nIGV4cHJlc3Npb24sCisg KgkgIG9yIDAgb3RoZXJ3aXNlLgorICoKKyAqIFdlIGZpcnN0IGNoZWNrIGlmICdleHByJyBpcyBh bW9uZyB0aGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMuICBJZiBpdCBpcyBub3QsCisgKiB3ZSB0aGVu IGNoZWNrIGlmICdleHByJyBpcyBrbm93biBlcXVhbCB0byBhbnkgb2YgdGhlIGdyb3VwaW5nIGV4 cHJlc3Npb25zCisgKiBkdWUgdG8gZXF1aXZhbGVuY2UgcmVsYXRpb25zaGlwcy4KKyAqLworc3Rh dGljIEluZGV4CitnZXRfZXhwcmVzc2lvbl9zb3J0Z3JvdXByZWYoUGxhbm5lckluZm8gKnJvb3Qs IEV4cHIgKmV4cHIpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCByb290LT5n cm91cF9leHByX2xpc3QpCisJeworCQlHcm91cEV4cHJJbmZvICpnZV9pbmZvID0gbGZpcnN0X25v ZGUoR3JvdXBFeHBySW5mbywgbGMpOworCisJCUFzc2VydChJc0EoZ2VfaW5mby0+ZXhwciwgVmFy KSk7CisKKwkJaWYgKGVxdWFsKGdlX2luZm8tPmV4cHIsIGV4cHIpIHx8CisJCQlleHByc19rbm93 bl9lcXVhbChyb290LCAoTm9kZSAqKSBleHByLCAoTm9kZSAqKSBnZV9pbmZvLT5leHByLAorCQkJ CQkJCSAgZ2VfaW5mby0+YnRyZWVfb3BmYW1pbHkpKQorCQl7CisJCQlBc3NlcnQoZ2VfaW5mby0+ c29ydGdyb3VwcmVmID4gMCk7CisKKwkJCXJldHVybiBnZV9pbmZvLT5zb3J0Z3JvdXByZWY7CisJ CX0KKwl9CisKKwkvKiBUaGUgZXhwcmVzc2lvbiBjYW5ub3QgYWN0IGFzIGdyb3VwaW5nIGV4cHJl c3Npb24uICovCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmlu ZGV4IGM5ZDhjZDc5NmEuLjIyODZiOTgxYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jCkBAIC05MjksNiArOTI5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1l c0Jvb2xbXSA9CiAJCWZhbHNlLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKKwl7CisJCXsiZW5h YmxlX2VhZ2VyX2FnZ3JlZ2F0ZSIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9ELAor CQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGVhZ2VyIGFnZ3JlZ2F0aW9uLiIpLAorCQkJTlVMTCwK KwkJCUdVQ19FWFBMQUlOCisJCX0sCisJCSZlbmFibGVfZWFnZXJfYWdncmVnYXRlLAorCQlmYWxz ZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCiAJewogCQl7ImVuYWJsZV9wYXJhbGxlbF9hcHBl bmQiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJCWdldHRleHRfbm9vcCgi RW5hYmxlcyB0aGUgcGxhbm5lcidzIHVzZSBvZiBwYXJhbGxlbCBhcHBlbmQgcGxhbnMuIiksCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggYjJi YzQzMzgzZC4uZTE0MmQzN2M3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdy ZXNxbC5jb25mLnNhbXBsZQpAQCAtNDE2LDYgKzQxNiw3IEBACiAjZW5hYmxlX3RpZHNjYW4gPSBv bgogI2VuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nID0gb24KICNlbmFibGVfZGlzdGluY3RfcmVv cmRlcmluZyA9IG9uCisjZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSA9IG9mZgogCiAjIC0gUGxhbm5l ciBDb3N0IENvbnN0YW50cyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNTRlZTE3Njk3ZS4u NDQ3MjhlNTUyMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTgwLDYgKzgwLDI1IEBAIHR5cGVk ZWYgZW51bSBVcHBlclJlbGF0aW9uS2luZAogCS8qIE5COiBVUFBFUlJFTF9GSU5BTCBtdXN0IGJl IGxhc3QgZW51bSBlbnRyeTsgaXQncyB1c2VkIHRvIHNpemUgYXJyYXlzICovCiB9IFVwcGVyUmVs YXRpb25LaW5kOwogCisvKgorICogQSBzdHJ1Y3R1cmUgY29uc2lzdGluZyBvZiBhIGxpc3QgYW5k IGEgaGFzaCB0YWJsZSB0byBzdG9yZSByZWxhdGlvbnMuCisgKgorICogRm9yIHNtYWxsIHByb2Js ZW1zIHdlIGp1c3Qgc2NhbiB0aGUgbGlzdCB0byBkbyBsb29rdXBzLCBidXQgd2hlbiB0aGVyZSBh cmUKKyAqIG1hbnkgcmVsYXRpb25zIHdlIGJ1aWxkIGEgaGFzaCB0YWJsZSBmb3IgZmFzdGVyIGxv b2t1cHMuICBUaGUgaGFzaCB0YWJsZSBpcworICogcHJlc2VudCBhbmQgdmFsaWQgd2hlbiAnaGFz aCcgaXMgbm90IE5VTEwuICBOb3RlIHRoYXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlCisgKiBsaXN0 IGV2ZW4gd2hlbiB1c2luZyB0aGUgaGFzaCB0YWJsZSBmb3IgbG9va3VwczsgdGhpcyBzaW1wbGlm aWVzIGxpZmUgZm9yCisgKiBHRVFPLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJbmZvTGlzdAor eworCXBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkKQorCisJTm9kZVRhZwkJdHlw ZTsKKworCUxpc3QJICAgKml0ZW1zOworCXN0cnVjdCBIVEFCICpoYXNoIHBnX25vZGVfYXR0cihy ZWFkX3dyaXRlX2lnbm9yZSk7Cit9IFJlbEluZm9MaXN0OworCiAvKi0tLS0tLS0tLS0KICAqIFBs YW5uZXJHbG9iYWwKICAqCQlHbG9iYWwgaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXph dGlvbgpAQCAtMjcwLDE1ICsyODksMTYgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAKIAkvKgogCSAq IGpvaW5fcmVsX2xpc3QgaXMgYSBsaXN0IG9mIGFsbCBqb2luLXJlbGF0aW9uIFJlbE9wdEluZm9z IHdlIGhhdmUKLQkgKiBjb25zaWRlcmVkIGluIHRoaXMgcGxhbm5pbmcgcnVuLiAgRm9yIHNtYWxs IHByb2JsZW1zIHdlIGp1c3Qgc2NhbiB0aGUKLQkgKiBsaXN0IHRvIGRvIGxvb2t1cHMsIGJ1dCB3 aGVuIHRoZXJlIGFyZSBtYW55IGpvaW4gcmVsYXRpb25zIHdlIGJ1aWxkIGEKLQkgKiBoYXNoIHRh YmxlIGZvciBmYXN0ZXIgbG9va3Vwcy4gIFRoZSBoYXNoIHRhYmxlIGlzIHByZXNlbnQgYW5kIHZh bGlkCi0JICogd2hlbiBqb2luX3JlbF9oYXNoIGlzIG5vdCBOVUxMLiAgTm90ZSB0aGF0IHdlIHN0 aWxsIG1haW50YWluIHRoZSBsaXN0Ci0JICogZXZlbiB3aGVuIHVzaW5nIHRoZSBoYXNoIHRhYmxl IGZvciBsb29rdXBzOyB0aGlzIHNpbXBsaWZpZXMgbGlmZSBmb3IKLQkgKiBHRVFPLgorCSAqIGNv bnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uCiAJICovCi0JTGlzdAkgICAqam9pbl9yZWxf bGlzdDsKLQlzdHJ1Y3QgSFRBQiAqam9pbl9yZWxfaGFzaCBwZ19ub2RlX2F0dHIocmVhZF93cml0 ZV9pZ25vcmUpOworCVJlbEluZm9MaXN0ICpqb2luX3JlbF9saXN0OyAvKiBsaXN0IG9mIGpvaW4t cmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KKworCS8qCisJICogZ3JvdXBlZF9yZWxfbGlzdCBpcyBh IGxpc3Qgb2YgYWxsIGdyb3VwZWQtcmVsYXRpb24gUmVsT3B0SW5mb3Mgd2UgaGF2ZQorCSAqIGNv bnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uICBUaGlzIGlzIG9ubHkgdXNlZCBieSBlYWdl cgorCSAqIGFnZ3JlZ2F0aW9uLgorCSAqLworCVJlbEluZm9MaXN0ICpncm91cGVkX3JlbF9saXN0 OwkvKiBsaXN0IG9mIGdyb3VwZWQtcmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KIAogCS8qCiAJICog V2hlbiBkb2luZyBhIGR5bmFtaWMtcHJvZ3JhbW1pbmctc3R5bGUgam9pbiBzZWFyY2gsIGpvaW5f cmVsX2xldmVsW2tdCkBAIC0zNzMsNiArMzkzLDE1IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8q IGxpc3Qgb2YgUGxhY2VIb2xkZXJJbmZvcyAqLwogCUxpc3QJICAgKnBsYWNlaG9sZGVyX2xpc3Q7 CiAKKwkvKiBsaXN0IG9mIEFnZ0NsYXVzZUluZm9zICovCisJTGlzdAkgICAqYWdnX2NsYXVzZV9s aXN0OworCisJLyogbGlzdCBvZiBHcm91cEV4cHJJbmZvcyAqLworCUxpc3QJICAgKmdyb3VwX2V4 cHJfbGlzdDsKKworCS8qIGxpc3Qgb2YgcGxhaW4gVmFycyBjb250YWluZWQgaW4gdGFyZ2V0bGlz dCBhbmQgaGF2aW5nUXVhbCAqLworCUxpc3QJICAgKnRsaXN0X3ZhcnM7CisKIAkvKiBhcnJheSBv ZiBQbGFjZUhvbGRlckluZm9zIGluZGV4ZWQgYnkgcGhpZCAqLwogCXN0cnVjdCBQbGFjZUhvbGRl ckluZm8gKipwbGFjZWhvbGRlcl9hcnJheSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUs IGFycmF5X3NpemUocGxhY2Vob2xkZXJfYXJyYXlfc2l6ZSkpOwogCS8qIGFsbG9jYXRlZCBzaXpl IG9mIGFycmF5ICovCkBAIC02MTQsNyArNjQzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9u U2NoZW1lRGF0YSAqUGFydGl0aW9uU2NoZW1lOwogICogdGhlIHNldCBvZiBSVCBpbmRleGVzIGZv ciBpdHMgY29tcG9uZW50IGJhc2VyZWxzLCBhbG9uZyB3aXRoIFJUIGluZGV4ZXMKICAqIGZvciBh bnkgb3V0ZXIgam9pbnMgaXQgaGFzIGNvbXB1dGVkLiAgV2UgY3JlYXRlIFJlbE9wdEluZm8gbm9k ZXMgZm9yIGVhY2gKICAqIGJhc2VyZWwgYW5kIGpvaW5yZWwsIGFuZCBzdG9yZSB0aGVtIGluIHRo ZSBQbGFubmVySW5mbydzIHNpbXBsZV9yZWxfYXJyYXkKLSAqIGFuZCBqb2luX3JlbF9saXN0IHJl c3BlY3RpdmVseS4KKyAqIGFuZCBqb2luX3JlbF9saXN0IHJlc3BlY3RpdmVseS4gIFdlIGFsc28g Y3JlYXRlIFJlbE9wdEluZm8gbm9kZXMgZm9yIGVhY2gKKyAqIGdyb3VwZWQgcmVsYXRpb24gd2hl biBlYWdlciBhZ2dyZWdhdGlvbiBpcyBlbmFibGVkLCBhbmQgc3RvcmUgdGhlbSBpbiB0aGUKKyAq IFBsYW5uZXJJbmZvJ3MgZ3JvdXBlZF9yZWxfbGlzdC4KICAqCiAgKiBOb3RlIHRoYXQgdGhlcmUg aXMgb25seSBvbmUgam9pbnJlbCBmb3IgYW55IGdpdmVuIHNldCBvZiBjb21wb25lbnQKICAqIGJh c2VyZWxzLCBubyBtYXR0ZXIgd2hhdCBvcmRlciB3ZSBhc3NlbWJsZSB0aGVtIGluOyBzbyBhbiB1 bm9yZGVyZWQKQEAgLTY3OSw3ICs3MTAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uU2No ZW1lRGF0YSAqUGFydGl0aW9uU2NoZW1lOwogICoJCWNoZWFwZXN0X3VuaXF1ZV9wYXRoIC0gZm9y IGNhY2hpbmcgY2hlYXBlc3QgcGF0aCB0byBwcm9kdWNlIHVuaXF1ZQogICoJCQkobm8gZHVwbGlj YXRlcykgb3V0cHV0IGZyb20gcmVsYXRpb247IE5VTEwgaWYgbm90IHlldCByZXF1ZXN0ZWQKICAq CQljaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzIC0gYmVzdCBwYXRocyBmb3IgdGhlaXIgcGFy YW1ldGVyaXphdGlvbnM7Ci0gKgkJCWFsd2F5cyBpbmNsdWRlcyBjaGVhcGVzdF90b3RhbF9wYXRo LCBldmVuIGlmIHRoYXQncyB1bnBhcmFtZXRlcml6ZWQKKyAqCQkJYWx3YXlzIGluY2x1ZGVzIGNo ZWFwZXN0X3RvdGFsX3BhdGgsIGV2ZW4gaWYgdGhhdCdzIHVucGFyYW1ldGVyaXplZDsKKyAqCQkJ aW4gdGhlIGdyb3VwZWQgcmVsYXRpb24gY2FzZSwgYWx3YXlzIGluY2x1ZGVzIHRoZSB1bnBhcmFt ZXRlcml6ZWQKKyAqCQkJcGF0aCB3aXRoIHRoZSBmZXdlc3Qgcm93cywgaWYgdGhlcmUgaXMgb25l IGFuZCBpdCBpcyBub3QKKyAqCQkJY2hlYXBlc3RfdG90YWxfcGF0aAogICoJCWRpcmVjdF9sYXRl cmFsX3JlbGlkcyAtIHJlbHMgdGhpcyByZWwgaGFzIGRpcmVjdCBMQVRFUkFMIHJlZmVyZW5jZXMg dG8KICAqCQlsYXRlcmFsX3JlbGlkcyAtIHJlcXVpcmVkIG91dGVyIHJlbHMgZm9yIExBVEVSQUws IGFzIGEgUmVsaWRzIHNldAogICoJCQkoaW5jbHVkZXMgYm90aCBkaXJlY3QgYW5kIGluZGlyZWN0 IGxhdGVyYWwgcmVmZXJlbmNlcykKQEAgLTk5OCw2ICsxMDMyLDEyIEBAIHR5cGVkZWYgc3RydWN0 IFJlbE9wdEluZm8KIAkvKiBjb25zaWRlciBwYXJ0aXRpb253aXNlIGpvaW4gcGF0aHM/IChpZiBw YXJ0aXRpb25lZCByZWwpICovCiAJYm9vbAkJY29uc2lkZXJfcGFydGl0aW9ud2lzZV9qb2luOwog CisJLyoKKwkgKiB1c2VkIGJ5IGVhZ2VyIGFnZ3JlZ2F0aW9uOgorCSAqLworCS8qIGluZm9ybWF0 aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyAqLworCXN0cnVjdCBSZWxBZ2dJbmZv ICphZ2dfaW5mbzsKKwogCS8qCiAJICogaW5oZXJpdGFuY2UgbGlua3MsIGlmIHRoaXMgaXMgYW4g b3RoZXJyZWwgKG90aGVyd2lzZSBOVUxMKToKIAkgKi8KQEAgLTEwNzEsNiArMTExMSw2OCBAQCB0 eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJKChyZWwpLT5wYXJ0X3NjaGVtZSAmJiAocmVsKS0+ Ym91bmRpbmZvICYmIChyZWwpLT5ucGFydHMgPiAwICYmIFwKIAkgKHJlbCktPnBhcnRfcmVscyAm JiAocmVsKS0+cGFydGV4cHJzICYmIChyZWwpLT5udWxsYWJsZV9wYXJ0ZXhwcnMpCiAKKy8qCisg KiBJcyB0aGUgZ2l2ZW4gcmVsYXRpb24gYSBncm91cGVkIHJlbGF0aW9uPworICovCisjZGVmaW5l IElTX0dST1VQRURfUkVMKHJlbCkgXAorCSgocmVsKS0+YWdnX2luZm8gIT0gTlVMTCkKKworLyoK KyAqIFJlbEFnZ0luZm8KKyAqCQlJbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIGdyb3VwZWQg cGF0aHMgZm9yIGJhc2UgYW5kIGpvaW4gcmVscy4KKyAqCisgKiAicmVsaWRzIiBpcyB0aGUgc2V0 IG9mIHJlbGF0aW9uIGlkZW50aWZpZXJzIChSVCBpbmRleGVzKS4KKyAqCisgKiAidGFyZ2V0IiBp cyB0aGUgb3V0cHV0IHRsaXN0IGZvciB0aGUgZ3JvdXBlZCBwYXRocy4KKyAqCisgKiAiYWdnX2lu cHV0IiBpcyB0aGUgb3V0cHV0IHRsaXN0IGZvciB0aGUgcGF0aHMgdGhhdCBwcm92aWRlIGlucHV0 IHRvIHRoZQorICogZ3JvdXBlZCBwYXRocy4gIE9uZSBkaWZmZXJlbmNlIGZyb20gdGhlIHJlbHRh cmdldCBvZiB0aGUgbm9uLWdyb3VwZWQKKyAqIHJlbGF0aW9uIGlzIHRoYXQgYWdnX2lucHV0IGhh cyBpdHMgc29ydGdyb3VwcmVmc1tdIGluaXRpYWxpemVkLgorICoKKyAqICJncm91cGVkX3Jvd3Mi IGlzIHRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlc3VsdCB0dXBsZXMgb2YgdGhlIGdyb3VwZWQK KyAqIHJlbGF0aW9uLgorICoKKyAqICJncm91cF9jbGF1c2VzIiwgImdyb3VwX2V4cHJzIiBhbmQg Imdyb3VwX3BhdGhrZXlzIiBhcmUgbGlzdHMgb2YKKyAqIFNvcnRHcm91cENsYXVzZXMsIHRoZSBj b3JyZXNwb25kaW5nIGdyb3VwaW5nIGV4cHJlc3Npb25zIGFuZCBQYXRoS2V5cworICogcmVzcGVj dGl2ZWx5LgorICoKKyAqICJhZ2dfdXNlZnVsIiBpcyBhIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhl ciB0aGUgZ3JvdXBlZCBwYXRocyBhcmUgY29uc2lkZXJlZAorICogdXNlZnVsLgorICovCit0eXBl ZGVmIHN0cnVjdCBSZWxBZ2dJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX2NvcHlfZXF1YWwsIG5v X3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiBzZXQgb2Yg YmFzZSArIE9KIHJlbGlkcyAocmFuZ2V0YWJsZSBpbmRleGVzKSAqLworCVJlbGlkcwkJcmVsaWRz OworCisJLyoKKwkgKiBkZWZhdWx0IHJlc3VsdCB0YXJnZXRsaXN0IGZvciBQYXRocyBzY2Fubmlu ZyB0aGlzIGdyb3VwZWQgcmVsYXRpb247CisJICogbGlzdCBvZiBWYXJzL0V4cHJzLCBjb3N0LCB3 aWR0aAorCSAqLworCXN0cnVjdCBQYXRoVGFyZ2V0ICp0YXJnZXQ7CisKKwkvKgorCSAqIHRoZSB0 YXJnZXRsaXN0IGZvciBQYXRocyB0aGF0IHByb3ZpZGUgaW5wdXQgdG8gdGhlIGdyb3VwZWQgcGF0 aHMKKwkgKi8KKwlzdHJ1Y3QgUGF0aFRhcmdldCAqYWdnX2lucHV0OworCisJLyogZXN0aW1hdGVk IG51bWJlciBvZiByZXN1bHQgdHVwbGVzICovCisJQ2FyZGluYWxpdHkgZ3JvdXBlZF9yb3dzOwor CisJLyogYSBsaXN0IG9mIFNvcnRHcm91cENsYXVzZXMgKi8KKwlMaXN0CSAgICpncm91cF9jbGF1 c2VzOworCS8qIGEgbGlzdCBvZiBncm91cGluZyBleHByZXNzaW9ucyAqLworCUxpc3QJICAgKmdy b3VwX2V4cHJzOworCS8qIGEgbGlzdCBvZiBQYXRoS2V5cyAqLworCUxpc3QJICAgKmdyb3VwX3Bh dGhrZXlzOworCisJLyogdGhlIGdyb3VwZWQgcGF0aHMgYXJlIGNvbnNpZGVyZWQgdXNlZnVsPyAq LworCWJvb2wJCWFnZ191c2VmdWw7Cit9IFJlbEFnZ0luZm87CisKIC8qCiAgKiBJbmRleE9wdElu Zm8KICAqCQlQZXItaW5kZXggaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgpA QCAtMzE0NCw2ICszMjQ2LDQxIEBAIHR5cGVkZWYgc3RydWN0IE1pbk1heEFnZ0luZm8KIAlQYXJh bQkgICAqcGFyYW07CiB9IE1pbk1heEFnZ0luZm87CiAKKy8qCisgKiBUaGUgYWdncmVnYXRlIGV4 cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QgYW5kIGhhdmluZyBjbGF1c2VzCisg Ki8KK3R5cGVkZWYgc3RydWN0IEFnZ0NsYXVzZUluZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVh ZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHRoZSBBZ2dyZWYg ZXhwciAqLworCUFnZ3JlZgkgICAqYWdncmVmOworCisJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBl dmFsdWF0ZSB0aGlzIGFnZ3JlZ2F0ZSBhdCAqLworCVJlbGlkcwkJYWdnX2V2YWxfYXQ7Cit9IEFn Z0NsYXVzZUluZm87CisKKy8qCisgKiBUaGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcHBl YXIgaW4gZ3JvdXBpbmcgY2xhdXNlcworICovCit0eXBlZGVmIHN0cnVjdCBHcm91cEV4cHJJbmZv Cit7CisJcGdfbm9kZV9hdHRyKG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJ CXR5cGU7CisKKwkvKiB0aGUgcmVwcmVzZW50ZWQgZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKmV4 cHI7CisKKwkvKiB0aGUgdGxlU29ydEdyb3VwUmVmIG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvcnRH cm91cENsYXVzZSAqLworCUluZGV4CQlzb3J0Z3JvdXByZWY7CisKKwkvKiBidHJlZSBvcGZhbWls eSBkZWZpbmluZyB0aGUgb3JkZXJpbmcgKi8KKwlPaWQJCQlidHJlZV9vcGZhbWlseTsKK30gR3Jv dXBFeHBySW5mbzsKKwogLyoKICAqIEF0IHJ1bnRpbWUsIFBBUkFNX0VYRUMgc2xvdHMgYXJlIHVz ZWQgdG8gcGFzcyB2YWx1ZXMgYXJvdW5kIGZyb20gb25lIHBsYW4KICAqIG5vZGUgdG8gYW5vdGhl ci4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gcGFzcyB2YWx1ZXMgZG93biBpbnRvIHN1YnF1ZXJpZXMg KGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA3MTliZTM4OTdmLi43NzQ3ZmIzMzk3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMzEzLDEwICszMTMsMTYgQEAgZXh0ZXJu IHZvaWQgc2V0dXBfc2ltcGxlX3JlbF9hcnJheXMoUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJu IHZvaWQgZXhwYW5kX3BsYW5uZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3Np emUpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJv b3QsIGludCByZWxpZCwKIAkJCQkJCQkJCVJlbE9wdEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVs T3B0SW5mbyAqYnVpbGRfc2ltcGxlX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCQlSZWxPcHRJbmZvICpyZWxfcGxhaW4pOworZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxk X2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJIFJlbE9wdEluZm8gKnJl bF9wbGFpbik7CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbChQbGFubmVySW5mbyAq cm9vdCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsX25vZXJy KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRf YmFzZV9yZWxfaWdub3JlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7CiBleHRl cm4gUmVsT3B0SW5mbyAqZmluZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJl bGlkcyk7CitleHRlcm4gdm9pZCBhZGRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnJlbCk7CitleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9ncm91cGVkX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcyk7CiBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRf am9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgUmVsaWRzIGpvaW5yZWxpZHMs CiAJCQkJCQkJCSAgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLApAQCAtMzUyLDQgKzM1OCw1IEBAIGV4 dGVybiBSZWxPcHRJbmZvICpidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCQkJCQlpbnQgbmFwcGlu Zm9zLCBBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3MpOwogCitleHRlcm4gUmVsQWdnSW5mbyAqY3Jl YXRlX3JlbF9hZ2dfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKICNl bmRpZgkJCQkJCQkvKiBQQVRITk9ERV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDQ2OTU1 ZDEyOGYuLjVlOWQ5NTk3YjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0yMSw2ICsyMSw3IEBA CiAgKiBhbGxwYXRocy5jCiAgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9nZXFv OworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZTsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgZ2Vxb190aHJlc2hvbGQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50 IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1p bl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CkBAIC01Nyw2ICs1OCwxMCBAQCBleHRlcm4gdm9p ZCBnZW5lcmF0ZV9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJICBib29sIG92ZXJyaWRlX3Jvd3MpOwogZXh0ZXJuIHZvaWQgZ2VuZXJhdGVf dXNlZnVsX2dhdGhlcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQkJCQkJCQkJCSBib29sIG92ZXJyaWRlX3Jvd3MpOworZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfZ3Jv dXBlZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVs X2dyb3VwZWQsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwKKwkJCQkJCQkJICAg UmVsQWdnSW5mbyAqYWdnX2luZm8pOwogZXh0ZXJuIGludAljb21wdXRlX3BhcmFsbGVsX3dvcmtl cihSZWxPcHRJbmZvICpyZWwsIGRvdWJsZSBoZWFwX3BhZ2VzLAogCQkJCQkJCQkJZG91YmxlIGlu ZGV4X3BhZ2VzLCBpbnQgbWF4X3dvcmtlcnMpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BhcnRpYWxf Yml0bWFwX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wbGFubWFpbi5oCmluZGV4IGZlZTMzNzhiYmUuLjlmYzQ1NTAxNTggMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wbGFubWFpbi5oCkBAIC03NSw2ICs3NSw3IEBAIGV4dGVybiB2b2lkIGFkZF92YXJzX3Rv X3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnZhcnMsCiBleHRlcm4gdm9pZCBh ZGRfdmFyc190b19hdHRyX25lZWRlZChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIAkJ CQkJCQkJCVJlbGlkcyB3aGVyZV9uZWVkZWQpOwogZXh0ZXJuIHZvaWQgcmVtb3ZlX3VzZWxlc3Nf Z3JvdXBieV9jb2x1bW5zKFBsYW5uZXJJbmZvICpyb290KTsKK2V4dGVybiB2b2lkIHNldHVwX2Vh Z2VyX2FnZ3JlZ2F0aW9uKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGZpbmRfbGF0 ZXJhbF9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIHJlYnVpbGRf bGF0ZXJhbF9hdHRyX25lZWRlZChQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBjcmVh dGVfbGF0ZXJhbF9qb2luX2luZm8oUGxhbm5lckluZm8gKnJvb3QpOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAuLjlmNjM0NzJlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2VhZ2VyX2FnZ3JlZ2F0ZS5vdXQKQEAgLTAsMCArMSwxMzA4IEBACist LQorLS0gRUFHRVIgQUdHUkVHQVRJT04KKy0tIFRlc3Qgd2UgY2FuIHB1c2ggYWdncmVnYXRpb24g ZG93biBiZWxvdyBqb2luCistLQorLS0gRW5hYmxlIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGljaCBi eSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgVE8gb247 CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QxIChhIGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNp c2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QyIChhIGludCwgYiBpbnQsIGMgZG91Ymxl IHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QzIChhIGludCwgYiBpbnQsIGMg ZG91YmxlIHByZWNpc2lvbik7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDEgU0VMRUNUIGksIGks IGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8gZWFnZXJfYWdn X3QyIFNFTEVDVCBpLCBpJTEwLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKK0lO U0VSVCBJTlRPIGVhZ2VyX2FnZ190MyBTRUxFQ1QgaSUxMCwgaSUxMCwgaSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKWk7CitBTkFMWVpFIGVhZ2VyX2FnZ190MTsKK0FOQUxZWkUgZWFnZXJf YWdnX3QyOworQU5BTFlaRSBlYWdlcl9hZ2dfdDM7CistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdh dGlvbiBvdmVyIGJhc2UgcmVsCistLQorLS0gUGVyZm9ybSBzY2FuIG9mIGEgdGFibGUsIGFnZ3Jl Z2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZpbmFs aXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIg dDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBh dmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1 dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgU29ydCBLZXk6IHQxLmEKKyAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJ QUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBh dmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQy LmMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQy CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQy LmMKKygxOCByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3Qx IHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JE RVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcKKyAz IHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1MDMK KyA5IHwgNTA0CisoOSByb3dzKQorCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0aW5nIGFn Z3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBK T0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZ IHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3Vw QWdncmVnYXRlCisgICBPdXRwdXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5OiB0MS5h CisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykp CisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx LmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Mi5iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 MiB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5j LCB0Mi5iCisoMjEgcm93cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2Fn Z190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5h IE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYKKyAyIHwgNDk3 CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1MDIKKyA4IHwg NTAzCisgOSB8IDUwNAorKDkgcm93cykKKworUkVTRVQgZW5hYmxlX2hhc2hhZ2c7CistLQorLS0g VGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLQorLS0gUGVyZm9ybSBqb2lu IG9mIHRhYmxlcywgYWdncmVnYXRlIHRoZSByZXN1bHQsIGpvaW4gaXQgdG8gdGhlIG90aGVyIHRh YmxlCistLSBhbmQgZmluYWxpemUgdGhlIGFnZ3JlZ2F0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2df dDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2df dDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFn Z3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMgKyB0My5jKSkKKyAgIEdyb3VwIEtl eTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZn KCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgU29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5j ICsgdDMuYykpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmco KHQyLmMgKyB0My5jKSkpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwg YXZnKCh0Mi5jICsgdDMuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDMuYworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYSA9IHQyLmEpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190MyB0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0My5hLCB0My5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5j LCB0Mi5iLCB0Mi5hCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iLCB0Mi5hCisoMjUgcm93 cykKKworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEg Sk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMg T04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworIGEgfCBhdmcgCist LS0rLS0tLS0KKyAxIHwgNDk3CisgMiB8IDQ5OQorIDMgfCA1MDEKKyA0IHwgNTAzCisgNSB8IDUw NQorIDYgfCA1MDcKKyA3IHwgNTA5CisgOCB8IDUxMQorIDkgfCA1MTMKKyg5IHJvd3MpCisKKy0t IFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFz aGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwg YXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9V UCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBP dXRwdXQ6IHQxLmEsIGF2ZygodDIuYyArIHQzLmMpKQorICAgR3JvdXAgS2V5OiB0MS5hCisgICAt PiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5j KSkpCisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMp KSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKCh0Mi5jICsg dDMuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyLmMsIHQyLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQzLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDMgdDMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwg dDMuYiwgdDMuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDIuYywgdDIuYiwgdDIuYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIu YiwgdDIuYQorKDI4IHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00g ZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4g ZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEu YTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NworIDIgfCA0OTkKKyAzIHwgNTAxCisg NCB8IDUwMworIDUgfCA1MDUKKyA2IHwgNTA3CisgNyB8IDUwOQorIDggfCA1MTEKKyA5IHwgNTEz CisoOSByb3dzKQorCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKy0tCistLSBUZXN0IHRoYXQgZWFn ZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIG91dGVyIGpvaW4KKy0tCistLSBFbnN1cmUgYWdncmVn YXRpb24gY2FuIGJlIHB1c2hlZCBkb3duIHRvIHRoZSBub24tbnVsbGFibGUgc2lkZQorRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2Vy X2FnZ190MSB0MSBSSUdIVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9V UCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXpl IEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5 OiB0MS5hCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmco dDIuYykpCisgICAgICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgLT4gIEhhc2ggUmlnaHQg Sm9pbgorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykpCisg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcodDIuYykKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYworKDE4IHJvd3MpCisK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklHSFQgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0 IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQK KyAgIHwgNTA1CisoMTAgcm93cykKKworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbm5vdCBiZSBw dXNoZWQgZG93biB0byB0aGUgbnVsbGFibGUgc2lkZQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKQorU0VMRUNUIHQyLmIsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpP SU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQyLmIgT1JERVIgQlkg dDIuYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0OiB0Mi5iLCAoYXZnKHQyLmMpKQorICAg U29ydCBLZXk6IHQyLmIKKyAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQy LmIsIGF2Zyh0Mi5jKQorICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAtPiAgSGFz aCBSaWdodCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIHQyLmMKKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyLmIgPSB0MS5iKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDIuYSwgdDIuYiwgdDIuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDEuYgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYgorKDE1IHJvd3MpCisKK1NFTEVDVCB0Mi5iLCBhdmcodDIuYykgRlJPTSBlYWdl cl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9V UCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisgYiB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYK KyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1 MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorICAgfCAgICAKKygxMCByb3dzKQorCistLQorLS0gVGVz dCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9uIHdvcmtzIGZvciBwYXJhbGxlbCBwbGFucworLS0KK1NF VCBwYXJhbGxlbF9zZXR1cF9jb3N0PTA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdD0wOworU0VU IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU9MDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vy c19wZXJfZ2F0aGVyPTQ7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEu YSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9O IHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dy ZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6IHQxLmEKKyAg IC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQy LmMpKQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAyCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAg ICAgICBTb3J0IEtleTogdDEuYQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCAoUEFSVElBTCBhdmcodDIuYykp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS5iID0gdDIuYikKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Qx IHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmIsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgUEFSVElBTCBhdmcodDIuYykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDIuYSwgdDIuYiwgdDIuYworKDIxIHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykg RlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIg R1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwg NDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3 IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQKKyg5IHJvd3MpCisKK1JFU0VUIHBhcmFsbGVsX3Nl dHVwX2Nvc3Q7CitSRVNFVCBwYXJhbGxlbF90dXBsZV9jb3N0OworUkVTRVQgbWluX3BhcmFsbGVs X3RhYmxlX3NjYW5fc2l6ZTsKK1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7 CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MTsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QyOworRFJP UCBUQUJMRSBlYWdlcl9hZ2dfdDM7CistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBmb3Ig cGFydGl0aW9ud2lzZSBqb2luCistLQorLS0gRW5hYmxlIHBhcnRpdGlvbndpc2UgYWdncmVnYXRl LCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNl X2FnZ3JlZ2F0ZSBUTyB0cnVlOworLS0gRW5hYmxlIHBhcnRpdGlvbndpc2Ugam9pbiwgd2hpY2gg YnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRP IHRydWU7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50KSBQQVJUSVRJ T04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEgUEFSVElUSU9O IE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBU QUJMRSBlYWdlcl9hZ2dfdGFiMV9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZB TFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMyBQ QVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsK K0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMih4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBS QU5HRSh5KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJT04gT0YgZWFn ZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWIyX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZS T00gKDEwKSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AzIFBBUlRJVElP TiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApOworSU5TRVJU IElOVE8gZWFnZXJfYWdnX3RhYjEgU0VMRUNUIGkgJSAzMCwgaSAlIDIwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDAsIDI5OSwgMikgaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIyIFNFTEVDVCBp ICUgMjAsIGkgJSAzMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDMpIGk7CitBTkFMWVpF IGVhZ2VyX2FnZ190YWIxOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiMjsKKy0tIFdoZW4gR1JPVVAg QlkgY2xhdXNlIG1hdGNoZXM7IGZ1bGwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNo IHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBz dW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIy IHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU29ydAorICAgT3V0cHV0OiB0MS54LCAoc3VtKHQxLnkpKSwgKGNvdW50KCopKQorICAgU29y dCBLZXk6IHQxLngKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSh0MS55KSwgY291bnQoKikK KyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEu eSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyLnkgPSB0MS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiMl9wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi55CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDEueSkpLCAoUEFSVElBTCBjb3Vu dCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgUEFSVElB TCBzdW0odDEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCB0MS55CisgICAgICAgICAt PiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngs IHN1bSh0MV8xLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngK KyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMiB0Ml8x CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueQorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf MS54LCAoUEFSVElBTCBzdW0odDFfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIFBBUlRJQUwgc3VtKHQxXzEueSks IFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCB0MV8xLnkKKyAgICAgICAgIC0+ICBG aW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3Vt KHQxXzIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8yLngsIChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkgPSB0MV8yLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AzIHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55CisgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngs IChQQVJUSUFMIHN1bSh0MV8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi55KSwgUEFS VElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHQxXzIueQorKDQ5IHJvd3MpCisKK1NFTEVD VCB0MS54LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2Vy X2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEu eDsKKyB4ICB8IHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tKy0tLS0tLS0KKyAgMCB8ICA1MDAg fCAgIDEwMAorICA2IHwgMTEwMCB8ICAgMTAwCisgMTIgfCAgNzAwIHwgICAxMDAKKyAxOCB8IDEz MDAgfCAgIDEwMAorIDI0IHwgIDkwMCB8ICAgMTAwCisoNSByb3dzKQorCistLSBHUk9VUCBCWSBo YXZpbmcgb3RoZXIgbWF0Y2hpbmcga2V5CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitT RUxFQ1QgdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBl YWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZ IHQyLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDIueSwgKHN1bSh0MS55KSksIChjb3Vu dCgqKSkKKyAgIFNvcnQgS2V5OiB0Mi55CisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgRmlu YWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCBzdW0odDEu eSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLnkKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgKFBB UlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0Mi55ID0gdDEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueSwgdDEu eAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMS55LCBzdW0odDFfMS55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDJfMS55CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueSwgKFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYjJfcDIgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFM IHN1bSh0MV8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueSwgdDFfMS54Cisg ICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8yLnksIHN1bSh0MV8yLnkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8yLnkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMi55LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi Ml9wMyB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueQorICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwgc3Vt KHQxXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi55LCB0MV8yLngKKyg0OSBy b3dzKQorCitTRUxFQ1QgdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55 IE9SREVSIEJZIHQyLnk7CisgeSAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0t CisgIDAgfCAgNTAwIHwgICAxMDAKKyAgNiB8IDExMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAg MTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAyNCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykKKwor LS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRp b24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJfYWdn X3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQy LnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDIueCwg KHN1bSh0MS54KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0Mi54CisgICAtPiAgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0Mi54LCBzdW0odDEueCksIGNvdW50 KCopCisgICAgICAgICBHcm91cCBLZXk6IHQyLngKKyAgICAgICAgIEZpbHRlcjogKGF2Zyh0MS54 KSA+ICcxMCc6Om51bWVyaWMpCisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJ QUwgc3VtKHQxXzEueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8xLngp KQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMS55ID0gdDFfMS54KQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9w MSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDJfMS55 CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0MV8xLngpKSwgKFBBUlRJQUwgY291bnQo KikpLCAoUEFSVElBTCBhdmcodDFfMS54KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLngpLCBQQVJUSUFMIGNvdW50KCopLCBQ QVJUSUFMIGF2Zyh0MV8xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFMIHN1 bSh0MV8yLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMi54KSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJf MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQyXzIueQorICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQQVJUSUFMIGNvdW50KCopKSwg KFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzIueCwgUEFSVElBTCBzdW0odDFfMi54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFSVElB TCBhdmcodDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDFf My54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzMueCkpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnkgPSB0MV8zLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AzIHQyXzMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0Ml8zLnkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJU SUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8zLngsIFBBUlRJQUwgc3VtKHQxXzMueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZn KHQxXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFf My54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMy54CisoNDQgcm93cykKKworU0VMRUNUIHQyLngsIHN1bSh0 MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIg V0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTAgT1JE RVIgQlkgdDIueDsKKyB4ICB8IHN1bSAgfCBjb3VudCAKKy0tLS0rLS0tLS0tKy0tLS0tLS0KKyAg MiB8ICA2MDAgfCAgICA1MAorICA0IHwgMTIwMCB8ICAgIDUwCisgIDggfCAgOTAwIHwgICAgNTAK KyAxMiB8ICA2MDAgfCAgICA1MAorIDE0IHwgMTIwMCB8ICAgIDUwCisgMTggfCAgOTAwIHwgICAg NTAKKyg2IHJvd3MpCisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3ZlciBqb2lu IHJlbAorLS0gZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lO IGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMg T04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSgodDIueSArIHQzLnkpKSkKKyAgIFNvcnQg S2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBzdW0oKHQyLnkgKyB0My55KSkKKyAg ICAgICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0oKHQyLnkg KyB0My55KSkpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjFfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueAorICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDIueCwgdDMueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCBQQVJUSUFMIHN1bSgodDIueSAr IHQzLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngsIHQzLnks IHQzLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyLnggPSB0My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0MgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIxX3AxIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngKKyAgICAgICAgIC0+ICBGaW5h bGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKCh0 Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf MS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDFfMS54ID0gdDJfMS54KQorICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngsIChQ QVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0M18x LnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0Ml8xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwg dDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18x LnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMiB0M18xCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwg dDNfMS54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIHN1bSgodDJfMi55ICsgdDNfMi55KSkKKyAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18y LnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIueCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjFfcDMgdDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwgUEFS VElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml8yLnksIHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYjFfcDMgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYjFfcDMgdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorKDcwIHJvd3MpCisKK1NFTEVDVCB0MS54 LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2df dGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0 My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyB4ICB8ICBzdW0gIAorLS0tLSstLS0t LS0tCisgIDAgfCAxMDAwMAorICAyIHwgMTQwMDAKKyAgNCB8IDE4MDAwCisgIDYgfCAyMjAwMAor ICA4IHwgMjYwMDAKKyAxMCB8IDEwMDAwCisgMTIgfCAxNDAwMAorIDE0IHwgMTgwMDAKKyAxNiB8 IDIyMDAwCisgMTggfCAyNjAwMAorIDIwIHwgMTAwMDAKKyAyMiB8IDE0MDAwCisgMjQgfCAxODAw MAorIDI2IHwgMjIwMDAKKyAyOCB8IDI2MDAwCisoMTUgcm93cykKKworLS0gcGFydGlhbCBhZ2dy ZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3Rh YjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2Fn Z190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0My55LCBz dW0oKHQyLnkgKyB0My55KSkKKyAgIEdyb3VwIEtleTogdDMueQorICAgLT4gIFNvcnQKKyAgICAg ICAgIE91dHB1dDogdDMueSwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAgICAgICAg U29ydCBLZXk6IHQzLnkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCAoUEFSVElBTCBz dW0oKHQyXzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDJfMS54ID0gdDFfMS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgR3JvdXBB Z2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18x LnksIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0M18xLnksIHQzXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyXzEueCwgdDNfMS55 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiB0Ml8xLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBNZXJnZSBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0 M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVy Z2UgQ29uZDogKHQyXzEueCA9IHQzXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWIxX3AxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AxIHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMSB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M18yLnksIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0MV8yLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueSwgdDNfMi54LCBQQVJUSUFMIHN1bSgodDJf Mi55ICsgdDNfMi55KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJf Mi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEluY3Jl bWVudGFsIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf Mi55LCB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTb3J0IEtleTogdDJfMi54LCB0M18yLnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFByZXNvcnRlZCBLZXk6IHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDJfMi54ID0gdDNfMi54KQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8y LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5 OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDJfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQy XzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55 LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDNfMgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18y LnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AyIHQxXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgKFBBUlRJQUwg c3VtKCh0Ml8zLnkgKyB0M18zLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQyXzMueCA9IHQxXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3Vw QWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgdDNf My55LCB0M18zLngsIFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSW5jcmVtZW50YWwgU29ydAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueCwgdDNfMy55LCB0M18zLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0Ml8zLngsIHQzXzMu eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc29ydGVkIEtleTogdDJfMy54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueCwg dDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1l cmdlIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyXzMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9h Z2dfdGFiMV9wMyB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQzXzMueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMyB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYjFfcDMgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8zLngKKyg4OCByb3dzKQorCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9N IGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLngg Sk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVS IEJZIHQzLnk7CisgeSAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgIDc1MDAKKyAgMiB8 IDEzNTAwCisgIDQgfCAxOTUwMAorICA2IHwgMjU1MDAKKyAgOCB8IDMxNTAwCisgMTAgfCAyMjUw MAorIDEyIHwgMjg1MDAKKyAxNCB8IDM0NTAwCisgMTYgfCA0MDUwMAorIDE4IHwgNDY1MDAKKygx MCByb3dzKQorCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3Rh YjE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIyOworLS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1s ZXZlbCBwYXJ0aXRpb25pbmcgc2NoZW1lCistLQorQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJf bWwoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFn ZXJfYWdnX3RhYl9tbF9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVT IEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJU SVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApIFBB UlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3Mx IFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRP ICgxNSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiBQQVJUSVRJT04gT0Yg ZWFnZXJfYWdnX3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDE1KSBUTyAoMjApOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwg Rk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitDUkVB VEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wM19zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3Rh Yl9tbF9wMyBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMjUpOworQ1JFQVRFIFRBQkxFIGVhZ2Vy X2FnZ190YWJfbWxfcDNfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZB TFVFUyBGUk9NICgyNSkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VM RUNUIGkgJSAzMCwgaSAlIDMwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitBTkFM WVpFIGVhZ2VyX2FnZ190YWJfbWw7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBm dWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlO IChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBG Uk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLngg PSB0Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0 cHV0OiB0MS54LCAoc3VtKHQyLnkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQxLngKKyAg IC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0odDIueSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLnggPSB0Mi54KQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyLngsIChQQVJUSUFMIHN1bSh0Mi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCBQQVJUSUFMIHN1bSh0Mi55KSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgLT4gIEZpbmFsaXpl IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0odDJfMS55 KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAg ICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwg KFBBUlRJQUwgc3VtKHQyXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCAo UEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIFBBUlRJQUwgc3VtKHQyXzEueSksIFBBUlRJ QUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDJfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgLT4gIEZp bmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0o dDJfMi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzIueCwgKFBBUlRJQUwgc3VtKHQyXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9IHQyXzIueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8y CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueAorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf Mi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIFBBUlRJQUwgc3VtKHQyXzIueSks IFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vw IEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDJfMgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAg LT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54 LCBzdW0odDJfMy55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMy54 CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueCwgKFBBUlRJQUwgc3VtKHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzMueCA9IHQyXzMueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MSB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueAorICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIFBBUlRJQUwgc3VtKHQy XzMueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDJfMworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueAorICAg ICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDog dDFfNC54LCBzdW0odDJfNC55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTog dDFfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzQueCwgKFBBUlRJQUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzQueCA9IHQyXzQueCkKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wM19zMiB0MV80CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIFBBUlRJQUwg c3VtKHQyXzQueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDJfNAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LnksIHQyXzQu eAorKDc5IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFn ZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLngg R1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgIHN1bSAgfCBjb3VudCAKKy0tLS0r LS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgMCB8ICAxMDg5CisgIDEgfCAgMTE1NiB8ICAxMTU2 CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAxMTU2CisgIDQgfCAgNDYyNCB8 ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2CisgIDYgfCAgNjkzNiB8ICAxMTU2CisgIDcgfCAg ODA5MiB8ICAxMTU2CisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkgfCAxMDQwNCB8ICAxMTU2Cisg MTAgfCAxMTU2MCB8ICAxMTU2CisgMTEgfCAxMTk3OSB8ICAxMDg5CisgMTIgfCAxMzA2OCB8ICAx MDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTQgfCAxNTI0NiB8ICAxMDg5CisgMTUgfCAxNjMz NSB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTcgfCAxODUxMyB8ICAxMDg5CisgMTgg fCAxOTYwMiB8ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5CisgMjAgfCAyMTc4MCB8ICAxMDg5 CisgMjEgfCAyMjg2OSB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAxMDg5CisgMjMgfCAyNTA0NyB8 ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjUgfCAyNzIyNSB8ICAxMDg5CisgMjYgfCAy ODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAxMDg5CisgMjggfCAzMDQ5MiB8ICAxMDg5Cisg MjkgfCAzMTU4MSB8ICAxMDg5CisoMzAgcm93cykKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2Ug ZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNo IHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS55LCBz dW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2Fn Z190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55Owor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQxLnksIChzdW0odDIueSkpLCAoY291bnQoKikpCisg ICBTb3J0IEtleTogdDEueQorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg IE91dHB1dDogdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5OiB0 MS55CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueSwgKFBBUlRJQUwgc3VtKHQyXzEueSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQx XzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzEueSwgdDFfMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0Ml8x LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEueCwgUEFSVElBTCBzdW0odDJfMS55KSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8xLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueSwgKFBBUlRJQUwgc3VtKHQyXzIueSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIu eCA9IHQyXzIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzIueSwgdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIChQQVJUSUFMIHN1bSh0Ml8y LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg UGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyXzIueCwgUEFSVElBTCBzdW0odDJfMi55KSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wMl9zMSB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueSwgKFBBUlRJQUwgc3VtKHQyXzMueSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQx XzMueCA9IHQyXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzMueSwgdDFfMy54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIChQQVJUSUFMIHN1bSh0 Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzMueCwgUEFSVElBTCBzdW0odDJfMy55KSwgUEFSVElBTCBjb3VudCgqKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8zLngKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wMl9zMiB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueSwgKFBBUlRJQUwgc3VtKHQyXzQu eSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzQueCA9IHQyXzQueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0MV80CisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzQueSwgdDFfNC54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIChQQVJUSUFMIHN1 bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyXzQueCwgUEFSVElBTCBzdW0odDJfNC55KSwgUEFSVElBTCBjb3VudCgq KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml80LngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzUueSwgKFBBUlRJQUwgc3VtKHQy XzUueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKHQxXzUueCA9IHQyXzUueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0MV81CisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzUueSwgdDFfNS54CisgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LngsIChQQVJUSUFM IHN1bSh0Ml81LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzUueCwgUEFSVElBTCBzdW0odDJfNS55KSwgUEFSVElBTCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml81LngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0Ml81CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzUueSwgdDJfNS54CisoNjcgcm93cykKKworU0VMRUNUIHQx LnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55IE9SREVSIEJZIHQx Lnk7CisgeSAgfCAgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0tKy0tLS0tLS0KKyAgMCB8ICAg ICAwIHwgIDEwODkKKyAgMSB8ICAxMTU2IHwgIDExNTYKKyAgMiB8ICAyMzEyIHwgIDExNTYKKyAg MyB8ICAzNDY4IHwgIDExNTYKKyAgNCB8ICA0NjI0IHwgIDExNTYKKyAgNSB8ICA1NzgwIHwgIDEx NTYKKyAgNiB8ICA2OTM2IHwgIDExNTYKKyAgNyB8ICA4MDkyIHwgIDExNTYKKyAgOCB8ICA5MjQ4 IHwgIDExNTYKKyAgOSB8IDEwNDA0IHwgIDExNTYKKyAxMCB8IDExNTYwIHwgIDExNTYKKyAxMSB8 IDExOTc5IHwgIDEwODkKKyAxMiB8IDEzMDY4IHwgIDEwODkKKyAxMyB8IDE0MTU3IHwgIDEwODkK KyAxNCB8IDE1MjQ2IHwgIDEwODkKKyAxNSB8IDE2MzM1IHwgIDEwODkKKyAxNiB8IDE3NDI0IHwg IDEwODkKKyAxNyB8IDE4NTEzIHwgIDEwODkKKyAxOCB8IDE5NjAyIHwgIDEwODkKKyAxOSB8IDIw NjkxIHwgIDEwODkKKyAyMCB8IDIxNzgwIHwgIDEwODkKKyAyMSB8IDIyODY5IHwgIDEwODkKKyAy MiB8IDIzOTU4IHwgIDEwODkKKyAyMyB8IDI1MDQ3IHwgIDEwODkKKyAyNCB8IDI2MTM2IHwgIDEw ODkKKyAyNSB8IDI3MjI1IHwgIDEwODkKKyAyNiB8IDI4MzE0IHwgIDEwODkKKyAyNyB8IDI5NDAz IHwgIDEwODkKKyAyOCB8IDMwNDkyIHwgIDEwODkKKyAyOSB8IDMxNTgxIHwgIDEwODkKKygzMCBy b3dzKQorCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0t IGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEg Sk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3Rh Yl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0 OiB0MS54LCAoc3VtKCh0Mi55ICsgdDMueSkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQx LngKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIHN1bSgodDIueSArIHQzLnkpKSwgY291bnQoKikK KyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDEueAorICAgICAgICAgICAgICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCAoUEFSVElBTCBzdW0oKHQy LnkgKyB0My55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhh c2ggQ29uZDogKHQxLnggPSB0Mi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQxCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIChQQVJUSUFMIHN1bSgodDIu eSArIHQzLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Mi54LCB0My54LCBQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSwgUEFS VElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Mi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngs IHQzLnksIHQzLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQyLnggPSB0My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AxIHQyCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIHQyLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLnksIHQzLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAg ICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8x LngsIHN1bSgodDJfMS55ICsgdDNfMS55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQx XzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngsIChQQVJUSUFMIHN1bSgo dDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLngsIFBBUlRJQUwgc3VtKCh0Ml8xLnkg KyB0M18xLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMS55LCB0Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWJfbWxfcDJfczEgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMl9zMSB0M18xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAtPiAg RmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1 bSgodDJfMi55ICsgdDNfMi55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFS VElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzIueCA9 IHQyXzIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIChQQVJUSUFMIHN1bSgodDJfMi55 ICsgdDNfMi55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18y LnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMi55LCB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDJfczIgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wMl9zMiB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAtPiAgRmluYWxp emUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIHN1bSgodDJf My55ICsgdDNfMy55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMu eAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8zLngsIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzMueCA9IHQyXzMu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wM19zMSB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMy54LCB0M18zLngsIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNf My55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMy54LCB0M18zLngsIFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55 LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0M18zLngpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDNfczEgdDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wM19zMSB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFz aEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngsIHN1bSgodDJfNC55ICsg dDNfNC55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzQueAorICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV80LngsIChQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgq KSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzQueCA9IHQyXzQueCkKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9t bF9wM19zMiB0MV80CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfNC54LCB0M180LngsIChQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfNC54LCB0M180LngsIFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSwgUEFSVElB TCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 Ml80LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80 LngsIHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0Ml80LnggPSB0M180LngpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNf czIgdDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19z MiB0M180CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzQueSwgdDNfNC54CisoMTE0IHJvd3MpCisKK1NFTEVDVCB0MS54LCBzdW0o dDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdl cl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBv biB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCAgIHN1bSAg IHwgY291bnQgCistLS0tKy0tLS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgICAwIHwgMzU5MzcK KyAgMSB8ICAgNzg2MDggfCAzOTMwNAorICAyIHwgIDE1NzIxNiB8IDM5MzA0CisgIDMgfCAgMjM1 ODI0IHwgMzkzMDQKKyAgNCB8ICAzMTQ0MzIgfCAzOTMwNAorICA1IHwgIDM5MzA0MCB8IDM5MzA0 CisgIDYgfCAgNDcxNjQ4IHwgMzkzMDQKKyAgNyB8ICA1NTAyNTYgfCAzOTMwNAorICA4IHwgIDYy ODg2NCB8IDM5MzA0CisgIDkgfCAgNzA3NDcyIHwgMzkzMDQKKyAxMCB8ICA3ODYwODAgfCAzOTMw NAorIDExIHwgIDc5MDYxNCB8IDM1OTM3CisgMTIgfCAgODYyNDg4IHwgMzU5MzcKKyAxMyB8ICA5 MzQzNjIgfCAzNTkzNworIDE0IHwgMTAwNjIzNiB8IDM1OTM3CisgMTUgfCAxMDc4MTEwIHwgMzU5 MzcKKyAxNiB8IDExNDk5ODQgfCAzNTkzNworIDE3IHwgMTIyMTg1OCB8IDM1OTM3CisgMTggfCAx MjkzNzMyIHwgMzU5MzcKKyAxOSB8IDEzNjU2MDYgfCAzNTkzNworIDIwIHwgMTQzNzQ4MCB8IDM1 OTM3CisgMjEgfCAxNTA5MzU0IHwgMzU5MzcKKyAyMiB8IDE1ODEyMjggfCAzNTkzNworIDIzIHwg MTY1MzEwMiB8IDM1OTM3CisgMjQgfCAxNzI0OTc2IHwgMzU5MzcKKyAyNSB8IDE3OTY4NTAgfCAz NTkzNworIDI2IHwgMTg2ODcyNCB8IDM1OTM3CisgMjcgfCAxOTQwNTk4IHwgMzU5MzcKKyAyOCB8 IDIwMTI0NzIgfCAzNTkzNworIDI5IHwgMjA4NDM0NiB8IDM1OTM3CisoMzAgcm93cykKKworLS0g cGFydGlhbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU IHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0 MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2df dGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU29ydAorICAgT3V0cHV0OiB0My55LCAoc3VtKCh0Mi55ICsgdDMueSkpKSwgKGNvdW50KCop KQorICAgU29ydCBLZXk6IHQzLnkKKyAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAg ICAgICBPdXRwdXQ6IHQzLnksIHN1bSgodDIueSArIHQzLnkpKSwgY291bnQoKikKKyAgICAgICAg IEdyb3VwIEtleTogdDMueQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIChQQVJUSUFM IHN1bSgodDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MV8xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueAorICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0 M18xLnksIHQzXzEueCwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngs IHQzXzEueSwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSksIFBBUlRJQUwg Y291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJf MS54LCB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQzXzEueCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYl9tbF9wMSB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AxIHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNo IEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCAoUEFSVElBTCBzdW0o KHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDFfMgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDNf Mi55LCB0M18yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0 M18yLnksIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIu eCwgdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMi55LCB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWJfbWxfcDJfczEgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYl9tbF9wMl9zMSB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgKFBBUlRJQUwg c3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDFfMy54ID0gdDJfMy54KQorICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQxXzMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngs IHQzXzMueSwgdDNfMy54LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJ QUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMu eCwgdDNfMy55LCB0M18zLngsIFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSwgUEFSVElB TCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzMueSwgdDJfMy54LCB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfMy54ID0gdDNfMy54KQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AyX3MyIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWJfbWxfcDJfczIgdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIChQQVJU SUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzQueCA9IHQyXzQueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0MV80 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueAorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJf NC54LCB0M180LnksIHQzXzQueCwgKFBBUlRJQUwgc3VtKCh0Ml80LnkgKyB0M180LnkpKSksIChQ QVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml80LngsIHQzXzQueSwgdDNfNC54LCBQQVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSksIFBB UlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtl eTogdDJfNC54LCB0M180LnksIHQzXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Ml80LnksIHQyXzQueCwgdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzQueCA9IHQzXzQueCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0Ml80CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQzXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCAo UEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV81LnggPSB0Ml81LngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIg dDFfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV81LngKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyXzUueCwgdDNfNS55LCB0M181LngsIChQQVJUSUFMIHN1bSgodDJfNS55ICsgdDNfNS55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfNS54LCB0M181LnksIHQzXzUueCwgUEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkp LCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IHQyXzUueCwgdDNfNS55LCB0M181LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfNS55LCB0Ml81LngsIHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml81LnggPSB0M181LngpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDJfNQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LnksIHQyXzUueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNS55LCB0M181LngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMiB0M181CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgdDNfNS54CisoMTAyIHJv d3MpCisKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2Vy X2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpP SU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVS IEJZIHQzLnk7CisgeSAgfCAgIHN1bSAgIHwgY291bnQgCistLS0tKy0tLS0tLS0tLSstLS0tLS0t CisgIDAgfCAgICAgICAwIHwgMzU5MzcKKyAgMSB8ICAgNzg2MDggfCAzOTMwNAorICAyIHwgIDE1 NzIxNiB8IDM5MzA0CisgIDMgfCAgMjM1ODI0IHwgMzkzMDQKKyAgNCB8ICAzMTQ0MzIgfCAzOTMw NAorICA1IHwgIDM5MzA0MCB8IDM5MzA0CisgIDYgfCAgNDcxNjQ4IHwgMzkzMDQKKyAgNyB8ICA1 NTAyNTYgfCAzOTMwNAorICA4IHwgIDYyODg2NCB8IDM5MzA0CisgIDkgfCAgNzA3NDcyIHwgMzkz MDQKKyAxMCB8ICA3ODYwODAgfCAzOTMwNAorIDExIHwgIDc5MDYxNCB8IDM1OTM3CisgMTIgfCAg ODYyNDg4IHwgMzU5MzcKKyAxMyB8ICA5MzQzNjIgfCAzNTkzNworIDE0IHwgMTAwNjIzNiB8IDM1 OTM3CisgMTUgfCAxMDc4MTEwIHwgMzU5MzcKKyAxNiB8IDExNDk5ODQgfCAzNTkzNworIDE3IHwg MTIyMTg1OCB8IDM1OTM3CisgMTggfCAxMjkzNzMyIHwgMzU5MzcKKyAxOSB8IDEzNjU2MDYgfCAz NTkzNworIDIwIHwgMTQzNzQ4MCB8IDM1OTM3CisgMjEgfCAxNTA5MzU0IHwgMzU5MzcKKyAyMiB8 IDE1ODEyMjggfCAzNTkzNworIDIzIHwgMTY1MzEwMiB8IDM1OTM3CisgMjQgfCAxNzI0OTc2IHwg MzU5MzcKKyAyNSB8IDE3OTY4NTAgfCAzNTkzNworIDI2IHwgMTg2ODcyNCB8IDM1OTM3CisgMjcg fCAxOTQwNTk4IHwgMzU5MzcKKyAyOCB8IDIwMTI0NzIgfCAzNTkzNworIDI5IHwgMjA4NDM0NiB8 IDM1OTM3CisoMzAgcm93cykKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCA5MTA4OWFjMjE1Li42MzcwNTA0Mzc3 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dApAQCAtMTUxLDYgKzE1MSw3 IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtl ICdlbmFibGUlJzsKICBlbmFibGVfYXN5bmNfYXBwZW5kICAgICAgICAgICAgfCBvbgogIGVuYWJs ZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX2Rpc3RpbmN0X3Jlb3JkZXJp bmcgICAgIHwgb24KKyBlbmFibGVfZWFnZXJfYWdncmVnYXRlICAgICAgICAgfCBvZmYKICBlbmFi bGVfZ2F0aGVybWVyZ2UgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9ncm91cF9ieV9yZW9yZGVy aW5nICAgICB8IG9uCiAgZW5hYmxlX2hhc2hhZ2cgICAgICAgICAgICAgICAgIHwgb24KQEAgLTE3 MSw3ICsxNzIsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJl IG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwg b24KICBlbmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2Fu ICAgICAgICAgICAgICAgICB8IG9uCi0oMjMgcm93cykKKygyNCByb3dzKQogCiAtLSBUaGVyZSBh cmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5q ZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhp c3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2No ZWR1bGUKaW5kZXggMWVkZDllNDVlYi4uNGZjMjEwZTJlZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVs X3NjaGVkdWxlCkBAIC0xMTksNyArMTE5LDcgQEAgdGVzdDogcGxhbmNhY2hlIGxpbWl0IHBscGdz cWwgY29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNpb24gdHIKICMg VGhlIHN0YXRzIHRlc3QgcmVzZXRzIHN0YXRzLCBzbyBub3RoaW5nIGVsc2UgbmVlZGluZyBzdGF0 cyBhY2Nlc3MgY2FuIGJlIGluCiAjIHRoaXMgZ3JvdXAuCiAjIC0tLS0tLS0tLS0KLXRlc3Q6IHBh cnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGlu ZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNv bXByZXNzaW9uIG1lbW9pemUgc3RhdHMgcHJlZGljYXRlCit0ZXN0OiBwYXJ0aXRpb25fam9pbiBw YXJ0aXRpb25fcHJ1bmUgcmVsb3B0aW9ucyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2Fn Z3JlZ2F0ZSBwYXJ0aXRpb25faW5mbyB0dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lvbiBtZW1v aXplIHN0YXRzIHByZWRpY2F0ZSBlYWdlcl9hZ2dyZWdhdGUKIAogIyBldmVudF90cmlnZ2VyIGRl cGVuZHMgb24gY3JlYXRlX2FtIGFuZCBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoCiAjIGFu eSB0ZXN0IHRoYXQgcnVucyBEREwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Vh Z2VyX2FnZ3JlZ2F0ZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjQwNTBlNGRmNDQKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3Fs CkBAIC0wLDAgKzEsMTkyIEBACistLQorLS0gRUFHRVIgQUdHUkVHQVRJT04KKy0tIFRlc3Qgd2Ug Y2FuIHB1c2ggYWdncmVnYXRpb24gZG93biBiZWxvdyBqb2luCistLQorCistLSBFbmFibGUgZWFn ZXIgYWdncmVnYXRpb24sIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxl X2VhZ2VyX2FnZ3JlZ2F0ZSBUTyBvbjsKKworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190MSAoYSBp bnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190 MiAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JFQVRFIFRBQkxFIGVhZ2Vy X2FnZ190MyAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworCitJTlNFUlQgSU5U TyBlYWdlcl9hZ2dfdDEgU0VMRUNUIGksIGksIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MClpOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QyIFNFTEVDVCBpLCBpJTEwLCBpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MyBTRUxFQ1Qg aSUxMCwgaSUxMCwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CisKK0FOQUxZWkUg ZWFnZXJfYWdnX3QxOworQU5BTFlaRSBlYWdlcl9hZ2dfdDI7CitBTkFMWVpFIGVhZ2VyX2FnZ190 MzsKKworCistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGJhc2UgcmVsCistLQor CistLSBQZXJmb3JtIHNjYW4gb2YgYSB0YWJsZSwgYWdncmVnYXRlIHRoZSByZXN1bHQsIGpvaW4g aXQgdG8gdGhlIG90aGVyIHRhYmxlCistLSBhbmQgZmluYWxpemUgdGhlIGFnZ3JlZ2F0aW9uLgor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9N IGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9V UCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFn ZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZ IHQxLmEgT1JERVIgQlkgdDEuYTsKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBh Z2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKKworRVhQTEFJTiAoVkVSQk9T RSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0 MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVS IEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpP SU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkg dDEuYTsKKworUkVTRVQgZW5hYmxlX2hhc2hhZ2c7CisKKworLS0KKy0tIFRlc3QgZWFnZXIgYWdn cmVnYXRpb24gb3ZlciBqb2luIHJlbAorLS0KKworLS0gUGVyZm9ybSBqb2luIG9mIHRhYmxlcywg YWdncmVnYXRlIHRoZSByZXN1bHQsIGpvaW4gaXQgdG8gdGhlIG90aGVyIHRhYmxlCistLSBhbmQg ZmluYWxpemUgdGhlIGFnZ3JlZ2F0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIu YSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0 Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04g dDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkg dDEuYSBPUkRFUiBCWSB0MS5hOworCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0aW5nIGFn Z3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworCitFWFBMQUlOIChWRVJCT1NF LCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2Fn Z190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2Fn Z190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2Vy X2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0g dDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisKK1JFU0VUIGVuYWJsZV9oYXNoYWdn OworCisKKy0tCistLSBUZXN0IHRoYXQgZWFnZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIG91dGVy IGpvaW4KKy0tCisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW4gYmUgcHVzaGVkIGRvd24gdG8g dGhlIG5vbi1udWxsYWJsZSBzaWRlCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJf YWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NF TEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklHSFQgSk9JTiBlYWdl cl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOwor CistLSBFbnN1cmUgYWdncmVnYXRpb24gY2Fubm90IGJlIHB1c2hlZCBkb3duIHRvIHRoZSBudWxs YWJsZSBzaWRlCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIuYiwgYXZn KHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04g dDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRFUiBCWSB0Mi5iOworU0VMRUNUIHQyLmIsIGF2 Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBMRUZUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9O IHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQyLmIgT1JERVIgQlkgdDIuYjsKKworCistLQorLS0gVGVz dCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9uIHdvcmtzIGZvciBwYXJhbGxlbCBwbGFucworLS0KKwor U0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q9MDsKK1NFVCBwYXJhbGxlbF90dXBsZV9jb3N0PTA7CitT RVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZT0wOworU0VUIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXI9NDsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU IHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEu YSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9O IHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworUkVTRVQgcGFyYWxs ZWxfc2V0dXBfY29zdDsKK1JFU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q7CitSRVNFVCBtaW5fcGFy YWxsZWxfdGFibGVfc2Nhbl9zaXplOworUkVTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlcjsKKworCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MTsKK0RST1AgVEFCTEUgZWFnZXJfYWdn X3QyOworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDM7CisKKworLS0KKy0tIFRlc3QgZWFnZXIgYWdn cmVnYXRpb24gZm9yIHBhcnRpdGlvbndpc2Ugam9pbgorLS0KKworLS0gRW5hYmxlIHBhcnRpdGlv bndpc2UgYWdncmVnYXRlLCB3aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJs ZV9wYXJ0aXRpb253aXNlX2FnZ3JlZ2F0ZSBUTyB0cnVlOworLS0gRW5hYmxlIHBhcnRpdGlvbndp c2Ugam9pbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0 aW9ud2lzZV9qb2luIFRPIHRydWU7CisKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMSh4IGlu dCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2df dGFiMV9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgwKSBU TyAoMTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AyIFBBUlRJVElPTiBPRiBlYWdl cl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWIxX3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZS T00gKDIwKSBUTyAoMzApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyKHggaW50LCB5IGlu dCkgUEFSVElUSU9OIEJZIFJBTkdFKHkpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3Ax IFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7 CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190 YWIyIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYjJfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMjAp IFRPICgzMCk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMSBTRUxFQ1QgaSAlIDMwLCBpICUg MjAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAyKSBpOworSU5TRVJUIElOVE8gZWFnZXJf YWdnX3RhYjIgU0VMRUNUIGkgJSAyMCwgaSAlIDMwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsIDI5 OSwgMykgaTsKKworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiMTsKK0FOQUxZWkUgZWFnZXJfYWdnX3Rh YjI7CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIG1hdGNoZXM7IGZ1bGwgYWdncmVnYXRpb24g aXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3Rh YjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQxLngg T1JERVIgQlkgdDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFn ZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQ IEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1hdGNo aW5nIGtleQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1bSh0 MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIg V0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55OworU0VMRUNUIHQy LnksIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdn X3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55Owor CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlhbCBhZ2dyZWdh dGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUIHQyLngsIHN1bSh0MS54KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkg dDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTAgT1JERVIgQlkgdDIueDsKK1NFTEVDVCB0Mi54LCBz dW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIy IHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEw IE9SREVSIEJZIHQyLng7CisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3ZlciBq b2luIHJlbAorLS0gZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZG KQorU0VMRUNUIHQxLngsIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBK T0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEg dDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworU0VMRUNUIHQx LngsIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lOIGVhZ2VyX2Fn Z190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMgT04gdDIueCA9 IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworCistLSBwYXJ0aWFsIGFnZ3JlZ2F0 aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKQorU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0 MSBKT0lOIGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3Rh YjEgdDMgT04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworU0VMRUNU IHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lOIGVhZ2Vy X2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMgT04gdDIu eCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworUkVTRVQgZW5hYmxlX2hhc2hh Z2c7CisKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190 YWIyOworCisKKy0tCistLSBUZXN0IHdpdGggbXVsdGktbGV2ZWwgcGFydGl0aW9uaW5nIHNjaGVt ZQorLS0KK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sKHggaW50LCB5IGludCkgUEFSVElU SU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDEgUEFSVElU SU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJf bWwgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWJfbWxfcDJfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDIgRk9S IFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21s X3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRP ICgzMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJf bWxfcDNfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9N ICgyMCkgVE8gKDI1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AzX3MyIFBBUlRJ VElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjUpIFRPICgzMCk7 CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiX21sIFNFTEVDVCBpICUgMzAsIGkgJSAzMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworCitBTkFMWVpFIGVhZ2VyX2FnZ190YWJfbWw7 CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIG1hdGNoZXM7IGZ1bGwgYWdncmVnYXRpb24gaXMg cGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0MS54LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9t bCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEu eCBPUkRFUiBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBl YWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIu eCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNl IGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFj aCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueSwg c3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9h Z2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsK K1NFTEVDVCB0MS55LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0 MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBP UkRFUiBCWSB0MS55OworCistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9p biByZWwKKy0tIGZ1bGwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQx Lng7CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9h Z2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lO IGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBC WSB0MS54OworCistLSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpCitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdl cl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBK T0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRF UiBCWSB0My55OworU0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00g ZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQy LnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkg T1JERVIgQlkgdDMueTsKKworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBlYjkzZGViZTEwLi5hZjU1MWRhMTNlIDEwMDY0NAotLS0gYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdApAQCAtNDEsNiArNDEsNyBAQCBBZnRlclRyaWdnZXJzVGFibGVEYXRhCiBB ZnRlclRyaWdnZXJzVHJhbnNEYXRhCiBBZ2cKIEFnZ0NsYXVzZUNvc3RzCitBZ2dDbGF1c2VJbmZv CiBBZ2dJbmZvCiBBZ2dQYXRoCiBBZ2dTcGxpdApAQCAtMTA2Niw2ICsxMDY3LDcgQEAgR3JhbnRU YXJnZXRUeXBlCiBHcm91cAogR3JvdXBCeU9yZGVyaW5nCiBHcm91cENsYXVzZQorR3JvdXBFeHBy SW5mbwogR3JvdXBQYXRoCiBHcm91cFBhdGhFeHRyYURhdGEKIEdyb3VwUmVzdWx0UGF0aApAQCAt MTI5OCw3ICsxMzAwLDYgQEAgSm9pbgogSm9pbkNvc3RXb3Jrc3BhY2UKIEpvaW5Eb21haW4KIEpv aW5FeHByCi1Kb2luSGFzaEVudHJ5CiBKb2luUGF0aAogSm9pblBhdGhFeHRyYURhdGEKIEpvaW5T dGF0ZQpAQCAtMjM4NCwxMyArMjM4NSwxNyBAQCBSZWluZGV4T2JqZWN0VHlwZQogUmVpbmRleFBh cmFtcwogUmVpbmRleFN0bXQKIFJlaW5kZXhUeXBlCitSZWxBZ2dJbmZvCiBSZWxGaWxlTG9jYXRv cgogUmVsRmlsZUxvY2F0b3JCYWNrZW5kCiBSZWxGaWxlTnVtYmVyCitSZWxIYXNoRW50cnkKIFJl bElkQ2FjaGVFbnQKIFJlbElkVG9UeXBlSWRDYWNoZUVudHJ5CiBSZWxJbmZvCiBSZWxJbmZvQXJy CitSZWxJbmZvTGlzdAorUmVsSW5mb0xpc3RJbmZvCiBSZWxNYXBGaWxlCiBSZWxNYXBwaW5nCiBS ZWxPcHRJbmZvCi0tIAoyLjQzLjAKCg== --0000000000004cbe01062b8cdef5--