Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAsuJ-0000fp-LW for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Dec 2022 13:25:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pAsuH-0006UF-3M for pgsql-hackers@arkaria.postgresql.org; Thu, 29 Dec 2022 13:25:13 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAsuF-0006U5-QQ for pgsql-hackers@lists.postgresql.org; Thu, 29 Dec 2022 13:25:12 +0000 Received: from mail-ua1-x934.google.com ([2607:f8b0:4864:20::934]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pAsuB-0002Yp-Pg for pgsql-hackers@lists.postgresql.org; Thu, 29 Dec 2022 13:25:10 +0000 Received: by mail-ua1-x934.google.com with SMTP id u3so884741uae.0 for ; Thu, 29 Dec 2022 05:25:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3hZkcPousBRdyyyaMUMqJrdyxtQn56Ujy3DXInGWQIw=; b=pHZPr+U+S9e5lLip3zNZSiT3DtdCzh96B8Tp5/8MD91h2D01W8iTP6XP831QEQ3yga T/OaROFo36c8rwFPYAjXcbwzTjFkN4oCLnPotm0kCBZsZi6OkAxVnnpmxUYeuokmiB9t kQ2MPF+acYiTSt9f0HscfNXTuWvhjbkl+pI4b8KcCrf/pDQiB9tBJPfrEgsxkWSBRMMY QqWVZOLsrAZDdKnVuigzKEA0VhUEgax9lvpid9/+e+CyyDk4ZyJHpowf/ZkgErX9JaNg tQpMDQ/4lWSCKtAt2N5JRkcVE44tpf3VNahak5LXQRXlrz8ZW5QS8oiVjNkxRFplI05C uhug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=3hZkcPousBRdyyyaMUMqJrdyxtQn56Ujy3DXInGWQIw=; b=B9aNzcRzg1baWzvC7W7DobHsnrRLyzO5kSYCBrhREy5RItytV4E6JOtKZJgP5KFuc1 Wvgooq1C2UFIqJELWG35u4m9zXa4qjf64fD4Veri7AeckiSnJLOK96bCZYJwRkRzYkAZ UYzqRNYQrXRsW8jzNNSsfWRjZFMZIJgRzKtXPAWOi/PjhNnKSp6tiJvHaj/Ige/p3wpm 3XCbz7+aO3VQZO1PHxLut0gm1mOtoWhZCrUmarKC6++tIePYI1oYzx7uXPHXcJi8dckw qlU47hOjEORvz66cB+jS5WyV8+MYzBK91vUBuZG/2nNIApLqmTBXSgKsZGWLFAFmoKmy 4s2w== X-Gm-Message-State: AFqh2krtarb7v0LclTetAUMZKruhJjPBEWXAP5GDsi9UYNbb0RFPWQvm 9eCNWvcXfXwCigsXoC9VyvU3kE4nmRTpoGIfkrg= X-Google-Smtp-Source: AMrXdXuqLjjBQl6v3kQGvur4e785z0JMoSwfUaVIERppPZHFV2/O9Dr5C4yGt0VBFAphjrTXOn7HVzMUfaLzk01Z6vA= X-Received: by 2002:ab0:26ca:0:b0:419:da15:be26 with SMTP id b10-20020ab026ca000000b00419da15be26mr2717132uap.115.1672320306398; Thu, 29 Dec 2022 05:25:06 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Amit Kapila Date: Thu, 29 Dec 2022 18:54:53 +0530 Message-ID: Subject: Re: Perform streaming logical transactions by background workers and parallel apply To: "wangw.fnst@fujitsu.com" Cc: "houzj.fnst@fujitsu.com" , Peter Smith , Masahiko Sawada , Dilip Kumar , "shiy.fnst@fujitsu.com" , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000d0710705f0f769de" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d0710705f0f769de Content-Type: text/plain; charset="UTF-8" On Wed, Dec 28, 2022 at 10:09 AM wangw.fnst@fujitsu.com wrote: > I have made a number of changes in the comments, removed extra list copy in pa_launch_parallel_worker(), and removed unnecessary include in worker. Please see the attached and let me know what you think. Feel free to rebase and send the remaining patches. -- With Regards, Amit Kapila. --000000000000d0710705f0f769de Content-Type: application/octet-stream; name="v70-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Disposition: attachment; filename="v70-0001-Perform-streaming-logical-transactions-by-parall.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lc93xsj10 RnJvbSBhZDkyOTI2NGJjM2YwNDk5ZDlkZTEyYzBiMTcwZjJmOTYyYjEwNDg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI IHY3MF0gUGVyZm9ybSBzdHJlYW1pbmcgbG9naWNhbCB0cmFuc2FjdGlvbnMgYnkgcGFyYWxsZWwK IHdvcmtlcnMKCkN1cnJlbnRseSwgZm9yIGxhcmdlIHRyYW5zYWN0aW9ucywgdGhlIHB1Ymxpc2hl ciBzZW5kcyB0aGUgZGF0YSBpbiBtdWx0aXBsZQpzdHJlYW1zIChjaGFuZ2VzIGRpdmlkZWQgaW50 byBjaHVua3MgZGVwZW5kaW5nIHVwb24gbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSksCmFuZCB0 aGVuIG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseSB3b3JrZXIgd3JpdGVzIHRoZSBj aGFuZ2VzIGludG8KdGVtcG9yYXJ5IGZpbGVzIGFuZCBvbmNlIGl0IHJlY2VpdmVzIHRoZSBjb21t aXQsIGl0IHJlYWRzIGZyb20gdGhvc2UgZmlsZXMgYW5kCmFwcGxpZXMgdGhlIGVudGlyZSB0cmFu c2FjdGlvbi4gVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc3VjaAp0cmFuc2FjdGlvbnMs IHdlIGNhbiBpbnN0ZWFkIGFsbG93IHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgcGFyYWxsZWwgd29y a2Vycy4KCkluIHRoaXMgYXBwcm9hY2gsIHdlIGFzc2lnbiBhIG5ldyBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgKGlmIGF2YWlsYWJsZSkgYXMgc29vbgphcyB0aGUgeGFjdCdzIGZpcnN0IHN0cmVhbSBp cyByZWNlaXZlZCBhbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5kCmNoYW5nZXMg dG8gdGhpcyBuZXcgd29ya2VyIHZpYSBzaGFyZWQgbWVtb3J5LiBUaGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIHdpbGwKZGlyZWN0bHkgYXBwbHkgdGhlIGNoYW5nZSBpbnN0ZWFkIG9mIHdyaXRpbmcg aXQgdG8gdGVtcG9yYXJ5IGZpbGVzLiBIb3dldmVyLCBpZgp0aGUgbGVhZGVyIGFwcGx5IHdvcmtl ciB0aW1lcyBvdXQgd2hpbGUgYXR0ZW1wdGluZyB0byBzZW5kIGEgbWVzc2FnZSB0byB0aGUKcGFy YWxsZWwgYXBwbHkgd29ya2VyLCBpdCB3aWxsIHN3aXRjaCB0byAicGFydGlhbCBzZXJpYWxpemUi IG1vZGUgLSAgaW4gdGhpcwptb2RlIHRoZSBsZWFkZXIgc2VyaWFsaXplcyBhbGwgcmVtYWluaW5n IGNoYW5nZXMgdG8gYSBmaWxlIGFuZCBub3RpZmllcyB0aGUKcGFyYWxsZWwgYXBwbHkgd29ya2Vy cyB0byByZWFkIGFuZCBhcHBseSB0aGVtIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLiBX ZQprZWVwIHRoaXMgcGFyYWxsZWwgYXBwbHkgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24g Y29tbWl0IGlzIHJlY2VpdmVkIGFuZAphbHNvIHdhaXQgZm9yIHRoZSB3b3JrZXIgdG8gZmluaXNo IGF0IGNvbW1pdC4gVGhpcyBwcmVzZXJ2ZXMgY29tbWl0IG9yZGVyaW5nCmFuZCBhdm9pZHMgd3Jp dGluZyB0byBhbmQgcmVhZGluZyBmcm9tIGZpbGVzIGluIG1vc3QgY2FzZXMuIFdlIHN0aWxsIG5l ZWQgdG8Kc3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyIGF2YWlsYWJsZS4KClRoaXMgcGF0Y2gg YWxzbyBleHRlbmRzIHRoZSBTVUJTQ1JJUFRJT04gJ3N0cmVhbWluZycgcGFyYW1ldGVyIHNvIHRo YXQgdGhlIHVzZXIKY2FuIGNvbnRyb2wgd2hldGhlciB0byBhcHBseSB0aGUgc3RyZWFtaW5nIHRy YW5zYWN0aW9uIGluIGEgcGFyYWxsZWwgYXBwbHkKd29ya2VyIG9yIHNwaWxsIHRoZSBjaGFuZ2Ug dG8gZGlzay4gVGhlIHVzZXIgY2FuIHNldCB0aGUgc3RyZWFtaW5nIHBhcmFtZXRlciB0bwonb24v b2ZmJywgJ3BhcmFsbGVsJy4gVGhlIHBhcmFtZXRlciB2YWx1ZSAncGFyYWxsZWwnIG1lYW5zIHRo ZSBzdHJlYW1pbmcgd2lsbApiZSBhcHBsaWVkIHZpYSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciwg aWYgYXZhaWxhYmxlLiBUaGUgcGFyYW1ldGVyIHZhbHVlCidvbicgbWVhbnMgdGhlIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHNwaWxsZWQgdG8gZGlzay4gVGhlIGRlZmF1bHQgdmFsdWUK aXMgJ29mZicgKHNhbWUgYXMgY3VycmVudCBiZWhhdmlvdXIpLgoKSW4gYWRkaXRpb24sIHRoZSBw YXRjaCBleHRlbmRzIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIFNUUkVBTV9BQk9SVCBtZXNzYWdl IHNvCnRoYXQgYWJvcnRfdGltZSBhbmQgYWJvcnRfbHNuIGNhbiBhbHNvIGJlIHNlbnQgd2hpY2gg Y2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZQpyZXBsaWNhdGlvbiBvcmlnaW4gaW4gcGFyYWxsZWwg YXBwbHkgd29ya2VyIHdoZW4gdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpcwphYm9ydGVkLiBC ZWNhdXNlIHRoaXMgbWVzc2FnZSBleHRlbnNpb24gaXMgbmVlZGVkIHRvIHN1cHBvcnQgcGFyYWxs ZWwKc3RyZWFtaW5nLCBwYXJhbGxlbCBzdHJlYW1pbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHVi bGljYXRpb25zIG9uIHNlcnZlcnMgPApQRzE2LgoKTm90ZTogU2luY2UgdGhlIGZpZWxkICdzdWJz dHJlYW0nIG9mIGNhdGFsb2cgJ3BnX3N1YnNjcmlwdGlvbicgaGFzIGJlZW4KZXhwYW5kZWQsIHdl IG5lZWQgYnVtcCBjYXRhbG9nIHZlcnNpb24uCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNn bWwgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s ICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCArLQogZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVw bGljYXRpb24uc2dtbCAgICAgICAgIHwgICAyMiArLQogZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcu c2dtbCAgICAgICAgICAgICAgICAgIHwgICAgNSArCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dt bCAgICAgICAgICAgICAgICAgICAgfCAgIDI5ICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9z dWJzY3JpcHRpb24uc2dtbCAgICAgfCAgIDI0ICstCiBkb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdz LnNnbWwgICAgICAgICAgICAgICAgfCAgICA1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94YWN0LmMgICAgICAgICAgICAgfCAgIDI0ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJz Y3JpcHRpb25jbWRzLmMgICAgICAgfCAgIDY3ICstCiBzcmMvYmFja2VuZC9saWJwcS9wcW1xLmMg ICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d29ya2VyLmMgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50 ZXJydXB0LmMgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9saWJwcXdhbHJlY2VpdmVyL2xpYnBx d2FscmVjZWl2ZXIuYyAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvTWFrZWZpbGUgICAgICB8ICAgIDEgKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jIHwgMTYxOSArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jICAgIHwgIDIyMCArKy0KIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICAgIHwgICAyNiArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgIHwgICAzNyArLQogLi4uL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyAgIHwgICAyNSArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMTM3NCArKysrKysrKysrKy0tLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyAgIHwgICAyMiArLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgIHwgICAgNCArCiBz cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1nci5jICAgICAgICAgICAgICAgfCAgIDQ2ICsKIHNy Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jICAgICAgIHwgICAgNiArCiBzcmMv YmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMgICAgICAgICAgICAgfCAgICA1ICstCiBzcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICAgICAgfCAgIDEyICsKIHNyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgIDEgKwogc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArLQogc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCAgICAgICAgIHwgICAyMSArLQogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oICAgICAgIHwgICAgMiArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCAgICAgfCAgICAxICsKIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICB8ICAgMjggKy0KIHNyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCAgICAgICB8ICAgIDggKwogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3JpZ2luLmggICAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oICAgICAgIHwgICAgNCArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCAgICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICAgIHwgIDIyMiArKy0KIHNyYy9pbmNs dWRlL3N0b3JhZ2UvbG1nci5oICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwogc3JjL2luY2x1 ZGUvc3RvcmFnZS9sb2NrLmggICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQogc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVk ZS91dGlscy93YWl0X2V2ZW50LmggICAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dCAgICB8ICAgNDYgKy0KIHNyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwgICAgICAgICB8ICAgIDYgKy0KIHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwgICAgICAgICB8ICAyNzQgKystCiBzcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgfCAgMTMwICstCiBzcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbCAgICAgfCAgICAzICsKIC4uLi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgICAgICAgICB8ICAyMjAgKystCiAuLi4vdC8wMTlf c3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsICAgICAgICAgfCAgICAzICsKIC4uLi9zdWJzY3Jp cHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbCAgICB8ICAgIDIgKwogLi4uL3N1YnNjcmlw dGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwgICAgIHwgIDUyMyArKystLS0KIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgIDcgKwogNTcgZmlsZXMg Y2hhbmdlZCwgNDQ1OCBpbnNlcnRpb25zKCspLCA3NTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBhcmFsbGVsd29y a2VyLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDkzMTZiODExYWMuLmMxZTQwNDgwNTQgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9n cy5zZ21sCkBAIC03OTEzLDExICs3OTEzLDE2IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxl PiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAK ICAgICAgPHJvdz4KICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVh bTwvc3RydWN0ZmllbGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZpZWxkPnN1 YnN0cmVhbTwvc3RydWN0ZmllbGQ+IDx0eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAg ICAgICA8cGFyYT4KLSAgICAgICBJZiB0cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYWxsb3cg c3RyZWFtaW5nIG9mIGluLXByb2dyZXNzCi0gICAgICAgdHJhbnNhY3Rpb25zCisgICAgICAgQ29u dHJvbHMgaG93IHRvIGhhbmRsZSB0aGUgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0 aW9uczoKKyAgICAgICA8bGl0ZXJhbD5mPC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVhbWluZyBv ZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMsCisgICAgICAgPGxpdGVyYWw+dDwvbGl0ZXJhbD4g PSBzcGlsbCB0aGUgY2hhbmdlcyBvZiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgdG8KKyAgICAg ICBkaXNrIGFuZCBhcHBseSBhdCBvbmNlIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQgb24gdGhlCisgICAgICAgcHVibGlzaGVyIGFuZCByZWNlaXZlZCBieSB0aGUgc3Vic2NyaWJl ciwKKyAgICAgICA8bGl0ZXJhbD5wPC9saXRlcmFsPiA9IGFwcGx5IGNoYW5nZXMgZGlyZWN0bHkg dXNpbmcgYSBwYXJhbGxlbCBhcHBseQorICAgICAgIHdvcmtlciBpZiBhdmFpbGFibGUgKHNhbWUg YXMgJ3QnIGlmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUpCiAgICAgICA8L3BhcmE+PC9lbnRyeT4K ICAgICAgPC9yb3c+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAzMDcxYzhlYWNlLi5mNDc2Y2M0ZjQ1IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCkBAIC00OTY4LDcgKzQ5NjgsOCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm51bV9zeW5jPC9yZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAg ICAgPGxpc3RpdGVtPgogICAgICAgIDxwYXJhPgogICAgICAgICBTcGVjaWZpZXMgbWF4aW11bSBu dW1iZXIgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXJzLiBUaGlzIGluY2x1ZGVzCi0gICAg ICAgIGJvdGggYXBwbHkgd29ya2VycyBhbmQgdGFibGUgc3luY2hyb25pemF0aW9uIHdvcmtlcnMu CisgICAgICAgIGxlYWRlciBhcHBseSB3b3JrZXJzLCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLCBh bmQgdGFibGUgc3luY2hyb25pemF0aW9uCisgICAgICAgIHdvcmtlcnMuCiAgICAgICAgPC9wYXJh PgogICAgICAgIDxwYXJhPgogICAgICAgICBMb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlcnMgYXJl IHRha2VuIGZyb20gdGhlIHBvb2wgZGVmaW5lZCBieQpAQCAtNTAwOCw2ICs1MDA5LDMxIEBAIEFO WSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAo IDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3Rl bnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtbWF4LXBhcmFsbGVsLWFwcGx5LXdv cmtlcnMtcGVyLXN1YnNjcmlwdGlvbiIgeHJlZmxhYmVsPSJtYXhfcGFyYWxsZWxfYXBwbHlfd29y a2Vyc19wZXJfc3Vic2NyaXB0aW9uIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPm1heF9wYXJhbGxl bF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2Vy PC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bWF4 X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjwvdmFybmFtZT4gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgTWF4aW11bSBu dW1iZXIgb2YgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBwZXIgc3Vic2NyaXB0aW9uLiBUaGlzCisg ICAgICAgIHBhcmFtZXRlciBjb250cm9scyB0aGUgYW1vdW50IG9mIHBhcmFsbGVsaXNtIGZvciBz dHJlYW1pbmcgb2YKKyAgICAgICAgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHdpdGggc3Vic2Ny aXB0aW9uIHBhcmFtZXRlcgorICAgICAgICA8bGl0ZXJhbD5zdHJlYW1pbmcgPSBwYXJhbGxlbDwv bGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcGFy YWxsZWwgYXBwbHkgd29ya2VycyBhcmUgdGFrZW4gZnJvbSB0aGUgcG9vbCBkZWZpbmVkIGJ5Cisg ICAgICAgIDx2YXJuYW1lPm1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM8L3Zhcm5hbWU+ LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlZmF1bHQgdmFs dWUgaXMgMi4gVGhpcyBwYXJhbWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGluIHRoZQorICAgICAgICA8 ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVy IGNvbW1hbmQKKyAgICAgICAgbGluZS4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L3Nl Y3QyPgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21s IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCA3YjliYjAwZTVh Li41NGY0OGJlODdmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlv bi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE1 MDEsNiArMTUwMSwxNiBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVw bGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgbWlnaHQgbm90IHZp b2xhdGUgYW55IGNvbnN0cmFpbnQuICBUaGlzIGNhbiBlYXNpbHkgbWFrZSB0aGUgc3Vic2NyaWJl cgogICAgaW5jb25zaXN0ZW50LgogICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIHRoZSBz dHJlYW1pbmcgbW9kZSBpcyA8bGl0ZXJhbD5wYXJhbGxlbDwvbGl0ZXJhbD4sIHRoZSBmaW5pc2gg TFNOIG9mCisgICBmYWlsZWQgdHJhbnNhY3Rpb25zIG1heSBub3QgYmUgbG9nZ2VkLiBJbiB0aGF0 IGNhc2UsIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8KKyAgIGNoYW5nZSB0aGUgc3RyZWFtaW5nIG1v ZGUgdG8gPGxpdGVyYWw+b248L2xpdGVyYWw+IG9yIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4gYW5k CisgICBjYXVzZSB0aGUgc2FtZSBjb25mbGljdHMgYWdhaW4gc28gdGhlIGZpbmlzaCBMU04gb2Yg dGhlIGZhaWxlZCB0cmFuc2FjdGlvbiB3aWxsCisgICBiZSB3cml0dGVuIHRvIHRoZSBzZXJ2ZXIg bG9nLiBGb3IgdGhlIHVzYWdlIG9mIGZpbmlzaCBMU04sIHBsZWFzZSByZWZlciB0byA8bGluawor ICAgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uIj48Y29tbWFuZD5BTFRFUiBTVUJTQ1JJ UFRJT04gLi4uCisgICBTS0lQPC9jb21tYW5kPjwvbGluaz4uCisgIDwvcGFyYT4KICA8L3NlY3Qx PgogCiAgPHNlY3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9uLXJlc3RyaWN0aW9ucyI+CkBAIC0x ODA5LDggKzE4MTksOSBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVw bGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogCiAgICA8cGFyYT4KICAg ICA8bGluayBsaW5rZW5kPSJndWMtbWF4LWxvZ2ljYWwtcmVwbGljYXRpb24td29ya2VycyI+PHZh cm5hbWU+bWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczwvdmFybmFtZT48L2xpbms+Ci0g ICAgbXVzdCBiZSBzZXQgdG8gYXQgbGVhc3QgdGhlIG51bWJlciBvZiBzdWJzY3JpcHRpb25zIChm b3IgYXBwbHkgd29ya2VycyksIHBsdXMKLSAgICBzb21lIHJlc2VydmUgZm9yIHRoZSB0YWJsZSBz eW5jaHJvbml6YXRpb24gd29ya2Vycy4KKyAgICBtdXN0IGJlIHNldCB0byBhdCBsZWFzdCB0aGUg bnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgKGZvciBsZWFkZXIgYXBwbHkKKyAgICB3b3JrZXJzKSwg cGx1cyBzb21lIHJlc2VydmUgZm9yIHRoZSB0YWJsZSBzeW5jaHJvbml6YXRpb24gd29ya2VycyBh bmQKKyAgICBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgogICAgPC9wYXJhPgogCiAgICA8cGFyYT4K QEAgLTE4MjcsNiArMTgzOCwxMyBAQCBDT05URVhUOiAgcHJvY2Vzc2luZyByZW1vdGUgZGF0YSBm b3IgcmVwbGljYXRpb24gb3JpZ2luICJwZ18xNjM5NSIgZHVyaW5nICJJTlNFUgogICAgICBzdWJz Y3JpcHRpb24gaW5pdGlhbGl6YXRpb24gb3Igd2hlbiBuZXcgdGFibGVzIGFyZSBhZGRlZC4KICAg IDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAgPGxpbmsgbGlua2VuZD0iZ3VjLW1heC1wYXJhbGxl bC1hcHBseS13b3JrZXJzLXBlci1zdWJzY3JpcHRpb24iPjx2YXJuYW1lPm1heF9wYXJhbGxlbF9h cHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb248L3Zhcm5hbWU+PC9saW5rPgorICAgICBjb250 cm9scyB0aGUgYW1vdW50IG9mIHBhcmFsbGVsaXNtIGZvciBzdHJlYW1pbmcgb2YgaW4tcHJvZ3Jl c3MKKyAgICAgdHJhbnNhY3Rpb25zIHdpdGggc3Vic2NyaXB0aW9uIHBhcmFtZXRlcgorICAgICA8 bGl0ZXJhbD5zdHJlYW1pbmcgPSBwYXJhbGxlbDwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisKICAg IDxwYXJhPgogICAgIExvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VycyBhcmUgYWxzbyBhZmZlY3Rl ZCBieQogICAgIDxsaW5rIGxpbmtlbmQ9Imd1Yy13YWwtcmVjZWl2ZXItdGltZW91dCI+PHZhcm5h bWU+d2FsX3JlY2VpdmVyX3RpbWVvdXQ8L3Zhcm5hbWU+PC9saW5rPiwKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21s CmluZGV4IDM2M2IxODNlNWYuLmVhZmVlYWRmNDcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9t b25pdG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtMTg1 MSw2ICsxODUxLDExIEBAIHBvc3RncmVzICAgMjcwOTMgIDAuMCAgMC4wICAzMDA5NiAgMjc1MiA/ ICAgICAgICBTcyAgIDExOjM0ICAgMDowMCBwb3N0Z3Jlczogc2VyCiAgICAgICA8ZW50cnk+PGxp dGVyYWw+YWR2aXNvcnk8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT5XYWl0aW5nIHRv IGFjcXVpcmUgYW4gYWR2aXNvcnkgdXNlciBsb2NrLjwvZW50cnk+CiAgICAgIDwvcm93PgorICAg ICA8cm93PgorICAgICAgPGVudHJ5PjxsaXRlcmFsPmFwcGx5dHJhbnNhY3Rpb248L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgIDxlbnRyeT5XYWl0aW5nIHRvIGFjcXVpcmUgYSBsb2NrIG9uIGEgcmVt b3RlIHRyYW5zYWN0aW9uIGJlaW5nIGFwcGxpZWQKKyAgICAgIGJ5IGEgbG9naWNhbCByZXBsaWNh dGlvbiBzdWJzY3JpYmVyLjwvZW50cnk+CisgICAgIDwvcm93PgogICAgICA8cm93PgogICAgICAg PGVudHJ5PjxsaXRlcmFsPmV4dGVuZDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5Pldh aXRpbmcgdG8gZXh0ZW5kIGEgcmVsYXRpb24uPC9lbnRyeT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9wcm90b2NvbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKaW5kZXggMDMz MTJlMDdlMi4uNDM5ZWY2NzVmMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNnbWwKQEAgLTMxMDMsNyArMzEwMyw3IEBA IHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlvbj1kYXRhYmFzZSIgLWMgIklERU5USUZZ X1NZU1RFTTsiCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgogICAgICAgIFByb3RvY29s IHZlcnNpb24uIEN1cnJlbnRseSB2ZXJzaW9ucyA8bGl0ZXJhbD4xPC9saXRlcmFsPiwgPGxpdGVy YWw+MjwvbGl0ZXJhbD4sCi0gICAgICAgYW5kIDxsaXRlcmFsPjM8L2xpdGVyYWw+IGFyZSBzdXBw b3J0ZWQuCisgICAgICAgPGxpdGVyYWw+MzwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD40PC9saXRl cmFsPiBhcmUgc3VwcG9ydGVkLgogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CiAgICAgICAg VmVyc2lvbiA8bGl0ZXJhbD4yPC9saXRlcmFsPiBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2VydmVy IHZlcnNpb24gMTQKQEAgLTMxMTMsNiArMzExMywxMSBAQCBwc3FsICJkYm5hbWU9cG9zdGdyZXMg cmVwbGljYXRpb249ZGF0YWJhc2UiIC1jICJJREVOVElGWV9TWVNURU07IgogICAgICAgIFZlcnNp b24gPGxpdGVyYWw+MzwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNlcnZlciB2ZXJz aW9uIDE1CiAgICAgICAgYW5kIGFib3ZlLCBhbmQgaXQgYWxsb3dzIHN0cmVhbWluZyBvZiB0d28t cGhhc2UgY29tbWl0cy4KICAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFZlcnNp b24gPGxpdGVyYWw+NDwvbGl0ZXJhbD4gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNlcnZlciB2ZXJz aW9uIDE2CisgICAgICAgYW5kIGFib3ZlLCBhbmQgaXQgYWxsb3dzIHN0cmVhbXMgb2YgbGFyZ2Ug aW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIHRvCisgICAgICAgYmUgYXBwbGllZCBpbiBwYXJhbGxl bC4KKyAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxpc3RlbnRyeT4K IApAQCAtNjg4Myw2ICs2ODg4LDI4IEBAIHBzcWwgImRibmFtZT1wb3N0Z3JlcyByZXBsaWNhdGlv bj1kYXRhYmFzZSIgLWMgIklERU5USUZZX1NZU1RFTTsiCiAgICAgICAgIDwvcGFyYT4KICAgICAg ICA8L2xpc3RpdGVtPgogICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgPHRlcm0+SW50NjQgKFhMb2dSZWNQdHIpPC90ZXJtPgorICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgTFNOIG9mIHRoZSBhYm9ydC4gVGhp cyBmaWVsZCBpcyBhdmFpbGFibGUgc2luY2UgcHJvdG9jb2wgdmVyc2lvbgorICAgICAgICAgNC4K KyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT5JbnQ2NCAoVGltZXN0YW1w VHopPC90ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBB Ym9ydCB0aW1lc3RhbXAgb2YgdGhlIHRyYW5zYWN0aW9uLiBUaGUgdmFsdWUgaXMgaW4gbnVtYmVy CisgICAgICAgICBvZiBtaWNyb3NlY29uZHMgc2luY2UgUG9zdGdyZVNRTCBlcG9jaCAoMjAwMC0w MS0wMSkuIFRoaXMgZmllbGQgaXMKKyAgICAgICAgIGF2YWlsYWJsZSBzaW5jZSBwcm90b2NvbCB2 ZXJzaW9uIDQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92 YXJsaXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgPC9saXN0aXRlbT4KICAg IDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vi c2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dt bAppbmRleCBmOWExNzc2MzgwLi5mMTczYTA5MDM3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv cmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9zdWJzY3JpcHRpb24uc2dtbApAQCAtMjI4LDEzICsyMjgsMjkgQEAgQ1JFQVRFIFNVQlNDUklQ VElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3Jl cGxhY2VhYmwKICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJsaXN0ZW50cnk+ Ci0gICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xl YW48L3R5cGU+KTwvdGVybT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRl cmFsPiAoPHR5cGU+ZW51bTwvdHlwZT4pPC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAg ICAgICA8cGFyYT4KICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgc3RyZWFt aW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGZvciB0aGlzIHN1YnNj cmlwdGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBhcmUgZnVs bHkgZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBvbmx5IHRoZW4gc2VudCB0byB0aGUKLSAg ICAgICAgICBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisgICAgICAgICAgZm9yIHRoaXMgc3Vic2Ny aXB0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiwKKyAg ICAgICAgICBtZWFuaW5nIGFsbCB0cmFuc2FjdGlvbnMgYXJlIGZ1bGx5IGRlY29kZWQgb24gdGhl IHB1Ymxpc2hlciBhbmQgb25seQorICAgICAgICAgIHRoZW4gc2VudCB0byB0aGUgc3Vic2NyaWJl ciBhcyBhIHdob2xlLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+b248L2xpdGVyYWw+LCB0aGUgaW5jb21pbmcgY2hhbmdl cyBhcmUgd3JpdHRlbiB0bworICAgICAgICAgIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhlbiBhcHBs aWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzCisgICAgICAgICAgY29tbWl0dGVkIG9u IHRoZSBwdWJsaXNoZXIgYW5kIHJlY2VpdmVkIGJ5IHRoZSBzdWJzY3JpYmVyLgorICAgICAgICAg PC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+ cGFyYWxsZWw8L2xpdGVyYWw+LCBpbmNvbWluZyBjaGFuZ2VzIGFyZSBkaXJlY3RseQorICAgICAg ICAgIGFwcGxpZWQgdmlhIG9uZSBvZiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VycywgaWYgYXZh aWxhYmxlLiBJZiBubworICAgICAgICAgIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBmcmVlIHRv IGhhbmRsZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zIHRoZW4KKyAgICAgICAgICB0aGUgY2hhbmdl cyBhcmUgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIGFwcGxpZWQgYWZ0ZXIgdGhlCisg ICAgICAgICAgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLiBOb3RlIHRoYXQgaWYgYW4gZXJyb3Ig aGFwcGVucyBpbiBhCisgICAgICAgICAgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB0aGUgZmluaXNo IExTTiBvZiB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uCisgICAgICAgICAgbWlnaHQgbm90IGJlIHJl cG9ydGVkIGluIHRoZSBzZXJ2ZXIgbG9nLgogICAgICAgICAgPC9wYXJhPgogICAgICAgICA8L2xp c3RpdGVtPgogICAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3N5c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4 IDE0M2FlNWI3YmIuLjg0MjhlZTc4NjcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0t dmlld3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKQEAgLTEzNzks OCArMTM3OSw5IEBACiAgICAgICAgPGxpdGVyYWw+dmlydHVhbHhpZDwvbGl0ZXJhbD4sCiAgICAg ICAgPGxpdGVyYWw+c3BlY3Rva2VuPC9saXRlcmFsPiwKICAgICAgICA8bGl0ZXJhbD5vYmplY3Q8 L2xpdGVyYWw+LAotICAgICAgIDxsaXRlcmFsPnVzZXJsb2NrPC9saXRlcmFsPiwgb3IKLSAgICAg ICA8bGl0ZXJhbD5hZHZpc29yeTwvbGl0ZXJhbD4uCisgICAgICAgPGxpdGVyYWw+dXNlcmxvY2s8 L2xpdGVyYWw+LAorICAgICAgIDxsaXRlcmFsPmFkdmlzb3J5PC9saXRlcmFsPiwgb3IKKyAgICAg ICA8bGl0ZXJhbD5hcHBseXRyYW5zYWN0aW9uPC9saXRlcmFsPi4KICAgICAgICAoU2VlIGFsc28g PHhyZWYgbGlua2VuZD0id2FpdC1ldmVudC1sb2NrLXRhYmxlIi8+LikKICAgICAgIDwvcGFyYT48 L2VudHJ5PgogICAgICA8L3Jvdz4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwppbmRleCBiN2M3 ZmQ5ZjAwLi5kMGQ5Yzg2NDQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0xNzEy LDYgKzE3MTIsNyBAQCBSZWNvcmRUcmFuc2FjdGlvbkFib3J0KGJvb2wgaXNTdWJYYWN0KQogCWlu dAkJCW5jaGlsZHJlbjsKIAlUcmFuc2FjdGlvbklkICpjaGlsZHJlbjsKIAlUaW1lc3RhbXBUeiB4 YWN0X3RpbWU7CisJYm9vbAkJcmVwbG9yaWdpbjsKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4ndCBi ZWVuIGFzc2lnbmVkIGFuIFhJRCwgbm9ib2R5IHdpbGwgY2FyZSB3aGV0aGVyIHdlIGFib3J0ZWQK QEAgLTE3NDIsNiArMTc0MywxMyBAQCBSZWNvcmRUcmFuc2FjdGlvbkFib3J0KGJvb2wgaXNTdWJY YWN0KQogCQllbG9nKFBBTklDLCAiY2Fubm90IGFib3J0IHRyYW5zYWN0aW9uICV1LCBpdCB3YXMg YWxyZWFkeSBjb21taXR0ZWQiLAogCQkJIHhpZCk7CiAKKwkvKgorCSAqIEFyZSB3ZSB1c2luZyB0 aGUgcmVwbGljYXRpb24gb3JpZ2lucyBmZWF0dXJlPyAgT3IsIGluIG90aGVyIHdvcmRzLCBhcmUK KwkgKiB3ZSByZXBsYXlpbmcgcmVtb3RlIGFjdGlvbnM/CisJICovCisJcmVwbG9yaWdpbiA9IChy ZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IEludmFsaWRSZXBPcmlnaW5JZCAmJgorCQkJCSAg cmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBEb05vdFJlcGxpY2F0ZUlkKTsKKwogCS8qIEZl dGNoIHRoZSBkYXRhIHdlIG5lZWQgZm9yIHRoZSBhYm9ydCByZWNvcmQgKi8KIAlucmVscyA9IHNt Z3JHZXRQZW5kaW5nRGVsZXRlcyhmYWxzZSwgJnJlbHMpOwogCW5jaGlsZHJlbiA9IHhhY3RHZXRD b21taXR0ZWRDaGlsZHJlbigmY2hpbGRyZW4pOwpAQCAtMTc2NSw2ICsxNzczLDExIEBAIFJlY29y ZFRyYW5zYWN0aW9uQWJvcnQoYm9vbCBpc1N1YlhhY3QpCiAJCQkJCSAgIE15WGFjdEZsYWdzLCBJ bnZhbGlkVHJhbnNhY3Rpb25JZCwKIAkJCQkJICAgTlVMTCk7CiAKKwlpZiAocmVwbG9yaWdpbikK KwkJLyogTW92ZSBMU05zIGZvcndhcmQgZm9yIHRoaXMgcmVwbGljYXRpb24gb3JpZ2luICovCisJ CXJlcGxvcmlnaW5fc2Vzc2lvbl9hZHZhbmNlKHJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fbHNu LAorCQkJCQkJCQkgICBYYWN0TGFzdFJlY0VuZCk7CisKIAkvKgogCSAqIFJlcG9ydCB0aGUgbGF0 ZXN0IGFzeW5jIGFib3J0IExTTiwgc28gdGhhdCB0aGUgV0FMIHdyaXRlciBrbm93cyB0bwogCSAq IGZsdXNoIHRoaXMgYWJvcnQuIFRoZXJlJ3Mgbm90aGluZyB0byBiZSBnYWluZWQgYnkgZGVsYXlp bmcgdGhpcywgc2luY2UKQEAgLTU4NjcsMTEgKzU4ODAsMTAgQEAgWGFjdExvZ0Fib3J0UmVjb3Jk KFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsCiAJfQogCiAJLyoKLQkgKiBEdW1wIHRyYW5zYWN0aW9u IG9yaWdpbiBpbmZvcm1hdGlvbiBvbmx5IGZvciBhYm9ydCBwcmVwYXJlZC4gV2UgbmVlZAotCSAq IHRoaXMgZHVyaW5nIHJlY292ZXJ5IHRvIHVwZGF0ZSB0aGUgcmVwbGljYXRpb24gb3JpZ2luIHBy b2dyZXNzLgorCSAqIER1bXAgdHJhbnNhY3Rpb24gb3JpZ2luIGluZm9ybWF0aW9uLiBXZSBuZWVk IHRoaXMgZHVyaW5nIHJlY292ZXJ5IHRvCisJICogdXBkYXRlIHRoZSByZXBsaWNhdGlvbiBvcmln aW4gcHJvZ3Jlc3MuCiAJICovCi0JaWYgKChyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luICE9IElu dmFsaWRSZXBPcmlnaW5JZCkgJiYKLQkJVHJhbnNhY3Rpb25JZElzVmFsaWQodHdvcGhhc2VfeGlk KSkKKwlpZiAocmVwbG9yaWdpbl9zZXNzaW9uX29yaWdpbiAhPSBJbnZhbGlkUmVwT3JpZ2luSWQp CiAJewogCQl4bF94aW5mby54aW5mbyB8PSBYQUNUX1hJTkZPX0hBU19PUklHSU47CiAKQEAgLTU5 MjgsOCArNTk0MCw4IEBAIFhhY3RMb2dBYm9ydFJlY29yZChUaW1lc3RhbXBUeiBhYm9ydF90aW1l LAogCWlmICh4bF94aW5mby54aW5mbyAmIFhBQ1RfWElORk9fSEFTX09SSUdJTikKIAkJWExvZ1Jl Z2lzdGVyRGF0YSgoY2hhciAqKSAoJnhsX29yaWdpbiksIHNpemVvZih4bF94YWN0X29yaWdpbikp OwogCi0JaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHR3b3BoYXNlX3hpZCkpCi0JCVhMb2dTZXRS ZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKwkvKiBJbmNsdWRlIHRoZSByZXBsaWNh dGlvbiBvcmlnaW4gKi8KKwlYTG9nU2V0UmVjb3JkRmxhZ3MoWExPR19JTkNMVURFX09SSUdJTik7 CiAKIAlyZXR1cm4gWExvZ0luc2VydChSTV9YQUNUX0lELCBpbmZvKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCBkNjczNTU3ZWE0Li45MzgyZTYxOWU5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04NCw3ICs4NCw3IEBA IHR5cGVkZWYgc3RydWN0IFN1Yk9wdHMKIAlib29sCQljb3B5X2RhdGE7CiAJYm9vbAkJcmVmcmVz aDsKIAlib29sCQliaW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5nOworCWNoYXIJCXN0cmVhbWluZzsK IAlib29sCQl0d29waGFzZTsKIAlib29sCQlkaXNhYmxlb25lcnI7CiAJY2hhcgkgICAqb3JpZ2lu OwpAQCAtMTM4LDcgKzEzOCw3IEBAIHBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRpb25zLAogCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0 cywgU1VCT1BUX0JJTkFSWSkpCiAJCW9wdHMtPmJpbmFyeSA9IGZhbHNlOwogCWlmIChJc1NldChz dXBwb3J0ZWRfb3B0cywgU1VCT1BUX1NUUkVBTUlORykpCi0JCW9wdHMtPnN0cmVhbWluZyA9IGZh bHNlOworCQlvcHRzLT5zdHJlYW1pbmcgPSBMT0dJQ0FMUkVQX1NUUkVBTV9PRkY7CiAJaWYgKElz U2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfVFdPUEhBU0VfQ09NTUlUKSkKIAkJb3B0cy0+dHdv cGhhc2UgPSBmYWxzZTsKIAlpZiAoSXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9ESVNBQkxF X09OX0VSUikpCkBAIC0yNDEsNyArMjQxLDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpzdG10X29wdGlvbnMsCiAJCQkJZXJyb3JDb25mbGlj dGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0ZSk7CiAKIAkJCW9wdHMtPnNwZWNpZmllZF9vcHRzIHw9 IFNVQk9QVF9TVFJFQU1JTkc7Ci0JCQlvcHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRCb29sZWFuKGRl ZmVsKTsKKwkJCW9wdHMtPnN0cmVhbWluZyA9IGRlZkdldFN0cmVhbWluZ01vZGUoZGVmZWwpOwog CQl9CiAJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDAp CiAJCXsKQEAgLTYyOSw3ICs2MjksNyBAQCBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCXZhbHVlc1tBbnVtX3BnX3N1 YnNjcmlwdGlvbl9zdWJvd25lciAtIDFdID0gT2JqZWN0SWRHZXREYXR1bShvd25lcik7CiAJdmFs dWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YmVuYWJsZWQgLSAxXSA9IEJvb2xHZXREYXR1bShv cHRzLmVuYWJsZWQpOwogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJiaW5hcnkgLSAx XSA9IEJvb2xHZXREYXR1bShvcHRzLmJpbmFyeSk7Ci0JdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0 aW9uX3N1YnN0cmVhbSAtIDFdID0gQm9vbEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwl2YWx1 ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vic3RyZWFtIC0gMV0gPSBDaGFyR2V0RGF0dW0ob3B0 cy5zdHJlYW1pbmcpOwogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ0d29waGFzZXN0 YXRlIC0gMV0gPQogCQlDaGFyR2V0RGF0dW0ob3B0cy50d29waGFzZSA/CiAJCQkJCSBMT0dJQ0FM UkVQX1RXT1BIQVNFX1NUQVRFX1BFTkRJTkcgOgpAQCAtMTA5OCw3ICsxMDk4LDcgQEAgQWx0ZXJT dWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0 bXQsCiAJCQkJaWYgKElzU2V0KG9wdHMuc3BlY2lmaWVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcp KQogCQkJCXsKIAkJCQkJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFd ID0KLQkJCQkJCUJvb2xHZXREYXR1bShvcHRzLnN0cmVhbWluZyk7CisJCQkJCQlDaGFyR2V0RGF0 dW0ob3B0cy5zdHJlYW1pbmcpOwogCQkJCQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9z dWJzdHJlYW0gLSAxXSA9IHRydWU7CiAJCQkJfQogCkBAIC0yMTIyLDMgKzIxMjIsNjAgQEAgbWVy Z2VfcHVibGljYXRpb25zKExpc3QgKm9sZHB1Ymxpc3QsIExpc3QgKm5ld3B1Ymxpc3QsIGJvb2wg YWRkcHViLCBjb25zdCBjaGFyICoKIAogCXJldHVybiBvbGRwdWJsaXN0OwogfQorCisvKgorICog RXh0cmFjdCB0aGUgc3RyZWFtaW5nIG1vZGUgdmFsdWUgZnJvbSBhIERlZkVsZW0uICBUaGlzIGlz IGxpa2UKKyAqIGRlZkdldEJvb2xlYW4oKSBidXQgYWxzbyBhY2NlcHRzIHRoZSBzcGVjaWFsIHZh bHVlIG9mICJwYXJhbGxlbCIuCisgKi8KK2NoYXIKK2RlZkdldFN0cmVhbWluZ01vZGUoRGVmRWxl bSAqZGVmKQoreworCS8qCisJICogSWYgbm8gcGFyYW1ldGVyIHZhbHVlIGdpdmVuLCBhc3N1bWUg InRydWUiIGlzIG1lYW50LgorCSAqLworCWlmICghZGVmLT5hcmcpCisJCXJldHVybiBMT0dJQ0FM UkVQX1NUUkVBTV9PTjsKKworCS8qCisJICogQWxsb3cgMCwgMSwgImZhbHNlIiwgInRydWUiLCAi b2ZmIiwgIm9uIiBvciAicGFyYWxsZWwiLgorCSAqLworCXN3aXRjaCAobm9kZVRhZyhkZWYtPmFy ZykpCisJeworCQljYXNlIFRfSW50ZWdlcjoKKwkJCXN3aXRjaCAoaW50VmFsKGRlZi0+YXJnKSkK KwkJCXsKKwkJCQljYXNlIDA6CisJCQkJCXJldHVybiBMT0dJQ0FMUkVQX1NUUkVBTV9PRkY7CisJ CQkJY2FzZSAxOgorCQkJCQlyZXR1cm4gTE9HSUNBTFJFUF9TVFJFQU1fT047CisJCQkJZGVmYXVs dDoKKwkJCQkJLyogb3RoZXJ3aXNlLCBlcnJvciBvdXQgYmVsb3cgKi8KKwkJCQkJYnJlYWs7CisJ CQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXsKKwkJCQljaGFyCSAgICpzdmFsID0gZGVm R2V0U3RyaW5nKGRlZik7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBzZXQgb2Ygc3RyaW5ncyBhY2Nl cHRlZCBoZXJlIHNob3VsZCBtYXRjaCB1cCB3aXRoIHRoZQorCQkJCSAqIGdyYW1tYXIncyBvcHRf Ym9vbGVhbl9vcl9zdHJpbmcgcHJvZHVjdGlvbi4KKwkJCQkgKi8KKwkJCQlpZiAocGdfc3RyY2Fz ZWNtcChzdmFsLCAiZmFsc2UiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3ZhbCwgIm9m ZiIpID09IDApCisJCQkJCXJldHVybiBMT0dJQ0FMUkVQX1NUUkVBTV9PRkY7CisJCQkJaWYgKHBn X3N0cmNhc2VjbXAoc3ZhbCwgInRydWUiKSA9PSAwIHx8CisJCQkJCXBnX3N0cmNhc2VjbXAoc3Zh bCwgIm9uIikgPT0gMCkKKwkJCQkJcmV0dXJuIExPR0lDQUxSRVBfU1RSRUFNX09OOworCQkJCWlm IChwZ19zdHJjYXNlY21wKHN2YWwsICJwYXJhbGxlbCIpID09IDApCisJCQkJCXJldHVybiBMT0dJ Q0FMUkVQX1NUUkVBTV9QQVJBTExFTDsKKwkJCX0KKwkJCWJyZWFrOworCX0KKworCWVyZXBvcnQo RVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkgZXJybXNnKCIl cyByZXF1aXJlcyBhIEJvb2xlYW4gdmFsdWUgb3IgXCJwYXJhbGxlbFwiIiwKKwkJCQkJZGVmLT5k ZWZuYW1lKSkpOworCXJldHVybiBMT0dJQ0FMUkVQX1NUUkVBTV9PRkY7CS8qIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxbXEuYyBiL3Ny Yy9iYWNrZW5kL2xpYnBxL3BxbXEuYwppbmRleCA0ZDA0MTVlMzc5Li42Mzk4NDVmZDgwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9saWJwcS9wcW1xLmMKKysrIGIvc3JjL2JhY2tlbmQvbGlicHEv cHFtcS5jCkBAIC0xMywxMSArMTMsMTMgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2lu Y2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFtcS5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2xvZ2ljYWx3b3JrZXIuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKIApAQCAtMTYyLDkgKzE2NCwxOSBAQCBtcV9wdXRtZXNzYWdl KGNoYXIgbXNndHlwZSwgY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKIAkJcmVzdWx0ID0gc2ht X21xX3NlbmR2KHBxX21xX2hhbmRsZSwgaW92LCAyLCB0cnVlLCB0cnVlKTsKIAogCQlpZiAocHFf bXFfcGFyYWxsZWxfbGVhZGVyX3BpZCAhPSAwKQotCQkJU2VuZFByb2NTaWduYWwocHFfbXFfcGFy YWxsZWxfbGVhZGVyX3BpZCwKLQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfTUVTU0FHRSwKLQkJ CQkJCSAgIHBxX21xX3BhcmFsbGVsX2xlYWRlcl9iYWNrZW5kX2lkKTsKKwkJeworCQkJaWYgKElz TG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIoKSkKKwkJCQlTZW5kUHJvY1NpZ25hbChwcV9tcV9w YXJhbGxlbF9sZWFkZXJfcGlkLAorCQkJCQkJCSAgIFBST0NTSUdfUEFSQUxMRUxfQVBQTFlfTUVT U0FHRSwKKwkJCQkJCQkgICBwcV9tcV9wYXJhbGxlbF9sZWFkZXJfYmFja2VuZF9pZCk7CisJCQll bHNlCisJCQl7CisJCQkJQXNzZXJ0KElzUGFyYWxsZWxXb3JrZXIoKSk7CisJCQkJU2VuZFByb2NT aWduYWwocHFfbXFfcGFyYWxsZWxfbGVhZGVyX3BpZCwKKwkJCQkJCQkgICBQUk9DU0lHX1BBUkFM TEVMX01FU1NBR0UsCisJCQkJCQkJICAgcHFfbXFfcGFyYWxsZWxfbGVhZGVyX2JhY2tlbmRfaWQp OworCQkJfQorCQl9CiAKIAkJaWYgKHJlc3VsdCAhPSBTSE1fTVFfV09VTERfQkxPQ0spCiAJCQli cmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwppbmRleCAwZDcyZGUyNGIwLi4yZGZhOWFi NTIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC0xMjgsNiArMTI4LDkgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdAogCX0sCiAJewogCQkiQXBwbHlXb3JrZXJNYWluIiwgQXBwbHlXb3Jr ZXJNYWluCisJfSwKKwl7CisJCSJQYXJhbGxlbEFwcGx5V29ya2VyTWFpbiIsIFBhcmFsbGVsQXBw bHlXb3JrZXJNYWluCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9pbnRlcnJ1cHQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJydXB0LmMKaW5kZXgg MWFlZDJlMmU5OS4uZTY0MDI5ZmFjNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9pbnRlcnJ1cHQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5jCkBA IC05OCw4ICs5OCw5IEBAIFNpZ25hbEhhbmRsZXJGb3JDcmFzaEV4aXQoU0lHTkFMX0FSR1MpCiAg KiBzaHV0IGRvd24gYW5kIGV4aXQuCiAgKgogICogVHlwaWNhbGx5LCB0aGlzIGhhbmRsZXIgd291 bGQgYmUgdXNlZCBmb3IgU0lHVEVSTSwgYnV0IHNvbWUgcHJvY2Vzc2VzIHVzZQotICogb3RoZXIg c2lnbmFscy4gSW4gcGFydGljdWxhciwgdGhlIGNoZWNrcG9pbnRlciBleGl0cyBvbiBTSUdVU1Iy LCBhbmQgdGhlCi0gKiBXQUwgd3JpdGVyIGV4aXRzIG9uIGVpdGhlciBTSUdJTlQgb3IgU0lHVEVS TS4KKyAqIG90aGVyIHNpZ25hbHMuIEluIHBhcnRpY3VsYXIsIHRoZSBjaGVja3BvaW50ZXIgZXhp dHMgb24gU0lHVVNSMiwgYW5kIHRoZSBXQUwKKyAqIHdyaXRlciBhbmQgdGhlIGxvZ2ljYWwgcmVw bGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIGV4aXRzIG9uIGVpdGhlcgorICogU0lHSU5U IG9yIFNJR1RFUk0uCiAgKgogICogU2h1dGRvd25SZXF1ZXN0UGVuZGluZyBzaG91bGQgYmUgY2hl Y2tlZCBhdCBhIGNvbnZlbmllbnQgcGxhY2Ugd2l0aGluIHRoZQogICogbWFpbiBsb29wLCBvciBl bHNlIHRoZSBtYWluIGxvb3Agc2hvdWxkIGNhbGwgSGFuZGxlTWFpbkxvb3BJbnRlcnJ1cHRzLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbGlicHF3YWxyZWNlaXZlci9saWJw cXdhbHJlY2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVy L2xpYnBxd2FscmVjZWl2ZXIuYwppbmRleCA3ZjY5N2IwZjI5Li4yMjVkYTgxZjJlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xpYnBxd2FscmVj ZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVyL2xp YnBxd2FscmVjZWl2ZXIuYwpAQCAtNDQzLDkgKzQ0Myw5IEBAIGxpYnBxcmN2X3N0YXJ0c3RyZWFt aW5nKFdhbFJlY2VpdmVyQ29ubiAqY29ubiwKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAicHJv dG9fdmVyc2lvbiAnJXUnIiwKIAkJCQkJCSBvcHRpb25zLT5wcm90by5sb2dpY2FsLnByb3RvX3Zl cnNpb24pOwogCi0JCWlmIChvcHRpb25zLT5wcm90by5sb2dpY2FsLnN0cmVhbWluZyAmJgotCQkJ UFFzZXJ2ZXJWZXJzaW9uKGNvbm4tPnN0cmVhbUNvbm4pID49IDE0MDAwMCkKLQkJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgc3RyZWFtaW5nICdvbiciKTsKKwkJaWYgKG9wdGlvbnMt PnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0cikKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwg Iiwgc3RyZWFtaW5nICclcyciLAorCQkJCQkJCSBvcHRpb25zLT5wcm90by5sb2dpY2FsLnN0cmVh bWluZ19zdHIpOwogCiAJCWlmIChvcHRpb25zLT5wcm90by5sb2dpY2FsLnR3b3BoYXNlICYmCiAJ CQlQUXNlcnZlclZlcnNpb24oY29ubi0+c3RyZWFtQ29ubikgPj0gMTUwMDAwKQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uMmRjMjVlMzdi YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNSw2ICsx NSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIG92ZXJy aWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBcCisJYXBw bHlwYXJhbGxlbHdvcmtlci5vIFwKIAlkZWNvZGUubyBcCiAJbGF1bmNoZXIubyBcCiAJbG9naWNh bC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBwbHlw YXJhbGxlbHdvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9hcHBseXBh cmFsbGVsd29ya2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzAz OTgzZjI3OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvYXBwbHlwYXJhbGxlbHdvcmtlci5jCkBAIC0wLDAgKzEsMTYxOSBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKiBhcHBseXBhcmFsbGVsd29ya2VyLmMKKyAqCSAgIFN1cHBvcnQgcm91dGluZXMg Zm9yIGFwcGx5aW5nIHhhY3QgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyCisgKgorICogQ29weXJp Z2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAq IElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvYXBw bHlwYXJhbGxlbHdvcmtlci5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIHRv IGxhdW5jaCwgc2V0IHVwLCBhbmQgdGVhcmRvd24gYSBwYXJhbGxlbCBhcHBseQorICogd29ya2Vy IHdoaWNoIHJlY2VpdmVzIHRoZSBjaGFuZ2VzIGZyb20gdGhlIGxlYWRlciB3b3JrZXIgYW5kIGlu dm9rZXMgcm91dGluZXMKKyAqIHRvIGFwcGx5IHRob3NlIG9uIHRoZSBzdWJzY3JpYmVyIGRhdGFi YXNlLiBBZGRpdGlvbmFsbHksIHRoaXMgZmlsZSBjb250YWlucworICogcm91dGluZXMgdGhhdCBh cmUgaW50ZW5kZWQgdG8gc3VwcG9ydCBzZXR0aW5nIHVwLCB1c2luZywgYW5kIHRlYXJpbmcgZG93 biBhCisgKiBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyB3aGljaCBpcyByZXF1aXJlZCBzbyB0aGUg bGVhZGVyIHdvcmtlciBhbmQgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlcnMgY2FuIGNvbW11bmlj YXRlIHdpdGggZWFjaCBvdGhlci4KKyAqCisgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VycyBh cmUgYXNzaWduZWQgKGlmIGF2YWlsYWJsZSkgYXMgc29vbiBhcyB4YWN0J3MKKyAqIGZpcnN0IHN0 cmVhbSBpcyByZWNlaXZlZCBmb3Igc3Vic2NyaXB0aW9ucyB0aGF0IGhhdmUgc2V0IHRoZWlyICdz dHJlYW1pbmcnCisgKiBvcHRpb24gYXMgcGFyYWxsZWwuIFRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IHdpbGwgc2VuZCBjaGFuZ2VzIHRvIHRoaXMgbmV3CisgKiB3b3JrZXIgdmlhIHNoYXJlZCBtZW1v cnkuIFdlIGtlZXAgdGhpcyB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24KKyAq IGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGZpbmlz aCBhdCBjb21taXQuIFRoaXMKKyAqIHByZXNlcnZlcyBjb21taXQgb3JkZXJpbmcgYW5kIGF2b2lk IGZpbGUgSS9PIGluIG1vc3QgY2FzZXMsIGFsdGhvdWdoIHdlCisgKiBzdGlsbCBuZWVkIHRvIHNw aWxsIHRvIGEgZmlsZSBpZiB0aGVyZSBpcyBubyB3b3JrZXIgYXZhaWxhYmxlLiBTZWUgY29tbWVu dHMKKyAqIGF0b3AgbG9naWNhbC93b3JrZXIgdG8ga25vdyBtb3JlIGFib3V0IHN0cmVhbWVkIHhh Y3RzIHdob3NlIGNoYW5nZXMgYXJlCisgKiBzcGlsbGVkIHRvIGRpc2suIEl0IGlzIGltcG9ydGFu dCB0byBtYWludGFpbiBjb21taXQgb3JkZXIgdG8gYXZvaWQgZmFpbHVyZXMKKyAqIGR1ZSB0bzog KGEpIHRyYW5zYWN0aW9uIGRlcGVuZGVuY2llcyAtIHNheSBpZiB3ZSBpbnNlcnQgYSByb3cgaW4g dGhlIGZpcnN0CisgKiB0cmFuc2FjdGlvbiBhbmQgdXBkYXRlIGl0IGluIHRoZSBzZWNvbmQgdHJh bnNhY3Rpb24gb24gcHVibGlzaGVyIHRoZW4KKyAqIGFsbG93aW5nIHRoZSBzdWJzY3JpYmVyIHRv IGFwcGx5IGJvdGggaW4gcGFyYWxsZWwgY2FuIGxlYWQgdG8gZmFpbHVyZSBpbiB0aGUKKyAqIHVw ZGF0ZTsgKGIpIGRlYWRsb2NrcyAtIGFsbG93aW5nIHRyYW5zYWN0aW9ucyB0aGF0IHVwZGF0ZSB0 aGUgc2FtZSBzZXQgb2YKKyAqIHJvd3MvdGFibGVzIGluIHRoZSBvcHBvc2l0ZSBvcmRlciB0byBi ZSBhcHBsaWVkIGluIHBhcmFsbGVsIGNhbiBsZWFkIHRvCisgKiBkZWFkbG9ja3MuCisgKgorICog QSB3b3JrZXIgcG9vbCBpcyB1c2VkIHRvIGF2b2lkIHJlc3RhcnRpbmcgd29ya2VycyBmb3IgZWFj aCBzdHJlYW1pbmcKKyAqIHRyYW5zYWN0aW9uLiBXZSBtYWludGFpbiBlYWNoIHdvcmtlcidzIGlu Zm9ybWF0aW9uIChQYXJhbGxlbEFwcGx5V29ya2VySW5mbykKKyAqIGluIHRoZSBQYXJhbGxlbEFw cGx5V29ya2VyUG9vbC4gQWZ0ZXIgc3VjY2Vzc2Z1bGx5IGxhdW5jaGluZyBhIG5ldyB3b3JrZXIs CisgKiBpdHMgaW5mb3JtYXRpb24gaXMgYWRkZWQgdG8gdGhlIFBhcmFsbGVsQXBwbHlXb3JrZXJQ b29sLiBPbmNlIHRoZSB3b3JrZXIKKyAqIGZpbmlzaGVzIGFwcGx5aW5nIHRoZSB0cmFuc2FjdGlv biwgaXQgaXMgbWFya2VkIGFzIGF2YWlsYWJsZSBmb3IgcmUtdXNlLgorICogTm93LCBiZWZvcmUg c3RhcnRpbmcgYSBuZXcgd29ya2VyIHRvIGFwcGx5IHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24s IHdlCisgKiBjaGVjayB0aGUgbGlzdCBmb3IgYW55IGF2YWlsYWJsZSB3b3JrZXIuIE5vdGUgdGhh dCB3ZSByZXRhaW4gYSBtYXhpbXVtIG9mCisgKiBoYWxmIHRoZSBtYXhfcGFyYWxsZWxfYXBwbHlf d29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uIHdvcmtlcnMgaW4gdGhlIHBvb2wgYW5kCisgKiBhZnRl ciB0aGF0LCB3ZSBzaW1wbHkgZXhpdCB0aGUgd29ya2VyIGFmdGVyIGFwcGx5aW5nIHRoZSB0cmFu c2FjdGlvbi4KKyAqCisgKiBYWFggVGhpcyB3b3JrZXIgcG9vbCB0aHJlc2hvbGQgaXMgYXJiaXRy YXJ5IGFuZCB3ZSBjYW4gcHJvdmlkZSBhIEdVQworICogdmFyaWFibGUgZm9yIHRoaXMgaW4gdGhl IGZ1dHVyZSBpZiByZXF1aXJlZC4KKyAqCisgKiBUaGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxs IGNyZWF0ZSBhIHNlcGFyYXRlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiB3aGVu IGVhY2ggcGFyYWxsZWwgYXBwbHkgd29ya2VyIHN0YXJ0cy4gVGhlIHJlYXNvbiBmb3IgdGhpcyBk ZXNpZ24gaXMgdGhhdAorICogd2UgY2Fubm90IHByZWRpY3QgaG93IG1hbnkgd29ya2VycyB3aWxs IGJlIG5lZWRlZC4gSXQgbWF5IGJlIHBvc3NpYmxlIHRvCisgKiBhbGxvY2F0ZSBlbm91Z2ggc2hh cmVkIG1lbW9yeSBpbiBvbmUgc2VnbWVudCBiYXNlZCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2YK KyAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgKG1heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Bl cl9zdWJzY3JpcHRpb24pLCBidXQKKyAqIHRoaXMgd291bGQgd2FzdGUgbWVtb3J5IGlmIG5vIHBy b2Nlc3MgaXMgYWN0dWFsbHkgc3RhcnRlZC4KKyAqCisgKiBUaGUgZHluYW1pYyBzaGFyZWQgbWVt b3J5IHNlZ21lbnQgY29udGFpbnM6IChhKSBhIHNobV9tcSB0aGF0IGlzIHVzZWQgdG8KKyAqIHNl bmQgY2hhbmdlcyBpbiB0aGUgdHJhbnNhY3Rpb24gZnJvbSBsZWFkZXIgYXBwbHkgd29ya2VyIHRv IHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXI7IChiKSBhbm90aGVyIHNobV9tcSB0aGF0IGlzIHVz ZWQgdG8gc2VuZCBlcnJvcnMgKGFuZCBvdGhlciBtZXNzYWdlcworICogcmVwb3J0ZWQgdmlhIGVs b2cvZXJlcG9ydCkgZnJvbSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHRvIGxlYWRlciBhcHBs eQorICogd29ya2VyOyAoYykgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGJlIHNoYXJlZCBhbW9u ZyBwYXJhbGxlbCBhcHBseSB3b3JrZXJzCisgKiBhbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIg KGkuZS4gbWVtYmVycyBvZiBQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkKS4KKyAqCisgKiBMb2Nr aW5nIENvbnNpZGVyYXRpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTaW5jZSB0 aGUgZGF0YWJhc2Ugc3RydWN0dXJlIChzY2hlbWEgb2Ygc3Vic2NyaXB0aW9uIHRhYmxlcywgY29u c3RyYWludHMsCisgKiBldGMuKSBvZiB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNvdWxk IGJlIGRpZmZlcmVudCwgYXBwbHlpbmcKKyAqIHRyYW5zYWN0aW9ucyBpbiBwYXJhbGxlbCBtb2Rl IG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUgY2FuIGNhdXNlIHNvbWUKKyAqIGRlYWRsb2NrcyB0aGF0 IGRvIG5vdCBvY2N1ciBvbiB0aGUgcHVibGlzaGVyIHNpZGUuIFRoaXMgY2FuIGhhcHBlbiBldmVu CisgKiB3aXRob3V0IHBhcmFsbGVsIG1vZGUgd2hlbiB0aGVyZSBhcmUgY29uY3VycmVudCBvcGVy YXRpb25zIG9uIHRoZQorICogc3Vic2NyaWJlci4gSW4gb3JkZXIgdG8gZGV0ZWN0IHRoZSBkZWFk bG9ja3MgYW1vbmcgbGVhZGVyIChMQSkgYW5kIHBhcmFsbGVsCisgKiBhcHBseSAoUEEpIHdvcmtl cnMsIHdlIHVzZWQgbG1nciBsb2NrcyB3aGVuIHRoZSBQQSB3YWl0cyBmb3IgdGhlIG5leHQgc3Ry ZWFtCisgKiAoc2V0IG9mIGNoYW5nZXMpIGFuZCBMQSB3YWl0cyBmb3IgUEEgdG8gZmluaXNoIHRo ZSB0cmFuc2FjdGlvbi4gQW4gYWx0ZXJuYXRpdmUKKyAqIGFwcHJvYWNoIGNvdWxkIGJlIHRvIG5v dCBhbGxvdyBwYXJhbGxlbGlzbSB3aGVuIHRoZSBzY2hlbWEgb2YgdGFibGVzIGlzCisgKiBkaWZm ZXJlbnQgYmV0d2VlbiB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGJ1dCB0aGF0IHdvdWxk IGJlIHRvbworICogcmVzdHJpY3RpdmUgYW5kIHdvdWxkIHJlcXVpcmUgdGhlIHB1Ymxpc2hlciB0 byBzZW5kIG11Y2ggbW9yZSBpbmZvcm1hdGlvbgorICogdGhhbiBpdCBpcyBjdXJyZW50bHkgc2Vu ZGluZy4KKyAqCisgKiBDb25zaWRlciBhIGNhc2Ugd2hlcmUgdGhlIHN1YnNjcmliZWQgdGFibGUg ZG9lcyBub3QgaGF2ZSBhIHVuaXF1ZSBrZXkgb24gdGhlCisgKiBwdWJsaXNoZXIgYW5kIGhhcyBh IHVuaXF1ZSBrZXkgb24gdGhlIHN1YnNjcmliZXIuIFRoZSBkZWFkbG9jayBjYW4gaGFwcGVuIGlu CisgKiB0aGUgZm9sbG93aW5nIHdheXM6CisgKgorICogMSkgRGVhZGxvY2sgYmV0d2VlbiB0aGUg bGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIKKyAqCisgKiBD b25zaWRlciB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgKFBBKSBpcyBleGVjdXRpbmcg VFgtMSBhbmQgdGhlCisgKiBsZWFkZXIgYXBwbHkgd29ya2VyIChMQSkgaXMgZXhlY3V0aW5nIFRY LTIgY29uY3VycmVudGx5IG9uIHRoZSBzdWJzY3JpYmVyLgorICogTm93LCBMQSBpcyB3YWl0aW5n IGZvciBQQSBiZWNhdXNlIG9mIHRoZSB1bmlxdWUga2V5IGNvbnN0cmFpbnQgb2YgdGhlCisgKiBz dWJzY3JpYmVkIHRhYmxlIHdoaWxlIFBBIGlzIHdhaXRpbmcgZm9yIExBIHRvIHNlbmQgdGhlIG5l eHQgc3RyZWFtIG9mCisgKiBjaGFuZ2VzIG9yIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5kIG1l c3NhZ2UuCisgKgorICogSW4gb3JkZXIgZm9yIGxtZ3IgdG8gZGV0ZWN0IHRoaXMsIHdlIGhhdmUg TEEgYWNxdWlyZSBhIHNlc3Npb24gbG9jayBvbiB0aGUKKyAqIHJlbW90ZSB0cmFuc2FjdGlvbiAo YnkgcGFfbG9ja19zdHJlYW0oKSkgYW5kIGhhdmUgUEEgd2FpdCBvbiB0aGUgbG9jayBiZWZvcmUK KyAqIHRyeWluZyB0byByZWNlaXZlIHRoZSBuZXh0IHN0cmVhbSBvZiBjaGFuZ2VzLiBTcGVjaWZp Y2FsbHksIExBIHdpbGwgYWNxdWlyZQorICogdGhlIGxvY2sgaW4gQWNjZXNzRXhjbHVzaXZlIG1v ZGUgYmVmb3JlIHNlbmRpbmcgdGhlIFNUUkVBTV9TVE9QIGFuZCB3aWxsCisgKiByZWxlYXNlIGl0 IGlmIGFscmVhZHkgYWNxdWlyZWQgYWZ0ZXIgc2VuZGluZyB0aGUgU1RSRUFNX1NUQVJULCBTVFJF QU1fQUJPUlQKKyAqIChmb3IgdG9wbGV2ZWwgdHJhbnNhY3Rpb24pLCBTVFJFQU1fUFJFUEFSRSwg YW5kIFNUUkVBTV9DT01NSVQuIFRoZSBQQSB3aWxsCisgKiBhY3F1aXJlIHRoZSBsb2NrIGluIEFj Y2Vzc1NoYXJlIG1vZGUgYWZ0ZXIgcHJvY2Vzc2luZyBTVFJFQU1fU1RPUCBhbmQKKyAqIFNUUkVB TV9BQk9SVCAoZm9yIHN1YnRyYW5zYWN0aW9uKSBhbmQgdGhlbiByZWxlYXNlIHRoZSBsb2NrIGlt bWVkaWF0ZWx5CisgKiBhZnRlciBhY3F1aXJpbmcgaXQuCisgKgorICogVGhlIGxvY2sgZ3JhcGgg Zm9yIHRoZSBhYm92ZSBleGFtcGxlIHdpbGwgbG9vayBhcyBmb2xsb3dzOgorICogTEEgKHdhaXRp bmcgdG8gYWNxdWlyZSB0aGUgbG9jayBvbiB0aGUgdW5pcXVlIGluZGV4KSAtPiBQQSAod2FpdGlu ZyB0bworICogYWNxdWlyZSB0aGUgc3RyZWFtIGxvY2spIC0+IExBCisgKgorICogVGhpcyB3YXks IHdoZW4gUEEgaXMgd2FpdGluZyBmb3IgTEEgZm9yIHRoZSBuZXh0IHN0cmVhbSBvZiBjaGFuZ2Vz LCB3ZSBjYW4KKyAqIGhhdmUgYSB3YWl0LWVkZ2UgZnJvbSBQQSB0byBMQSBpbiBsbWdyLCB3aGlj aCB3aWxsIG1ha2UgdXMgZGV0ZWN0IHRoZQorICogZGVhZGxvY2sgYmV0d2VlbiBMQSBhbmQgUEEu CisgKgorICogMikgRGVhZGxvY2sgYmV0d2VlbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQg cGFyYWxsZWwgYXBwbHkgd29ya2VycworICoKKyAqIFRoaXMgc2NlbmFyaW8gaXMgc2ltaWxhciB0 byB0aGUgZmlyc3QgY2FzZSBidXQgVFgtMSBhbmQgVFgtMiBhcmUgZXhlY3V0ZWQgYnkKKyAqIHR3 byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIChQQS0xIGFuZCBQQS0yIHJlc3BlY3RpdmVseSkuIElu IHRoaXMgc2NlbmFyaW8sCisgKiBQQS0yIGlzIHdhaXRpbmcgZm9yIFBBLTEgdG8gY29tcGxldGUg aXRzIHRyYW5zYWN0aW9uIHdoaWxlIFBBLTEgaXMgd2FpdGluZworICogZm9yIHN1YnNlcXVlbnQg aW5wdXQgZnJvbSBMQS4gQWxzbywgTEEgaXMgd2FpdGluZyBmb3IgUEEtMiB0byBjb21wbGV0ZSBp dHMKKyAqIHRyYW5zYWN0aW9uIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBjb21taXQgb3JkZXIu IFRoZXJlIGlzIGEgZGVhZGxvY2sgYW1vbmcKKyAqIHRoZSB0aHJlZSBwcm9jZXNzZXMuCisgKgor ICogSW4gb3JkZXIgZm9yIGxtZ3IgdG8gZGV0ZWN0IHRoaXMsIHdlIGhhdmUgUEEgYWNxdWlyZSBh IHNlc3Npb24gbG9jayAodGhpcyBpcworICogYSBkaWZmZXJlbnQgbG9jayB0aGFuIHJlZmVycmVk IGluIHRoZSBwcmV2aW91cyBjYXNlLCBzZWUKKyAqIHBhX2xvY2tfdHJhbnNhY3Rpb24oKSkgb24g dGhlIHRyYW5zYWN0aW9uIGJlaW5nIGFwcGxpZWQgYW5kIGhhdmUgTEEgd2FpdCBvbgorICogdGhl IGxvY2sgYmVmb3JlIHByb2NlZWRpbmcgaW4gdGhlIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21tYW5k cy4gU3BlY2lmaWNhbGx5LAorICogUEEgd2lsbCBhY3F1aXJlIHRoaXMgbG9jayBpbiBBY2Nlc3NF eGNsdXNpdmUgbW9kZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBmaXJzdAorICogbWVzc2FnZSBvZiB0 aGUgdHJhbnNhY3Rpb24gYW5kIHJlbGVhc2UgaXQgYXQgdGhlIHhhY3QgZW5kLiBMQSB3aWxsIGFj cXVpcmUKKyAqIHRoaXMgbG9jayBpbiBBY2Nlc3NTaGFyZSBtb2RlIGF0IHRyYW5zYWN0aW9uIGZp bmlzaCBjb21tYW5kcworICogKFNUUkVBTV9DT01NSVQgYW5kIFNUUkVBTV9QUkVQQVJFKSBhbmQg cmVsZWFzZSBpdCBpbW1lZGlhdGVseS4KKyAqCisgKiBUaGUgbG9jayBncmFwaCBmb3IgdGhlIGFi b3ZlIGV4YW1wbGUgd2lsbCBsb29rIGFzIGZvbGxvd3M6CisgKiBMQSAod2FpdGluZyB0byBhY3F1 aXJlIHRoZSB0cmFuc2FjdGlvbiBsb2NrKSAtPiBQQS0yICh3YWl0aW5nIHRvIGFjcXVpcmUgdGhl CisgKiBsb2NrIGR1ZSB0byB1bmlxdWUgaW5kZXggY29uc3RyYWludCkgLT4gUEEtMSAod2FpdGlu ZyB0byBhY3F1aXJlIHRoZSBzdHJlYW0KKyAqIGxvY2spIC0+IExBCisgKgorICogVGhpcyB3YXkg d2hlbiBMQSBpcyB3YWl0aW5nIHRvIGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24gZW5kIGNvbW1hbmQg dG8gcHJlc2VydmUKKyAqIHRoZSBjb21taXQgb3JkZXIsIHdlIHdpbGwgYmUgYWJsZSB0byBkZXRl Y3QgZGVhZGxvY2ssIGlmIGFueS4KKyAqCisgKiBPbmUgbWlnaHQgdGhpbmsgd2UgY2FuIHVzZSBY YWN0TG9ja1RhYmxlV2FpdCgpLCBidXQgWGFjdExvY2tUYWJsZVdhaXQoKQorICogY29uc2lkZXJz IFBSRVBBUkVEIFRSQU5TQUNUSU9OIGFzIHN0aWxsIGluIHByb2dyZXNzIHdoaWNoIG1lYW5zIHRo ZSBsb2NrCisgKiB3b24ndCBiZSByZWxlYXNlZCBldmVuIGFmdGVyIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaGFzIHByZXBhcmVkIHRoZQorICogdHJhbnNhY3Rpb24uCisgKgorICogMykgRGVh ZGxvY2sgd2hlbiB0aGUgc2htX21xIGJ1ZmZlciBpcyBmdWxsCisgKgorICogSW4gdGhlIHByZXZp b3VzIHNjZW5hcmlvIChpZS4gUEEtMSBhbmQgUEEtMiBhcmUgZXhlY3V0aW5nIHRyYW5zYWN0aW9u cworICogY29uY3VycmVudGx5KSwgaWYgdGhlIHNobV9tcSBidWZmZXIgYmV0d2VlbiBMQSBhbmQg UEEtMiBpcyBmdWxsLCBMQSBoYXMgdG8KKyAqIHdhaXQgdG8gc2VuZCBtZXNzYWdlcywgYW5kIHRo aXMgd2FpdCBkb2Vzbid0IGFwcGVhciBpbiBsbWdyLgorICoKKyAqIFRvIGF2b2lkIHRoaXMgd2Fp dCwgd2UgdXNlIGEgbm9uLWJsb2NraW5nIHdyaXRlIGFuZCB3YWl0IHdpdGggYSB0aW1lb3V0LiBJ ZgorICogdGhlIHRpbWVvdXQgaXMgZXhjZWVkZWQsIHRoZSBMQSB3aWxsIHNlcmlhbGl6ZSBhbGwg dGhlIHBlbmRpbmcgbWVzc2FnZXMgdG8KKyAqIGEgZmlsZSBhbmQgaW5kaWNhdGUgUEEtMiB0aGF0 IGl0IG5lZWRzIHRvIHJlYWQgdGhhdCBmaWxlIGZvciB0aGUgcmVtYWluaW5nCisgKiBtZXNzYWdl cy4gVGhlbiBMQSB3aWxsIHN0YXJ0IHdhaXRpbmcgZm9yIGNvbW1pdCBhcyBpbiB0aGUgcHJldmlv dXMgY2FzZQorICogd2hpY2ggd2lsbCBkZXRlY3QgZGVhZGxvY2sgaWYgYW55LiBTZWUgcGFfc2Vu ZF9kYXRhKCkgYW5kCisgKiBlbnVtIFRyYW5zQXBwbHlBY3Rpb24uCisgKgorICogNCkgTG9jayB0 eXBlcworICoKKyAqIEJvdGggdGhlIHN0cmVhbSBsb2NrIGFuZCB0aGUgdHJhbnNhY3Rpb24gbG9j ayBtZW50aW9uZWQgYWJvdmUgYXJlCisgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGJlY2F1c2UgYm90 aCBsb2NrcyBjb3VsZCBiZSBhY3F1aXJlZCBvdXRzaWRlIHRoZQorICogdHJhbnNhY3Rpb24sIGFu ZCB0aGUgc3RyZWFtIGxvY2sgaW4gdGhlIGxlYWRlciBuZWVkcyB0byBwZXJzaXN0IGFjcm9zcwor ICogdHJhbnNhY3Rpb24gYm91bmRhcmllcyBpLmUuIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmVh bWluZyB0cmFuc2FjdGlvbi4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKKyNpbmNsdWRlICJsaWJw cS9wcW1xLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRl cnJ1cHQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v b3JpZ2luLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmgiCisjaW5j bHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRl ICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1 dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKyNkZWZpbmUg UEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMgMHg3ODdjYTA2NworCisvKgorICogRFNNIGtleXMg Zm9yIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gVW5saWtlIG90aGVyIHBhcmFsbGVsIGV4ZWN1dGlv biBjb2RlLAorICogc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBEU00ga2V5cyBj b25mbGljdGluZyB3aXRoIHBsYW5fbm9kZV9pZCB3ZQorICogY2FuIHVzZSBzbWFsbCBpbnRlZ2Vy cy4KKyAqLworI2RlZmluZSBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVECQkxCisjZGVmaW5lIFBB UkFMTEVMX0FQUExZX0tFWV9NUQkJCTIKKyNkZWZpbmUgUEFSQUxMRUxfQVBQTFlfS0VZX0VSUk9S X1FVRVVFCTMKKworLyogUXVldWUgc2l6ZSBvZiBEU00sIDE2IE1CIGZvciBub3cuICovCisjZGVm aW5lIERTTV9RVUVVRV9TSVpFCSgxNiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogRXJyb3IgcXVl dWUgc2l6ZSBvZiBEU00uIEl0IGlzIGRlc2lyYWJsZSB0byBtYWtlIGl0IGxhcmdlIGVub3VnaCB0 aGF0IGEKKyAqIHR5cGljYWwgRXJyb3JSZXNwb25zZSBjYW4gYmUgc2VudCB3aXRob3V0IGJsb2Nr aW5nLiBUaGF0IHdheSwgYSB3b3JrZXIgdGhhdAorICogZXJyb3JzIG91dCBjYW4gd3JpdGUgdGhl IHdob2xlIG1lc3NhZ2UgaW50byB0aGUgcXVldWUgYW5kIHRlcm1pbmF0ZSB3aXRob3V0CisgKiB3 YWl0aW5nIGZvciB0aGUgdXNlciBiYWNrZW5kLgorICovCisjZGVmaW5lIERTTV9FUlJPUl9RVUVV RV9TSVpFCQkJKDE2ICogMTAyNCkKKworLyoKKyAqIFRoZXJlIGFyZSB0aHJlZSBmaWVsZHMgaW4g ZWFjaCBtZXNzYWdlIHJlY2VpdmVkIGJ5IHRoZSBwYXJhbGxlbCBhcHBseQorICogd29ya2VyOiBz dGFydF9sc24sIGVuZF9sc24gYW5kIHNlbmRfdGltZS4gQmVjYXVzZSB3ZSBoYXZlIHVwZGF0ZWQg dGhlc2UKKyAqIHN0YXRpc3RpY3MgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIsIHdlIGNhbiBp Z25vcmUgdGhlc2UgZmllbGRzIGluIHRoZQorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIChzZWUg ZnVuY3Rpb24gTG9naWNhbFJlcEFwcGx5TG9vcCkuCisgKi8KKyNkZWZpbmUgU0laRV9TVEFUU19N RVNTQUdFICgyICogc2l6ZW9mKFhMb2dSZWNQdHIpICsgc2l6ZW9mKFRpbWVzdGFtcFR6KSkKKwor LyoKKyAqIFRoZSB0eXBlIG9mIHNlc3Npb24tbGV2ZWwgbG9jayBvbiBhIHRyYW5zYWN0aW9uIGJl aW5nIGFwcGxpZWQgb24gYSBsb2dpY2FsCisgKiByZXBsaWNhdGlvbiBzdWJzY3JpYmVyLgorICov CisjZGVmaW5lIFBBUkFMTEVMX0FQUExZX0xPQ0tfU1RSRUFNCTAKKyNkZWZpbmUgUEFSQUxMRUxf QVBQTFlfTE9DS19YQUNUCTEKKworLyoKKyAqIEhhc2ggdGFibGUgZW50cnkgdG8gbWFwIHhpZCB0 byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHN0YXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBQ YXJhbGxlbEFwcGx5V29ya2VyRW50cnkKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsJCQkvKiBIYXNo IGtleSAtLSBtdXN0IGJlIGZpcnN0ICovCisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZv OworfSBQYXJhbGxlbEFwcGx5V29ya2VyRW50cnk7CisKKy8qCisgKiBBIGhhc2ggdGFibGUgdXNl ZCB0byBjYWNoZSB0aGUgc3RhdGUgb2Ygc3RyZWFtaW5nIHRyYW5zYWN0aW9ucyBiZWluZyBhcHBs aWVkCisgKiBieSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqLworc3RhdGljIEhUQUIg KlBhcmFsbGVsQXBwbHlUeG5IYXNoID0gTlVMTDsKKworLyoKKyogQSBsaXN0IChwb29sKSBvZiBh Y3RpdmUgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gVGhlIGluZm9ybWF0aW9uIGZvcgorKiB0aGUg bmV3IHdvcmtlciBpcyBhZGRlZCB0byB0aGUgbGlzdCBhZnRlciBzdWNjZXNzZnVsbHkgbGF1bmNo aW5nIGl0LiBUaGUKKyogbGlzdCBlbnRyeSBpcyByZW1vdmVkIGlmIHRoZXJlIGFyZSBhbHJlYWR5 IGVub3VnaCB3b3JrZXJzIGluIHRoZSB3b3JrZXIKKyogcG9vbCBhdCB0aGUgZW5kIG9mIHRoZSB0 cmFuc2FjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmtlcgorKiBwb29s LCBzZWUgY29tbWVudHMgYXRvcCB0aGlzIGZpbGUuCisgKi8KK3N0YXRpYyBMaXN0ICpQYXJhbGxl bEFwcGx5V29ya2VyUG9vbCA9IE5JTDsKKworLyoKKyAqIEluZm9ybWF0aW9uIHNoYXJlZCBiZXR3 ZWVuIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLwor UGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJlZCA9IE5VTEw7CisKKy8q CisgKiBJcyB0aGVyZSBhIG1lc3NhZ2Ugc2VudCBieSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0 aGF0IHRoZSBsZWFkZXIgYXBwbHkKKyAqIHdvcmtlciBuZWVkcyB0byByZWNlaXZlPworICovCit2 b2xhdGlsZSBzaWdfYXRvbWljX3QgUGFyYWxsZWxBcHBseU1lc3NhZ2VQZW5kaW5nID0gZmFsc2U7 CisKKy8qCisgKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIHJl cXVpcmVkIGZvciBhcHBseWluZyB0aGUKKyAqIGN1cnJlbnQgc3RyZWFtaW5nIHRyYW5zYWN0aW9u LiBJdCBpcyB1c2VkIHRvIHNhdmUgdGhlIGNvc3Qgb2Ygc2VhcmNoaW5nIHRoZQorICogaGFzaCB0 YWJsZSB3aGVuIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIGJldHdlZW4gU1RSRUFNX1NUQVJUIGFuZCBT VFJFQU1fU1RPUC4KKyAqLworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICpzdHJlYW1f YXBwbHlfd29ya2VyID0gTlVMTDsKKworLyogQSBsaXN0IHRvIG1haW50YWluIHN1YnRyYW5zYWN0 aW9ucywgaWYgYW55LiAqLworc3RhdGljIExpc3QgKnN1YnhhY3RsaXN0ID0gTklMOworCitzdGF0 aWMgdm9pZCBwYV9mcmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5m byk7CitzdGF0aWMgUGFyYWxsZWxUcmFuc1N0YXRlIHBhX2dldF94YWN0X3N0YXRlKFBhcmFsbGVs QXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQpOworc3RhdGljIFBhcnRpYWxGaWxlU2V0U3RhdGUg cGFfZ2V0X2ZpbGVzZXRfc3RhdGUodm9pZCk7CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgaXQg aXMgT0sgdG8gc3RhcnQgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIsIGZhbHNlIG90aGVyd2lzZS4K KyAqLworc3RhdGljIGJvb2wKK3BhX2Nhbl9zdGFydChUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlB c3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CisKKwkvKiBPbmx5IGxlYWRlciBhcHBs eSB3b3JrZXJzIGNhbiBzdGFydCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLiAqLworCWlmICghYW1f bGVhZGVyX2FwcGx5X3dvcmtlcigpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEl0IGlz IGdvb2QgdG8gY2hlY2sgZm9yIGFueSBjaGFuZ2UgaW4gdGhlIHN1YnNjcmlwdGlvbiBwYXJhbWV0 ZXIgdG8KKwkgKiBhdm9pZCB0aGUgY2FzZSB3aGVyZSBmb3IgYSB2ZXJ5IGxvbmcgdGltZSB0aGUg Y2hhbmdlIGRvZXNuJ3QgZ2V0CisJICogcmVmbGVjdGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0 aGVyZSBpcyBhIGNvbnN0YW50IGZsb3cgb2Ygc3RyZWFtaW5nCisJICogdHJhbnNhY3Rpb25zIHRo YXQgYXJlIGhhbmRsZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKwkgKgorCSAqIEl0IGlz IGJldHRlciB0byBkbyBpdCBiZWZvcmUgdGhlIGJlbG93IGNoZWNrcyBzbyB0aGF0IHRoZSBsYXRl c3QgdmFsdWVzCisJICogb2Ygc3Vic2NyaXB0aW9uIGNhbiBiZSB1c2VkIGZvciB0aGUgY2hlY2tz LgorCSAqLworCW1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24oKTsKKworCS8qCisJICogRG9uJ3Qg c3RhcnQgYSBuZXcgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMg bm90CisJICogdXNpbmcgcGFyYWxsZWwgc3RyZWFtaW5nIG1vZGUsIG9yIGlmIHRoZSBwdWJsaXNo ZXIgZG9lcyBub3Qgc3VwcG9ydAorCSAqIHBhcmFsbGVsIGFwcGx5LgorCSAqLworCWlmICghTXlM b2dpY2FsUmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoK KwkgKiBEb24ndCBzdGFydCBhIG5ldyBwYXJhbGxlbCB3b3JrZXIgaWYgdXNlciBoYXMgc2V0IHNr aXBsc24gYXMgaXQncworCSAqIHBvc3NpYmxlIHRoYXQgdGhleSB3YW50IHRvIHNraXAgdGhlIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4gRm9yCisJICogc3RyZWFtaW5nIHRyYW5zYWN0aW9ucywgd2Ug bmVlZCB0byBzZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgZmlsZQorCSAqIHNvIHRoYXQg d2UgY2FuIGdldCB0aGUgbGFzdCBMU04gb2YgdGhlIHRyYW5zYWN0aW9uIHRvIGp1ZGdlIHdoZXRo ZXIgdG8KKwkgKiBza2lwIGJlZm9yZSBzdGFydGluZyB0byBhcHBseSB0aGUgY2hhbmdlLgorCSAq LworCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChNeVN1YnNjcmlwdGlvbi0+c2tpcGxzbikpCisJ CXJldHVybiBmYWxzZTsKKworCS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhh dCBhcmUgYmVpbmcgYXBwbGllZCB1c2luZyBhIHBhcmFsbGVsCisJICogYXBwbHkgd29ya2VyLCB3 ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYQorCSAqIHJl bGF0aW9uIHRoYXQgaXMgbm90IGluIHRoZSBSRUFEWSBzdGF0ZSAoc2VlCisJICogc2hvdWxkX2Fw cGx5X2NoYW5nZXNfZm9yX3JlbCkgYXMgd2Ugd29uJ3Qga25vdyByZW1vdGVfZmluYWxfbHNuIGJ5 IHRoYXQKKwkgKiB0aW1lLiBTbywgd2UgZG9uJ3Qgc3RhcnQgdGhlIG5ldyBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgaW4gdGhpcyBjYXNlLgorCSAqLworCWlmICghQWxsVGFibGVzeW5jc1JlYWR5KCkp CisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2V0IHVwIGEg ZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCisgKgorICogV2Ugc2V0IHVwIGEgY29udHJv bCByZWdpb24gdGhhdCBjb250YWlucyBhIGZpeGVkLXNpemUgd29ya2VyIGluZm8KKyAqIChQYXJh bGxlbEFwcGx5V29ya2VyU2hhcmVkKSwgYSBtZXNzYWdlIHF1ZXVlLCBhbmQgYW4gZXJyb3IgcXVl dWUuCisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCisg Ki8KK3N0YXRpYyBib29sCitwYV9zZXR1cF9kc20oUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndp bmZvKQoreworCXNobV90b2NfZXN0aW1hdG9yIGU7CisJU2l6ZQkJc2Vnc2l6ZTsKKwlkc21fc2Vn bWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVk ICpzaGFyZWQ7CisJc2htX21xCSAgICptcTsKKwlTaXplCQlxdWV1ZV9zaXplID0gRFNNX1FVRVVF X1NJWkU7CisJU2l6ZQkJZXJyb3JfcXVldWVfc2l6ZSA9IERTTV9FUlJPUl9RVUVVRV9TSVpFOwor CisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJICoK KwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBhZGRp bmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNoIGNo dW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIgdGhl IGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB0d28gb3RoZXIKKwkgKiBrZXlzIHRvIHRyYWNr IHRoZSBsb2NhdGlvbnMgb2YgdGhlIG1lc3NhZ2UgcXVldWUgYW5kIHRoZSBlcnJvciBtZXNzYWdl CisJICogcXVldWUuCisJICovCisJc2htX3RvY19pbml0aWFsaXplX2VzdGltYXRvcigmZSk7CisJ c2htX3RvY19lc3RpbWF0ZV9jaHVuaygmZSwgc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJTaGFy ZWQpKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZlLCBxdWV1ZV9zaXplKTsKKwlzaG1fdG9j X2VzdGltYXRlX2NodW5rKCZlLCBlcnJvcl9xdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0aW1h dGVfa2V5cygmZSwgMyk7CisJc2Vnc2l6ZSA9IHNobV90b2NfZXN0aW1hdGUoJmUpOworCisJLyog Q3JlYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGVzdGFibGlzaCBhIHRhYmxlIG9m IGNvbnRlbnRzLiAqLworCXNlZyA9IGRzbV9jcmVhdGUoc2htX3RvY19lc3RpbWF0ZSgmZSksIDAp OworCWlmICghc2VnKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0b2MgPSBzaG1fdG9jX2NyZWF0ZShQ R19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVzcyhzZWcpLAorCQkJ CQkJIHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9uLiAqLworCXNoYXJl ZCA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJl ZCkpOworCVNwaW5Mb2NrSW5pdCgmc2hhcmVkLT5tdXRleCk7CisKKwlzaGFyZWQtPnhhY3Rfc3Rh dGUgPSBQQVJBTExFTF9UUkFOU19VTktOT1dOOworCXBnX2F0b21pY19pbml0X3UzMigmKHNoYXJl ZC0+cGVuZGluZ19zdHJlYW1fY291bnQpLCAwKTsKKwlzaGFyZWQtPmxhc3RfY29tbWl0X2VuZCA9 IEludmFsaWRYTG9nUmVjUHRyOworCXNoYXJlZC0+ZmlsZXNldF9zdGF0ZSA9IEZTX0VNUFRZOwor CisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfU0hBUkVELCBzaGFyZWQp OworCisJLyogU2V0IHVwIG1lc3NhZ2UgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEgPSBz aG1fbXFfY3JlYXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBxdWV1ZV9zaXplKSwgcXVldWVfc2l6 ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlfTVEsIG1xKTsKKwlz aG1fbXFfc2V0X3NlbmRlcihtcSwgTXlQcm9jKTsKKworCS8qIEF0dGFjaCB0aGUgcXVldWUuICov CisJd2luZm8tPm1xX2hhbmRsZSA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwkv KiBTZXQgdXAgZXJyb3IgcXVldWUgZm9yIHRoZSB3b3JrZXIuICovCisJbXEgPSBzaG1fbXFfY3Jl YXRlKHNobV90b2NfYWxsb2NhdGUodG9jLCBlcnJvcl9xdWV1ZV9zaXplKSwKKwkJCQkJICAgZXJy b3JfcXVldWVfc2l6ZSk7CisJc2htX3RvY19pbnNlcnQodG9jLCBQQVJBTExFTF9BUFBMWV9LRVlf RVJST1JfUVVFVUUsIG1xKTsKKwlzaG1fbXFfc2V0X3JlY2VpdmVyKG1xLCBNeVByb2MpOworCisJ LyogQXR0YWNoIHRoZSBxdWV1ZS4gKi8KKwl3aW5mby0+ZXJyb3JfbXFfaGFuZGxlID0gc2htX21x X2F0dGFjaChtcSwgc2VnLCBOVUxMKTsKKworCS8qIFJldHVybiByZXN1bHRzIHRvIGNhbGxlci4g Ki8KKwl3aW5mby0+ZHNtX3NlZyA9IHNlZzsKKwl3aW5mby0+c2hhcmVkID0gc2hhcmVkOworCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBUcnkgdG8gZ2V0IGEgcGFyYWxsZWwgYXBwbHkgd29y a2VyIGZyb20gdGhlIHBvb2wuIElmIG5vbmUgaXMgYXZhaWxhYmxlIHRoZW4KKyAqIHN0YXJ0IGEg bmV3IG9uZS4KKyAqLworc3RhdGljIFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoKK3BhX2xhdW5j aF9wYXJhbGxlbF93b3JrZXIodm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJ Ym9vbAkJbGF1bmNoZWQ7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCUxpc3RD ZWxsICAgKmxjOworCisJLyogVHJ5IHRvIGdldCBhbiBhdmFpbGFibGUgcGFyYWxsZWwgYXBwbHkg d29ya2VyIGZyb20gdGhlIHdvcmtlciBwb29sLiAqLworCWZvcmVhY2gobGMsIFBhcmFsbGVsQXBw bHlXb3JrZXJQb29sKQorCXsKKwkJd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikg bGZpcnN0KGxjKTsKKworCQlpZiAoIXdpbmZvLT5pbl91c2UpCisJCQlyZXR1cm4gd2luZm87CisJ fQorCisJLyoKKwkgKiBTdGFydCBhIG5ldyBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisJICoKKwkg KiBUaGUgd29ya2VyIGluZm8gY2FuIGJlIHVzZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgd29y a2VyIHByb2Nlc3MsIHNvCisJICogY3JlYXRlIGl0IGluIGEgcGVybWFuZW50IGNvbnRleHQuCisJ ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOwor CisJd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKikgcGFsbG9jMChzaXplb2YoUGFy YWxsZWxBcHBseVdvcmtlckluZm8pKTsKKworCS8qIFNldHVwIHNoYXJlZCBtZW1vcnkuICovCisJ aWYgKCFwYV9zZXR1cF9kc20od2luZm8pKQorCXsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCQlwZnJlZSh3aW5mbyk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxhdW5j aGVkID0gbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE15TG9naWNhbFJlcFdvcmtlci0+ZGJpZCwK KwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+b2lkLAorCQkJCQkJCQkJCU15U3Vic2NyaXB0aW9u LT5uYW1lLAorCQkJCQkJCQkJCU15TG9naWNhbFJlcFdvcmtlci0+dXNlcmlkLAorCQkJCQkJCQkJ CUludmFsaWRPaWQsCisJCQkJCQkJCQkJZHNtX3NlZ21lbnRfaGFuZGxlKHdpbmZvLT5kc21fc2Vn KSk7CisKKwlpZiAobGF1bmNoZWQpCisJeworCQlQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCA9IGxh cHBlbmQoUGFyYWxsZWxBcHBseVdvcmtlclBvb2wsIHdpbmZvKTsKKwl9CisJZWxzZQorCXsKKwkJ cGFfZnJlZV93b3JrZXJfaW5mbyh3aW5mbyk7CisJCXdpbmZvID0gTlVMTDsKKwl9CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gd2luZm87Cit9CisKKy8q CisgKiBBbGxvY2F0ZSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB0aGF0IHdpbGwgYmUgdXNlZCBm b3IgdGhlIHNwZWNpZmllZCB4aWQuCisgKgorICogV2UgZmlyc3QgdHJ5IHRvIGdldCBhbiBhdmFp bGFibGUgd29ya2VyIGZyb20gdGhlIHBvb2wsIGlmIGFueSBhbmQgdGhlbiB0cnkKKyAqIHRvIGxh dW5jaCBhIG5ldyB3b3JrZXIuIE9uIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiwgcmVtZW1iZXIgdGhl IHdvcmtlcgorICogaW5mb3JtYXRpb24gaW4gdGhlIGhhc2ggdGFibGUgc28gdGhhdCB3ZSBjYW4g Z2V0IGl0IGxhdGVyIGZvciBwcm9jZXNzaW5nIHRoZQorICogc3RyZWFtaW5nIGNoYW5nZXMuCisg Ki8KK3ZvaWQKK3BhX2FsbG9jYXRlX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwlib29s CQlmb3VuZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSBOVUxMOworCVBhcmFs bGVsQXBwbHlXb3JrZXJFbnRyeSAqZW50cnk7CisKKwlpZiAoIXBhX2Nhbl9zdGFydCh4aWQpKQor CQlyZXR1cm47CisKKwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIHN0YXRlIGhhc2h0YWJsZS4gKi8KKwlpZiAoIVBhcmFsbGVsQXBwbHlUeG5I YXNoKQorCXsKKwkJSEFTSENUTAkJY3RsOworCisJCU1lbVNldCgmY3RsLCAwLCBzaXplb2YoY3Rs KSk7CisJCWN0bC5rZXlzaXplID0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworCQljdGwuZW50cnlz aXplID0gc2l6ZW9mKFBhcmFsbGVsQXBwbHlXb3JrZXJFbnRyeSk7CisJCWN0bC5oY3h0ID0gQXBw bHlDb250ZXh0OworCisJCVBhcmFsbGVsQXBwbHlUeG5IYXNoID0gaGFzaF9jcmVhdGUoImxvZ2lj YWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VycyBoYXNoIiwKKwkJCQkJCQkJCQkg ICAxNiwgJmN0bCwKKwkJCQkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTIHwgSEFTSF9D T05URVhUKTsKKwl9CisKKwl3aW5mbyA9IHBhX2xhdW5jaF9wYXJhbGxlbF93b3JrZXIoKTsKKwlp ZiAoIXdpbmZvKQorCQlyZXR1cm47CisKKwkvKiBDcmVhdGUgYW4gZW50cnkgZm9yIHRoZSByZXF1 ZXN0ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQYXJhbGxlbEFwcGx5 VHhuSGFzaCwgJnhpZCwgSEFTSF9FTlRFUiwgJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJCWVsb2co RVJST1IsICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOworCisJLyogVXBkYXRlIHRoZSB0cmFuc2Fj dGlvbiBpbmZvcm1hdGlvbiBpbiBzaGFyZWQgbWVtb3J5LiAqLworCVNwaW5Mb2NrQWNxdWlyZSgm d2luZm8tPnNoYXJlZC0+bXV0ZXgpOworCXdpbmZvLT5zaGFyZWQtPnhhY3Rfc3RhdGUgPSBQQVJB TExFTF9UUkFOU19VTktOT1dOOworCXdpbmZvLT5zaGFyZWQtPnhpZCA9IHhpZDsKKwlTcGluTG9j a1JlbGVhc2UoJndpbmZvLT5zaGFyZWQtPm11dGV4KTsKKworCXdpbmZvLT5pbl91c2UgPSB0cnVl OworCXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNlOworCWVudHJ5LT53aW5mbyA9IHdp bmZvOworCWVudHJ5LT54aWQgPSB4aWQ7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBhc3NpZ25lZCB3 b3JrZXIgZm9yIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiwgaWYgYW55LgorICovCitQYXJhbGxlbEFw cGx5V29ya2VySW5mbyAqCitwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwli b29sCQlmb3VuZDsKKwlQYXJhbGxlbEFwcGx5V29ya2VyRW50cnkgKmVudHJ5OworCisJaWYgKCFU cmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghUGFyYWxs ZWxBcHBseVR4bkhhc2gpCisJCXJldHVybiBOVUxMOworCisJLyogUmV0dXJuIHRoZSBjYWNoZWQg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGlmIHZhbGlkLiAqLworCWlmIChzdHJlYW1fYXBwbHlfd29y a2VyKQorCQlyZXR1cm4gc3RyZWFtX2FwcGx5X3dvcmtlcjsKKworCS8qIEZpbmQgYW4gZW50cnkg Zm9yIHRoZSByZXF1ZXN0ZWQgdHJhbnNhY3Rpb24uICovCisJZW50cnkgPSBoYXNoX3NlYXJjaChQ YXJhbGxlbEFwcGx5VHhuSGFzaCwgJnhpZCwgSEFTSF9GSU5ELCAmZm91bmQpOworCWlmIChmb3Vu ZCkKKwl7CisJCS8qIFRoZSB3b3JrZXIgbXVzdCBub3QgaGF2ZSBleGl0ZWQuICAqLworCQlBc3Nl cnQoZW50cnktPndpbmZvLT5pbl91c2UpOworCQlyZXR1cm4gZW50cnktPndpbmZvOworCX0KKwor CXJldHVybiBOVUxMOworfQorCisvKgorICogTWFrZXMgdGhlIHdvcmtlciBhdmFpbGFibGUgZm9y IHJldXNlLgorICoKKyAqIFRoaXMgcmVtb3ZlcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGVu dHJ5IGZyb20gdGhlIGhhc2ggdGFibGUgc28gdGhhdCBpdAorICogY2FuJ3QgYmUgdXNlZC4gSWYg dGhlcmUgYXJlIGVub3VnaCB3b3JrZXJzIGluIHRoZSBwb29sLCBpdCBzdG9wcyB0aGUgd29ya2Vy CisgKiBhbmQgZnJlZXMgdGhlIGNvcnJlc3BvbmRpbmcgaW5mby4gT3RoZXJ3aXNlIGl0IGp1c3Qg bWFya3MgdGhlIHdvcmtlciBhcworICogYXZhaWxhYmxlIGZvciByZXVzZS4KKyAqCisgKiBGb3Ig bW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd29ya2VyIHBvb2wsIHNlZSBjb21tZW50cyBhdG9w IHRoaXMgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3BhX2ZyZWVfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlBc3NlcnQoIWFtX3BhcmFsbGVsX2FwcGx5X3dvcmtl cigpKTsKKwlBc3NlcnQod2luZm8tPmluX3VzZSk7CisJQXNzZXJ0KHBhX2dldF94YWN0X3N0YXRl KHdpbmZvLT5zaGFyZWQpID09IFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKworCWlmICghaGFz aF9zZWFyY2goUGFyYWxsZWxBcHBseVR4bkhhc2gsICZ3aW5mby0+c2hhcmVkLT54aWQsIEhBU0hf UkVNT1ZFLCBOVUxMKSkKKwkJZWxvZyhFUlJPUiwgImhhc2ggdGFibGUgY29ycnVwdGVkIik7CisK KwkvKgorCSAqIFN0b3AgdGhlIHdvcmtlciBpZiB0aGVyZSBhcmUgZW5vdWdoIHdvcmtlcnMgaW4g dGhlIHBvb2wuCisJICoKKwkgKiBYWFggQWRkaXRpb25hbGx5LCB3ZSBhbHNvIHN0b3AgdGhlIHdv cmtlciBpZiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlcgorCSAqIHNlcmlhbGl6ZSBwYXJ0IG9mIHRo ZSB0cmFuc2FjdGlvbiBkYXRhIGR1ZSB0byBhIHNlbmQgdGltZW91dC4gVGhpcyBpcworCSAqIGJl Y2F1c2UgdGhlIG1lc3NhZ2UgY291bGQgYmUgcGFydGlhbGx5IHdyaXR0ZW4gdG8gdGhlIHF1ZXVl IGFuZCB0aGVyZQorCSAqIGlzIG5vIHdheSB0byBjbGVhbiB0aGUgcXVldWUgb3RoZXIgdGhhbiBy ZXNlbmRpbmcgdGhlIG1lc3NhZ2UgdW50aWwgaXQKKwkgKiBzdWNjZWVkcy4gSW5zdGVhZCBvZiB0 cnlpbmcgdG8gc2VuZCB0aGUgZGF0YSB3aGljaCBhbnl3YXkgd291bGQgaGF2ZQorCSAqIGJlZW4g c2VyaWFsaXplZCBhbmQgdGhlbiBsZXR0aW5nIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZGVh bCB3aXRoCisJICogdGhlIHNwdXJpb3VzIG1lc3NhZ2UsIHdlIHN0b3AgdGhlIHdvcmtlci4KKwkg Ki8KKwlpZiAod2luZm8tPnNlcmlhbGl6ZV9jaGFuZ2VzIHx8CisJCWxpc3RfbGVuZ3RoKFBhcmFs bGVsQXBwbHlXb3JrZXJQb29sKSA+CisJCShtYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19wZXJf c3Vic2NyaXB0aW9uIC8gMikpCisJeworCQlpbnQJCQlzbG90X25vOworCQl1aW50MTYJCWdlbmVy YXRpb247CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisJCWdl bmVyYXRpb24gPSB3aW5mby0+c2hhcmVkLT5sb2dpY2FscmVwX3dvcmtlcl9nZW5lcmF0aW9uOwor CQlzbG90X25vID0gd2luZm8tPnNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfc2xvdF9ubzsKKwkJ U3BpbkxvY2tSZWxlYXNlKCZ3aW5mby0+c2hhcmVkLT5tdXRleCk7CisKKwkJbG9naWNhbHJlcF9w YV93b3JrZXJfc3RvcChzbG90X25vLCBnZW5lcmF0aW9uKTsKKworCQlwYV9mcmVlX3dvcmtlcl9p bmZvKHdpbmZvKTsKKworCQlyZXR1cm47CisJfQorCisJd2luZm8tPmluX3VzZSA9IGZhbHNlOwor CXdpbmZvLT5zZXJpYWxpemVfY2hhbmdlcyA9IGZhbHNlOworfQorCisvKgorICogRnJlZSB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uIGFuZCB1bmxpbmsgdGhlIGZpbGVzIHdp dGgKKyAqIHNlcmlhbGl6ZWQgY2hhbmdlcyBpZiBhbnkuCisgKi8KK3N0YXRpYyB2b2lkCitwYV9m cmVlX3dvcmtlcl9pbmZvKFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbykKK3sKKwlBc3Nl cnQod2luZm8pOworCisJaWYgKHdpbmZvLT5tcV9oYW5kbGUpCisJCXNobV9tcV9kZXRhY2god2lu Zm8tPm1xX2hhbmRsZSk7CisKKwlpZiAod2luZm8tPmVycm9yX21xX2hhbmRsZSkKKwkJc2htX21x X2RldGFjaCh3aW5mby0+ZXJyb3JfbXFfaGFuZGxlKTsKKworCS8qIFVubGluayB0aGUgZmlsZXMg d2l0aCBzZXJpYWxpemVkIGNoYW5nZXMuICovCisJaWYgKHdpbmZvLT5zZXJpYWxpemVfY2hhbmdl cykKKwkJc3RyZWFtX2NsZWFudXBfZmlsZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgd2lu Zm8tPnNoYXJlZC0+eGlkKTsKKworCWlmICh3aW5mby0+ZHNtX3NlZykKKwkJZHNtX2RldGFjaCh3 aW5mby0+ZHNtX3NlZyk7CisKKwkvKiBSZW1vdmUgZnJvbSB0aGUgd29ya2VyIHBvb2wuICovCisJ UGFyYWxsZWxBcHBseVdvcmtlclBvb2wgPSBsaXN0X2RlbGV0ZV9wdHIoUGFyYWxsZWxBcHBseVdv cmtlclBvb2wsIHdpbmZvKTsKKworCXBmcmVlKHdpbmZvKTsKK30KKworLyoKKyAqIERldGFjaCB0 aGUgZXJyb3IgcXVldWUgZm9yIGFsbCBwYXJhbGxlbCBhcHBseSB3b3JrZXJzLgorICovCit2b2lk CitwYV9kZXRhY2hfYWxsX2Vycm9yX21xKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlm b3JlYWNoKGxjLCBQYXJhbGxlbEFwcGx5V29ya2VyUG9vbCkKKwl7CisJCVBhcmFsbGVsQXBwbHlX b3JrZXJJbmZvICp3aW5mbyA9IChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKSBsZmlyc3QobGMp OworCisJCXNobV9tcV9kZXRhY2god2luZm8tPmVycm9yX21xX2hhbmRsZSk7CisJCXdpbmZvLT5l cnJvcl9tcV9oYW5kbGUgPSBOVUxMOworCX0KK30KKworLyoKKyAqIENoZWNrIGlmIHRoZXJlIGFy ZSBhbnkgcGVuZGluZyBzcG9vbGVkIG1lc3NhZ2VzLgorICovCitzdGF0aWMgYm9vbAorcGFfaGFz X3Nwb29sZWRfbWVzc2FnZV9wZW5kaW5nKCkKK3sKKwlQYXJ0aWFsRmlsZVNldFN0YXRlIGZpbGVz ZXRfc3RhdGU7CisKKwlmaWxlc2V0X3N0YXRlID0gcGFfZ2V0X2ZpbGVzZXRfc3RhdGUoKTsKKwor CXJldHVybiAoZmlsZXNldF9zdGF0ZSAhPSBGU19FTVBUWSk7Cit9CisKKy8qCisgKiBSZXBsYXkg dGhlIHNwb29sZWQgbWVzc2FnZXMgb25jZSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBoYXMgZmlu aXNoZWQKKyAqIHNlcmlhbGl6aW5nIGNoYW5nZXMgdG8gdGhlIGZpbGUuCisgKi8KK3N0YXRpYyB2 b2lkCitwYV9zcG9vbGVkX21lc3NhZ2VzKHZvaWQpCit7CisJUGFydGlhbEZpbGVTZXRTdGF0ZSBm aWxlc2V0X3N0YXRlOworCisJZmlsZXNldF9zdGF0ZSA9IHBhX2dldF9maWxlc2V0X3N0YXRlKCk7 CisKKwkvKgorCSAqIElmIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGlzIGJ1c3kgc2VyaWFsaXpp bmcgdGhlIHBhcnRpYWwgY2hhbmdlcyB0aGVuCisJICogYWNxdWlyZSB0aGUgc3RyZWFtIGxvY2sg bm93IGFuZCB3YWl0IGZvciB0aGUgbGVhZGVyIHdvcmtlciB0byBmaW5pc2gKKwkgKiBzZXJpYWxp emluZyB0aGUgY2hhbmdlcy4gT3RoZXJ3aXNlLCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdv bid0IGdldAorCSAqIGEgY2hhbmNlIHRvIHJlY2VpdmUgYSBTVFJFQU1fU1RPUCAoYW5kIGFjcXVp cmUgdGhlIHN0cmVhbSBsb2NrKSB1bnRpbAorCSAqIHRoZSBsZWFkZXIgaGFkIHNlcmlhbGl6ZWQg YWxsIGNoYW5nZXMgd2hpY2ggY2FuIGxlYWQgdG8gdW5kZXRlY3RlZAorCSAqIGRlYWRsb2NrLgor CSAqCisJICogTm90ZSB0aGF0IHRoZSBmaWxlc2V0IHN0YXRlIGNhbiBiZSBGU19TRVJJQUxJWkVf RE9ORSBvbmNlIHRoZSBsZWFkZXIKKwkgKiB3b3JrZXIgaGFzIGZpbmlzaGVkIHNlcmlhbGl6aW5n IHRoZSBjaGFuZ2VzLgorCSAqLworCWlmIChmaWxlc2V0X3N0YXRlID09IEZTX1NFUklBTElaRV9J Tl9QUk9HUkVTUykKKwl7CisJCXBhX2xvY2tfc3RyZWFtKE15UGFyYWxsZWxTaGFyZWQtPnhpZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFsbGVsU2hhcmVkLT54 aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJZmlsZXNldF9zdGF0ZSA9IHBhX2dldF9maWxlc2V0 X3N0YXRlKCk7CisJfQorCisJLyoKKwkgKiBXZSBjYW5ub3QgcmVhZCB0aGUgZmlsZSBpbW1lZGlh dGVseSBhZnRlciB0aGUgbGVhZGVyIGhhcyBzZXJpYWxpemVkIGFsbAorCSAqIGNoYW5nZXMgdG8g dGhlIGZpbGUgYmVjYXVzZSB0aGVyZSBtYXkgc3RpbGwgYmUgbWVzc2FnZXMgaW4gdGhlIG1lbW9y eQorCSAqIHF1ZXVlLiBXZSB3aWxsIGFwcGx5IGFsbCBzcG9vbGVkIG1lc3NhZ2VzIHRoZSBuZXh0 IHRpbWUgd2UgY2FsbCB0aGlzCisJICogZnVuY3Rpb24gYW5kIHRoYXQgd2lsbCBlbnN1cmUgdGhl cmUgYXJlIG5vIG1lc3NhZ2VzIGxlZnQgaW4gdGhlIG1lbW9yeQorCSAqIHF1ZXVlLgorCSAqLwor CWlmIChmaWxlc2V0X3N0YXRlID09IEZTX1NFUklBTElaRV9ET05FKQorCXsKKwkJcGFfc2V0X2Zp bGVzZXRfc3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgRlNfUkVBRFkpOworCX0KKwllbHNlIGlmIChm aWxlc2V0X3N0YXRlID09IEZTX1JFQURZKQorCXsKKwkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcygm TXlQYXJhbGxlbFNoYXJlZC0+ZmlsZXNldCwKKwkJCQkJCQkgICBNeVBhcmFsbGVsU2hhcmVkLT54 aWQsCisJCQkJCQkJICAgSW52YWxpZFhMb2dSZWNQdHIpOworCQlwYV9zZXRfZmlsZXNldF9zdGF0 ZShNeVBhcmFsbGVsU2hhcmVkLCBGU19FTVBUWSk7CisJfQorfQorCisvKgorICogSW50ZXJydXB0 IGhhbmRsZXIgZm9yIG1haW4gbG9vcCBvZiBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3N0 YXRpYyB2b2lkCitQcm9jZXNzUGFyYWxsZWxBcHBseUludGVycnVwdHModm9pZCkKK3sKKwlDSEVD S19GT1JfSU5URVJSVVBUUygpOworCisJaWYgKFNodXRkb3duUmVxdWVzdFBlbmRpbmcpCisJewor CQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVs IGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiBoYXMgZmluaXNoZWQiLAorCQkJ CQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisKKwkJcHJvY19leGl0KDApOworCX0KKworCWlm IChDb25maWdSZWxvYWRQZW5kaW5nKQorCXsKKwkJQ29uZmlnUmVsb2FkUGVuZGluZyA9IGZhbHNl OworCQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwl9Cit9CisKKy8qIFBhcmFsbGVs IGFwcGx5IHdvcmtlciBtYWluIGxvb3AuICovCitzdGF0aWMgdm9pZAorTG9naWNhbFBhcmFsbGVs QXBwbHlMb29wKHNobV9tcV9oYW5kbGUgKm1xaCkKK3sKKwlzaG1fbXFfcmVzdWx0IHNobXFfcmVz OworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCU1lbW9yeUNvbnRleHQgb2xk Y3h0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7CisKKwkvKgorCSAqIEluaXQgdGhlIEFwcGx5TWVz c2FnZUNvbnRleHQgd2hpY2ggd2UgY2xlYW4gdXAgYWZ0ZXIgZWFjaCByZXBsaWNhdGlvbgorCSAq IHByb3RvY29sIG1lc3NhZ2UuCisJICovCisJQXBwbHlNZXNzYWdlQ29udGV4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShBcHBseUNvbnRleHQsCisJCQkJCQkJCQkJCQkiQXBwbHlNZXNzYWdlQ29u dGV4dCIsCisJCQkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8qCisJICog UHVzaCBhcHBseSBlcnJvciBjb250ZXh0IGNhbGxiYWNrLiBGaWVsZHMgd2lsbCBiZSBmaWxsZWQg d2hpbGUgYXBwbHlpbmcKKwkgKiBhIGNoYW5nZS4KKwkgKi8KKwllcnJjYWxsYmFjay5jYWxsYmFj ayA9IGFwcGx5X2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJ Zm9yICg7OykKKwl7CisJCXZvaWQJICAgKmRhdGE7CisJCVNpemUJCWxlbjsKKworCQlQcm9jZXNz UGFyYWxsZWxBcHBseUludGVycnVwdHMoKTsKKworCQkvKiBFbnN1cmUgd2UgYXJlIHJlYWRpbmcg dGhlIGRhdGEgaW50byBvdXIgbWVtb3J5IGNvbnRleHQuICovCisJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0KTsKKworCQlzaG1xX3JlcyA9IHNobV9tcV9yZWNlaXZl KG1xaCwgJmxlbiwgJmRhdGEsIHRydWUpOworCisJCWlmIChzaG1xX3JlcyA9PSBTSE1fTVFfU1VD Q0VTUykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgczsKKwkJCWludAkJCWM7CisKKwkJCWlmIChs ZW4gPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBtZXNzYWdlIGxlbmd0aCIpOworCisJ CQlzLmN1cnNvciA9IDA7CisJCQlzLm1heGxlbiA9IC0xOworCQkJcy5kYXRhID0gKGNoYXIgKikg ZGF0YTsKKwkJCXMubGVuID0gbGVuOworCisJCQkvKgorCQkJICogVGhlIGZpcnN0IGJ5dGUgb2Yg bWVzc2FnZXMgc2VudCBmcm9tIGxlYWRlciBhcHBseSB3b3JrZXIgdG8KKwkJCSAqIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMgY2FuIG9ubHkgYmUgJ3cnLgorCQkJICovCisJCQljID0gcHFfZ2V0bXNn Ynl0ZSgmcyk7CisJCQlpZiAoYyAhPSAndycpCisJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQg bWVzc2FnZSBcIiVjXCIiLCBjKTsKKworCQkJLyoKKwkJCSAqIElnbm9yZSBzdGF0aXN0aWNzIGZp ZWxkcyB0aGF0IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IHRoZSBsZWFkZXIKKwkJCSAqIGFwcGx5IHdv cmtlci4KKwkJCSAqCisJCQkgKiBYWFggV2UgY2FuIGF2b2lkIHNlbmRpbmcgdGhlIHN0YXRpc3Rp Y3MgZmllbGRzIGZyb20gdGhlIGxlYWRlcgorCQkJICogYXBwbHkgd29ya2VyIGJ1dCBmb3IgdGhh dCwgaXQgbmVlZHMgdG8gcmVidWlsZCB0aGUgZW50aXJlCisJCQkgKiBtZXNzYWdlIGJ5IHJlbW92 aW5nIHRoZXNlIGZpZWxkcyB3aGljaCBjb3VsZCBiZSBtb3JlIHdvcmsgdGhhbgorCQkJICogc2lt cGx5IGlnbm9yaW5nIHRoZXNlIGZpZWxkcyBpbiB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgor CQkJICovCisJCQlzLmN1cnNvciArPSBTSVpFX1NUQVRTX01FU1NBR0U7CisKKwkJCWFwcGx5X2Rp c3BhdGNoKCZzKTsKKwkJfQorCQllbHNlIGlmIChzaG1xX3JlcyA9PSBTSE1fTVFfV09VTERfQkxP Q0spCisJCXsKKwkJCS8qIFJlcGxheSB0aGUgY2hhbmdlcyBmcm9tIHRoZSBmaWxlLCBpZiBhbnku ICovCisJCQlpZiAocGFfaGFzX3Nwb29sZWRfbWVzc2FnZV9wZW5kaW5nKCkpCisJCQl7CisJCQkJ cGFfc3Bvb2xlZF9tZXNzYWdlcygpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWludAkJCXJj OworCisJCQkJLyogV2FpdCBmb3IgbW9yZSB3b3JrLiAqLworCQkJCXJjID0gV2FpdExhdGNoKE15 TGF0Y2gsCisJCQkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05f UE1fREVBVEgsCisJCQkJCQkJICAgMTAwMEwsCisJCQkJCQkJICAgV0FJVF9FVkVOVF9MT0dJQ0FM X1BBUkFMTEVMX0FQUExZX01BSU4pOworCisJCQkJaWYgKHJjICYgV0xfTEFUQ0hfU0VUKQorCQkJ CQlSZXNldExhdGNoKE15TGF0Y2gpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0 KHNobXFfcmVzID09IFNITV9NUV9ERVRBQ0hFRCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJ CQkgZXJybXNnKCJsb3N0IGNvbm5lY3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gYXBw bHkgd29ya2VyIikpKTsKKwkJfQorCisJCU1lbW9yeUNvbnRleHRSZXNldChBcHBseU1lc3NhZ2VD b250ZXh0KTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJfQorCisJLyogUG9w IHRoZSBlcnJvciBjb250ZXh0IHN0YWNrLiAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJj YWxsYmFjay5wcmV2aW91czsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQor CisvKgorICogTWFrZSBzdXJlIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRyaWVzIHRvIHJlYWQg ZnJvbSBvdXIgZXJyb3IgcXVldWUgb25lIG1vcmUKKyAqIHRpbWUuIFRoaXMgZ3VhcmRzIGFnYWlu c3QgdGhlIGNhc2Ugd2hlcmUgd2UgZXhpdCB1bmNsZWFubHkgd2l0aG91dCBzZW5kaW5nCisgKiBh biBFcnJvclJlc3BvbnNlLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHNvbWUgY29kZSBjYWxscyBwcm9j X2V4aXQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyB2b2lkCitwYV9zaHV0ZG93bihpbnQgY29kZSwg RGF0dW0gYXJnKQoreworCVNlbmRQcm9jU2lnbmFsKE15TG9naWNhbFJlcFdvcmtlci0+YXBwbHlf bGVhZGVyX3BpZCwKKwkJCQkgICBQUk9DU0lHX1BBUkFMTEVMX0FQUExZX01FU1NBR0UsCisJCQkJ ICAgSW52YWxpZEJhY2tlbmRJZCk7CisKKwlkc21fZGV0YWNoKChkc21fc2VnbWVudCAqKSBEYXR1 bUdldFBvaW50ZXIoYXJnKSk7Cit9CisKKy8qCisgKiBQYXJhbGxlbCBhcHBseSB3b3JrZXIgZW50 cnkgcG9pbnQuCisgKi8KK3ZvaWQKK1BhcmFsbGVsQXBwbHlXb3JrZXJNYWluKERhdHVtIG1haW5f YXJnKQoreworCVBhcmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKnNoYXJlZDsKKwlkc21faGFuZGxl CWhhbmRsZTsKKwlkc21fc2VnbWVudCAqc2VnOworCXNobV90b2MgICAgKnRvYzsKKwlzaG1fbXEJ ICAgKm1xOworCXNobV9tcV9oYW5kbGUgKm1xaDsKKwlzaG1fbXFfaGFuZGxlICplcnJvcl9tcWg7 CisJUmVwT3JpZ2luSWQgb3JpZ2luaWQ7CisJaW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldElu dDMyKG1haW5fYXJnKTsKKwljaGFyCQlvcmlnaW5uYW1lW05BTUVEQVRBTEVOXTsKKworCS8qIFNl dHVwIHNpZ25hbCBoYW5kbGluZy4gKi8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJG b3JDb25maWdSZWxvYWQpOworCXBxc2lnbmFsKFNJR0lOVCwgU2lnbmFsSGFuZGxlckZvclNodXRk b3duUmVxdWVzdCk7CisJcHFzaWduYWwoU0lHVEVSTSwgZGllKTsKKwlCYWNrZ3JvdW5kV29ya2Vy VW5ibG9ja1NpZ25hbHMoKTsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBkeW5hbWljIHNoYXJl ZCBtZW1vcnkgc2VnbWVudCBmb3IgdGhlIHBhcmFsbGVsIGFwcGx5LCBhbmQKKwkgKiBmaW5kIGl0 cyB0YWJsZSBvZiBjb250ZW50cy4KKwkgKgorCSAqIExpa2UgcGFyYWxsZWwgcXVlcnksIHdlIGRv bid0IG5lZWQgcmVzb3VyY2Ugb3duZXIgYnkgdGhpcyB0aW1lLiBTZWUKKwkgKiBQYXJhbGxlbFdv cmtlck1haW4uCisJICovCisJbWVtY3B5KCZoYW5kbGUsIE15Qmd3b3JrZXJFbnRyeS0+Ymd3X2V4 dHJhLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRzbV9hdHRhY2goaGFuZGxlKTsKKwlp ZiAoIXNlZykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9O T1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ1bmFibGUgdG8gbWFwIGR5 bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50IikpKTsKKworCXRvYyA9IHNobV90b2NfYXR0YWNo KFBHX0xPR0lDQUxfQVBQTFlfU0hNX01BR0lDLCBkc21fc2VnbWVudF9hZGRyZXNzKHNlZykpOwor CWlmICghdG9jKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNU X05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coImJhZCBtYWdpYyBudW1i ZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiKSkpOworCisJYmVmb3JlX3NobWVt X2V4aXQocGFfc2h1dGRvd24sIFBvaW50ZXJHZXREYXR1bShzZWcpKTsKKworCS8qIExvb2sgdXAg dGhlIHNoYXJlZCBpbmZvcm1hdGlvbi4gKi8KKwlzaGFyZWQgPSBzaG1fdG9jX2xvb2t1cCh0b2Ms IFBBUkFMTEVMX0FQUExZX0tFWV9TSEFSRUQsIGZhbHNlKTsKKwlNeVBhcmFsbGVsU2hhcmVkID0g c2hhcmVkOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICovCisJ bXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0FQUExZX0tFWV9NUSwgZmFsc2UpOwor CXNobV9tcV9zZXRfcmVjZWl2ZXIobXEsIE15UHJvYyk7CisJbXFoID0gc2htX21xX2F0dGFjaCht cSwgc2VnLCBOVUxMKTsKKworCS8qCisJICogUHJpbWFyeSBpbml0aWFsaXphdGlvbiBpcyBjb21w bGV0ZS4gTm93LCB3ZSBjYW4gYXR0YWNoIHRvIG91ciBzbG90LgorCSAqIFRoaXMgaXMgdG8gZW5z dXJlIHRoYXQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgZG9lcyBub3Qgd3JpdGUgZGF0YSB0bwor CSAqIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBxdWV1ZS4KKwkgKi8KKwlsb2dpY2FscmVwX3dv cmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOworCisJU3BpbkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVs U2hhcmVkLT5tdXRleCk7CisJTXlQYXJhbGxlbFNoYXJlZC0+bG9naWNhbHJlcF93b3JrZXJfZ2Vu ZXJhdGlvbiA9IE15TG9naWNhbFJlcFdvcmtlci0+Z2VuZXJhdGlvbjsKKwlNeVBhcmFsbGVsU2hh cmVkLT5sb2dpY2FscmVwX3dvcmtlcl9zbG90X25vID0gd29ya2VyX3Nsb3Q7CisJU3BpbkxvY2tS ZWxlYXNlKCZNeVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisKKwkvKgorCSAqIEF0dGFjaCB0byB0 aGUgZXJyb3IgcXVldWUuCisJICovCisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVM X0FQUExZX0tFWV9FUlJPUl9RVUVVRSwgZmFsc2UpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBN eVByb2MpOworCWVycm9yX21xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisKKwlw cV9yZWRpcmVjdF90b19zaG1fbXEoc2VnLCBlcnJvcl9tcWgpOworCXBxX3NldF9wYXJhbGxlbF9s ZWFkZXIoTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlkLAorCQkJCQkJICAgSW52 YWxpZEJhY2tlbmRJZCk7CisKKwlNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3Rfc2VuZF90aW1lID0g TXlMb2dpY2FsUmVwV29ya2VyLT5sYXN0X3JlY3ZfdGltZSA9CisJCU15TG9naWNhbFJlcFdvcmtl ci0+cmVwbHlfdGltZSA9IDA7CisKKwlJbml0aWFsaXplQXBwbHlXb3JrZXIoKTsKKworCS8qIFNl dHVwIHJlcGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4gKi8KKwlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCVJlcGxpY2F0aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoTXlTdWJzY3JpcHRp b24tPm9pZCwgSW52YWxpZE9pZCwKKwkJCQkJCQkJCSAgIG9yaWdpbm5hbWUsIHNpemVvZihvcmln aW5uYW1lKSk7CisJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgZmFs c2UpOworCisJLyoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGRvZXNuJ3QgbmVlZCB0 byBtb25vcG9saXplIHRoaXMgcmVwbGljYXRpb24KKwkgKiBvcmlnaW4gd2hpY2ggd2FzIGFscmVh ZHkgYWNxdWlyZWQgYnkgaXRzIGxlYWRlciBwcm9jZXNzLgorCSAqLworCXJlcGxvcmlnaW5fc2Vz c2lvbl9zZXR1cChvcmlnaW5pZCwgTXlMb2dpY2FsUmVwV29ya2VyLT5hcHBseV9sZWFkZXJfcGlk KTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CisJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIFNldHVwIGNhbGxiYWNrIGZvciBzeXNjYWNoZSBz byB0aGF0IHdlIGtub3cgd2hlbiBzb21ldGhpbmcgY2hhbmdlcyBpbgorCSAqIHRoZSBzdWJzY3Jp cHRpb24gcmVsYXRpb24gc3RhdGUuCisJICovCisJQ2FjaGVSZWdpc3RlclN5c2NhY2hlQ2FsbGJh Y2soU1VCU0NSSVBUSU9OUkVMTUFQLAorCQkJCQkJCQkgIGludmFsaWRhdGVfc3luY2luZ190YWJs ZV9zdGF0ZXMsCisJCQkJCQkJCSAgKERhdHVtKSAwKTsKKworCXNldF9hcHBseV9lcnJvcl9jb250 ZXh0X29yaWdpbihvcmlnaW5uYW1lKTsKKworCUxvZ2ljYWxQYXJhbGxlbEFwcGx5TG9vcChtcWgp OworCisJLyoKKwkgKiBUaGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIG11c3Qgbm90IGdldCBoZXJl IGJlY2F1c2UgdGhlIHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyIHdpbGwgb25seSBzdG9wIHdo ZW4gaXQgcmVjZWl2ZXMgYSBTSUdURVJNIG9yIFNJR0lOVCBmcm9tIHRoZQorCSAqIGxlYWRlciwg b3Igd2hlbiB0aGVyZSB0aGVyZSBpcyBhbiBlcnJvci4gTm9uZSBvZiB0aGVzZSBjYXNlcyB3aWxs IGFsbG93CisJICogdGhlIGNvZGUgdG8gcmVhY2ggaGVyZS4KKwkgKi8KKwlBc3NlcnQoZmFsc2Up OworfQorCisvKgorICogSGFuZGxlIHJlY2VpcHQgb2YgYW4gaW50ZXJydXB0IGluZGljYXRpbmcg YSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgbWVzc2FnZS4KKyAqCisgKiBOb3RlOiB0aGlzIGlzIGNh bGxlZCB3aXRoaW4gYSBzaWduYWwgaGFuZGxlciEgQWxsIHdlIGNhbiBkbyBpcyBzZXQgYSBmbGFn CisgKiB0aGF0IHdpbGwgY2F1c2UgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSB0byBp bnZva2UKKyAqIEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcygpLgorICovCit2b2lkCitIYW5k bGVQYXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRp bmcgPSB0cnVlOworCVBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZyA9IHRydWU7CisJU2V0TGF0 Y2goTXlMYXRjaCk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBzaW5nbGUgcHJvdG9jb2wgbWVzc2Fn ZSByZWNlaXZlZCBmcm9tIGEgc2luZ2xlIHBhcmFsbGVsIGFwcGx5CisgKiB3b3JrZXIuCisgKi8K K3N0YXRpYyB2b2lkCitIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZShQYXJhbGxlbEFwcGx5V29y a2VySW5mbyAqd2luZm8sIFN0cmluZ0luZm8gbXNnKQoreworCWNoYXIJCW1zZ3R5cGU7CisKKwlt c2d0eXBlID0gcHFfZ2V0bXNnYnl0ZShtc2cpOworCisJc3dpdGNoIChtc2d0eXBlKQorCXsKKwkJ Y2FzZSAnRSc6CQkJCS8qIEVycm9yUmVzcG9uc2UgKi8KKwkJCXsKKwkJCQlFcnJvckRhdGEJZWRh dGE7CisKKwkJCQkvKiBQYXJzZSBFcnJvclJlc3BvbnNlLiAqLworCQkJCXBxX3BhcnNlX2Vycm9y bm90aWNlKG1zZywgJmVkYXRhKTsKKworCQkJCS8qCisJCQkJICogSWYgZGVzaXJlZCwgYWRkIGEg Y29udGV4dCBsaW5lIHRvIHNob3cgdGhhdCB0aGlzIGlzIGEKKwkJCQkgKiBtZXNzYWdlIHByb3Bh Z2F0ZWQgZnJvbSBhIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gT3RoZXJ3aXNlLAorCQkJCSAqIGl0 IGNhbiBzb21ldGltZXMgYmUgY29uZnVzaW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseQor CQkJCSAqIGhhcHBlbmVkLgorCQkJCSAqLworCQkJCWlmIChlZGF0YS5jb250ZXh0KQorCQkJCQll ZGF0YS5jb250ZXh0ID0gcHNwcmludGYoIiVzXG4lcyIsIGVkYXRhLmNvbnRleHQsCisJCQkJCQkJ CQkJCSBfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciIpKTsKKwkJ CQllbHNlCisJCQkJCWVkYXRhLmNvbnRleHQgPSBwc3RyZHVwKF8oImxvZ2ljYWwgcmVwbGljYXRp b24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpOworCisJCQkJLyoKKwkJCQkgKiBDb250ZXh0IGJl eW9uZCB0aGF0IHNob3VsZCB1c2UgdGhlIGVycm9yIGNvbnRleHQgY2FsbGJhY2tzCisJCQkJICog dGhhdCB3ZXJlIGluIGVmZmVjdCBpbiBMb2dpY2FsUmVwQXBwbHlMb29wKCkuCisJCQkJICovCisJ CQkJZXJyb3JfY29udGV4dF9zdGFjayA9IGFwcGx5X2Vycm9yX2NvbnRleHRfc3RhY2s7CisKKwkJ CQkvKgorCQkJCSAqIFRoZSBhY3R1YWwgZXJyb3IgbXVzdCBoYXZlIGJlZW4gcmVwb3J0ZWQgYnkg dGhlIHBhcmFsbGVsCisJCQkJICogYXBwbHkgd29ya2VyLgorCQkJCSAqLworCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRF X1NUQVRFKSwKKwkJCQkJCSBlcnJtc2coImxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBw bHkgd29ya2VyIGV4aXRlZCBkdWUgdG8gZXJyb3IiKSwKKwkJCQkJCSBlcnJjb250ZXh0KCIlcyIs IGVkYXRhLmNvbnRleHQpKSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBEb24ndCBuZWVkIHRvIGRv IGFueXRoaW5nIGFib3V0IE5vdGljZVJlc3BvbnNlIGFuZAorCQkJICogTm90aWZ5UmVzcG9uc2Ug YXMgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGRvZXNuJ3QgbmVlZAorCQkJICogdG8g c2VuZCBtZXNzYWdlcyB0byB0aGUgY2xpZW50LgorCQkJICovCisJCWNhc2UgJ04nOgorCQljYXNl ICdBJzoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25p emVkIG1lc3NhZ2UgdHlwZSByZWNlaXZlZCBmcm9tIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxs ZWwgYXBwbHkgd29ya2VyOiAlYyAobWVzc2FnZSBsZW5ndGggJWQgYnl0ZXMpIiwKKwkJCQkgbXNn dHlwZSwgbXNnLT5sZW4pOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBhbnkgcXVldWVkIHByb3Rv Y29sIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqLwor dm9pZAorSGFuZGxlUGFyYWxsZWxBcHBseU1lc3NhZ2VzKHZvaWQpCit7CisJTGlzdENlbGwgICAq bGM7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJc3RhdGljIE1lbW9yeUNvbnRleHQg aHBhbV9jb250ZXh0ID0gTlVMTDsKKworCS8qCisJICogVGhpcyBpcyBpbnZva2VkIGZyb20gUHJv Y2Vzc0ludGVycnVwdHMoKSwgYW5kIHNpbmNlIHNvbWUgb2YgdGhlCisJICogZnVuY3Rpb25zIGl0 IGNhbGxzIGNvbnRhaW4gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgdGhlcmUgaXMgYSBwb3RlbnRp YWwKKwkgKiBmb3IgcmVjdXJzaXZlIGNhbGxzIGlmIG1vcmUgc2lnbmFscyBhcmUgcmVjZWl2ZWQg d2hpbGUgdGhpcyBydW5zLiBJdCdzCisJICogdW5jbGVhciB0aGF0IHJlY3Vyc2l2ZSBlbnRyeSB3 b3VsZCBiZSBzYWZlLCBhbmQgaXQgZG9lc24ndCBzZWVtIHVzZWZ1bAorCSAqIGV2ZW4gaWYgaXQg aXMgc2FmZSwgc28gbGV0J3MgYmxvY2sgaW50ZXJydXB0cyB1bnRpbCBkb25lLgorCSAqLworCUhP TERfSU5URVJSVVBUUygpOworCisJLyoKKwkgKiBNb3Jlb3ZlciwgQ3VycmVudE1lbW9yeUNvbnRl eHQgbWlnaHQgYmUgcG9pbnRpbmcgYWxtb3N0IGFueXdoZXJlLiBXZQorCSAqIGRvbid0IHdhbnQg dG8gcmlzayBsZWFraW5nIGRhdGEgaW50byBsb25nLWxpdmVkIGNvbnRleHRzLCBzbyBsZXQncyBk bworCSAqIG91ciB3b3JrIGhlcmUgaW4gYSBwcml2YXRlIGNvbnRleHQgdGhhdCB3ZSBjYW4gcmVz ZXQgb24gZWFjaCB1c2UuCisJICovCisJaWYgKCFocGFtX2NvbnRleHQpCQkJLyogZmlyc3QgdGlt ZSB0aHJvdWdoPyAqLworCQlocGFtX2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9w TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJICJIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMi LAorCQkJCQkJCQkJCQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJZWxzZQorCQlNZW1vcnlD b250ZXh0UmVzZXQoaHBhbV9jb250ZXh0KTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oaHBhbV9jb250ZXh0KTsKKworCVBhcmFsbGVsQXBwbHlNZXNzYWdlUGVuZGluZyA9 IGZhbHNlOworCisJZm9yZWFjaChsYywgUGFyYWxsZWxBcHBseVdvcmtlclBvb2wpCisJeworCQlz aG1fbXFfcmVzdWx0IHJlczsKKwkJU2l6ZQkJbmJ5dGVzOworCQl2b2lkCSAgICpkYXRhOworCQlQ YXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8gPSAoUGFyYWxsZWxBcHBseVdvcmtlckluZm8g KikgbGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBUaGUgbGVhZGVyIHdpbGwgZGV0YWNoIGZyb20g dGhlIGVycm9yIHF1ZXVlIGFuZCBzZXQgaXQgdG8gTlVMTAorCQkgKiBiZWZvcmUgcHJlcGFyaW5n IHRvIHN0b3AgYWxsIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMsIHNvIHdlIGRvbid0CisJCSAqIG5l ZWQgdG8gaGFuZGxlIGVycm9yIG1lc3NhZ2VzIGFueW1vcmUuIFNlZQorCQkgKiBsb2dpY2FscmVw X3dvcmtlcl9kZXRhY2guCisJCSAqLworCQlpZiAoIXdpbmZvLT5lcnJvcl9tcV9oYW5kbGUpCisJ CQljb250aW51ZTsKKworCQlyZXMgPSBzaG1fbXFfcmVjZWl2ZSh3aW5mby0+ZXJyb3JfbXFfaGFu ZGxlLCAmbmJ5dGVzLCAmZGF0YSwgdHJ1ZSk7CisKKwkJaWYgKHJlcyA9PSBTSE1fTVFfV09VTERf QkxPQ0spCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAocmVzID09IFNITV9NUV9TVUNDRVNTKQor CQl7CisJCQlTdHJpbmdJbmZvRGF0YSBtc2c7CisKKwkJCWluaXRTdHJpbmdJbmZvKCZtc2cpOwor CQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmbXNnLCBkYXRhLCBuYnl0ZXMpOworCQkJSGFuZGxl UGFyYWxsZWxBcHBseU1lc3NhZ2Uod2luZm8sICZtc2cpOworCQkJcGZyZWUobXNnLmRhdGEpOwor CQl9CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJybXNnKCJsb3N0IGNvbm5l Y3Rpb24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikp KTsKKwl9CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBNaWdo dCBhcyB3ZWxsIGNsZWFyIHRoZSBjb250ZXh0IG9uIG91ciB3YXkgb3V0ICovCisJTWVtb3J5Q29u dGV4dFJlc2V0KGhwYW1fY29udGV4dCk7CisKKwlSRVNVTUVfSU5URVJSVVBUUygpOworfQorCisv KgorICogU2VuZCB0aGUgZGF0YSB0byB0aGUgc3BlY2lmaWVkIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciB2aWEgc2hhcmVkLW1lbW9yeQorICogcXVldWUuCisgKgorICogUmV0dXJuIGZhbHNlIGlmIHRo ZSBhdHRlbXB0IHRvIHNlbmQgZGF0YSB2aWEgc2hhcmVkIG1lbW9yeSB0aW1lcyBvdXQsIHRydWUK KyAqIG90aGVyd2lzZS4KKyAqLworYm9vbAorcGFfc2VuZF9kYXRhKFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICp3aW5mbywgU2l6ZSBuYnl0ZXMsIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaW50CQkJ cmM7CisJc2htX21xX3Jlc3VsdCByZXN1bHQ7CisJVGltZXN0YW1wVHogc3RhcnRUaW1lID0gMDsK KworCUFzc2VydCghSXNUcmFuc2FjdGlvblN0YXRlKCkpOworCUFzc2VydCghd2luZm8tPnNlcmlh bGl6ZV9jaGFuZ2VzKTsKKworLyoKKyAqIFRoaXMgdGltZW91dCBpcyBhIGJpdCBhcmJpdHJhcnkg YnV0IHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBpdCBpcyBzdWZmaWNpZW50CisgKiB0byBzZW5kIHRo ZSBtZXNzYWdlIHVubGVzcyB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIHdhaXRpbmcgb24g c29tZQorICogbG9jayBvciB0aGVyZSBpcyBhIHNlcmlvdXMgcmVzb3VyY2UgY3J1bmNoLiBTZWUg dGhlIGNvbW1lbnRzIGF0b3AgdGhpcyBmaWxlCisgKiB0byBrbm93IHdoeSB3ZSBhcmUgdXNpbmcg YSBub24tYmxvY2tpbmcgd2F5IHRvIHNlbmQgdGhlIG1lc3NhZ2UuCisgKi8KKyNkZWZpbmUgU0hN X1NFTkRfUkVUUllfSU5URVJWQUxfTVMgMTAwMAorI2RlZmluZSBTSE1fU0VORF9USU1FT1VUX01T CQkoMTAwMDAgLSBTSE1fU0VORF9SRVRSWV9JTlRFUlZBTF9NUykKKworCWZvciAoOzspCisJewor CQlyZXN1bHQgPSBzaG1fbXFfc2VuZCh3aW5mby0+bXFfaGFuZGxlLCBuYnl0ZXMsIGRhdGEsIHRy dWUsIHRydWUpOworCisJCWlmIChyZXN1bHQgPT0gU0hNX01RX1NVQ0NFU1MpCisJCQlyZXR1cm4g dHJ1ZTsKKwkJZWxzZSBpZiAocmVzdWx0ID09IFNITV9NUV9ERVRBQ0hFRCkKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVf U1RBVEUpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBkYXRhIHRvIHNoYXJlZC1tZW1v cnkgcXVldWUiKSkpOworCisJCUFzc2VydChyZXN1bHQgPT0gU0hNX01RX1dPVUxEX0JMT0NLKTsK KworCQkvKiBXYWl0IGJlZm9yZSByZXRyeWluZy4gKi8KKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRj aCwKKwkJCQkJICAgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVB VEgsCisJCQkJCSAgIFNITV9TRU5EX1JFVFJZX0lOVEVSVkFMX01TLAorCQkJCQkgICBXQUlUX0VW RU5UX0xPR0lDQUxfUEFSQUxMRUxfQVBQTFlfU1RBVEVfQ0hBTkdFKTsKKworCQlpZiAocmMgJiBX TF9MQVRDSF9TRVQpCisJCXsKKwkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisJCQlDSEVDS19GT1Jf SU5URVJSVVBUUygpOworCQl9CisKKwkJaWYgKHN0YXJ0VGltZSA9PSAwKQorCQkJc3RhcnRUaW1l ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQllbHNlIGlmIChUaW1lc3RhbXBEaWZmZXJlbmNl RXhjZWVkcyhzdGFydFRpbWUsIEdldEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJCQkJCQkJCQkJU0hN X1NFTkRfVElNRU9VVF9NUykpCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJs b2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciB3aWxsIHNlcmlhbGl6ZSB0aGUgcmVtYWlu aW5nIGNoYW5nZXMgb2YgcmVtb3RlIHRyYW5zYWN0aW9uICV1IHRvIGEgZmlsZSIsCisJCQkJCQkJ d2luZm8tPnNoYXJlZC0+eGlkKSkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorfQorCisv KgorICogU3dpdGNoIHRvIFBBUlRJQUxfU0VSSUFMSVpFIG1vZGUgZm9yIHRoZSBjdXJyZW50IHRy YW5zYWN0aW9uIC0tIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGN1cnJlbnQgZGF0YSBhbmQgYW55 IHN1YnNlcXVlbnQgZGF0YSBmb3IgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlCisgKiBzZXJpYWxp emVkIHRvIGEgZmlsZS4gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgcG9zc2libGUgZGVhZGxvY2tz IHdpdGgKKyAqIGFub3RoZXIgcGFyYWxsZWwgYXBwbHkgd29ya2VyIChyZWZlciB0byB0aGUgY29t bWVudHMgYXRvcCB0aGlzIGZpbGUpLgorICovCit2b2lkCitwYV9zd2l0Y2hfdG9fcGFydGlhbF9z ZXJpYWxpemUoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLAorCQkJCQkJCSAgIGJvb2wg c3RyZWFtX2xvY2tlZCkKK3sKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgY291 bGQgYmUgc3R1Y2sgZm9yIHNvbWUgcmVhc29uIChzYXkgd2FpdGluZworCSAqIG9uIHNvbWUgbG9j ayBieSBvdGhlciBiYWNrZW5kKSwgc28gc3RvcCB0cnlpbmcgdG8gc2VuZCBkYXRhIGRpcmVjdGx5 IHRvCisJICogaXQgYW5kIHN0YXJ0IHNlcmlhbGl6aW5nIGRhdGEgdG8gdGhlIGZpbGUgaW5zdGVh ZC4KKwkgKi8KKwl3aW5mby0+c2VyaWFsaXplX2NoYW5nZXMgPSB0cnVlOworCisJLyogSW5pdGlh bGl6ZSB0aGUgc3RyZWFtIGZpbGVzZXQuICovCisJc3RyZWFtX3N0YXJ0X2ludGVybmFsKHdpbmZv LT5zaGFyZWQtPnhpZCwgdHJ1ZSk7CisKKwkvKgorCSAqIEFjcXVpcmVzIHRoZSBzdHJlYW0gbG9j ayBpZiBub3QgYWxyZWFkeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGFyYWxsZWwKKwkgKiBhcHBs eSB3b3JrZXIgd2lsbCB3YWl0IGZvciB0aGUgbGVhZGVyIHRvIHJlbGVhc2UgdGhlIHN0cmVhbSBs b2NrIHVudGlsCisJICogdGhlIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKCFz dHJlYW1fbG9ja2VkKQorCQlwYV9sb2NrX3N0cmVhbSh3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vz c0V4Y2x1c2l2ZUxvY2spOworCisJcGFfc2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJlZCwg RlNfU0VSSUFMSVpFX0lOX1BST0dSRVNTKTsKK30KKworLyoKKyAqIFdhaXQgdW50aWwgdGhlIHBh cmFsbGVsIGFwcGx5IHdvcmtlcidzIHRyYW5zYWN0aW9uIHN0YXRlIGhhcyByZWFjaGVkIG9yCisg KiBleGNlZWRlZCB0aGUgZ2l2ZW4geGFjdF9zdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK3BhX3dh aXRfZm9yX3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLAorCQkJCQkg ICBQYXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZSkKK3sKKwlmb3IgKDs7KQorCXsKKwkJLyoK KwkJICogU3RvcCBpZiB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaGFzIHJlYWNoZWQgb3IgZXhjZWVk ZWQgdGhlIGdpdmVuCisJCSAqIHhhY3Rfc3RhdGUuCisJCSAqLworCQlpZiAocGFfZ2V0X3hhY3Rf c3RhdGUod2luZm8tPnNoYXJlZCkgPj0geGFjdF9zdGF0ZSkKKwkJCWJyZWFrOworCisJCS8qIFdh aXQgdG8gYmUgc2lnbmFsbGVkLiAqLworCQkodm9pZCkgV2FpdExhdGNoKE15TGF0Y2gsCisJCQkJ CQkgV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsCisJCQkJ CQkgMTBMLAorCQkJCQkJIFdBSVRfRVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9TVEFURV9D SEFOR0UpOworCisJCS8qIFJlc2V0IHRoZSBsYXRjaCBzbyB3ZSBkb24ndCBzcGluLiAqLworCQlS ZXNldExhdGNoKE15TGF0Y2gpOworCisJCS8qIEFuIGludGVycnVwdCBtYXkgaGF2ZSBvY2N1cnJl ZCB3aGlsZSB3ZSB3ZXJlIHdhaXRpbmcuICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJ fQorfQorCisvKgorICogV2FpdCB1bnRpbCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyJ3MgdHJh bnNhY3Rpb24gZmluaXNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitwYV93YWl0X2Zvcl94YWN0X2Zp bmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8pCit7CisJLyoKKwkgKiBXYWl0IHVu dGlsIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgc2V0IHRoZSBzdGF0ZSB0bworCSAqIFBBUkFM TEVMX1RSQU5TX1NUQVJURUQgd2hpY2ggbWVhbnMgaXQgaGFzIGFjcXVpcmVkIHRoZSB0cmFuc2Fj dGlvbgorCSAqIGxvY2suIFRoaXMgaXMgdG8gcHJldmVudCBsZWFkZXIgYXBwbHkgd29ya2VyIGZy b20gYWNxdWlyaW5nIHRoZQorCSAqIHRyYW5zYWN0aW9uIGxvY2sgZWFybGllciB0aGFuIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIuCisJICovCisJcGFfd2FpdF9mb3JfeGFjdF9zdGF0ZSh3aW5m bywgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSB0cmFu c2FjdGlvbiBsb2NrIHRvIGJlIHJlbGVhc2VkLiBUaGlzIGlzIHJlcXVpcmVkIHRvCisJICogZGV0 ZWN0IGRlYWRsb2NrIGFtb25nIGxlYWRlciBhbmQgcGFyYWxsZWwgYXBwbHkgd29ya2Vycy4gUmVm ZXIgdG8gdGhlCisJICogY29tbWVudHMgYXRvcCB0aGlzIGZpbGUuCisJICovCisJcGFfbG9ja190 cmFuc2FjdGlvbih3aW5mby0+c2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGFfdW5s b2NrX3RyYW5zYWN0aW9uKHdpbmZvLT5zaGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CS8qCisJICogQ2hlY2sgaWYgdGhlIHN0YXRlIGJlY29tZXMgUEFSQUxMRUxfVFJBTlNfRklOSVNI RUQgaW4gY2FzZSB0aGUgcGFyYWxsZWwKKwkgKiBhcHBseSB3b3JrZXIgZmFpbGVkIHdoaWxlIGFw cGx5aW5nIGNoYW5nZXMgY2F1c2luZyB0aGUgbG9jayB0byBiZQorCSAqIHJlbGVhc2VkLgorCSAq LworCWlmIChwYV9nZXRfeGFjdF9zdGF0ZSh3aW5mby0+c2hhcmVkKSAhPSBQQVJBTExFTF9UUkFO U19GSU5JU0hFRCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVD VF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJsb3N0IGNvbm5lY3Rp b24gdG8gdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxsZWwgYXBwbHkgd29ya2VyIikpKTsK K30KKworLyoKKyAqIFNldCB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgZm9yIGEgZ2l2ZW4gcGFyYWxs ZWwgYXBwbHkgd29ya2VyLgorICovCit2b2lkCitwYV9zZXRfeGFjdF9zdGF0ZShQYXJhbGxlbEFw cGx5V29ya2VyU2hhcmVkICp3c2hhcmVkLAorCQkJCSAgUGFyYWxsZWxUcmFuc1N0YXRlIHhhY3Rf c3RhdGUpCit7CisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5tdXRleCk7CisJd3NoYXJlZC0+ eGFjdF9zdGF0ZSA9IHhhY3Rfc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZ3c2hhcmVkLT5tdXRl eCk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGZvciBhIGdpdmVuIHBh cmFsbGVsIGFwcGx5IHdvcmtlci4KKyAqLworc3RhdGljIFBhcmFsbGVsVHJhbnNTdGF0ZQorcGFf Z2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqd3NoYXJlZCkKK3sKKwlQ YXJhbGxlbFRyYW5zU3RhdGUgeGFjdF9zdGF0ZTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmd3NoYXJl ZC0+bXV0ZXgpOworCXhhY3Rfc3RhdGUgPSB3c2hhcmVkLT54YWN0X3N0YXRlOworCVNwaW5Mb2Nr UmVsZWFzZSgmd3NoYXJlZC0+bXV0ZXgpOworCisJcmV0dXJuIHhhY3Rfc3RhdGU7Cit9CisKKy8q CisgKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGluZm9ybWF0aW9uLgorICovCit2 b2lkCitwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtlcihQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAq d2luZm8pCit7CisJc3RyZWFtX2FwcGx5X3dvcmtlciA9IHdpbmZvOworfQorCisvKgorICogRm9y bSBhIHVuaXF1ZSBzYXZlcG9pbnQgbmFtZSBmb3IgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4K KyAqCisgKiBOb3RlIHRoYXQgZGlmZmVyZW50IHN1YnNjcmlwdGlvbnMgZm9yIHB1YmxpY2F0aW9u cyBvbiBkaWZmZXJlbnQgbm9kZXMgY2FuCisgKiByZWNlaXZlIHNhbWUgcmVtb3RlIHhpZCwgc28g d2UgbmVlZCB0byB1c2Ugc3Vic2NyaXB0aW9uIGlkIGFsb25nIHdpdGggaXQuCisgKgorICogUmV0 dXJuIHRoZSBuYW1lIGluIHRoZSBzdXBwbGllZCBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkCitw YV9zYXZlcG9pbnRfbmFtZShPaWQgc3Vib2lkLCBUcmFuc2FjdGlvbklkIHhpZCwgY2hhciAqc3Bu YW1lLCBTaXplIHN6c3ApCit7CisJc25wcmludGYoc3BuYW1lLCBzenNwLCAicGdfc3BfJXVfJXUi LCBzdWJvaWQsIHhpZCk7Cit9CisKKy8qCisgKiBEZWZpbmUgYSBzYXZlcG9pbnQgZm9yIGEgc3Vi eGFjdCBpbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaWYgbmVlZGVkLgorICoKKyAqIFRoZSBwYXJh bGxlbCBhcHBseSB3b3JrZXIgY2FuIGZpZ3VyZSBvdXQgaWYgYSBuZXcgc3VidHJhbnNhY3Rpb24g d2FzCisgKiBzdGFydGVkIGJ5IGNoZWNraW5nIGlmIHRoZSBuZXcgY2hhbmdlIGFycml2ZWQgd2l0 aCBhIGRpZmZlcmVudCB4aWQuIEluIHRoYXQKKyAqIGNhc2UgZGVmaW5lIGEgbmFtZWQgc2F2ZXBv aW50LCBzbyB0aGF0IHdlIGFyZSBhYmxlIHRvIHJvbGxiYWNrIHRvIGl0CisgKiBpZiByZXF1aXJl ZC4KKyAqLwordm9pZAorcGFfc3RhcnRfc3VidHJhbnMoVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hp ZCwgVHJhbnNhY3Rpb25JZCB0b3BfeGlkKQoreworCWlmIChjdXJyZW50X3hpZCAhPSB0b3BfeGlk ICYmCisJCSFsaXN0X21lbWJlcl94aWQoc3VieGFjdGxpc3QsIGN1cnJlbnRfeGlkKSkKKwl7CisJ CU1lbW9yeUNvbnRleHQgb2xkY3R4OworCQljaGFyCQlzcG5hbWVbTkFNRURBVEFMRU5dOworCisJ CXBhX3NhdmVwb2ludF9uYW1lKE15U3Vic2NyaXB0aW9uLT5vaWQsIGN1cnJlbnRfeGlkLAorCQkJ CQkJICBzcG5hbWUsIHNpemVvZihzcG5hbWUpKTsKKworCQllbG9nKERFQlVHMSwgImRlZmluaW5n IHNhdmVwb2ludCAlcyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciIsIHNwbmFtZSk7CisKKwkJLyogV2UgbXVzdCBiZSBpbiB0cmFuc2FjdGlvbiBibG9jayB0byBk ZWZpbmUgdGhlIFNBVkVQT0lOVC4gKi8KKwkJaWYgKCFJc1RyYW5zYWN0aW9uQmxvY2soKSkKKwkJ eworCQkJaWYgKCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKKwkJCQlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCisJCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCQl9CisKKwkJRGVmaW5lU2F2ZXBvaW50KHNwbmFtZSk7CisKKwkJLyoK KwkJICogQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kIGlzIG5lZWRlZCB0byBzdGFydCBhIHN1YnRy YW5zYWN0aW9uIGFmdGVyCisJCSAqIGlzc3VpbmcgYSBTQVZFUE9JTlQgaW5zaWRlIGEgdHJhbnNh Y3Rpb24gYmxvY2sgKHNlZQorCQkgKiBTdGFydFN1YlRyYW5zYWN0aW9uKCkpLgorCQkgKi8KKwkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CisJCXN1YnhhY3RsaXN0ID0gbGFwcGVuZF94 aWQoc3VieGFjdGxpc3QsIGN1cnJlbnRfeGlkKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN0eCk7CisJfQorfQorCisvKiBSZXNldCB0aGUgbGlzdCB0aGF0IG1haW50YWlucyBzdWJ0cmFu c2FjdGlvbnMuICovCit2b2lkCitwYV9yZXNldF9zdWJ0cmFucyh2b2lkKQoreworCS8qCisJICog V2UgZG9uJ3QgbmVlZCB0byBmcmVlIHRoaXMgZXhwbGljaXRseSBhcyB0aGUgYWxsb2NhdGVkIG1l bW9yeSB3aWxsIGJlCisJICogZnJlZWQgYXQgdGhlIHRyYW5zYWN0aW9uIGVuZC4KKwkgKi8KKwlz dWJ4YWN0bGlzdCA9IE5JTDsKK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2Fn ZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiB3YXMgYXBwbGllZCBpbiBhIHBhcmFsbGVsCisgKiBhcHBs eSB3b3JrZXIuCisgKi8KK3ZvaWQKK3BhX3N0cmVhbV9hYm9ydChMb2dpY2FsUmVwU3RyZWFtQWJv cnREYXRhICphYm9ydF9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQgeGlkID0gYWJvcnRfZGF0YS0+ eGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkID0gYWJvcnRfZGF0YS0+c3VieGlkOworCisJLyoK KwkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVhbWluZyBmcm9t IGNvcnJlY3QgcG9zaXRpb24KKwkgKiBpbiBjYXNlIG9mIGNyYXNoLgorCSAqLworCXJlcGxvcmln aW5fc2Vzc2lvbl9vcmlnaW5fbHNuID0gYWJvcnRfZGF0YS0+YWJvcnRfbHNuOworCXJlcGxvcmln aW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gYWJvcnRfZGF0YS0+YWJvcnRfdGltZTsKKwor CS8qCisJICogSWYgdGhlIHR3byBYSURzIGFyZSB0aGUgc2FtZSwgaXQncyBpbiBmYWN0IGFib3J0 IG9mIHRvcGxldmVsIHhhY3QsIHNvCisJICoganVzdCBmcmVlIHRoZSBzdWJ4YWN0bGlzdC4KKwkg Ki8KKwlpZiAoc3VieGlkID09IHhpZCkKKwl7CisJCXBhX3NldF94YWN0X3N0YXRlKE15UGFyYWxs ZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKworCQkvKgorCQkgKiBSZWxlYXNl IHRoZSBsb2NrIGFzIHdlIG1pZ2h0IGJlIHByb2Nlc3NpbmcgYW4gZW1wdHkgc3RyZWFtaW5nCisJ CSAqIHRyYW5zYWN0aW9uIGluIHdoaWNoIGNhc2UgdGhlIGxvY2sgd29uJ3QgYmUgcmVsZWFzZWQg ZHVyaW5nCisJCSAqIHRyYW5zYWN0aW9uIHJvbGxiYWNrLgorCQkgKi8KKwkJcGFfdW5sb2NrX3Ry YW5zYWN0aW9uKHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJQWJvcnRDdXJyZW50VHJh bnNhY3Rpb24oKTsKKworCQlpZiAoSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCXsKKwkJCUVuZFRy YW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJ CX0KKworCQlwYV9yZXNldF9zdWJ0cmFucygpOworCisJCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHko U1RBVEVfSURMRSwgTlVMTCk7CisJfQorCWVsc2UKKwl7CisJCS8qIE9LLCBzbyBpdCdzIGEgc3Vi eGFjdC4gUm9sbGJhY2sgdG8gdGhlIHNhdmVwb2ludC4gKi8KKwkJaW50CQkJaTsKKwkJY2hhcgkJ c3BuYW1lW05BTUVEQVRBTEVOXTsKKworCQlwYV9zYXZlcG9pbnRfbmFtZShNeVN1YnNjcmlwdGlv bi0+b2lkLCBzdWJ4aWQsIHNwbmFtZSwgc2l6ZW9mKHNwbmFtZSkpOworCisJCWVsb2coREVCVUcx LCAicm9sbGluZyBiYWNrIHRvIHNhdmVwb2ludCAlcyBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uIHBh cmFsbGVsIGFwcGx5IHdvcmtlciIsIHNwbmFtZSk7CisKKwkJLyoKKwkJICogU2VhcmNoIHRoZSBz dWJ4YWN0bGlzdCwgZGV0ZXJtaW5lIHRoZSBvZmZzZXQgdHJhY2tlZCBmb3IgdGhlCisJCSAqIHN1 YnhhY3QsIGFuZCB0cnVuY2F0ZSB0aGUgbGlzdC4KKwkJICoKKwkJICogTm90ZSB0aGF0IGZvciBh biBlbXB0eSBzdWItdHJhbnNhY3Rpb24gd2Ugd29uJ3QgZmluZCB0aGUgc3VieGlkCisJCSAqIGhl cmUuCisJCSAqLworCQlmb3IgKGkgPSBsaXN0X2xlbmd0aChzdWJ4YWN0bGlzdCkgLSAxOyBpID49 IDA7IGktLSkKKwkJeworCQkJVHJhbnNhY3Rpb25JZCB4aWRfdG1wID0gbGZpcnN0X3hpZChsaXN0 X250aF9jZWxsKHN1YnhhY3RsaXN0LCBpKSk7CisKKwkJCWlmICh4aWRfdG1wID09IHN1YnhpZCkK KwkJCXsKKwkJCQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CisJCQkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJCQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3Rs aXN0LCBpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKyAqIFNldCB0aGUg ZmlsZXNldCBzdGF0ZSBmb3IgYSBwYXJ0aWN1bGFyIHBhcmFsbGVsIGFwcGx5IHdvcmtlci4gVGhl IGZpbGVzZXQKKyAqIHdpbGwgYmUgc2V0IG9uY2UgdGhlIGxlYWRlciB3b3JrZXIgc2VyaWFsaXpl ZCBhbGwgY2hhbmdlcyB0byB0aGUgZmlsZQorICogc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBw YXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3ZvaWQKK3BhX3NldF9maWxlc2V0X3N0YXRlKFBh cmFsbGVsQXBwbHlXb3JrZXJTaGFyZWQgKndzaGFyZWQsCisJCQkJCSBQYXJ0aWFsRmlsZVNldFN0 YXRlIGZpbGVzZXRfc3RhdGUpCit7CisJU3BpbkxvY2tBY3F1aXJlKCZ3c2hhcmVkLT5tdXRleCk7 CisJd3NoYXJlZC0+ZmlsZXNldF9zdGF0ZSA9IGZpbGVzZXRfc3RhdGU7CisKKwlpZiAoZmlsZXNl dF9zdGF0ZSA9PSBGU19TRVJJQUxJWkVfRE9ORSkKKwl7CisJCUFzc2VydChhbV9sZWFkZXJfYXBw bHlfd29ya2VyKCkpOworCQlBc3NlcnQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNl dCk7CisJCXdzaGFyZWQtPmZpbGVzZXQgPSAqTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmls ZXNldDsKKwl9CisKKwlTcGluTG9ja1JlbGVhc2UoJndzaGFyZWQtPm11dGV4KTsKK30KKworLyoK KyAqIEdldCB0aGUgZmlsZXNldCBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgcGFyYWxsZWwgYXBwbHkg d29ya2VyLgorICovCitzdGF0aWMgUGFydGlhbEZpbGVTZXRTdGF0ZQorcGFfZ2V0X2ZpbGVzZXRf c3RhdGUodm9pZCkKK3sKKwlQYXJ0aWFsRmlsZVNldFN0YXRlIGZpbGVzZXRfc3RhdGU7CisKKwlB c3NlcnQoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpOworCisJU3BpbkxvY2tBY3F1aXJlKCZN eVBhcmFsbGVsU2hhcmVkLT5tdXRleCk7CisJZmlsZXNldF9zdGF0ZSA9IE15UGFyYWxsZWxTaGFy ZWQtPmZpbGVzZXRfc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU2hhcmVkLT5t dXRleCk7CisKKwlyZXR1cm4gZmlsZXNldF9zdGF0ZTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5j dGlvbnMgdG8gYWNxdWlyZSBhbmQgcmVsZWFzZSBhIGxvY2sgZm9yIGVhY2ggc3RyZWFtIGJsb2Nr LgorICoKKyAqIFNldCBsb2NrdGFnX2ZpZWxkNCB0byBQQVJBTExFTF9BUFBMWV9MT0NLX1NUUkVB TSB0byBpbmRpY2F0ZSB0aGF0IGl0J3MgYQorICogc3RyZWFtIGxvY2suCisgKgorICogUmVmZXIg dG8gdGhlIGNvbW1lbnRzIGF0b3AgdGhpcyBmaWxlIHRvIHNlZSBob3cgdGhlIHN0cmVhbSBsb2Nr IGlzIHVzZWQuCisgKi8KK3ZvaWQKK3BhX2xvY2tfc3RyZWFtKFRyYW5zYWN0aW9uSWQgeGlkLCBM T0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oTXlM b2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkgICBQQVJBTExFTF9BUFBMWV9M T0NLX1NUUkVBTSwgbG9ja21vZGUpOworfQorCit2b2lkCitwYV91bmxvY2tfc3RyZWFtKFRyYW5z YWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSkKK3sKKwlVbmxvY2tBcHBseVRyYW5zYWN0 aW9uRm9yU2Vzc2lvbihNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQsCisJCQkJCQkJCQkg UEFSQUxMRUxfQVBQTFlfTE9DS19TVFJFQU0sIGxvY2ttb2RlKTsKK30KKworLyoKKyAqIEhlbHBl ciBmdW5jdGlvbnMgdG8gYWNxdWlyZSBhbmQgcmVsZWFzZSBhIGxvY2sgZm9yIGVhY2ggbG9jYWwg dHJhbnNhY3Rpb24KKyAqIGFwcGx5LgorICoKKyAqIFNldCBsb2NrdGFnX2ZpZWxkNCB0byBQQVJB TExFTF9BUFBMWV9MT0NLX1hBQ1QgdG8gaW5kaWNhdGUgdGhhdCBpdCdzIGEKKyAqIHRyYW5zYWN0 aW9uIGxvY2suCisgKgorICogTm90ZSB0aGF0IGFsbCB0aGUgY2FsbGVycyBtdXN0IHBhc3MgYSBy ZW1vdGUgdHJhbnNhY3Rpb24gSUQgaW5zdGVhZCBvZiBhCisgKiBsb2NhbCB0cmFuc2FjdGlvbiBJ RCBhcyB4aWQuIFRoaXMgaXMgYmVjYXVzZSB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gSUQgd2lsbAor ICogb25seSBiZSBhc3NpZ25lZCB3aGlsZSBhcHBseWluZyB0aGUgZmlyc3QgY2hhbmdlIGluIHRo ZSBwYXJhbGxlbCBhcHBseSBidXQKKyAqIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmlyc3QgY2hh bmdlIGluIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaXMgYmxvY2tlZAorICogYnkgYSBjb25j dXJyZW50bHkgZXhlY3V0aW5nIHRyYW5zYWN0aW9uIGluIGFub3RoZXIgcGFyYWxsZWwgYXBwbHkg d29ya2VyLiBXZQorICogY2FuIG9ubHkgY29tbXVuaWNhdGUgdGhlIGxvY2FsIHRyYW5zYWN0aW9u IGlkIHRvIHRoZSBsZWFkZXIgYWZ0ZXIgYXBwbHlpbmcKKyAqIHRoZSBmaXJzdCBjaGFuZ2Ugc28g aXQgd29uJ3QgYmUgYWJsZSB0byB3YWl0IGFmdGVyIHNlbmRpbmcgdGhlIHhhY3QgZmluaXNoCisg KiBjb21tYW5kIHVzaW5nIHRoaXMgbG9jay4KKyAqCisgKiBSZWZlciB0byB0aGUgY29tbWVudHMg YXRvcCB0aGlzIGZpbGUgdG8gc2VlIGhvdyB0aGUgdHJhbnNhY3Rpb24gbG9jayBpcworICogdXNl ZC4KKyAqLwordm9pZAorcGFfbG9ja190cmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIHhpZCwgTE9D S01PREUgbG9ja21vZGUpCit7CisJTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCwKKwkJCQkJCQkJICAgUEFSQUxMRUxfQVBQTFlfTE9D S19YQUNULCBsb2NrbW9kZSk7Cit9CisKK3ZvaWQKK3BhX3VubG9ja190cmFuc2FjdGlvbihUcmFu c2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpCit7CisJVW5sb2NrQXBwbHlUcmFuc2Fj dGlvbkZvclNlc3Npb24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkLAorCQkJCQkJCQkJ IFBBUkFMTEVMX0FQUExZX0xPQ0tfWEFDVCwgbG9ja21vZGUpOworfQorCisvKgorICogRGVjcmVt ZW50IHRoZSBudW1iZXIgb2YgcGVuZGluZyBzdHJlYW1pbmcgYmxvY2tzIGFuZCB3YWl0IG9uIHRo ZSBzdHJlYW0gbG9jaworICogaWYgdGhlcmUgaXMgbm8gcGVuZGluZyBibG9jayBhdmFpbGFibGUu CisgKi8KK3ZvaWQKK3BhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKHZvaWQpCit7CisJQXNz ZXJ0KGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKTsKKworCS8qCisJICogSXQgaXMgb25seSBw b3NzaWJsZSB0byBub3QgaGF2ZSBhbnkgcGVuZGluZyBzdHJlYW0gY2h1bmtzIHdoZW4gd2UgYXJl CisJICogYXBwbHlpbmcgc3Bvb2xlZCBtZXNzYWdlcy4KKwkgKi8KKwlpZiAocGdfYXRvbWljX3Jl YWRfdTMyKCZNeVBhcmFsbGVsU2hhcmVkLT5wZW5kaW5nX3N0cmVhbV9jb3VudCkgPT0gMCkKKwl7 CisJCWlmIChwYV9oYXNfc3Bvb2xlZF9tZXNzYWdlX3BlbmRpbmcoKSkKKwkJCXJldHVybjsKKwor CQllbG9nKEVSUk9SLCAiaW52YWxpZCBwZW5kaW5nIHN0cmVhbWluZyBjaHVuayAwIik7CisJfQor CisJaWYgKHBnX2F0b21pY19zdWJfZmV0Y2hfdTMyKCZNeVBhcmFsbGVsU2hhcmVkLT5wZW5kaW5n X3N0cmVhbV9jb3VudCwgMSkgPT0gMCkKKwl7CisJCXBhX2xvY2tfc3RyZWFtKE15UGFyYWxsZWxT aGFyZWQtPnhpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJcGFfdW5sb2NrX3N0cmVhbShNeVBhcmFs bGVsU2hhcmVkLT54aWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorfQorCisvKgorICogRmluaXNo IHByb2Nlc3NpbmcgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiB0aGUgbGVhZGVyIGFwcGx5 IHdvcmtlci4KKyAqLwordm9pZAorcGFfeGFjdF9maW5pc2goUGFyYWxsZWxBcHBseVdvcmtlcklu Zm8gKndpbmZvLCBYTG9nUmVjUHRyIHJlbW90ZV9sc24pCit7CisJQXNzZXJ0KGFtX2xlYWRlcl9h cHBseV93b3JrZXIoKSk7CisKKwkvKgorCSAqIFVubG9jayB0aGUgc2hhcmVkIG9iamVjdCBsb2Nr IHNvIHRoYXQgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGNhbgorCSAqIGNvbnRpbnVlIHRvIHJlY2Vp dmUgYW5kIGFwcGx5IGNoYW5nZXMuCisJICovCisJcGFfdW5sb2NrX3N0cmVhbSh3aW5mby0+c2hh cmVkLT54aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGF0 IHdvcmtlciB0byBmaW5pc2guIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1haW50YWluIGNvbW1pdAor CSAqIG9yZGVyIHdoaWNoIGF2b2lkcyBmYWlsdXJlcyBkdWUgdG8gdHJhbnNhY3Rpb24gZGVwZW5k ZW5jaWVzIGFuZAorCSAqIGRlYWRsb2Nrcy4KKwkgKi8KKwlwYV93YWl0X2Zvcl94YWN0X2Zpbmlz aCh3aW5mbyk7CisKKwlpZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQocmVtb3RlX2xzbikpCisJCXN0 b3JlX2ZsdXNoX3Bvc2l0aW9uKHJlbW90ZV9sc24sIHdpbmZvLT5zaGFyZWQtPmxhc3RfY29tbWl0 X2VuZCk7CisKKwlwYV9mcmVlX3dvcmtlcih3aW5mbyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9kZWNvZGUuYwppbmRleCAyY2MwYWM5ZWIwLi4zM2ZkYmRjNjczIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTgyMiwxMCArODIyLDExIEBA IERlY29kZUFib3J0KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZl ciAqYnVmLAogCQlmb3IgKGkgPSAwOyBpIDwgcGFyc2VkLT5uc3VieGFjdHM7IGkrKykKIAkJewog CQkJUmVvcmRlckJ1ZmZlckFib3J0KGN0eC0+cmVvcmRlciwgcGFyc2VkLT5zdWJ4YWN0c1tpXSwK LQkJCQkJCQkgICBidWYtPnJlY29yZC0+RW5kUmVjUHRyKTsKKwkJCQkJCQkgICBidWYtPnJlY29y ZC0+RW5kUmVjUHRyLCBhYm9ydF90aW1lKTsKIAkJfQogCi0JCVJlb3JkZXJCdWZmZXJBYm9ydChj dHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5yZWNvcmQtPkVuZFJlY1B0cik7CisJCVJlb3JkZXJCdWZm ZXJBYm9ydChjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5yZWNvcmQtPkVuZFJlY1B0ciwKKwkJCQkJ CSAgIGFib3J0X3RpbWUpOwogCX0KIAogCS8qIHVwZGF0ZSB0aGUgZGVjb2Rpbmcgc3RhdHMgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCA3MzU5NGM2 OThhLi5iYTk1NGFjMmEyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVu Y2hlci5jCkBAIC01NSw2ICs1NSw3IEBACiAvKiBHVUMgdmFyaWFibGVzICovCiBpbnQJCQltYXhf bG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gNDsKIGludAkJCW1heF9zeW5jX3dvcmtlcnNf cGVyX3N1YnNjcmlwdGlvbiA9IDI7CitpbnQJCQltYXhfcGFyYWxsZWxfYXBwbHlfd29ya2Vyc19w ZXJfc3Vic2NyaXB0aW9uID0gMjsKIAogTG9naWNhbFJlcFdvcmtlciAqTXlMb2dpY2FsUmVwV29y a2VyID0gTlVMTDsKIApAQCAtNzQsNiArNzUsNyBAQCBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX2xh dW5jaGVyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxy ZXBfd29ya2VyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIGxvZ2lj YWxyZXBfd29ya2VyX2RldGFjaCh2b2lkKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd29ya2Vy X2NsZWFudXAoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKTsKK3N0YXRpYyBpbnQJbG9naWNhbHJl cF9wYV93b3JrZXJfY291bnQoT2lkIHN1YmlkKTsKIAogc3RhdGljIGJvb2wgb25fY29tbWl0X2xh dW5jaGVyX3dha2V1cCA9IGZhbHNlOwogCkBAIC0xNTIsOCArMTU0LDEwIEBAIGdldF9zdWJzY3Jp cHRpb25fbGlzdCh2b2lkKQogICoKICAqIFRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGNsZWFuaW5n IHVwIHRoZSBzaGFyZWQgbWVtb3J5IGluIGNhc2UgdGhlIHdvcmtlcgogICogZmFpbHMgdG8gYXR0 YWNoLgorICoKKyAqIFJldHVybnMgd2hldGhlciB0aGUgYXR0YWNoIHdhcyBzdWNjZXNzZnVsLgog ICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGJvb2wKIFdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0 dGFjaChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIsCiAJCQkJCQkJICAgdWludDE2IGdlbmVyYXRp b24sCiAJCQkJCQkJICAgQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqaGFuZGxlKQpAQCAtMTY5LDEx ICsxNzMsMTEgQEAgV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3Jr ZXIgKndvcmtlciwKIAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19T SEFSRUQpOwogCi0JCS8qIFdvcmtlciBlaXRoZXIgZGllZCBvciBoYXMgc3RhcnRlZDsgbm8gbmVl ZCB0byBkbyBhbnl0aGluZy4gKi8KKwkJLyogV29ya2VyIGVpdGhlciBkaWVkIG9yIGhhcyBzdGFy dGVkLiBSZXR1cm4gZmFsc2UgaWYgZGllZC4gKi8KIAkJaWYgKCF3b3JrZXItPmluX3VzZSB8fCB3 b3JrZXItPnByb2MpCiAJCXsKIAkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2sp OwotCQkJcmV0dXJuOworCQkJcmV0dXJuIHdvcmtlci0+aW5fdXNlOwogCQl9CiAKIAkJTFdMb2Nr UmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CkBAIC0xODgsNyArMTkyLDcgQEAgV2FpdEZv clJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwKIAkJCWlm IChnZW5lcmF0aW9uID09IHdvcmtlci0+Z2VuZXJhdGlvbikKIAkJCQlsb2dpY2FscmVwX3dvcmtl cl9jbGVhbnVwKHdvcmtlcik7CiAJCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr KTsKLQkJCXJldHVybjsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCS8qCkBAIC0yMTAsNiAr MjE0LDggQEAgV2FpdEZvclJlcGxpY2F0aW9uV29ya2VyQXR0YWNoKExvZ2ljYWxSZXBXb3JrZXIg KndvcmtlciwKIC8qCiAgKiBXYWxrcyB0aGUgd29ya2VycyBhcnJheSBhbmQgc2VhcmNoZXMgZm9y IG9uZSB0aGF0IG1hdGNoZXMgZ2l2ZW4KICAqIHN1YnNjcmlwdGlvbiBpZCBhbmQgcmVsaWQuCisg KgorICogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciBv ciB0YWJsZSBzeW5jIHdvcmtlci4KICAqLwogTG9naWNhbFJlcFdvcmtlciAqCiBsb2dpY2FscmVw X3dvcmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKQEAg LTIyNCw2ICsyMzAsMTAgQEAgbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCBy ZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxv Z2ljYWxSZXBDdHgtPndvcmtlcnNbaV07CiAKKwkJLyogU2tpcCBwYXJhbGxlbCBhcHBseSB3b3Jr ZXJzLiAqLworCQlpZiAoaXNQYXJhbGxlbEFwcGx5V29ya2VyKHcpKQorCQkJY29udGludWU7CisK IAkJaWYgKHctPmluX3VzZSAmJiB3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5yZWxpZCA9PSByZWxp ZCAmJgogCQkJKCFvbmx5X3J1bm5pbmcgfHwgdy0+cHJvYykpCiAJCXsKQEAgLTI2MCwxMSArMjcw LDEzIEBAIGxvZ2ljYWxyZXBfd29ya2Vyc19maW5kKE9pZCBzdWJpZCwgYm9vbCBvbmx5X3J1bm5p bmcpCiB9CiAKIC8qCi0gKiBTdGFydCBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBv c3NpYmxlLgorICogU3RhcnQgbmV3IGxvZ2ljYWwgcmVwbGljYXRpb24gYmFja2dyb3VuZCB3b3Jr ZXIsIGlmIHBvc3NpYmxlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBv biBmYWlsdXJlLgogICovCi12b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lk IGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKLQkJCQkJ CSBPaWQgcmVsaWQpCisJCQkJCQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20p CiB7CiAJQmFja2dyb3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3 X2hhbmRsZTsKQEAgLTI3Myw3ICsyODUsMTIgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1bmNoKE9p ZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJaW50 CQkJc2xvdCA9IDA7CiAJTG9naWNhbFJlcFdvcmtlciAqd29ya2VyID0gTlVMTDsKIAlpbnQJCQlu c3luY3dvcmtlcnM7CisJaW50CQkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzOwogCVRpbWVzdGFtcFR6 IG5vdzsKKwlib29sCQlpc19wYXJhbGxlbF9hcHBseV93b3JrZXIgPSAoc3Vid29ya2VyX2RzbSAh PSBEU01fSEFORExFX0lOVkFMSUQpOworCisJLyogU2FuaXR5IGNoZWNrIC0gdGFibGVzeW5jIHdv cmtlciBjYW5ub3QgYmUgYSBzdWJ3b3JrZXIgKi8KKwlBc3NlcnQoIShpc19wYXJhbGxlbF9hcHBs eV93b3JrZXIgJiYgT2lkSXNWYWxpZChyZWxpZCkpKTsKIAogCWVyZXBvcnQoREVCVUcxLAogCQkJ KGVycm1zZ19pbnRlcm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiBcIiVzXCIiLApAQCAtMzUxLDcgKzM2OCwyMCBAQCByZXRyeToKIAlpZiAo T2lkSXNWYWxpZChyZWxpZCkgJiYgbnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVy X3N1YnNjcmlwdGlvbikKIAl7CiAJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJlcFdvcmtlckxvY2sp OwotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlucGFyYWxsZWxhcHBseXdvcmtl cnMgPSBsb2dpY2FscmVwX3BhX3dvcmtlcl9jb3VudChzdWJpZCk7CisKKwkvKgorCSAqIFJldHVy biBmYWxzZSBpZiB0aGUgbnVtYmVyIG9mIHBhcmFsbGVsIGFwcGx5IHdvcmtlcnMgcmVhY2hlZCB0 aGUgbGltaXQKKwkgKiBwZXIgc3Vic2NyaXB0aW9uLgorCSAqLworCWlmIChpc19wYXJhbGxlbF9h cHBseV93b3JrZXIgJiYKKwkJbnBhcmFsbGVsYXBwbHl3b3JrZXJzID49IG1heF9wYXJhbGxlbF9h cHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCisJeworCQlMV0xvY2tSZWxlYXNlKExvZ2lj YWxSZXBXb3JrZXJMb2NrKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qCkBAIC0zNjUsNyAr Mzk1LDcgQEAgcmV0cnk6CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05GSUdVUkFUSU9OX0xJTUlU X0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJvdXQgb2YgbG9naWNhbCByZXBsaWNhdGlvbiB3b3Jr ZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5lZWQgdG8gaW5jcmVhc2UgbWF4 X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycy4iKSkpOwotCQlyZXR1cm47CisJCXJldHVybiBm YWxzZTsKIAl9CiAKIAkvKiBQcmVwYXJlIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTM4MCw2ICs0 MTAsOCBAQCByZXRyeToKIAl3b3JrZXItPnJlbHN0YXRlID0gU1VCUkVMX1NUQVRFX1VOS05PV047 CiAJd29ya2VyLT5yZWxzdGF0ZV9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAl3b3JrZXItPnN0 cmVhbV9maWxlc2V0ID0gTlVMTDsKKwl3b3JrZXItPmFwcGx5X2xlYWRlcl9waWQgPSBpc19wYXJh bGxlbF9hcHBseV93b3JrZXIgPyBNeVByb2NQaWQgOiBJbnZhbGlkUGlkOworCXdvcmtlci0+cGFy YWxsZWxfYXBwbHkgPSBpc19wYXJhbGxlbF9hcHBseV93b3JrZXI7CiAJd29ya2VyLT5sYXN0X2xz biA9IEludmFsaWRYTG9nUmVjUHRyOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9z ZW5kX3RpbWUpOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9yZWN2X3RpbWUpOwpA QCAtMzk3LDE5ICs0MjksMzQgQEAgcmV0cnk6CiAJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJBU0Vf Q09OTkVDVElPTjsKIAliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292ZXJ5 RmluaXNoZWQ7CiAJc25wcmludGYoYmd3LmJnd19saWJyYXJ5X25hbWUsIEJHV19NQVhMRU4sICJw b3N0Z3JlcyIpOwotCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExFTiwg IkFwcGx5V29ya2VyTWFpbiIpOworCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJ c25wcmludGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiUGFyYWxsZWxBcHBs eVdvcmtlck1haW4iKTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwg QkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFpbiIpOworCiAJaWYgKE9pZElzVmFsaWQocmVsaWQp KQogCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCiAJCQkJICJsb2dpY2FsIHJl cGxpY2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1IHN5bmMgJXUiLCBzdWJpZCwgcmVs aWQpOworCWVsc2UgaWYgKGlzX3BhcmFsbGVsX2FwcGx5X3dvcmtlcikKKwkJc25wcmludGYoYmd3 LmJnd19uYW1lLCBCR1dfTUFYTEVOLAorCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxl bCBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSIsIHN1YmlkKTsKIAllbHNlCiAJCXNu cHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKLQkJCQkgImxvZ2ljYWwgcmVwbGljYXRp b24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7Ci0Jc25wcmludGYoYmd3LmJn d190eXBlLCBCR1dfTUFYTEVOLCAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIiKTsKKwkJCQkg ImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBz dWJpZCk7CisKKwlpZiAoaXNfcGFyYWxsZWxfYXBwbHlfd29ya2VyKQorCQlzbnByaW50ZihiZ3cu Ymd3X3R5cGUsIEJHV19NQVhMRU4sICJsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIHdvcmtl ciIpOworCWVsc2UKKwkJc25wcmludGYoYmd3LmJnd190eXBlLCBCR1dfTUFYTEVOLCAibG9naWNh bCByZXBsaWNhdGlvbiB3b3JrZXIiKTsKIAogCWJndy5iZ3dfcmVzdGFydF90aW1lID0gQkdXX05F VkVSX1JFU1RBUlQ7CiAJYmd3LmJnd19ub3RpZnlfcGlkID0gTXlQcm9jUGlkOwogCWJndy5iZ3df bWFpbl9hcmcgPSBJbnQzMkdldERhdHVtKHNsb3QpOwogCisJaWYgKGlzX3BhcmFsbGVsX2FwcGx5 X3dvcmtlcikKKwkJbWVtY3B5KGJndy5iZ3dfZXh0cmEsICZzdWJ3b3JrZXJfZHNtLCBzaXplb2Yo ZHNtX2hhbmRsZSkpOworCiAJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZi Z3csICZiZ3dfaGFuZGxlKSkKIAl7CiAJCS8qIEZhaWxlZCB0byBzdGFydCB3b3JrZXIsIHNvIGNs ZWFuIHVwIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTQyMiwzMyArNDY5LDIzIEBAIHJldHJ5Ogog CQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJ IGVycm1zZygib3V0IG9mIGJhY2tncm91bmQgd29ya2VyIHNsb3RzIiksCiAJCQkJIGVycmhpbnQo IllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIG1heF93b3JrZXJfcHJvY2Vzc2VzLiIpKSk7Ci0J CXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIE5vdyB3YWl0IHVudGlsIGl0IGF0 dGFjaGVzLiAqLwotCVdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVy YXRpb24sIGJnd19oYW5kbGUpOworCXJldHVybiBXYWl0Rm9yUmVwbGljYXRpb25Xb3JrZXJBdHRh Y2god29ya2VyLCBnZW5lcmF0aW9uLCBiZ3dfaGFuZGxlKTsKIH0KIAogLyoKLSAqIFN0b3AgdGhl IGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJpZC9yZWxpZCwgaWYgYW55LCBhbmQg d2FpdCB1bnRpbAotICogaXQgZGV0YWNoZXMgZnJvbSB0aGUgc2xvdC4KKyAqIEludGVybmFsIGZ1 bmN0aW9uIHRvIHN0b3AgdGhlIHdvcmtlciBhbmQgd2FpdCB1bnRpbCBpdCBkZXRhY2hlcyBmcm9t IHRoZQorICogc2xvdC4KICAqLwotdm9pZAotbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3Vi aWQsIE9pZCByZWxpZCkKK3N0YXRpYyB2b2lkCitsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVy bmFsKExvZ2ljYWxSZXBXb3JrZXIgKndvcmtlciwgaW50IHNpZ25vKQogewotCUxvZ2ljYWxSZXBX b3JrZXIgKndvcmtlcjsKIAl1aW50MTYJCWdlbmVyYXRpb247CiAKLQlMV0xvY2tBY3F1aXJlKExv Z2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwotCi0Jd29ya2VyID0gbG9naWNhbHJlcF93 b3JrZXJfZmluZChzdWJpZCwgcmVsaWQsIGZhbHNlKTsKLQotCS8qIE5vIHdvcmtlciwgbm90aGlu ZyB0byBkby4gKi8KLQlpZiAoIXdvcmtlcikKLQl7Ci0JCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJl cFdvcmtlckxvY2spOwotCQlyZXR1cm47Ci0JfQorCUFzc2VydChMV0xvY2tIZWxkQnlNZUluTW9k ZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKSk7CiAKIAkvKgogCSAqIFJlbWVtYmVy IHdoaWNoIGdlbmVyYXRpb24gd2FzIG91ciB3b3JrZXIgc28gd2UgY2FuIGNoZWNrIGlmIHdoYXQg d2Ugc2VlCkBAIC00ODYsMTAgKzUyMyw3IEBAIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1 YmlkLCBPaWQgcmVsaWQpCiAJCSAqIGRpZmZlcmVudCwgbWVhbmluZyB0aGF0IGEgZGlmZmVyZW50 IHdvcmtlciBoYXMgdGFrZW4gdGhlIHNsb3QuCiAJCSAqLwogCQlpZiAoIXdvcmtlci0+aW5fdXNl IHx8IHdvcmtlci0+Z2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKQotCQl7Ci0JCQlMV0xvY2tSZWxl YXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKIAkJCXJldHVybjsKLQkJfQogCiAJCS8qIFdvcmtl ciBoYXMgYXNzaWduZWQgcHJvYywgc28gaXQgaGFzIHN0YXJ0ZWQuICovCiAJCWlmICh3b3JrZXIt PnByb2MpCkBAIC00OTcsNyArNTMxLDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3Vi aWQsIE9pZCByZWxpZCkKIAl9CiAKIAkvKiBOb3cgdGVybWluYXRlIHRoZSB3b3JrZXIgLi4uICov Ci0Ja2lsbCh3b3JrZXItPnByb2MtPnBpZCwgU0lHVEVSTSk7CisJa2lsbCh3b3JrZXItPnByb2Mt PnBpZCwgc2lnbm8pOwogCiAJLyogLi4uIGFuZCB3YWl0IGZvciBpdCB0byBkaWUuICovCiAJZm9y ICg7OykKQEAgLTUyMyw2ICs1NTcsNTMgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3Vi aWQsIE9pZCByZWxpZCkKIAogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBM V19TSEFSRUQpOwogCX0KK30KKworLyoKKyAqIFN0b3AgdGhlIGxvZ2ljYWwgcmVwbGljYXRpb24g d29ya2VyIGZvciBzdWJpZC9yZWxpZCwgaWYgYW55LgorICovCit2b2lkCitsb2dpY2FscmVwX3dv cmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQoreworCUxvZ2ljYWxSZXBXb3JrZXIgKndv cmtlcjsKKworCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7 CisKKwl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2Up OworCisJaWYgKHdvcmtlcikKKwl7CisJCUFzc2VydCghaXNQYXJhbGxlbEFwcGx5V29ya2VyKHdv cmtlcikpOworCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wX2ludGVybmFsKHdvcmtlciwgU0lHVEVS TSk7CisJfQorCisJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8q CisgKiBTdG9wIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBj b3JyZXNwb25kaW5nIHRvIHRoZQorICogaW5wdXQgc2xvdCBudW1iZXIuCisgKgorICogTm9kZSB0 aGF0IHRoZSBmdW5jdGlvbiBzZW5kcyBTSUdJTlQgaW5zdGVhZCBvZiBTSUdURVJNIHRvIHRoZSBw YXJhbGxlbCBhcHBseQorICogd29ya2VyIHNvIHRoYXQgdGhlIHdvcmtlciBleGl0cyBjbGVhbmx5 LgorICovCit2b2lkCitsb2dpY2FscmVwX3BhX3dvcmtlcl9zdG9wKGludCBzbG90X25vLCB1aW50 MTYgZ2VuZXJhdGlvbikKK3sKKwlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7CisKKwlBc3NlcnQo c2xvdF9ubyA+PSAwICYmIHNsb3Rfbm8gPCBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJz KTsKKworCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisK Kwl3b3JrZXIgPSAmTG9naWNhbFJlcEN0eC0+d29ya2Vyc1tzbG90X25vXTsKKwlBc3NlcnQoaXNQ YXJhbGxlbEFwcGx5V29ya2VyKHdvcmtlcikpOworCisJLyoKKwkgKiBPbmx5IHN0b3AgdGhlIHdv cmtlciBpZiB0aGUgZ2VuZXJhdGlvbiBtYXRjaGVzIGFuZCB0aGUgd29ya2VyIGlzIGFsaXZlLgor CSAqLworCWlmICh3b3JrZXItPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbiAmJiB3b3JrZXItPnBy b2MpCisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwod29ya2VyLCBTSUdJTlQpOwog CiAJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiB9CkBAIC01OTUsMTEgKzY3 Niw0MCBAQCBsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2goaW50IHNsb3QpCiB9CiAKIC8qCi0gKiBE ZXRhY2ggdGhlIHdvcmtlciAoY2xlYW5zIHVwIHRoZSB3b3JrZXIgaW5mbykuCisgKiBTdG9wIHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGlmIGFueSwgYW5kIGRldGFjaCB0aGUgbGVhZGVyIGFw cGx5IHdvcmtlcgorICogKGNsZWFucyB1cCB0aGUgd29ya2VyIGluZm8pLgogICovCiBzdGF0aWMg dm9pZAogbG9naWNhbHJlcF93b3JrZXJfZGV0YWNoKHZvaWQpCiB7CisJLyogU3RvcCB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2Vycy4gKi8KKwlpZiAoYW1fbGVhZGVyX2FwcGx5X3dvcmtlcigpKQor CXsKKwkJTGlzdAkgICAqd29ya2VyczsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyoKKwkJICog RGV0YWNoIGZyb20gdGhlIGVycm9yX21xX2hhbmRsZSBmb3IgYWxsIHBhcmFsbGVsIGFwcGx5IHdv cmtlcnMKKwkJICogYmVmb3JlIHRlcm1pbmF0aW5nIHRoZW0uIFRoaXMgcHJldmVudHMgdGhlIGxl YWRlciBhcHBseSB3b3JrZXIgZnJvbQorCQkgKiByZWNlaXZpbmcgdGhlIHdvcmtlciB0ZXJtaW5h dGlvbiBtZXNzYWdlIGFuZCBzZW5kaW5nIGl0IHRvIGxvZ3MKKwkJICogd2hlbiB0aGUgc2FtZSBp cyBhbHJlYWR5IGRvbmUgYnkgdGhlIHBhcmFsbGVsIHdvcmtlci4KKwkJICovCisJCXBhX2RldGFj aF9hbGxfZXJyb3JfbXEoKTsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr LCBMV19TSEFSRUQpOworCisJCXdvcmtlcnMgPSBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFjaChsYywgd29ya2VycykKKwkJ eworCQkJTG9naWNhbFJlcFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29ya2VyICopIGxmaXJzdChs Yyk7CisKKwkJCWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQkJbG9naWNhbHJlcF93 b3JrZXJfc3RvcF9pbnRlcm5hbCh3LCBTSUdURVJNKTsKKwkJfQorCisJCUxXTG9ja1JlbGVhc2Uo TG9naWNhbFJlcFdvcmtlckxvY2spOworCX0KKwogCS8qIEJsb2NrIGNvbmN1cnJlbnQgYWNjZXNz LiAqLwogCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX0VYQ0xVU0lWRSk7 CiAKQEAgLTYyMiw2ICs3MzIsOCBAQCBsb2dpY2FscmVwX3dvcmtlcl9jbGVhbnVwKExvZ2ljYWxS ZXBXb3JrZXIgKndvcmtlcikKIAl3b3JrZXItPnVzZXJpZCA9IEludmFsaWRPaWQ7CiAJd29ya2Vy LT5zdWJpZCA9IEludmFsaWRPaWQ7CiAJd29ya2VyLT5yZWxpZCA9IEludmFsaWRPaWQ7CisJd29y a2VyLT5hcHBseV9sZWFkZXJfcGlkID0gSW52YWxpZFBpZDsKKwl3b3JrZXItPnBhcmFsbGVsX2Fw cGx5ID0gZmFsc2U7CiB9CiAKIC8qCkBAIC02NTMsNiArNzY1LDEzIEBAIGxvZ2ljYWxyZXBfd29y a2VyX29uZXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN0cmVhbV9maWxlc2V0ICE9IE5VTEwpCiAJCUZpbGVTZXREZWxldGVBbGwoTXlMb2dpY2FsUmVw V29ya2VyLT5zdHJlYW1fZmlsZXNldCk7CiAKKwkvKgorCSAqIFNlc3Npb24gbGV2ZWwgbG9ja3Mg bWF5IGJlIGFjcXVpcmVkIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiBpbgorCSAqIHBhcmFsbGVs IGFwcGx5IG1vZGUgYW5kIHdpbGwgbm90IGJlIHJlbGVhc2VkIHdoZW4gdGhlIHdvcmtlcgorCSAq IHRlcm1pbmF0ZXMsIHNvIG1hbnVhbGx5IHJlbGVhc2UgYWxsIGxvY2tzIGJlZm9yZSB0aGUgd29y a2VyIGV4aXRzLgorCSAqLworCUxvY2tSZWxlYXNlQWxsKERFRkFVTFRfTE9DS01FVEhPRCwgdHJ1 ZSk7CisKIAlBcHBseUxhdW5jaGVyV2FrZXVwKCk7CiB9CiAKQEAgLTY4MCw2ICs3OTksMzMgQEAg bG9naWNhbHJlcF9zeW5jX3dvcmtlcl9jb3VudChPaWQgc3ViaWQpCiAJcmV0dXJuIHJlczsKIH0K IAorLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCAoYnV0IG5vdCBuZWNlc3Nh cmlseSBydW5uaW5nKSBwYXJhbGxlbCBhcHBseQorICogd29ya2VycyBmb3IgYSBzdWJzY3JpcHRp b24uCisgKi8KK3N0YXRpYyBpbnQKK2xvZ2ljYWxyZXBfcGFfd29ya2VyX2NvdW50KE9pZCBzdWJp ZCkKK3sKKwlpbnQJCQlpOworCWludAkJCXJlcyA9IDA7CisKKwlBc3NlcnQoTFdMb2NrSGVsZEJ5 TWUoTG9naWNhbFJlcFdvcmtlckxvY2spKTsKKworCS8qCisJICogU2NhbiBhbGwgYXR0YWNoZWQg cGFyYWxsZWwgYXBwbHkgd29ya2Vycywgb25seSBjb3VudGluZyB0aG9zZSB3aGljaAorCSAqIGhh dmUgdGhlIGdpdmVuIHN1YnNjcmlwdGlvbiBpZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4 X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VyczsgaSsrKQorCXsKKwkJTG9naWNhbFJlcFdvcmtl ciAqdyA9ICZMb2dpY2FsUmVwQ3R4LT53b3JrZXJzW2ldOworCisJCWlmICh3LT5zdWJpZCA9PSBz dWJpZCAmJiBpc1BhcmFsbGVsQXBwbHlXb3JrZXIodykpCisJCQlyZXMrKzsKKwl9CisKKwlyZXR1 cm4gcmVzOworfQorCiAvKgogICogQXBwbHlMYXVuY2hlclNobWVtU2l6ZQogICoJCUNvbXB1dGUg c3BhY2UgbmVlZGVkIGZvciByZXBsaWNhdGlvbiBsYXVuY2hlciBzaGFyZWQgbWVtb3J5CkBAIC04 NjksNyArMTAxNSw3IEBAIEFwcGx5TGF1bmNoZXJNYWluKERhdHVtIG1haW5fYXJnKQogCQkJCQl3 YWl0X3RpbWUgPSB3YWxfcmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CiAKIAkJCQkJbG9naWNhbHJl cF93b3JrZXJfbGF1bmNoKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIHN1Yi0+bmFtZSwKLQkJCQkJCQkJ CQkJIHN1Yi0+b3duZXIsIEludmFsaWRPaWQpOworCQkJCQkJCQkJCQkgc3ViLT5vd25lciwgSW52 YWxpZE9pZCwgRFNNX0hBTkRMRV9JTlZBTElEKTsKIAkJCQl9CiAJCQl9CiAKQEAgLTk1Miw2ICsx MDk4LDEwIEBAIHBnX3N0YXRfZ2V0X3N1YnNjcmlwdGlvbihQR19GVU5DVElPTl9BUkdTKQogCQlp ZiAoT2lkSXNWYWxpZChzdWJpZCkgJiYgd29ya2VyLnN1YmlkICE9IHN1YmlkKQogCQkJY29udGlu dWU7CiAKKwkJLyogU2tpcCBpZiB0aGlzIGlzIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyICovCisJ CWlmIChpc1BhcmFsbGVsQXBwbHlXb3JrZXIoJndvcmtlcikpCisJCQljb250aW51ZTsKKwogCQl3 b3JrZXJfcGlkID0gd29ya2VyLnByb2MtPnBpZDsKIAogCQl2YWx1ZXNbMF0gPSBPYmplY3RJZEdl dERhdHVtKHdvcmtlci5zdWJpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9t ZXNvbi5idWlsZAppbmRleCAxYjlmMDcyZWRjLi5iNzhiZmJhMTBjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNiArMSw3IEBACiAjIENvcHly aWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogYmFj a2VuZF9zb3VyY2VzICs9IGZpbGVzKAorICAnYXBwbHlwYXJhbGxlbHdvcmtlci5jJywKICAgJ2Rl Y29kZS5jJywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IGYxMzRlNDQ4NzguLjhiMDgzNzg2NjUgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYwpAQCAtMTA3NSwxMiArMTA3 NSwyMCBAQCBSZXBsaWNhdGlvbk9yaWdpbkV4aXRDbGVhbnVwKGludCBjb2RlLCBEYXR1bSBhcmcp CiAgKiBhcnJheSBkb2Vzbid0IGhhdmUgdG8gYmUgc2VhcmNoZWQgd2hlbiBjYWxsaW5nCiAgKiBy ZXBsb3JpZ2luX3Nlc3Npb25fYWR2YW5jZSgpLgogICoKLSAqIE9idmlvdXNseSBvbmx5IG9uZSBz dWNoIGNhY2hlZCBvcmlnaW4gY2FuIGV4aXN0IHBlciBwcm9jZXNzIGFuZCB0aGUgY3VycmVudAot ICogY2FjaGVkIHZhbHVlIGNhbiBvbmx5IGJlIHNldCBhZ2FpbiBhZnRlciB0aGUgcHJldmlvdXMg dmFsdWUgaXMgdG9ybiBkb3duCi0gKiB3aXRoIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCgpLgor ICogTm9ybWFsbHkgb25seSBvbmUgc3VjaCBjYWNoZWQgb3JpZ2luIGNhbiBleGlzdCBwZXIgcHJv Y2VzcyBzbyB0aGUgY2FjaGVkCisgKiB2YWx1ZSBjYW4gb25seSBiZSBzZXQgYWdhaW4gYWZ0ZXIg dGhlIHByZXZpb3VzIHZhbHVlIGlzIHRvcm4gZG93biB3aXRoCisgKiByZXBsb3JpZ2luX3Nlc3Np b25fcmVzZXQoKS4gRm9yIHRoaXMgbm9ybWFsIGNhc2UgcGFzcyBhY3F1aXJlZF9ieSA9IDAKKyAq IChtZWFuaW5nIHRoZSBzbG90IGlzIG5vdCBhbGxvd2VkIHRvIGJlIGFscmVhZHkgYWNxdWlyZWQg YnkgYW5vdGhlciBwcm9jZXNzKS4KKyAqCisgKiBIb3dldmVyLCBzb21ldGltZXMgbXVsdGlwbGUg cHJvY2Vzc2VzIGNhbiBzYWZlbHkgcmUtdXNlIHRoZSBzYW1lIG9yaWdpbiBzbG90CisgKiAoZm9y IGV4YW1wbGUsIG11bHRpcGxlIHBhcmFsbGVsIGFwcGx5IHByb2Nlc3NlcyBjYW4gc2FmZWx5IHVz ZSB0aGUgc2FtZQorICogb3JpZ2luLCBwcm92aWRlZCB0aGV5IG1haW50YWluIGNvbW1pdCBvcmRl ciBieSBhbGxvd2luZyBvbmx5IG9uZSBwcm9jZXNzIHRvCisgKiBjb21taXQgYXQgYSB0aW1lKS4g Rm9yIHRoaXMgY2FzZSB0aGUgZmlyc3QgcHJvY2VzcyBtdXN0IHBhc3MgYWNxdWlyZWRfYnkgPQor ICogMCwgYW5kIHRoZW4gdGhlIG90aGVyIHByb2Nlc3NlcyBzaGFyaW5nIHRoYXQgc2FtZSBvcmln aW4gY2FuIHBhc3MKKyAqIGFjcXVpcmVkX2J5ID0gUElEIG9mIHRoZSBmaXJzdCBwcm9jZXNzLgog ICovCiB2b2lkCi1yZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkKK3Jl cGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChSZXBPcmlnaW5JZCBub2RlLCBpbnQgYWNxdWlyZWRfYnkp CiB7CiAJc3RhdGljIGJvb2wgcmVnaXN0ZXJlZF9jbGVhbnVwOwogCWludAkJCWk7CkBAIC0xMTIy LDcgKzExMzAsNyBAQCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkK IAkJaWYgKGN1cnN0YXRlLT5yb2lkZW50ICE9IG5vZGUpCiAJCQljb250aW51ZTsKIAotCQllbHNl IGlmIChjdXJzdGF0ZS0+YWNxdWlyZWRfYnkgIT0gMCkKKwkJZWxzZSBpZiAoY3Vyc3RhdGUtPmFj cXVpcmVkX2J5ICE9IDAgJiYgYWNxdWlyZWRfYnkgPT0gMCkKIAkJewogCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfSU5fVVNFKSwKQEAgLTExNTMsNyArMTE2 MSwxMSBAQCByZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkKIAogCUFz c2VydChzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5yb2lkZW50ICE9IEludmFsaWRSZXBPcmln aW5JZCk7CiAKLQlzZXNzaW9uX3JlcGxpY2F0aW9uX3N0YXRlLT5hY3F1aXJlZF9ieSA9IE15UHJv Y1BpZDsKKwlpZiAoYWNxdWlyZWRfYnkgPT0gMCkKKwkJc2Vzc2lvbl9yZXBsaWNhdGlvbl9zdGF0 ZS0+YWNxdWlyZWRfYnkgPSBNeVByb2NQaWQ7CisJZWxzZSBpZiAoc2Vzc2lvbl9yZXBsaWNhdGlv bl9zdGF0ZS0+YWNxdWlyZWRfYnkgIT0gYWNxdWlyZWRfYnkpCisJCWVsb2coRVJST1IsICJjb3Vs ZCBub3QgZmluZCByZXBsaWNhdGlvbiBzdGF0ZSBzbG90IGZvciByZXBsaWNhdGlvbiBvcmlnaW4g d2l0aCBPSUQgJXUgd2hpY2ggd2FzIGFjcXVpcmVkIGJ5ICVkIiwKKwkJCSBub2RlLCBhY3F1aXJl ZF9ieSk7CiAKIAlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uT3JpZ2luTG9jayk7CiAKQEAgLTEz MzcsNyArMTM0OSw3IEBAIHBnX3JlcGxpY2F0aW9uX29yaWdpbl9zZXNzaW9uX3NldHVwKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAluYW1lID0gdGV4dF90b19jc3RyaW5nKCh0ZXh0ICopIERhdHVtR2V0 UG9pbnRlcihQR19HRVRBUkdfREFUVU0oMCkpKTsKIAlvcmlnaW4gPSByZXBsb3JpZ2luX2J5X25h bWUobmFtZSwgZmFsc2UpOwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW4pOworCXJl cGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW4sIDApOwogCiAJcmVwbG9yaWdpbl9zZXNzaW9u X29yaWdpbiA9IG9yaWdpbjsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j CmluZGV4IGY1ZjJiYzI0ZDguLjcyM2JhNDY2OWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3Byb3RvLmMKQEAgLTExNjQsMTAgKzExNjQsMTQgQEAgbG9naWNhbHJlcF9yZWFkX3N0 cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9k YXRhKQogLyoKICAqIFdyaXRlIFNUUkVBTSBBQk9SVCB0byB0aGUgb3V0cHV0IHN0cmVhbS4gTm90 ZSB0aGF0IHhpZCBhbmQgc3VieGlkIHdpbGwgYmUKICAqIHNhbWUgZm9yIHRoZSB0b3AtbGV2ZWwg dHJhbnNhY3Rpb24gYWJvcnQuCisgKgorICogSWYgd3JpdGVfYWJvcnRfaW5mbyBpcyB0cnVlLCBz ZW5kIHRoZSBhYm9ydF9sc24gYW5kIGFib3J0X3RpbWUgZmllbGRzLAorICogb3RoZXJ3aXNlIGRv bid0LgogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZv IG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCkK KwkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkLCBYTG9nUmVjUHRyIGFib3J0X2xzbiwKKwkJ CQkJCQkgIFRpbWVzdGFtcFR6IGFib3J0X3RpbWUsIGJvb2wgd3JpdGVfYWJvcnRfaW5mbykKIHsK IAlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19TVFJFQU1fQUJPUlQpOwogCkBAIC0x MTc2LDE5ICsxMTgwLDQwIEBAIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkvKiB0cmFuc2FjdGlvbiBJRCAqLwogCXBxX3Nl bmRpbnQzMihvdXQsIHhpZCk7CiAJcHFfc2VuZGludDMyKG91dCwgc3VieGlkKTsKKworCWlmICh3 cml0ZV9hYm9ydF9pbmZvKQorCXsKKwkJcHFfc2VuZGludDY0KG91dCwgYWJvcnRfbHNuKTsKKwkJ cHFfc2VuZGludDY0KG91dCwgYWJvcnRfdGltZSk7CisJfQogfQogCiAvKgogICogUmVhZCBTVFJF QU0gQUJPUlQgZnJvbSB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqCisgKiBJZiByZWFkX2Fib3J0X2lu Zm8gaXMgdHJ1ZSwgcmVhZCB0aGUgYWJvcnRfbHNuIGFuZCBhYm9ydF90aW1lIGZpZWxkcywKKyAq IG90aGVyd2lzZSBkb24ndC4KICAqLwogdm9pZAotbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9y dChTdHJpbmdJbmZvIGluLCBUcmFuc2FjdGlvbklkICp4aWQsCi0JCQkJCQkJIFRyYW5zYWN0aW9u SWQgKnN1YnhpZCkKK2xvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwK KwkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkg Ym9vbCByZWFkX2Fib3J0X2luZm8pCiB7Ci0JQXNzZXJ0KHhpZCAmJiBzdWJ4aWQpOworCUFzc2Vy dChhYm9ydF9kYXRhKTsKKworCWFib3J0X2RhdGEtPnhpZCA9IHBxX2dldG1zZ2ludChpbiwgNCk7 CisJYWJvcnRfZGF0YS0+c3VieGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKIAotCSp4aWQgPSBw cV9nZXRtc2dpbnQoaW4sIDQpOwotCSpzdWJ4aWQgPSBwcV9nZXRtc2dpbnQoaW4sIDQpOworCWlm IChyZWFkX2Fib3J0X2luZm8pCisJeworCQlhYm9ydF9kYXRhLT5hYm9ydF9sc24gPSBwcV9nZXRt c2dpbnQ2NChpbik7CisJCWFib3J0X2RhdGEtPmFib3J0X3RpbWUgPSBwcV9nZXRtc2dpbnQ2NChp bik7CisJfQorCWVsc2UKKwl7CisJCWFib3J0X2RhdGEtPmFib3J0X2xzbiA9IEludmFsaWRYTG9n UmVjUHRyOworCQlhYm9ydF9kYXRhLT5hYm9ydF90aW1lID0gMDsKKwl9CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDky MjA0YmQ5Y2QuLmJlYzg5M2RhMDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC0yODczLDcgKzI4NzMsOCBAQCBSZW9yZGVyQnVmZmVy RmluaXNoUHJlcGFyZWQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAogICog ZGlzay4KICAqLwogdm9pZAotUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCitSZW9yZGVyQnVmZmVyQWJvcnQoUmVv cmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkg ICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lKQogewogCVJlb3JkZXJCdWZmZXJUWE4gKnR4bjsKIApA QCAtMjg4NCw2ICsyODg1LDggQEAgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiAJaWYgKHR4biA9PSBOVUxMKQog CQlyZXR1cm47CiAKKwl0eG4tPnhhY3RfdGltZS5hYm9ydF90aW1lID0gYWJvcnRfdGltZTsKKwog CS8qIEZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgbm90aWZ5IHRoZSByZW1vdGUgbm9kZSBhYm91 dCB0aGUgYWJvcnQuICovCiAJaWYgKHJidHhuX2lzX3N0cmVhbWVkKHR4bikpCiAJewpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKaW5kZXggOTRlODEzYWM1My4u ZWYwZmUxM2MxNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3lu Yy5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKgkgIFRoZSBpbml0aWFsIGRhdGEgc3luY2hyb25pemF0 aW9uIGlzIGRvbmUgc2VwYXJhdGVseSBmb3IgZWFjaCB0YWJsZSwKICAqCSAgaW4gYSBzZXBhcmF0 ZSBhcHBseSB3b3JrZXIgdGhhdCBvbmx5IGZldGNoZXMgdGhlIGluaXRpYWwgc25hcHNob3QgZGF0 YQogICoJICBmcm9tIHRoZSBwdWJsaXNoZXIgYW5kIHRoZW4gc3luY2hyb25pemVzIHRoZSBwb3Np dGlvbiBpbiB0aGUgc3RyZWFtIHdpdGgKLSAqCSAgdGhlIG1haW4gYXBwbHkgd29ya2VyLgorICoJ ICB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlci4KICAqCiAgKgkgIFRoZXJlIGFyZSBzZXZlcmFsIHJl YXNvbnMgZm9yIGRvaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gdGhpcyB3YXk6CiAgKgkgICAtIEl0 IGFsbG93cyB1cyB0byBwYXJhbGxlbGl6ZSB0aGUgaW5pdGlhbCBkYXRhIHN5bmNocm9uaXphdGlv bgpAQCAtMTUzLDcgKzE1Myw3IEBAIGZpbmlzaF9zeW5jX3dvcmtlcih2b2lkKQogCQkJCQlnZXRf cmVsX25hbWUoTXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCkpKSk7CiAJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CiAKLQkvKiBGaW5kIHRoZSBtYWluIGFwcGx5IHdvcmtlciBhbmQgc2lnbmFs IGl0LiAqLworCS8qIEZpbmQgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHNpZ25hbCBpdC4g Ki8KIAlsb2dpY2FscmVwX3dvcmtlcl93YWtldXAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg SW52YWxpZE9pZCk7CiAKIAkvKiBTdG9wIGdyYWNlZnVsbHkgKi8KQEAgLTYwOSw3ICs2MDksOCBA QCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9nUmVjUHRyIGN1cnJlbnRfbHNu KQogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsCiAJCQkJCQkJCQkJCQkgTXlTdWJz Y3JpcHRpb24tPm5hbWUsCiAJCQkJCQkJCQkJCQkgTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQs Ci0JCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxpZCk7CisJCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxp ZCwKKwkJCQkJCQkJCQkJCSBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCQkJaGVudHJ5LT5sYXN0 X3N0YXJ0X3RpbWUgPSBub3c7CiAJCQkJCX0KIAkJCQl9CkBAIC02MzAsNiArNjMxLDE0IEBAIHBy b2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX2FwcGx5KFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiB2 b2lkCiBwcm9jZXNzX3N5bmNpbmdfdGFibGVzKFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiB7CisJ LyoKKwkgKiBTa2lwIGZvciBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGJlY2F1c2UgdGhleSBvbmx5 IG9wZXJhdGUgb24gdGFibGVzCisJICogdGhhdCBhcmUgaW4gYSBSRUFEWSBzdGF0ZS4gU2VlIHBh X2Nhbl9zdGFydCgpIGFuZAorCSAqIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwoKS4KKwkg Ki8KKwlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJCXJldHVybjsKKwogCWlmIChh bV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCXByb2Nlc3Nfc3luY2luZ190YWJsZXNfZm9yX3N5bmMo Y3VycmVudF9sc24pOwogCWVsc2UKQEAgLTEyNDcsNyArMTI1Niw3IEBAIExvZ2ljYWxSZXBTeW5j VGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAKIAkvKgogCSAqIEhlcmUg d2UgdXNlIHRoZSBzbG90IG5hbWUgaW5zdGVhZCBvZiB0aGUgc3Vic2NyaXB0aW9uIG5hbWUgYXMg dGhlCi0JICogYXBwbGljYXRpb25fbmFtZSwgc28gdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0 aGUgbWFpbiBhcHBseSB3b3JrZXIsCisJICogYXBwbGljYXRpb25fbmFtZSwgc28gdGhhdCBpdCBp cyBkaWZmZXJlbnQgZnJvbSB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciwKIAkgKiBzbyB0aGF0IHN5 bmNocm9ub3VzIHJlcGxpY2F0aW9uIGNhbiBkaXN0aW5ndWlzaCB0aGVtLgogCSAqLwogCUxvZ1Jl cFdvcmtlcldhbFJjdkNvbm4gPQpAQCAtMTI5NSw3ICsxMzA0LDcgQEAgTG9naWNhbFJlcFN5bmNU YWJsZVN0YXJ0KFhMb2dSZWNQdHIgKm9yaWdpbl9zdGFydHBvcykKIAkJICogdGltZSB0aGlzIHRh Ymxlc3luYyB3YXMgbGF1bmNoZWQuCiAJCSAqLwogCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fYnlf bmFtZShvcmlnaW5uYW1lLCBmYWxzZSk7Ci0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmln aW5pZCk7CisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7CiAJCXJlcGxv cmlnaW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKIAkJKm9yaWdpbl9zdGFydHBvcyA9IHJl cGxvcmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCkBAIC0xNDA2LDcgKzE0MTUs NyBAQCBMb2dpY2FsUmVwU3luY1RhYmxlU3RhcnQoWExvZ1JlY1B0ciAqb3JpZ2luX3N0YXJ0cG9z KQogCQkJCQkJICAgdHJ1ZSAvKiBnbyBiYWNrd2FyZCAqLyAsIHRydWUgLyogV0FMIGxvZyAqLyAp OwogCQlVbmxvY2tSZWxhdGlvbk9pZChSZXBsaWNhdGlvbk9yaWdpblJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOwogCi0JCXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCk7CisJ CXJlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChvcmlnaW5pZCwgMCk7CiAJCXJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW4gPSBvcmlnaW5pZDsKIAl9CiAJZWxzZQpAQCAtMTQ2MSw4ICsxNDcwLDggQEAg Y29weV90YWJsZV9kb25lOgogCVNwaW5Mb2NrUmVsZWFzZSgmTXlMb2dpY2FsUmVwV29ya2VyLT5y ZWxtdXRleCk7CiAKIAkvKgotCSAqIEZpbmFsbHksIHdhaXQgdW50aWwgdGhlIG1haW4gYXBwbHkg d29ya2VyIHRlbGxzIHVzIHRvIGNhdGNoIHVwIGFuZCB0aGVuCi0JICogcmV0dXJuIHRvIGxldCBM b2dpY2FsUmVwQXBwbHlMb29wIGRvIGl0LgorCSAqIEZpbmFsbHksIHdhaXQgdW50aWwgdGhlIGxl YWRlciBhcHBseSB3b3JrZXIgdGVsbHMgdXMgdG8gY2F0Y2ggdXAgYW5kCisJICogdGhlbiByZXR1 cm4gdG8gbGV0IExvZ2ljYWxSZXBBcHBseUxvb3AgZG8gaXQuCiAJICovCiAJd2FpdF9mb3Jfd29y a2VyX3N0YXRlX2NoYW5nZShTVUJSRUxfU1RBVEVfQ0FUQ0hVUCk7CiAJcmV0dXJuIHNsb3RuYW1l OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggOTY3NzJlNGQ3 My4uMjI4NDNlNjU1MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j CkBAIC0yMiw4ICsyMiwxMiBAQAogICogU1RSRUFNRUQgVFJBTlNBQ1RJT05TCiAgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqIFN0cmVhbWVkIHRyYW5zYWN0aW9ucyAobGFyZ2UgdHJhbnNhY3Rp b25zIGV4Y2VlZGluZyBhIG1lbW9yeSBsaW1pdCBvbiB0aGUKLSAqIHVwc3RyZWFtKSBhcmUgbm90 IGFwcGxpZWQgaW1tZWRpYXRlbHksIGJ1dCBpbnN0ZWFkLCB0aGUgZGF0YSBpcyB3cml0dGVuCi0g KiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBhdCBvbmNlIHdoZW4gdGhlIGZp bmFsIGNvbW1pdCBhcnJpdmVzLgorICogdXBzdHJlYW0pIGFyZSBhcHBsaWVkIHVzaW5nIG9uZSBv ZiB0d28gYXBwcm9hY2hlczoKKyAqCisgKiAxKSBXcml0ZSB0byB0ZW1wb3JhcnkgZmlsZXMgYW5k IGFwcGx5IHdoZW4gdGhlIGZpbmFsIGNvbW1pdCBhcnJpdmVzCisgKgorICogVGhpcyBhcHByb2Fj aCBpcyB1c2VkIHdoZW4gdGhlIHVzZXIgaGFzIHNldCB0aGUgc3Vic2NyaXB0aW9uJ3Mgc3RyZWFt aW5nCisgKiBvcHRpb24gYXMgb24uCiAgKgogICogVW5saWtlIHRoZSByZWd1bGFyIChub24tc3Ry ZWFtZWQpIGNhc2UsIGhhbmRsaW5nIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBoYXMKICAqIHRvIGhh bmRsZSBhYm9ydHMgb2YgYm90aCB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24gYW5kIHN1YnRyYW5z YWN0aW9ucy4gVGhpcwpAQCAtNTAsNiArNTQsMTIgQEAKICAqIHRoZSBmaWxlIHdlIGRlc2lyZWQg YWNyb3NzIG11bHRpcGxlIHN0cmVhbS1vcGVuIGNhbGxzIGZvciB0aGUgc2FtZQogICogdHJhbnNh Y3Rpb24uCiAgKgorICogMikgUGFyYWxsZWwgYXBwbHkgd29ya2Vycy4KKyAqCisgKiBUaGlzIGFw cHJvYWNoIGlzIHVzZWQgd2hlbiB0aGUgdXNlciBoYXMgc2V0IHRoZSBzdWJzY3JpcHRpb24ncyBz dHJlYW1pbmcKKyAqIG9wdGlvbiBhcyBwYXJhbGxlbC4gU2VlIGxvZ2ljYWwvYXBwbHlwYXJhbGxl bHdvcmtlci5jIGZvciBpbmZvcm1hdGlvbiBhYm91dAorICogdGhpcyBhcHByb2FjaC4KKyAqCiAg KiBUV09fUEhBU0UgVFJBTlNBQ1RJT05TCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBU d28gcGhhc2UgdHJhbnNhY3Rpb25zIGFyZSByZXBsYXllZCBhdCBwcmVwYXJlIGFuZCB0aGVuIGNv bW1pdHRlZCBvcgpAQCAtMjMzLDcgKzI0Myw1MiBAQCB0eXBlZGVmIHN0cnVjdCBBcHBseUVycm9y Q2FsbGJhY2tBcmcKIAljaGFyCSAgICpvcmlnaW5fbmFtZTsKIH0gQXBwbHlFcnJvckNhbGxiYWNr QXJnOwogCi1zdGF0aWMgQXBwbHlFcnJvckNhbGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNr X2FyZyA9CisvKgorICogVGhlIGFjdGlvbiB0byBiZSB0YWtlbiBmb3IgdGhlIGNoYW5nZXMgaW4g dGhlIHRyYW5zYWN0aW9uLgorICoKKyAqIFRSQU5TX0xFQURFUl9BUFBMWToKKyAqIFRoaXMgYWN0 aW9uIG1lYW5zIHRoYXQgd2UgYXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBjaGFu Z2VzIG9mIHRoZQorICogdHJhbnNhY3Rpb24gYXJlIGFwcGxpZWQgZGlyZWN0bHkgYnkgdGhlIHdv cmtlci4KKyAqCisgKiBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgorICogVGhpcyBhY3Rpb24gbWVh bnMgdGhhdCB3ZSBhcmUgaW4gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgb3IgdGFibGUgc3luYwor ICogd29ya2VyLiBDaGFuZ2VzIGFyZSB3cml0dGVuIHRvIHRlbXBvcmFyeSBmaWxlcyBhbmQgdGhl biBhcHBsaWVkIHdoZW4gdGhlCisgKiBmaW5hbCBjb21taXQgYXJyaXZlcy4KKyAqCisgKiBUUkFO U19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKyAqIFRoaXMgYWN0aW9uIG1lYW5zIHRoYXQgd2Ug YXJlIGluIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBuZWVkIHRvIHNlbmQKKyAqIHRoZSBj aGFuZ2VzIHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKgorICogVFJBTlNfTEVBREVS X1BBUlRJQUxfU0VSSUFMSVpFOgorICogVGhpcyBhY3Rpb24gbWVhbnMgdGhhdCB3ZSBhcmUgaW4g dGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIGhhdmUgc2VudCBzb21lCisgKiBjaGFuZ2VzIGRp cmVjdGx5IHRvIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgYW5kIHRoZSByZW1haW5pbmcgY2hh bmdlcyBhcmUKKyAqIHNlcmlhbGl6ZWQgdG8gYSBmaWxlLCBkdWUgdG8gdGltZW91dCB3aGlsZSBz ZW5kaW5nIGRhdGEuIFRoZSBwYXJhbGxlbCBhcHBseQorICogd29ya2VyIHdpbGwgYXBwbHkgdGhl c2Ugc2VyaWFsaXplZCBjaGFuZ2VzIHdoZW4gdGhlIGZpbmFsIGNvbW1pdCBhcnJpdmVzLgorICoK KyAqIFdlIGNhbid0IHVzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFIGZvciB0aGlzIGNhc2UgYmVj YXVzZSwgaW4gYWRkaXRpb24gdG8KKyAqIHNlcmlhbGl6aW5nIGNoYW5nZXMsIHRoZSBsZWFkZXIg d29ya2VyIGFsc28gbmVlZHMgdG8gc2VyaWFsaXplIHRoZQorICogU1RSRUFNX1hYWCBtZXNzYWdl IHRvIGEgZmlsZSwgYW5kIHdhaXQgZm9yIHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8KKyAq IGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24gd2hlbiBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbiBm aW5pc2ggY29tbWFuZC4gU28KKyAqIHRoaXMgbmV3IGFjdGlvbiB3YXMgaW50cm9kdWNlZCB0byBr ZWVwIHRoZSBjb2RlIGFuZCBsb2dpYyBjbGVhci4KKyAqCisgKiBUUkFOU19QQVJBTExFTF9BUFBM WToKKyAqIFRoaXMgYWN0aW9uIG1lYW5zIHRoYXQgd2UgYXJlIGluIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgYW5kIGNoYW5nZXMgb2YKKyAqIHRoZSB0cmFuc2FjdGlvbiBhcmUgYXBwbGllZCBk aXJlY3RseSBieSB0aGUgd29ya2VyLgorICovCit0eXBlZGVmIGVudW0KK3sKKwkvKiBUaGUgYWN0 aW9uIGZvciBub24tc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4gKi8KKwlUUkFOU19MRUFERVJfQVBQ TFksCisKKwkvKiBBY3Rpb25zIGZvciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLiAqLworCVRSQU5T X0xFQURFUl9TRVJJQUxJWkUsCisJVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwsCisJVFJB TlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFLAorCVRSQU5TX1BBUkFMTEVMX0FQUExZCit9IFRy YW5zQXBwbHlBY3Rpb247CisKKy8qIGVycmNvbnRleHQgdHJhY2tlciAqLworQXBwbHlFcnJvckNh bGxiYWNrQXJnIGFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZyA9CiB7CiAJLmNvbW1hbmQgPSAwLAog CS5yZWwgPSBOVUxMLApAQCAtMjQzLDcgKzI5OCw5IEBAIHN0YXRpYyBBcHBseUVycm9yQ2FsbGJh Y2tBcmcgYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnID0KIAkub3JpZ2luX25hbWUgPSBOVUxMLAog fTsKIAotc3RhdGljIE1lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dCA9IE5VTEw7CitF cnJvckNvbnRleHRDYWxsYmFjayAqYXBwbHlfZXJyb3JfY29udGV4dF9zdGFjayA9IE5VTEw7CisK K01lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dCA9IE5VTEw7CiBNZW1vcnlDb250ZXh0 IEFwcGx5Q29udGV4dCA9IE5VTEw7CiAKIC8qIHBlciBzdHJlYW0gY29udGV4dCBmb3Igc3RyZWFt aW5nIHRyYW5zYWN0aW9ucyAqLwpAQCAtMjYyLDE3ICszMTksMjYgQEAgc3RhdGljIGJvb2wgaW5f c3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogc3RhdGljIFRyYW5zYWN0aW9uSWQgc3Ry ZWFtX3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCisvKgorICogVGhlIG51bWJlciBvZiBj aGFuZ2VzIGFwcGxpZWQgYnkgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGR1cmluZyBvbmUgc3RyZWFt aW5nCisgKiBibG9jay4KKyAqLworc3RhdGljIHVpbnQzMiBwYXJhbGxlbF9zdHJlYW1fbmNoYW5n ZXMgPSAwOworCiAvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlv biBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9u IGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNr aXBsc24uCiAgKiBPbmNlIHdlIHN0YXJ0IHNraXBwaW5nIGNoYW5nZXMsIHdlIGRvbid0IHN0b3Ag aXQgdW50aWwgd2Ugc2tpcCBhbGwgY2hhbmdlcyBvZgogICogdGhlIHRyYW5zYWN0aW9uIGV2ZW4g aWYgcGdfc3Vic2NyaXB0aW9uIGlzIHVwZGF0ZWQgYW5kIE15U3Vic2NyaXB0aW9uLT5za2lwbHNu Ci0gKiBnZXRzIGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbiBjYXNlcywgd2UKLSAqIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9v bGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKKyAqIGdldHMg Y2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0 aW9uIGNhc2VzIChzdHJlYW1pbmcgPSBvbiksCisgKiB3ZSBkb24ndCBza2lwIHJlY2VpdmluZyBh bmQgc3Bvb2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90CiAg KiB0byBza2lwIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIHdoZW4gc3RhcnRpbmcgdG8gYXBwbHkgY2hh bmdlcy4gVGhlIHN1YnNraXBsc24gaXMKICAqIGNsZWFyZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNr aXBwaW5nIHRoZSB0cmFuc2FjdGlvbiBvciBhcHBseWluZyBub24tZW1wdHkKICAqIHRyYW5zYWN0 aW9uLiBUaGUgbGF0dGVyIHByZXZlbnRzIHRoZSBtaXN0YWtlbmx5IHNwZWNpZmllZCBzdWJza2lw bHNuIGZyb20KLSAqIGJlaW5nIGxlZnQuCisgKiBiZWluZyBsZWZ0LiBOb3RlIHRoYXQgd2UgY2Fu bm90IHNraXAgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgd2hlbiB1c2luZworICogcGFyYWxs ZWwgYXBwbHkgd29ya2VycyBiZWNhdXNlIHdlIGNhbm5vdCBnZXQgdGhlIGZpbmlzaCBMU04gYmVm b3JlIGFwcGx5aW5nCisgKiB0aGUgY2hhbmdlcy4gU28sIHdlIGRvbid0IHN0YXJ0IHBhcmFsbGVs IGFwcGx5IHdvcmtlciB3aGVuIGZpbmlzaCBMU04gaXMgc2V0CisgKiBieSB0aGUgdXNlci4KICAq Lwogc3RhdGljIFhMb2dSZWNQdHIgc2tpcF94YWN0X2ZpbmlzaF9sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKICNkZWZpbmUgaXNfc2tpcHBpbmdfY2hhbmdlcygpICh1bmxpa2VseSghWExvZ1JlY1B0 cklzSW52YWxpZChza2lwX3hhY3RfZmluaXNoX2xzbikpKQpAQCAtMzEyLDIzICszNzgsMTYgQEAg c3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc3VieGFjdF9pbmZvKHZvaWQpOwogLyoKICAqIFNl cmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgY2hhbmdlcyBmb3IgYSB0b3BsZXZlbCB0cmFuc2FjdGlv bi4KICAqLwotc3RhdGljIHZvaWQgc3RyZWFtX2NsZWFudXBfZmlsZXMoT2lkIHN1YmlkLCBUcmFu c2FjdGlvbklkIHhpZCk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fb3Blbl9maWxlKE9pZCBzdWJpZCwg VHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJIGJvb2wgZmlyc3Rfc2VnbWVudCk7CiBzdGF0aWMg dm9pZCBzdHJlYW1fd3JpdGVfY2hhbmdlKGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpOworc3Rh dGljIHZvaWQgc3RyZWFtX29wZW5fYW5kX3dyaXRlX2NoYW5nZShUcmFuc2FjdGlvbklkIHhpZCwg Y2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcyk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fY2xvc2VfZmls ZSh2b2lkKTsKIAogc3RhdGljIHZvaWQgc2VuZF9mZWVkYmFjayhYTG9nUmVjUHRyIHJlY3Zwb3Ms IGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJlcGx5KTsKIAotc3RhdGljIHZvaWQgc3RvcmVfZmx1 c2hfcG9zaXRpb24oWExvZ1JlY1B0ciByZW1vdGVfbHNuKTsKLQotc3RhdGljIHZvaWQgbWF5YmVf cmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKTsKLQogc3RhdGljIHZvaWQgRGlzYWJsZVN1YnNjcmlw dGlvbkFuZEV4aXQodm9pZCk7CiAKLS8qIHByb3RvdHlwZSBuZWVkZWQgYmVjYXVzZSBvZiBzdHJl YW1fY29tbWl0ICovCi1zdGF0aWMgdm9pZCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpOwot CiBzdGF0aWMgdm9pZCBhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKExvZ2ljYWxSZXBDb21t aXREYXRhICpjb21taXRfZGF0YSk7CiBzdGF0aWMgdm9pZCBhcHBseV9oYW5kbGVfaW5zZXJ0X2lu dGVybmFsKEFwcGx5RXhlY3V0aW9uRGF0YSAqZWRhdGEsCiAJCQkJCQkJCQkJIFJlc3VsdFJlbElu Zm8gKnJlbGluZm8sCkBAIC0zNTIsMTkgKzQxMSwzMiBAQCBzdGF0aWMgdm9pZCBhcHBseV9oYW5k bGVfdHVwbGVfcm91dGluZyhBcHBseUV4ZWN1dGlvbkRhdGEgKmVkYXRhLAogLyogQ29tcHV0ZSBH SUQgZm9yIHR3b19waGFzZSB0cmFuc2FjdGlvbnMgKi8KIHN0YXRpYyB2b2lkIFR3b1BoYXNlVHJh bnNhY3Rpb25HaWQoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCwgY2hhciAqZ2lkLCBpbnQg c3pnaWQpOwogCi0vKiBDb21tb24gc3RyZWFtaW5nIGZ1bmN0aW9uIHRvIGFwcGx5IGFsbCB0aGUg c3Bvb2xlZCBtZXNzYWdlcyAqLwotc3RhdGljIHZvaWQgYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOwotCiAvKiBGdW5jdGlvbnMgZm9yIHNr aXBwaW5nIGNoYW5nZXMgKi8KIHN0YXRpYyB2b2lkIG1heWJlX3N0YXJ0X3NraXBwaW5nX2NoYW5n ZXMoWExvZ1JlY1B0ciBmaW5pc2hfbHNuKTsKIHN0YXRpYyB2b2lkIHN0b3Bfc2tpcHBpbmdfY2hh bmdlcyh2b2lkKTsKIHN0YXRpYyB2b2lkIGNsZWFyX3N1YnNjcmlwdGlvbl9za2lwX2xzbihYTG9n UmVjUHRyIGZpbmlzaF9sc24pOwogCiAvKiBGdW5jdGlvbnMgZm9yIGFwcGx5IGVycm9yIGNhbGxi YWNrICovCi1zdGF0aWMgdm9pZCBhcHBseV9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpOwogc3Rh dGljIGlubGluZSB2b2lkIHNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIgbHNuKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldF9hcHBseV9l cnJvcl9jb250ZXh0X2luZm8odm9pZCk7CiAKK3N0YXRpYyBUcmFuc0FwcGx5QWN0aW9uIGdldF90 cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJCQkJCQkJ IFBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICoqd2luZm8pOworCisvKgorICogUmV0dXJuIHRoZSBu YW1lIG9mIHRoZSBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtlci4KKyAqLworc3RhdGljIGNvbnN0 IGNoYXIgKgorZ2V0X3dvcmtlcl9uYW1lKHZvaWQpCit7CisJaWYgKGFtX3RhYmxlc3luY193b3Jr ZXIoKSkKKwkJcmV0dXJuIF8oImxvZ2ljYWwgcmVwbGljYXRpb24gdGFibGUgc3luY2hyb25pemF0 aW9uIHdvcmtlciIpOworCWVsc2UgaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQorCQly ZXR1cm4gXygibG9naWNhbCByZXBsaWNhdGlvbiBwYXJhbGxlbCBhcHBseSB3b3JrZXIiKTsKKwll bHNlCisJCXJldHVybiBfKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciIpOworfQor CiAvKgogICogRm9ybSB0aGUgb3JpZ2luIG5hbWUgZm9yIHRoZSBzdWJzY3JpcHRpb24uCiAgKgpA QCAtMzk0LDE5ICs0NjYsNDMgQEAgUmVwbGljYXRpb25PcmlnaW5OYW1lRm9yTG9naWNhbFJlcChP aWQgc3Vib2lkLCBPaWQgcmVsaWQsCiAgKgogICogVGhpcyBpcyBtYWlubHkgbmVlZGVkIGZvciBp bml0aWFsIHJlbGF0aW9uIGRhdGEgc3luYyBhcyB0aGF0IHJ1bnMgaW4KICAqIHNlcGFyYXRlIHdv cmtlciBwcm9jZXNzIHJ1bm5pbmcgaW4gcGFyYWxsZWwgYW5kIHdlIG5lZWQgc29tZSB3YXkgdG8g c2tpcAotICogY2hhbmdlcyBjb21pbmcgdG8gdGhlIG1haW4gYXBwbHkgd29ya2VyIGR1cmluZyB0 aGUgc3luYyBvZiBhIHRhYmxlLgorICogY2hhbmdlcyBjb21pbmcgdG8gdGhlIGxlYWRlciBhcHBs eSB3b3JrZXIgZHVyaW5nIHRoZSBzeW5jIG9mIGEgdGFibGUuCiAgKgogICogTm90ZSB3ZSBuZWVk IHRvIGRvIHNtYWxsZXIgb3IgZXF1YWxzIGNvbXBhcmlzb24gZm9yIFNZTkNET05FIHN0YXRlIGJl Y2F1c2UKICAqIGl0IG1pZ2h0IGhvbGQgcG9zaXRpb24gb2YgZW5kIG9mIGluaXRpYWwgc2xvdCBj b25zaXN0ZW50IHBvaW50IFdBTAogICogcmVjb3JkICsgMSAoaWUgc3RhcnQgb2YgbmV4dCByZWNv cmQpIGFuZCBuZXh0IHJlY29yZCBjYW4gYmUgQ09NTUlUIG9mCiAgKiB0cmFuc2FjdGlvbiB3ZSBh cmUgbm93IHByb2Nlc3NpbmcgKHdoaWNoIGlzIHdoYXQgd2Ugc2V0IHJlbW90ZV9maW5hbF9sc24K ICAqIHRvIGluIGFwcGx5X2hhbmRsZV9iZWdpbikuCisgKgorICogTm90ZSB0aGF0IGZvciBzdHJl YW1pbmcgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGFwcGxpZWQgaW4gdGhlIHBhcmFsbGVs CisgKiBhcHBseSB3b3JrZXIsIHdlIGRpc2FsbG93IGFwcGx5aW5nIGNoYW5nZXMgaWYgdGhlIHRh cmdldCB0YWJsZSBpbiB0aGUKKyAqIHN1YnNjcmlwdGlvbiBpcyBub3QgaW4gdGhlIFJFQURZIHN0 YXRlLCBiZWNhdXNlIHdlIGNhbm5vdCBkZWNpZGUgd2hldGhlciB0bworICogYXBwbHkgdGhlIGNo YW5nZSBhcyB3ZSB3b24ndCBrbm93IHJlbW90ZV9maW5hbF9sc24gYnkgdGhhdCB0aW1lLgorICoK KyAqIFdlIGFscmVhZHkgY2hlY2tlZCB0aGlzIGluIHBhX2Nhbl9zdGFydCgpIGJlZm9yZSBhc3Np Z25pbmcgdGhlCisgKiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gdG8gdGhlIHBhcmFsbGVsIHdvcmtl ciwgYnV0IGl0IGFsc28gbmVlZHMgdG8gYmUKKyAqIGNoZWNrZWQgaGVyZSBiZWNhdXNlIGlmIHRo ZSB1c2VyIGV4ZWN1dGVzIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSAorICogUFVCTElD QVRJT04gaW4gcGFyYWxsZWwsIHRoZSBuZXcgdGFibGUgY2FuIGJlIGFkZGVkIHRvIHBnX3N1YnNj cmlwdGlvbl9yZWwKKyAqIHdoaWxlIGFwcGx5aW5nIHRoaXMgdHJhbnNhY3Rpb24uCiAgKi8KIHN0 YXRpYyBib29sCiBzaG91bGRfYXBwbHlfY2hhbmdlc19mb3JfcmVsKExvZ2ljYWxSZXBSZWxNYXBF bnRyeSAqcmVsKQogewogCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCXJldHVybiBNeUxv Z2ljYWxSZXBXb3JrZXItPnJlbGlkID09IHJlbC0+bG9jYWxyZWxvaWQ7CisJZWxzZSBpZiAoYW1f cGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJeworCQkvKiBXZSBkb24ndCBzeW5jaHJvbml6ZSBy ZWwncyB0aGF0IGFyZSBpbiB1bmtub3duIHN0YXRlLiAqLworCQlpZiAocmVsLT5zdGF0ZSAhPSBT VUJSRUxfU1RBVEVfUkVBRFkgJiYKKwkJCXJlbC0+c3RhdGUgIT0gU1VCUkVMX1NUQVRFX1VOS05P V04pCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1Rf SU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygibG9naWNhbCByZXBsaWNhdGlv biBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBzdG9w IiwKKwkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSksCisJCQkJCSBlcnJkZXRhaWwoIkNhbm5v dCBoYW5kbGUgc3RyZWFtZWQgcmVwbGljYXRpb24gdHJhbnNhY3Rpb25zIHVzaW5nIHBhcmFsbGVs IGFwcGx5IHdvcmtlcnMgdW50aWwgYWxsIHRhYmxlcyBoYXZlIGJlZW4gc3luY2hyb25pemVkLiIp KSk7CisKKwkJcmV0dXJuIHJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX1JFQURZOworCX0KIAll bHNlCiAJCXJldHVybiAocmVsLT5zdGF0ZSA9PSBTVUJSRUxfU1RBVEVfUkVBRFkgfHwKIAkJCQko cmVsLT5zdGF0ZSA9PSBTVUJSRUxfU1RBVEVfU1lOQ0RPTkUgJiYKQEAgLTQ1Miw0MyArNTQ4LDEx MCBAQCBlbmRfcmVwbGljYXRpb25fc3RlcCh2b2lkKQogfQogCiAvKgotICogSGFuZGxlIHN0cmVh bWVkIHRyYW5zYWN0aW9ucy4KKyAqIEhhbmRsZSBzdHJlYW1lZCB0cmFuc2FjdGlvbnMgZm9yIGJv dGggdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZQorICogcGFyYWxsZWwgYXBwbHkgd29y a2Vycy4KICAqCi0gKiBJZiBpbiBzdHJlYW1pbmcgbW9kZSAocmVjZWl2aW5nIGEgYmxvY2sgb2Yg c3RyZWFtZWQgdHJhbnNhY3Rpb24pLCB3ZQotICogc2ltcGx5IHJlZGlyZWN0IGl0IHRvIGEgZmls ZSBmb3IgdGhlIHByb3BlciB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KKyAqIEluIHRoZSBzdHJlYW1p bmcgY2FzZSAocmVjZWl2aW5nIGEgYmxvY2sgb2YgdGhlIHN0cmVhbWVkIHRyYW5zYWN0aW9uKSwg Zm9yCisgKiBzZXJpYWxpemUgbW9kZSwgc2ltcGx5IHJlZGlyZWN0IGl0IHRvIGEgZmlsZSBmb3Ig dGhlIHByb3BlciB0b3BsZXZlbAorICogdHJhbnNhY3Rpb24sIGFuZCBmb3IgcGFyYWxsZWwgbW9k ZSwgdGhlIGxlYWRlciBhcHBseSB3b3JrZXIgd2lsbCBzZW5kIHRoZQorICogY2hhbmdlcyB0byBw YXJhbGxlbCBhcHBseSB3b3JrZXJzIGFuZCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwg ZGVmaW5lCisgKiBzYXZlcG9pbnRzIGlmIG5lZWRlZC4gKExPR0lDQUxfUkVQX01TR19SRUxBVElP TiBvciBMT0dJQ0FMX1JFUF9NU0dfVFlQRQorICogbWVzc2FnZXMgd2lsbCBiZSBhcHBsaWVkIGJ5 IGJvdGggbGVhZGVyIGFwcGx5IHdvcmtlciBhbmQgcGFyYWxsZWwgYXBwbHkKKyAqIHdvcmtlcnMp LgogICoKLSAqIFJldHVybnMgdHJ1ZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCBmYWxzZSBv dGhlcndpc2UgKHJlZ3VsYXIgbW9kZSkuCisgKiBSZXR1cm5zIHRydWUgZm9yIHN0cmVhbWVkIHRy YW5zYWN0aW9ucyAod2hlbiB0aGUgY2hhbmdlIGlzIGVpdGhlciBzZXJpYWxpemVkCisgKiB0byBm aWxlIG9yIHNlbnQgdG8gcGFyYWxsZWwgYXBwbHkgd29ya2VyKSwgZmFsc2Ugb3RoZXJ3aXNlIChy ZWd1bGFyIG1vZGUgb3IKKyAqIG5lZWRzIHRvIGJlIHByb2Nlc3NlZCBieSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIpLgorICoKKyAqIEV4Y2VwdGlvbjogSWYgdGhlIG1lc3NhZ2UgYmVpbmcgcHJvY2Vz c2VkIGlzIExPR0lDQUxfUkVQX01TR19SRUxBVElPTgorICogb3IgTE9HSUNBTF9SRVBfTVNHX1RZ UEUsIHJldHVybiBmYWxzZSBldmVuIGlmIHRoZSBtZXNzYWdlIG5lZWRzIHRvIGJlIHNlbnQKKyAq IHRvIGEgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgogICovCiBzdGF0aWMgYm9vbAogaGFuZGxlX3N0 cmVhbWVkX3RyYW5zYWN0aW9uKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbiwgU3RyaW5nSW5mbyBz KQogewotCVRyYW5zYWN0aW9uSWQgeGlkOworCVRyYW5zYWN0aW9uSWQgY3VycmVudF94aWQ7CisJ UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlf YWN0aW9uOworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZzsKKworCWFwcGx5X2FjdGlvbiA9 IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rpb24oc3RyZWFtX3hpZCwgJndpbmZvKTsKIAogCS8q IG5vdCBpbiBzdHJlYW1pbmcgbW9kZSAqLwotCWlmICghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24p CisJaWYgKGFwcGx5X2FjdGlvbiA9PSBUUkFOU19MRUFERVJfQVBQTFkpCiAJCXJldHVybiBmYWxz ZTsKIAotCUFzc2VydChzdHJlYW1fZmQgIT0gTlVMTCk7CiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJ c1ZhbGlkKHN0cmVhbV94aWQpKTsKIAorCS8qCisJICogVGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtl ciBuZWVkcyB0aGUgeGlkIGluIHRoaXMgbWVzc2FnZSB0byBkZWNpZGUKKwkgKiB3aGV0aGVyIHRv IGRlZmluZSBhIHNhdmVwb2ludCwgc28gc2F2ZSB0aGUgb3JpZ2luYWwgbWVzc2FnZSB0aGF0IGhh cworCSAqIG5vdCBtb3ZlZCB0aGUgY3Vyc29yIGFmdGVyIHRoZSB4aWQuIFdlIHdpbGwgc2VyaWFs aXplIHRoaXMgbWVzc2FnZSB0byBhCisJICogZmlsZSBpbiBQQVJUSUFMX1NFUklBTElaRSBtb2Rl LgorCSAqLworCW9yaWdpbmFsX21zZyA9ICpzOworCiAJLyoKIAkgKiBXZSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBYSUQgb2YgdGhlIHN1YnhhY3QgYXMgdGhlIGZpcnN0IHBhcnQgb2YgdGhlCiAJICog bWVzc2FnZSwgc28gZXh0cmFjdCBpdC4KIAkgKi8KLQl4aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7 CisJY3VycmVudF94aWQgPSBwcV9nZXRtc2dpbnQocywgNCk7CiAKLQlpZiAoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChjdXJyZW50X3hpZCkp CiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJ T04pLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoImludmFsaWQgdHJhbnNhY3Rpb24gSUQgaW4gc3Ry ZWFtZWQgcmVwbGljYXRpb24gdHJhbnNhY3Rpb24iKSkpOwogCi0JLyogQWRkIHRoZSBuZXcgc3Vi eGFjdCB0byB0aGUgYXJyYXkgKHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KLQlzdWJ4YWN0X2lu Zm9fYWRkKHhpZCk7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xF QURFUl9TRVJJQUxJWkU6CisJCQlBc3NlcnQoc3RyZWFtX2ZkKTsKIAotCS8qIHdyaXRlIHRoZSBj aGFuZ2UgdG8gdGhlIGN1cnJlbnQgZmlsZSAqLwotCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9u LCBzKTsKKwkJCS8qIEFkZCB0aGUgbmV3IHN1YnhhY3QgdG8gdGhlIGFycmF5ICh1bmxlc3MgYWxy ZWFkeSB0aGVyZSkuICovCisJCQlzdWJ4YWN0X2luZm9fYWRkKGN1cnJlbnRfeGlkKTsKKworCQkJ LyogV3JpdGUgdGhlIGNoYW5nZSB0byB0aGUgY3VycmVudCBmaWxlICovCisJCQlzdHJlYW1fd3Jp dGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJCQlyZXR1cm4gdHJ1ZTsKKworCQljYXNlIFRSQU5TX0xF QURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKKworCQkJLyoKKwkJCSAq IFhYWCBUaGUgcHVibGlzaGVyIHNpZGUgZG9lc24ndCBhbHdheXMgc2VuZCByZWxhdGlvbi90eXBl IHVwZGF0ZQorCQkJICogbWVzc2FnZXMgYWZ0ZXIgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiwg c28gYWxzbyB1cGRhdGUgdGhlCisJCQkgKiByZWxhdGlvbi90eXBlIGluIGxlYWRlciBhcHBseSB3 b3JrZXIuIFNlZSBmdW5jdGlvbgorCQkJICogY2xlYW51cF9yZWxfc3luY19jYWNoZS4KKwkJCSAq LworCQkJaWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkKKwkJCQlyZXR1 cm4gKGFjdGlvbiAhPSBMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gJiYKKwkJCQkJCWFjdGlvbiAh PSBMT0dJQ0FMX1JFUF9NU0dfVFlQRSk7CisKKwkJCS8qCisJCQkgKiBJdCBpcyBwb3NzaWJsZSB0 aGF0IHdoaWxlIHNlbmRpbmcgdGhpcyBjaGFuZ2UgdG8gcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdv cmtlciB3ZSBuZWVkIHRvIHN3aXRjaCB0byBzZXJpYWxpemUgbW9kZS4KKwkJCSAqLworCQkJcGFf c3dpdGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZvLCBmYWxzZSk7CiAKLQlyZXR1cm4gdHJ1 ZTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NF UklBTElaRToKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoYWN0aW9uLCAmb3JpZ2luYWxfbXNnKTsK KworCQkJLyogU2FtZSByZWFzb24gYXMgVFJBTlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUwgY2Fz ZS4gKi8KKwkJCXJldHVybiAoYWN0aW9uICE9IExPR0lDQUxfUkVQX01TR19SRUxBVElPTiAmJgor CQkJCQlhY3Rpb24gIT0gTE9HSUNBTF9SRVBfTVNHX1RZUEUpOworCisJCWNhc2UgVFJBTlNfUEFS QUxMRUxfQVBQTFk6CisJCQlwYXJhbGxlbF9zdHJlYW1fbmNoYW5nZXMgKz0gMTsKKworCQkJLyog RGVmaW5lIGEgc2F2ZXBvaW50IGZvciBhIHN1YnhhY3QgaWYgbmVlZGVkLiAqLworCQkJcGFfc3Rh cnRfc3VidHJhbnMoY3VycmVudF94aWQsIHN0cmVhbV94aWQpOworCQkJcmV0dXJuIGZhbHNlOwor CisJCWRlZmF1bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJcmV0dXJuIGZhbHNlOwkJLyogc2ls ZW5jZSBjb21waWxlciB3YXJuaW5nICovCisJfQogfQogCiAvKgpAQCAtOTI2LDggKzEwODksMTEg QEAgYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0 YSAqcHJlcGFyZV9kYXRhKQogCSAqIEJlZ2luVHJhbnNhY3Rpb25CbG9jayBpcyBuZWNlc3Nhcnkg dG8gYmFsYW5jZSB0aGUgRW5kVHJhbnNhY3Rpb25CbG9jawogCSAqIGNhbGxlZCB3aXRoaW4gdGhl IFByZXBhcmVUcmFuc2FjdGlvbkJsb2NrIGJlbG93LgogCSAqLwotCUJlZ2luVHJhbnNhY3Rpb25C bG9jaygpOwotCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOyAvKiBDb21wbGV0ZXMgdGhlIHBy ZWNlZGluZyBCZWdpbiBjb21tYW5kLiAqLworCWlmICghSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJ eworCQlCZWdpblRyYW5zYWN0aW9uQmxvY2soKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5nIEJlZ2luIGNvbW1hbmQuICovCisJfQogCiAJ LyoKIAkgKiBVcGRhdGUgb3JpZ2luIHN0YXRlIHNvIHdlIGNhbiByZXN0YXJ0IHN0cmVhbWluZyBm cm9tIGNvcnJlY3QgcG9zaXRpb24KQEAgLTk3NCw3ICsxMTQwLDcgQEAgYXBwbHlfaGFuZGxlX3By ZXBhcmUoU3RyaW5nSW5mbyBzKQogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCXBnc3Rh dF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKLQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2Rh dGEuZW5kX2xzbik7CisJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24s IFhhY3RMYXN0Q29tbWl0RW5kKTsKIAogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwog CkBAIC05OTYsNiArMTE2MiwxMiBAQCBhcHBseV9oYW5kbGVfcHJlcGFyZShTdHJpbmdJbmZvIHMp CiAKIC8qCiAgKiBIYW5kbGUgYSBDT01NSVQgUFJFUEFSRUQgb2YgYSBwcmV2aW91c2x5IFBSRVBB UkVEIHRyYW5zYWN0aW9uLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHdhaXQg aGVyZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHByZXBhcmVkIGluIGEKKyAqIHBhcmFsbGVsIGFw cGx5IHdvcmtlci4gSW4gdGhhdCBjYXNlLCB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkIGZvciB0aGUg cHJlcGFyZQorICogdG8gZmluaXNoIGluIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZSgpIHdo aWNoIHdpbGwgZW5zdXJlIGFsbCB0aGUKKyAqIG9wZXJhdGlvbnMgaW4gdGhhdCB0cmFuc2FjdGlv biBoYXZlIGhhcHBlbmVkIGluIHRoZSBzdWJzY3JpYmVyLCBzbyBubworICogY29uY3VycmVudCB0 cmFuc2FjdGlvbiBjYW4gY2F1c2UgZGVhZGxvY2sgb3IgdHJhbnNhY3Rpb24gZGVwZW5kZW5jeSBp c3N1ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0 cmluZ0luZm8gcykKQEAgLTEwMjUsNyArMTE5Nyw3IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJl cGFyZWQoU3RyaW5nSW5mbyBzKQogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCXBnc3Rh dF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKLQlzdG9yZV9mbHVzaF9wb3NpdGlvbihwcmVwYXJlX2Rh dGEuZW5kX2xzbik7CisJc3RvcmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24s IFhhY3RMYXN0Q29tbWl0RW5kKTsKIAlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAog CS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFy YWxsZWwuICovCkBAIC0xMDM5LDYgKzEyMTEsMTIgQEAgYXBwbHlfaGFuZGxlX2NvbW1pdF9wcmVw YXJlZChTdHJpbmdJbmZvIHMpCiAKIC8qCiAgKiBIYW5kbGUgYSBST0xMQkFDSyBQUkVQQVJFRCBv ZiBhIHByZXZpb3VzbHkgUFJFUEFSRUQgVFJBTlNBQ1RJT04uCisgKgorICogTm90ZSB0aGF0IHdl IGRvbid0IG5lZWQgdG8gd2FpdCBoZXJlIGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgcHJlcGFyZWQg aW4gYQorICogcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBJbiB0aGF0IGNhc2UsIHdlIGhhdmUgYWxy ZWFkeSB3YWl0ZWQgZm9yIHRoZSBwcmVwYXJlCisgKiB0byBmaW5pc2ggaW4gYXBwbHlfaGFuZGxl X3N0cmVhbV9wcmVwYXJlKCkgd2hpY2ggd2lsbCBlbnN1cmUgYWxsIHRoZQorICogb3BlcmF0aW9u cyBpbiB0aGF0IHRyYW5zYWN0aW9uIGhhdmUgaGFwcGVuZWQgaW4gdGhlIHN1YnNjcmliZXIsIHNv IG5vCisgKiBjb25jdXJyZW50IHRyYW5zYWN0aW9uIGNhbiBjYXVzZSBkZWFkbG9jayBvciB0cmFu c2FjdGlvbiBkZXBlbmRlbmN5IGlzc3Vlcy4KICAqLwogc3RhdGljIHZvaWQKIGFwcGx5X2hhbmRs ZV9yb2xsYmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMpCkBAIC0xMDgwLDcgKzEyNTgsNyBAQCBh cHBseV9oYW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCiAJcGdzdGF0X3Jl cG9ydF9zdGF0KGZhbHNlKTsKIAotCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHJvbGxiYWNrX2RhdGEu cm9sbGJhY2tfZW5kX2xzbik7CisJc3RvcmVfZmx1c2hfcG9zaXRpb24ocm9sbGJhY2tfZGF0YS5y b2xsYmFja19lbmRfbHNuLCBYYWN0TGFzdENvbW1pdEVuZCk7CiAJaW5fcmVtb3RlX3RyYW5zYWN0 aW9uID0gZmFsc2U7CiAKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3lu Y2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwpAQCAtMTA5MiwxNSArMTI3MCwxNiBAQCBhcHBseV9o YW5kbGVfcm9sbGJhY2tfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQogCiAvKgogICogSGFuZGxlIFNU UkVBTSBQUkVQQVJFLgotICoKLSAqIExvZ2ljIGlzIGluIHR3byBwYXJ0czoKLSAqIDEuIFJlcGxh eSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucwotICogMi4gTWFyayB0aGUgdHJhbnNhY3Rpb24g YXMgcHJlcGFyZWQKICAqLwogc3RhdGljIHZvaWQKIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFy ZShTdHJpbmdJbmZvIHMpCiB7CiAJTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSBwcmVwYXJlX2Rh dGE7CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24g YXBwbHlfYWN0aW9uOworCisJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3Vt ZWQuICovCisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3Ry ZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xMTE2LDI0ICsxMjk1LDk2 IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAJbG9naWNhbHJl cF9yZWFkX3N0cmVhbV9wcmVwYXJlKHMsICZwcmVwYXJlX2RhdGEpOwogCXNldF9hcHBseV9lcnJv cl9jb250ZXh0X3hhY3QocHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRhLnByZXBhcmVfbHNu KTsKIAotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQgcHJlcGFyZSBmb3Igc3RyZWFtZWQgdHJhbnNh Y3Rpb24gJXUiLCBwcmVwYXJlX2RhdGEueGlkKTsKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNh Y3Rpb25fYXBwbHlfYWN0aW9uKHByZXBhcmVfZGF0YS54aWQsICZ3aW5mbyk7CiAKLQkvKiBSZXBs YXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMuICovCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdl cyhwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOworCXN3aXRjaCAo YXBwbHlfYWN0aW9uKQorCXsKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VSSUFMSVpFOgogCi0JLyog TWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQuICovCi0JYXBwbHlfaGFuZGxlX3ByZXBh cmVfaW50ZXJuYWwoJnByZXBhcmVfZGF0YSk7CisJCQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9u IGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwgc28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNw b29sZWQgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxv Z2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LAorCQkJCQkJCQkgICBwcmVwYXJlX2RhdGEu eGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0JQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJCQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KKwkJCWFw cGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFsKCZwcmVwYXJlX2RhdGEpOwogCi0JcGdzdGF0X3Jl cG9ydF9zdGF0KGZhbHNlKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0Jc3Rv cmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24pOworCQkJc3RvcmVfZmx1c2hf cG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24sIFhhY3RMYXN0Q29tbWl0RW5kKTsKIAotCWlu X3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0g ZmFsc2U7CisKKwkJCS8qIFVubGluayB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMg YW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBU UkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCWlm IChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJLyogRmlu aXNoIHByb2Nlc3NpbmcgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV94YWN0 X2ZpbmlzaCh3aW5mbywgcHJlcGFyZV9kYXRhLmVuZF9sc24pOworCQkJCWJyZWFrOworCQkJfQor CisJCQkvKgorCQkJICogSXQgaXMgcG9zc2libGUgdGhhdCB3aGlsZSBzZW5kaW5nIHRoaXMgY2hh bmdlIHRvIHBhcmFsbGVsIGFwcGx5CisJCQkgKiB3b3JrZXIgd2UgbmVlZCB0byBzd2l0Y2ggdG8g c2VyaWFsaXplIG1vZGUuCisJCQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6 ZSh3aW5mbywgdHJ1ZSk7CisKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xF QURFUl9QQVJUSUFMX1NFUklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCXN0cmVhbV9v cGVuX2FuZF93cml0ZV9jaGFuZ2UocHJlcGFyZV9kYXRhLnhpZCwKKwkJCQkJCQkJCQkgTE9HSUNB TF9SRVBfTVNHX1NUUkVBTV9QUkVQQVJFLAorCQkJCQkJCQkJCSAmb3JpZ2luYWxfbXNnKTsKKwor CQkJcGFfc2V0X2ZpbGVzZXRfc3RhdGUod2luZm8tPnNoYXJlZCwgRlNfU0VSSUFMSVpFX0RPTkUp OwogCi0JLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcyBhbmQgc3Vi eGFjdCBpbmZvLiAqLwotCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHByZXBhcmVfZGF0YS54aWQpOworCQkJLyogRmluaXNoIHByb2Nlc3NpbmcgdGhlIHN0 cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8KKwkJCXBhX3hhY3RfZmluaXNoKHdpbmZvLCBwcmVwYXJl X2RhdGEuZW5kX2xzbik7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZ OgorCisJCQkvKgorCQkJICogSWYgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBhcHBseWlu ZyBzcG9vbGVkIG1lc3NhZ2VzIHRoZW4KKwkJCSAqIGNsb3NlIHRoZSBmaWxlIGJlZm9yZSBwcmVw YXJpbmcuCisJCQkgKi8KKwkJCWlmIChzdHJlYW1fZmQpCisJCQkJc3RyZWFtX2Nsb3NlX2ZpbGUo KTsKKworCQkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJCQkvKiBNYXJrIHRoZSB0cmFu c2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8KKwkJCWFwcGx5X2hhbmRsZV9wcmVwYXJlX2ludGVybmFs KCZwcmVwYXJlX2RhdGEpOworCisJCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCisJCQlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkJTXlQYXJhbGxlbFNoYXJlZC0+bGFzdF9jb21t aXRfZW5kID0gWGFjdExhc3RDb21taXRFbmQ7CisKKwkJCXBhX3NldF94YWN0X3N0YXRlKE15UGFy YWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RSQU5TX0ZJTklTSEVEKTsKKwkJCXBhX3VubG9ja190cmFu c2FjdGlvbihNeVBhcmFsbGVsU2hhcmVkLT54aWQsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOworCisJ CQlwYV9yZXNldF9zdWJ0cmFucygpOworCisJCQllbG9nKERFQlVHMSwgImZpbmlzaGVkIHByb2Nl c3NpbmcgdGhlIFNUUkVBTSBQUkVQQVJFIGNvbW1hbmQiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1 bHQ6CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJcGdzdGF0X3JlcG9ydF9z dGF0KGZhbHNlKTsKIAogCS8qIFByb2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5j aHJvbml6ZWQgaW4gcGFyYWxsZWwuICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJl X2RhdGEuZW5kX2xzbik7CkBAIC0xMTcwLDYgKzE0MjEsNDcgQEAgYXBwbHlfaGFuZGxlX29yaWdp bihTdHJpbmdJbmZvIHMpCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiT1JJR0lOIG1lc3NhZ2Ugc2Vu dCBvdXQgb2Ygb3JkZXIiKSkpOwogfQogCisvKgorICogSW5pdGlhbGl6ZSBmaWxlc2V0IChpZiBu b3QgYWxyZWFkeSBkb25lKS4KKyAqCisgKiBDcmVhdGUgYSBuZXcgZmlsZSB3aGVuIGZpcnN0X3Nl Z21lbnQgaXMgdHJ1ZSwgb3RoZXJ3aXNlIG9wZW4gdGhlIGV4aXN0aW5nCisgKiBmaWxlLgorICov Cit2b2lkCitzdHJlYW1fc3RhcnRfaW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZmly c3Rfc2VnbWVudCkKK3sKKwliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7CisKKwkvKgorCSAqIElu aXRpYWxpemUgdGhlIHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBU aGlzIHdpbGwgYmUKKwkgKiB1c2VkIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB3b3Jr ZXIgc28gY3JlYXRlIGl0IGluIGEgcGVybWFuZW50CisJICogY29udGV4dC4gV2UgY3JlYXRlIHRo aXMgb24gdGhlIHZlcnkgZmlyc3Qgc3RyZWFtaW5nIG1lc3NhZ2UgZnJvbSBhbnkKKwkgKiB0cmFu c2FjdGlvbiBhbmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyIHN0cmVhbWluZyB0cmFu c2FjdGlvbnMuCisJICogTm93LCB3ZSBjb3VsZCBjcmVhdGUgYSBmaWxlc2V0IGF0IHRoZSBzdGFy dCBvZiB0aGUgd29ya2VyIGFzIHdlbGwgYnV0CisJICogdGhlbiB3ZSB3b24ndCBiZSBzdXJlIHRo YXQgaXQgd2lsbCBldmVyIGJlIHVzZWQuCisJICovCisJaWYgKCFNeUxvZ2ljYWxSZXBXb3JrZXIt PnN0cmVhbV9maWxlc2V0KQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisKKwkJb2xkY3R4 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwkJTXlMb2dpY2FsUmVw V29ya2VyLT5zdHJlYW1fZmlsZXNldCA9IHBhbGxvYyhzaXplb2YoRmlsZVNldCkpOworCQlGaWxl U2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKKworCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwl9CisKKwkvKiBPcGVuIHRoZSBzcG9vbCBmaWxlIGZv ciB0aGlzIHRyYW5zYWN0aW9uLiAqLworCXN0cmVhbV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29y a2VyLT5zdWJpZCwgeGlkLCBmaXJzdF9zZWdtZW50KTsKKworCS8qIElmIHRoaXMgaXMgbm90IHRo ZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5nIHN1YnhhY3QgZmlsZS4gKi8KKwlpZiAoIWZp cnN0X3NlZ21lbnQpCisJCXN1YnhhY3RfaW5mb19yZWFkKE15TG9naWNhbFJlcFdvcmtlci0+c3Vi aWQsIHhpZCk7CisKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQorCiAvKgogICogSGFuZGxl IFNUUkVBTSBTVEFSVCBtZXNzYWdlLgogICovCkBAIC0xMTc3LDIxICsxNDY5LDE3IEBAIHN0YXRp YyB2b2lkCiBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0luZm8gcykKIHsKIAlib29s CQlmaXJzdF9zZWdtZW50OworCVBhcmFsbGVsQXBwbHlXb3JrZXJJbmZvICp3aW5mbzsKKwlUcmFu c0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKKworCS8qIFNhdmUgdGhlIG1lc3NhZ2UgYmVmb3Jl IGl0IGlzIGNvbnN1bWVkLiAqLworCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwog CiAJaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShl cnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkgZXJybXNnX2ludGVybmFs KCJkdXBsaWNhdGUgU1RSRUFNIFNUQVJUIG1lc3NhZ2UiKSkpOwogCi0JLyoKLQkgKiBTdGFydCBh IHRyYW5zYWN0aW9uIG9uIHN0cmVhbSBzdGFydCwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNv bW1pdHRlZAotCSAqIG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQgaXMgYSB0YWJsZXN5bmMg d29ya2VyIGluIHdoaWNoIGNhc2UgaXQKLQkgKiB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlciBwcm9j ZXNzaW5nIGFsbCB0aGUgbWVzc2FnZXMuIFdlIG5lZWQgdGhlCi0JICogdHJhbnNhY3Rpb24gZm9y IGhhbmRsaW5nIHRoZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUKLQkgKiBzdHJl YW1pbmcgZGF0YSBhbmQgc3VieGFjdCBpbmZvLgotCSAqLwotCWJlZ2luX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKLQogCS8qIG5vdGlmeSBoYW5kbGUgbWV0aG9kcyB3ZSdyZSBwcm9jZXNzaW5nIGEgcmVt b3RlIHRyYW5zYWN0aW9uICovCiAJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSB0cnVlOwogCkBA IC0xMjA1LDk2ICsxNDkzLDIzOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KFN0cmluZ0lu Zm8gcykKIAogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3RyZWFtX3hpZCwgSW52YWxp ZFhMb2dSZWNQdHIpOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSB3b3JrZXIncyBzdHJlYW1f ZmlsZXNldCBpZiB3ZSBoYXZlbid0IHlldC4gVGhpcyB3aWxsIGJlCi0JICogdXNlZCBmb3IgdGhl IGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNvIGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVu dAotCSAqIGNvbnRleHQuIFdlIGNyZWF0ZSB0aGlzIG9uIHRoZSB2ZXJ5IGZpcnN0IHN0cmVhbWlu ZyBtZXNzYWdlIGZyb20gYW55Ci0JICogdHJhbnNhY3Rpb24gYW5kIHRoZW4gdXNlIGl0IGZvciB0 aGlzIGFuZCBvdGhlciBzdHJlYW1pbmcgdHJhbnNhY3Rpb25zLgotCSAqIE5vdywgd2UgY291bGQg Y3JlYXRlIGEgZmlsZXNldCBhdCB0aGUgc3RhcnQgb2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAot CSAqIHRoZW4gd2Ugd29uJ3QgYmUgc3VyZSB0aGF0IGl0IHdpbGwgZXZlciBiZSB1c2VkLgotCSAq LwotCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJLyog VHJ5IHRvIGFsbG9jYXRlIGEgd29ya2VyIGZvciB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLiAq LworCWlmIChmaXJzdF9zZWdtZW50KQorCQlwYV9hbGxvY2F0ZV93b3JrZXIoc3RyZWFtX3hpZCk7 CisKKwlhcHBseV9hY3Rpb24gPSBnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKHN0cmVhbV94 aWQsICZ3aW5mbyk7CisKKwlzd2l0Y2ggKGFwcGx5X2FjdGlvbikKIAl7Ci0JCU1lbW9yeUNvbnRl eHQgb2xkY3R4OworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CiAKLQkJb2xkY3R4ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisJCQkvKgorCQkJICogRnVuY3Rp b24gc3RyZWFtX3N0YXJ0X2ludGVybmFsIHN0YXJ0cyBhIHRyYW5zYWN0aW9uLiBUaGlzCisJCQkg KiB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZCBvbiB0aGUgc3RyZWFtIHN0b3AgdW5sZXNz IGl0IGlzIGEKKwkJCSAqIHRhYmxlc3luYyB3b3JrZXIgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJl IGNvbW1pdHRlZCBhZnRlcgorCQkJICogcHJvY2Vzc2luZyBhbGwgdGhlIG1lc3NhZ2VzLiBXZSBu ZWVkIHRoaXMgdHJhbnNhY3Rpb24gZm9yCisJCQkgKiBoYW5kbGluZyB0aGUgQnVmRmlsZSwgdXNl ZCBmb3Igc2VyaWFsaXppbmcgdGhlIHN0cmVhbWluZyBkYXRhCisJCQkgKiBhbmQgc3VieGFjdCBp bmZvLgorCQkJICovCisJCQlzdHJlYW1fc3RhcnRfaW50ZXJuYWwoc3RyZWFtX3hpZCwgZmlyc3Rf c2VnbWVudCk7CisJCQlicmVhazsKIAotCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxl c2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7Ci0JCUZpbGVTZXRJbml0KE15TG9naWNhbFJl cFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BB UkFMTEVMOgorCQkJQXNzZXJ0KHdpbmZvKTsKIAotCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3R4KTsKLQl9CisJCQkvKgorCQkJICogT25jZSB3ZSBzdGFydCBzZXJpYWxpemluZyB0aGUgY2hh bmdlcywgdGhlIHBhcmFsbGVsIGFwcGx5CisJCQkgKiB3b3JrZXIgd2lsbCB3YWl0IGZvciB0aGUg bGVhZGVyIHRvIHJlbGVhc2UgdGhlIHN0cmVhbSBsb2NrCisJCQkgKiB1bnRpbCB0aGUgZW5kIG9m IHRoZSB0cmFuc2FjdGlvbi4gU28sIHdlIGRvbid0IG5lZWQgdG8gcmVsZWFzZQorCQkJICogdGhl IGxvY2sgb3IgaW5jcmVtZW50IHRoZSBzdHJlYW0gY291bnQgaW4gdGhhdCBjYXNlLgorCQkJICov CisJCQlpZiAocGFfc2VuZF9kYXRhKHdpbmZvLCBzLT5sZW4sIHMtPmRhdGEpKQorCQkJeworCQkJ CS8qCisJCQkJICogVW5sb2NrIHRoZSBzaGFyZWQgb2JqZWN0IGxvY2sgc28gdGhhdCB0aGUgcGFy YWxsZWwgYXBwbHkKKwkJCQkgKiB3b3JrZXIgY2FuIGNvbnRpbnVlIHRvIHJlY2VpdmUgY2hhbmdl cy4KKwkJCQkgKi8KKwkJCQlpZiAoIWZpcnN0X3NlZ21lbnQpCisJCQkJCXBhX3VubG9ja19zdHJl YW0od2luZm8tPnNoYXJlZC0+eGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAotCS8qIG9wZW4g dGhlIHNwb29sIGZpbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24gKi8KLQlzdHJlYW1fb3Blbl9maWxl KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQsIGZpcnN0X3NlZ21lbnQpOwor CQkJCS8qCisJCQkJICogSW5jcmVtZW50IHRoZSBudW1iZXIgb2Ygc3RyZWFtaW5nIGJsb2NrcyB3 YWl0aW5nIHRvIGJlCisJCQkJICogcHJvY2Vzc2VkIGJ5IHBhcmFsbGVsIGFwcGx5IHdvcmtlci4K KwkJCQkgKi8KKwkJCQlwZ19hdG9taWNfYWRkX2ZldGNoX3UzMigmd2luZm8tPnNoYXJlZC0+cGVu ZGluZ19zdHJlYW1fY291bnQsIDEpOwogCi0JLyogaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHNl Z21lbnQsIG9wZW4gZXhpc3Rpbmcgc3VieGFjdCBmaWxlICovCi0JaWYgKCFmaXJzdF9zZWdtZW50 KQotCQlzdWJ4YWN0X2luZm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1f eGlkKTsKKwkJCQkvKiBDYWNoZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGZvciB0aGlzIHRy YW5zYWN0aW9uLiAqLworCQkJCXBhX3NldF9zdHJlYW1fYXBwbHlfd29ya2VyKHdpbmZvKTsKKwkJ CQlicmVhazsKKwkJCX0KIAotCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywg TlVMTCk7CisJCQkvKgorCQkJICogSXQgaXMgcG9zc2libGUgdGhhdCB3aGlsZSBzZW5kaW5nIHRo aXMgY2hhbmdlIHRvIHBhcmFsbGVsIGFwcGx5CisJCQkgKiB3b3JrZXIgd2UgbmVlZCB0byBzd2l0 Y2ggdG8gc2VyaWFsaXplIG1vZGUuCisJCQkgKi8KKwkJCXBhX3N3aXRjaF90b19wYXJ0aWFsX3Nl cmlhbGl6ZSh3aW5mbywgIWZpcnN0X3NlZ21lbnQpOwogCi0JZW5kX3JlcGxpY2F0aW9uX3N0ZXAo KTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRSQU5TX0xFQURFUl9QQVJUSUFMX1NF UklBTElaRToKKwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBPcGVuIHRoZSBzcG9v bCBmaWxlIHVubGVzcyBpdCB3YXMgYWxyZWFkeSBvcGVuZWQgd2hlbiBzd2l0Y2hpbmcKKwkJCSAq IHRvIHNlcmlhbGl6ZSBtb2RlLiBUaGUgdHJhbnNhY3Rpb24gc3RhcnRlZCBpbgorCQkJICogc3Ry ZWFtX3N0YXJ0X2ludGVybmFsIHdpbGwgYmUgY29tbWl0dGVkIG9uIHRoZSBzdHJlYW0gc3RvcC4K KwkJCSAqLworCQkJaWYgKGFwcGx5X2FjdGlvbiAhPSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJB TExFTCkKKwkJCQlzdHJlYW1fc3RhcnRfaW50ZXJuYWwoc3RyZWFtX3hpZCwgZmlyc3Rfc2VnbWVu dCk7CisKKwkJCXN0cmVhbV93cml0ZV9jaGFuZ2UoTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFS VCwgJm9yaWdpbmFsX21zZyk7CisKKwkJCS8qIENhY2hlIHRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICovCisJCQlwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtl cih3aW5mbyk7CisJCQlicmVhazsKKworCQljYXNlIFRSQU5TX1BBUkFMTEVMX0FQUExZOgorCQkJ aWYgKGZpcnN0X3NlZ21lbnQpCisJCQl7CisJCQkJLyogSG9sZCB0aGUgbG9jayB1bnRpbCB0aGUg ZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4gKi8KKwkJCQlwYV9sb2NrX3RyYW5zYWN0aW9uKE15UGFy YWxsZWxTaGFyZWQtPnhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisJCQkJcGFfc2V0X3hhY3Rf c3RhdGUoTXlQYXJhbGxlbFNoYXJlZCwgUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCk7CisJCQl9CisK KwkJCXBhcmFsbGVsX3N0cmVhbV9uY2hhbmdlcyA9IDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXBnc3RhdF9yZXBvcnRfYWN0 aXZpdHkoU1RBVEVfUlVOTklORywgTlVMTCk7CiB9CiAKIC8qCi0gKiBIYW5kbGUgU1RSRUFNIFNU T1AgbWVzc2FnZS4KKyAqIFVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgc3VieGFjdHMgYW5k IGNsb3NlIHRoZSBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3 aGVuIHRoZSBzdHJlYW1fc3RhcnRfaW50ZXJuYWwgZnVuY3Rpb24gaGFzCisgKiBiZWVuIGNhbGxl ZC4KICAqLwotc3RhdGljIHZvaWQKLWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZv IHMpCit2b2lkCitzdHJlYW1fc3RvcF9pbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCkKIHsKLQlp ZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJj b2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJT VFJFQU0gU1RPUCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUQVJUIikpKTsKLQogCS8qCi0JICog Q2xvc2UgdGhlIGZpbGUgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMsIGFuZCBzZXJpYWxpemUgaW5m b3JtYXRpb24gYWJvdXQKLQkgKiBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxldmVsIHRyYW5zYWN0aW9u LgorCSAqIFNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dCBzdWJ4YWN0cyBmb3IgdGhlIHRvcGxl dmVsIHRyYW5zYWN0aW9uLCB0aGVuCisJICogY2xvc2UgdGhlIHN0cmVhbSBtZXNzYWdlcyBzcG9v bCBmaWxlLgogCSAqLwotCXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1 YmlkLCBzdHJlYW1feGlkKTsKKwlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVwV29ya2Vy LT5zdWJpZCwgeGlkKTsKIAlzdHJlYW1fY2xvc2VfZmlsZSgpOwogCi0JLyogV2UgbXVzdCBiZSBp biBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCiAJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0 ZSgpKTsKIAogCS8qIENvbW1pdCB0aGUgcGVyLXN0cmVhbSB0cmFuc2FjdGlvbiAqLwogCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSBmYWxz ZTsKLQogCS8qIFJlc2V0IHBlci1zdHJlYW0gY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRSZXNl dChMb2dpY2FsU3RyZWFtaW5nQ29udGV4dCk7Ci0KLQlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNU QVRFX0lETEUsIE5VTEwpOwotCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogfQog CiAvKgotICogSGFuZGxlIFNUUkVBTSBhYm9ydCBtZXNzYWdlLgorICogSGFuZGxlIFNUUkVBTSBT VE9QIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyB2b2lkCi1hcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0 KFN0cmluZ0luZm8gcykKK2FwcGx5X2hhbmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiB7 Ci0JVHJhbnNhY3Rpb25JZCB4aWQ7Ci0JVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJUGFyYWxsZWxB cHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBwbHlfYWN0aW9uOwog Ci0JaWYgKGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKQorCWlmICghaW5fc3RyZWFtZWRfdHJhbnNh Y3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9W SU9MQVRJT04pLAotCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBBQk9SVCBtZXNzYWdlIHdp dGhvdXQgU1RSRUFNIFNUT1AiKSkpOworCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9Q IG1lc3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RBUlQiKSkpOworCisJYXBwbHlfYWN0aW9uID0gZ2V0 X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbihzdHJlYW1feGlkLCAmd2luZm8pOworCisJc3dpdGNo IChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU6CisJCQlz dHJlYW1fc3RvcF9pbnRlcm5hbChzdHJlYW1feGlkKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJB TlNfTEVBREVSX1NFTkRfVE9fUEFSQUxMRUw6CisJCQlBc3NlcnQod2luZm8pOworCisJCQkvKgor CQkJICogTG9jayBiZWZvcmUgc2VuZGluZyB0aGUgU1RSRUFNX1NUT1AgbWVzc2FnZSBzbyB0aGF0 IHRoZSBsZWFkZXIKKwkJCSAqIGNhbiBob2xkIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGUgcGFyYWxs ZWwgYXBwbHkgd29ya2VyIHdpbGwgd2FpdAorCQkJICogZm9yIGxlYWRlciB0byByZWxlYXNlIHRo ZSBsb2NrLiBTZWUgTG9ja2luZyBDb25zaWRlcmF0aW9ucyBhdG9wCisJCQkgKiBhcHBseXBhcmFs bGVsd29ya2VyLmMuCisJCQkgKi8KKwkJCXBhX2xvY2tfc3RyZWFtKHdpbmZvLT5zaGFyZWQtPnhp ZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7CisKKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMt Pmxlbiwgcy0+ZGF0YSkpCisJCQl7CisJCQkJcGFfc2V0X3N0cmVhbV9hcHBseV93b3JrZXIoTlVM TCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0 IHdoaWxlIHNlbmRpbmcgdGhpcyBjaGFuZ2UgdG8gcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdvcmtl ciB3ZSBuZWVkIHRvIHN3aXRjaCB0byBzZXJpYWxpemUgbW9kZS4KKwkJCSAqLworCQkJcGFfc3dp dGNoX3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZvLCB0cnVlKTsKKworCQkJLyogZmFsbCB0aHJv dWdoICovCisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJc3RyZWFt X3dyaXRlX2NoYW5nZShMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUT1AsIHMpOworCQkJc3RyZWFt X3N0b3BfaW50ZXJuYWwoc3RyZWFtX3hpZCk7CisJCQlwYV9zZXRfc3RyZWFtX2FwcGx5X3dvcmtl cihOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisJCQll bG9nKERFQlVHMSwgImFwcGxpZWQgJXUgY2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rIiwK KwkJCQkgcGFyYWxsZWxfc3RyZWFtX25jaGFuZ2VzKTsKKworCQkJLyoKKwkJCSAqIEJ5IHRoZSB0 aW1lIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBpcyBwcm9jZXNzaW5nIHRoZSBjaGFuZ2VzIGluCisJ CQkgKiB0aGUgY3VycmVudCBzdHJlYW1pbmcgYmxvY2ssIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IG1heSBoYXZlCisJCQkgKiBzZW50IG11bHRpcGxlIHN0cmVhbWluZyBibG9ja3MuIFRoaXMgY2Fu IGxlYWQgdG8gcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdvcmtlciBzdGFydCB3YWl0aW5nIGV2ZW4g d2hlbiB0aGVyZSBhcmUgbW9yZSBjaHVuayBvZiBzdHJlYW1zCisJCQkgKiBpbiB0aGUgcXVldWUu IFNvLCB0cnkgdG8gbG9jayBvbmx5IGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2UgbGVmdAorCQkJICog aW4gdGhlIHF1ZXVlLiBTZWUgTG9ja2luZyBDb25zaWRlcmF0aW9ucyBhdG9wCisJCQkgKiBhcHBs eXBhcmFsbGVsd29ya2VyLmMuCisJCQkgKgorCQkJICogTm90ZSB0aGF0IGhlcmUgd2UgaGF2ZSBh IHJhY2UgY29uZGl0aW9uIHdoZXJlIHdlIGNhbiBzdGFydAorCQkJICogd2FpdGluZyBldmVuIHdo ZW4gdGhlcmUgYXJlIHBlbmRpbmcgc3RyZWFtaW5nIGNodW5rcy4gVGhpcyBjYW4KKwkJCSAqIGhh cHBlbiBpZiB0aGUgbGVhZGVyIHNlbmRzIGFub3RoZXIgc3RyZWFtaW5nIGJsb2NrIGFuZCBhY3F1 aXJlcworCQkJICogdGhlIHN0cmVhbSBsb2NrIGFnYWluIGFmdGVyIHRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgY2hlY2tzCisJCQkgKiB0aGF0IHRoZXJlIGlzIG5vIHBlbmRpbmcgc3RyZWFtaW5n IGJsb2NrIGFuZCBiZWZvcmUgaXQgYWN0dWFsbHkKKwkJCSAqIHN0YXJ0cyB3YWl0aW5nIG9uIGEg bG9jay4gV2UgY2FuIGhhbmRsZSB0aGlzIGNhc2UgYnkgbm90CisJCQkgKiBhbGxvd2luZyB0aGUg bGVhZGVyIHRvIGluY3JlbWVudCB0aGUgc3RyZWFtIGJsb2NrIGNvdW50IGR1cmluZworCQkJICog dGhlIHRpbWUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGFjcXVpcmVzIHRoZSBsb2NrIGJ1dCBpdCBp cyBub3QKKwkJCSAqIGNsZWFyIHdoZXRoZXIgdGhhdCBpcyB3b3J0aCB0aGUgY29tcGxleGl0eS4K KwkJCSAqCisJCQkgKiBOb3csIGlmIHRoaXMgbWlzc2VkIGNodW5rIGNvbnRhaW5zIHJvbGxiYWNr IHRvIHNhdmVwb2ludCwgdGhlbgorCQkJICogdGhlcmUgaXMgYSByaXNrIG9mIGRlYWRsb2NrIHdo aWNoIHByb2JhYmx5IHNob3VsZG4ndCBoYXBwZW4KKwkJCSAqIGFmdGVyIHJlc3RhcnQuCisJCQkg Ki8KKwkJCXBhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKCk7CisJCQlicmVhazsKKworCQlk ZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCWluX3N0cmVhbWVk X3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkvKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgY291bGQgYmUgaW4gYSB0cmFuc2FjdGlvbiBpbiB3aGljaCBjYXNlIHdlCisJICogbmVlZCB0 byByZXBvcnQgdGhlIHN0YXRlIGFzIFNUQVRFX0lETEVJTlRSQU5TQUNUSU9OLgorCSAqLworCWlm IChJc1RyYW5zYWN0aW9uT3JUcmFuc2FjdGlvbkJsb2NrKCkpCisJCXBnc3RhdF9yZXBvcnRfYWN0 aXZpdHkoU1RBVEVfSURMRUlOVFJBTlNBQ1RJT04sIE5VTEwpOworCWVsc2UKKwkJcGdzdGF0X3Jl cG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKIAotCWxvZ2ljYWxyZXBfcmVhZF9zdHJl YW1fYWJvcnQocywgJnhpZCwgJnN1YnhpZCk7CisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9p bmZvKCk7Cit9CiAKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIFNUUkVBTSBBQk9S VCBtZXNzYWdlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIHdhcworICogc2VyaWFsaXplZCB0byBmaWxl LgorICovCitzdGF0aWMgdm9pZAorc3RyZWFtX2Fib3J0X2ludGVybmFsKFRyYW5zYWN0aW9uSWQg eGlkLCBUcmFuc2FjdGlvbklkIHN1YnhpZCkKK3sKIAkvKgogCSAqIElmIHRoZSB0d28gWElEcyBh cmUgdGhlIHNhbWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0b3BsZXZlbCB4YWN0LCBzbwogCSAq IGp1c3QgZGVsZXRlIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQgaW5mby4KIAkgKi8KIAlpZiAo eGlkID09IHN1YnhpZCkKLQl7Ci0JCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoeGlkLCBJ bnZhbGlkWExvZ1JlY1B0cik7CiAJCXN0cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsIHhpZCk7Ci0JfQogCWVsc2UKIAl7CiAJCS8qCkBAIC0xMzE4LDggKzE3NDgs NiBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gcykKIAkJYm9vbAkJZm91 bmQgPSBmYWxzZTsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwogCi0JCXNldF9hcHBseV9lcnJv cl9jb250ZXh0X3hhY3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7Ci0KIAkJc3ViaWR4ID0g LTE7CiAJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAkJc3VieGFjdF9pbmZvX3JlYWQoTXlM b2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKQEAgLTEzNDQsNDcgKzE3NzIsMjM1IEBAIGFw cGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQkJY2xlYW51cF9zdWJ4YWN0 X2luZm8oKTsKIAkJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiAJCQlDb21taXRUcmFuc2FjdGlv bkNvbW1hbmQoKTsKLQkJCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwogCQkJcmV0 dXJuOwogCQl9CiAKLQkJLyogb3BlbiB0aGUgY2hhbmdlcyBmaWxlICovCi0JCWNoYW5nZXNfZmls ZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKLQkJZmQgPSBCdWZG aWxlT3BlbkZpbGVTZXQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdHJlYW1fZmlsZXNldCwgcGF0aCwK LQkJCQkJCQkJT19SRFdSLCBmYWxzZSk7CisJCS8qIG9wZW4gdGhlIGNoYW5nZXMgZmlsZSAqLwor CQljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7 CisJCWZkID0gQnVmRmlsZU9wZW5GaWxlU2V0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2Zp bGVzZXQsIHBhdGgsCisJCQkJCQkJCU9fUkRXUiwgZmFsc2UpOworCisJCS8qIE9LLCB0cnVuY2F0 ZSB0aGUgZmlsZSBhdCB0aGUgcmlnaHQgb2Zmc2V0ICovCisJCUJ1ZkZpbGVUcnVuY2F0ZUZpbGVT ZXQoZmQsIHN1YnhhY3RfZGF0YS5zdWJ4YWN0c1tzdWJpZHhdLmZpbGVubywKKwkJCQkJCQkgICBz dWJ4YWN0X2RhdGEuc3VieGFjdHNbc3ViaWR4XS5vZmZzZXQpOworCQlCdWZGaWxlQ2xvc2UoZmQp OworCisJCS8qIGRpc2NhcmQgdGhlIHN1YnhhY3RzIGFkZGVkIGxhdGVyICovCisJCXN1YnhhY3Rf ZGF0YS5uc3VieGFjdHMgPSBzdWJpZHg7CisKKwkJLyogd3JpdGUgdGhlIHVwZGF0ZWQgc3VieGFj dCBsaXN0ICovCisJCXN1YnhhY3RfaW5mb193cml0ZShNeUxvZ2ljYWxSZXBXb3JrZXItPnN1Ymlk LCB4aWQpOworCisJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CisJCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZS4K KyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBz KQoreworCVRyYW5zYWN0aW9uSWQgeGlkOworCVRyYW5zYWN0aW9uSWQgc3VieGlkOworCUxvZ2lj YWxSZXBTdHJlYW1BYm9ydERhdGEgYWJvcnRfZGF0YTsKKwlQYXJhbGxlbEFwcGx5V29ya2VySW5m byAqd2luZm87CisJVHJhbnNBcHBseUFjdGlvbiBhcHBseV9hY3Rpb247CisKKwkvKiBTYXZlIHRo ZSBtZXNzYWdlIGJlZm9yZSBpdCBpcyBjb25zdW1lZC4gKi8KKwlTdHJpbmdJbmZvRGF0YSBvcmln aW5hbF9tc2cgPSAqczsKKwlib29sCQl0b3BsZXZlbF94YWN0OworCisJaWYgKGluX3N0cmVhbWVk X3RyYW5zYWN0aW9uKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJP VE9DT0xfVklPTEFUSU9OKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQUJPUlQgbWVz c2FnZSB3aXRob3V0IFNUUkVBTSBTVE9QIikpKTsKKworCS8qIFdlIHJlY2VpdmUgYWJvcnQgaW5m b3JtYXRpb24gb25seSB3aGVuIHdlIGNhbiBhcHBseSBpbiBwYXJhbGxlbC4gKi8KKwlsb2dpY2Fs cmVwX3JlYWRfc3RyZWFtX2Fib3J0KHMsICZhYm9ydF9kYXRhLAorCQkJCQkJCQkgTXlMb2dpY2Fs UmVwV29ya2VyLT5wYXJhbGxlbF9hcHBseSk7CisKKwl4aWQgPSBhYm9ydF9kYXRhLnhpZDsKKwlz dWJ4aWQgPSBhYm9ydF9kYXRhLnN1YnhpZDsKKwl0b3BsZXZlbF94YWN0ID0gKHhpZCA9PSBzdWJ4 aWQpOworCisJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdWJ4aWQsIGFib3J0X2RhdGEu YWJvcnRfbHNuKTsKKworCWFwcGx5X2FjdGlvbiA9IGdldF90cmFuc2FjdGlvbl9hcHBseV9hY3Rp b24oeGlkLCAmd2luZm8pOworCisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRS QU5TX0xFQURFUl9TRVJJQUxJWkU6CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgaW4gdGhlIGxlYWRl ciBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFs aXplZCB0byBmaWxlLgorCQkJICovCisJCQlzdHJlYW1fYWJvcnRfaW50ZXJuYWwoeGlkLCBzdWJ4 aWQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19MRUFERVJfU0VORF9UT19QQVJBTExFTDoK KwkJCUFzc2VydCh3aW5mbyk7CisKKwkJCS8qCisJCQkgKiBGb3IgdGhlIGNhc2Ugb2YgYWJvcnRp bmcgdGhlIHN1YnRyYW5zYWN0aW9uLCB3ZSBpbmNyZW1lbnQgdGhlCisJCQkgKiBudW1iZXIgb2Yg c3RyZWFtaW5nIGJsb2NrcyBhbmQgdGFrZSB0aGUgbG9jayBhZ2FpbiBiZWZvcmUKKwkJCSAqIHNl bmRpbmcgdGhlIFNUUkVBTV9BQk9SVCB0byBlbnN1cmUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkK KwkJCSAqIHdvcmtlciB3aWxsIHdhaXQgb24gdGhlIGxvY2sgZm9yIHRoZSBuZXh0IHNldCBvZiBj aGFuZ2VzIGFmdGVyCisJCQkgKiBwcm9jZXNzaW5nIHRoZSBTVFJFQU1fQUJPUlQgbWVzc2FnZSBp ZiBpdCBpcyBub3QgYWxyZWFkeQorCQkJICogd2FpdGluZyBmb3IgU1RSRUFNX1NUT1AgbWVzc2Fn ZS4KKwkJCSAqCisJCQkgKiBJdCBpcyBpbXBvcnRhbnQgdG8gcGVyZm9ybSB0aGlzIGxvY2tpbmcg YmVmb3JlIHNlbmRpbmcgdGhlCisJCQkgKiBTVFJFQU1fQUJPUlQgbWVzc2FnZSBzbyB0aGF0IHRo ZSBsZWFkZXIgY2FuIGhvbGQgdGhlIGxvY2sgZmlyc3QKKwkJCSAqIGFuZCB0aGUgcGFyYWxsZWwg YXBwbHkgd29ya2VyIHdpbGwgd2FpdCBmb3IgdGhlIGxlYWRlciB0bworCQkJICogcmVsZWFzZSB0 aGUgbG9jay4gVGhpcyBpcyB0aGUgc2FtZSBhcyB3aGF0IHdlIGRvIGluCisJCQkgKiBhcHBseV9o YW5kbGVfc3RyZWFtX3N0b3AuIFNlZSBMb2NraW5nIENvbnNpZGVyYXRpb25zIGF0b3AKKwkJCSAq IGFwcGx5cGFyYWxsZWx3b3JrZXIuYy4KKwkJCSAqLworCQkJaWYgKCF0b3BsZXZlbF94YWN0KQor CQkJeworCQkJCXBhX3VubG9ja19zdHJlYW0oeGlkLCBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKKwkJ CQlwZ19hdG9taWNfYWRkX2ZldGNoX3UzMigmd2luZm8tPnNoYXJlZC0+cGVuZGluZ19zdHJlYW1f Y291bnQsIDEpOworCQkJCXBhX2xvY2tfc3RyZWFtKHhpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisJCQl9CisKKwkJCWlmIChwYV9zZW5kX2RhdGEod2luZm8sIHMtPmxlbiwgcy0+ZGF0YSkpCisJ CQl7CisJCQkJLyoKKwkJCQkgKiBVbmxpa2UgU1RSRUFNX0NPTU1JVCBhbmQgU1RSRUFNX1BSRVBB UkUsIHdlIGRvbid0IG5lZWQgdG8KKwkJCQkgKiB3YWl0IGhlcmUgZm9yIHRoZSBwYXJhbGxlbCBh cHBseSB3b3JrZXIgdG8gZmluaXNoIGFzIHRoYXQgaXMKKwkJCQkgKiBub3QgcmVxdWlyZWQgdG8g bWFpbnRhaW4gdGhlIGNvbW1pdCBvcmRlciBhbmQgd29uJ3QgaGF2ZSB0aGUKKwkJCQkgKiByaXNr IG9mIGZhaWx1cmVzIGR1ZSB0byB0cmFuc2FjdGlvbiBkZXBlbmRlbmNpZXMgYW5kCisJCQkJICog ZGVhZGxvY2tzLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IGJlZm9yZSB0aGUgcGFyYWxs ZWwKKwkJCQkgKiB3b3JrZXIgZmluaXNoZXMgYW5kIHdlIGNsZWFyIHRoZSB3b3JrZXIgaW5mbywg dGhlIHhpZAorCQkJCSAqIHdyYXBhcm91bmQgaGFwcGVucyBvbiB0aGUgdXBzdHJlYW0gYW5kIGEg bmV3IHRyYW5zYWN0aW9uCisJCQkJICogd2l0aCB0aGUgc2FtZSB4aWQgY2FuIGFwcGVhciBhbmQg dGhhdCBjYW4gbGVhZCB0byBkdXBsaWNhdGUKKwkJCQkgKiBlbnRyaWVzIGluIFBhcmFsbGVsQXBw bHlUeG5IYXNoLiBZZXQgYW5vdGhlciBwcm9ibGVtIGNvdWxkCisJCQkJICogYmUgdGhhdCB3ZSBt YXkgaGF2ZSBzZXJpYWxpemVkIHRoZSBjaGFuZ2VzIGluIHBhcnRpYWwKKwkJCQkgKiBzZXJpYWxp emUgbW9kZSBhbmQgdGhlIGZpbGUgY29udGFpbmluZyB4YWN0IGNoYW5nZXMgbWF5CisJCQkJICog YWxyZWFkeSBleGlzdCwgYW5kIGFmdGVyIHhpZCB3cmFwYXJvdW5kIHRyeWluZyB0byBjcmVhdGUg dGhlCisJCQkJICogZmlsZSBmb3IgdGhlIHNhbWUgeGlkIGNhbiBsZWFkIHRvIGFuIGVycm9yLiBU byBhdm9pZCB0aGVzZQorCQkJCSAqIHByb2JsZW1zLCB3ZSBkZWNpZGUgdG8gd2FpdCBmb3IgdGhl IGFib3J0cyB0byBmaW5pc2guCisJCQkJICoKKwkJCQkgKiBOb3RlLCBpdCBpcyBva2F5IHRvIG5v dCB1cGRhdGUgdGhlIGZsdXNoIGxvY2F0aW9uIHBvc2l0aW9uCisJCQkJICogZm9yIGFib3J0cyBh cyBpbiB3b3JzdCBjYXNlIHRoYXQgbWVhbnMgc3VjaCBhIHRyYW5zYWN0aW9uCisJCQkJICogd29u J3QgYmUgc2VudCBhZ2FpbiBhZnRlciByZXN0YXJ0LgorCQkJCSAqLworCQkJCWlmICh0b3BsZXZl bF94YWN0KQorCQkJCQlwYV94YWN0X2ZpbmlzaCh3aW5mbywgSW52YWxpZFhMb2dSZWNQdHIpOwor CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdo aWxlIHNlbmRpbmcgdGhpcyBjaGFuZ2UgdG8gcGFyYWxsZWwgYXBwbHkKKwkJCSAqIHdvcmtlciB3 ZSBuZWVkIHRvIHN3aXRjaCB0byBzZXJpYWxpemUgbW9kZS4KKwkJCSAqLworCQkJcGFfc3dpdGNo X3RvX3BhcnRpYWxfc2VyaWFsaXplKHdpbmZvLCB0cnVlKTsKKworCQkJLyogZmFsbCB0aHJvdWdo ICovCisJCWNhc2UgVFJBTlNfTEVBREVSX1BBUlRJQUxfU0VSSUFMSVpFOgorCQkJQXNzZXJ0KHdp bmZvKTsKKworCQkJLyoKKwkJCSAqIFBhcmFsbGVsIGFwcGx5IHdvcmtlciBtaWdodCBoYXZlIGFw cGxpZWQgc29tZSBjaGFuZ2VzLCBzbyB3cml0ZQorCQkJICogdGhlIFNUUkVBTV9BQk9SVCBtZXNz YWdlIHNvIHRoYXQgaXQgY2FuIHJvbGxiYWNrIHRoZQorCQkJICogc3VidHJhbnNhY3Rpb24gaWYg bmVlZGVkLgorCQkJICovCisJCQlzdHJlYW1fb3Blbl9hbmRfd3JpdGVfY2hhbmdlKHhpZCwgTE9H SUNBTF9SRVBfTVNHX1NUUkVBTV9BQk9SVCwKKwkJCQkJCQkJCQkgJm9yaWdpbmFsX21zZyk7CisK KwkJCWlmICh0b3BsZXZlbF94YWN0KQorCQkJeworCQkJCXBhX3NldF9maWxlc2V0X3N0YXRlKHdp bmZvLT5zaGFyZWQsIEZTX1NFUklBTElaRV9ET05FKTsKKwkJCQlwYV94YWN0X2ZpbmlzaCh3aW5m bywgSW52YWxpZFhMb2dSZWNQdHIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBUUkFOU19Q QVJBTExFTF9BUFBMWToKKworCQkJLyoKKwkJCSAqIElmIHRoZSBwYXJhbGxlbCBhcHBseSB3b3Jr ZXIgaXMgYXBwbHlpbmcgc3Bvb2xlZCBtZXNzYWdlcyB0aGVuCisJCQkgKiBjbG9zZSB0aGUgZmls ZSBiZWZvcmUgYWJvcnRpbmcuCisJCQkgKi8KKwkJCWlmICh0b3BsZXZlbF94YWN0ICYmIHN0cmVh bV9mZCkKKwkJCQlzdHJlYW1fY2xvc2VfZmlsZSgpOworCisJCQlwYV9zdHJlYW1fYWJvcnQoJmFi b3J0X2RhdGEpOworCisJCQkvKgorCQkJICogV2UgbmVlZCB0byB3YWl0IGFmdGVyIHByb2Nlc3Np bmcgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IGZvciB0aGUKKwkJCSAqIG5leHQgc2V0IG9mIGNoYW5n ZXMuCisJCQkgKgorCQkJICogV2UgaGF2ZSBhIHJhY2UgY29uZGl0aW9uIGhlcmUgZHVlIHRvIHdo aWNoIHdlIGNhbiBzdGFydCB3YWl0aW5nCisJCQkgKiBoZXJlIHdoZW4gdGhlcmUgYXJlIG1vcmUg Y2h1bmsgb2Ygc3RyZWFtcyBpbiB0aGUgcXVldWUuIFNlZQorCQkJICogYXBwbHlfaGFuZGxlX3N0 cmVhbV9zdG9wLgorCQkJICovCisJCQlpZiAoIXRvcGxldmVsX3hhY3QpCisJCQkJcGFfZGVjcl9h bmRfd2FpdF9zdHJlYW1fYmxvY2soKTsKKworCQkJZWxvZyhERUJVRzEsICJmaW5pc2hlZCBwcm9j ZXNzaW5nIHRoZSBTVFJFQU0gQUJPUlQgY29tbWFuZCIpOworCQkJYnJlYWs7CisKKwkJZGVmYXVs dDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXNldF9hcHBseV9lcnJv cl9jb250ZXh0X2luZm8oKTsKK30KKworLyoKKyAqIEVuc3VyZSB0aGF0IHRoZSBwYXNzZWQgbG9j YXRpb24gaXMgZmlsZXNldCdzIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK2Vuc3VyZV9sYXN0X21l c3NhZ2UoRmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgZmls ZW5vLAorCQkJCQlvZmZfdCBvZmZzZXQpCit7CisJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOworCUJ1 ZkZpbGUgICAgKmZkOworCWludAkJCWxhc3RfZmlsZW5vOworCW9mZl90CQlsYXN0X29mZnNldDsK KworCUFzc2VydCghSXNUcmFuc2FjdGlvblN0YXRlKCkpOwogCi0JCS8qIE9LLCB0cnVuY2F0ZSB0 aGUgZmlsZSBhdCB0aGUgcmlnaHQgb2Zmc2V0ICovCi0JCUJ1ZkZpbGVUcnVuY2F0ZUZpbGVTZXQo ZmQsIHN1YnhhY3RfZGF0YS5zdWJ4YWN0c1tzdWJpZHhdLmZpbGVubywKLQkJCQkJCQkgICBzdWJ4 YWN0X2RhdGEuc3VieGFjdHNbc3ViaWR4XS5vZmZzZXQpOwotCQlCdWZGaWxlQ2xvc2UoZmQpOwor CWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCQkvKiBkaXNjYXJkIHRoZSBzdWJ4YWN0cyBh ZGRlZCBsYXRlciAqLwotCQlzdWJ4YWN0X2RhdGEubnN1YnhhY3RzID0gc3ViaWR4OworCWNoYW5n ZXNfZmlsZW5hbWUocGF0aCwgTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgeGlkKTsKIAotCQkv KiB3cml0ZSB0aGUgdXBkYXRlZCBzdWJ4YWN0IGxpc3QgKi8KLQkJc3VieGFjdF9pbmZvX3dyaXRl KE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJZmQgPSBCdWZGaWxlT3BlbkZpbGVT ZXQoc3RyZWFtX2ZpbGVzZXQsIHBhdGgsIE9fUkRPTkxZLCBmYWxzZSk7CiAKLQkJZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKLQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7Ci0JfQorCUJ1ZkZp bGVTZWVrKGZkLCAwLCAwLCBTRUVLX0VORCk7CisJQnVmRmlsZVRlbGwoZmQsICZsYXN0X2ZpbGVu bywgJmxhc3Rfb2Zmc2V0KTsKIAotCXJlc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfaW5mbygpOwor CUJ1ZkZpbGVDbG9zZShmZCk7CisKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCisJaWYgKGxh c3RfZmlsZW5vICE9IGZpbGVubyB8fCBsYXN0X29mZnNldCAhPSBvZmZzZXQpCisJCWVsb2coRVJS T1IsICJ1bmV4cGVjdGVkIG1lc3NhZ2UgbGVmdCBpbiBzdHJlYW1pbmcgdHJhbnNhY3Rpb24ncyBj aGFuZ2VzIGZpbGUgXCIlc1wiIiwKKwkJCSBwYXRoKTsKIH0KIAogLyoKICAqIENvbW1vbiBzcG9v bGZpbGUgcHJvY2Vzc2luZy4KICAqLwotc3RhdGljIHZvaWQKLWFwcGx5X3Nwb29sZWRfbWVzc2Fn ZXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQordm9pZAorYXBwbHlfc3Bvb2xl ZF9tZXNzYWdlcyhGaWxlU2V0ICpzdHJlYW1fZmlsZXNldCwgVHJhbnNhY3Rpb25JZCB4aWQsCisJ CQkJCSAgIFhMb2dSZWNQdHIgbHNuKQogewogCVN0cmluZ0luZm9EYXRhIHMyOwogCWludAkJCW5j aGFuZ2VzOwogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAljaGFyCSAgICpidWZmZXIgPSBOVUxM OwogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwotCUJ1ZkZpbGUgICAgKmZkOworCVJlc291cmNlT3du ZXIgb2xkb3duZXI7CisJaW50CQkJZmlsZW5vOworCW9mZl90CQlvZmZzZXQ7CiAKLQltYXliZV9z dGFydF9za2lwcGluZ19jaGFuZ2VzKGxzbik7CisJaWYgKCFhbV9wYXJhbGxlbF9hcHBseV93b3Jr ZXIoKSkKKwkJbWF5YmVfc3RhcnRfc2tpcHBpbmdfY2hhbmdlcyhsc24pOwogCiAJLyogTWFrZSBz dXJlIHdlIGhhdmUgYW4gb3BlbiB0cmFuc2FjdGlvbiAqLwogCWJlZ2luX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKQEAgLTE0MDAsOCArMjAxNiwxNiBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5z YWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAljaGFuZ2VzX2ZpbGVuYW1lKHBhdGgsIE15 TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CiAJZWxvZyhERUJVRzEsICJyZXBsYXlpbmcg Y2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwgcGF0aCk7CiAKLQlmZCA9IEJ1ZkZpbGVPcGVuRmls ZVNldChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwK LQkJCQkJCQlmYWxzZSk7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIGZpbGUgaXMgb3duZWQgYnkg dGhlIHRvcGxldmVsIHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlCisJICogZmlsZSB3aWxsIG5vdCBi ZSBhY2NpZGVudGFsbHkgY2xvc2VkIHdoZW4gYWJvcnRpbmcgYSBzdWJ0cmFuc2FjdGlvbi4KKwkg Ki8KKwlvbGRvd25lciA9IEN1cnJlbnRSZXNvdXJjZU93bmVyOworCUN1cnJlbnRSZXNvdXJjZU93 bmVyID0gVG9wVHJhbnNhY3Rpb25SZXNvdXJjZU93bmVyOworCisJc3RyZWFtX2ZkID0gQnVmRmls ZU9wZW5GaWxlU2V0KHN0cmVhbV9maWxlc2V0LCBwYXRoLCBPX1JET05MWSwgZmFsc2UpOworCisJ Q3VycmVudFJlc291cmNlT3duZXIgPSBvbGRvd25lcjsKIAogCWJ1ZmZlciA9IHBhbGxvYyhCTENL U1opOwogCWluaXRTdHJpbmdJbmZvKCZzMik7CkBAIC0xNDMyLDcgKzIwNTYsNyBAQCBhcHBseV9z cG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKiByZWFkIGxlbmd0aCBvZiB0aGUgb24tZGlzayBy ZWNvcmQgKi8KLQkJbmJ5dGVzID0gQnVmRmlsZVJlYWQoZmQsICZsZW4sIHNpemVvZihsZW4pKTsK KwkJbmJ5dGVzID0gQnVmRmlsZVJlYWQoc3RyZWFtX2ZkLCAmbGVuLCBzaXplb2YobGVuKSk7CiAK IAkJLyogaGF2ZSB3ZSByZWFjaGVkIGVuZCBvZiB0aGUgZmlsZT8gKi8KIAkJaWYgKG5ieXRlcyA9 PSAwKQpAQCAtMTQ1MywxMiArMjA3NywxNCBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5z YWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbikKIAkJYnVmZmVyID0gcmVwYWxsb2MoYnVmZmVy LCBsZW4pOwogCiAJCS8qIGFuZCBmaW5hbGx5IHJlYWQgdGhlIGRhdGEgaW50byB0aGUgYnVmZmVy ICovCi0JCWlmIChCdWZGaWxlUmVhZChmZCwgYnVmZmVyLCBsZW4pICE9IGxlbikKKwkJaWYgKEJ1 ZkZpbGVSZWFkKHN0cmVhbV9mZCwgYnVmZmVyLCBsZW4pICE9IGxlbikKIAkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAogCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgcmVhZCBmcm9tIHN0cmVhbWluZyB0cmFuc2FjdGlvbidzIGNoYW5nZXMgZmlsZSBcIiVz XCI6ICVtIiwKIAkJCQkJCQlwYXRoKSkpOwogCisJCUJ1ZkZpbGVUZWxsKHN0cmVhbV9mZCwgJmZp bGVubywgJm9mZnNldCk7CisKIAkJLyogY29weSB0aGUgYnVmZmVyIHRvIHRoZSBzdHJpbmdpbmZv IGFuZCBjYWxsIGFwcGx5X2Rpc3BhdGNoICovCiAJCXJlc2V0U3RyaW5nSW5mbygmczIpOwogCQlh cHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZzMiwgYnVmZmVyLCBsZW4pOwpAQCAtMTQ3NCwxNSArMjEw MCwyNCBAQCBhcHBseV9zcG9vbGVkX21lc3NhZ2VzKFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGxzbikKIAogCQluY2hhbmdlcysrOwogCisJCS8qCisJCSAqIEl0IGlzIHBvc3NpYmxlIHRo ZSBmaWxlIGhhcyBiZWVuIGNsb3NlZCBiZWNhdXNlIHdlIGhhdmUgcHJvY2Vzc2VkCisJCSAqIHRo ZSB0cmFuc2FjdGlvbiBlbmQgbWVzc2FnZSBsaWtlIHN0cmVhbV9jb21taXQgaW4gd2hpY2ggY2Fz ZSB0aGF0CisJCSAqIG11c3QgYmUgdGhlIGxhc3QgbWVzc2FnZS4KKwkJICovCisJCWlmICghc3Ry ZWFtX2ZkKQorCQl7CisJCQllbnN1cmVfbGFzdF9tZXNzYWdlKHN0cmVhbV9maWxlc2V0LCB4aWQs IGZpbGVubywgb2Zmc2V0KTsKKwkJCWJyZWFrOworCQl9CisKIAkJaWYgKG5jaGFuZ2VzICUgMTAw MCA9PSAwKQogCQkJZWxvZyhERUJVRzEsICJyZXBsYXllZCAlZCBjaGFuZ2VzIGZyb20gZmlsZSBc IiVzXCIiLAogCQkJCSBuY2hhbmdlcywgcGF0aCk7CiAJfQogCi0JQnVmRmlsZUNsb3NlKGZkKTsK LQotCXBmcmVlKGJ1ZmZlcik7Ci0JcGZyZWUoczIuZGF0YSk7CisJaWYgKHN0cmVhbV9mZCkKKwkJ c3RyZWFtX2Nsb3NlX2ZpbGUoKTsKIAogCWVsb2coREVCVUcxLCAicmVwbGF5ZWQgJWQgKGFsbCkg Y2hhbmdlcyBmcm9tIGZpbGUgXCIlc1wiIiwKIAkJIG5jaGFuZ2VzLCBwYXRoKTsKQEAgLTE0OTgs NiArMjEzMywxMSBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIHMpCiB7 CiAJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJTG9naWNhbFJlcENvbW1pdERhdGEgY29tbWl0X2RhdGE7 CisJUGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvOworCVRyYW5zQXBwbHlBY3Rpb24gYXBw bHlfYWN0aW9uOworCisJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQu ICovCisJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKIAlpZiAoaW5fc3RyZWFt ZWRfdHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTA3LDE0ICsyMTQ3LDgzIEBA IGFwcGx5X2hhbmRsZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gcykKIAl4aWQgPSBsb2dpY2Fs cmVwX3JlYWRfc3RyZWFtX2NvbW1pdChzLCAmY29tbWl0X2RhdGEpOwogCXNldF9hcHBseV9lcnJv cl9jb250ZXh0X3hhY3QoeGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKIAotCWVsb2coREVC VUcxLCAicmVjZWl2ZWQgY29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7 CisJYXBwbHlfYWN0aW9uID0gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2FjdGlvbih4aWQsICZ3aW5m byk7CiAKLQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xz bik7CisJc3dpdGNoIChhcHBseV9hY3Rpb24pCisJeworCQljYXNlIFRSQU5TX0xFQURFUl9TRVJJ QUxJWkU6CiAKLQlhcHBseV9oYW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisJ CQkvKgorCQkJICogVGhlIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHNlcmlhbGl6ZWQgdG8gZmlsZSwg c28gcmVwbGF5IGFsbCB0aGUKKwkJCSAqIHNwb29sZWQgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJ YXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 LCB4aWQsCisJCQkJCQkJCSAgIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCisJCQlhcHBseV9o YW5kbGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7CisKKwkJCS8qIFVubGluayB0aGUg ZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHhpZCk7CisJCQli cmVhazsKKworCQljYXNlIFRSQU5TX0xFQURFUl9TRU5EX1RPX1BBUkFMTEVMOgorCQkJQXNzZXJ0 KHdpbmZvKTsKKworCQkJaWYgKHBhX3NlbmRfZGF0YSh3aW5mbywgcy0+bGVuLCBzLT5kYXRhKSkK KwkJCXsKKwkJCQkvKiBGaW5pc2ggcHJvY2Vzc2luZyB0aGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9u LiAqLworCQkJCXBhX3hhY3RfZmluaXNoKHdpbmZvLCBjb21taXRfZGF0YS5lbmRfbHNuKTsKKwkJ CQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2hpbGUg c2VuZGluZyB0aGlzIGNoYW5nZSB0byBwYXJhbGxlbCBhcHBseQorCQkJICogd29ya2VyIHdlIG5l ZWQgdG8gc3dpdGNoIHRvIHNlcmlhbGl6ZSBtb2RlLgorCQkJICovCisJCQlwYV9zd2l0Y2hfdG9f cGFydGlhbF9zZXJpYWxpemUod2luZm8sIHRydWUpOworCisJCQkvKiBmYWxsIHRocm91Z2ggKi8K KwkJY2FzZSBUUkFOU19MRUFERVJfUEFSVElBTF9TRVJJQUxJWkU6CisJCQlBc3NlcnQod2luZm8p OworCisJCQlzdHJlYW1fb3Blbl9hbmRfd3JpdGVfY2hhbmdlKHhpZCwgTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9DT01NSVQsCisJCQkJCQkJCQkJICZvcmlnaW5hbF9tc2cpOworCisJCQlwYV9zZXRf ZmlsZXNldF9zdGF0ZSh3aW5mby0+c2hhcmVkLCBGU19TRVJJQUxJWkVfRE9ORSk7CiAKLQkvKiB1 bmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8g Ki8KLQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQp OworCQkJLyogRmluaXNoIHByb2Nlc3NpbmcgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4gKi8K KwkJCXBhX3hhY3RfZmluaXNoKHdpbmZvLCBjb21taXRfZGF0YS5lbmRfbHNuKTsKKwkJCWJyZWFr OworCisJCWNhc2UgVFJBTlNfUEFSQUxMRUxfQVBQTFk6CisKKwkJCS8qCisJCQkgKiBJZiB0aGUg cGFyYWxsZWwgYXBwbHkgd29ya2VyIGlzIGFwcGx5aW5nIHNwb29sZWQgbWVzc2FnZXMgdGhlbgor CQkJICogY2xvc2UgdGhlIGZpbGUgYmVmb3JlIGNvbW1pdHRpbmcuCisJCQkgKi8KKwkJCWlmIChz dHJlYW1fZmQpCisJCQkJc3RyZWFtX2Nsb3NlX2ZpbGUoKTsKKworCQkJYXBwbHlfaGFuZGxlX2Nv bW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOworCisJCQlNeVBhcmFsbGVsU2hhcmVkLT5sYXN0 X2NvbW1pdF9lbmQgPSBYYWN0TGFzdENvbW1pdEVuZDsKKworCQkJLyoKKwkJCSAqIEl0IGlzIGlt cG9ydGFudCB0byBzZXQgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGFzIGZpbmlzaGVkIGJlZm9yZQor CQkJICogcmVsZWFzaW5nIHRoZSBsb2NrLiBTZWUgcGFfd2FpdF9mb3JfeGFjdF9maW5pc2guCisJ CQkgKi8KKwkJCXBhX3NldF94YWN0X3N0YXRlKE15UGFyYWxsZWxTaGFyZWQsIFBBUkFMTEVMX1RS QU5TX0ZJTklTSEVEKTsKKwkJCXBhX3VubG9ja190cmFuc2FjdGlvbih4aWQsIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2spOworCisJCQlwYV9yZXNldF9zdWJ0cmFucygpOworCisJCQllbG9nKERFQlVHMSwg ImZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIFNUUkVBTSBDT01NSVQgY29tbWFuZCIpOworCQkJYnJl YWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2VydChmYWxzZSk7CisJCQlicmVhazsKKwl9CiAKIAkv KiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFs bGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190YWJsZXMoY29tbWl0X2RhdGEuZW5kX2xzbik7CkBA IC0xNTU4LDkgKzIyNjcsMTYgQEAgYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbChMb2dpY2Fs UmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpCiAJCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5f dGltZXN0YW1wID0gY29tbWl0X2RhdGEtPmNvbW1pdHRpbWU7CiAKIAkJQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKCk7CisKKwkJaWYgKElzVHJhbnNhY3Rpb25CbG9jaygpKQorCQl7CisJCQlFbmRU cmFuc2FjdGlvbkJsb2NrKGZhbHNlKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CQl9CisKIAkJcGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCQlzdG9yZV9mbHVzaF9wb3Np dGlvbihjb21taXRfZGF0YS0+ZW5kX2xzbik7CisJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKGNvbW1p dF9kYXRhLT5lbmRfbHNuLCBYYWN0TGFzdENvbW1pdEVuZCk7CiAJfQogCWVsc2UKIAl7CkBAIC0y NTExLDcgKzMyMjcsNyBAQCBhcHBseV9oYW5kbGVfdHJ1bmNhdGUoU3RyaW5nSW5mbyBzKQogLyoK ICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2FnZSBkaXNwYXRjaGVyLgogICov Ci1zdGF0aWMgdm9pZAordm9pZAogYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogewogCUxv Z2ljYWxSZXBNc2dUeXBlIGFjdGlvbiA9IHBxX2dldG1zZ2J5dGUocyk7CkBAIC0yNjc1LDE3ICsz MzkxLDI0IEBAIGdldF9mbHVzaF9wb3NpdGlvbihYTG9nUmVjUHRyICp3cml0ZSwgWExvZ1JlY1B0 ciAqZmx1c2gsCiAvKgogICogU3RvcmUgY3VycmVudCByZW1vdGUvbG9jYWwgbHNuIHBhaXIgaW4g dGhlIHRyYWNraW5nIGxpc3QuCiAgKi8KLXN0YXRpYyB2b2lkCi1zdG9yZV9mbHVzaF9wb3NpdGlv bihYTG9nUmVjUHRyIHJlbW90ZV9sc24pCit2b2lkCitzdG9yZV9mbHVzaF9wb3NpdGlvbihYTG9n UmVjUHRyIHJlbW90ZV9sc24sIFhMb2dSZWNQdHIgbG9jYWxfbHNuKQogewogCUZsdXNoUG9zaXRp b24gKmZsdXNocG9zOwogCisJLyoKKwkgKiBTa2lwIGZvciBwYXJhbGxlbCBhcHBseSB3b3JrZXJz LCBiZWNhdXNlIHRoZSBsc25fbWFwcGluZyBpcyBtYWludGFpbmVkCisJICogYnkgdGhlIGxlYWRl ciBhcHBseSB3b3JrZXIuCisJICovCisJaWYgKGFtX3BhcmFsbGVsX2FwcGx5X3dvcmtlcigpKQor CQlyZXR1cm47CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMgaW4gcGVybWFuZW50IGNvbnRleHQgKi8K IAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKIAogCS8qIFRyYWNrIGNvbW1p dCBsc24gICovCiAJZmx1c2hwb3MgPSAoRmx1c2hQb3NpdGlvbiAqKSBwYWxsb2Moc2l6ZW9mKEZs dXNoUG9zaXRpb24pKTsKLQlmbHVzaHBvcy0+bG9jYWxfZW5kID0gWGFjdExhc3RDb21taXRFbmQ7 CisJZmx1c2hwb3MtPmxvY2FsX2VuZCA9IGxvY2FsX2xzbjsKIAlmbHVzaHBvcy0+cmVtb3RlX2Vu ZCA9IHJlbW90ZV9sc247CiAKIAlkbGlzdF9wdXNoX3RhaWwoJmxzbl9tYXBwaW5nLCAmZmx1c2hw b3MtPm5vZGUpOwpAQCAtMjc0NCw2ICszNDY3LDcgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9n UmVjUHRyIGxhc3RfcmVjZWl2ZWQpCiAJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJv cl9jYWxsYmFjazsKIAllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7 CiAJZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKwlhcHBseV9lcnJvcl9jb250 ZXh0X3N0YWNrID0gZXJyb3JfY29udGV4dF9zdGFjazsKIAogCS8qIFRoaXMgb3V0ZXIgbG9vcCBp dGVyYXRlcyBvbmNlIHBlciB3YWl0LiAqLwogCWZvciAoOzspCkBAIC0yOTU4LDYgKzM2ODIsNyBA QCBMb2dpY2FsUmVwQXBwbHlMb29wKFhMb2dSZWNQdHIgbGFzdF9yZWNlaXZlZCkKIAogCS8qIFBv cCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJj YWxsYmFjay5wcmV2aW91czsKKwlhcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyb3JfY29u dGV4dF9zdGFjazsKIAogCS8qIEFsbCBkb25lICovCiAJd2FscmN2X2VuZHN0cmVhbWluZyhMb2dS ZXBXb3JrZXJXYWxSY3ZDb25uLCAmdGxpKTsKQEAgLTMwNTYsOSArMzc4MSwzMSBAQCBzZW5kX2Zl ZWRiYWNrKFhMb2dSZWNQdHIgcmVjdnBvcywgYm9vbCBmb3JjZSwgYm9vbCByZXF1ZXN0UmVwbHkp CiB9CiAKIC8qCi0gKiBSZXJlYWQgc3Vic2NyaXB0aW9uIGluZm8gaWYgbmVlZGVkLiBNb3N0IGNo YW5nZXMgd2lsbCBiZSBleGl0LgorICogRXhpdCByb3V0aW5lIGZvciBhcHBseSB3b3JrZXJzIGR1 ZSB0byBzdWJzY3JpcHRpb24gcGFyYW1ldGVyIGNoYW5nZXMuCiAgKi8KIHN0YXRpYyB2b2lkCith cHBseV93b3JrZXJfZXhpdCh2b2lkKQoreworCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3JrZXIo KSkKKwl7CisJCS8qCisJCSAqIERvbid0IHN0b3AgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBh cyB0aGUgbGVhZGVyIHdpbGwgZGV0ZWN0IHRoZQorCQkgKiBzdWJzY3JpcHRpb24gcGFyYW1ldGVy IGNoYW5nZSBhbmQgcmVzdGFydCBsb2dpY2FsIHJlcGxpY2F0aW9uIGxhdGVyCisJCSAqIGFueXdh eS4gVGhpcyBhbHNvIHByZXZlbnRzIHRoZSBsZWFkZXIgZnJvbSByZXBvcnRpbmcgZXJyb3JzIHdo ZW4KKwkJICogdHJ5aW5nIHRvIGNvbW11bmljYXRlIHdpdGggYSBzdG9wcGVkIHBhcmFsbGVsIGFw cGx5IHdvcmtlciwgd2hpY2gKKwkJICogd291bGQgYWNjaWRlbnRhbGx5IGRpc2FibGUgc3Vic2Ny aXB0aW9ucyBpZiBkaXNhYmxlX29uX2Vycm9yIHdhcworCQkgKiBzZXQuCisJCSAqLworCQlyZXR1 cm47CisJfQorCisJcHJvY19leGl0KDApOworfQorCisvKgorICogUmVyZWFkIHN1YnNjcmlwdGlv biBpbmZvIGlmIG5lZWRlZC4gTW9zdCBjaGFuZ2VzIHdpbGwgYmUgZXhpdC4KKyAqLwordm9pZAog bWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3R4 OwpAQCAtMzA4OCw5ICszODM1LDkgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQog CWlmICghbmV3c3ViKQogCXsKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCBy ZXBsaWNhdGlvbiBhcHBseSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCi0J CQkJCQkic3RvcCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIHJlbW92ZWQiLAotCQkJCQkJ TXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCS8qIHRyYW5zbGF0b3I6IGZpcnN0ICVzIGlzIHRo ZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCBzdG9wIGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlv biB3YXMgcmVtb3ZlZCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJzY3JpcHRpb24t Pm5hbWUpKSk7CiAKIAkJcHJvY19leGl0KDApOwogCX0KQEAgLTMwOTksMTEgKzM4NDYsMTEgQEAg bWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCWlmICghbmV3c3ViLT5lbmFibGVkKQog CXsKIAkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBs eSB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgd2lsbCAiCi0JCQkJCQkic3RvcCBiZWNh dXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2FibGVkIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9u LT5uYW1lKSkpOworCQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dp Y2FsIHJlcGxpY2F0aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRp b24gXCIlc1wiIHdpbGwgc3RvcCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRpc2FibGVk IiwKKwkJCQkJCWdldF93b3JrZXJfbmFtZSgpLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKIAot CQlwcm9jX2V4aXQoMCk7CisJCWFwcGx5X3dvcmtlcl9leGl0KCk7CiAJfQogCiAJLyogIXNsb3Ru YW1lIHNob3VsZCBuZXZlciBoYXBwZW4gd2hlbiBlbmFibGVkIGlzIHRydWUuICovCkBAIC0zMTE0 LDcgKzM4NjEsMTAgQEAgbWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbih2b2lkKQogCiAJLyoKIAkg KiBFeGl0IGlmIGFueSBwYXJhbWV0ZXIgdGhhdCBhZmZlY3RzIHRoZSByZW1vdGUgY29ubmVjdGlv biB3YXMgY2hhbmdlZC4KLQkgKiBUaGUgbGF1bmNoZXIgd2lsbCBzdGFydCBhIG5ldyB3b3JrZXIu CisJICogVGhlIGxhdW5jaGVyIHdpbGwgc3RhcnQgYSBuZXcgd29ya2VyIGJ1dCBub3RlIHRoYXQg dGhlIHBhcmFsbGVsIGFwcGx5CisJICogd29ya2VyIHdvbid0IHJlc3RhcnQgaWYgdGhlIHN0cmVh bWluZyBvcHRpb24ncyB2YWx1ZSBpcyBjaGFuZ2VkIGZyb20KKwkgKiAncGFyYWxsZWwnIHRvIGFu eSBvdGhlciB2YWx1ZSBvciB0aGUgc2VydmVyIGRlY2lkZXMgbm90IHRvIHN0cmVhbSB0aGUKKwkg KiBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbi4KIAkgKi8KIAlpZiAoc3RyY21wKG5ld3N1Yi0+Y29u bmluZm8sIE15U3Vic2NyaXB0aW9uLT5jb25uaW5mbykgIT0gMCB8fAogCQlzdHJjbXAobmV3c3Vi LT5uYW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkgIT0gMCB8fApAQCAtMzEyNSwxMSArMzg3NSwx NyBAQCBtYXliZV9yZXJlYWRfc3Vic2NyaXB0aW9uKHZvaWQpCiAJCW5ld3N1Yi0+b3duZXIgIT0g TXlTdWJzY3JpcHRpb24tPm93bmVyIHx8CiAJCSFlcXVhbChuZXdzdWItPnB1YmxpY2F0aW9ucywg TXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9ucykpCiAJewotCQllcmVwb3J0KExPRywKLQkJCQko ZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9u IFwiJXNcIiB3aWxsIHJlc3RhcnQgYmVjYXVzZSBvZiBhIHBhcmFtZXRlciBjaGFuZ2UiLAotCQkJ CQkJTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJCWlmIChhbV9wYXJhbGxlbF9hcHBseV93b3Jr ZXIoKSkKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9u IHBhcmFsbGVsIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiB3aWxsIHN0b3Ag YmVjYXVzZSBvZiBhIHBhcmFtZXRlciBjaGFuZ2UiLAorCQkJCQkJCU15U3Vic2NyaXB0aW9uLT5u YW1lKSkpOworCQllbHNlCisJCQllcmVwb3J0KExPRywKKwkJCS8qIHRyYW5zbGF0b3I6IGZpcnN0 ICVzIGlzIHRoZSBuYW1lIG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJCShl cnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCBiZWNhdXNlIG9m IGEgcGFyYW1ldGVyIGNoYW5nZSIsCisJCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2Ny aXB0aW9uLT5uYW1lKSkpOwogCi0JCXByb2NfZXhpdCgwKTsKKwkJYXBwbHlfd29ya2VyX2V4aXQo KTsKIAl9CiAKIAkvKiBDaGVjayBmb3Igb3RoZXIgY2hhbmdlcyB0aGF0IHNob3VsZCBuZXZlciBo YXBwZW4gdG9vLiAqLwpAQCAtMzM4MSw3ICs0MTM3LDcgQEAgY2hhbmdlc19maWxlbmFtZShjaGFy ICpwYXRoLCBPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkKQogICogdG9wbGV2ZWwgdHJhbnNh Y3Rpb24uIEVhY2ggc3Vic2NyaXB0aW9uIGhhcyBhIHNlcGFyYXRlIHNldCBvZiBmaWxlcwogICog Zm9yIGFueSB0b3BsZXZlbCB0cmFuc2FjdGlvbi4KICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIHN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpCiB7CiAJY2hh cgkJcGF0aFtNQVhQR1BBVEhdOwpAQCAtMzQwNCw5ICs0MTYwLDYgQEAgc3RyZWFtX2NsZWFudXBf ZmlsZXMoT2lkIHN1YmlkLCBUcmFuc2FjdGlvbklkIHhpZCkKICAqIGJ5IHN0cmVhbV94aWQgKGds b2JhbCB2YXJpYWJsZSkuIElmIGl0J3MgdGhlIGZpcnN0IGNodW5rIG9mIHN0cmVhbWVkCiAgKiBj aGFuZ2VzIGZvciB0aGlzIHRyYW5zYWN0aW9uLCBjcmVhdGUgdGhlIGJ1ZmZpbGUsIG90aGVyd2lz ZSBvcGVuIHRoZQogICogcHJldmlvdXNseSBjcmVhdGVkIGZpbGUuCi0gKgotICogVGhpcyBjYW4g b25seSBiZSBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhICJzdHJlYW1pbmciIGJsb2NrLCBp LmUuCi0gKiBiZXR3ZWVuIHN0cmVhbV9zdGFydC9zdHJlYW1fc3RvcCBtZXNzYWdlcyBmcm9tIHRo ZSB1cHN0cmVhbS4KICAqLwogc3RhdGljIHZvaWQKIHN0cmVhbV9vcGVuX2ZpbGUoT2lkIHN1Ymlk LCBUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KQpAQCAtMzQxNCw3ICs0MTY3 LDYgQEAgc3RyZWFtX29wZW5fZmlsZShPaWQgc3ViaWQsIFRyYW5zYWN0aW9uSWQgeGlkLCBib29s IGZpcnN0X3NlZ21lbnQpCiAJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwogCU1lbW9yeUNvbnRleHQg b2xkY3h0OwogCi0JQXNzZXJ0KGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKTsKIAlBc3NlcnQoT2lk SXNWYWxpZChzdWJpZCkpOwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4aWQpKTsKIAlB c3NlcnQoc3RyZWFtX2ZkID09IE5VTEwpOwpAQCAtMzQ1MywxNSArNDIwNSwxMCBAQCBzdHJlYW1f b3Blbl9maWxlKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZmlyc3Rfc2VnbWVu dCkKIC8qCiAgKiBzdHJlYW1fY2xvc2VfZmlsZQogICoJICBDbG9zZSB0aGUgY3VycmVudGx5IG9w ZW4gZmlsZSB3aXRoIHN0cmVhbWVkIGNoYW5nZXMuCi0gKgotICogVGhpcyBjYW4gb25seSBiZSBj YWxsZWQgYXQgdGhlIGVuZCBvZiBhIHN0cmVhbWluZyBibG9jaywgaS5lLiBhdCBzdHJlYW1fc3Rv cAotICogbWVzc2FnZSBmcm9tIHRoZSB1cHN0cmVhbS4KICAqLwogc3RhdGljIHZvaWQKIHN0cmVh bV9jbG9zZV9maWxlKHZvaWQpCiB7Ci0JQXNzZXJ0KGluX3N0cmVhbWVkX3RyYW5zYWN0aW9uKTsK LQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoc3RyZWFtX3hpZCkpOwogCUFzc2VydChzdHJl YW1fZmQgIT0gTlVMTCk7CiAKIAlCdWZGaWxlQ2xvc2Uoc3RyZWFtX2ZkKTsKQEAgLTM0ODMsOCAr NDIzMCw2IEBAIHN0cmVhbV93cml0ZV9jaGFuZ2UoY2hhciBhY3Rpb24sIFN0cmluZ0luZm8gcykK IHsKIAlpbnQJCQlsZW47CiAKLQlBc3NlcnQoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOwotCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAJQXNzZXJ0KHN0cmVhbV9m ZCAhPSBOVUxMKTsKIAogCS8qIHRvdGFsIG9uLWRpc2sgc2l6ZSwgaW5jbHVkaW5nIHRoZSBhY3Rp b24gdHlwZSBjaGFyYWN0ZXIgKi8KQEAgLTM1MDIsNiArNDI0NywyNiBAQCBzdHJlYW1fd3JpdGVf Y2hhbmdlKGNoYXIgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiAJQnVmRmlsZVdyaXRlKHN0cmVhbV9m ZCwgJnMtPmRhdGFbcy0+Y3Vyc29yXSwgbGVuKTsKIH0KIAorLyoKKyAqIHN0cmVhbV9vcGVuX2Fu ZF93cml0ZV9jaGFuZ2UKKyAqCSAgU2VyaWFsaXplIGEgbWVzc2FnZSB0byBhIGZpbGUgZm9yIHRo ZSBnaXZlbiB0cmFuc2FjdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8g c3RyZWFtX3dyaXRlX2NoYW5nZSBleGNlcHQgdGhhdCBpdCB3aWxsIG9wZW4gdGhlCisgKiB0YXJn ZXQgZmlsZSBpZiBub3QgYWxyZWFkeSBiZWZvcmUgd3JpdGluZyB0aGUgbWVzc2FnZSBhbmQgY2xv c2UgdGhlIGZpbGUgYXQKKyAqIHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkCitzdHJlYW1fb3Bl bl9hbmRfd3JpdGVfY2hhbmdlKFRyYW5zYWN0aW9uSWQgeGlkLCBjaGFyIGFjdGlvbiwgU3RyaW5n SW5mbyBzKQoreworCUFzc2VydCghaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pOworCisJaWYgKCFz dHJlYW1fZmQpCisJCXN0cmVhbV9zdGFydF9pbnRlcm5hbCh4aWQsIGZhbHNlKTsKKworCXN0cmVh bV93cml0ZV9jaGFuZ2UoYWN0aW9uLCBzKTsKKwlzdHJlYW1fc3RvcF9pbnRlcm5hbCh4aWQpOwor fQorCiAvKgogICogQ2xlYW51cCB0aGUgbWVtb3J5IGZvciBzdWJ4YWN0cyBhbmQgcmVzZXQgdGhl IHJlbGF0ZWQgdmFyaWFibGVzLgogICovCkBAIC0zNjEzLDM3ICs0Mzc4LDE2IEBAIHN0YXJ0X2Fw cGx5KFhMb2dSZWNQdHIgb3JpZ2luX3N0YXJ0cG9zKQogCVBHX0VORF9UUlkoKTsKIH0KIAotLyog TG9naWNhbCBSZXBsaWNhdGlvbiBBcHBseSB3b3JrZXIgZW50cnkgcG9pbnQgKi8KKy8qCisgKiBD b21tb24gaW5pdGlhbGl6YXRpb24gZm9yIGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHBhcmFsbGVs IGFwcGx5IHdvcmtlci4KKyAqCisgKiBJbml0aWFsaXplIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9u LCBpbi1tZW1vcnkgc3Vic2NyaXB0aW9uIGFuZCBuZWNlc3NhcnkKKyAqIGNvbmZpZyBvcHRpb25z LgorICovCiB2b2lkCi1BcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCitJbml0aWFsaXpl QXBwbHlXb3JrZXIodm9pZCkKIHsKLQlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50MzIo bWFpbl9hcmcpOwogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwotCWNoYXIJCW9yaWdpbm5hbWVbTkFN RURBVEFMRU5dOwotCVhMb2dSZWNQdHIJb3JpZ2luX3N0YXJ0cG9zID0gSW52YWxpZFhMb2dSZWNQ dHI7Ci0JY2hhcgkgICAqbXlzbG90bmFtZSA9IE5VTEw7Ci0JV2FsUmN2U3RyZWFtT3B0aW9ucyBv cHRpb25zOwotCWludAkJCXNlcnZlcl92ZXJzaW9uOwotCi0JLyogQXR0YWNoIHRvIHNsb3QgKi8K LQlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2VyX3Nsb3QpOwotCi0JLyogU2V0dXAgc2ln bmFsIGhhbmRsaW5nICovCi0JcHFzaWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmln UmVsb2FkKTsKLQlwcXNpZ25hbChTSUdURVJNLCBkaWUpOwotCUJhY2tncm91bmRXb3JrZXJVbmJs b2NrU2lnbmFscygpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBjdXJyZW50bHkgbmVlZCBhbnkgUmVz b3VyY2VPd25lciBpbiBhIHdhbHJlY2VpdmVyIHByb2Nlc3MsIGJ1dAotCSAqIGlmIHdlIGRpZCwg d2UgY291bGQgY2FsbCBDcmVhdGVBdXhQcm9jZXNzUmVzb3VyY2VPd25lciBoZXJlLgotCSAqLwot Ci0JLyogSW5pdGlhbGlzZSBzdGF0cyB0byBhIHNhbmlzaCB2YWx1ZSAqLwotCU15TG9naWNhbFJl cFdvcmtlci0+bGFzdF9zZW5kX3RpbWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90 aW1lID0KLQkJTXlMb2dpY2FsUmVwV29ya2VyLT5yZXBseV90aW1lID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOwotCi0JLyogTG9hZCB0aGUgbGlicHEtc3BlY2lmaWMgZnVuY3Rpb25zICovCi0JbG9h ZF9maWxlKCJsaWJwcXdhbHJlY2VpdmVyIiwgZmFsc2UpOwogCiAJLyogUnVuIGFzIHJlcGxpY2Eg c2Vzc2lvbiByZXBsaWNhdGlvbiByb2xlLiAqLwogCVNldENvbmZpZ09wdGlvbigic2Vzc2lvbl9y ZXBsaWNhdGlvbl9yb2xlIiwgInJlcGxpY2EiLApAQCAtMzY3MSw5ICs0NDE1LDEwIEBAIEFwcGx5 V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykKIAlpZiAoIU15U3Vic2NyaXB0aW9uKQogCXsKIAkJ ZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3Jr ZXIgZm9yIHN1YnNjcmlwdGlvbiAldSB3aWxsIG5vdCAiCi0JCQkJCQkic3RhcnQgYmVjYXVzZSB0 aGUgc3Vic2NyaXB0aW9uIHdhcyByZW1vdmVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQpKSk7CisJCS8qIHRyYW5zbGF0b3I6ICVzIGlzIHRoZSBuYW1l IG9mIGxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyICovCisJCQkJKGVycm1zZygiJXMgZm9yIHN1 YnNjcmlwdGlvbiAldSB3aWxsIG5vdCBzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2Fz IHJlbW92ZWQgZHVyaW5nIHN0YXJ0dXAiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQpKSk7CisKIAkJcHJvY19leGl0KDApOwogCX0KIApAQCAtMzY4 MywxMSArNDQyOCwxMSBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJaWYgKCFN eVN1YnNjcmlwdGlvbi0+ZW5hYmxlZCkKIAl7CiAJCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2co ImxvZ2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gXCIlc1wi IHdpbGwgbm90ICIKLQkJCQkJCSJzdGFydCBiZWNhdXNlIHRoZSBzdWJzY3JpcHRpb24gd2FzIGRp c2FibGVkIGR1cmluZyBzdGFydHVwIiwKLQkJCQkJCU15U3Vic2NyaXB0aW9uLT5uYW1lKSkpOwor CQkvKiB0cmFuc2xhdG9yOiBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdvcmtlciAqLworCQkJCShlcnJtc2coIiVzIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIHdp bGwgbm90IHN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgZGlzYWJsZWQgZHVyaW5n IHN0YXJ0dXAiLAorCQkJCQkJZ2V0X3dvcmtlcl9uYW1lKCksIE15U3Vic2NyaXB0aW9uLT5uYW1l KSkpOwogCi0JCXByb2NfZXhpdCgwKTsKKwkJYXBwbHlfd29ya2VyX2V4aXQoKTsKIAl9CiAKIAkv KiBTZXR1cCBzeW5jaHJvbm91cyBjb21taXQgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3Mgd2lzaGVz ICovCkBAIC0zNzAyLDEzICs0NDQ3LDQ5IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2Fy ZykKIAlpZiAoYW1fdGFibGVzeW5jX3dvcmtlcigpKQogCQllcmVwb3J0KExPRywKIAkJCQkoZXJy bXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIHRhYmxlIHN5bmNocm9uaXphdGlvbiB3b3JrZXIgZm9y IHN1YnNjcmlwdGlvbiBcIiVzXCIsIHRhYmxlIFwiJXNcIiBoYXMgc3RhcnRlZCIsCi0JCQkJCQlN eVN1YnNjcmlwdGlvbi0+bmFtZSwgZ2V0X3JlbF9uYW1lKE15TG9naWNhbFJlcFdvcmtlci0+cmVs aWQpKSkpOworCQkJCQkJTXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCQkJCQlnZXRfcmVsX25hbWUo TXlMb2dpY2FsUmVwV29ya2VyLT5yZWxpZCkpKSk7CiAJZWxzZQogCQllcmVwb3J0KExPRywKLQkJ CQkoZXJybXNnKCJsb2dpY2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0 aW9uIFwiJXNcIiBoYXMgc3RhcnRlZCIsCi0JCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsK KwkJLyogdHJhbnNsYXRvcjogZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgbG9naWNhbCByZXBsaWNh dGlvbiB3b3JrZXIgKi8KKwkJCQkoZXJybXNnKCIlcyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiBo YXMgc3RhcnRlZCIsCisJCQkJCQlnZXRfd29ya2VyX25hbWUoKSwgTXlTdWJzY3JpcHRpb24tPm5h bWUpKSk7CiAKIAlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKK30KKworLyogTG9naWNhbCBS ZXBsaWNhdGlvbiBBcHBseSB3b3JrZXIgZW50cnkgcG9pbnQgKi8KK3ZvaWQKK0FwcGx5V29ya2Vy TWFpbihEYXR1bSBtYWluX2FyZykKK3sKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERhdHVtR2V0SW50 MzIobWFpbl9hcmcpOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOworCVhMb2dSZWNQ dHIJb3JpZ2luX3N0YXJ0cG9zID0gSW52YWxpZFhMb2dSZWNQdHI7CisJY2hhcgkgICAqbXlzbG90 bmFtZSA9IE5VTEw7CisJV2FsUmN2U3RyZWFtT3B0aW9ucyBvcHRpb25zOworCWludAkJCXNlcnZl cl92ZXJzaW9uOworCisJLyogQXR0YWNoIHRvIHNsb3QgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9h dHRhY2god29ya2VyX3Nsb3QpOworCisJLyogU2V0dXAgc2lnbmFsIGhhbmRsaW5nICovCisJcHFz aWduYWwoU0lHSFVQLCBTaWduYWxIYW5kbGVyRm9yQ29uZmlnUmVsb2FkKTsKKwlwcXNpZ25hbChT SUdURVJNLCBkaWUpOworCUJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscygpOworCisJLyoK KwkgKiBXZSBkb24ndCBjdXJyZW50bHkgbmVlZCBhbnkgUmVzb3VyY2VPd25lciBpbiBhIHdhbHJl Y2VpdmVyIHByb2Nlc3MsIGJ1dAorCSAqIGlmIHdlIGRpZCwgd2UgY291bGQgY2FsbCBDcmVhdGVB dXhQcm9jZXNzUmVzb3VyY2VPd25lciBoZXJlLgorCSAqLworCisJLyogSW5pdGlhbGlzZSBzdGF0 cyB0byBhIHNhbmlzaCB2YWx1ZSAqLworCU15TG9naWNhbFJlcFdvcmtlci0+bGFzdF9zZW5kX3Rp bWUgPSBNeUxvZ2ljYWxSZXBXb3JrZXItPmxhc3RfcmVjdl90aW1lID0KKwkJTXlMb2dpY2FsUmVw V29ya2VyLT5yZXBseV90aW1lID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCisJLyogTG9hZCB0 aGUgbGlicHEtc3BlY2lmaWMgZnVuY3Rpb25zICovCisJbG9hZF9maWxlKCJsaWJwcXdhbHJlY2Vp dmVyIiwgZmFsc2UpOworCisJSW5pdGlhbGl6ZUFwcGx5V29ya2VyKCk7CiAKIAkvKiBDb25uZWN0 IHRvIHRoZSBvcmlnaW4gYW5kIHN0YXJ0IHRoZSByZXBsaWNhdGlvbi4gKi8KIAllbG9nKERFQlVH MSwgImNvbm5lY3RpbmcgdG8gcHVibGlzaGVyIHVzaW5nIGNvbm5lY3Rpb24gc3RyaW5nIFwiJXNc IiIsCkBAIC0zNzE4LDIwICs0NDk5LDE1IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2Fy ZykKIAl7CiAJCXN0YXJ0X3RhYmxlX3N5bmMoJm9yaWdpbl9zdGFydHBvcywgJm15c2xvdG5hbWUp OwogCi0JCS8qCi0JCSAqIEFsbG9jYXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBsb25nLWxpdmVkIGNv bnRleHQgZm9yIGVycm9yIGNvbnRleHQKLQkJICogbWVzc2FnZS4KLQkJICovCiAJCVJlcGxpY2F0 aW9uT3JpZ2luTmFtZUZvckxvZ2ljYWxSZXAoTXlTdWJzY3JpcHRpb24tPm9pZCwKIAkJCQkJCQkJ CQkgICBNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkLAogCQkJCQkJCQkJCSAgIG9yaWdpbm5hbWUs CiAJCQkJCQkJCQkJICAgc2l6ZW9mKG9yaWdpbm5hbWUpKTsKLQkJYXBwbHlfZXJyb3JfY2FsbGJh Y2tfYXJnLm9yaWdpbl9uYW1lID0gTWVtb3J5Q29udGV4dFN0cmR1cChBcHBseUNvbnRleHQsCi0J CQkJCQkJCQkJCQkJCQkJICAgb3JpZ2lubmFtZSk7CisJCXNldF9hcHBseV9lcnJvcl9jb250ZXh0 X29yaWdpbihvcmlnaW5uYW1lKTsKIAl9CiAJZWxzZQogCXsKLQkJLyogVGhpcyBpcyBtYWluIGFw cGx5IHdvcmtlciAqLworCQkvKiBUaGlzIGlzIHRoZSBsZWFkZXIgYXBwbHkgd29ya2VyICovCiAJ CVJlcE9yaWdpbklkIG9yaWdpbmlkOwogCQlUaW1lTGluZUlECXN0YXJ0cG9pbnRUTEk7CiAJCWNo YXIJICAgKmVycjsKQEAgLTM3NTUsNyArNDUzMSw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBt YWluX2FyZykKIAkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1 ZSk7CiAJCWlmICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCiAJCQlvcmlnaW5pZCA9IHJlcGxvcmln aW5fY3JlYXRlKG9yaWdpbm5hbWUpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu aWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIDApOwogCQlyZXBsb3Jp Z2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCW9yaWdpbl9zdGFydHBvcyA9IHJlcGxv cmlnaW5fc2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCQlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKQEAgLTM3NzMsMTIgKzQ1NDksNyBAQCBBcHBseVdvcmtlck1haW4oRGF0dW0gbWFp bl9hcmcpCiAJCSAqLwogCQkodm9pZCkgd2FscmN2X2lkZW50aWZ5X3N5c3RlbShMb2dSZXBXb3Jr ZXJXYWxSY3ZDb25uLCAmc3RhcnRwb2ludFRMSSk7CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhl IG9yaWdpbiBuYW1lIGluIGxvbmctbGl2ZWQgY29udGV4dCBmb3IgZXJyb3IgY29udGV4dAotCQkg KiBtZXNzYWdlLgotCQkgKi8KLQkJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLm9yaWdpbl9uYW1l ID0gTWVtb3J5Q29udGV4dFN0cmR1cChBcHBseUNvbnRleHQsCi0JCQkJCQkJCQkJCQkJCQkJICAg b3JpZ2lubmFtZSk7CisJCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X29yaWdpbihvcmlnaW5uYW1l KTsKIAl9CiAKIAkvKgpAQCAtMzc5NiwxMyArNDU2NywzNiBAQCBBcHBseVdvcmtlck1haW4oRGF0 dW0gbWFpbl9hcmcpCiAKIAlzZXJ2ZXJfdmVyc2lvbiA9IHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihM b2dSZXBXb3JrZXJXYWxSY3ZDb25uKTsKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwucHJvdG9fdmVy c2lvbiA9CisJCXNlcnZlcl92ZXJzaW9uID49IDE2MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fU1RS RUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNIDoKIAkJc2VydmVyX3ZlcnNpb24gPj0gMTUwMDAwID8g TE9HSUNBTFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSA6CiAJCXNlcnZlcl92ZXJzaW9u ID49IDE0MDAwMCA/IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZFUlNJT05fTlVNIDoKIAkJTE9H SUNBTFJFUF9QUk9UT19WRVJTSU9OX05VTTsKIAogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wdWJs aWNhdGlvbl9uYW1lcyA9IE15U3Vic2NyaXB0aW9uLT5wdWJsaWNhdGlvbnM7CiAJb3B0aW9ucy5w cm90by5sb2dpY2FsLmJpbmFyeSA9IE15U3Vic2NyaXB0aW9uLT5iaW5hcnk7Ci0Jb3B0aW9ucy5w cm90by5sb2dpY2FsLnN0cmVhbWluZyA9IE15U3Vic2NyaXB0aW9uLT5zdHJlYW07CisKKwkvKgor CSAqIEFzc2lnbiB0aGUgYXBwcm9wcmlhdGUgb3B0aW9uIHZhbHVlIGZvciBzdHJlYW1pbmcgb3B0 aW9uIGFjY29yZGluZyB0bworCSAqIHRoZSAnc3RyZWFtaW5nJyBtb2RlIGFuZCB0aGUgcHVibGlz aGVyJ3MgYWJpbGl0eSB0byBzdXBwb3J0IHRoYXQgbW9kZS4KKwkgKi8KKwlpZiAoc2VydmVyX3Zl cnNpb24gPj0gMTYwMDAwICYmCisJCU15U3Vic2NyaXB0aW9uLT5zdHJlYW0gPT0gTE9HSUNBTFJF UF9TVFJFQU1fUEFSQUxMRUwpCisJeworCQlvcHRpb25zLnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5n X3N0ciA9ICJwYXJhbGxlbCI7CisJCU15TG9naWNhbFJlcFdvcmtlci0+cGFyYWxsZWxfYXBwbHkg PSB0cnVlOworCX0KKwllbHNlIGlmIChzZXJ2ZXJfdmVyc2lvbiA+PSAxNDAwMDAgJiYKKwkJCSBN eVN1YnNjcmlwdGlvbi0+c3RyZWFtICE9IExPR0lDQUxSRVBfU1RSRUFNX09GRikKKwl7CisJCW9w dGlvbnMucHJvdG8ubG9naWNhbC5zdHJlYW1pbmdfc3RyID0gIm9uIjsKKwkJTXlMb2dpY2FsUmVw V29ya2VyLT5wYXJhbGxlbF9hcHBseSA9IGZhbHNlOworCX0KKwllbHNlCisJeworCQlvcHRpb25z LnByb3RvLmxvZ2ljYWwuc3RyZWFtaW5nX3N0ciA9IE5VTEw7CisJCU15TG9naWNhbFJlcFdvcmtl ci0+cGFyYWxsZWxfYXBwbHkgPSBmYWxzZTsKKwl9CisKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwu dHdvcGhhc2UgPSBmYWxzZTsKIAlvcHRpb25zLnByb3RvLmxvZ2ljYWwub3JpZ2luID0gcHN0cmR1 cChNeVN1YnNjcmlwdGlvbi0+b3JpZ2luKTsKIApAQCAtMzg5OSw2ICs0NjkzLDE1IEBAIElzTG9n aWNhbFdvcmtlcih2b2lkKQogCXJldHVybiBNeUxvZ2ljYWxSZXBXb3JrZXIgIT0gTlVMTDsKIH0K IAorLyoKKyAqIElzIGN1cnJlbnQgcHJvY2VzcyBhIGxvZ2ljYWwgcmVwbGljYXRpb24gcGFyYWxs ZWwgYXBwbHkgd29ya2VyPworICovCitib29sCitJc0xvZ2ljYWxQYXJhbGxlbEFwcGx5V29ya2Vy KHZvaWQpCit7CisJcmV0dXJuIElzTG9naWNhbFdvcmtlcigpICYmIGFtX3BhcmFsbGVsX2FwcGx5 X3dvcmtlcigpOworfQorCiAvKgogICogU3RhcnQgc2tpcHBpbmcgY2hhbmdlcyBvZiB0aGUgdHJh bnNhY3Rpb24gaWYgdGhlIGdpdmVuIExTTiBtYXRjaGVzIHRoZQogICogTFNOIHNwZWNpZmllZCBi eSBzdWJzY3JpcHRpb24ncyBza2lwbHNuLgpAQCAtMzk2MSw3ICs0NzY0LDcgQEAgY2xlYXJfc3Vi c2NyaXB0aW9uX3NraXBfbHNuKFhMb2dSZWNQdHIgZmluaXNoX2xzbikKIAlYTG9nUmVjUHRyCW15 c2tpcGxzbiA9IE15U3Vic2NyaXB0aW9uLT5za2lwbHNuOwogCWJvb2wJCXN0YXJ0ZWRfdHggPSBm YWxzZTsKIAotCWlmIChsaWtlbHkoWExvZ1JlY1B0cklzSW52YWxpZChteXNraXBsc24pKSkKKwlp ZiAobGlrZWx5KFhMb2dSZWNQdHJJc0ludmFsaWQobXlza2lwbHNuKSkgfHwgYW1fcGFyYWxsZWxf YXBwbHlfd29ya2VyKCkpCiAJCXJldHVybjsKIAogCWlmICghSXNUcmFuc2FjdGlvblN0YXRlKCkp CkBAIC00MDMzLDcgKzQ4MzYsNyBAQCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExvZ1Jl Y1B0ciBmaW5pc2hfbHNuKQogfQogCiAvKiBFcnJvciBjYWxsYmFjayB0byBnaXZlIG1vcmUgY29u dGV4dCBpbmZvIGFib3V0IHRoZSBjaGFuZ2UgYmVpbmcgYXBwbGllZCAqLwotc3RhdGljIHZvaWQK K3ZvaWQKIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKIHsKIAlBcHBseUVycm9yQ2Fs bGJhY2tBcmcgKmVycmFyZyA9ICZhcHBseV9lcnJvcl9jYWxsYmFja19hcmc7CkBAIC00MDYxLDIz ICs0ODY0LDQ3IEBAIGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKIAkJCQkJICAgZXJy YXJnLT5yZW1vdGVfeGlkLAogCQkJCQkgICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hf bHNuKSk7CiAJfQotCWVsc2UgaWYgKGVycmFyZy0+cmVtb3RlX2F0dG51bSA8IDApCi0JCWVycmNv bnRleHQoInByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9uIG9yaWdpbiBcIiVz XCIgZHVyaW5nIG1lc3NhZ2UgdHlwZSBcIiVzXCIgZm9yIHJlcGxpY2F0aW9uIHRhcmdldCByZWxh dGlvbiBcIiVzLiVzXCIgaW4gdHJhbnNhY3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKLQkJ CQkgICBlcnJhcmctPm9yaWdpbl9uYW1lLAotCQkJCSAgIGxvZ2ljYWxyZXBfbWVzc2FnZV90eXBl KGVycmFyZy0+Y29tbWFuZCksCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1l LAotCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKLQkJCQkgICBlcnJhcmct PnJlbW90ZV94aWQsCi0JCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikp OwogCWVsc2UKLQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0YSBmb3IgcmVwbGlj YXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNcIiBmb3IgcmVwbGlj YXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBjb2x1bW4gXCIlc1wiIGluIHRyYW5zYWN0 aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCi0JCQkJICAgZXJyYXJnLT5vcmlnaW5fbmFtZSwK LQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAotCQkJCSAg IGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFtZSwKLQkJCQkgICBlcnJhcmctPnJlbC0+cmVt b3RlcmVsLnJlbG5hbWUsCi0JCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5hdHRuYW1lc1tl cnJhcmctPnJlbW90ZV9hdHRudW1dLAotCQkJCSAgIGVycmFyZy0+cmVtb3RlX3hpZCwKLQkJCQkg ICBMU05fRk9STUFUX0FSR1MoZXJyYXJnLT5maW5pc2hfbHNuKSk7CisJeworCQlpZiAoZXJyYXJn LT5yZW1vdGVfYXR0bnVtIDwgMCkKKwkJeworCQkJaWYgKFhMb2dSZWNQdHJJc0ludmFsaWQoZXJy YXJnLT5maW5pc2hfbHNuKSkKKwkJCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRh IGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wi IGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGluIHRyYW5zYWN0aW9u ICV1IiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCisJCQkJCQkgICBsb2dpY2FscmVw X21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJl bW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1l LAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkKTsKKwkJCWVsc2UKKwkJCQllcnJjb250ZXh0 KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBsaWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1 cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBsaWNhdGlvbiB0YXJnZXQgcmVsYXRpb24g XCIlcy4lc1wiIGluIHRyYW5zYWN0aW9uICV1LCBmaW5pc2hlZCBhdCAlWC8lWCIsCisJCQkJCQkg ICBlcnJhcmctPm9yaWdpbl9uYW1lLAorCQkJCQkJICAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUo ZXJyYXJnLT5jb21tYW5kKSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwubnNwbmFt ZSwKKwkJCQkJCSAgIGVycmFyZy0+cmVsLT5yZW1vdGVyZWwucmVsbmFtZSwKKwkJCQkJCSAgIGVy cmFyZy0+cmVtb3RlX3hpZCwKKwkJCQkJCSAgIExTTl9GT1JNQVRfQVJHUyhlcnJhcmctPmZpbmlz aF9sc24pKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKGVy cmFyZy0+ZmluaXNoX2xzbikpCisJCQkJZXJyY29udGV4dCgicHJvY2Vzc2luZyByZW1vdGUgZGF0 YSBmb3IgcmVwbGljYXRpb24gb3JpZ2luIFwiJXNcIiBkdXJpbmcgbWVzc2FnZSB0eXBlIFwiJXNc IiBmb3IgcmVwbGljYXRpb24gdGFyZ2V0IHJlbGF0aW9uIFwiJXMuJXNcIiBjb2x1bW4gXCIlc1wi IGluIHRyYW5zYWN0aW9uICV1IiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25hbWUsCisJCQkJ CQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAorCQkJCQkJICAg ZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJl bW90ZXJlbC5yZWxuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5hdHRuYW1l c1tlcnJhcmctPnJlbW90ZV9hdHRudW1dLAorCQkJCQkJICAgZXJyYXJnLT5yZW1vdGVfeGlkKTsK KwkJCWVsc2UKKwkJCQllcnJjb250ZXh0KCJwcm9jZXNzaW5nIHJlbW90ZSBkYXRhIGZvciByZXBs aWNhdGlvbiBvcmlnaW4gXCIlc1wiIGR1cmluZyBtZXNzYWdlIHR5cGUgXCIlc1wiIGZvciByZXBs aWNhdGlvbiB0YXJnZXQgcmVsYXRpb24gXCIlcy4lc1wiIGNvbHVtbiBcIiVzXCIgaW4gdHJhbnNh Y3Rpb24gJXUsIGZpbmlzaGVkIGF0ICVYLyVYIiwKKwkJCQkJCSAgIGVycmFyZy0+b3JpZ2luX25h bWUsCisJCQkJCQkgICBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShlcnJhcmctPmNvbW1hbmQpLAor CQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJlbC5uc3BuYW1lLAorCQkJCQkJICAgZXJyYXJn LT5yZWwtPnJlbW90ZXJlbC5yZWxuYW1lLAorCQkJCQkJICAgZXJyYXJnLT5yZWwtPnJlbW90ZXJl bC5hdHRuYW1lc1tlcnJhcmctPnJlbW90ZV9hdHRudW1dLAorCQkJCQkJICAgZXJyYXJnLT5yZW1v dGVfeGlkLAorCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGVycmFyZy0+ZmluaXNoX2xzbikpOwor CQl9CisJfQogfQogCiAvKiBTZXQgdHJhbnNhY3Rpb24gaW5mb3JtYXRpb24gb2YgYXBwbHkgZXJy b3IgY2FsbGJhY2sgKi8KQEAgLTQwOTcsMyArNDkyNCw1MiBAQCByZXNldF9hcHBseV9lcnJvcl9j b250ZXh0X2luZm8odm9pZCkKIAlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVtb3RlX2F0dG51 bSA9IC0xOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3QoSW52YWxpZFRyYW5zYWN0aW9u SWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIH0KKworLyoKKyAqIEFsbG9jYXRlIHRoZSBvcmlnaW4g bmFtZSBpbiBsb25nLWxpdmVkIGNvbnRleHQgZm9yIGVycm9yIGNvbnRleHQgbWVzc2FnZS4KKyAq Lwordm9pZAorc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfb3JpZ2luKGNoYXIgKm9yaWdpbm5hbWUp Cit7CisJYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLm9yaWdpbl9uYW1lID0gTWVtb3J5Q29udGV4 dFN0cmR1cChBcHBseUNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgICBvcmlnaW5uYW1lKTsKK30K KworLyoKKyAqIFJldHVybiB0aGUgYWN0aW9uIHRvIGJlIHRha2VuIGZvciB0aGUgZ2l2ZW4gdHJh bnNhY3Rpb24uICp3aW5mbyBpcworICogYXNzaWduZWQgdG8gdGhlIGRlc3RpbmF0aW9uIHBhcmFs bGVsIHdvcmtlciBpbmZvIHdoZW4gdGhlIGdpdmVuCisgKiB0cmFuc2FjdGlvbiBpcyBiZWluZyBw cm9jZXNzZWQgdXNpbmcgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIuCisgKi8KK3N0YXRpYyBUcmFu c0FwcGx5QWN0aW9uCitnZXRfdHJhbnNhY3Rpb25fYXBwbHlfYWN0aW9uKFRyYW5zYWN0aW9uSWQg eGlkLCBQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqKndpbmZvKQoreworCSp3aW5mbyA9IE5VTEw7 CisKKwlpZiAoYW1fcGFyYWxsZWxfYXBwbHlfd29ya2VyKCkpCisJeworCQlyZXR1cm4gVFJBTlNf UEFSQUxMRUxfQVBQTFk7CisJfQorCWVsc2UgaWYgKGluX3JlbW90ZV90cmFuc2FjdGlvbikKKwl7 CisJCXJldHVybiBUUkFOU19MRUFERVJfQVBQTFk7CisJfQorCisJLyoKKwkgKiBDaGVjayBpZiB3 ZSBhcmUgcHJvY2Vzc2luZyB0aGlzIHRyYW5zYWN0aW9uIHVzaW5nIGEgcGFyYWxsZWwgYXBwbHkK KwkgKiB3b3JrZXIuCisJICovCisJKndpbmZvID0gcGFfZmluZF93b3JrZXIoeGlkKTsKKworCWlm ICghKndpbmZvKQorCXsKKwkJcmV0dXJuIFRSQU5TX0xFQURFUl9TRVJJQUxJWkU7CisJfQorCWVs c2UgaWYgKCgqd2luZm8pLT5zZXJpYWxpemVfY2hhbmdlcykKKwl7CisJCXJldHVybiBUUkFOU19M RUFERVJfUEFSVElBTF9TRVJJQUxJWkU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBUUkFOU19M RUFERVJfU0VORF9UT19QQVJBTExFTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCBjYTQ2ZmJhM2FmLi40MGM0NGJiN2U5IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE4LDYgKzE4LDcg QEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oIgogI2luY2x1ZGUgImV4ZWN1dG9y L2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5j cy5oIgpAQCAtMjkwLDcgKzI5MSw3IEBAIHBhcnNlX291dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9w dGlvbnMsIFBHT3V0cHV0RGF0YSAqZGF0YSkKIAlib29sCQlvcmlnaW5fb3B0aW9uX2dpdmVuID0g ZmFsc2U7CiAKIAlkYXRhLT5iaW5hcnkgPSBmYWxzZTsKLQlkYXRhLT5zdHJlYW1pbmcgPSBmYWxz ZTsKKwlkYXRhLT5zdHJlYW1pbmcgPSBMT0dJQ0FMUkVQX1NUUkVBTV9PRkY7CiAJZGF0YS0+bWVz c2FnZXMgPSBmYWxzZTsKIAlkYXRhLT50d29fcGhhc2UgPSBmYWxzZTsKIApAQCAtMzY5LDcgKzM3 MCw3IEBAIHBhcnNlX291dHB1dF9wYXJhbWV0ZXJzKExpc3QgKm9wdGlvbnMsIFBHT3V0cHV0RGF0 YSAqZGF0YSkKIAkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRpb25z IikpKTsKIAkJCXN0cmVhbWluZ19naXZlbiA9IHRydWU7CiAKLQkJCWRhdGEtPnN0cmVhbWluZyA9 IGRlZkdldEJvb2xlYW4oZGVmZWwpOworCQkJZGF0YS0+c3RyZWFtaW5nID0gZGVmR2V0U3RyZWFt aW5nTW9kZShkZWZlbCk7CiAJCX0KIAkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAi dHdvX3BoYXNlIikgPT0gMCkKIAkJewpAQCAtNDYxLDEzICs0NjIsMjAgQEAgcGdvdXRwdXRfc3Rh cnR1cChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIE91dHB1dFBsdWdpbk9wdGlvbnMgKm9w dCwKIAkJICogd2Ugb25seSBhbGxvdyBpdCB3aXRoIHN1ZmZpY2llbnQgdmVyc2lvbiBvZiB0aGUg cHJvdG9jb2wsIGFuZCB3aGVuCiAJCSAqIHRoZSBvdXRwdXQgcGx1Z2luIHN1cHBvcnRzIGl0Lgog CQkgKi8KLQkJaWYgKCFkYXRhLT5zdHJlYW1pbmcpCisJCWlmIChkYXRhLT5zdHJlYW1pbmcgPT0g TE9HSUNBTFJFUF9TVFJFQU1fT0ZGKQogCQkJY3R4LT5zdHJlYW1pbmcgPSBmYWxzZTsKLQkJZWxz ZSBpZiAoZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1ZF UlNJT05fTlVNKQorCQllbHNlIGlmIChkYXRhLT5zdHJlYW1pbmcgPT0gTE9HSUNBTFJFUF9TVFJF QU1fT04gJiYKKwkJCQkgZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiA8IExPR0lDQUxSRVBfUFJPVE9f U1RSRUFNX1ZFUlNJT05fTlVNKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCSBlcnJtc2coInJlcXVlc3RlZCBw cm90b192ZXJzaW9uPSVkIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nLCBuZWVkICVkIG9yIGhp Z2hlciIsCiAJCQkJCQkJZGF0YS0+cHJvdG9jb2xfdmVyc2lvbiwgTE9HSUNBTFJFUF9QUk9UT19T VFJFQU1fVkVSU0lPTl9OVU0pKSk7CisJCWVsc2UgaWYgKGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJ Q0FMUkVQX1NUUkVBTV9QQVJBTExFTCAmJgorCQkJCSBkYXRhLT5wcm90b2NvbF92ZXJzaW9uIDwg TE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fUEFSQUxMRUxfVkVSU0lPTl9OVU0pCisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJIGVycm1zZygicmVxdWVzdGVkIHByb3RvX3ZlcnNpb249JWQgZG9lcyBub3Qgc3VwcG9y dCBwYXJhbGxlbCBzdHJlYW1pbmcsIG5lZWQgJWQgb3IgaGlnaGVyIiwKKwkJCQkJCQlkYXRhLT5w cm90b2NvbF92ZXJzaW9uLCBMT0dJQ0FMUkVQX1BST1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9O X05VTSkpKTsKIAkJZWxzZSBpZiAoIWN0eC0+c3RyZWFtaW5nKQogCQkJZXJlcG9ydChFUlJPUiwK IAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCkBAIC0xODQx LDYgKzE4NDksOCBAQCBwZ291dHB1dF9zdHJlYW1fYWJvcnQoc3RydWN0IExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwKIAkJCQkJICBYTG9nUmVjUHRyIGFib3J0X2xzbikKIHsKIAlSZW9yZGVy QnVmZmVyVFhOICp0b3B0eG47CisJUEdPdXRwdXREYXRhICpkYXRhID0gKFBHT3V0cHV0RGF0YSAq KSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlib29sCQl3cml0ZV9hYm9ydF9pbmZvID0g KGRhdGEtPnN0cmVhbWluZyA9PSBMT0dJQ0FMUkVQX1NUUkVBTV9QQVJBTExFTCk7CiAKIAkvKgog CSAqIFRoZSBhYm9ydCBzaG91bGQgaGFwcGVuIG91dHNpZGUgc3RyZWFtaW5nIGJsb2NrLCBldmVu IGZvciBzdHJlYW1lZApAQCAtMTg1NCw3ICsxODY0LDkgQEAgcGdvdXRwdXRfc3RyZWFtX2Fib3J0 KHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJQXNzZXJ0KHJidHhuX2lzX3N0 cmVhbWVkKHRvcHR4bikpOwogCiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7 Ci0JbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4bi0+eGlkLCB0 eG4tPnhpZCk7CisJbG9naWNhbHJlcF93cml0ZV9zdHJlYW1fYWJvcnQoY3R4LT5vdXQsIHRvcHR4 bi0+eGlkLCB0eG4tPnhpZCwgYWJvcnRfbHNuLAorCQkJCQkJCQkgIHR4bi0+eGFjdF90aW1lLmFi b3J0X3RpbWUsIHdyaXRlX2Fib3J0X2luZm8pOworCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0 cnVlKTsKIAogCWNsZWFudXBfcmVsX3N5bmNfY2FjaGUodG9wdHhuLT54aWQsIGZhbHNlKTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwppbmRleCA3NzY3NjU3ZjI3Li43YzAwOWQ1MjVh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAj aW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jb25k aXRpb25fdmFyaWFibGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgpAQCAtNjU3LDYgKzY1 OCw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVj a1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1v cnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUEFS QUxMRUxfQVBQTFlfTUVTU0FHRSkpCisJCUhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlSW50ZXJy dXB0KCk7CisKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1Rf REFUQUJBU0UpKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBST0NTSUdfUkVDT1ZFUllf Q09ORkxJQ1RfREFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvbG1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xtZ3IuYwppbmRleCAxMDQzMDY4 YmFjLi4yZjE3MWY1NTI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG1n ci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sbWdyLmMKQEAgLTExMTcsNiArMTEx Nyw0NSBAQCBVbmxvY2tTaGFyZWRPYmplY3RGb3JTZXNzaW9uKE9pZCBjbGFzc2lkLCBPaWQgb2Jq aWQsIHVpbnQxNiBvYmpzdWJpZCwKIAlMb2NrUmVsZWFzZSgmdGFnLCBsb2NrbW9kZSwgdHJ1ZSk7 CiB9CiAKKy8qCisgKgkJTG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uCisgKgorICogT2J0 YWluIGEgc2Vzc2lvbi1sZXZlbCBsb2NrIG9uIGEgdHJhbnNhY3Rpb24gYmVpbmcgYXBwbGllZCBv biBhIGxvZ2ljYWwKKyAqIHJlcGxpY2F0aW9uIHN1YnNjcmliZXIuIFNlZSBMb2NrUmVsYXRpb25J ZEZvclNlc3Npb24gZm9yIG5vdGVzIGFib3V0CisgKiBzZXNzaW9uLWxldmVsIGxvY2tzLgorICov Cit2b2lkCitMb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lkIHN1Ym9pZCwgVHJhbnNh Y3Rpb25JZCB4aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkgICBMT0NLTU9ERSBsb2NrbW9kZSkK K3sKKwlMT0NLVEFHCQl0YWc7CisKKwlTRVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTih0YWcs CisJCQkJCQkJCSAgTXlEYXRhYmFzZUlkLAorCQkJCQkJCQkgIHN1Ym9pZCwKKwkJCQkJCQkJICB4 aWQsCisJCQkJCQkJCSAgb2JqaWQpOworCisJKHZvaWQpIExvY2tBY3F1aXJlKCZ0YWcsIGxvY2tt b2RlLCB0cnVlLCBmYWxzZSk7Cit9CisKKy8qCisgKgkJVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZv clNlc3Npb24KKyAqLwordm9pZAorVW5sb2NrQXBwbHlUcmFuc2FjdGlvbkZvclNlc3Npb24oT2lk IHN1Ym9pZCwgVHJhbnNhY3Rpb25JZCB4aWQsIHVpbnQxNiBvYmppZCwKKwkJCQkJCQkJIExPQ0tN T0RFIGxvY2ttb2RlKQoreworCUxPQ0tUQUcJCXRhZzsKKworCVNFVF9MT0NLVEFHX0FQUExZX1RS QU5TQUNUSU9OKHRhZywKKwkJCQkJCQkJICBNeURhdGFiYXNlSWQsCisJCQkJCQkJCSAgc3Vib2lk LAorCQkJCQkJCQkgIHhpZCwKKwkJCQkJCQkJICBvYmppZCk7CisKKwlMb2NrUmVsZWFzZSgmdGFn LCBsb2NrbW9kZSwgdHJ1ZSk7Cit9CiAKIC8qCiAgKiBBcHBlbmQgYSBkZXNjcmlwdGlvbiBvZiBh IGxvY2thYmxlIG9iamVjdCB0byBidWYuCkBAIC0xMjAyLDYgKzEyNDEsMTMgQEAgRGVzY3JpYmVM b2NrVGFnKFN0cmluZ0luZm8gYnVmLCBjb25zdCBMT0NLVEFHICp0YWcpCiAJCQkJCQkJIHRhZy0+ bG9ja3RhZ19maWVsZDMsCiAJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDQpOwogCQkJYnJlYWs7 CisJCWNhc2UgTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTjoKKwkJCWFwcGVuZFN0cmluZ0luZm8o YnVmLAorCQkJCQkJCSBfKCJyZW1vdGUgdHJhbnNhY3Rpb24gJXUgb2Ygc3Vic2NyaXB0aW9uICV1 IG9mIGRhdGFiYXNlICV1IiksCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDMsCisJCQkJCQkJ IHRhZy0+bG9ja3RhZ19maWVsZDIsCisJCQkJCQkJIHRhZy0+bG9ja3RhZ19maWVsZDEpOworCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwKIAkJCQkJCQkgXygi dW5yZWNvZ25pemVkIGxvY2t0YWcgdHlwZSAlZCIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDAxZDI2 NGI1YWIuLmQ1Mjk1YzQ1ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTMzOTEsNiArMzM5MSw5IEBA IFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcp CiAJCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUGFyYWxsZWxB cHBseU1lc3NhZ2VQZW5kaW5nKQorCQlIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCBiMmFiZDc1 ZGRiLi4xZmFiNDVlNzQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5j CkBAIC0yMzAsNiArMjMwLDkgQEAgcGdzdGF0X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFj dGl2aXR5IHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQll dmVudF9uYW1lID0gIkxvZ2ljYWxMYXVuY2hlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJ VF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX01BSU46CisJCQlldmVudF9uYW1lID0gIkxv Z2ljYWxQYXJhbGxlbEFwcGx5TWFpbiI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX1JF Q09WRVJZX1dBTF9TVFJFQU06CiAJCQlldmVudF9uYW1lID0gIlJlY292ZXJ5V2FsU3RyZWFtIjsK IAkJCWJyZWFrOwpAQCAtMzg4LDYgKzM5MSw5IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2 ZW50SVBDIHcpCiAJCWNhc2UgV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19SRUlOU0VSVDoK IAkJCWV2ZW50X25hbWUgPSAiSGFzaEdyb3dCdWNrZXRzUmVpbnNlcnQiOwogCQkJYnJlYWs7CisJ CWNhc2UgV0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRToKKwkJ CWV2ZW50X25hbWUgPSAiTG9naWNhbFBhcmFsbGVsQXBwbHlTdGF0ZUNoYW5nZSI7CisJCQlicmVh azsKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBOgogCQkJZXZlbnRfbmFtZSA9 ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvbG9ja2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbG9ja2Z1bmNzLmMK aW5kZXggZjliMzI0ZWZlYy4uM2JmMDQ4MzFmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2xvY2tmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9sb2NrZnVuY3Mu YwpAQCAtMzcsMTAgKzM3LDExIEBAIGNvbnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFtZXNb XSA9IHsKIAkic3BlY3Rva2VuIiwKIAkib2JqZWN0IiwKIAkidXNlcmxvY2siLAotCSJhZHZpc29y eSIKKwkiYWR2aXNvcnkiLAorCSJhcHBseXRyYW5zYWN0aW9uIgogfTsKIAotU3RhdGljQXNzZXJ0 RGVjbChsZW5ndGhvZihMb2NrVGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RBR19BRFZJU09SWSArIDEp LAorU3RhdGljQXNzZXJ0RGVjbChsZW5ndGhvZihMb2NrVGFnVHlwZU5hbWVzKSA9PSAoTE9DS1RB R19MQVNUX1RZUEUgKyAxKSwKIAkJCQkgImFycmF5IGxlbmd0aCBtaXNtYXRjaCIpOwogCiAvKiBU aGlzIG11c3QgbWF0Y2ggZW51bSBQcmVkaWNhdGVMb2NrVGFyZ2V0VHlwZSAocHJlZGljYXRlX2lu dGVybmFscy5oKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFi bGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBhMzdjOWY5 ODQ0Li42MmI3ZjU3ZTYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtMzAw Miw2ICszMDAyLDE4IEBAIHN0cnVjdCBjb25maWdfaW50IENvbmZpZ3VyZU5hbWVzSW50W10gPQog CQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJtYXhfcGFyYWxsZWxfYXBwbHlfd29y a2Vyc19wZXJfc3Vic2NyaXB0aW9uIiwKKwkJCVBHQ19TSUdIVVAsCisJCQlSRVBMSUNBVElPTl9T VUJTQ1JJQkVSUywKKwkJCWdldHRleHRfbm9vcCgiTWF4aW11bSBudW1iZXIgb2YgcGFyYWxsZWwg YXBwbHkgd29ya2VycyBwZXIgc3Vic2NyaXB0aW9uLiIpLAorCQkJTlVMTCwKKwkJfSwKKwkJJm1h eF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24sCisJCTIsIDAsIE1BWF9Q QVJBTExFTF9XT1JLRVJfTElNSVQsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7 ImxvZ19yb3RhdGlvbl9hZ2UiLCBQR0NfU0lHSFVQLCBMT0dHSU5HX1dIRVJFLAogCQkJZ2V0dGV4 dF9ub29wKCJTZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaW5nICIK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCA1 YWZkZWIwNGRlLi5jMmFkYTkyMDU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC0zNTksNiArMzU5LDcgQEAKICNtYXhfbG9naWNhbF9yZXBs aWNhdGlvbl93b3JrZXJzID0gNAkjIHRha2VuIGZyb20gbWF4X3dvcmtlcl9wcm9jZXNzZXMKIAkJ CQkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAjbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vi c2NyaXB0aW9uID0gMgkjIHRha2VuIGZyb20gbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vy cworI21heF9wYXJhbGxlbF9hcHBseV93b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24gPSAyCSMgdGFr ZW4gZnJvbSBtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzCiAKIAogIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNDRkOTU3YzAzOC4uZjQ1NGIzMWM1OCAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCkBAIC00NTMzLDcgKzQ1MzMsNyBAQCBnZXRTdWJzY3JpcHRpb25zKEFyY2hpdmUgKmZv dXQpCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTQwMDAwKQogCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwgIiBzLnN1YnN0cmVhbSxcbiIpOwogCWVsc2UKLQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksICIgZmFsc2UgQVMgc3Vic3RyZWFtLFxuIik7CisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiICdmJyBBUyBzdWJzdHJlYW0sXG4iKTsKIAogCWlmIChmb3V0LT5y ZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCkBA IC00NjcwLDggKzQ2NzAsMTAgQEAgZHVtcFN1YnNjcmlwdGlvbihBcmNoaXZlICpmb3V0LCBjb25z dCBTdWJzY3JpcHRpb25JbmZvICpzdWJpbmZvKQogCWlmIChzdHJjbXAoc3ViaW5mby0+c3ViYmlu YXJ5LCAidCIpID09IDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBiaW5hcnkg PSB0cnVlIik7CiAKLQlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwgImYiKSAhPSAwKQor CWlmIChzdHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAidCIpID09IDApCiAJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiLCBzdHJlYW1pbmcgPSBvbiIpOworCWVsc2UgaWYgKHN0cmNtcChz dWJpbmZvLT5zdWJzdHJlYW0sICJwIikgPT0gMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksICIsIHN0cmVhbWluZyA9IHBhcmFsbGVsIik7CiAKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1 YnR3b3BoYXNlc3RhdGUsIHR3b19waGFzZV9kaXNhYmxlZCkgIT0gMCkKIAkJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksICIsIHR3b19waGFzZSA9IG9uIik7CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGRmMTY2MzY1 ZTguLjI2NWIyOGQ5MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBi L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02NTAyLDExICs2NTAyLDI0IEBAIGRlc2NyaWJl U3Vic2NyaXB0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZlcmJvc2UpCiAJewogCQkv KiBCaW5hcnkgbW9kZSBhbmQgc3RyZWFtaW5nIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiB2MTQgYW5k IGhpZ2hlciAqLwogCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNDAwMDApCisJCXsKIAkJCWFwcGVu ZFBRRXhwQnVmZmVyKCZidWYsCi0JCQkJCQkJICAiLCBzdWJiaW5hcnkgQVMgXCIlc1wiXG4iCi0J CQkJCQkJICAiLCBzdWJzdHJlYW0gQVMgXCIlc1wiXG4iLAotCQkJCQkJCSAgZ2V0dGV4dF9ub29w KCJCaW5hcnkiKSwKLQkJCQkJCQkgIGdldHRleHRfbm9vcCgiU3RyZWFtaW5nIikpOworCQkJCQkJ CSAgIiwgc3ViYmluYXJ5IEFTIFwiJXNcIlxuIiwKKwkJCQkJCQkgIGdldHRleHRfbm9vcCgiQmlu YXJ5IikpOworCisJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApCisJCQkJYXBwZW5kUFFF eHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCQkJICAiLCAoQ0FTRSBzdWJzdHJlYW1cbiIKKwkJCQkJCQkJ ICAiICAgIFdIRU4gJ2YnIFRIRU4gJ29mZidcbiIKKwkJCQkJCQkJICAiICAgIFdIRU4gJ3QnIFRI RU4gJ29uJ1xuIgorCQkJCQkJCQkgICIgICAgV0hFTiAncCcgVEhFTiAncGFyYWxsZWwnXG4iCisJ CQkJCQkJCSAgIiAgIEVORCkgQVMgXCIlc1wiXG4iLAorCQkJCQkJCQkgIGdldHRleHRfbm9vcCgi U3RyZWFtaW5nIikpOworCQkJZWxzZQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJ CQkJCSAgIiwgc3Vic3RyZWFtIEFTIFwiJXNcIlxuIiwKKwkJCQkJCQkJICBnZXR0ZXh0X25vb3Ao IlN0cmVhbWluZyIpKTsKKwkJfQogCiAJCS8qIFR3b19waGFzZSBhbmQgZGlzYWJsZV9vbl9lcnJv ciBhcmUgb25seSBzdXBwb3J0ZWQgaW4gdjE1IGFuZCBoaWdoZXIgKi8KIAkJaWYgKHBzZXQuc3Zl cnNpb24gPj0gMTUwMDAwKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJz Y3JpcHRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKaW5kZXgg N2I5ODcxNGYzMC4uNWI5ZTVhMzk5YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19zdWJzY3JpcHRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlv bi5oCkBAIC04MCw3ICs4MCw4IEBAIENBVEFMT0cocGdfc3Vic2NyaXB0aW9uLDYxMDAsU3Vic2Ny aXB0aW9uUmVsYXRpb25JZCkgQktJX1NIQVJFRF9SRUxBVElPTiBCS0lfUk9XCiAJYm9vbAkJc3Vi YmluYXJ5OwkJLyogVHJ1ZSBpZiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIHRoZQogCQkJCQkJCQkg KiBwdWJsaXNoZXIgdG8gc2VuZCBkYXRhIGluIGJpbmFyeSAqLwogCi0JYm9vbAkJc3Vic3RyZWFt OwkJLyogU3RyZWFtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdWJzdHJl YW07CQkvKiBTdHJlYW0gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLiBTZWUKKwkJCQkJCQkJICog U1VCU1RSRUFNX3h4eCBjb25zdGFudHMuICovCiAKIAljaGFyCQlzdWJ0d29waGFzZXN0YXRlOwkv KiBTdHJlYW0gdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyAqLwogCkBAIC0xMjQsNyArMTI1LDggQEAg dHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJYm9vbAkJZW5hYmxlZDsJCS8qIEluZGljYXRl cyBpZiB0aGUgc3Vic2NyaXB0aW9uIGlzIGVuYWJsZWQgKi8KIAlib29sCQliaW5hcnk7CQkJLyog SW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gd2FudHMgZGF0YSBpbgogCQkJCQkJCQkgKiBi aW5hcnkgZm9ybWF0ICovCi0JYm9vbAkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVhbWluZyBpbi1w cm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3RyZWFtOwkJCS8qIEFsbG93IHN0cmVh bWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuCisJCQkJCQkJCSAqIFNlZSBTVUJTVFJFQU1f eHh4IGNvbnN0YW50cy4gKi8KIAljaGFyCQl0d29waGFzZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1p bmcgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyAqLwogCWJvb2wJCWRpc2FibGVvbmVycjsJLyogSW5k aWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gc2hvdWxkIGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRp Y2FsbHkgZGlzYWJsZWQgaWYgYSB3b3JrZXIgZXJyb3IKQEAgLTEzNyw2ICsxMzksMjEgQEAgdHlw ZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJCQkJCQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8K IH0gU3Vic2NyaXB0aW9uOwogCisvKiBEaXNhbGxvdyBzdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJh bnNhY3Rpb25zLiAqLworI2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVBTV9PRkYgJ2YnCisKKy8qCisg KiBTdHJlYW1pbmcgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFyZSB3cml0dGVuIHRvIGEgdGVt cG9yYXJ5IGZpbGUgYW5kCisgKiBhcHBsaWVkIG9ubHkgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlz IGNvbW1pdHRlZCBvbiB1cHN0cmVhbS4KKyAqLworI2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVBTV9P TiAndCcKKworLyoKKyAqIFN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMgYXJlIGFw cGxpZWQgaW1tZWRpYXRlbHkgdmlhIGEgcGFyYWxsZWwKKyAqIGFwcGx5IHdvcmtlci4KKyAqLwor I2RlZmluZSBMT0dJQ0FMUkVQX1NUUkVBTV9QQVJBTExFTCAncCcKKwogZXh0ZXJuIFN1YnNjcmlw dGlvbiAqR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVy biB2b2lkIEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZvaWQg RGlzYWJsZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5oCmluZGV4IDJjYmU3ZDdiNjUuLjc3OTQ3NGY1NjUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgKQEAgLTI2LDQgKzI2LDYgQEAgZXh0ZXJuIHZvaWQg RHJvcFN1YnNjcmlwdGlvbihEcm9wU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExl dmVsKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU3Vic2NyaXB0aW9uT3duZXIoY29uc3Qg Y2hhciAqbmFtZSwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJTdWJzY3JpcHRp b25Pd25lcl9vaWQoT2lkIHN1YmlkLCBPaWQgbmV3T3duZXJJZCk7CiAKK2V4dGVybiBjaGFyIGRl ZkdldFN0cmVhbWluZ01vZGUoRGVmRWxlbSAqZGVmKTsKKwogI2VuZGlmCQkJCQkJCS8qIFNVQlND UklQVElPTkNNRFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbGxhdW5jaGVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIu aAppbmRleCBmMWUyODIxZTI1Li5kNTEzZWY1MzNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FsbGF1bmNoZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9sb2dpY2FsbGF1bmNoZXIuaApAQCAtMTQsNiArMTQsNyBAQAogCiBleHRlcm4gUEdETExJTVBP UlQgaW50IG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnM7CiBleHRlcm4gUEdETExJTVBP UlQgaW50IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKK2V4dGVybiBQR0RMTElN UE9SVCBpbnQgbWF4X3BhcmFsbGVsX2FwcGx5X3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbjsKIAog ZXh0ZXJuIHZvaWQgQXBwbHlMYXVuY2hlclJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXBw bHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dp Y2FscHJvdG8uaAppbmRleCAxZWI3ZGRhNTI5Li40ZmEyYmQzN2RlIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtMzIsMTIgKzMyLDE3IEBACiAgKgogICogTE9HSUNB TFJFUF9QUk9UT19UV09QSEFTRV9WRVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2 ZXJzaW9uIHdpdGgKICAqIHN1cHBvcnQgZm9yIHR3by1waGFzZSBjb21taXQgZGVjb2RpbmcgKGF0 IHByZXBhcmUgdGltZSkuIEludHJvZHVjZWQgaW4gUEcxNS4KKyAqCisgKiBMT0dJQ0FMUkVQX1BS T1RPX1NUUkVBTV9QQVJBTExFTF9WRVJTSU9OX05VTSBpcyB0aGUgbWluaW11bSBwcm90b2NvbCB2 ZXJzaW9uCisgKiB3aGVyZSB3ZSBzdXBwb3J0IGFwcGx5aW5nIGxhcmdlIHN0cmVhbWluZyB0cmFu c2FjdGlvbnMgaW4gcGFyYWxsZWwuCisgKiBJbnRyb2R1Y2VkIGluIFBHMTYuCiAgKi8KICNkZWZp bmUgTE9HSUNBTFJFUF9QUk9UT19NSU5fVkVSU0lPTl9OVU0gMQogI2RlZmluZSBMT0dJQ0FMUkVQ X1BST1RPX1ZFUlNJT05fTlVNIDEKICNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19TVFJFQU1fVkVS U0lPTl9OVU0gMgogI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1RXT1BIQVNFX1ZFUlNJT05fTlVN IDMKLSNkZWZpbmUgTE9HSUNBTFJFUF9QUk9UT19NQVhfVkVSU0lPTl9OVU0gTE9HSUNBTFJFUF9Q Uk9UT19UV09QSEFTRV9WRVJTSU9OX05VTQorI2RlZmluZSBMT0dJQ0FMUkVQX1BST1RPX1NUUkVB TV9QQVJBTExFTF9WRVJTSU9OX05VTSA0CisjZGVmaW5lIExPR0lDQUxSRVBfUFJPVE9fTUFYX1ZF UlNJT05fTlVNIExPR0lDQUxSRVBfUFJPVE9fU1RSRUFNX1BBUkFMTEVMX1ZFUlNJT05fTlVNCiAK IC8qCiAgKiBMb2dpY2FsIG1lc3NhZ2UgdHlwZXMKQEAgLTE3NSw2ICsxODAsMTcgQEAgdHlwZWRl ZiBzdHJ1Y3QgTG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhCiAJY2hhcgkJZ2lkW0dJ RFNJWkVdOwogfSBMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGE7CiAKKy8qCisgKiBU cmFuc2FjdGlvbiBwcm90b2NvbCBpbmZvcm1hdGlvbiBmb3Igc3RyZWFtIGFib3J0LgorICovCit0 eXBlZGVmIHN0cnVjdCBMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCit7CisJVHJhbnNhY3Rpb25J ZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBzdWJ4aWQ7CisJWExvZ1JlY1B0cglhYm9ydF9sc247CisJ VGltZXN0YW1wVHogYWJvcnRfdGltZTsKK30gTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YTsKKwog ZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9iZWdpbihTdHJpbmdJbmZvIG91dCwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9iZWdpbihTdHJp bmdJbmZvIGluLAogCQkJCQkJCQkgIExvZ2ljYWxSZXBCZWdpbkRhdGEgKmJlZ2luX2RhdGEpOwpA QCAtMjQ2LDkgKzI2MiwxMyBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9j b21taXQoU3RyaW5nSW5mbyBvdXQsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bgogZXh0ZXJuIFRyYW5z YWN0aW9uSWQgbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBpbiwKIAkJ CQkJCQkJCQkJCSAgIExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSk7CiBleHRlcm4g dm9pZCBsb2dpY2FscmVwX3dyaXRlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsCi0JCQkJCQkJCQkJICBUcmFuc2FjdGlvbklkIHN1YnhpZCk7Ci1leHRlcm4g dm9pZCBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gaW4sIFRyYW5zYWN0 aW9uSWQgKnhpZCwKLQkJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCAqc3VieGlkKTsKKwkJCQkJCQkJ CQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkLAorCQkJCQkJCQkJCSAgWExvZ1JlY1B0ciBhYm9ydF9s c24sCisJCQkJCQkJCQkJICBUaW1lc3RhbXBUeiBhYm9ydF90aW1lLAorCQkJCQkJCQkJCSAgYm9v bCB3cml0ZV9hYm9ydF9pbmZvKTsKK2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1f YWJvcnQoU3RyaW5nSW5mbyBpbiwKKwkJCQkJCQkJCQkgTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0 YSAqYWJvcnRfZGF0YSwKKwkJCQkJCQkJCQkgYm9vbCByZWFkX2Fib3J0X2luZm8pOwogZXh0ZXJu IGNoYXIgKmxvZ2ljYWxyZXBfbWVzc2FnZV90eXBlKExvZ2ljYWxSZXBNc2dUeXBlIGFjdGlvbik7 CiAKICNlbmRpZgkJCQkJCQkvKiBMT0dJQ0FMX1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWx3b3JrZXIuaAppbmRleCBjZDFiNmU4YWZjLi5kYzY4Y2Q4OWM4IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCkBAIC0xMiw4ICsxMiwxNiBAQAogI2lm bmRlZiBMT0dJQ0FMV09SS0VSX0gKICNkZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKKyNpbmNsdWRl IDxzaWduYWwuaD4KKworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQ YXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmc7CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFp bihEYXR1bSBtYWluX2FyZyk7CitleHRlcm4gdm9pZCBQYXJhbGxlbEFwcGx5V29ya2VyTWFpbihE YXR1bSBtYWluX2FyZyk7CiAKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtlcih2b2lkKTsKK2V4 dGVybiBib29sIElzTG9naWNhbFBhcmFsbGVsQXBwbHlXb3JrZXIodm9pZCk7CitleHRlcm4gdm9p ZCBIYW5kbGVQYXJhbGxlbEFwcGx5TWVzc2FnZUludGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lk IEhhbmRsZVBhcmFsbGVsQXBwbHlNZXNzYWdlcyh2b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIExP R0lDQUxXT1JLRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3Jp Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRleCAyYTUwZDEwYjUy Li5jN2IxYWRmZmY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4u aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBA QCBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBu b2RlLCBib29sIGZsdXNoKTsKIAogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFu Y2UoWExvZ1JlY1B0ciByZW1vdGVfY29tbWl0LAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2Nh bF9jb21taXQpOwotZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdp bklkIG5vZGUpOworZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdp bklkIG5vZGUsIGludCBhY3F1aXJlZF9ieSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Np b25fcmVzZXQodm9pZCk7CiBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0 X3Byb2dyZXNzKGJvb2wgZmx1c2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9wZ291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAppbmRl eCAwMjAyNzU1MGUyLi4zYzMwZGE4MjA1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9wZ291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgK QEAgLTI2LDcgKzI2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRhCiAJTGlzdAkgICAq cHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOwogCWJvb2wJCWJpbmFy eTsKLQlib29sCQlzdHJlYW1pbmc7CisJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2Vz OwogCWJvb2wJCXR3b19waGFzZTsKIAljaGFyCSAgICpvcmlnaW47CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmgKaW5kZXggYjI3YTQzNjE4YS4uZDY3YmRiZmI3NSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApAQCAtMzE2LDYgKzMxNiw3IEBAIHR5 cGVkZWYgc3RydWN0IFJlb3JkZXJCdWZmZXJUWE4KIAl7CiAJCVRpbWVzdGFtcFR6IGNvbW1pdF90 aW1lOwogCQlUaW1lc3RhbXBUeiBwcmVwYXJlX3RpbWU7CisJCVRpbWVzdGFtcFR6IGFib3J0X3Rp bWU7CiAJfQkJCXhhY3RfdGltZTsKIAogCS8qCkBAIC02NzgsNyArNjc5LDggQEAgZXh0ZXJuIHZv aWQgUmVvcmRlckJ1ZmZlckFzc2lnbkNoaWxkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJDb21taXRDaGlsZChSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgVHJhbnNhY3Rpb25JZCBzdWJ4 aWQsIFhMb2dSZWNQdHIgY29tbWl0X2xzbiwKIAkJCQkJCQkJCSBYTG9nUmVjUHRyIGVuZF9sc24p OwotZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFu c2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZl ckFib3J0KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24sCisJCQkJCQkJICAgVGltZXN0YW1wVHogYWJvcnRfdGltZSk7CiBleHRlcm4gdm9pZCBSZW9y ZGVyQnVmZmVyQWJvcnRPbGQoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgb2xkZXN0 UnVubmluZ1hpZCk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyRm9yZ2V0KFJlb3JkZXJCdWZm ZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pOwogZXh0ZXJuIHZvaWQg UmVvcmRlckJ1ZmZlckludmFsaWRhdGUoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLCBYTG9nUmVjUHRyIGxzbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi93YWxyZWNlaXZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApp bmRleCA5MzM5ZjI5MzAzLi4wYzhiYmRkYWJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyLmgKQEAgLTE4Miw3ICsxODIsNyBAQCB0eXBlZGVmIHN0cnVjdAogCQkJdWludDMyCQlw cm90b192ZXJzaW9uOwkvKiBMb2dpY2FsIHByb3RvY29sIHZlcnNpb24gKi8KIAkJCUxpc3QJICAg KnB1YmxpY2F0aW9uX25hbWVzOwkvKiBTdHJpbmcgbGlzdCBvZiBwdWJsaWNhdGlvbnMgKi8KIAkJ CWJvb2wJCWJpbmFyeTsgLyogQXNrIHB1Ymxpc2hlciB0byB1c2UgYmluYXJ5ICovCi0JCQlib29s CQlzdHJlYW1pbmc7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMgKi8KKwkJCWNo YXIJICAgKnN0cmVhbWluZ19zdHI7CS8qIFN0cmVhbWluZyBvZiBsYXJnZSB0cmFuc2FjdGlvbnMg Ki8KIAkJCWJvb2wJCXR3b3BoYXNlOwkvKiBTdHJlYW1pbmcgb2YgdHdvLXBoYXNlIHRyYW5zYWN0 aW9ucyBhdAogCQkJCQkJCQkJICogcHJlcGFyZSB0aW1lICovCiAJCQljaGFyCSAgICpvcmlnaW47 IC8qIE9ubHkgcHVibGlzaCBkYXRhIG9yaWdpbmF0aW5nIGZyb20gdGhlCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4IDJiNzExNGZmNmQuLmZhNjAxNjQ2YTEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCkBAIC0xNyw4ICsx NywxMyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfc3Vic2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5j bHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHJlbGF0aW9u LmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZmaWxlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9maWxl c2V0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sb2NrLmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaG1f bXEuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NobV90b2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Nw aW4uaCIKIAogCkBAIC01MywxMyArNTgsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdv cmtlcgogCiAJLyoKIAkgKiBVc2VkIHRvIGNyZWF0ZSB0aGUgY2hhbmdlcyBhbmQgc3VieGFjdCBm aWxlcyBmb3IgdGhlIHN0cmVhbWluZwotCSAqIHRyYW5zYWN0aW9ucy4gIFVwb24gdGhlIGFycml2 YWwgb2YgdGhlIGZpcnN0IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgdGhlCi0JICogZmlsZXNldCB3 aWxsIGJlIGluaXRpYWxpemVkLCBhbmQgaXQgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIHdvcmtl cgotCSAqIGV4aXRzLiAgVW5kZXIgdGhpcywgc2VwYXJhdGUgYnVmZmlsZXMgd291bGQgYmUgY3Jl YXRlZCBmb3IgZWFjaAotCSAqIHRyYW5zYWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBhZnRl ciB0aGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQuCisJICogdHJhbnNhY3Rpb25zLiAgVXBvbiB0 aGUgYXJyaXZhbCBvZiB0aGUgZmlyc3Qgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIG9yCisJICogd2hl biB0aGUgZmlyc3QtdGltZSBsZWFkZXIgYXBwbHkgd29ya2VyIHRpbWVzIG91dCB3aGlsZSBzZW5k aW5nIGNoYW5nZXMKKwkgKiB0byB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLCB0aGUgZmlsZXNl dCB3aWxsIGJlIGluaXRpYWxpemVkLCBhbmQgaXQKKwkgKiB3aWxsIGJlIGRlbGV0ZWQgd2hlbiB0 aGUgd29ya2VyIGV4aXRzLiAgVW5kZXIgdGhpcywgc2VwYXJhdGUgYnVmZmlsZXMKKwkgKiB3b3Vs ZCBiZSBjcmVhdGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdoaWNoIHdpbGwgYmUgZGVsZXRlZCBh ZnRlciB0aGUKKwkgKiB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZC4KIAkgKi8KIAlGaWxlU2V0ICAg ICpzdHJlYW1fZmlsZXNldDsKIAorCS8qCisJICogUElEIG9mIGxlYWRlciBhcHBseSB3b3JrZXIg aWYgdGhpcyBzbG90IGlzIHVzZWQgZm9yIGEgcGFyYWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIsIElu dmFsaWRQaWQgb3RoZXJ3aXNlLgorCSAqLworCXBpZF90CQlhcHBseV9sZWFkZXJfcGlkOworCisJ LyogSW5kaWNhdGVzIHdoZXRoZXIgYXBwbHkgY2FuIGJlIHBlcmZvcm1lZCBpbiBwYXJhbGxlbC4g Ki8KKwlib29sCQlwYXJhbGxlbF9hcHBseTsKKwogCS8qIFN0YXRzLiAqLwogCVhMb2dSZWNQdHIJ bGFzdF9sc247CiAJVGltZXN0YW1wVHogbGFzdF9zZW5kX3RpbWU7CkBAIC02OCw5ICs4NCwxMzMg QEAgdHlwZWRlZiBzdHJ1Y3QgTG9naWNhbFJlcFdvcmtlcgogCVRpbWVzdGFtcFR6IHJlcGx5X3Rp bWU7CiB9IExvZ2ljYWxSZXBXb3JrZXI7CiAKKy8qCisgKiBTdGF0ZSBvZiB0aGUgdHJhbnNhY3Rp b24gaW4gcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIFRoZSBlbnVtIHZhbHVlcyBtdXN0 IGhhdmUgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHRyYW5zYWN0aW9uIHN0YXRlCisgKiB0cmFuc2l0 aW9ucy4KKyAqLwordHlwZWRlZiBlbnVtIFBhcmFsbGVsVHJhbnNTdGF0ZQoreworCVBBUkFMTEVM X1RSQU5TX1VOS05PV04sCisJUEFSQUxMRUxfVFJBTlNfU1RBUlRFRCwKKwlQQVJBTExFTF9UUkFO U19GSU5JU0hFRAorfSBQYXJhbGxlbFRyYW5zU3RhdGU7CisKKy8qCisgKiBTdGF0ZSBvZiBmaWxl c2V0IHVzZWQgdG8gY29tbXVuaWNhdGUgY2hhbmdlcyBmcm9tIGxlYWRlciB0byBwYXJhbGxlbAor ICogYXBwbHkgd29ya2VyLgorICoKKyAqIEZTX0VNUFRZIGluZGljYXRlcyBhbiBpbml0aWFsIHN0 YXRlIHdoZXJlIHRoZSBsZWFkZXIgZG9lc24ndCBuZWVkIHRvIHVzZQorICogdGhlIGZpbGUgdG8g Y29tbXVuaWNhdGUgd2l0aCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICoKKyAqIEZTX1NF UklBTElaRV9JTl9QUk9HUkVTUyBpbmRpY2F0ZXMgdGhhdCB0aGUgbGVhZGVyIGlzIHNlcmlhbGl6 aW5nIGNoYW5nZXMKKyAqIHRvIHRoZSBmaWxlLgorICoKKyAqIEZTX1NFUklBTElaRV9ET05FIGlu ZGljYXRlcyB0aGF0IHRoZSBsZWFkZXIgaGFzIHNlcmlhbGl6ZWQgYWxsIGNoYW5nZXMgdG8KKyAq IHRoZSBmaWxlLgorICoKKyAqIEZTX1JFQURZIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vdyBvayBm b3IgYSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgdG8KKyAqIHJlYWQgdGhlIGZpbGUuCisgKi8KK3R5 cGVkZWYgZW51bSBQYXJ0aWFsRmlsZVNldFN0YXRlCit7CisJRlNfRU1QVFksCisJRlNfU0VSSUFM SVpFX0lOX1BST0dSRVNTLAorCUZTX1NFUklBTElaRV9ET05FLAorCUZTX1JFQURZCit9IFBhcnRp YWxGaWxlU2V0U3RhdGU7CisKKy8qCisgKiBTdHJ1Y3QgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24g YmV0d2VlbiBsZWFkZXIgYXBwbHkgd29ya2VyIGFuZCBwYXJhbGxlbAorICogYXBwbHkgd29ya2Vy cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZAoreworCXNs b2NrX3QJCW11dGV4OworCisJVHJhbnNhY3Rpb25JZCB4aWQ7CisKKwkvKgorCSAqIFN0YXRlIHVz ZWQgdG8gZW5zdXJlIGNvbW1pdCBvcmRlcmluZy4KKwkgKgorCSAqIFRoZSBwYXJhbGxlbCBhcHBs eSB3b3JrZXIgd2lsbCBzZXQgaXQgdG8gUEFSQUxMRUxfVFJBTlNfRklOSVNIRUQgYWZ0ZXIKKwkg KiBoYW5kbGluZyB0aGUgdHJhbnNhY3Rpb24gZmluaXNoIGNvbW1hbmRzIHdoaWxlIHRoZSBhcHBs eSBsZWFkZXIgd2lsbAorCSAqIHdhaXQgZm9yIGl0IHRvIGJlY29tZSBQQVJBTExFTF9UUkFOU19G SU5JU0hFRCBiZWZvcmUgcHJvY2VlZGluZyBpbgorCSAqIHRyYW5zYWN0aW9uIGZpbmlzaCBjb21t YW5kcyAoZS5nLiBTVFJFQU1fQ09NTUlUL1NUUkVBTV9QUkVQQVJFKS4KKwkgKi8KKwlQYXJhbGxl bFRyYW5zU3RhdGUgeGFjdF9zdGF0ZTsKKworCS8qIEluZm9ybWF0aW9uIGZyb20gdGhlIGNvcnJl c3BvbmRpbmcgTG9naWNhbFJlcFdvcmtlciBzbG90LiAqLworCXVpbnQxNgkJbG9naWNhbHJlcF93 b3JrZXJfZ2VuZXJhdGlvbjsKKwlpbnQJCQlsb2dpY2FscmVwX3dvcmtlcl9zbG90X25vOworCisJ LyoKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGVyZSBhcmUgcGVuZGluZyBzdHJlYW1pbmcgYmxv Y2tzIGluIHRoZSBxdWV1ZS4gVGhlCisJICogcGFyYWxsZWwgYXBwbHkgd29ya2VyIHdpbGwgY2hl Y2sgaXQgYmVmb3JlIHN0YXJ0aW5nIHRvIHdhaXQuCisJICovCisJcGdfYXRvbWljX3VpbnQzMglw ZW5kaW5nX3N0cmVhbV9jb3VudDsKKworCS8qCisJICogWGFjdExhc3RDb21taXRFbmQgZnJvbSB0 aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLiBUaGlzIGlzIHJlcXVpcmVkIGJ5CisJICogdGhlIGxl YWRlciB3b3JrZXIgc28gaXQgY2FuIHVwZGF0ZSB0aGUgbHNuX21hcHBpbmdzLgorCSAqLworCVhM b2dSZWNQdHIJbGFzdF9jb21taXRfZW5kOworCisJLyoKKwkgKiBBZnRlciBlbnRlcmluZyBQQVJU SUFMX1NFUklBTElaRSBtb2RlLCB0aGUgbGVhZGVyIGFwcGx5IHdvcmtlciB3aWxsCisJICogc2Vy aWFsaXplIGNoYW5nZXMgdG8gdGhlIGZpbGUsIGFuZCBzaGFyZSB0aGUgZmlsZXNldCB3aXRoIHRo ZSBwYXJhbGxlbAorCSAqIGFwcGx5IHdvcmtlciB3aGVuIHByb2Nlc3NpbmcgdGhlIHRyYW5zYWN0 aW9uIGZpbmlzaCBjb21tYW5kLiBUaGVuIHRoZQorCSAqIHBhcmFsbGVsIGFwcGx5IHdvcmtlciB3 aWxsIGFwcGx5IGFsbCB0aGUgc3Bvb2xlZCBtZXNzYWdlcy4KKwkgKgorCSAqIEZpbGVTZXQgaXMg dXNlZCBoZXJlIGluc3RlYWQgb2YgU2hhcmVkRmlsZVNldCBiZWNhdXNlIHdlIG5lZWQgaXQgdG8K KwkgKiBzdXJ2aXZlIGFmdGVyIHJlbGVhc2luZyB0aGUgc2hhcmVkIG1lbW9yeSBzbyB0aGF0IHRo ZSBsZWFkZXIgYXBwbHkKKwkgKiB3b3JrZXIgY2FuIHJlLXVzZSB0aGUgc2FtZSBmaWxlc2V0IGZv ciB0aGUgbmV4dCBzdHJlYW1pbmcgdHJhbnNhY3Rpb24uCisJICovCisJUGFydGlhbEZpbGVTZXRT dGF0ZSBmaWxlc2V0X3N0YXRlOworCUZpbGVTZXQJCWZpbGVzZXQ7Cit9IFBhcmFsbGVsQXBwbHlX b3JrZXJTaGFyZWQ7CisKKy8qCisgKiBJbmZvcm1hdGlvbiB3aGljaCBpcyB1c2VkIHRvIG1hbmFn ZSB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyLgorICovCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxl bEFwcGx5V29ya2VySW5mbworeworCXNobV9tcV9oYW5kbGUgKm1xX2hhbmRsZTsKKworCS8qCisJ ICogVGhlIHF1ZXVlIHVzZWQgdG8gdHJhbnNmZXIgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgcGFy YWxsZWwgYXBwbHkKKwkgKiB3b3JrZXIgdG8gdGhlIGxlYWRlciBhcHBseSB3b3JrZXIuCisJICov CisJc2htX21xX2hhbmRsZSAqZXJyb3JfbXFfaGFuZGxlOworCisJZHNtX3NlZ21lbnQgKmRzbV9z ZWc7CisKKwkvKgorCSAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsZWFkZXIgYXBwbHkgd29ya2Vy IG5lZWRzIHRvIHNlcmlhbGl6ZSB0aGUKKwkgKiByZW1haW5pbmcgY2hhbmdlcyB0byBhIGZpbGUg ZHVlIHRvIHRpbWVvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIHNlbmQgZGF0YQorCSAqIHRvIHRoZSBw YXJhbGxlbCBhcHBseSB3b3JrZXIgdmlhIHNoYXJlZCBtZW1vcnkuCisJICovCisJYm9vbAkJc2Vy aWFsaXplX2NoYW5nZXM7CisKKwkvKgorCSAqIFRydWUgaWYgdGhlIHdvcmtlciBpcyBiZWluZyB1 c2VkIHRvIHByb2Nlc3MgYSBwYXJhbGxlbCBhcHBseQorCSAqIHRyYW5zYWN0aW9uLiBGYWxzZSBp bmRpY2F0ZXMgdGhpcyB3b3JrZXIgaXMgYXZhaWxhYmxlIGZvciByZS11c2UuCisJICovCisJYm9v bAkJaW5fdXNlOworCisJUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqc2hhcmVkOworfSBQYXJh bGxlbEFwcGx5V29ya2VySW5mbzsKKwogLyogTWFpbiBtZW1vcnkgY29udGV4dCBmb3IgYXBwbHkg d29ya2VyLiBQZXJtYW5lbnQgZHVyaW5nIHdvcmtlciBsaWZldGltZS4gKi8KIGV4dGVybiBQR0RM TElNUE9SVCBNZW1vcnlDb250ZXh0IEFwcGx5Q29udGV4dDsKIAorZXh0ZXJuIFBHRExMSU1QT1JU IE1lbW9yeUNvbnRleHQgQXBwbHlNZXNzYWdlQ29udGV4dDsKKworZXh0ZXJuIFBHRExMSU1QT1JU IEVycm9yQ29udGV4dENhbGxiYWNrICphcHBseV9lcnJvcl9jb250ZXh0X3N0YWNrOworCitleHRl cm4gUEdETExJTVBPUlQgUGFyYWxsZWxBcHBseVdvcmtlclNoYXJlZCAqTXlQYXJhbGxlbFNoYXJl ZDsKKwogLyogbGlicHFyZWNlaXZlciBjb25uZWN0aW9uICovCiBleHRlcm4gUEdETExJTVBPUlQg c3RydWN0IFdhbFJlY2VpdmVyQ29ubiAqTG9nUmVwV29ya2VyV2FsUmN2Q29ubjsKIApAQCAtODQs OSArMjI0LDExIEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xv dCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQg c3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVy biBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5u aW5nKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lk IHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCBy ZWxpZCk7CitleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJCSBPaWQgdXNlcmlkLCBPaWQg cmVsaWQsCisJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJfZHNtKTsKIGV4dGVybiB2b2lk IGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQgcmVsaWQpOworZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF9wYV93b3JrZXJfc3RvcChpbnQgc2xvdF9ubywgdWludDE2IGdlbmVyYXRp b24pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwgT2lk IHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNh bFJlcFdvcmtlciAqd29ya2VyKTsKIApAQCAtMTAzLDEwICsyNDUsNzggQEAgZXh0ZXJuIHZvaWQg cHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKTsKIGV4dGVybiB2 b2lkIGludmFsaWRhdGVfc3luY2luZ190YWJsZV9zdGF0ZXMoRGF0dW0gYXJnLCBpbnQgY2FjaGVp ZCwKIAkJCQkJCQkJCQkJdWludDMyIGhhc2h2YWx1ZSk7CiAKK2V4dGVybiB2b2lkIHN0cmVhbV9z dGFydF9pbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBmaXJzdF9zZWdtZW50KTsKK2V4 dGVybiB2b2lkIHN0cmVhbV9zdG9wX2ludGVybmFsKFRyYW5zYWN0aW9uSWQgeGlkKTsKKworLyog Q29tbW9uIHN0cmVhbWluZyBmdW5jdGlvbiB0byBhcHBseSBhbGwgdGhlIHNwb29sZWQgbWVzc2Fn ZXMgKi8KK2V4dGVybiB2b2lkIGFwcGx5X3Nwb29sZWRfbWVzc2FnZXMoRmlsZVNldCAqc3RyZWFt X2ZpbGVzZXQsIFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxzbik7 CisKK2V4dGVybiB2b2lkIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcyk7CisKK2V4dGVybiB2 b2lkIG1heWJlX3JlcmVhZF9zdWJzY3JpcHRpb24odm9pZCk7CisKK2V4dGVybiB2b2lkIHN0cmVh bV9jbGVhbnVwX2ZpbGVzKE9pZCBzdWJpZCwgVHJhbnNhY3Rpb25JZCB4aWQpOworCitleHRlcm4g dm9pZCBJbml0aWFsaXplQXBwbHlXb3JrZXIodm9pZCk7CisKK2V4dGVybiB2b2lkIHN0b3JlX2Zs dXNoX3Bvc2l0aW9uKFhMb2dSZWNQdHIgcmVtb3RlX2xzbiwgWExvZ1JlY1B0ciBsb2NhbF9sc24p OworCisvKiBGdW5jdGlvbiBmb3IgYXBwbHkgZXJyb3IgY2FsbGJhY2sgKi8KK2V4dGVybiB2b2lk IGFwcGx5X2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitleHRlcm4gdm9pZCBzZXRfYXBwbHlf ZXJyb3JfY29udGV4dF9vcmlnaW4oY2hhciAqb3JpZ2lubmFtZSk7CisKKy8qIFBhcmFsbGVsIGFw cGx5IHdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitleHRlcm4gdm9pZCBwYV9hbGxv Y2F0ZV93b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQpOworZXh0ZXJuIFBhcmFsbGVsQXBwbHlXb3Jr ZXJJbmZvICpwYV9maW5kX3dvcmtlcihUcmFuc2FjdGlvbklkIHhpZCk7CitleHRlcm4gdm9pZCBw YV9kZXRhY2hfYWxsX2Vycm9yX21xKHZvaWQpOworCitleHRlcm4gYm9vbCBwYV9zZW5kX2RhdGEo UGFyYWxsZWxBcHBseVdvcmtlckluZm8gKndpbmZvLCBTaXplIG5ieXRlcywKKwkJCQkJCSBjb25z dCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIHBhX3N3aXRjaF90b19wYXJ0aWFsX3NlcmlhbGl6 ZShQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJCQkJCQkJCQkJICAgYm9vbCBzdHJl YW1fbG9ja2VkKTsKKworZXh0ZXJuIHZvaWQgcGFfc2V0X3hhY3Rfc3RhdGUoUGFyYWxsZWxBcHBs eVdvcmtlclNoYXJlZCAqd3NoYXJlZCwKKwkJCQkJCQkgIFBhcmFsbGVsVHJhbnNTdGF0ZSBpbl94 YWN0KTsKK2V4dGVybiB2b2lkIHBhX3NldF9zdHJlYW1fYXBwbHlfd29ya2VyKFBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbyk7CisKK2V4dGVybiB2b2lkIHBhX3N0YXJ0X3N1YnRyYW5zKFRy YW5zYWN0aW9uSWQgY3VycmVudF94aWQsCisJCQkJCQkJICBUcmFuc2FjdGlvbklkIHRvcF94aWQp OworZXh0ZXJuIHZvaWQgcGFfcmVzZXRfc3VidHJhbnModm9pZCk7CitleHRlcm4gdm9pZCBwYV9z dHJlYW1fYWJvcnQoTG9naWNhbFJlcFN0cmVhbUFib3J0RGF0YSAqYWJvcnRfZGF0YSk7CitleHRl cm4gdm9pZCBwYV9zZXRfZmlsZXNldF9zdGF0ZShQYXJhbGxlbEFwcGx5V29ya2VyU2hhcmVkICp3 c2hhcmVkLAorCQkJCQkJCQkgUGFydGlhbEZpbGVTZXRTdGF0ZSBmaWxlc2V0X3N0YXRlKTsKKwor ZXh0ZXJuIHZvaWQgcGFfbG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQsIExPQ0tNT0RFIGxv Y2ttb2RlKTsKK2V4dGVybiB2b2lkIHBhX3VubG9ja19zdHJlYW0oVHJhbnNhY3Rpb25JZCB4aWQs IExPQ0tNT0RFIGxvY2ttb2RlKTsKKworZXh0ZXJuIHZvaWQgcGFfbG9ja190cmFuc2FjdGlvbihU cmFuc2FjdGlvbklkIHhpZCwgTE9DS01PREUgbG9ja21vZGUpOworZXh0ZXJuIHZvaWQgcGFfdW5s b2NrX3RyYW5zYWN0aW9uKFRyYW5zYWN0aW9uSWQgeGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CisK K2V4dGVybiB2b2lkIHBhX2RlY3JfYW5kX3dhaXRfc3RyZWFtX2Jsb2NrKHZvaWQpOworCitleHRl cm4gdm9pZCBwYV94YWN0X2ZpbmlzaChQYXJhbGxlbEFwcGx5V29ya2VySW5mbyAqd2luZm8sCisJ CQkJCQkgICBYTG9nUmVjUHRyIHJlbW90ZV9sc24pOworCisjZGVmaW5lIGlzUGFyYWxsZWxBcHBs eVdvcmtlcih3b3JrZXIpICgod29ya2VyKS0+YXBwbHlfbGVhZGVyX3BpZCAhPSBJbnZhbGlkUGlk KQorCiBzdGF0aWMgaW5saW5lIGJvb2wKIGFtX3RhYmxlc3luY193b3JrZXIodm9pZCkKIHsKIAly ZXR1cm4gT2lkSXNWYWxpZChNeUxvZ2ljYWxSZXBXb3JrZXItPnJlbGlkKTsKIH0KIAorc3RhdGlj IGlubGluZSBib29sCithbV9sZWFkZXJfYXBwbHlfd29ya2VyKHZvaWQpCit7CisJcmV0dXJuICgh YW1fdGFibGVzeW5jX3dvcmtlcigpICYmCisJCQkhaXNQYXJhbGxlbEFwcGx5V29ya2VyKE15TG9n aWNhbFJlcFdvcmtlcikpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2FtX3BhcmFsbGVsX2Fw cGx5X3dvcmtlcih2b2lkKQoreworCXJldHVybiBpc1BhcmFsbGVsQXBwbHlXb3JrZXIoTXlMb2dp Y2FsUmVwV29ya2VyKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdPUktFUl9JTlRFUk5BTF9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbG1nci5oCmluZGV4IGJlMWQyYzk5YTkuLjVhM2JkMDNiYTUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG1nci5o CkBAIC0xMDcsNiArMTA3LDExIEBAIGV4dGVybiB2b2lkIExvY2tTaGFyZWRPYmplY3RGb3JTZXNz aW9uKE9pZCBjbGFzc2lkLCBPaWQgb2JqaWQsIHVpbnQxNiBvYmpzdWJpZCwKIGV4dGVybiB2b2lk IFVubG9ja1NoYXJlZE9iamVjdEZvclNlc3Npb24oT2lkIGNsYXNzaWQsIE9pZCBvYmppZCwgdWlu dDE2IG9ianN1YmlkLAogCQkJCQkJCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKK2V4dGVybiB2 b2lkIExvY2tBcHBseVRyYW5zYWN0aW9uRm9yU2Vzc2lvbihPaWQgc3Vib2lkLCBUcmFuc2FjdGlv bklkIHhpZCwgdWludDE2IG9iamlkLAorCQkJCQkJCQkJCSAgIExPQ0tNT0RFIGxvY2ttb2RlKTsK K2V4dGVybiB2b2lkIFVubG9ja0FwcGx5VHJhbnNhY3Rpb25Gb3JTZXNzaW9uKE9pZCBzdWJvaWQs IFRyYW5zYWN0aW9uSWQgeGlkLCB1aW50MTYgb2JqaWQsCisJCQkJCQkJCQkJCSBMT0NLTU9ERSBs b2NrbW9kZSk7CisKIC8qIERlc2NyaWJlIGEgbG9ja3RhZyBmb3IgZXJyb3IgbWVzc2FnZXMgKi8K IGV4dGVybiB2b2lkIERlc2NyaWJlTG9ja1RhZyhTdHJpbmdJbmZvIGJ1ZiwgY29uc3QgTE9DS1RB RyAqdGFnKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCBlNGUxNDk1YjI0Li43NzY2MTIzYTdiIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2xvY2suaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2xvY2suaApAQCAtMTQ5LDEwICsxNDksMTIgQEAgdHlwZWRlZiBlbnVtIExvY2tUYWdUeXBl CiAJTE9DS1RBR19TUEVDVUxBVElWRV9UT0tFTiwJLyogc3BlY3VsYXRpdmUgaW5zZXJ0aW9uIFhp ZCBhbmQgdG9rZW4gKi8KIAlMT0NLVEFHX09CSkVDVCwJCQkJLyogbm9uLXJlbGF0aW9uIGRhdGFi YXNlIG9iamVjdCAqLwogCUxPQ0tUQUdfVVNFUkxPQ0ssCQkJLyogcmVzZXJ2ZWQgZm9yIG9sZCBj b250cmliL3VzZXJsb2NrIGNvZGUgKi8KLQlMT0NLVEFHX0FEVklTT1JZCQkJLyogYWR2aXNvcnkg dXNlciBsb2NrcyAqLworCUxPQ0tUQUdfQURWSVNPUlksCQkJLyogYWR2aXNvcnkgdXNlciBsb2Nr cyAqLworCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04JLyogdHJhbnNhY3Rpb24gYmVpbmcgYXBw bGllZCBvbiBhIGxvZ2ljYWwKKwkJCQkJCQkJICogcmVwbGljYXRpb24gc3Vic2NyaWJlciAqLwog fSBMb2NrVGFnVHlwZTsKIAotI2RlZmluZSBMT0NLVEFHX0xBU1RfVFlQRQlMT0NLVEFHX0FEVklT T1JZCisjZGVmaW5lIExPQ0tUQUdfTEFTVF9UWVBFCUxPQ0tUQUdfQVBQTFlfVFJBTlNBQ1RJT04K IAogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IExvY2tUYWdUeXBlTmFtZXNb XTsKIApAQCAtMjc4LDYgKzI4MCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBMT0NLVEFHCiAJIChsb2Nr dGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FEVklTT1JZLCBcCiAJIChsb2NrdGFnKS5sb2Nr dGFnX2xvY2ttZXRob2RpZCA9IFVTRVJfTE9DS01FVEhPRCkKIAorLyoKKyAqIElEIGluZm8gZm9y IGEgcmVtb3RlIHRyYW5zYWN0aW9uIG9uIGEgbG9naWNhbCByZXBsaWNhdGlvbiBzdWJzY3JpYmVy IGlzOiBEQgorICogT0lEICsgU1VCU0NSSVBUSU9OIE9JRCArIFRSQU5TQUNUSU9OIElEICsgT0JK SUQKKyAqLworI2RlZmluZSBTRVRfTE9DS1RBR19BUFBMWV9UUkFOU0FDVElPTihsb2NrdGFnLGRi b2lkLHN1Ym9pZCx4aWQsb2JqaWQpIFwKKwkoKGxvY2t0YWcpLmxvY2t0YWdfZmllbGQxID0gKGRi b2lkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVsZDIgPSAoc3Vib2lkKSwgXAorCSAobG9j a3RhZykubG9ja3RhZ19maWVsZDMgPSAoeGlkKSwgXAorCSAobG9ja3RhZykubG9ja3RhZ19maWVs ZDQgPSAob2JqaWQpLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX3R5cGUgPSBMT0NLVEFHX0FQUExZ X1RSQU5TQUNUSU9OLCBcCisJIChsb2NrdGFnKS5sb2NrdGFnX2xvY2ttZXRob2RpZCA9IERFRkFV TFRfTE9DS01FVEhPRCkKIAogLyoKICAqIFBlci1sb2NrZWQtb2JqZWN0IGxvY2sgaW5mb3JtYXRp b246CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGVlNjM2OTAwZjMuLjkzYTUxZjQyNTQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51 bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHBy ZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFy cmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBi YWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19QQVJBTExFTF9B UFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdlIGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwog CiAJLyogUmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfREFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50 LmggYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggMGIyMTAwYmU0YS4uNzYz ZmJlYWRmYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsNiArNDIsNyBAQCB0eXBlZGVm IGVudW0KIAlXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNB TF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOLAorCVdBSVRf RVZFTlRfTE9HSUNBTF9QQVJBTExFTF9BUFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfUkVDT1ZFUllf V0FMX1NUUkVBTSwKIAlXQUlUX0VWRU5UX1NZU0xPR0dFUl9NQUlOLAogCVdBSVRfRVZFTlRfV0FM X1JFQ0VJVkVSX01BSU4sCkBAIC0xMDUsNiArMTA2LDcgQEAgdHlwZWRlZiBlbnVtCiAJV0FJVF9F VkVOVF9IQVNIX0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlUX0VWRU5UX0hBU0hfR1JPV19C VUNLRVRTX0VMRUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JVQ0tFVFNfUkVJTlNFUlQsCisJ V0FJVF9FVkVOVF9MT0dJQ0FMX1BBUkFMTEVMX0FQUExZX1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VW RU5UX0xPR0lDQUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5DX1NUQVRFX0NI QU5HRSwKIAlXQUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9zdWJzY3JpcHRpb24ub3V0CmluZGV4IGMxM2QyMThkY2YuLjFlZDZmNGMzOWMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKQEAgLTExNyw3ICsxMTcsNyBA QCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0 ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWlu ZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hy b25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAt LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAg ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBub25lICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyBy ZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAg ICAgICAgICAgICAgIHwgbm9uZSAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWI0IFNFVCAob3JpZ2luID0gYW55KTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBBTFRF UiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViNCBTRVQgKG9yaWdpbiA9IGFueSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAg IE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1Ymxp Y2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUg b24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5m byAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykK IAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViMzsKQEAgLTEzOCw3ICsxMzgsNyBA QCBFUlJPUjogIGludmFsaWQgY29ubmVjdGlvbiBzdHJpbmcgc3ludGF4OiBtaXNzaW5nICI9IiBh ZnRlciAiZm9vYmFyIiBpbiBjb25uZWN0aQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5n IHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJv bm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAg ICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYg ICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgUFVCTElDQVRJT04gdGVzdHB1YjIsIHRlc3RwdWIzIFdJVEggKHJlZnJlc2gg PSBmYWxzZSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTS0lQIChsc24gPSAnMC8xMjM0NScpOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwg QmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3Ig fCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAg ICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8xMjM0NQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJl Z3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8 IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAg IHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4 aXN0MiB8IDAvMTIzNDUKICgxIHJvdykKIAogLS0gb2sgLSB3aXRoIGxzbiA9IE5PTkUKQEAgLTE3 MCw3ICsxNzAsNyBAQCBFUlJPUjogIGludmFsaWQgV0FMIGxvY2F0aW9uIChMU04pOiAwLzAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwog ICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwg ICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21t aXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IGYgICAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAorIHJl Z3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rl c3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAogKDEgcm93KQogCiBCRUdJTjsKQEAgLTIwNSw3 ICsyMDUsNyBAQCBISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogbG9jYWwsIHJlbW90ZV93cml0ZSwg cmVtb3RlX2FwcGx5LCBvbiwgb2ZmLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgICAgTmFtZSAgICAgICAgIHwgICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmlu YXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBP cmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAg IHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfdGVzdHN1Yl9mb28gfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAg ICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IGxvY2FsICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWJfZm9v IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1YjIsdGVzdHB1 YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBsb2NhbCAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QyIHwgMC8wCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJl c3Qgc2ltcGxlCkBAIC0yNDIsNyArMjQyLDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0 aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAg ICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJs aWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxl IG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmlu Zm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yn0gICB8IHQgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAg ICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jl c3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQgICAgICB8IG9mZiAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAK IEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChiaW5hcnkgPSBmYWxzZSk7 CkBAIC0yNTEsMTMgKzI1MSwxMyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcg fCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9u b3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAogLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vi c2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBmICAgICAg ICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAg ICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rl c3RzdWI7Ci0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgorLS0gZmFpbCAtIHN0 cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JFQVRFIFNVQlNDUklQVElP TiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0g Zm9vKTsKLUVSUk9SOiAgc3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorRVJST1I6 ICBzdHJlYW1pbmcgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJwYXJhbGxlbCIKIC0tIG5v dyBpdCB3b3JrcwogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElP TiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEgg KGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJOSU5HOiAgc3Vic2NyaXB0 aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5lY3RlZApAQCAtMjY2LDcgKzI2NiwxNSBA QCBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0 ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5n IHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJv bm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAg ICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYg ICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKygxIHJvdykKKworQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKK1xkUnMrCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAg ICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCBwYXJhbGxlbCAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IFNFVCAoc3RyZWFtaW5nID0gZmFsc2UpOwpAQCAtMjc1LDcgKzI4Myw3IEBAIEFMVEVSIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlv biB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVy cm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAg ICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1 Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAg ICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9l c25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIC0tIGZh aWwgLSBwdWJsaWNhdGlvbiBhbHJlYWR5IGV4aXN0cwpAQCAtMjkzLDcgKzMwMSw3IEBAIEVSUk9S OiAgcHVibGljYXRpb24gInRlc3RwdWIxIiBpcyBhbHJlYWR5IGluIHN1YnNjcmlwdGlvbiAicmVn cmVzc190ZXN0c3ViIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExp c3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBFbmFibGVkIHwgICAgICAgICBQdWJsaWNhdGlvbiAgICAgICAgIHwgQmluYXJ5 IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmln aW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBT a2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7 dGVzdHB1Yix0ZXN0cHViMSx0ZXN0cHViMn0gfCBmICAgICAgfCBmICAgICAgICAgfCBkICAgICAg ICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAg ICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8 IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIsdGVzdHB1YjEs dGVzdHB1YjJ9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAg ICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVz c19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIHVz ZWQgbW9yZSB0aGVuIG9uY2UKQEAgLTMxMSw3ICszMTksNyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViIERST1AgUFVCTElDQVRJT04gdGVzdHB1YjEsIHRlc3RwdWIyIFdJVEgg KHJlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlv bnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxl ZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8 IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAg ICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgZiAgICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2Zm ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgx IHJvdykKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwpAQCAtMzUwLDcgKzM1 OCw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkg Y3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJl YW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBm ICAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLWZhaWwgLSBhbHRlciBvZiB0d29f cGhhc2Ugb3B0aW9uIG5vdCBzdXBwb3J0ZWQuCkBAIC0zNjIsNyArMzcwLDcgQEAgQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IHRydWUpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKICAgICAgIE5h bWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0 aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24g ZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlv bl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgcCAg ICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAg ICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxU RVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpA QCAtMzc1LDcgKzM4Myw3IEBAIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11 c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwogICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAg ICB8IFNraXAgTFNOIAogLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVz dHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAg fCBmICAgICAgfCB0ICAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdCB8IDAvMAorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIg fCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBwICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CkBAIC0zOTEs NyArMzk5LDcgQEAgSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51 YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8 IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2lu IHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tp cCBMU04gCiAtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAg ICB8IGYgICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwg MC8wCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElP TiByZWdyZXNzX3Rlc3RzdWIgU0VUIChkaXNhYmxlX29uX2Vycm9yID0gdHJ1ZSk7CkBAIC0zOTks NyArNDA3LDcgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGRpc2Fi bGVfb25fZXJyb3IgPSB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBzdWJzY3JpcHRpb25zCiAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3 by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMg Y29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCiAtLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IGYgICAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgcmVncmVzc190 ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0g ICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCB0ICAgICAgICAgICAg ICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3N1YnNjcmlwdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzY3JpcHRpb24u c3FsCmluZGV4IGVhZWFkZThjY2UuLjc5OTFhYmZlOGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3N1YnNjcmlwdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vi c2NyaXB0aW9uLnNxbApAQCAtMTY3LDcgKzE2Nyw3IEBAIEFMVEVSIFNVQlNDUklQVElPTiByZWdy ZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIAogRFJPUCBTVUJTQ1JJUFRJT04g cmVncmVzc190ZXN0c3ViOwogCi0tLSBmYWlsIC0gc3RyZWFtaW5nIG11c3QgYmUgYm9vbGVhbgor LS0gZmFpbCAtIHN0cmVhbWluZyBtdXN0IGJlIGJvb2xlYW4gb3IgJ3BhcmFsbGVsJwogQ1JFQVRF IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwg c3RyZWFtaW5nID0gZm9vKTsKIAogLS0gbm93IGl0IHdvcmtzCkBAIC0xNzUsNiArMTc1LDEwIEBA IENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1y ZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCCiAKIFxkUnMrCiAKK0FMVEVSIFNVQlNDUklQVElPTiBy ZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBwYXJhbGxlbCk7CisKK1xkUnMrCisKIEFM VEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzdHJlYW1pbmcgPSBmYWxzZSk7 CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9O RSk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0ucGwg Yi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVfc3RyZWFtLnBsCmluZGV4IGNiYWEzMjdlNDQu LjAxZjIwNWQyYmYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJl YW0ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbApAQCAtOCw2 ICs4LDEyOCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisjIENoZWNrIHRoYXQgdGhlIHBhcmFs bGVsIGFwcGx5IHdvcmtlciBoYXMgZmluaXNoZWQgYXBwbHlpbmcgdGhlIHN0cmVhbWluZworIyB0 cmFuc2FjdGlvbi4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cKK3sKKwlteSAoJG5vZGVfc3Vic2Ny aWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAkdHlwZSkgPSBAXzsKKworCWlmICgkaXNfcGFy YWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0X2Zvcl9sb2coCisJCQlxci9ERUJV RzogKCBbQS1aMC05XSs6KT8gZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgU1RSRUFNICR0eXBlIGNv bW1hbmQvLAorCQkJJG9mZnNldCk7CisJfQorfQorCisjIENvbW1vbiB0ZXN0IHN0ZXBzIGZvciBi b3RoIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1wYXJhbGxlbCBjYXNlcy4KK3N1YiB0 ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIs ICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwkjIEludGVybGVhdmUgYSBwYWlyIG9m IHRyYW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCisJbXkgJGluICA9 ICcnOworCW15ICRvdXQgPSAnJzsKKworCW15ICRvZmZzZXQgPSAwOworCisJbXkgJHRpbWVyID0g SVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1 bHQpOworCisJbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdy ZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCQlvbl9lcnJvcl9zdG9wID0+IDApOworCisJIyBD aGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2Rl X3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkaW4gLj0gcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKKwlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJfTsK KwkkaC0+cHVtcF9uYjsKKworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdy ZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBhID4gNTAwMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkaW4gLj0gcXsK KwlDT01NSVQ7CisJXHEKKwl9OworCSRoLT5maW5pc2g7ICAgICMgZXJyb3JzIG1ha2UgdGhlIG5l eHQgdGVzdCBmYWlsLCBzbyBpZ25vcmUgdGhlbSBoZXJlCisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJY2hlY2tfcGFyYWxsZWxfbG9nKCRub2RlX3N1 YnNjcmliZXIsICRvZmZzZXQsICRpc19wYXJhbGxlbCwgJ0NPTU1JVCcpOworCisJbXkgJHJlc3Vs dCA9CisJICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVD VCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlp cygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKKworCSMgVGVzdCB0aGUgc3RyZWFtaW5nIGluIGJpbmFy eSBtb2RlCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJBTFRF UiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQgKGJpbmFyeSA9IG9uKSIpOworCisJIyBDaGVjayB0 aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJv d3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOworCX0pOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCWNoZWNr X3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdD T01NSVQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBG Uk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLAorCQknY2hl Y2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7CisKKwkjIENoYW5nZSB0 aGUgbG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5zIG9uIHRoZSBzdWJzY3JpYmVyLAor CSMgdXBkYXRlIHB1Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQgc3Vic2NyaWJlciByZXRhaW5zIHRo ZSBleHBlY3RlZAorCSMgdmFsdWVzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IG5vbi1zdHJlYW1p bmcgdHJhbnNhY3Rpb25zIGJlaGF2ZQorCSMgcHJvcGVybHkgYWZ0ZXIgYSBzdHJlYW1pbmcgdHJh bnNhY3Rpb24uCisJJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJV UERBVEUgdGVzdF90YWIgU0VUIGMgPSAnZXBvY2gnOjp0aW1lc3RhbXB0eiArIDk4NzY1NDMyMSAq IGludGVydmFsICcxcyciCisJKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20g bm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShhOjp0ZXh0KSIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lKTsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAk b2Zmc2V0LCAkaXNfcGFyYWxsZWwsICdDT01NSVQnKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQo ZXh0cmFjdChlcG9jaCBmcm9tIGMpID0gOTg3NjU0MzIxKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIKKwkpOworCWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKKwkJJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbGx5IGNoYW5nZWQgZGF0YScpOworCisJIyBDbGVh bnVwIHRoZSB0ZXN0IGRhdGEKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hl ciBub2RlCiBteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoJ3B1Ymxpc2hlcicpOwogJG5vZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcg PT4gJ2xvZ2ljYWwnKTsKQEAgLTI2LDE3ICsxNDgsMjcgQEAgJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CiAJIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMSwgJ2ZvbycpLCAoMiwgJ2JhcicpIik7 CiAKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUg dGVzdF90YWJfMiAoYSBpbnQpIik7CisKICMgU2V0dXAgc3RydWN0dXJlIG9uIHN1YnNjcmliZXIK ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgVEFCTEUg dGVzdF90YWIgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQsIGMgdGltZXN0YW1wdHogREVGQVVM VCBub3coKSwgZCBiaWdpbnQgREVGQVVMVCA5OTkpIgogKTsKIAorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YWJfMiAoYSBpbnQpIik7 Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFVOSVFV RSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFiXzIoYSkiKTsKKwogIyBTZXR1cCBsb2dpY2FsIHJl cGxpY2F0aW9uCiBteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5z dHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIi KTsKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9wdWIgRk9SIFRBQkxFIHRlc3RfdGFiLCB0ZXN0 X3RhYl8yIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBtb2RlICdvbicKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViIENPTk5FQ1RJT04gJyRw dWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJyBQVUJMSUNBVElPTiB0 YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSw2ICsxODEsNDMgQEAgbXkg JHJlc3VsdCA9CiAJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZS T00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0 YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVi bGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3Bh cmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRw aWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlk IEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBu YW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCispOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0 cmVhbWluZyA9IHBhcmFsbGVsLCBiaW5hcnkgPSBvZmYpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3 aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQ VElPTiI7CisKKyMgV2UgbmVlZCB0byBjaGVjayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRo ZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFzCisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBT bywgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9j b25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5v ZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0 IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOworCisjIFRlc3QgdGhhdCB0aGUg ZGVhZGxvY2sgaXMgZGV0ZWN0ZWQgYW1vbmcgdGhlIGxlYWRlciBhbmQgcGFyYWxsZWwgYXBwbHkK KyMgd29ya2Vycy4KKworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJkZWFkbG9ja190aW1lb3V0ID0gMTBtcyIpOworJG5vZGVfc3Vic2NyaWJlci0+cmVs b2FkOworCisjIFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRh a2VuIGVmZmVjdC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NF TEVDVCAxfSk7CisKICMgSW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4 Y2VlZGluZyB0aGUgNjRrQiBsaW1pdC4KIG15ICRpbiAgPSAnJzsKIG15ICRvdXQgPSAnJzsKQEAg LTU4LDczICsyMjcsOTAgQEAgbXkgJHRpbWVyID0gSVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0X2RlZmF1bHQpOwogbXkgJGggPSAkbm9kZV9wdWJsaXNo ZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAogCW9u X2Vycm9yX3N0b3AgPT4gMCk7CiAKKyMgQ29uZmlybSBpZiBhIGRlYWRsb2NrIGJldHdlZW4gdGhl IGxlYWRlciBhcHBseSB3b3JrZXIgYW5kIHRoZSBwYXJhbGxlbCBhcHBseQorIyB3b3JrZXIgY2Fu IGJlIGRldGVjdGVkLgorCitteSAkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmls ZTsKKwogJGluIC49IHF7CiBCRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBt ZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLVVQREFURSB0 ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CitJTlNFUlQgSU5UTyB0ZXN0X3RhYl8yIFNFTEVD VCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHMoaSk7CiB9OwogJGgtPnB1bXBfbmI7 CiAKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAwMSwgOTk5OSkgcyhpKTsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEg PiA1MDAwOwotQ09NTUlUOwotfSk7CisjIEVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3 b3JrZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5kIGJlZm9yZSB0aGUKKyMgbGVhZGVyIHdv cmtlci4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwlxci9ERUJVRzogKCBbQS1a MC05XSs6KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0aGUgc3RyZWFtaW5nIGNodW5rLywK Kwkkb2Zmc2V0KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRlc3RfdGFiXzIgdmFsdWVzKDEpIik7CiAKICRpbiAuPSBxewogQ09NTUlUOwog XHEKIH07Ci0kaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRoZSBuZXh0IHRlc3QgZmFpbCwg c28gaWdub3JlIHRoZW0gaGVyZQorJGgtPmZpbmlzaDsKIAorJG5vZGVfc3Vic2NyaWJlci0+d2Fp dF9mb3JfbG9nKHFyL0VSUk9SOiAoIFtBLVowLTldKzopPyBkZWFkbG9jayBkZXRlY3RlZC8sCisJ JG9mZnNldCk7CisKKyMgSW4gb3JkZXIgZm9yIHRoZSB0d28gdHJhbnNhY3Rpb25zIHRvIGJlIGNv bXBsZXRlZCBub3JtYWxseSB3aXRob3V0IGNhdXNpbmcKKyMgY29uZmxpY3RzIGR1ZSB0byB0aGUg dW5pcXVlIGluZGV4LCB3ZSB0ZW1wb3JhcmlseSBkcm9wIGl0LgorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIElOREVYIGlkeF90YWIiKTsKKworIyBXYWl0IGZv ciB0aGlzIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB0byBiZSBhcHBsaWVkIGluIHRoZSBhcHBseSB3 b3JrZXIuCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwogCiAk cmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK LWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwgJ2NoZWNrIGV4dHJhIGNvbHVtbnMgY29u dGFpbiBsb2NhbCBkZWZhdWx0cycpOworICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiXzIiKTsKK2lzKCRyZXN1bHQs IHFxKDUwMDEpLCAnZGF0YSByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIgYWZ0ZXIgZHJvcHBpbmcg aW5kZXgnKTsKIAotIyBUZXN0IHRoZSBzdHJlYW1pbmcgaW4gYmluYXJ5IG1vZGUKKyMgQ2xlYW4g dXAgdGVzdCBkYXRhIGZyb20gdGhlIGVudmlyb25tZW50LgorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlRSVU5DQVRFIFRBQkxFIHRlc3RfdGFiXzIiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUIChi aW5hcnkgPSBvbikiKTsKKwkiQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfdGFiIG9uIHRlc3RfdGFi XzIoYSkiKTsKIAotIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4 Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0 Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAwMSwgMTAwMDApIHMoaSk7Ci1VUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVz dF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7CisjIENvbmZpcm0gaWYgYSBk ZWFkbG9jayBiZXR3ZWVuIHR3byBwYXJhbGxlbCBhcHBseSB3b3JrZXJzIGNhbiBiZSBkZXRlY3Rl ZC4KIAotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKyMgQ2hl Y2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorJG9mZnNldCA9IC1zICRub2RlX3N1 YnNjcmliZXItPmxvZ2ZpbGU7CiAKLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9 IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoNjY2N3w2NjY3fDY2NjcpLCAn Y2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7CiskaW4gLj0gcXsK K0JFR0lOOworSU5TRVJUIElOVE8gdGVzdF90YWJfMiBTRUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCA1MDAwKSBzKGkpOworfTsKKyRoLT5wdW1wX25iOworCisjIEVuc3VyZSB0aGF0IHRo ZSBmaXJzdCBwYXJhbGxlbCBhcHBseSB3b3JrZXIgZXhlY3V0ZXMgdGhlIGluc2VydCBjb21tYW5k CisjIGJlZm9yZSB0aGUgc2Vjb25kIG9uZS4KKyRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xv ZygKKwlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gYXBwbGllZCBbMC05XSsgY2hhbmdlcyBpbiB0 aGUgc3RyZWFtaW5nIGNodW5rLywKKwkkb2Zmc2V0KTsKIAotIyBDaGFuZ2UgdGhlIGxvY2FsIHZh bHVlcyBvZiB0aGUgZXh0cmEgY29sdW1ucyBvbiB0aGUgc3Vic2NyaWJlciwKLSMgdXBkYXRlIHB1 Ymxpc2hlciwgYW5kIGNoZWNrIHRoYXQgc3Vic2NyaWJlciByZXRhaW5zIHRoZSBleHBlY3RlZAot IyB2YWx1ZXMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlv bnMgYmVoYXZlCi0jIHByb3Blcmx5IGFmdGVyIGEgc3RyZWFtaW5nIHRyYW5zYWN0aW9uLgotJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlVQREFURSB0ZXN0X3RhYiBT RVQgYyA9ICdlcG9jaCc6OnRpbWVzdGFtcHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIK LSk7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVz dF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCkiKTsKKwkiSU5TRVJUIElOVE8gdGVzdF90YWJfMiBT RUxFQ1QgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCA1MDAwKSBzKGkpIik7CiAKKyRpbiAuPSBx eworQ09NTUlUOworXHEKK307CiskaC0+ZmluaXNoOworCiskbm9kZV9zdWJzY3JpYmVyLT53YWl0 X2Zvcl9sb2cocXIvRVJST1I6ICggW0EtWjAtOV0rOik/IGRlYWRsb2NrIGRldGVjdGVkLywKKwkk b2Zmc2V0KTsKKworIyBJbiBvcmRlciBmb3IgdGhlIHR3byB0cmFuc2FjdGlvbnMgdG8gYmUgY29t cGxldGVkIG5vcm1hbGx5IHdpdGhvdXQgY2F1c2luZworIyBjb25mbGljdHMgZHVlIHRvIHRoZSB1 bmlxdWUgaW5kZXgsIHdlIHRlbXBvcmFyaWx5IGRyb3AgaXQuCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgSU5ERVggaWR4X3RhYiIpOworCisjIFdhaXQgZm9y IHRoaXMgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIHRvIGJlIGFwcGxpZWQgaW4gdGhlIGFwcGx5IHdv cmtlci4KICRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CiAKLSRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3Vu dChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIgotKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2 NjY3KSwKLQknY2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRh Jyk7CiskcmVzdWx0ID0KKyAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYl8yIik7CitpcygkcmVzdWx0LCBxcSgxMDAw MCksICdkYXRhIHJlcGxpY2F0ZWQgdG8gc3Vic2NyaWJlciBhZnRlciBkcm9wcGluZyBpbmRleCcp OwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsIGIv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVhbV9zdWJ4YWN0LnBsCmluZGV4IGRiMjlm MDg5YTAuLjdlMzc0ZjY4N2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx Nl9zdHJlYW1fc3VieGFjdC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZfc3Ry ZWFtX3N1YnhhY3QucGwKQEAgLTgsNiArOCw3MyBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCisj IENoZWNrIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5IHdvcmtlciBoYXMgZmluaXNoZWQgYXBwbHlp bmcgdGhlIHN0cmVhbWluZworIyB0cmFuc2FjdGlvbi4KK3N1YiBjaGVja19wYXJhbGxlbF9sb2cK K3sKKwlteSAoJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAkdHlwZSkg PSBAXzsKKworCWlmICgkaXNfcGFyYWxsZWwpCisJeworCQkkbm9kZV9zdWJzY3JpYmVyLT53YWl0 X2Zvcl9sb2coCisJCQlxci9ERUJVRzogKCBbQS1aMC05XSs6KT8gZmluaXNoZWQgcHJvY2Vzc2lu ZyB0aGUgU1RSRUFNICR0eXBlIGNvbW1hbmQvLAorCQkJJG9mZnNldCk7CisJfQorfQorCisjIENv bW1vbiB0ZXN0IHN0ZXBzIGZvciBib3RoIHRoZSBzdHJlYW1pbmc9b24gYW5kIHN0cmVhbWluZz1w YXJhbGxlbCBjYXNlcy4KK3N1YiB0ZXN0X3N0cmVhbWluZworeworCW15ICgkbm9kZV9wdWJsaXNo ZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAkaXNfcGFyYWxsZWwpID0gQF87CisKKwlt eSAkb2Zmc2V0ID0gMDsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9u LgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBJbnNlcnQs IHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7CisJVVBE QVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHMxOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoNiwgOCkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlT QVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5LCAxMSkgcyhpKTsKKwlVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczM7CisJSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMiwgMTQpIHMoaSk7 CisJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlE RUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJU0FWRVBPSU5UIHM0Owor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMTUsIDE3KSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBX SEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9m ZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisKKwlteSAkcmVzdWx0ID0KKwkgICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopLCBj b3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFx KDEyfDEyfDEyKSwKKwkJJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0 cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJ KTsKKworCSMgQ2xlYW51cCB0aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIChhID4gMikiKTsK Kwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworfQorCiAjIENy ZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxv d3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNyw2ICsxMDQsMTAgQEAgJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFBVQkxJQ0FUSU9OIHRhcF9w dWIgRk9SIFRBQkxFIHRlc3RfdGFiIik7CiAKIG15ICRhcHBuYW1lID0gJ3RhcF9zdWInOworCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IHVzaW5nIHN0cmVhbWluZyBt b2RlICdvbicKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3Vi IENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1l JyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC00OSw0 MSArMTIwLDM0IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdj aGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgSW5zZXJ0 LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci1VUERBVEUg dGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00g dGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2LCA4 KSBzKGkpOwotVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0g MDsKLURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBz MjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoOSwgMTEpIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikg V0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMiwgMTQpIHMoaSk7Ci1VUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90 YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FWRVBPSU5UIHM0OwotSU5TRVJUIElOVE8gdGVzdF90 YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNSwgMTcpIHMo aSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Ci0K LSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQg PQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJl c3VsdCwgcXEoMTJ8MTJ8MTIpLAotCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJl ciBpbiBzdHJlYW1pbmcgbW9kZSBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1 bHRzJwordGVzdF9zdHJlYW1pbmcoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAk YXBwbmFtZSwgMCk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ3BhcmFsbGVsJworIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCiApOwogCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxU RVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOworCisk bm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBp ZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9u YW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisgICkKKyAgb3IgZGll CisgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBj aGFuZ2luZyBTVUJTQ1JJUFRJT04iOworCisjIFdlIG5lZWQgdG8gY2hlY2sgREVCVUcgbG9ncyB0 byBlbnN1cmUgdGhhdCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcworIyBhcHBsaWVkIHRo ZSB0cmFuc2FjdGlvbi4gU28sIGJ1bXAgdXAgdGhlIGxvZyB2ZXJib3NpdHkuCiskbm9kZV9zdWJz Y3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19taW5fbWVzc2FnZXMg PSBkZWJ1ZzEiKTsKKyRub2RlX3N1YnNjcmliZXItPnJlbG9hZDsKKworIyBSdW4gYSBxdWVyeSB0 byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVsb2FkIGhhcyB0YWtlbiBlZmZlY3QuCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXtTRUxFQ1QgMX0pOworCit0ZXN0X3N0cmVh bWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAxKTsKKwog JG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKIApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbAppbmRleCA4NjZmMTUxMmU0Li5mYjAz YjcwOGI0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2Rk bC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTdfc3RyZWFtX2RkbC5wbApAQCAt Miw2ICsyLDkgQEAKICMgQ29weXJpZ2h0IChjKSAyMDIxLTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCiAKICMgVGVzdCBzdHJlYW1pbmcgb2YgbGFyZ2UgdHJhbnNhY3Rp b24gd2l0aCBEREwgYW5kIHN1YnRyYW5zYWN0aW9ucworIworIyBUaGlzIGZpbGUgaXMgbWFpbmx5 IHRvIHRlc3QgdGhlIERETC9ETUwgaW50ZXJhY3Rpb24gb2YgdGhlIHB1Ymxpc2hlciBzaWRlLAor IyBzbyB3ZSBkaWRuJ3QgYWRkIGEgcGFyYWxsZWwgYXBwbHkgdmVyc2lvbiBmb3IgdGhlIHRlc3Rz IGluIHRoaXMgZmlsZS4KIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAx OF9zdHJlYW1fc3VieGFjdF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbAppbmRleCAxNDU4YzNhMGZjLi4yNDQyODEzMWY3IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQu cGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0 LnBsCkBAIC04LDYgKzgsMTI0IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhh dCB0aGUgcGFyYWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyB0aGUgc3Ry ZWFtaW5nCisjIHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgk bm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICR0eXBlKSA9IEBfOworCisJ aWYgKCRpc19wYXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygK KwkJCXFyL0RFQlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJF QU0gJHR5cGUgY29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9CisKKyMgQ29tbW9uIHRlc3Qg c3RlcHMgZm9yIGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVsIGNh c2VzLgorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVf c3Vic2NyaWJlciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQg PSAwOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNl dCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIHN0cmVhbWVkIHRyYW5zYWN0 aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoMywgbWQ1KDM6OnRleHQpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCkpOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDUsIG1kNSg1Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHMzOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNiwgbWQ1KDY6OnRleHQpKTsKKwlST0xMQkFD SyBUTyBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDcsIG1kNSg3Ojp0ZXh0KSk7 CisJUk9MTEJBQ0sgVE8gczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg4LCBtZDUo ODo6dGV4dCkpOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDksIG1kNSg5Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHM1OworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFZBTFVFUyAoMTAsIG1kNSgxMDo6dGV4dCkpOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9s b2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisK KwlteSAkcmVzdWx0ID0KKwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoNnwwKSwKKwkJJ2NoZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVj dGVkIG9uIHN1YnNjcmliZXIgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0 cycKKwkpOworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9m ZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkjIHN0cmVhbWVkIHRyYW5z YWN0aW9uIHdpdGggc3Vic2NyaWJlciByZWNlaXZpbmcgb3V0IG9mIG9yZGVyCisJIyBzdWJ0cmFu c2FjdGlvbiBST0xMQkFDS3MKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3Rn cmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDExLCBtZDUo MTE6OnRleHQpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVT ICgxMiwgbWQ1KDEyOjp0ZXh0KSk7CisJU0FWRVBPSU5UIHMyOworCUlOU0VSVCBJTlRPIHRlc3Rf dGFiIFZBTFVFUyAoMTMsIG1kNSgxMzo6dGV4dCkpOworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE0LCBtZDUoMTQ6OnRleHQpKTsKKwlSRUxFQVNFIHMyOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTUsIG1kNSgxNTo6dGV4dCkpOworCVJPTExC QUNLIFRPIHMxOworCUNPTU1JVDsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJl ciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnQ09NTUlUJyk7CisKKwkkcmVzdWx0ID0KKwkgICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCop LCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoN3wwKSwKKwkJJ2No ZWNrIHJvbGxiYWNrIHRvIHNhdmVwb2ludCB3YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsK KworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAt cyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBzdHJlYW1lZCB0cmFuc2FjdGlvbiB3 aXRoIHN1YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCisJJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIg VkFMVUVTICgxNiwgbWQ1KDE2Ojp0ZXh0KSk7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRP IHRlc3RfdGFiIFZBTFVFUyAoMTcsIG1kNSgxNzo6dGV4dCkpOworCVNBVkVQT0lOVCBzMjsKKwlJ TlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE4LCBtZDUoMTg6OnRleHQpKTsKKwlST0xMQkFD SzsKKwl9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7 CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3Bh cmFsbGVsLCAnQUJPUlQnKTsKKworCSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVz dF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSg3fDApLCAnY2hlY2sgcm9sbGJhY2sgd2FzIHJlZmxl Y3RlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIENsZWFudXAgdGhlIHRlc3QgZGF0YQorCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSAoYSA+IDIpIik7CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lKTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hl ciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9w dWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzYsNiAr MTU0LDEwIEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFU RSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFt ZSA9ICd0YXBfc3ViJzsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVz dCB1c2luZyBzdHJlYW1pbmcgbW9kZSAnb24nCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGlj YXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcg PSBvbikiCiApOwpAQCAtNDgsODEgKzE3MCwzMyBAQCBteSAkcmVzdWx0ID0KIAkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDApLCAn Y2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIHN0cmVh bWVkIHRyYW5zYWN0aW9uIHdpdGggRERMLCBETUwgYW5kIFJPTExCQUNLcwotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVz dF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElO VE8gdGVzdF90YWIgVkFMVUVTICg0LCBtZDUoNDo6dGV4dCkpOwotU0FWRVBPSU5UIHMyOwotSU5T RVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg1LCBtZDUoNTo6dGV4dCkpOwotU0FWRVBPSU5UIHMz OwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg2LCBtZDUoNjo6dGV4dCkpOwotUk9MTEJB Q0sgVE8gczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDcsIG1kNSg3Ojp0ZXh0KSk7 Ci1ST0xMQkFDSyBUTyBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOCwgbWQ1KDg6 OnRleHQpKTsKLVNBVkVQT0lOVCBzNDsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOSwg bWQ1KDk6OnRleHQpKTsKLVNBVkVQT0lOVCBzNTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVF UyAoMTAsIG1kNSgxMDo6dGV4dCkpOwotQ09NTUlUOwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBG Uk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg2fDApLAotCSdjaGVjayByb2xsYmFjayB0 byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5z IGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIs ICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lLCAwKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFyYWxsZWwn CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBpZCA9ICRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFO RCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7CiAKLSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0 aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIgc3VidHJhbnNhY3Rpb24KLSMgUk9M TEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVH SU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDExLCBtZDUoMTE6OnRleHQpKTsKLVNB VkVQT0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTIsIG1kNSgxMjo6dGV4 dCkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxMywgbWQ1 KDEzOjp0ZXh0KSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDE0LCBtZDUoMTQ6OnRleHQpKTsKLVJFTEVBU0UgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBW QUxVRVMgKDE1LCBtZDUoMTU6OnRleHQpKTsKLVJPTExCQUNLIFRPIHMxOwotQ09NTUlUOwotfSk7 Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1 bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNU IGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSg3fDAp LAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJzY3Jp YmVyJyk7Ci0KLSMgc3RyZWFtZWQgdHJhbnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2Vpdmlu ZyByb2xsYmFjawotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsK LUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgxNiwgbWQ1KDE2Ojp0ZXh0KSk7 Ci1TQVZFUE9JTlQgczE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDE3LCBtZDUoMTc6 OnRleHQpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoMTgs IG1kNSgxODo6dGV4dCkpOwotUk9MTEJBQ0s7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00g dGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDd8MCksICdjaGVjayByb2xsYmFjayB3YXMgcmVm bGVjdGVkIG9uIHN1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gcGFy YWxsZWwpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJF IGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIK KyAgKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byBy ZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFNVQlNDUklQVElPTiI7CisKKyMgV2UgbmVlZCB0byBjaGVj ayBERUJVRyBsb2dzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJhbGxlbCBhcHBseSB3b3JrZXIgaGFz CisjIGFwcGxpZWQgdGhlIHRyYW5zYWN0aW9uLiBTbywgYnVtcCB1cCB0aGUgbG9nIHZlcmJvc2l0 eS4KKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9n X21pbl9tZXNzYWdlcyA9IGRlYnVnMSIpOworJG5vZGVfc3Vic2NyaWJlci0+cmVsb2FkOworCisj IFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVj dC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7 CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFw cG5hbWUsIDEpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5z dG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4 YWN0X2RkbF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOV9zdHJlYW1fc3Vi eGFjdF9kZGxfYWJvcnQucGwKaW5kZXggYzY3MTljMWFmOC4uMzUzZTgyNmE5MyAxMDA2NDQKLS0t IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5w bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fi b3J0LnBsCkBAIC0zLDYgKzMsOSBAQAogCiAjIFRlc3Qgc3RyZWFtaW5nIG9mIHRyYW5zYWN0aW9u IHdpdGggc3VidHJhbnNhY3Rpb25zLCBERExzLCBETUxzLCBhbmQKICMgcm9sbGJhY2tzCisjCisj IFRoaXMgZmlsZSBpcyBtYWlubHkgdG8gdGVzdCB0aGUgRERML0RNTCBpbnRlcmFjdGlvbiBvZiB0 aGUgcHVibGlzaGVyIHNpZGUsCisjIHNvIHdlIGRpZG4ndCBhZGQgYSBwYXJhbGxlbCBhcHBseSB2 ZXJzaW9uIGZvciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNlIHN0cmljdDsKIHVzZSB3YXJu aW5nczsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2NhZGUucGwgYi9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAppbmRleCA3YTc5N2YzN2JhLi40MTAy YWNjZTkyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2Vf Y2FzY2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2Fz Y2FkZS5wbApAQCAtNSw2ICs1LDggQEAKICMKICMgSW5jbHVkZXMgdGVzdHMgZm9yIG9wdGlvbnMg MlBDIChub3Qtc3RyZWFtaW5nKSBhbmQgYWxzbyBmb3IgMlBDIChzdHJlYW1pbmcpLgogIworIyBU d28tcGhhc2UgYW5kIHBhcmFsbGVsIGFwcGx5IHdpbGwgYmUgdGVzdGVkIGluIDAyM190d29waGFz ZV9zdHJlYW0sIHNvIHdlCisjIGRpZG4ndCBhZGQgYSBwYXJhbGxlbCBhcHBseSB2ZXJzaW9uIGZv ciB0aGUgdGVzdHMgaW4gdGhpcyBmaWxlLgogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIHVz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAyM190d29waGFzZV9zdHJlYW0ucGwKaW5kZXggYTE5MTEyOWI5ZC4uZDU2ZjJiN2MzZSAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbAor KysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsCkBAIC04 LDYgKzgsMjg3IEBAIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7CiAKKyMgQ2hlY2sgdGhhdCB0aGUgcGFy YWxsZWwgYXBwbHkgd29ya2VyIGhhcyBmaW5pc2hlZCBhcHBseWluZyB0aGUgc3RyZWFtaW5nCisj IHRyYW5zYWN0aW9uLgorc3ViIGNoZWNrX3BhcmFsbGVsX2xvZworeworCW15ICgkbm9kZV9zdWJz Y3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxsZWwsICR0eXBlKSA9IEBfOworCisJaWYgKCRpc19w YXJhbGxlbCkKKwl7CisJCSRub2RlX3N1YnNjcmliZXItPndhaXRfZm9yX2xvZygKKwkJCXFyL0RF QlVHOiAoIFtBLVowLTldKzopPyBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBTVFJFQU0gJHR5cGUg Y29tbWFuZC8sCisJCQkkb2Zmc2V0KTsKKwl9Cit9CisKKyMgQ29tbW9uIHRlc3Qgc3RlcHMgZm9y IGJvdGggdGhlIHN0cmVhbWluZz1vbiBhbmQgc3RyZWFtaW5nPXBhcmFsbGVsIGNhc2VzLgorc3Vi IHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJl ciwgJGFwcG5hbWUsICRpc19wYXJhbGxlbCkgPSBAXzsKKworCW15ICRvZmZzZXQgPSAwOworCisJ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIENP TU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rp b24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRh dGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIENoZWNrIHRoZSBzdWJzY3JpYmVy IGxvZyBmcm9tIG5vdyBvbi4KKwkkb2Zmc2V0ID0gLXMgJG5vZGVfc3Vic2NyaWJlci0+bG9nZmls ZTsKKworCSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNhdGVkIHRvIHN1YnNjcmliZXIKKwkj IEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBz KGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAw OworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUg VFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVf c3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVj ayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwlt eSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBx cSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgMlBD IHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVkCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hl Y2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVz dWx0LCBxcSg0fDR8NCksCisJCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBv biBzdWJzY3JpYmVyLCBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwor CSk7CisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3Vs dCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOworCisJ IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJFUEFSRSAvIFJP TExCQUNLIFBSRVBBUkVELgorCSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3 aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgorCSMgMi4gRGF0YSBpcyBzdHJlYW1l ZCB1c2luZyAyUEMuCisJIyAzLiBEbyByb2xsYmFjayBwcmVwYXJlZC4KKwkjCisJIyBFeHBlY3Qg ZGF0YSByb2xscyBiYWNrIGxlYXZpbmcgb25seSB0aGUgb3JpZ2luYWwgMiByb3dzLgorCSMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBl eGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4g MjsiKTsKKworCSMgQ2hlY2sgdGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZz ZXQgPSAtcyAkbm9kZV9zdWJzY3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBk YXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAor CQkncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERB VEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04g J3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0 Y2h1cCgkYXBwbmFtZSk7CisKKwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwg JG9mZnNldCwgJGlzX3BhcmFsbGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5z YWN0aW9uIGlzIGluIHByZXBhcmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikg RlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0 aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdl dHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJS T0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBj b3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMnwyfDIpLAor CQknUm93cyBpbnNlcnRlZCBieSAyUEMgYXJlIHJvbGxlZCBiYWNrLCBsZWF2aW5nIG9ubHkgdGhl IG9yaWdpbmFsIDIgcm93cycKKwkpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9u IHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIENo ZWNrIHRoYXQgMlBDIENPTU1JVCBQUkVQQVJFRCBpcyBkZWNvZGVkIHByb3Blcmx5IG9uIGNyYXNo IHJlc3RhcnQuCisJIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIHNvbWUgcm93cy4KKwkj IDIuIFRoZW4gc2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMgY29t bWl0dGVkLgorCSMgMy4gQWZ0ZXIgc2VydmVycyBhcmUgcmVzdGFydGVkIHRoZSBwZW5kaW5nIHRy YW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KKwkjCisJIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGlj YXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KKwkjIE5vdGU6IGJvdGgg cHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGRvIGNyYXNoL3Jlc3RhcnQuCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBDaGVjayB0aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBu b3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNjcmliZXItPmxvZ2ZpbGU7CisKKwkkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlO U0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMywgNSkgcyhpKTsKKwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJF IG1vZChhLDIpID0gMDsKKwkJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAw OworCQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9k ZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKKwkkbm9kZV9wdWJsaXNoZXItPnN0b3Ao J2ltbWVkaWF0ZScpOworCisJJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKwkkbm9kZV9zdWJzY3Jp YmVyLT5zdGFydDsKKworCWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zm c2V0LCAkaXNfcGFyYWxsZWwsICdQUkVQQVJFJyk7CisKKwkjIGNvbW1pdCBwb3N0IHRoZSByZXN0 YXJ0CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNPTU1JVCBQ UkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKKwkk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJ aXMoJHJlc3VsdCwgcXEoNHw0fDQpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21t aXR0ZWQgb24gc3Vic2NyaWJlciwgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZh dWx0cycKKwkpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5T RVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIyAx LiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9u IHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEg c2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KKwkj IDQuIFRoZW4gZG8gYSBST0xMQkFDSyBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgdGhlIDJQQyBk YXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgorCSMg KHRoZSBvcmlnaW5hbCAyICsgaW5zZXJ0ZWQgMSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3 aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBDaGVjayB0 aGUgc3Vic2NyaWJlciBsb2cgZnJvbSBub3cgb24uCisJJG9mZnNldCA9IC1zICRub2RlX3N1YnNj cmliZXItPmxvZ2ZpbGU7CisKKwkjIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21l IHJvd3MuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ CUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9 IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWIn O30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor CWNoZWNrX3BhcmFsbGVsX2xvZygkbm9kZV9zdWJzY3JpYmVyLCAkb2Zmc2V0LCAkaXNfcGFyYWxs ZWwsICdQUkVQQVJFJyk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFy ZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hh Y3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24g c3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChub3cgd2UgYXJl IG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKKwkjIE5vdGU6IHRoZSAyUEMgdHJhbnNh Y3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBm b3IgYSBzZXBhcmF0ZSBwcmltYXJ5IGtleQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTk5LCAnZm9vYmFy JykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAorCSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVw YXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmli ZXIsCisJIyBidXQgdGhlIGV4dHJhIElOU0VSVCBvdXRzaWRlIG9mIHRoZSAyUEMgc3RpbGwgd2Fz IHJlcGxpY2F0ZWQKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoM3wzfDMpLAorCQknY2hlY2sgdGhlIG91dHNp ZGUgaW5zZXJ0IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOworCisJJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNvdW50KCopIEZS T00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlv biBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKwkjIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1J VCBQUkVQQVJFRC4KKwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2gg YXJlIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNp bmcgMlBDLgorCSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVy IHRoZSBQUkVQQVJFLgorCSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KKwkjCisJIyBF eHBlY3QgMlBDIGRhdGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgorCSMg KHRoZSAzMzM0ICsgaW5zZXJ0ZWQgMSA9IDMzMzUpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAo d2lsbCBiZSByZXBsaWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgQ2hlY2sg dGhlIHN1YnNjcmliZXIgbG9nIGZyb20gbm93IG9uLgorCSRvZmZzZXQgPSAtcyAkbm9kZV9zdWJz Y3JpYmVyLT5sb2dmaWxlOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29t ZSByb3dzLgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxewor CQlCRUdJTjsKKwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygzLCA1KSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVS RSBtb2QoYSwzKSA9IDA7CisJCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFi Jzt9KTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisK KwljaGVja19wYXJhbGxlbF9sb2coJG5vZGVfc3Vic2NyaWJlciwgJG9mZnNldCwgJGlzX3BhcmFs bGVsLCAnUFJFUEFSRScpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBh cmVkIHN0YXRlIG9uIHN1YnNjcmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94 YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHByZXBhcmVkIG9u IHN1YnNjcmliZXInKTsKKworCSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93IHdlIGFy ZSBvdXRzaWRlIG9mIHRoZSAyUEMgdHJhbnNhY3Rpb24pCisJIyBOb3RlOiB0aGUgMlBDIHRyYW5z YWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBpbnNlcnQgaXMg Zm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zvb2Jh cicpIik7CisKKwkjIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJl cGFyZWRfdGFiJzsiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBw bmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNj cmliZXIKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3Rf dGFiIik7CisJaXMoJHJlc3VsdCwgcXEoNXw1fDUpLAorCQknUm93cyBpbnNlcnRlZCBieSAyUEMg KGFzIHdlbGwgYXMgb3V0c2lkZSBpbnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIs IGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKKworCSRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAn dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMgQ2xlYW51cCB0 aGUgdGVzdCBkYXRhCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJ IkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCSRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cit9CisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICMgU2V0dXAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTQ4 LDYgKzMyOSwxMCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJD UkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFw cG5hbWUgPSAndGFwX3N1Yic7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj IFRlc3QgdXNpbmcgc3RyZWFtaW5nIG1vZGUgJ29uJworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCAiCiAJ Q1JFQVRFIFNVQlNDUklQVElPTiB0YXBfc3ViCkBAIC02NCwyMzYgKzM0OSwzOCBAQCBteSAkdHdv cGhhc2VfcXVlcnkgPQogJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdy ZXMnLCAkdHdvcGhhc2VfcXVlcnkpCiAgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcg Zm9yIHN1YnNjcmliZXIgdG8gZW5hYmxlIHR3b3BoYXNlIjsKIAotIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwogIyBDaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3Jp YmVyCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBteSAkcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCBjb3VudCgqKSwgY291 bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKIGlzKCRyZXN1bHQsIHFxKDJ8 MnwyKSwgJ2NoZWNrIGluaXRpYWwgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXInKTsKIAot IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUZXN0IDJQQyBQUkVQQVJFIC8gQ09N TUlUIFBSRVBBUkVELgotIyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5zYWN0aW9u LgotIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KLSMKLSMgRXhwZWN0IGFsbCBkYXRhIGlz IHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlciBzaWRlIGFmdGVyIHRoZSBjb21taXQuCi0jIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgY2hlY2sgdGhhdCAyUEMgZ2V0cyByZXBsaWNh dGVkIHRvIHN1YnNjcmliZXIKLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3Mu Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotCUJFR0lOOwot CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hF UkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0g MDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0 cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2Fj dGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdl dHMgY29tbWl0dGVkCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJD T01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDApOwogCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoNHw0fDQp LAotCSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBh bmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCB1c2luZyBzdHJlYW1pbmcgbW9kZSAncGFy YWxsZWwnCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbXkgJG9sZHBp ZCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQg RlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3By ZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21t aXR0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0jIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQQVJFRC4KLSMgMS4gVGFibGUgaXMg ZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVy LgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gRG8gcm9sbGJhY2sgcHJl cGFyZWQuCi0jCi0jIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5IHRoZSBvcmln aW5hbCAyIHJvd3MuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmlyc3Qs IGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVkKQot JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBz b21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewot CUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBt ZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1v ZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7 Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMgY2hl Y2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCi0k cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVD VCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMSks ICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ci0KLSMgMlBDIHRyYW5z YWN0aW9uIGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRy YW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgyfDJ8Miks Ci0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGFyZSByb2xsZWQgYmFjaywgbGVhdmluZyBvbmx5IHRo ZSBvcmlnaW5hbCAyIHJvd3MnKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0 czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJz Y3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ2hlY2sgdGhh dCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVzdGFy dC4KLSMgMS4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBzb21lIHJvd3MuCi0jIDIuIFRoZW4g c2VydmVyIGNyYXNoZXMgYmVmb3JlIHRoZSAyUEMgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgot IyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSByZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24g aXMgY29tbWl0dGVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJz Y3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNvbW1pdC4KLSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5k IHN1YnNjcmliZXIgZG8gY3Jhc2gvcmVzdGFydC4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKLQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlC RUdJTjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1 KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwot Ci0kbm9kZV9zdWJzY3JpYmVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKLSRub2RlX3B1Ymxpc2hlci0+ c3RvcCgnaW1tZWRpYXRlJyk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c3RhcnQ7Ci0kbm9kZV9zdWJz Y3JpYmVyLT5zdGFydDsKIAotIyBjb21taXQgcG9zdCB0aGUgcmVzdGFydAotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBh cmVkX3RhYic7Iik7Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OwotCi0jIGNoZWNrIGluc2VydHMgYXJlIHZpc2libGUKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwg Y291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoNHw0fDQpLAot CSdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQg ZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEbyBJTlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJl Zm9yZSBST0xMQkFDSyBQUkVQQVJFRC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIg cm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0 cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNo IGlzIGFmdGVyIHRoZSBQUkVQQVJFLgotIyA0LiBUaGVuIGRvIGEgUk9MTEJBQ0sgUFJFUEFSRUQu Ci0jCi0jIEV4cGVjdCB0aGUgMlBDIGRhdGEgcm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dz IG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUgb3JpZ2luYWwgMiArIGluc2VydGVkIDEpLgotIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEg ZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUgcmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsi KTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgc29tZSByb3dzLgotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQg SU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDMsIDUpIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJF UEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMg cHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQg KG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3RlOiB0aGUg MlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUgdGhpcyBp bnNlcnQgaXMgZm9yIGEgc2VwYXJhdGUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTks ICdmb29iYXInKSIpOwotCi0jIDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0 X3ByZXBhcmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgk YXBwbmFtZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNj cmliZXIsCi0jIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBzdGlsbCB3 YXMgcmVwbGljYXRlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9N IHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzfDN8MyksICdjaGVjayB0aGUgb3V0c2lkZSBp bnNlcnQgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7Ci0KLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFi b3J0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0jIERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1JVCBQUkVQQVJF RC4KLSMgMS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGlj YXRlZCBvbiBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMg My4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJF LgotIyA0LiBUaGVuIGRvIGEgQ09NTUlUIFBSRVBBUkVELgotIwotIyBFeHBlY3QgMlBDIGRhdGEg KyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgotIyAodGhlIDMzMzQgKyBpbnNl cnRlZCAxID0gMzMzNSkuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRmly c3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBsaWNhdGVk KQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRl c3RfdGFiIFdIRVJFIGEgPiAyOyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0 ZSBzb21lIHJvd3MuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBx ewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNSkgcyhpKTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIg PSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJF IG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7 fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSMg Y2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVy Ci0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEo MSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9z dWIgU0VUKHN0cmVhbWluZyA9IHBhcmFsbGVsKSIpOwogCi0jIEluc2VydCBhIGRpZmZlcmVudCBy ZWNvcmQgKG5vdyB3ZSBhcmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQotIyBOb3Rl OiB0aGUgMlBDIHRyYW5zYWN0aW9uIHN0aWxsIGhvbGRzIHJvdyBsb2NrcyBzbyBtYWtlIHN1cmUg dGhpcyBpbnNlcnQgaXMgZm9yIGEgc2VwYXJhcmUgcHJpbWFyeSBrZXkKLSRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAo OTk5OTksICdmb29iYXInKSIpOworJG5vZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgIT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRp b24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVh bWluZyc7IgorICApCisgIG9yIGRpZQorICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFw cGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgU1VCU0NSSVBUSU9OIjsKIAotIyAyUEMgdHJh bnNhY3Rpb24gZ2V0cyBjb21taXR0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCi0JIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworIyBXZSBu ZWVkIHRvIGNoZWNrIERFQlVHIGxvZ3MgdG8gZW5zdXJlIHRoYXQgdGhlIHBhcmFsbGVsIGFwcGx5 IHdvcmtlciBoYXMKKyMgYXBwbGllZCB0aGUgdHJhbnNhY3Rpb24uIFNvLCBidW1wIHVwIHRoZSBs b2cgdmVyYm9zaXR5LgorJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsICJsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5y ZWxvYWQ7CiAKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Cisj IFJ1biBhIHF1ZXJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZWxvYWQgaGFzIHRha2VuIGVmZmVj dC4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxe1NFTEVDVCAxfSk7 CiAKLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcgot JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxF Q1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1p cygkcmVzdWx0LCBxcSg1fDV8NSksCi0JJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIChhcyB3ZWxsIGFz IG91dHNpZGUgaW5zZXJ0KSBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQgZXh0cmEg Y29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJwotKTsKLQotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMg Y29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hl ciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUsIDEpOwogCiAjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiAjIGNoZWNrIGFsbCB0aGUgY2xlYW51cApkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA1MGQ4NmNiMDFiLi4yM2JhZmVjNWY3IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMTQ3Myw2ICsxNDczLDcgQEAgTG9naWNhbFJlcFJlbElkCiBMb2dpY2FsUmVwUmVs TWFwRW50cnkKIExvZ2ljYWxSZXBSZWxhdGlvbgogTG9naWNhbFJlcFJvbGxiYWNrUHJlcGFyZWRU eG5EYXRhCitMb2dpY2FsUmVwU3RyZWFtQWJvcnREYXRhCiBMb2dpY2FsUmVwVHVwbGVEYXRhCiBM b2dpY2FsUmVwVHlwCiBMb2dpY2FsUmVwV29ya2VyCkBAIC0xODc2LDYgKzE4NzcsOSBAQCBQYWdl WExvZ1JlY1B0cgogUGFnZXRhYmxlRW50cnkKIFBhaXJzCiBQYXJhbGxlbEFwcGVuZFN0YXRlCitQ YXJhbGxlbEFwcGx5V29ya2VyRW50cnkKK1BhcmFsbGVsQXBwbHlXb3JrZXJJbmZvCitQYXJhbGxl bEFwcGx5V29ya2VyU2hhcmVkCiBQYXJhbGxlbEJpdG1hcEhlYXBTdGF0ZQogUGFyYWxsZWxCbG9j a1RhYmxlU2NhbkRlc2MKIFBhcmFsbGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXIKQEAgLTE4OTUsNiAr MTg5OSw3IEBAIFBhcmFsbGVsU2xvdFJlc3VsdEhhbmRsZXIKIFBhcmFsbGVsU3RhdGUKIFBhcmFs bGVsVGFibGVTY2FuRGVzYwogUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YQorUGFyYWxsZWxUcmFu c1N0YXRlCiBQYXJhbGxlbFZhY3V1bVN0YXRlCiBQYXJhbGxlbFdvcmtlckNvbnRleHQKIFBhcmFs bGVsV29ya2VySW5mbwpAQCAtMTkyNCw2ICsxOTI5LDcgQEAgUGFyc2VyU3RhdGUKIFBhcnRDbGF1 c2VJbmZvCiBQYXJ0Q2xhdXNlTWF0Y2hTdGF0dXMKIFBhcnRDbGF1c2VUYXJnZXQKK1BhcnRpYWxG aWxlU2V0U3RhdGUKIFBhcnRpdGlvbkJvdW5kSW5mbwogUGFydGl0aW9uQm91bmRJbmZvRGF0YQog UGFydGl0aW9uQm91bmRTcGVjCkBAIC0yNzc0LDYgKzI3ODAsNyBAQCBUb2NFbnRyeQogVG9rZW5B dXhEYXRhCiBUb2tlbml6ZWRBdXRoTGluZQogVHJhY2tJdGVtCitUcmFuc0FwcGx5QWN0aW9uCiBU cmFuc0ludmFsaWRhdGlvbkluZm8KIFRyYW5zU3RhdGUKIFRyYW5zYWN0aW9uSWQKLS0gCjIuMjgu MC53aW5kb3dzLjEKCg== --000000000000d0710705f0f769de--