Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqre7-0023OV-1O for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Feb 2026 11:47:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vqre6-00E7HQ-26 for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Feb 2026 11:47:39 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vqre5-00E7Gz-28 for pgsql-hackers@lists.postgresql.org; Fri, 13 Feb 2026 11:47:39 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vqrds-00000000RGC-2GY9 for pgsql-hackers@postgresql.org; Fri, 13 Feb 2026 11:47:37 +0000 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-43638a33157so781698f8f.1 for ; Fri, 13 Feb 2026 03:47:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770983244; cv=none; d=google.com; s=arc-20240605; b=IFlJO5BT2KX65lL1dEoUXPCP2anGgo/LOOfs9eyHbiTciEWx4/OGiDYk4Y92DEDAUl iezWbKnys8i3ClogGb73RH0cgmuvWlN4Pr5HK5R0MPhfouiY1SHj5nXwZge7AfCObU0H U5lESOJWNtPgugSFjmlhvX27AWxhEOOBKyJicVjB0D1uFXJAxp7SynrcULVTVgO2zRVI Df7dPDvsjjQIn0InsdLfVgfGkdtmLdHNCm7fh5kr/M4O/8OhlwaG+EXe0I3CPPbqYCtT 5udI8Xq5Kfe1w72SxlQ5rfImu+2RMtdgquA0zPm9+HWhjWVFnJQxRJmjfeL1cPgLpwUb J6DA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=j1WcezPFKNsz7VJTbBA6Eyo+ekVrl0B/dZmE+iBjIRA=; fh=UEEZCpebS6m39vvmSQ6CjHm5sJrjpglVHNzjh1m91Co=; b=Ppndsh0A/0kq9O2SNfh4DEKIxo+o/EZnDTogqRhA/eqjRfggEwuRhgi+qBD36evv6y s/XjbO7QqMteOjPslif/ljdtIcWSgpflekQKz4KGLACPv9wZRPgFKN7rk5dqc37Q3FjC sAMSiH0+ICQ0tf2OvPodMdAMfeLqGECmFYc8CpNXEUW9dfCJzt9N++znn0yUESi1ETYB DZSjJUwRsilVq9KZFvdoM4SpQb/p/dMqnpnlYxUmfVRxdFr6pn5Gww+51cjIXlU7KWei /4EQ60iQAVohPn+fV4aPJvl22VNbWgx3mDb9Okx0O7ym5VkN5PK9ryexYiy/nam+Z1nB q0pA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770983244; x=1771588044; darn=postgresql.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=j1WcezPFKNsz7VJTbBA6Eyo+ekVrl0B/dZmE+iBjIRA=; b=kUQDMgmnpZeqRxyKX+0w//ERfs2DVccE9g0zzpeyMzRDKxZF9VzCy4FHTumngw0ptr yfNI+hIToLOwhITsgoO01TpUngjxCCr/sFJ3jotwnmRIPCxQIf4BDTl1l8YSG0EPzB58 mFF6Ulqc0KM+sbNA5r37mjPmijvxX/9fvYaiP+4O5ngoeEmsfS3M9gtwyyZF4AoHgqG/ Y0TDo7SrWz1mCL+BeNs0FtU9qfxMUT9ZRo1snX0EXdx2I4fhvp8VHoqlfA7MJCHz62hv Ghposllu1KXT69mhQJw3lciaDGs9Z+NqnMYecbF4mZhx7pqjv4UiVHrWOPk2K8S3S2zY wbcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770983244; x=1771588044; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=j1WcezPFKNsz7VJTbBA6Eyo+ekVrl0B/dZmE+iBjIRA=; b=S8r/veJHzQowbUf7jK2yXz0IsBRwlOjc2dwl5E6YnapPKpXLLTmEDvNsVATta0mmJV u6DvEQG+3NNFOEUVGeKhXB276vPwInrxMZkGx9WPny7Z7AtEDjwjwpQ9cnOgG2e70YNk dyXQHtoO76E8v4lwK5VEfzE5rreo21+OTHBnQfAq5LtBh77zmSUUNafhhk8X9YkG0wgK 05qHocVijLbUNUIJ1Bj1IE7sD0HSAAbjv0iRp+q7OIuMwQMYPovZpBlIkgCsOtqGiaOF 4WNb7GBUDHxEGEkrgHxTpdrb7fXTv6rHGORP4IGbDouQi7EpAdKmBDeFmFdVieTMqEi3 rRtA== X-Forwarded-Encrypted: i=1; AJvYcCVfvHlu9ksJe+RaKURLbAFcB1p4Ko4nfIyWHwO9cRf+MuN5/paAuCPH4mVbdN17st7XHRIHh8R86cHXC0Hc@postgresql.org X-Gm-Message-State: AOJu0YweLZiLQ8qmNiex1mdXJxBcKpp6vg9QCw2gcnpVuRPavpWnU0Eo Thn73dNQOfKPS7EJ6T7JoaOMAnoKAwpzjYW8YOpCjUnnR69JRe068J78XhBarMz1ZXn9eI0INCT E0kFUAnpm9j6xk6kR9IG/4D12w9iZMNo= X-Gm-Gg: AZuq6aLhGkRBw7JAR3ItCzFzenxTs6LWC8KtLq9FboJzWZNrP8r/6DPe6NUUHb1xkCU KR7/h0U1xZJw6ZB/8YLgJAgAX6deu/ZoVco3nmf3EAlEBfVQq++keasT26f7xPpx6H4VGACP3Ga QWS1meXgVDBtJVxfGZss/uaaKBbyJuGjTKvnLB1npnrNxIoB8M/PVEQXmYMN0eAEmvunnPs6eJx CIuzaI9wr1dnQ+JD7FiPSopfMAV486lZGm1ZA9Y+1QbqYG++9aqMlbz4EK5HN0IkobyHGisuRBu CU8+GFDvpyQZtHCo3lo= X-Received: by 2002:a05:6000:240a:b0:435:db6e:e3b2 with SMTP id ffacd0b85a97d-437978eb052mr3235358f8f.27.1770983243635; Fri, 13 Feb 2026 03:47:23 -0800 (PST) MIME-Version: 1.0 From: Ashutosh Bapat Date: Fri, 13 Feb 2026 17:17:11 +0530 X-Gm-Features: AZwV_QhhxuocUzEV0VUocMcoavxLpAYTfc5Ps04d-du9D8Ng8V-6w36co1FhGtc Message-ID: Subject: Better shared data structure management and resizable shared data structures To: Heikki Linnakangas , pgsql-hackers , Andres Freund Cc: chaturvedipalak1911@gmail.com Content-Type: multipart/mixed; boundary="000000000000242bd9064ab32bfc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000242bd9064ab32bfc Content-Type: text/plain; charset="UTF-8" Hi Heikki, As discussed in [1], starting a new thread to discuss $Subject. 0001 in the attached patchset is same as the patch shared in [1]. For completeness, I am copy-pasting from Heikki's email the description of what this patch does ** quote ** Attached is a proof-of-concept of what I have in mind. Don't look too closely at how it's implemented, it's very hacky and EXEC_BACKEND mode is slightly broken, for example. The point is to demonstrate what the callers would look like. I converted only a few subsystems to use the new API, the rest still use ShmemInitStruct() and ShmemInitHash(). With this, initialization of a subsystem that defines a shared memory area looks like this: -------------- /* This struct lives in shared memory */ typedef struct { int field; } FoobarSharedCtlData; static void FoobarShmemInit(void *arg); /* Descriptor for the shared memory area */ ShmemStructDesc FoobarShmemDesc = { .name = "Foobar subsystem", .size = sizeof(FoobarSharedCtlData), .init_fn = FoobarShmemInit, }; /* Pointer to the shared memory struct */ #define FoobarCtl ((FoobarSharedCtlData *) FoobarShmemDesc.ptr) /* * Register the shared memory struct. This is called once at * postmaster startup, before the shared memory segment is allocated, * and in EXEC_BACKEND mode also early at backend startup. * * For core subsystems, there's a list of all these functions in core * in ipci.c, similar to all the *ShmemSize() and *ShmemInit() functions * today. In an extension, this would be done in _PG_init() or in * the shmem_request_hook, replacing the RequestAddinShmemSpace calls * we have today. */ void FoobarShmemRegister(void) { ShmemRegisterStruct(&FoobarShmemDesc); } /* * This callback is called once at postmaster startup, to initialize * the shared memory struct. FoobarShmemDesc.ptr has already been * set when this is called. */ static void FoobarShmemInit(void *arg) { memset(FoobarCtl, 0, sizeof(FoobarSharedCtlData)); FoobarCtl->field = 123; } -------------- The ShmemStructDesc provides room for extending the facility in the future. For example, you could specify alignment there, or an additional "attach" callback when you need to do more per-backend initialization in EXEC_BACKEND mode. And with the resizeable shared memory, a max size. ** unquote ** 0002 allows pointers of the global variables pointing to the shared memory structure to be specified in ShmemStructDesc for easier use. This should be merged into 0001. 0003 allows resizable shared memory structures to be specified via ShmemRegisterStruct() and then implements allocating shared memory segments for them and allocating the structures themselves. It also implements the ShmemResizeRegistered() API to resize registered resizable structures. The resizable shared memory structures are placed in their own shared memory segments which are implemented using the same method as 0002 patch in [2]. It is also PoC, "Do not do not look too closely". The pieces dealing with huge pages need some rework. Portability is another issue. Most important is what method should be used to implement resizable shared memory itself. More on that later. 0003 adds APIs to register, allocate and resize shared memory structures in shmem.c extending the infrastructure added by 0001. The patch also has a test which demonstrates how to use those APIs. If we think those APIs look good, we can work on finishing 0001 and then I can work on completing 0003. Thoughts? I am copying the discussion about supporting resizable shared memory from shared buffers resizing thread here, since those apply to 0003. Andres is suggesting an alternate approach [3] to support resizable shared memory. I am continuing that conversation here. > I think the multiple memory mappings approach is just too restrictive. If we > e.g. eventually want to make some of the other major allocations that depend > on NBuffers react to resizing shared buffers, it's very easy to do if all it > requires is calling > madvise(TYPEALIGN(start, page_size), MADV_REMOVE, TYPEALIGN_DOWN(end, page_size)); You mean madvise(TYPEALIGN(start, page_size), TYPEALIGN_DOWN(end, page_size) - TYPEALIGN(start, page_size), MADV_REMOVE)? Right? `man madvise` has this MADV_REMOVE (since Linux 2.6.16) Free up a given range of pages and its associated backing store. This is equivalent to punching a hole in the corresponding byte range of the backing store (see fallocate(2)). Subsequent accesses in the specified address range will see bytes containing zero. The specified address range must be mapped shared and writable. This flag cannot be applied to locked pages, Huge TLB pages, or VM_PFNMAP pages. In the initial implementation, only tmpfs(5) was supported MADV_REMOVE; but since Linux 3.5, any filesystem which supports the fallocate(2) FALLOC_FL_PUNCH_HOLE mode also supports MADV_REMOVE. Hugetlbfs fails with the error EINVAL and other filesystems fail with the error EOPNOTSUPP. It says the flag can not be applied to Huge TLB pages. We won't be able to make resizable shared memory structures allocated with huge pages. That seems like a serious restriction. I may be misunderstanding something, but it seems like this is useful to free already allocated memory, not necessarily allocate more memory. I don't understand how a user would start with a larger reserved address space with only small portions of that space being backed by memory. > > There are several cases that are pretty easy to handle that way: > - Buffer Blocks > - Buffer Descriptors > - Sync request queue (part of the "Checkpointer Data" allocation) > - Checkpoint BufferIds (for sorting the to-be-checkpointed data) > - Buffer IO Condition Variables > > But if you want to support making these resizable with the separate mappings > approach, it gets considerably more complicated and the number of mappings > increases more substantially. > > We also don't need a lot less infrastructure in shmem.c that way. We could > e.g. make ShmemInitStruct() reservere the entire requested size (to avoid OOM > killer issues) and have a ShmemInitStructExt() that allows the caller choose > whether to reserve. No different segment IDs etc are needed. I agree that if we can devise a mechanism to allocate a single mapping with holes placed around resizable structure, we could use it for shared memory structures other than buffer pool as well. However, as far as I can understand we will still need the concept of segments inside shmem.c (not necessarily in pg_shmem.h) to track the allocations for each of the individual structures OR may be we could use the resizable shmem structure itself to track it. [1] https://www.postgresql.org/message-id/91265854-b3ba-45c6-aa44-7e8dcdd51470%40iki.fi [2] https://www.postgresql.org/message-id/CAExHW5tSw8r06RLAArvf923cO4NGetitPhQ7AO0o7hsKx8jsNw%40mail.gmail.com [3] https://www.postgresql.org/message-id/aY4v1oSmokXNpQMX%40alap3.anarazel.de -- Best Wishes, Ashutosh Bapat --000000000000242bd9064ab32bfc Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Get-rid-of-global-shared-memory-pointer-mac-20260213.patch" Content-Disposition: attachment; filename="0002-Get-rid-of-global-shared-memory-pointer-mac-20260213.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlktgrho1 RnJvbSAzOTVhOTVlOTkzNDI4Njg2OWIxZmU4ZDQ1ZGM1YTE1NWVhOWJlMDMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAxMCBGZWIgMjAyNiAyMDoyNjozMSArMDUzMApTdWJqZWN0OiBb UEFUQ0ggMi8zXSBHZXQgcmlkIG9mIGdsb2JhbCBzaGFyZWQgbWVtb3J5IHBvaW50ZXIgbWFjcm8K IGRlY2xhcmF0aW9ucwoKLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy5jICAgfCAxMCArKysrLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAu YyAgICAgICAgICAgfCAgNSArKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyAgICAg ICAgICAgICAgICAgfCAgNSArKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0 cnkuYyAgICAgICAgfCAgNCArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMg ICAgICAgICAgICB8IDE4ICsrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y2FycmF5LmMgICAgICAgICAgIHwgMTMgKysrKystLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9wcm9jc2lnbmFsLmMgICAgICAgICAgfCAgNCArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3NobWVtLmMgICAgICAgICAgICAgICB8IDI5ICsrKysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jICAgICAgICAgICB8ICA3ICsrKy0tCiBzcmMvYmFj a2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAgICAgICAgICAgfCAyNSArKysrKysrKysrLS0t LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oICAgICAgICAgICAgICAgICAgfCAgMiAr LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oICAgICAgICAgICAgICAgICAgIHwgIDYgKyst LQogMTIgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRz LmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwppbmRl eCA3MWRlYmM4YjQ3Zi4uNzNmZGY1NjE0MTkgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0yNTgsMjQgKzI1OCwyNiBAQCB0eXBlZGVm IHN0cnVjdCBwZ3NzU2hhcmVkU3RhdGUKIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9i YWwgc3RhdGlzdGljcyBmb3IgcGdzcyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKKy8qIExpbmtz IHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KK3Bnc3NTaGFyZWRTdGF0ZSAqcGdzcyA9IE5VTEw7 CitIVEFCICpwZ3NzX2hhc2ggPSBOVUxMOworCiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX2luaXQo dm9pZCAqYXJnKTsKIAogc3RhdGljIFNobWVtU3RydWN0RGVzYyBwZ3NzU2hhcmVkU3RhdGVTaG1l bURlc2MgPSB7CiAJLm5hbWUgPSAicGdfc3RhdF9zdGF0ZW1lbnRzIiwKIAkuc2l6ZSA9IHNpemVv ZihwZ3NzU2hhcmVkU3RhdGUpLAogCS5pbml0X2ZuID0gcGdzc19zaG1lbV9pbml0LAorCS5wdHIg PSAodm9pZCAqKSAmcGdzcywKIH07CiAKIHN0YXRpYyBTaG1lbUhhc2hEZXNjIHBnc3NTaGFyZWRI YXNoRGVzYyA9IHsKIAkubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMgaGFzaCIsCiAJLmluaXRf c2l6ZSA9IDAsCQkvKiBzZXQgZnJvbSAncGdzc19tYXgnICovCiAJLm1heF9zaXplID0gMCwJCS8q IHNldCBmcm9tICdwZ3NzX21heCcgKi8KKwkucHRyID0gJnBnc3NfaGFzaCwKIH07CiAKLS8qIExp bmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLSNkZWZpbmUgcGdzcyAoKHBnc3NTaGFyZWRT dGF0ZSAqKSBwZ3NzU2hhcmVkU3RhdGVTaG1lbURlc2MucHRyKQotI2RlZmluZSBwZ3NzX2hhc2gg KHBnc3NTaGFyZWRIYXNoRGVzYy5wdHIpCi0KIAogLyotLS0tIExvY2FsIHZhcmlhYmxlcyAtLS0t Ki8KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwppbmRleCAxMWFkOTBlNzM3Mi4uM2Rm ZGE4NzVlODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jCkBAIC0zMiwxMCArMzIs MTQgQEAKIAogc3RhdGljIHZvaWQgVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZyk7CiAKKy8qIHBv aW50ZXIgdG8gdmFyaWFibGVzIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5ICovCitUcmFuc2FtVmFy aWFibGVzRGF0YSAqVHJhbnNhbVZhcmlhYmxlcyA9IE5VTEw7CisKIFNobWVtU3RydWN0RGVzYyBU cmFuc2FtVmFyaWFibGVzU2htZW1EZXNjID0gewogCS5uYW1lID0gIlRyYW5zYW1WYXJpYWJsZXMi LAogCS5zaXplID0gc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKIAkuaW5pdF9mbiA9IFZh cnN1cFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZUcmFuc2FtVmFyaWFibGVzLAogfTsK IAogLyoKQEAgLTQ5LDYgKzUzLDcgQEAgVmFyc3VwU2htZW1SZWdpc3Rlcih2b2lkKQogCiBzdGF0 aWMgdm9pZAogVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZykKKwogewogCW1lbXNldChUcmFuc2Ft VmFyaWFibGVzLCAwLCBzaXplb2YoVHJhbnNhbVZhcmlhYmxlc0RhdGEpKTsKIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvZHNtLmMKaW5kZXggNTVmNDZjNzY4N2UuLjczNjQ0ZWMzYmJiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9k c20uYwpAQCAtMTEwLDE0ICsxMTAsMTUgQEAgc3RhdGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZh bHNlOwogLyogUHJlYWxsb2NhdGVkIERTTSBzcGFjZSBpbiB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5 IHJlZ2lvbi4gKi8KIHN0YXRpYyB2b2lkIGRzbV9tYWluX3NwYWNlX2luaXQodm9pZCAqKTsKIAor c3RhdGljIHZvaWQgKmRzbV9tYWluX3NwYWNlX2JlZ2luID0gTlVMTDsKKwogc3RhdGljIFNobWVt U3RydWN0RGVzYyBkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjID0gewogCS5uYW1lID0gIlByZWFs bG9jYXRlZCBEU00iLAogCS5zaXplID0gMCwgLyogZHluYW1pYyAqLwogCS5pbml0X2ZuID0gZHNt X21haW5fc3BhY2VfaW5pdCwKKwkucHRyID0gJmRzbV9tYWluX3NwYWNlX2JlZ2luLAogfTsKIAot I2RlZmluZSBkc21fbWFpbl9zcGFjZV9iZWdpbiAoZHNtX21haW5fc3BhY2Vfc2htZW1fZGVzYy5w dHIpCi0KIC8qCiAgKiBMaXN0IG9mIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyB1c2Vk IGJ5IHRoaXMgYmFja2VuZC4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9kc21fcmVnaXN0cnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5j CmluZGV4IDg4MmFmODNiN2IyLi4xNjU5ZTFkZDcxZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv ZHNtX3JlZ2lzdHJ5LmMKQEAgLTU2LDEzICs1NiwxNSBAQCB0eXBlZGVmIHN0cnVjdCBEU01SZWdp c3RyeUN0eFN0cnVjdAogCiBzdGF0aWMgdm9pZCBEU01SZWdpc3RyeUN0eFNobWVtSW5pdCh2b2lk ICphcmcpOwogCitEU01SZWdpc3RyeUN0eFN0cnVjdCAqRFNNUmVnaXN0cnlDdHggPSBOVUxMOwor CiBzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIERTTVJlZ2lzdHJ5Q3R4U2htZW1EZXNjID0gewogCS5u YW1lID0gIkRTTSBSZWdpc3RyeSBEYXRhIiwKIAkuc2l6ZSA9IHNpemVvZihEU01SZWdpc3RyeUN0 eFN0cnVjdCksCiAJLmluaXRfZm4gPSBEU01SZWdpc3RyeUN0eFNobWVtSW5pdCwKKwkucHRyID0g KHZvaWQgKiopICZEU01SZWdpc3RyeUN0eCwKIH07CiAKLSNkZWZpbmUgRFNNUmVnaXN0cnlDdHgg KChEU01SZWdpc3RyeUN0eFN0cnVjdCAqKSBEU01SZWdpc3RyeUN0eFNobWVtRGVzYy5wdHIpCiAK IHR5cGVkZWYgc3RydWN0IE5hbWVkRFNNU3RhdGUKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25h bC5jCmluZGV4IDIzNzUyNTAwZDE2Li4zYWEwMzgwZWFkZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w bXNpZ25hbC5jCkBAIC04MiwyMSArODIsMTcgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogCiBzdGF0 aWMgdm9pZCBQTVNpZ25hbFNobWVtSW5pdCh2b2lkICopOwogCi1zdGF0aWMgU2htZW1TdHJ1Y3RE ZXNjIFBNU2lnbmFsU2htZW1EZXNjID0gewotCS5uYW1lID0gIlBNU2lnbmFsU3RhdGUiLAotCS5z aXplID0gMCwgLyogZHluYW1pYyAqLwotCS5pbml0X2ZuID0gUE1TaWduYWxTaG1lbUluaXQsCi19 OwotCiAvKgogICogUE1TaWduYWxTdGF0ZSBwb2ludGVyIGlzIHZhbGlkIGluIGJvdGggcG9zdG1h c3RlciBhbmQgY2hpbGQgcHJvY2Vzc2VzCi0gKgotICogVGhpcyBpcyBhIHN0YW5kLWFsb25lIHZh cmlhYmxlIHJhdGhlciB0aGFuIGp1c3QgYSAjZGVmaW5lIG92ZXIKLSAqIFBNU2lnbmFsU2htZW1E ZXNjLnB0ciBiZWNhdXNlIGl0IGlzIG5lZWRlZCBlYXJseSBhdCBiYWNrZW5kIHN0YXJ0dXAgYW5k Ci0gKiBwYXNzZWQgYXMgYSBiYWNrZW5kIHBhcmFtZXRlciBpbiBFWEVDX0JBQ0tFTkQgbW9kZQog ICovCiBOT05fRVhFQ19TVEFUSUMgdm9sYXRpbGUgUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRl ID0gTlVMTDsKIAorc3RhdGljIFNobWVtU3RydWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYyA9IHsK KwkubmFtZSA9ICJQTVNpZ25hbFN0YXRlIiwKKwkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KKwku aW5pdF9mbiA9IFBNU2lnbmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJlBNU2lnbmFs U3RhdGUsCit9OwogCiAvKgogICogTG9jYWwgY29weSBvZiBQTVNpZ25hbFN0YXRlLT5udW1fY2hp bGRfZmxhZ3MsIG9ubHkgdmFsaWQgaW4gdGhlCkBAIC0xNTYsNyArMTUyLDcgQEAgc3RhdGljIHZv aWQKIFBNU2lnbmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKIAkvKiBpbml0aWFsaXplIGFsbCBm bGFncyB0byB6ZXJvZXMgKi8KLQlQTVNpZ25hbFN0YXRlID0gUE1TaWduYWxTaG1lbURlc2MucHRy OworCUFzc2VydChQTVNpZ25hbFN0YXRlKTsKIAlNZW1TZXQodW52b2xhdGl6ZShQTVNpZ25hbERh dGEgKiwgUE1TaWduYWxTdGF0ZSksIDAsIFBNU2lnbmFsU2htZW1EZXNjLnNpemUpOwogCW51bV9j aGlsZF9mbGFncyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsKIAlQTVNpZ25hbFN0YXRl LT5udW1fY2hpbGRfZmxhZ3MgPSBudW1fY2hpbGRfZmxhZ3M7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3By b2NhcnJheS5jCmluZGV4IDA4YzYzYmNiMmE3Li43MzY1MDRkM2EzZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvcHJvY2FycmF5LmMKQEAgLTEwNCwxNSArMTA0LDE2IEBAIHR5cGVkZWYgc3RydWN0IFBy b2NBcnJheVN0cnVjdAogc3RhdGljIHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQgKmFyZyk7 CiBzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUF0dGFjaCh2b2lkICphcmcpOwogCitQcm9jQXJy YXlTdHJ1Y3QgKnByb2NBcnJheSA9IE5VTEw7CisKIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJv Y0FycmF5U2htZW1EZXNjID0gewogCS5uYW1lID0gIlByb2MgQXJyYXkiLAogCS5zaXplID0gMCwg LyogZHluYW1pYyAqLwogCS5pbml0X2ZuID0gUHJvY0FycmF5U2htZW1Jbml0LAogCS5hdHRhY2hf Zm4gPSBQcm9jQXJyYXlTaG1lbUF0dGFjaCwKKwkucHRyID0gKHZvaWQgKiopICZwcm9jQXJyYXks CiB9OwogCi0jZGVmaW5lIHByb2NBcnJheSAoKFByb2NBcnJheVN0cnVjdCAqKSBQcm9jQXJyYXlT aG1lbURlc2MucHRyKQotCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxWaXNUZXN0KiBmYW1p bHkgb2YgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBlLmcuIGJlIHVzZWQgdG8g ZGVjaWRlIGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB2aW9sYXRpbmcK QEAgLTI5MCwyMiArMjkxLDI0IEBAIHN0YXRpYyBUcmFuc2FjdGlvbklkIGNhY2hlZFhpZElzTm90 SW5Qcm9ncmVzcyA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogICogQm9va2tlZXBpbmcgZm9yIHRy YWNraW5nIGVtdWxhdGVkIHRyYW5zYWN0aW9ucyBpbiByZWNvdmVyeQogICovCiAKK1RyYW5zYWN0 aW9uSWQgKktub3duQXNzaWduZWRYaWRzID0gTlVMTDsKKwogc3RhdGljIFNobWVtU3RydWN0RGVz YyBLbm93bkFzc2lnbmVkWGlkc1NobWVtRGVzYyA9IHsKIAkubmFtZSA9ICJLbm93bkFzc2lnbmVk WGlkcyIsCiAJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCiAJLmluaXRfZm4gPSBOVUxMLAorCS5w dHIgPSAodm9pZCAqKikgJktub3duQXNzaWduZWRYaWRzLAogfTsKIAotI2RlZmluZSBLbm93bkFz c2lnbmVkWGlkcyAoKFRyYW5zYWN0aW9uSWQgKikgS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2Mu cHRyKQorYm9vbCAqS25vd25Bc3NpZ25lZFhpZHNWYWxpZCA9IE5VTEw7CiAKIHN0YXRpYyBTaG1l bVN0cnVjdERlc2MgS25vd25Bc3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYyA9IHsKIAkubmFtZSA9 ICJLbm93bkFzc2lnbmVkWGlkc1ZhbGlkIiwKIAkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KIAku aW5pdF9mbiA9IE5VTEwsCisJLnB0ciA9ICh2b2lkICoqKSAmS25vd25Bc3NpZ25lZFhpZHNWYWxp ZCwKIH07CiAKLSNkZWZpbmUgS25vd25Bc3NpZ25lZFhpZHNWYWxpZCAoKGJvb2wgKikgS25vd25B c3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYy5wdHIpCi0KIHN0YXRpYyBUcmFuc2FjdGlvbklkIGxh dGVzdE9ic2VydmVkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jc2lnbmFsLmMKaW5kZXggNTc0M2YwODgzMjQuLmVlYzA0ZWFlM2Y0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0xMDQsMTMgKzEwNCwxNSBAQCBzdHJ1 Y3QgUHJvY1NpZ25hbEhlYWRlcgogCiBzdGF0aWMgdm9pZCBQcm9jU2lnbmFsU2htZW1Jbml0KHZv aWQgKmFyZyk7CiAKK1Byb2NTaWduYWxIZWFkZXIgKlByb2NTaWduYWwgPSBOVUxMOworCiBzdGF0 aWMgU2htZW1TdHJ1Y3REZXNjIFByb2NTaWduYWxTaG1lbURlc2MgPSB7CiAJLm5hbWUgPSAiUHJv Y1NpZ25hbCIsCiAJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCiAJLmluaXRfZm4gPSBQcm9jU2ln bmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJlByb2NTaWduYWwsCiB9OwogCi0jZGVm aW5lIFByb2NTaWduYWwgKChQcm9jU2lnbmFsSGVhZGVyICopIFByb2NTaWduYWxTaG1lbURlc2Mu cHRyKQogCiBzdGF0aWMgUHJvY1NpZ25hbFNsb3QgKk15UHJvY1NpZ25hbFNsb3QgPSBOVUxMOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCBmYWEwZmNiZDIxZS4uZTczYWM0ODliMmIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtMTE4LDE3ICsxMTgsMTggQEAgc3RhdGljIHZvaWQg KlNobWVtRW5kOwkJCS8qIGVuZCsxIGFkZHJlc3Mgb2Ygc2hhcmVkIG1lbW9yeSAqLwogCiBzdGF0 aWMgU2htZW1BbGxvY2F0b3JEYXRhICpTaG1lbUFsbG9jYXRvcjsKIHNsb2NrX3QgICAgKlNobWVt TG9jazsJCQkvKiBwb2ludHMgdG8gU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2sgKi8KKyAvKiBw cmltYXJ5IGluZGV4IGhhc2h0YWJsZSBmb3Igc2htZW0gKi8KK0hUQUIgKlNobWVtSW5kZXggPSBO VUxMOworCiAKIAogc3RhdGljIFNobWVtSGFzaERlc2MgU2htZW1JbmRleEhhc2hEZXNjID0gewog CS5uYW1lID0gIlNobWVtSW5kZXgiLAogCS5pbml0X3NpemUgPSBTSE1FTV9JTkRFWF9TSVpFLAog CS5tYXhfc2l6ZSA9IFNITUVNX0lOREVYX1NJWkUsCisJLnB0ciA9ICZTaG1lbUluZGV4CiB9Owog Ci0gLyogcHJpbWFyeSBpbmRleCBoYXNodGFibGUgZm9yIHNobWVtICovCi0jZGVmaW5lIFNobWVt SW5kZXggKFNobWVtSW5kZXhIYXNoRGVzYy5wdHIpCi0KIAogLyogVG8gZ2V0IHJlbGlhYmxlIHJl c3VsdHMgZm9yIE5VTUEgaW5xdWlyeSB3ZSBuZWVkIHRvICJ0b3VjaCBwYWdlcyIgb25jZSAqLwog c3RhdGljIGJvb2wgZmlyc3ROdW1hVG91Y2ggPSB0cnVlOwpAQCAtMjA1LDcgKzIwNiw3IEBAIFNo bWVtSW5pdFJlZ2lzdGVyZWQodm9pZCkKIAkJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9IGFsbG9j YXRlZF9zaXplOwogCQlyZXN1bHQtPmxvY2F0aW9uID0gc3RydWN0UHRyOwogCi0JCXJlZ2lzdHJ5 W2ldLT5wdHIgPSBzdHJ1Y3RQdHI7CisJCSoocmVnaXN0cnlbaV0tPnB0cikgPSBzdHJ1Y3RQdHI7 CiAJCWlmIChyZWdpc3RyeVtpXS0+aW5pdF9mbikKIAkJCXJlZ2lzdHJ5W2ldLT5pbml0X2ZuKHJl Z2lzdHJ5W2ldLT5pbml0X2ZuX2FyZyk7CiAJfQpAQCAtMjM5LDcgKzI0MCw3IEBAIFNobWVtQXR0 YWNoUmVnaXN0ZXJlZCh2b2lkKQogCQkJCQkJCXJlZ2lzdHJ5W2ldLT5uYW1lKSkpOwogCQl9CiAK LQkJcmVnaXN0cnlbaV0tPnB0ciA9IHJlc3VsdC0+bG9jYXRpb247CisJCSpyZWdpc3RyeVtpXS0+ cHRyID0gcmVzdWx0LT5sb2NhdGlvbjsKIAogCQlpZiAocmVnaXN0cnlbaV0tPmF0dGFjaF9mbikK IAkJCXJlZ2lzdHJ5W2ldLT5hdHRhY2hfZm4ocmVnaXN0cnlbaV0tPmF0dGFjaF9mbl9hcmcpOwpA QCAtNDI1LDEwICs0MjYsMTEgQEAgSW5pdFNobWVtSW5kZXgodm9pZCkKIAlpbmZvLmtleXNpemUg PSBTSE1FTV9JTkRFWF9LRVlTSVpFOwogCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFNobWVtSW5k ZXhFbnQpOwogCi0JU2htZW1JbmRleCA9IFNobWVtSW5pdEhhc2goIlNobWVtSW5kZXgiLAorCSpT aG1lbUluZGV4SGFzaERlc2MucHRyID0gU2htZW1Jbml0SGFzaCgiU2htZW1JbmRleCIsCiAJCQkJ CQkJICAgU0hNRU1fSU5ERVhfU0laRSwgU0hNRU1fSU5ERVhfU0laRSwKIAkJCQkJCQkgICAmaW5m bywKIAkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOworCUFzc2VydChTaG1lbUlu ZGV4ICE9IE5VTEwgJiYgKlNobWVtSW5kZXhIYXNoRGVzYy5wdHIgPT0gU2htZW1JbmRleCk7CiB9 CiAKIC8qCkBAIC00ODIsNiArNDg0LDEyIEBAIFNobWVtUmVnaXN0ZXJIYXNoKFNobWVtSGFzaERl c2MgKmRlc2MsCQkvKiBjb25maWd1cmF0aW9uICovCiAJZGVzYy0+YmFzZV9kZXNjLmluaXRfZm5f YXJnID0gZGVzYzsKIAlkZXNjLT5iYXNlX2Rlc2MuYXR0YWNoX2ZuID0gc2htZW1faGFzaF9hdHRh Y2g7CiAJZGVzYy0+YmFzZV9kZXNjLmF0dGFjaF9mbl9hcmcgPSBkZXNjOworCS8qCisJICogV2Ug bmVlZCBhIHN0YWJsZSBwb2ludGVyIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBt ZW1vcnkuIFVzZQorCSAqIHRoZSBvbmUgcGFzc2VkIGluIHRoZSBkZXNjcmlwdG9yIG5vdy4gSXQg d2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBoYXNoCisJICogdGFibGUgaGVhZGVyIGJ5IGluaXQg b3IgYXR0YWNoIGZ1bmN0aW9uLgorCSAqLworCWRlc2MtPmJhc2VfZGVzYy5wdHIgPSAodm9pZCAq KikgZGVzYy0+cHRyOwogCiAJZGVzYy0+YmFzZV9kZXNjLmV4dHJhX3NpemUgPSBoYXNoX2VzdGlt YXRlX3NpemUoZGVzYy0+bWF4X3NpemUsIGluZm9QLT5lbnRyeXNpemUpIC0gZGVzYy0+YmFzZV9k ZXNjLnNpemU7CiAKQEAgLTQ5OSwxMCArNTA3LDkgQEAgc2htZW1faGFzaF9pbml0KHZvaWQgKmFy ZykKIAlpbnQJCQloYXNoX2ZsYWdzID0gZGVzYy0+aGFzaF9mbGFnczsKIAogCS8qIFBhc3MgbG9j YXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCWRlc2MtPnB0ciA9 IGRlc2MtPmJhc2VfZGVzYy5wdHI7Ci0JZGVzYy0+aW5mb1AtPmhjdGwgPSAoSEFTSEhEUiAqKSBk ZXNjLT5wdHI7CisJZGVzYy0+aW5mb1AtPmhjdGwgPSAoSEFTSEhEUiAqKSAqZGVzYy0+YmFzZV9k ZXNjLnB0cjsKIAotCWRlc2MtPnB0ciA9IGhhc2hfY3JlYXRlKGRlc2MtPm5hbWUsIGRlc2MtPmlu aXRfc2l6ZSwgZGVzYy0+aW5mb1AsIGhhc2hfZmxhZ3MpOworCSpkZXNjLT5wdHIgPSBoYXNoX2Ny ZWF0ZShkZXNjLT5uYW1lLCBkZXNjLT5pbml0X3NpemUsIGRlc2MtPmluZm9QLCBoYXNoX2ZsYWdz KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUxOCw5ICs1MjUsOSBAQCBzaG1lbV9oYXNoX2F0dGFj aCh2b2lkICphcmcpCiAJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKIAogCS8qIFBhc3MgbG9j YXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCWRlc2MtPmluZm9Q LT5oY3RsID0gKEhBU0hIRFIgKikgZGVzYy0+cHRyOworCWRlc2MtPmluZm9QLT5oY3RsID0gKEhB U0hIRFIgKikgKmRlc2MtPmJhc2VfZGVzYy5wdHI7CiAKLQlkZXNjLT5wdHIgPSBoYXNoX2NyZWF0 ZShkZXNjLT5uYW1lLCBkZXNjLT5pbml0X3NpemUsIGRlc2MtPmluZm9QLCBoYXNoX2ZsYWdzKTsK KwkqZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+bmFtZSwgZGVzYy0+aW5pdF9zaXplLCBk ZXNjLT5pbmZvUCwgaGFzaF9mbGFncyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZh bGFkdC5jCmluZGV4IDBmZTBmMjU2OTcxLi44MzIxYmQ5YjUyZCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2ludmFsYWR0LmMKQEAgLTIwNSwxNSArMjA1LDE2IEBAIHR5cGVkZWYgc3RydWN0IFNJU2Vn CiAKIHN0YXRpYyB2b2lkIFNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CiAKKy8qIHBv aW50ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KK1NJU2VnICpzaG1JbnZhbEJ1ZmZl ciA9IE5VTEw7CisKIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgU2hhcmVkSW52YWxTaG1lbURlc2Mg PSB7CiAJLm5hbWUgPSAic2htSW52YWxCdWZmZXIiLAogCS5zaXplID0gMCwJLyogZHluYW1pYyAq LwogCS5pbml0X2ZuID0gU2hhcmVkSW52YWxTaG1lbUluaXQsCisJLnB0ciA9ICh2b2lkICoqKSAm c2htSW52YWxCdWZmZXIsCiB9OwogCi0vKiBwb2ludGVyIHRvIHRoZSBzaGFyZWQgaW52YWwgYnVm ZmVyICovCi0jZGVmaW5lIHNobUludmFsQnVmZmVyICgoU0lTZWcgKikgU2hhcmVkSW52YWxTaG1l bURlc2MucHRyKQotCiAKIHN0YXRpYyBMb2NhbFRyYW5zYWN0aW9uSWQgbmV4dExvY2FsVHJhbnNh Y3Rpb25JZDsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggODUzNzViNTE5NWUuLmEzZDY1 NTdhYTlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTc3LDI3ICs3NywzMyBAQCBQR1BS T0MJICAgKk15UHJvYyA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIFByb2NHbG9iYWxTaG1lbUluaXQo dm9pZCAqYXJnKTsKIAorLyogUG9pbnRlcnMgdG8gc2hhcmVkLW1lbW9yeSBzdHJ1Y3R1cmVzICov CitQUk9DX0hEUiAgICpQcm9jR2xvYmFsID0gTlVMTDsKK3ZvaWQgKnRtcEFsbFByb2NzID0gTlVM TDsKK3ZvaWQgKnRtcEZhc3RQYXRoTG9ja0FycmF5ID0gTlVMTDsKK05PTl9FWEVDX1NUQVRJQyBQ R1BST0MgKkF1eGlsaWFyeVByb2NzID0gTlVMTDsKK1BHUFJPQwkgICAqUHJlcGFyZWRYYWN0UHJv Y3MgPSBOVUxMOworCisKIHN0YXRpYyBTaG1lbVN0cnVjdERlc2MgUHJvY0dsb2JhbFNobWVtRGVz YyA9IHsKIAkubmFtZSA9ICJQcm9jIEhlYWRlciIsCiAJLnNpemUgPSBzaXplb2YoUFJPQ19IRFIp LAogCS5pbml0X2ZuID0gUHJvY0dsb2JhbFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZQ cm9jR2xvYmFsLAogfTsKIAogc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsQWxsUHJv Y3NTaG1lbURlc2MgPSB7CiAJLm5hbWUgPSAiUEdQUk9DIHN0cnVjdHVyZXMiLAogCS5zaXplID0g MCwgLyogZHluYW1pYyAqLworCS5wdHIgPSAodm9pZCAqKikgJnRtcEFsbFByb2NzLAogfTsKIAog c3RhdGljIFNobWVtU3RydWN0RGVzYyBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYyA9IHsKIAku bmFtZSA9ICJGYXN0LVBhdGggTG9jayBBcnJheSIsCiAJLnNpemUgPSAwLCAvKiBkeW5hbWljICov CisJLnB0ciA9ICh2b2lkICoqKSAmdG1wRmFzdFBhdGhMb2NrQXJyYXksCiB9OwogCi0vKiBQb2lu dGVycyB0byBzaGFyZWQtbWVtb3J5IHN0cnVjdHVyZXMgKi8KLVBST0NfSERSICAgKlByb2NHbG9i YWwgPSBOVUxMOwotTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3MgPSBOVUxM OwotUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jcyA9IE5VTEw7Ci0KIHN0YXRpYyB1aW50MzIg VG90YWxQcm9jczsKIAogc3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19O T1RfWUVUX0NIRUNLRUQ7CkBAIC0yMjIsOCArMjI4LDcgQEAgUHJvY0dsb2JhbFNobWVtSW5pdCh2 b2lkICphcmcpCiAJU2l6ZQkJZnBMb2NrQml0c1NpemUsCiAJCQkJZnBSZWxJZFNpemU7CiAKLQlQ cm9jR2xvYmFsID0gUHJvY0dsb2JhbFNobWVtRGVzYy5wdHI7Ci0KKwlBc3NlcnQoUHJvY0dsb2Jh bCk7CiAJUHJvY0dsb2JhbC0+c3BpbnNfcGVyX2RlbGF5ID0gREVGQVVMVF9TUElOU19QRVJfREVM QVk7CiAJZGxpc3RfaW5pdCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzKTsKIAlkbGlzdF9pbml0KCZQ cm9jR2xvYmFsLT5hdXRvdmFjRnJlZVByb2NzKTsKQEAgLTIzNiw3ICsyNDEsOCBAQCBQcm9jR2xv YmFsU2htZW1Jbml0KHZvaWQgKmFyZykKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwt PmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlTcGluTG9ja0luaXQoUHJv Y1N0cnVjdExvY2spOwogCi0JcHRyID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnB0cjsK KwlBc3NlcnQodG1wQWxsUHJvY3MpOworCXB0ciA9IHRtcEFsbFByb2NzOwogCXJlcXVlc3RTaXpl ID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnNpemU7CiAJbWVtc2V0KHB0ciwgMCwgcmVx dWVzdFNpemUpOwogCkBAIC0yNzQsNyArMjgwLDggQEAgUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lk ICphcmcpCiAJZnBMb2NrQml0c1NpemUgPSBNQVhBTElHTihGYXN0UGF0aExvY2tHcm91cHNQZXJC YWNrZW5kICogc2l6ZW9mKHVpbnQ2NCkpOwogCWZwUmVsSWRTaXplID0gTUFYQUxJR04oRmFzdFBh dGhMb2NrU2xvdHNQZXJCYWNrZW5kKCkgKiBzaXplb2YoT2lkKSk7CiAKLQlmcFB0ciA9IEZhc3RQ YXRoTG9ja0FycmF5U2htZW1EZXNjLnB0cjsKKwlBc3NlcnQodG1wRmFzdFBhdGhMb2NrQXJyYXkp OworCWZwUHRyID0gdG1wRmFzdFBhdGhMb2NrQXJyYXk7CiAJcmVxdWVzdFNpemUgPSBGYXN0UGF0 aExvY2tBcnJheVNobWVtRGVzYy5zaXplOwogCW1lbXNldChmcFB0ciwgMCwgcmVxdWVzdFNpemUp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCA0OWQ0NzZlOWQ1Yy4uNmU1YTU0NmY0MTEgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3RyYW5zYW0uaApAQCAtMzM0LDcgKzMzNCw3IEBAIGV4dGVybiBib29sIFRyYW5zYWN0aW9u U3RhcnRlZER1cmluZ1JlY292ZXJ5KHZvaWQpOwogLyogaW4gdHJhbnNhbS92YXJzdXAuYyAqLwog I2lmbmRlZiBGUk9OVEVORAogZXh0ZXJuIFBHRExMSU1QT1JUIHN0cnVjdCBTaG1lbVN0cnVjdERl c2MgVHJhbnNhbVZhcmlhYmxlc1NobWVtRGVzYzsKLSNkZWZpbmUgVHJhbnNhbVZhcmlhYmxlcyAo KFRyYW5zYW1WYXJpYWJsZXNEYXRhICopIFRyYW5zYW1WYXJpYWJsZXNTaG1lbURlc2MucHRyKQor ZXh0ZXJuIFBHRExMSU1QT1JUIFRyYW5zYW1WYXJpYWJsZXNEYXRhICpUcmFuc2FtVmFyaWFibGVz OwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKaW5kZXggNDBlMmZjMTcwNTYuLmNiZDRlZjhk MDNmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zaG1lbS5oCkBAIC01MCw4ICs1MCw4IEBAIHR5cGVkZWYgc3RydWN0IFNo bWVtU3RydWN0RGVzYwogCSAqLwogCXNpemVfdAkJZXh0cmFfc2l6ZTsKIAotCS8qIFBvaW50ZXIg dG8gdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSwgd2hlbiBpdCdzIGFsbG9jYXRlZC4gKi8KLQl2b2lk CSAgICpwdHI7CisJLyogUG9pbnRlciB0byB0aGUgdmFyaWFibGUgdG8gd2hpY2ggcG9pbnRlciB0 byB0aGlzIHNoYXJlZCBtZW1vcnkgYXJlYSBpcyBhc3NpZ25lZCBhZnRlciBhbGxvY2F0aW9uLiAq LworCXZvaWQJICAgKipwdHI7CiB9IFNobWVtU3RydWN0RGVzYzsKIAogLyoKQEAgLTY3LDcgKzY3 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1IYXNoRGVzYwogCXNpemVfdAkJbWF4X3NpemU7CQkv KiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KIAlIQVNIQ1RMCSAgICppbmZvUDsKIAotCUhUQUIJ ICAgKnB0cjsKKwlIVEFCCSAgICoqcHRyOwogCiAJU2htZW1TdHJ1Y3REZXNjCWJhc2VfZGVzYzsK IH0gU2htZW1IYXNoRGVzYzsKLS0gCjIuMzQuMQoK --000000000000242bd9064ab32bfc Content-Type: text/x-patch; charset="US-ASCII"; name="0001-wip-Introduce-a-new-way-of-registering-shar-20260213.patch" Content-Disposition: attachment; filename="0001-wip-Introduce-a-new-way-of-registering-shar-20260213.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlktgrhh0 RnJvbSA0OTY3NmM1YmEwODhkMTMyMzZmMmMxYzY2ODAwZDdlN2IxYWJiZTVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5uYWthbmdh c0Bpa2kuZmk+CkRhdGU6IE1vbiwgOSBGZWIgMjAyNiAyMjoyODoyMyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggMS8zXSB3aXA6IEludHJvZHVjZSBhIG5ldyB3YXkgb2YgcmVnaXN0ZXJpbmcgc2hhcmVk IG1lbW9yeQogc3RydWN0cwoKLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3Rh dGVtZW50cy5jICAgfCAxMTIgKysrKy0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92 YXJzdXAuYyAgICAgICAgICAgfCAgMzIgKy0tCiBzcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0 cmFwLmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hf YmFja2VuZC5jICAgICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0 ZXIuYyAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMgICAg ICAgICAgICAgICAgIHwgIDQ2ICsrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdp c3RyeS5jICAgICAgICB8ICAzNCArKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAg ICAgICAgICAgICAgICB8ICA1MSArKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25h bC5jICAgICAgICAgICAgfCAgNTMgKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2Fy cmF5LmMgICAgICAgICAgIHwgMTI3ICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYyAgICAgICAgICB8ICA2MyArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htZW0uYyAgICAgICAgICAgICAgIHwgMjMzICsrKysrKysrKysrKysrKysrLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMgICAgICAgICAgIHwgIDM5ICstLQogc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICAgICAgICAgIHwgMTU2ICsrKysrKy0tLS0t LQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggICAgICAgICAgICAgICAgICB8ICAxMiArLQog c3JjL2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaCAgICAgICAgICAgIHwgICAzICstCiBz cmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3Jj L2luY2x1ZGUvc3RvcmFnZS9wbXNpZ25hbC5oICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL3Byb2MuaCAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9zdG9yYWdlL3NobWVtLmggICAgICAgICAgICAgICAgICAgfCAgNTcgKysrKysKIHNyYy9p bmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggICAgICAgICAgICAgICB8ICAgMyArLQogMjQgZmls ZXMgY2hhbmdlZCwgNjY1IGluc2VydGlvbnMoKyksIDM4OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyBiL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmluZGV4IDRhNDI3 NTMzYmQ4Li43MWRlYmM4YjQ3ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv cGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI1OCw2ICsyNTgsMjUgQEAgdHlwZWRlZiBzdHJ1Y3Qg cGdzc1NoYXJlZFN0YXRlCiAJcGdzc0dsb2JhbFN0YXRzIHN0YXRzOwkJLyogZ2xvYmFsIHN0YXRp c3RpY3MgZm9yIHBnc3MgKi8KIH0gcGdzc1NoYXJlZFN0YXRlOwogCitzdGF0aWMgdm9pZCBwZ3Nz X3NobWVtX2luaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBwZ3NzU2hh cmVkU3RhdGVTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAicGdfc3RhdF9zdGF0ZW1lbnRzIiwKKwku c2l6ZSA9IHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpLAorCS5pbml0X2ZuID0gcGdzc19zaG1lbV9p bml0LAorfTsKKworc3RhdGljIFNobWVtSGFzaERlc2MgcGdzc1NoYXJlZEhhc2hEZXNjID0gewor CS5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyBoYXNoIiwKKwkuaW5pdF9zaXplID0gMCwJCS8q IHNldCBmcm9tICdwZ3NzX21heCcgKi8KKwkubWF4X3NpemUgPSAwLAkJLyogc2V0IGZyb20gJ3Bn c3NfbWF4JyAqLworfTsKKworLyogTGlua3MgdG8gc2hhcmVkIG1lbW9yeSBzdGF0ZSAqLworI2Rl ZmluZSBwZ3NzICgocGdzc1NoYXJlZFN0YXRlICopIHBnc3NTaGFyZWRTdGF0ZVNobWVtRGVzYy5w dHIpCisjZGVmaW5lIHBnc3NfaGFzaCAocGdzc1NoYXJlZEhhc2hEZXNjLnB0cikKKworCiAvKi0t LS0gTG9jYWwgdmFyaWFibGVzIC0tLS0qLwogCiAvKiBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2Yg cGxhbm5lci9FeGVjdXRvclJ1bi9Qcm9jZXNzVXRpbGl0eSBjYWxscyAqLwpAQCAtMjc0LDEwICsy OTMsNiBAQCBzdGF0aWMgRXhlY3V0b3JGaW5pc2hfaG9va190eXBlIHByZXZfRXhlY3V0b3JGaW5p c2ggPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yRW5kX2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yRW5k ID0gTlVMTDsKIHN0YXRpYyBQcm9jZXNzVXRpbGl0eV9ob29rX3R5cGUgcHJldl9Qcm9jZXNzVXRp bGl0eSA9IE5VTEw7CiAKLS8qIExpbmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLXN0YXRp YyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3MgPSBOVUxMOwotc3RhdGljIEhUQUIgKnBnc3NfaGFzaCA9 IE5VTEw7Ci0KIC8qLS0tLSBHVUMgdmFyaWFibGVzIC0tLS0qLwogCiB0eXBlZGVmIGVudW0KQEAg LTM2NSw3ICszODAsNiBAQCBzdGF0aWMgdm9pZCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5 LCBpbnQ2NCBxdWVyeUlkLAogc3RhdGljIHZvaWQgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFs KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkJCQkJCXBnc3NWZXJzaW9uIGFwaV92ZXJz aW9uLAogCQkJCQkJCQkJCWJvb2wgc2hvd3RleHQpOwotc3RhdGljIFNpemUgcGdzc19tZW1zaXpl KHZvaWQpOwogc3RhdGljIHBnc3NFbnRyeSAqZW50cnlfYWxsb2MocGdzc0hhc2hLZXkgKmtleSwg U2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVyeV9sZW4sCiAJCQkJCQkJICBpbnQgZW5jb2Rpbmcs IGJvb2wgc3RpY2t5KTsKIHN0YXRpYyB2b2lkIGVudHJ5X2RlYWxsb2Modm9pZCk7CkBAIC01MDAs MTEgKzUxNCwzOSBAQCBfUEdfaW5pdCh2b2lkKQogc3RhdGljIHZvaWQKIHBnc3Nfc2htZW1fcmVx dWVzdCh2b2lkKQogeworCUhBU0hDVEwJCWluZm87CisKIAlpZiAocHJldl9zaG1lbV9yZXF1ZXN0 X2hvb2spCiAJCXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7CiAKLQlSZXF1ZXN0QWRkaW5TaG1l bVNwYWNlKHBnc3NfbWVtc2l6ZSgpKTsKIAlSZXF1ZXN0TmFtZWRMV0xvY2tUcmFuY2hlKCJwZ19z dGF0X3N0YXRlbWVudHMiLCAxKTsKKworCS8qCisJICogUmVnaXN0ZXIgb3VyIHNoYXJlZCBtZW1v cnkgc3RhdGUsIGluY2x1ZGluZyBoYXNoIHRhYmxlCisJICovCisJU2htZW1SZWdpc3RlclN0cnVj dCgmcGdzc1NoYXJlZFN0YXRlU2htZW1EZXNjKTsKKworCWluZm8ua2V5c2l6ZSA9IHNpemVvZihw Z3NzSGFzaEtleSk7CisJaW5mby5lbnRyeXNpemUgPSBzaXplb2YocGdzc0VudHJ5KTsKKwlwZ3Nz U2hhcmVkSGFzaERlc2MuaW5pdF9zaXplID0gcGdzc19tYXg7CisJcGdzc1NoYXJlZEhhc2hEZXNj Lm1heF9zaXplID0gcGdzc19tYXg7CisJU2htZW1SZWdpc3Rlckhhc2goJnBnc3NTaGFyZWRIYXNo RGVzYywKKwkJCQkJICAmaW5mbywKKwkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsKK30K Kworc3RhdGljIHZvaWQKK3Bnc3Nfc2htZW1faW5pdCh2b2lkICphcmcpCit7CisJcGdzcy0+bG9j ayA9ICYoR2V0TmFtZWRMV0xvY2tUcmFuY2hlKCJwZ19zdGF0X3N0YXRlbWVudHMiKSktPmxvY2s7 CisJcGdzcy0+Y3VyX21lZGlhbl91c2FnZSA9IEFTU1VNRURfTUVESUFOX0lOSVQ7CisJcGdzcy0+ bWVhbl9xdWVyeV9sZW4gPSBBU1NVTUVEX0xFTkdUSF9JTklUOworCVNwaW5Mb2NrSW5pdCgmcGdz cy0+bXV0ZXgpOworCXBnc3MtPmV4dGVudCA9IDA7CisJcGdzcy0+bl93cml0ZXJzID0gMDsKKwlw Z3NzLT5nY19jb3VudCA9IDA7CisJcGdzcy0+c3RhdHMuZGVhbGxvYyA9IDA7CisJcGdzcy0+c3Rh dHMuc3RhdHNfcmVzZXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiB9CiAKIC8qCkBAIC01MTYs OCArNTU4LDYgQEAgcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQpCiBzdGF0aWMgdm9pZAogcGdzc19z aG1lbV9zdGFydHVwKHZvaWQpCiB7Ci0JYm9vbAkJZm91bmQ7Ci0JSEFTSENUTAkJaW5mbzsKIAlG SUxFCSAgICpmaWxlID0gTlVMTDsKIAlGSUxFCSAgICpxZmlsZSA9IE5VTEw7CiAJdWludDMyCQlo ZWFkZXI7CkBAIC01MzAsNDIgKzU3MCw2IEBAIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKQogCWlm IChwcmV2X3NobWVtX3N0YXJ0dXBfaG9vaykKIAkJcHJldl9zaG1lbV9zdGFydHVwX2hvb2soKTsK IAotCS8qIHJlc2V0IGluIGNhc2UgdGhpcyBpcyBhIHJlc3RhcnQgd2l0aGluIHRoZSBwb3N0bWFz dGVyICovCi0JcGdzcyA9IE5VTEw7Ci0JcGdzc19oYXNoID0gTlVMTDsKLQotCS8qCi0JICogQ3Jl YXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSwgaW5jbHVkaW5nIGhhc2gg dGFibGUKLQkgKi8KLQlMV0xvY2tBY3F1aXJlKEFkZGluU2htZW1Jbml0TG9jaywgTFdfRVhDTFVT SVZFKTsKLQotCXBnc3MgPSBTaG1lbUluaXRTdHJ1Y3QoInBnX3N0YXRfc3RhdGVtZW50cyIsCi0J CQkJCQkgICBzaXplb2YocGdzc1NoYXJlZFN0YXRlKSwKLQkJCQkJCSAgICZmb3VuZCk7Ci0KLQlp ZiAoIWZvdW5kKQotCXsKLQkJLyogRmlyc3QgdGltZSB0aHJvdWdoIC4uLiAqLwotCQlwZ3NzLT5s b2NrID0gJihHZXROYW1lZExXTG9ja1RyYW5jaGUoInBnX3N0YXRfc3RhdGVtZW50cyIpKS0+bG9j azsKLQkJcGdzcy0+Y3VyX21lZGlhbl91c2FnZSA9IEFTU1VNRURfTUVESUFOX0lOSVQ7Ci0JCXBn c3MtPm1lYW5fcXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5JVDsKLQkJU3BpbkxvY2tJbml0 KCZwZ3NzLT5tdXRleCk7Ci0JCXBnc3MtPmV4dGVudCA9IDA7Ci0JCXBnc3MtPm5fd3JpdGVycyA9 IDA7Ci0JCXBnc3MtPmdjX2NvdW50ID0gMDsKLQkJcGdzcy0+c3RhdHMuZGVhbGxvYyA9IDA7Ci0J CXBnc3MtPnN0YXRzLnN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCX0KLQot CWluZm8ua2V5c2l6ZSA9IHNpemVvZihwZ3NzSGFzaEtleSk7Ci0JaW5mby5lbnRyeXNpemUgPSBz aXplb2YocGdzc0VudHJ5KTsKLQlwZ3NzX2hhc2ggPSBTaG1lbUluaXRIYXNoKCJwZ19zdGF0X3N0 YXRlbWVudHMgaGFzaCIsCi0JCQkJCQkJICBwZ3NzX21heCwgcGdzc19tYXgsCi0JCQkJCQkJICAm aW5mbywKLQkJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfQkxPQlMpOwotCi0JTFdMb2NrUmVsZWFz ZShBZGRpblNobWVtSW5pdExvY2spOwotCiAJLyoKIAkgKiBJZiB3ZSdyZSBpbiB0aGUgcG9zdG1h c3RlciAob3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuLi4pLCBzZXQgdXAgYSBzaG1lbQogCSAqIGV4 aXQgaG9vayB0byBkdW1wIHRoZSBzdGF0aXN0aWNzIHRvIGRpc2suCkBAIC01NzMsMTIgKzU3Nyw2 IEBAIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKQogCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCiAJ CW9uX3NobWVtX2V4aXQocGdzc19zaG1lbV9zaHV0ZG93biwgKERhdHVtKSAwKTsKIAotCS8qCi0J ICogRG9uZSBpZiBzb21lIG90aGVyIHByb2Nlc3MgYWxyZWFkeSBjb21wbGV0ZWQgb3VyIGluaXRp YWxpemF0aW9uLgotCSAqLwotCWlmIChmb3VuZCkKLQkJcmV0dXJuOwotCiAJLyoKIAkgKiBOb3Rl OiB3ZSBkb24ndCBib3RoZXIgd2l0aCBsb2NrcyBoZXJlLCBiZWNhdXNlIHRoZXJlIHNob3VsZCBi ZSBubyBvdGhlcgogCSAqIHByb2Nlc3NlcyBydW5uaW5nIHdoZW4gdGhpcyBjb2RlIGlzIHJlYWNo ZWQuCkBAIC0yMDgyLDIwICsyMDgwLDYgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8oUEdfRlVO Q1RJT05fQVJHUykKIAlQR19SRVRVUk5fREFUVU0oSGVhcFR1cGxlR2V0RGF0dW0oaGVhcF9mb3Jt X3R1cGxlKHR1cGRlc2MsIHZhbHVlcywgbnVsbHMpKSk7CiB9CiAKLS8qCi0gKiBFc3RpbWF0ZSBz aGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZC4KLSAqLwotc3RhdGljIFNpemUKLXBnc3NfbWVtc2l6 ZSh2b2lkKQotewotCVNpemUJCXNpemU7Ci0KLQlzaXplID0gTUFYQUxJR04oc2l6ZW9mKHBnc3NT aGFyZWRTdGF0ZSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUo cGdzc19tYXgsIHNpemVvZihwZ3NzRW50cnkpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKLX0KLQogLyoK ICAqIEFsbG9jYXRlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeS4KICAqIGNhbGxlciBtdXN0IGhvbGQg YW4gZXhjbHVzaXZlIGxvY2sgb24gcGdzcy0+bG9jawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJz dXAuYwppbmRleCAzZTk1ZDRjZmQxNi4uMTFhZDkwZTczNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3ZhcnN1cC5jCkBAIC0zMCwzNSArMzAsMjcgQEAKIC8qIE51bWJlciBvZiBPSURzIHRvIHBy ZWZldGNoIChwcmVhbGxvY2F0ZSkgcGVyIFhMT0cgd3JpdGUgKi8KICNkZWZpbmUgVkFSX09JRF9Q UkVGRVRDSAkJODE5MgogCi0vKiBwb2ludGVyIHRvIHZhcmlhYmxlcyBzdHJ1Y3QgaW4gc2hhcmVk IG1lbW9yeSAqLwotVHJhbnNhbVZhcmlhYmxlc0RhdGEgKlRyYW5zYW1WYXJpYWJsZXMgPSBOVUxM Oworc3RhdGljIHZvaWQgVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZyk7CiAKK1NobWVtU3RydWN0 RGVzYyBUcmFuc2FtVmFyaWFibGVzU2htZW1EZXNjID0geworCS5uYW1lID0gIlRyYW5zYW1WYXJp YWJsZXMiLAorCS5zaXplID0gc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKKwkuaW5pdF9m biA9IFZhcnN1cFNobWVtSW5pdCwKK307CiAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiBzaGFy ZWQgbWVtb3J5IGZvciBUcmFuc2FtVmFyaWFibGVzLgogICovCi1TaXplCi1WYXJzdXBTaG1lbVNp emUodm9pZCkKK3ZvaWQKK1ZhcnN1cFNobWVtUmVnaXN0ZXIodm9pZCkKIHsKLQlyZXR1cm4gc2l6 ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZUcmFuc2Ft VmFyaWFibGVzU2htZW1EZXNjKTsKIH0KIAotdm9pZAotVmFyc3VwU2htZW1Jbml0KHZvaWQpCitz dGF0aWMgdm9pZAorVmFyc3VwU2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsK LQotCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KLQlUcmFuc2FtVmFy aWFibGVzID0gU2htZW1Jbml0U3RydWN0KCJUcmFuc2FtVmFyaWFibGVzIiwKLQkJCQkJCQkJCSAg IHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSksCi0JCQkJCQkJCQkgICAmZm91bmQpOwotCWlm ICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQlBc3NlcnQoIWZvdW5kKTsKLQkJbWVtc2V0KFRy YW5zYW1WYXJpYWJsZXMsIDAsIHNpemVvZihUcmFuc2FtVmFyaWFibGVzRGF0YSkpOwotCX0KLQll bHNlCi0JCUFzc2VydChmb3VuZCk7CisJbWVtc2V0KFRyYW5zYW1WYXJpYWJsZXMsIDAsIHNpemVv ZihUcmFuc2FtVmFyaWFibGVzRGF0YSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFwL2Jvb3RzdHJh cC5jCmluZGV4IDdkMzJjZDBlMTU5Li4wZGVkNzAxOGU4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2Jvb3RzdHJhcC9ib290 c3RyYXAuYwpAQCAtMzM3LDYgKzMzNyw4IEBAIEJvb3RzdHJhcE1vZGVNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10sIGJvb2wgY2hlY2tfb25seSkKIAogCUluaXRpYWxpemVGYXN0UGF0aExvY2tz KCk7CiAKKwlSZWdpc3RlclNobWVtU3RydWN0cygpOworCiAJQ3JlYXRlU2hhcmVkTWVtb3J5QW5k U2VtYXBob3JlcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bGF1bmNoX2JhY2tlbmQuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQu YwppbmRleCA5MjZmZDZmMjcwMC4uOGY2MzgxMThjZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2xhdW5jaF9iYWNrZW5kLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlv bi93YWxyZWNlaXZlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9pb193b3JrZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL2JhY2tlbmRfc3RhcnR1cC5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC0xMDQsMTIgKzEwNSwxMCBAQCB0eXBlZGVmIHN0 cnVjdAogCWNoYXIJICAqKkxXTG9ja1RyYW5jaGVOYW1lczsKIAlpbnQJCSAgICpMV0xvY2tDb3Vu dGVyOwogCUxXTG9ja1BhZGRlZCAqTWFpbkxXTG9ja0FycmF5OwotCXNsb2NrX3QgICAgKlByb2NT dHJ1Y3RMb2NrOwogCVBST0NfSERSICAgKlByb2NHbG9iYWw7CiAJUEdQUk9DCSAgICpBdXhpbGlh cnlQcm9jczsKIAlQR1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzOwogCXZvbGF0aWxlIFBNU2ln bmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsKLQlQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFsOwog CXBpZF90CQlQb3N0bWFzdGVyUGlkOwogCVRpbWVzdGFtcFR6IFBnU3RhcnRUaW1lOwogCVRpbWVz dGFtcFR6IFBnUmVsb2FkVGltZTsKQEAgLTY3OCw4ICs2NzcsMTIgQEAgU3ViUG9zdG1hc3Rlck1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1l bW9yeSBwb2ludGVycyAqLwogCWlmIChVc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpCisJewogCQlJ bml0U2htZW1BbGxvY2F0b3IoVXNlZFNobWVtU2VnQWRkcik7CiAKKwkJUmVnaXN0ZXJTaG1lbVN0 cnVjdHMoKTsKKwl9CisKIAkvKgogCSAqIFJ1biB0aGUgYXBwcm9wcmlhdGUgTWFpbiBmdW5jdGlv bgogCSAqLwpAQCAtNzM1LDEyICs3MzgsMTAgQEAgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNr ZW5kUGFyYW1ldGVycyAqcGFyYW0sCiAJcGFyYW0tPkxXTG9ja1RyYW5jaGVOYW1lcyA9IExXTG9j a1RyYW5jaGVOYW1lczsKIAlwYXJhbS0+TFdMb2NrQ291bnRlciA9IExXTG9ja0NvdW50ZXI7CiAJ cGFyYW0tPk1haW5MV0xvY2tBcnJheSA9IE1haW5MV0xvY2tBcnJheTsKLQlwYXJhbS0+UHJvY1N0 cnVjdExvY2sgPSBQcm9jU3RydWN0TG9jazsKIAlwYXJhbS0+UHJvY0dsb2JhbCA9IFByb2NHbG9i YWw7CiAJcGFyYW0tPkF1eGlsaWFyeVByb2NzID0gQXV4aWxpYXJ5UHJvY3M7CiAJcGFyYW0tPlBy ZXBhcmVkWGFjdFByb2NzID0gUHJlcGFyZWRYYWN0UHJvY3M7CiAJcGFyYW0tPlBNU2lnbmFsU3Rh dGUgPSBQTVNpZ25hbFN0YXRlOwotCXBhcmFtLT5Qcm9jU2lnbmFsID0gUHJvY1NpZ25hbDsKIAog CXBhcmFtLT5Qb3N0bWFzdGVyUGlkID0gUG9zdG1hc3RlclBpZDsKIAlwYXJhbS0+UGdTdGFydFRp bWUgPSBQZ1N0YXJ0VGltZTsKQEAgLTk5NSwxMiArOTk2LDEwIEBAIHJlc3RvcmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtKQogCUxXTG9ja1RyYW5jaGVOYW1lcyA9 IHBhcmFtLT5MV0xvY2tUcmFuY2hlTmFtZXM7CiAJTFdMb2NrQ291bnRlciA9IHBhcmFtLT5MV0xv Y2tDb3VudGVyOwogCU1haW5MV0xvY2tBcnJheSA9IHBhcmFtLT5NYWluTFdMb2NrQXJyYXk7Ci0J UHJvY1N0cnVjdExvY2sgPSBwYXJhbS0+UHJvY1N0cnVjdExvY2s7CiAJUHJvY0dsb2JhbCA9IHBh cmFtLT5Qcm9jR2xvYmFsOwogCUF1eGlsaWFyeVByb2NzID0gcGFyYW0tPkF1eGlsaWFyeVByb2Nz OwogCVByZXBhcmVkWGFjdFByb2NzID0gcGFyYW0tPlByZXBhcmVkWGFjdFByb2NzOwogCVBNU2ln bmFsU3RhdGUgPSBwYXJhbS0+UE1TaWduYWxTdGF0ZTsKLQlQcm9jU2lnbmFsID0gcGFyYW0tPlBy b2NTaWduYWw7CiAKIAlQb3N0bWFzdGVyUGlkID0gcGFyYW0tPlBvc3RtYXN0ZXJQaWQ7CiAJUGdT dGFydFRpbWUgPSBwYXJhbS0+UGdTdGFydFRpbWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jCmluZGV4IGQ2MTMzYmZlYmM2Li5mNmQzMzY5ZjkxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9w b3N0bWFzdGVyLmMKQEAgLTk2OCw2ICs5NjgsOCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCSAqIHNoYXJlZCBtZW1vcnksIGRldGVybWluZSB0aGUgdmFsdWUgb2Yg YW55IHJ1bnRpbWUtY29tcHV0ZWQgR1VDcyB0aGF0CiAJICogZGVwZW5kIG9uIHRoZSBhbW91bnQg b2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZC4KIAkgKi8KKwlSZWdpc3RlclNobWVtU3RydWN0cygp OworCiAJSW5pdGlhbGl6ZVNobWVtR1VDcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2RzbS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKaW5k ZXggNmE1YjE2MzkyZjcuLjU1ZjQ2Yzc2ODdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9kc20uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYwpAQCAtMTA4 LDcgKzEwOCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbWFpbl9yZWdpb25fZHNtX2hhbmRs ZShkc21faGFuZGxlIGhhbmRsZSk7CiBzdGF0aWMgYm9vbCBkc21faW5pdF9kb25lID0gZmFsc2U7 CiAKIC8qIFByZWFsbG9jYXRlZCBEU00gc3BhY2UgaW4gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBy ZWdpb24uICovCi1zdGF0aWMgdm9pZCAqZHNtX21haW5fc3BhY2VfYmVnaW4gPSBOVUxMOworc3Rh dGljIHZvaWQgZHNtX21haW5fc3BhY2VfaW5pdCh2b2lkICopOworCitzdGF0aWMgU2htZW1TdHJ1 Y3REZXNjIGRzbV9tYWluX3NwYWNlX3NobWVtX2Rlc2MgPSB7CisJLm5hbWUgPSAiUHJlYWxsb2Nh dGVkIERTTSIsCisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCisJLmluaXRfZm4gPSBkc21fbWFp bl9zcGFjZV9pbml0LAorfTsKKworI2RlZmluZSBkc21fbWFpbl9zcGFjZV9iZWdpbiAoZHNtX21h aW5fc3BhY2Vfc2htZW1fZGVzYy5wdHIpCiAKIC8qCiAgKiBMaXN0IG9mIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBzZWdtZW50cyB1c2VkIGJ5IHRoaXMgYmFja2VuZC4KQEAgLTQ3OSwyNyArNDg3LDI5 IEBAIHZvaWQKIGRzbV9zaG1lbV9pbml0KHZvaWQpCiB7CiAJc2l6ZV90CQlzaXplID0gZHNtX2Vz dGltYXRlX3NpemUoKTsKLQlib29sCQlmb3VuZDsKIAogCWlmIChzaXplID09IDApCiAJCXJldHVy bjsKIAotCWRzbV9tYWluX3NwYWNlX2JlZ2luID0gU2htZW1Jbml0U3RydWN0KCJQcmVhbGxvY2F0 ZWQgRFNNIiwgc2l6ZSwgJmZvdW5kKTsKLQlpZiAoIWZvdW5kKQotCXsKLQkJRnJlZVBhZ2VNYW5h Z2VyICpmcG0gPSAoRnJlZVBhZ2VNYW5hZ2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luOwotCQlz aXplX3QJCWZpcnN0X3BhZ2UgPSAwOwotCQlzaXplX3QJCXBhZ2VzOwotCi0JCS8qIFJlc2VydmUg c3BhY2UgZm9yIHRoZSBGcmVlUGFnZU1hbmFnZXIuICovCi0JCXdoaWxlIChmaXJzdF9wYWdlICog RlBNX1BBR0VfU0laRSA8IHNpemVvZihGcmVlUGFnZU1hbmFnZXIpKQotCQkJKytmaXJzdF9wYWdl OwotCi0JCS8qIEluaXRpYWxpemUgaXQgYW5kIGdpdmUgaXQgYWxsIHRoZSByZXN0IG9mIHRoZSBz cGFjZS4gKi8KLQkJRnJlZVBhZ2VNYW5hZ2VySW5pdGlhbGl6ZShmcG0sIGRzbV9tYWluX3NwYWNl X2JlZ2luKTsKLQkJcGFnZXMgPSAoc2l6ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsK LQkJRnJlZVBhZ2VNYW5hZ2VyUHV0KGZwbSwgZmlyc3RfcGFnZSwgcGFnZXMpOwotCX0KKwlTaG1l bVJlZ2lzdGVyU3RydWN0KCZkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjKTsKK30KKworc3RhdGlj IHZvaWQKK2RzbV9tYWluX3NwYWNlX2luaXQodm9pZCAqYXJnKQoreworCXNpemVfdAkJc2l6ZSA9 IGRzbV9tYWluX3NwYWNlX3NobWVtX2Rlc2Muc2l6ZTsKKwlGcmVlUGFnZU1hbmFnZXIgKmZwbSA9 IChGcmVlUGFnZU1hbmFnZXIgKikgZHNtX21haW5fc3BhY2VfYmVnaW47CisJc2l6ZV90CQlmaXJz dF9wYWdlID0gMDsKKwlzaXplX3QJCXBhZ2VzOworCisJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgdGhl IEZyZWVQYWdlTWFuYWdlci4gKi8KKwl3aGlsZSAoZmlyc3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUg PCBzaXplb2YoRnJlZVBhZ2VNYW5hZ2VyKSkKKwkJKytmaXJzdF9wYWdlOworCisJLyogSW5pdGlh bGl6ZSBpdCBhbmQgZ2l2ZSBpdCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHNwYWNlLiAqLworCUZyZWVQ YWdlTWFuYWdlckluaXRpYWxpemUoZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7CisJcGFnZXMg PSAoc2l6ZSAvIEZQTV9QQUdFX1NJWkUpIC0gZmlyc3RfcGFnZTsKKwlGcmVlUGFnZU1hbmFnZXJQ dXQoZnBtLCBmaXJzdF9wYWdlLCBwYWdlcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L2RzbV9yZWdpc3RyeS5jCmluZGV4IDA2OGMxNTc3YjEyLi44ODJhZjgzYjdiMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMKQEAgLTU0LDcgKzU0LDE1IEBAIHR5cGVkZWYg c3RydWN0IERTTVJlZ2lzdHJ5Q3R4U3RydWN0CiAJZHNoYXNoX3RhYmxlX2hhbmRsZSBkc2hoOwog fSBEU01SZWdpc3RyeUN0eFN0cnVjdDsKIAotc3RhdGljIERTTVJlZ2lzdHJ5Q3R4U3RydWN0ICpE U01SZWdpc3RyeUN0eDsKK3N0YXRpYyB2b2lkIERTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0KHZvaWQg KmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgRFNNUmVnaXN0cnlDdHhTaG1lbURlc2Mg PSB7CisJLm5hbWUgPSAiRFNNIFJlZ2lzdHJ5IERhdGEiLAorCS5zaXplID0gc2l6ZW9mKERTTVJl Z2lzdHJ5Q3R4U3RydWN0KSwKKwkuaW5pdF9mbiA9IERTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0LAor fTsKKworI2RlZmluZSBEU01SZWdpc3RyeUN0eCAoKERTTVJlZ2lzdHJ5Q3R4U3RydWN0ICopIERT TVJlZ2lzdHJ5Q3R4U2htZW1EZXNjLnB0cikKIAogdHlwZWRlZiBzdHJ1Y3QgTmFtZWREU01TdGF0 ZQogewpAQCAtMTEzLDI3ICsxMjEsMTcgQEAgc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJz IGRzaF9wYXJhbXMgPSB7CiBzdGF0aWMgZHNhX2FyZWEgKmRzbV9yZWdpc3RyeV9kc2E7CiBzdGF0 aWMgZHNoYXNoX3RhYmxlICpkc21fcmVnaXN0cnlfdGFibGU7CiAKLVNpemUKLURTTVJlZ2lzdHJ5 U2htZW1TaXplKHZvaWQpCit2b2lkCitEU01SZWdpc3RyeVNobWVtUmVnaXN0ZXIodm9pZCkKIHsK LQlyZXR1cm4gTUFYQUxJR04oc2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0KSk7CisJU2htZW1S ZWdpc3RlclN0cnVjdCgmRFNNUmVnaXN0cnlDdHhTaG1lbURlc2MpOwogfQogCi12b2lkCi1EU01S ZWdpc3RyeVNobWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0RTTVJlZ2lzdHJ5Q3R4U2htZW1J bml0KHZvaWQgKikKIHsKLQlib29sCQlmb3VuZDsKLQotCURTTVJlZ2lzdHJ5Q3R4ID0gKERTTVJl Z2lzdHJ5Q3R4U3RydWN0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiRFNNIFJlZ2lzdHJ5IERhdGEi LAotCQkJCQkJRFNNUmVnaXN0cnlTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0KLQlpZiAo IWZvdW5kKQotCXsKLQkJRFNNUmVnaXN0cnlDdHgtPmRzYWggPSBEU0FfSEFORExFX0lOVkFMSUQ7 Ci0JCURTTVJlZ2lzdHJ5Q3R4LT5kc2hoID0gRFNIQVNIX0hBTkRMRV9JTlZBTElEOwotCX0KKwlE U01SZWdpc3RyeUN0eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlEU01SZWdpc3RyeUN0 eC0+ZHNoaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lw Y2kuYwppbmRleCAxZjdlOTMzZDUwMC4uOTUyOTg4NjQ1ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNp LmMKQEAgLTEwMSwxMyArMTAxLDE0IEBAIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBoYXNoX2VzdGltYXRlX3NpemUoU0hNRU1fSU5ERVhfU0laRSwKIAkJ CQkJCQkJCQkJIHNpemVvZihTaG1lbUluZGV4RW50KSkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBkc21fZXN0aW1hdGVfc2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0 cnlTaG1lbVNpemUoKSk7CisKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1SZWdpc3RlcmVk U2l6ZSgpKTsKKworCS8qIGxlZ2FjeSBzdWJzeXN0bWVzICovCiAJc2l6ZSA9IGFkZF9zaXplKHNp emUsIEJ1ZmZlck1hbmFnZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIExv Y2tNYW5hZ2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcmVkaWNhdGVM b2NrU2htZW1TaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQcm9jR2xvYmFsU2htZW1T aXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUHJlZmV0Y2hTaG1lbVNpemUoKSk7 Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFZhcnN1cFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRk X3NpemUoc2l6ZSwgWExPR1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgWExv Z1JlY292ZXJ5U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBDTE9HU2htZW1T aXplKCkpOwpAQCAtMTE3LDExICsxMTgsNyBAQCBDYWxjdWxhdGVTaG1lbVNpemUodm9pZCkKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsKIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgTXVsdGlYYWN0U2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBMV0xvY2tTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByb2NB cnJheVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQmFja2VuZFN0YXR1c1No bWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2hhcmVkSW52YWxTaG1lbVNpemUo KSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBNU2lnbmFsU2htZW1TaXplKCkpOwotCXNpemUg PSBhZGRfc2l6ZShzaXplLCBQcm9jU2lnbmFsU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBDaGVja3BvaW50ZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUs IEF1dG9WYWN1dW1TaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFJlcGxpY2F0 aW9uU2xvdHNTaG1lbVNpemUoKSk7CkBAIC0yMTcsNiArMjE0LDEwIEBAIENyZWF0ZVNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXModm9pZCkKIAkgKi8KIAlJbml0U2htZW1BbGxvY2F0b3Ioc2VnaGRy KTsKIAorCS8qIFJlc2VydmUgc3BhY2UgZm9yIHNlbWFwaG9yZXMuICovCisJaWYgKCFJc1VuZGVy UG9zdG1hc3RlcikKKwkJUEdSZXNlcnZlU2VtYXBob3JlcyhQcm9jR2xvYmFsU2VtYXMoKSk7CisK IAkvKiBJbml0aWFsaXplIHN1YnN5c3RlbXMgKi8KIAlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0 cygpOwogCkBAIC0yMzAsNiArMjMxLDE5IEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y ZXModm9pZCkKIAkJc2htZW1fc3RhcnR1cF9ob29rKCk7CiB9CiAKK3ZvaWQKK1JlZ2lzdGVyU2ht ZW1TdHJ1Y3RzKHZvaWQpCit7CisJRFNNUmVnaXN0cnlTaG1lbVJlZ2lzdGVyKCk7CisKKwlQcm9j R2xvYmFsU2htZW1SZWdpc3RlcigpOworCVZhcnN1cFNobWVtUmVnaXN0ZXIoKTsKKwlQcm9jQXJy YXlTaG1lbVJlZ2lzdGVyKCk7CisJU2hhcmVkSW52YWxTaG1lbVJlZ2lzdGVyKCk7CisJUE1TaWdu YWxTaG1lbVJlZ2lzdGVyKCk7CisJUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIoKTsKK30KKwogLyoK ICAqIEluaXRpYWxpemUgdmFyaW91cyBzdWJzeXN0ZW1zLCBzZXR0aW5nIHVwIHRoZWlyIGRhdGEg c3RydWN0dXJlcyBpbgogICogc2hhcmVkIG1lbW9yeS4KQEAgLTI1OSwxNCArMjczLDIzIEBAIENy ZWF0ZU9yQXR0YWNoU2htZW1TdHJ1Y3RzKHZvaWQpCiAJICovCiAJSW5pdFNobWVtSW5kZXgoKTsK IAorI2lmZGVmIEVYRUNfQkFDS0VORAorCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwkJU2htZW1B dHRhY2hSZWdpc3RlcmVkKCk7CisJZWxzZQorI2VuZGlmCisJeworCQlTaG1lbUluaXRSZWdpc3Rl cmVkKCk7CisJfQorCiAJZHNtX3NobWVtX2luaXQoKTsKLQlEU01SZWdpc3RyeVNobWVtSW5pdCgp OworCS8vRFNNUmVnaXN0cnlTaG1lbUluaXQoKTsKIAogCS8qCiAJICogU2V0IHVwIHhsb2csIGNs b2csIGFuZCBidWZmZXJzCiAJICovCi0JVmFyc3VwU2htZW1Jbml0KCk7CiAJWExPR1NobWVtSW5p dCgpOworCiAJWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0 KCk7CiAJQ0xPR1NobWVtSW5pdCgpOwpAQCAtMjg4LDIzICszMTEsMTMgQEAgQ3JlYXRlT3JBdHRh Y2hTaG1lbVN0cnVjdHModm9pZCkKIAkvKgogCSAqIFNldCB1cCBwcm9jZXNzIHRhYmxlCiAJICov Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQkJSW5pdFByb2NHbG9iYWwoKTsKLQlQcm9jQXJy YXlTaG1lbUluaXQoKTsKIAlCYWNrZW5kU3RhdHVzU2htZW1Jbml0KCk7CiAJVHdvUGhhc2VTaG1l bUluaXQoKTsKIAlCYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KCk7CiAKLQkvKgotCSAqIFNldCB1 cCBzaGFyZWQtaW52YWwgbWVzc2FnaW5nCi0JICovCi0JU2hhcmVkSW52YWxTaG1lbUluaXQoKTsK LQogCS8qCiAJICogU2V0IHVwIGludGVycHJvY2VzcyBzaWduYWxpbmcgbWVjaGFuaXNtcwogCSAq LwotCVBNU2lnbmFsU2htZW1Jbml0KCk7Ci0JUHJvY1NpZ25hbFNobWVtSW5pdCgpOwogCUNoZWNr cG9pbnRlclNobWVtSW5pdCgpOwogCUF1dG9WYWN1dW1TaG1lbUluaXQoKTsKIAlSZXBsaWNhdGlv blNsb3RzU2htZW1Jbml0KCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w bXNpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwppbmRleCA0NjE4 ODIwYjMzNy4uMjM3NTI1MDBkMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Btc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYwpAQCAt ODAsOSArODAsMjQgQEAgc3RydWN0IFBNU2lnbmFsRGF0YQogCXNpZ19hdG9taWNfdCBQTUNoaWxk RmxhZ3NbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH07CiAKLS8qIFBNU2lnbmFsU3RhdGUgcG9p bnRlciBpcyB2YWxpZCBpbiBib3RoIHBvc3RtYXN0ZXIgYW5kIGNoaWxkIHByb2Nlc3NlcyAqLwor c3RhdGljIHZvaWQgUE1TaWduYWxTaG1lbUluaXQodm9pZCAqKTsKKworc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBQTVNpZ25hbFNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJQTVNpZ25hbFN0YXRlIiwK Kwkuc2l6ZSA9IDAsIC8qIGR5bmFtaWMgKi8KKwkuaW5pdF9mbiA9IFBNU2lnbmFsU2htZW1Jbml0 LAorfTsKKworLyoKKyAqIFBNU2lnbmFsU3RhdGUgcG9pbnRlciBpcyB2YWxpZCBpbiBib3RoIHBv c3RtYXN0ZXIgYW5kIGNoaWxkIHByb2Nlc3NlcworICoKKyAqIFRoaXMgaXMgYSBzdGFuZC1hbG9u ZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IGEgI2RlZmluZSBvdmVyCisgKiBQTVNpZ25hbFNo bWVtRGVzYy5wdHIgYmVjYXVzZSBpdCBpcyBuZWVkZWQgZWFybHkgYXQgYmFja2VuZCBzdGFydHVw IGFuZAorICogcGFzc2VkIGFzIGEgYmFja2VuZCBwYXJhbWV0ZXIgaW4gRVhFQ19CQUNLRU5EIG1v ZGUKKyAqLwogTk9OX0VYRUNfU1RBVElDIHZvbGF0aWxlIFBNU2lnbmFsRGF0YSAqUE1TaWduYWxT dGF0ZSA9IE5VTEw7CiAKKwogLyoKICAqIExvY2FsIGNvcHkgb2YgUE1TaWduYWxTdGF0ZS0+bnVt X2NoaWxkX2ZsYWdzLCBvbmx5IHZhbGlkIGluIHRoZQogICogcG9zdG1hc3Rlci4gIFBvc3RtYXN0 ZXIga2VlcHMgYSBsb2NhbCBjb3B5IHNvIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvCkBAIC0xMjMs MzkgKzEzOCwyOCBAQCBwb3N0bWFzdGVyX2RlYXRoX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiBzdGF0 aWMgdm9pZCBNYXJrUG9zdG1hc3RlckNoaWxkSW5hY3RpdmUoaW50IGNvZGUsIERhdHVtIGFyZyk7 CiAKIC8qCi0gKiBQTVNpZ25hbFNobWVtU2l6ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZv ciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9yeQorICogUE1TaWduYWxTaG1lbVJlZ2lzdGVyIC0g UmVnaXN0ZXIgb3VyIHNoYXJlZCBtZW1vcnkKICAqLwotU2l6ZQotUE1TaWduYWxTaG1lbVNpemUo dm9pZCkKK3ZvaWQKK1BNU2lnbmFsU2htZW1SZWdpc3Rlcih2b2lkKQogewogCVNpemUJCXNpemU7 CiAKIAlzaXplID0gb2Zmc2V0b2YoUE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3MpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShNYXhMaXZlUG9zdG1hc3RlckNoaWxkcmVuKCksCiAJ CQkJCQkJCSAgIHNpemVvZihzaWdfYXRvbWljX3QpKSk7Ci0KLQlyZXR1cm4gc2l6ZTsKKwlQTVNp Z25hbFNobWVtRGVzYy5zaXplID0gc2l6ZTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZQTVNpZ25h bFNobWVtRGVzYyk7CiB9CiAKLS8qCi0gKiBQTVNpZ25hbFNobWVtSW5pdCAtIGluaXRpYWxpemUg ZHVyaW5nIHNoYXJlZC1tZW1vcnkgY3JlYXRpb24KLSAqLwotdm9pZAotUE1TaWduYWxTaG1lbUlu aXQodm9pZCkKK3N0YXRpYyB2b2lkCitQTVNpZ25hbFNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0J Ym9vbAkJZm91bmQ7Ci0KLQlQTVNpZ25hbFN0YXRlID0gKFBNU2lnbmFsRGF0YSAqKQotCQlTaG1l bUluaXRTdHJ1Y3QoIlBNU2lnbmFsU3RhdGUiLCBQTVNpZ25hbFNobWVtU2l6ZSgpLCAmZm91bmQp OwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qIGluaXRpYWxpemUgYWxsIGZsYWdzIHRvIHplcm9l cyAqLwotCQlNZW1TZXQodW52b2xhdGl6ZShQTVNpZ25hbERhdGEgKiwgUE1TaWduYWxTdGF0ZSks IDAsIFBNU2lnbmFsU2htZW1TaXplKCkpOwotCQludW1fY2hpbGRfZmxhZ3MgPSBNYXhMaXZlUG9z dG1hc3RlckNoaWxkcmVuKCk7Ci0JCVBNU2lnbmFsU3RhdGUtPm51bV9jaGlsZF9mbGFncyA9IG51 bV9jaGlsZF9mbGFnczsKLQl9CisJLyogaW5pdGlhbGl6ZSBhbGwgZmxhZ3MgdG8gemVyb2VzICov CisJUE1TaWduYWxTdGF0ZSA9IFBNU2lnbmFsU2htZW1EZXNjLnB0cjsKKwlNZW1TZXQodW52b2xh dGl6ZShQTVNpZ25hbERhdGEgKiwgUE1TaWduYWxTdGF0ZSksIDAsIFBNU2lnbmFsU2htZW1EZXNj LnNpemUpOworCW51bV9jaGlsZF9mbGFncyA9IE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKTsK KwlQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MgPSBudW1fY2hpbGRfZmxhZ3M7CiB9CiAK IC8qCkBAIC0yOTEsNiArMjk1LDcgQEAgUmVnaXN0ZXJQb3N0bWFzdGVyQ2hpbGRBY3RpdmUodm9p ZCkKIHsKIAlpbnQJCQlzbG90ID0gTXlQTUNoaWxkU2xvdDsKIAorCUFzc2VydChQTVNpZ25hbFN0 YXRlKTsKIAlBc3NlcnQoc2xvdCA+IDAgJiYgc2xvdCA8PSBQTVNpZ25hbFN0YXRlLT5udW1fY2hp bGRfZmxhZ3MpOwogCXNsb3QtLTsKIAlBc3NlcnQoUE1TaWduYWxTdGF0ZS0+UE1DaGlsZEZsYWdz W3Nsb3RdID09IFBNX0NISUxEX0FTU0lHTkVEKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMKaW5kZXggMzAxZjU0ZmI1YTguLjA4YzYzYmNiMmE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYwpAQCAtMTAxLDYgKzEwMSwxOCBAQCB0eXBlZGVmIHN0cnVjdCBQcm9jQXJyYXlT dHJ1Y3QKIAlpbnQJCQlwZ3Byb2Nub3NbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gUHJvY0Fy cmF5U3RydWN0OwogCitzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKTsK K3N0YXRpYyB2b2lkIFByb2NBcnJheVNobWVtQXR0YWNoKHZvaWQgKmFyZyk7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgUHJvY0FycmF5U2htZW1EZXNjID0geworCS5uYW1lID0gIlByb2MgQXJy YXkiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2ZuID0gUHJvY0FycmF5U2ht ZW1Jbml0LAorCS5hdHRhY2hfZm4gPSBQcm9jQXJyYXlTaG1lbUF0dGFjaCwKK307CisKKyNkZWZp bmUgcHJvY0FycmF5ICgoUHJvY0FycmF5U3RydWN0ICopIFByb2NBcnJheVNobWVtRGVzYy5wdHIp CisKIC8qCiAgKiBTdGF0ZSBmb3IgdGhlIEdsb2JhbFZpc1Rlc3QqIGZhbWlseSBvZiBmdW5jdGlv bnMuIFRob3NlIGZ1bmN0aW9ucyBjYW4KICAqIGUuZy4gYmUgdXNlZCB0byBkZWNpZGUgaWYgYSBk ZWxldGVkIHJvdyBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IHZpb2xhdGluZwpAQCAtMjY3LDkgKzI3 OSw2IEBAIHR5cGVkZWYgZW51bSBLQVhDb21wcmVzc1JlYXNvbgogCUtBWF9TVEFSVFVQX1BST0NF U1NfSURMRSwJLyogc3RhcnR1cCBwcm9jZXNzIGlzIGFib3V0IHRvIHNsZWVwICovCiB9IEtBWENv bXByZXNzUmVhc29uOwogCi0KLXN0YXRpYyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKLQog c3RhdGljIFBHUFJPQyAqYWxsUHJvY3M7CiAKIC8qCkBAIC0yODAsOCArMjg5LDIzIEBAIHN0YXRp YyBUcmFuc2FjdGlvbklkIGNhY2hlZFhpZElzTm90SW5Qcm9ncmVzcyA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwogLyoKICAqIEJvb2trZWVwaW5nIGZvciB0cmFja2luZyBlbXVsYXRlZCB0cmFuc2Fj dGlvbnMgaW4gcmVjb3ZlcnkKICAqLwotc3RhdGljIFRyYW5zYWN0aW9uSWQgKktub3duQXNzaWdu ZWRYaWRzOwotc3RhdGljIGJvb2wgKktub3duQXNzaWduZWRYaWRzVmFsaWQ7CisKK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAi S25vd25Bc3NpZ25lZFhpZHMiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2Zu ID0gTlVMTCwKK307CisKKyNkZWZpbmUgS25vd25Bc3NpZ25lZFhpZHMgKChUcmFuc2FjdGlvbklk ICopIEtub3duQXNzaWduZWRYaWRzU2htZW1EZXNjLnB0cikKKworc3RhdGljIFNobWVtU3RydWN0 RGVzYyBLbm93bkFzc2lnbmVkWGlkc1ZhbGlkU2htZW1EZXNjID0geworCS5uYW1lID0gIktub3du QXNzaWduZWRYaWRzVmFsaWQiLAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2Zu ID0gTlVMTCwKK307CisKKyNkZWZpbmUgS25vd25Bc3NpZ25lZFhpZHNWYWxpZCAoKGJvb2wgKikg S25vd25Bc3NpZ25lZFhpZHNWYWxpZFNobWVtRGVzYy5wdHIpCisKIHN0YXRpYyBUcmFuc2FjdGlv bklkIGxhdGVzdE9ic2VydmVkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIC8qCkBAIC0z NzIsMTggKzM5NiwxOSBAQCBzdGF0aWMgaW5saW5lIEZ1bGxUcmFuc2FjdGlvbklkIEZ1bGxYaWRS ZWxhdGl2ZVRvKEZ1bGxUcmFuc2FjdGlvbklkIHJlbCwKIHN0YXRpYyB2b2lkIEdsb2JhbFZpc1Vw ZGF0ZUFwcGx5KENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaG9yaXpvbnMpOwogCiAvKgotICog UmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IFByb2NBcnJheVNobWVtSW5pdAor ICogUmVnaXN0ZXIgdGhlIHNoYXJlZCBQR1BST0MgYXJyYXkgZHVyaW5nIHBvc3RtYXN0ZXIgc3Rh cnR1cC4KICAqLwotU2l6ZQotUHJvY0FycmF5U2htZW1TaXplKHZvaWQpCit2b2lkCitQcm9jQXJy YXlTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7Ci0JU2l6ZQkJc2l6ZTsKLQotCS8qIFNpemUgb2YgdGhl IFByb2NBcnJheSBzdHJ1Y3R1cmUgaXRzZWxmICovCiAjZGVmaW5lIFBST0NBUlJBWV9NQVhQUk9D UwkoTWF4QmFja2VuZHMgKyBtYXhfcHJlcGFyZWRfeGFjdHMpCiAKLQlzaXplID0gb2Zmc2V0b2Yo UHJvY0FycmF5U3RydWN0LCBwZ3Byb2Nub3MpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShzaXplb2YoaW50KSwgUFJPQ0FSUkFZX01BWFBST0NTKSk7CisJLyogQ3JlYXRlIG9yIGF0 dGFjaCB0byB0aGUgUHJvY0FycmF5IHNoYXJlZCBzdHJ1Y3R1cmUgKi8KKwlQcm9jQXJyYXlTaG1l bURlc2Muc2l6ZSA9CisJCWFkZF9zaXplKG9mZnNldG9mKFByb2NBcnJheVN0cnVjdCwgcGdwcm9j bm9zKSwKKwkJCQkgbXVsX3NpemUoc2l6ZW9mKGludCksCisJCQkJCQkgIFBST0NBUlJBWV9NQVhQ Uk9DUykpOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NBcnJheVNobWVtRGVzYyk7CiAKIAkv KgogCSAqIER1cmluZyBIb3QgU3RhbmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0cnVj dHVyZSBjYWxsZWQKQEAgLTQwMyw2NCArNDI4LDM4IEBAIFByb2NBcnJheVNobWVtU2l6ZSh2b2lk KQogCiAJaWYgKEVuYWJsZUhvdFN0YW5kYnkpCiAJewotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwK LQkJCQkJCW11bF9zaXplKHNpemVvZihUcmFuc2FjdGlvbklkKSwKLQkJCQkJCQkJIFRPVEFMX01B WF9DQUNIRURfU1VCWElEUykpOwotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwKLQkJCQkJCW11bF9z aXplKHNpemVvZihib29sKSwgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSk7CisJCUtub3duQXNz aWduZWRYaWRzU2htZW1EZXNjLnNpemUgPQorCQkJbXVsX3NpemUoc2l6ZW9mKFRyYW5zYWN0aW9u SWQpLAorCQkJCQkgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKTsKKwkJU2htZW1SZWdpc3RlclN0 cnVjdCgmS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2MpOworCisJCUtub3duQXNzaWduZWRYaWRz VmFsaWRTaG1lbURlc2Muc2l6ZSA9CisJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01B WF9DQUNIRURfU1VCWElEUyk7CisJCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJktub3duQXNzaWduZWRY aWRzVmFsaWRTaG1lbURlc2MpOwogCX0KLQotCXJldHVybiBzaXplOwogfQogCi0vKgotICogSW5p dGlhbGl6ZSB0aGUgc2hhcmVkIFBHUFJPQyBhcnJheSBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVw LgotICovCi12b2lkCi1Qcm9jQXJyYXlTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9j QXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JLyogQ3JlYXRl IG9yIGF0dGFjaCB0byB0aGUgUHJvY0FycmF5IHNoYXJlZCBzdHJ1Y3R1cmUgKi8KLQlwcm9jQXJy YXkgPSAoUHJvY0FycmF5U3RydWN0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUHJvYyBBcnJheSIs Ci0JCQkJCQlhZGRfc2l6ZShvZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJvY25vcyksCi0J CQkJCQkJCSBtdWxfc2l6ZShzaXplb2YoaW50KSwKLQkJCQkJCQkJCQkgIFBST0NBUlJBWV9NQVhQ Uk9DUykpLAotCQkJCQkJJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKgotCQkgKiBX ZSdyZSB0aGUgZmlyc3QgLSBpbml0aWFsaXplLgotCQkgKi8KLQkJcHJvY0FycmF5LT5udW1Qcm9j cyA9IDA7Ci0JCXByb2NBcnJheS0+bWF4UHJvY3MgPSBQUk9DQVJSQVlfTUFYUFJPQ1M7Ci0JCXBy b2NBcnJheS0+bWF4S25vd25Bc3NpZ25lZFhpZHMgPSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFM7 Ci0JCXByb2NBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPnRh aWxLbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRY aWRzID0gMDsKLQkJcHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwotCQlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfeG1pbiA9IEludmFsaWRUcmFu c2FjdGlvbklkOwotCQlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfY2F0YWxvZ194bWluID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCVRyYW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0aW9u Q291bnQgPSAxOwotCX0KKwlwcm9jQXJyYXktPm51bVByb2NzID0gMDsKKwlwcm9jQXJyYXktPm1h eFByb2NzID0gUFJPQ0FSUkFZX01BWFBST0NTOworCXByb2NBcnJheS0+bWF4S25vd25Bc3NpZ25l ZFhpZHMgPSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFM7CisJcHJvY0FycmF5LT5udW1Lbm93bkFz c2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwor CXByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzID0gMDsKKwlwcm9jQXJyYXktPmxhc3RP dmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJcHJvY0FycmF5LT5yZXBsaWNh dGlvbl9zbG90X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwlwcm9jQXJyYXktPnJlcGxp Y2F0aW9uX3Nsb3RfY2F0YWxvZ194bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJVHJhbnNh bVZhcmlhYmxlcy0+eGFjdENvbXBsZXRpb25Db3VudCA9IDE7CiAKIAlhbGxQcm9jcyA9IFByb2NH bG9iYWwtPmFsbFByb2NzOworfQogCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgS25vd25B c3NpZ25lZFhpZHMgYXJyYXlzIHRvbywgaWYgbmVlZGVkICovCi0JaWYgKEVuYWJsZUhvdFN0YW5k YnkpCi0JewotCQlLbm93bkFzc2lnbmVkWGlkcyA9IChUcmFuc2FjdGlvbklkICopCi0JCQlTaG1l bUluaXRTdHJ1Y3QoIktub3duQXNzaWduZWRYaWRzIiwKLQkJCQkJCQltdWxfc2l6ZShzaXplb2Yo VHJhbnNhY3Rpb25JZCksCi0JCQkJCQkJCQkgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSwKLQkJ CQkJCQkmZm91bmQpOwotCQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkID0gKGJvb2wgKikKLQkJCVNo bWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25lZFhpZHNWYWxpZCIsCi0JCQkJCQkJbXVsX3NpemUo c2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpLAotCQkJCQkJCSZmb3VuZCk7 Ci0JfQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVtQXR0YWNoKHZvaWQgKmFyZykKK3sKKwlh bGxQcm9jcyA9IFByb2NHbG9iYWwtPmFsbFByb2NzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvcHJvY3NpZ25hbC5jCmluZGV4IDhlNTY5MjJkY2VhLi41NzQzZjA4ODMyNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMTAyLDcgKzEwMiwxNiBAQCBzdHJ1Y3QgUHJv Y1NpZ25hbEhlYWRlcgogI2RlZmluZSBCQVJSSUVSX0NMRUFSX0JJVChmbGFncywgdHlwZSkgXAog CSgoZmxhZ3MpICY9IH4oKCh1aW50MzIpIDEpIDw8ICh1aW50MzIpICh0eXBlKSkpCiAKLU5PTl9F WEVDX1NUQVRJQyBQcm9jU2lnbmFsSGVhZGVyICpQcm9jU2lnbmFsID0gTlVMTDsKK3N0YXRpYyB2 b2lkIFByb2NTaWduYWxTaG1lbUluaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0 RGVzYyBQcm9jU2lnbmFsU2htZW1EZXNjID0geworCS5uYW1lID0gIlByb2NTaWduYWwiLAorCS5z aXplID0gMCwgLyogZHluYW1pYyAqLworCS5pbml0X2ZuID0gUHJvY1NpZ25hbFNobWVtSW5pdCwK K307CisKKyNkZWZpbmUgUHJvY1NpZ25hbCAoKFByb2NTaWduYWxIZWFkZXIgKikgUHJvY1NpZ25h bFNobWVtRGVzYy5wdHIpCisKIHN0YXRpYyBQcm9jU2lnbmFsU2xvdCAqTXlQcm9jU2lnbmFsU2xv dCA9IE5VTEw7CiAKIHN0YXRpYyBib29sIENoZWNrUHJvY1NpZ25hbChQcm9jU2lnbmFsUmVhc29u IHJlYXNvbik7CkBAIC0xMTAsNTEgKzExOSwzNyBAQCBzdGF0aWMgdm9pZCBDbGVhbnVwUHJvY1Np Z25hbFN0YXRlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXNldFByb2NT aWduYWxCYXJyaWVyQml0cyh1aW50MzIgZmxhZ3MpOwogCiAvKgotICogUHJvY1NpZ25hbFNobWVt U2l6ZQotICoJCUNvbXB1dGUgc3BhY2UgbmVlZGVkIGZvciBQcm9jU2lnbmFsJ3Mgc2hhcmVkIG1l bW9yeQorICogUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIKKyAqCQlSZWdpc3RlciBQcm9jU2lnbmFs J3Mgc2hhcmVkIG1lbW9yeSBuZWVkcyBhdCBwb3N0bWFzdGVyIHN0YXJ0dXAKICAqLwotU2l6ZQot UHJvY1NpZ25hbFNobWVtU2l6ZSh2b2lkKQordm9pZAorUHJvY1NpZ25hbFNobWVtUmVnaXN0ZXIo dm9pZCkKIHsKIAlTaXplCQlzaXplOwogCiAJc2l6ZSA9IG11bF9zaXplKE51bVByb2NTaWduYWxT bG90cywgc2l6ZW9mKFByb2NTaWduYWxTbG90KSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9m ZnNldG9mKFByb2NTaWduYWxIZWFkZXIsIHBzaF9zbG90KSk7Ci0JcmV0dXJuIHNpemU7CisKKwlQ cm9jU2lnbmFsU2htZW1EZXNjLnNpemUgPSBzaXplOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlBy b2NTaWduYWxTaG1lbURlc2MpOwogfQogCi0vKgotICogUHJvY1NpZ25hbFNobWVtSW5pdAotICoJ CUFsbG9jYXRlIGFuZCBpbml0aWFsaXplIFByb2NTaWduYWwncyBzaGFyZWQgbWVtb3J5Ci0gKi8K LXZvaWQKLVByb2NTaWduYWxTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitQcm9jU2lnbmFs U2htZW1Jbml0KHZvaWQgKmFyZykKIHsKLQlTaXplCQlzaXplID0gUHJvY1NpZ25hbFNobWVtU2l6 ZSgpOwotCWJvb2wJCWZvdW5kOworCXBnX2F0b21pY19pbml0X3U2NCgmUHJvY1NpZ25hbC0+cHNo X2JhcnJpZXJHZW5lcmF0aW9uLCAwKTsKIAotCVByb2NTaWduYWwgPSAoUHJvY1NpZ25hbEhlYWRl ciAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIlByb2NTaWduYWwiLCBzaXplLCAmZm91bmQpOwotCi0J LyogSWYgd2UncmUgZmlyc3QsIGluaXRpYWxpemUuICovCi0JaWYgKCFmb3VuZCkKKwlmb3IgKGlu dCBpID0gMDsgaSA8IE51bVByb2NTaWduYWxTbG90czsgKytpKQogCXsKLQkJaW50CQkJaTsKLQot CQlwZ19hdG9taWNfaW5pdF91NjQoJlByb2NTaWduYWwtPnBzaF9iYXJyaWVyR2VuZXJhdGlvbiwg MCk7CisJCVByb2NTaWduYWxTbG90ICpzbG90ID0gJlByb2NTaWduYWwtPnBzaF9zbG90W2ldOwog Ci0JCWZvciAoaSA9IDA7IGkgPCBOdW1Qcm9jU2lnbmFsU2xvdHM7ICsraSkKLQkJewotCQkJUHJv Y1NpZ25hbFNsb3QgKnNsb3QgPSAmUHJvY1NpZ25hbC0+cHNoX3Nsb3RbaV07Ci0KLQkJCVNwaW5M b2NrSW5pdCgmc2xvdC0+cHNzX211dGV4KTsKLQkJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+ cHNzX3BpZCwgMCk7Ci0JCQlzbG90LT5wc3NfY2FuY2VsX2tleV9sZW4gPSAwOwotCQkJTWVtU2V0 KHNsb3QtPnBzc19zaWduYWxGbGFncywgMCwgc2l6ZW9mKHNsb3QtPnBzc19zaWduYWxGbGFncykp OwotCQkJcGdfYXRvbWljX2luaXRfdTY0KCZzbG90LT5wc3NfYmFycmllckdlbmVyYXRpb24sIFBH X1VJTlQ2NF9NQVgpOwotCQkJcGdfYXRvbWljX2luaXRfdTMyKCZzbG90LT5wc3NfYmFycmllckNo ZWNrTWFzaywgMCk7Ci0JCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3QtPnBzc19iYXJyaWVy Q1YpOwotCQl9CisJCVNwaW5Mb2NrSW5pdCgmc2xvdC0+cHNzX211dGV4KTsKKwkJcGdfYXRvbWlj X2luaXRfdTMyKCZzbG90LT5wc3NfcGlkLCAwKTsKKwkJc2xvdC0+cHNzX2NhbmNlbF9rZXlfbGVu ID0gMDsKKwkJTWVtU2V0KHNsb3QtPnBzc19zaWduYWxGbGFncywgMCwgc2l6ZW9mKHNsb3QtPnBz c19zaWduYWxGbGFncykpOworCQlwZ19hdG9taWNfaW5pdF91NjQoJnNsb3QtPnBzc19iYXJyaWVy R2VuZXJhdGlvbiwgUEdfVUlOVDY0X01BWCk7CisJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+ cHNzX2JhcnJpZXJDaGVja01hc2ssIDApOworCQlDb25kaXRpb25WYXJpYWJsZUluaXQoJnNsb3Qt PnBzc19iYXJyaWVyQ1YpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvc2htZW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKaW5kZXggOWYz NjJjZTg2NDEuLmZhYTBmY2JkMjFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9zaG1lbS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMKQEAgLTE5LDYg KzE5LDggQEAKICAqIG1ldGhvZHMpLiAgVGhlIHJvdXRpbmVzIGluIHRoaXMgZmlsZSBhcmUgdXNl ZCBmb3IgYWxsb2NhdGluZyBhbmQKICAqIGJpbmRpbmcgdG8gc2hhcmVkIG1lbW9yeSBkYXRhIHN0 cnVjdHVyZXMuCiAgKgorICogRklYTUU6IE5PVEVTIGJlbG93IGFyZSBvdXRkYXRlZAorICoKICAq IE5PVEVTOgogICoJCShhKSBUaGVyZSBhcmUgdGhyZWUga2luZHMgb2Ygc2hhcmVkIG1lbW9yeSBk YXRhIHN0cnVjdHVyZXMKICAqCWF2YWlsYWJsZSB0byBQT1NUR1JFUzogZml4ZWQtc2l6ZSBzdHJ1 Y3R1cmVzLCBxdWV1ZXMgYW5kIGhhc2gKQEAgLTc2LDYgKzc4LDE2IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIAorLyogc2l6ZSBjb25z dGFudHMgZm9yIHRoZSBzaG1lbSBpbmRleCB0YWJsZSAqLworIC8qIG1heCBzaXplIG9mIGRhdGEg c3RydWN0dXJlIHN0cmluZyBuYW1lICovCisjZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJCSAo NDgpCisgLyogZXN0aW1hdGVkIHNpemUgb2YgdGhlIHNobWVtIGluZGV4IHRhYmxlIChub3QgYSBo YXJkIGxpbWl0KSAqLworI2RlZmluZSBTSE1FTV9JTkRFWF9TSVpFCQkgKDY0KQorCisvKiB0aGVz ZSBhcmUgaW4gcG9zdG1hc3RlciBwcml2YXRlIG1lbW9yeSAqLworc3RhdGljIFNobWVtU3RydWN0 RGVzYyAqcmVnaXN0cnlbU0hNRU1fSU5ERVhfU0laRV07CitzdGF0aWMgaW50IG51bV9yZWdpc3Ry YXRpb25zID0gMDsKKwogLyoKICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgc3RydWN0dXJlIHN0 b3JlZCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBhdAogICogdGhlIG9mZnNldCB0aGF0 IFBHU2htZW1IZWFkZXItPmNvbnRlbnRfb2Zmc2V0IHBvaW50cyB0by4gIEFsbG9jYXRpb25zIGJ5 CkBAIC05NSw2ICsxMDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAog c3RhdGljIHZvaWQgKlNobWVtQWxsb2NSYXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRfc2l6 ZSk7CiAKK3N0YXRpYyB2b2lkIHNobWVtX2hhc2hfaW5pdCh2b2lkICphcmcpOworc3RhdGljIHZv aWQgc2htZW1faGFzaF9hdHRhY2godm9pZCAqYXJnKTsKKwogLyogc2hhcmVkIG1lbW9yeSBnbG9i YWwgdmFyaWFibGVzICovCiAKIHN0YXRpYyBQR1NobWVtSGVhZGVyICpTaG1lbVNlZ0hkcjsJLyog c2hhcmVkIG1lbSBzZWdtZW50IGhlYWRlciAqLwpAQCAtMTAzLDEzICsxMTgsMTM3IEBAIHN0YXRp YyB2b2lkICpTaG1lbUVuZDsJCQkvKiBlbmQrMSBhZGRyZXNzIG9mIHNoYXJlZCBtZW1vcnkgKi8K IAogc3RhdGljIFNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3I7CiBzbG9ja190ICAg ICpTaG1lbUxvY2s7CQkJLyogcG9pbnRzIHRvIFNobWVtQWxsb2NhdG9yLT5zaG1lbV9sb2NrICov Ci1zdGF0aWMgSFRBQiAqU2htZW1JbmRleCA9IE5VTEw7IC8qIHByaW1hcnkgaW5kZXggaGFzaHRh YmxlIGZvciBzaG1lbSAqLworCisKK3N0YXRpYyBTaG1lbUhhc2hEZXNjIFNobWVtSW5kZXhIYXNo RGVzYyA9IHsKKwkubmFtZSA9ICJTaG1lbUluZGV4IiwKKwkuaW5pdF9zaXplID0gU0hNRU1fSU5E RVhfU0laRSwKKwkubWF4X3NpemUgPSBTSE1FTV9JTkRFWF9TSVpFLAorfTsKKworIC8qIHByaW1h cnkgaW5kZXggaGFzaHRhYmxlIGZvciBzaG1lbSAqLworI2RlZmluZSBTaG1lbUluZGV4IChTaG1l bUluZGV4SGFzaERlc2MucHRyKQorCiAKIC8qIFRvIGdldCByZWxpYWJsZSByZXN1bHRzIGZvciBO VU1BIGlucXVpcnkgd2UgbmVlZCB0byAidG91Y2ggcGFnZXMiIG9uY2UgKi8KIHN0YXRpYyBib29s IGZpcnN0TnVtYVRvdWNoID0gdHJ1ZTsKIAogRGF0dW0JCXBnX251bWFfYXZhaWxhYmxlKFBHX0ZV TkNUSU9OX0FSR1MpOwogCisKK3ZvaWQKK1NobWVtUmVnaXN0ZXJTdHJ1Y3QoU2htZW1TdHJ1Y3RE ZXNjICpkZXNjKQoreworCWVsb2coREVCVUcyLCAiUkVHSVNURVI6ICVzIHdpdGggc2l6ZSAlemQi LCBkZXNjLT5uYW1lLCBkZXNjLT5zaXplKTsKKworCXJlZ2lzdHJ5W251bV9yZWdpc3RyYXRpb25z KytdID0gZGVzYzsKK30KKworc2l6ZV90CitTaG1lbVJlZ2lzdGVyZWRTaXplKHZvaWQpCit7CisJ c2l6ZV90CQlzaXplOworCisJc2l6ZSA9IDA7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVn aXN0cmF0aW9uczsgaSsrKQorCXsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlZ2lzdHJ5W2ld LT5zaXplKTsKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHJlZ2lzdHJ5W2ldLT5leHRyYV9zaXpl KTsKKwl9CisKKwllbG9nKERFQlVHMiwgIlNJWkU6IHRvdGFsICV6ZCIsIHNpemUpOworCisJcmV0 dXJuIHNpemU7Cit9CisKK3ZvaWQKK1NobWVtSW5pdFJlZ2lzdGVyZWQodm9pZCkKK3sKKwkvKiBT aG91bGQgYmUgY2FsbGVkIG9ubHkgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJh Y2tlbmQuICovCisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IG51bV9yZWdpc3RyYXRpb25zOyBpKyspCisJeworCQlzaXplX3QJCWFsbG9jYXRlZF9z aXplOworCQl2b2lkCSAgICpzdHJ1Y3RQdHI7CisJCWJvb2wJCWZvdW5kOworCQlTaG1lbUluZGV4 RW50ICpyZXN1bHQ7CisKKwkJZWxvZyhERUJVRzIsICJJTklUIFslZC8lZF06ICVzIiwgaSwgbnVt X3JlZ2lzdHJhdGlvbnMsIHJlZ2lzdHJ5W2ldLT5uYW1lKTsKKworCQkvKiBsb29rIGl0IHVwIGlu IHRoZSBzaG1lbSBpbmRleCAqLworCQlyZXN1bHQgPSAoU2htZW1JbmRleEVudCAqKQorCQkJaGFz aF9zZWFyY2goU2htZW1JbmRleCwgcmVnaXN0cnlbaV0tPm5hbWUsIEhBU0hfRU5URVJfTlVMTCwg JmZvdW5kKTsKKwkJaWYgKCFyZXN1bHQpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBj cmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3IgZGF0YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKKwkJCQkJ CQlyZWdpc3RyeVtpXS0+bmFtZSkpKTsKKwkJfQorCQlpZiAoZm91bmQpCisJCQllbG9nKEVSUk9S LCAic2htZW0gc3RydWN0IFwiJXNcIiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIiwgcmVnaXN0cnlb aV0tPm5hbWUpOworCisJCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGl0ICovCisJCXN0cnVj dFB0ciA9IFNobWVtQWxsb2NSYXcocmVnaXN0cnlbaV0tPnNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7 CisJCWlmIChzdHJ1Y3RQdHIgPT0gTlVMTCkKKwkJeworCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVt b3ZlIHRoZSBmYWlsZWQgU2htZW1JbmRleCBlbnRyeSAqLworCQkJaGFzaF9zZWFyY2goU2htZW1J bmRleCwgcmVnaXN0cnlbaV0tPm5hbWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJCWVyZXBvcnQo RVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJt c2coIm5vdCBlbm91Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCisJCQkJCQkJ IiBcIiVzXCIgKCV6dSBieXRlcyByZXF1ZXN0ZWQpIiwKKwkJCQkJCQlyZWdpc3RyeVtpXS0+bmFt ZSwgcmVnaXN0cnlbaV0tPnNpemUpKSk7CisJCX0KKwkJcmVzdWx0LT5zaXplID0gcmVnaXN0cnlb aV0tPnNpemU7CisJCXJlc3VsdC0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJ cmVzdWx0LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKworCQlyZWdpc3RyeVtpXS0+cHRyID0gc3Ry dWN0UHRyOworCQlpZiAocmVnaXN0cnlbaV0tPmluaXRfZm4pCisJCQlyZWdpc3RyeVtpXS0+aW5p dF9mbihyZWdpc3RyeVtpXS0+aW5pdF9mbl9hcmcpOworCX0KK30KKworI2lmZGVmIEVYRUNfQkFD S0VORAordm9pZAorU2htZW1BdHRhY2hSZWdpc3RlcmVkKHZvaWQpCit7CisJLyogTXVzdCBiZSBp bml0aWFsaXppbmcgYSAobm9uLXN0YW5kYWxvbmUpIGJhY2tlbmQgKi8KKwlBc3NlcnQoSXNVbmRl clBvc3RtYXN0ZXIpOworCUFzc2VydChTaG1lbUFsbG9jYXRvci0+aW5kZXggIT0gTlVMTCk7CisK KwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJVkUpOworCisJZm9yIChp bnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0cmF0aW9uczsgaSsrKQorCXsKKwkJYm9vbAkJZm91bmQ7 CisJCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsKKworCQllbG9nKExPRywgIkFUVEFDSCBbJWQvJWRd OiAlcyIsIGksIG51bV9yZWdpc3RyYXRpb25zLCByZWdpc3RyeVtpXS0+bmFtZSk7CisKKwkJLyog bG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KKwkJcmVzdWx0ID0gKFNobWVtSW5kZXhF bnQgKikKKwkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIHJlZ2lzdHJ5W2ldLT5uYW1lLCBIQVNI X0ZJTkQsICZmb3VuZCk7CisJCWlmICghZm91bmQpCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJCQkJCSBlcnJtc2coImNvdWxk IG5vdCBmaW5kIFNobWVtSW5kZXggZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCisJ CQkJCQkJcmVnaXN0cnlbaV0tPm5hbWUpKSk7CisJCX0KKworCQlyZWdpc3RyeVtpXS0+cHRyID0g cmVzdWx0LT5sb2NhdGlvbjsKKworCQlpZiAocmVnaXN0cnlbaV0tPmF0dGFjaF9mbikKKwkJCXJl Z2lzdHJ5W2ldLT5hdHRhY2hfZm4ocmVnaXN0cnlbaV0tPmF0dGFjaF9mbl9hcmcpOworCX0KKwor CUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworfQorI2VuZGlmCisKIC8qCiAgKglJbml0 U2htZW1BbGxvY2F0b3IoKSAtLS0gc2V0IHVwIGJhc2ljIHBvaW50ZXJzIHRvIHNoYXJlZCBtZW1v cnkuCiAgKgpAQCAtMjkyLDYgKzQzMSw5OCBAQCBJbml0U2htZW1JbmRleCh2b2lkKQogCQkJCQkJ CSAgIEhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUyk7CiB9CiAKKy8qCisgKiBTaG1lbUluaXRIYXNo IC0tIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRvLCBhCisgKgkJc2hhcmVkIG1l bW9yeSBoYXNoIHRhYmxlLgorICoKKyAqIFdlIGFzc3VtZSBjYWxsZXIgaXMgZG9pbmcgc29tZSBr aW5kIG9mIHN5bmNocm9uaXphdGlvbgorICogc28gdGhhdCB0d28gcHJvY2Vzc2VzIGRvbid0IHRy eSB0byBjcmVhdGUvaW5pdGlhbGl6ZSB0aGUgc2FtZQorICogdGFibGUgYXQgb25jZS4gIChJbiBw cmFjdGljZSwgYWxsIGNyZWF0aW9ucyBhcmUgZG9uZSBpbiB0aGUgcG9zdG1hc3RlcgorICogcHJv Y2VzczsgY2hpbGQgcHJvY2Vzc2VzIHNob3VsZCBhbHdheXMgYmUgYXR0YWNoaW5nIHRvIGV4aXN0 aW5nIHRhYmxlcy4pCisgKgorICogbWF4X3NpemUgaXMgdGhlIGVzdGltYXRlZCBtYXhpbXVtIG51 bWJlciBvZiBoYXNodGFibGUgZW50cmllcy4gIFRoaXMgaXMKKyAqIG5vdCBhIGhhcmQgbGltaXQs IGJ1dCB0aGUgYWNjZXNzIGVmZmljaWVuY3kgd2lsbCBkZWdyYWRlIGlmIGl0IGlzCisgKiBleGNl ZWRlZCBzdWJzdGFudGlhbGx5IChzaW5jZSBpdCdzIHVzZWQgdG8gY29tcHV0ZSBkaXJlY3Rvcnkg c2l6ZSBhbmQKKyAqIHRoZSBoYXNoIHRhYmxlIGJ1Y2tldHMgd2lsbCBnZXQgb3ZlcmZ1bGwpLgor ICoKKyAqIGluaXRfc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzIHRvIHBy ZWFsbG9jYXRlLiAgRm9yIGEgdGFibGUKKyAqIHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0YWlu LCB0aGlzIHNob3VsZCBiZSBlcXVhbCB0byBtYXhfc2l6ZTsgdGhhdAorICogZW5zdXJlcyB0aGF0 IG5vIHJ1bi10aW1lIG91dC1vZi1zaGFyZWQtbWVtb3J5IGZhaWx1cmVzIGNhbiBvY2N1ci4KKyAq CisgKiAqaW5mb1AgYW5kIGhhc2hfZmxhZ3MgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IHRoZSBlbnRy eSBzaXplcyBhbmQga2V5CisgKiBjb21wYXJpc29uIHNlbWFudGljcyAoc2VlIGhhc2hfY3JlYXRl KCkpLiAgRmxhZyBiaXRzIGFuZCB2YWx1ZXMgc3BlY2lmaWMKKyAqIHRvIHNoYXJlZC1tZW1vcnkg aGFzaCB0YWJsZXMgYXJlIGFkZGVkIGhlcmUsIGV4Y2VwdCB0aGF0IGNhbGxlcnMgbWF5CisgKiBj aG9vc2UgdG8gc3BlY2lmeSBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFTSF9GSVhFRF9TSVpFLgor ICoKKyAqIE5vdGU6IGJlZm9yZSBQb3N0Z3JlcyA5LjAsIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQg TlVMTCBmb3Igc29tZSBmYWlsdXJlCisgKiBjYXNlcy4gIE5vdywgaXQgYWx3YXlzIHRocm93cyBl cnJvciBpbnN0ZWFkLCBzbyBjYWxsZXJzIG5lZWQgbm90IGNoZWNrCisgKiBmb3IgTlVMTC4KKyAq Lwordm9pZAorU2htZW1SZWdpc3Rlckhhc2goU2htZW1IYXNoRGVzYyAqZGVzYywJCS8qIGNvbmZp Z3VyYXRpb24gKi8KKwkJCQkgIEhBU0hDVEwgKmluZm9QLAkvKiBpbmZvIGFib3V0IGtleSBhbmQg YnVja2V0IHNpemUgKi8KKwkJCQkgIGludCBoYXNoX2ZsYWdzKQkvKiBpbmZvIGFib3V0IGluZm9Q ICovCit7CisJLyoKKwkgKiBIYXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hhcmVkIG1lbW9yeSBo YXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBpdCBjYW4ndAorCSAqIGdyb3cgb3Igb3RoZXIgYmFja2Vu ZHMgd291bGRuJ3QgYmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFrZSBzdXJlIHdlCisJICogbWFr ZSBpdCBiaWcgZW5vdWdoIHRvIHN0YXJ0IHdpdGguCisJICoKKwkgKiBUaGUgc2hhcmVkIG1lbW9y eSBhbGxvY2F0b3IgbXVzdCBiZSBzcGVjaWZpZWQgdG9vLgorCSAqLworCWluZm9QLT5kc2l6ZSA9 IGluZm9QLT5tYXhfZHNpemUgPSBoYXNoX3NlbGVjdF9kaXJzaXplKGRlc2MtPm1heF9zaXplKTsK KwlpbmZvUC0+YWxsb2MgPSBTaG1lbUFsbG9jTm9FcnJvcjsKKwloYXNoX2ZsYWdzIHw9IEhBU0hf U0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBIQVNIX0RJUlNJWkU7CisKKwkvKiBsb29rIGl0IHVw IGluIHRoZSBzaG1lbSBpbmRleCAqLworCW1lbXNldCgmZGVzYy0+YmFzZV9kZXNjLCAwLCBzaXpl b2YoZGVzYy0+YmFzZV9kZXNjKSk7CisJZGVzYy0+YmFzZV9kZXNjLm5hbWUgPSBkZXNjLT5uYW1l OworCWRlc2MtPmJhc2VfZGVzYy5zaXplID0gaGFzaF9nZXRfc2hhcmVkX3NpemUoaW5mb1AsIGhh c2hfZmxhZ3MpOworCWRlc2MtPmJhc2VfZGVzYy5pbml0X2ZuID0gc2htZW1faGFzaF9pbml0Owor CWRlc2MtPmJhc2VfZGVzYy5pbml0X2ZuX2FyZyA9IGRlc2M7CisJZGVzYy0+YmFzZV9kZXNjLmF0 dGFjaF9mbiA9IHNobWVtX2hhc2hfYXR0YWNoOworCWRlc2MtPmJhc2VfZGVzYy5hdHRhY2hfZm5f YXJnID0gZGVzYzsKKworCWRlc2MtPmJhc2VfZGVzYy5leHRyYV9zaXplID0gaGFzaF9lc3RpbWF0 ZV9zaXplKGRlc2MtPm1heF9zaXplLCBpbmZvUC0+ZW50cnlzaXplKSAtIGRlc2MtPmJhc2VfZGVz Yy5zaXplOworCisJZGVzYy0+aGFzaF9mbGFncyA9IGhhc2hfZmxhZ3M7CisJZGVzYy0+aW5mb1Ag PSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKEhBU0hDVEwpKTsK KwltZW1jcHkoZGVzYy0+aW5mb1AsIGluZm9QLCBzaXplb2YoSEFTSENUTCkpOworCisJU2htZW1S ZWdpc3RlclN0cnVjdCgmZGVzYy0+YmFzZV9kZXNjKTsKK30KKworc3RhdGljIHZvaWQKK3NobWVt X2hhc2hfaW5pdCh2b2lkICphcmcpCit7CisJU2htZW1IYXNoRGVzYyAqZGVzYyA9IChTaG1lbUhh c2hEZXNjICopIGFyZzsKKwlpbnQJCQloYXNoX2ZsYWdzID0gZGVzYy0+aGFzaF9mbGFnczsKKwor CS8qIFBhc3MgbG9jYXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwor CWRlc2MtPnB0ciA9IGRlc2MtPmJhc2VfZGVzYy5wdHI7CisJZGVzYy0+aW5mb1AtPmhjdGwgPSAo SEFTSEhEUiAqKSBkZXNjLT5wdHI7CisKKwlkZXNjLT5wdHIgPSBoYXNoX2NyZWF0ZShkZXNjLT5u YW1lLCBkZXNjLT5pbml0X3NpemUsIGRlc2MtPmluZm9QLCBoYXNoX2ZsYWdzKTsKK30KKworc3Rh dGljIHZvaWQKK3NobWVtX2hhc2hfYXR0YWNoKHZvaWQgKmFyZykKK3sKKwlTaG1lbUhhc2hEZXNj ICpkZXNjID0gKFNobWVtSGFzaERlc2MgKikgYXJnOworCWludAkJCWhhc2hfZmxhZ3MgPSBkZXNj LT5oYXNoX2ZsYWdzOworCisJLyoKKwkgKiBpZiBpdCBhbHJlYWR5IGV4aXN0cywgYXR0YWNoIHRv IGl0IHJhdGhlciB0aGFuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplCisJICogbmV3IHNwYWNlCisJ ICovCisJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKKworCS8qIFBhc3MgbG9jYXRpb24gb2Yg aGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLworCWRlc2MtPmluZm9QLT5oY3RsID0g KEhBU0hIRFIgKikgZGVzYy0+cHRyOworCisJZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+ bmFtZSwgZGVzYy0+aW5pdF9zaXplLCBkZXNjLT5pbmZvUCwgaGFzaF9mbGFncyk7Cit9CisKIC8q CiAgKiBTaG1lbUluaXRIYXNoIC0tIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSwgb3IgYXR0YWNoIHRv LCBhCiAgKgkJc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52 YWxhZHQuYwppbmRleCBhN2E3Y2M0ZjBhOS4uMGZlMGYyNTY5NzEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3NpbnZhbGFkdC5jCkBAIC0yMDMsNyArMjAzLDE2IEBAIHR5cGVkZWYgc3RydWN0IFNJU2Vn CiAgKi8KICNkZWZpbmUgTnVtUHJvY1N0YXRlU2xvdHMJKE1heEJhY2tlbmRzICsgTlVNX0FVWElM SUFSWV9QUk9DUykKIAotc3RhdGljIFNJU2VnICpzaG1JbnZhbEJ1ZmZlcjsJLyogcG9pbnRlciB0 byB0aGUgc2hhcmVkIGludmFsIGJ1ZmZlciAqLworc3RhdGljIHZvaWQgU2hhcmVkSW52YWxTaG1l bUluaXQodm9pZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBTaGFyZWRJbnZhbFNo bWVtRGVzYyA9IHsKKwkubmFtZSA9ICJzaG1JbnZhbEJ1ZmZlciIsCisJLnNpemUgPSAwLAkvKiBk eW5hbWljICovCisJLmluaXRfZm4gPSBTaGFyZWRJbnZhbFNobWVtSW5pdCwKK307CisKKy8qIHBv aW50ZXIgdG8gdGhlIHNoYXJlZCBpbnZhbCBidWZmZXIgKi8KKyNkZWZpbmUgc2htSW52YWxCdWZm ZXIgKChTSVNlZyAqKSBTaGFyZWRJbnZhbFNobWVtRGVzYy5wdHIpCiAKIAogc3RhdGljIExvY2Fs VHJhbnNhY3Rpb25JZCBuZXh0TG9jYWxUcmFuc2FjdGlvbklkOwpAQCAtMjEyLDEwICsyMjEsMTEg QEAgc3RhdGljIHZvaWQgQ2xlYW51cEludmFsaWRhdGlvblN0YXRlKGludCBzdGF0dXMsIERhdHVt IGFyZyk7CiAKIAogLyoKLSAqIFNoYXJlZEludmFsU2htZW1TaXplIC0tLSByZXR1cm4gc2hhcmVk LW1lbW9yeSBzcGFjZSBuZWVkZWQKKyAqIFNoYXJlZEludmFsU2htZW1SZWdpc3RlcgorICoJCVJl Z2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZHMgZm9yIHRoZSBTSSBtZXNzYWdlIGJ1ZmZlcgogICov Ci1TaXplCi1TaGFyZWRJbnZhbFNobWVtU2l6ZSh2b2lkKQordm9pZAorU2hhcmVkSW52YWxTaG1l bVJlZ2lzdGVyKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIApAQCAtMjIzLDI2ICsyMzMsMTcgQEAg U2hhcmVkSW52YWxTaG1lbVNpemUodm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoc2l6ZW9mKFByb2NTdGF0ZSksIE51bVByb2NTdGF0ZVNsb3RzKSk7CS8qIHByb2NTdGF0ZSAq LwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShzaXplb2YoaW50KSwgTnVtUHJvY1N0 YXRlU2xvdHMpKTsJLyogcGdwcm9jbm9zICovCiAKLQlyZXR1cm4gc2l6ZTsKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBpbiBzaGFyZWQgbWVtb3J5ICovCisJU2hhcmVkSW52YWxTaG1lbURlc2Muc2l6ZSA9 IHNpemU7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmU2hhcmVkSW52YWxTaG1lbURlc2MpOwogfQog Ci0vKgotICogU2hhcmVkSW52YWxTaG1lbUluaXQKLSAqCQlDcmVhdGUgYW5kIGluaXRpYWxpemUg dGhlIFNJIG1lc3NhZ2UgYnVmZmVyCi0gKi8KLXZvaWQKLVNoYXJlZEludmFsU2htZW1Jbml0KHZv aWQpCitzdGF0aWMgdm9pZAorU2hhcmVkSW52YWxTaG1lbUluaXQodm9pZCAqYXJnKQogewogCWlu dAkJCWk7Ci0JYm9vbAkJZm91bmQ7Ci0KLQkvKiBBbGxvY2F0ZSBzcGFjZSBpbiBzaGFyZWQgbWVt b3J5ICovCi0Jc2htSW52YWxCdWZmZXIgPSAoU0lTZWcgKikKLQkJU2htZW1Jbml0U3RydWN0KCJz aG1JbnZhbEJ1ZmZlciIsIFNoYXJlZEludmFsU2htZW1TaXplKCksICZmb3VuZCk7Ci0JaWYgKGZv dW5kKQotCQlyZXR1cm47CiAKLQkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBzYXZlIHNpemUg b2YgcHJvY1N0YXRlIGFycmF5LCBpbml0IHNwaW5sb2NrICovCisJLyogQ2xlYXIgbWVzc2FnZSBj b3VudGVycywgc2F2ZSBzaXplIG9mIHByb2NTdGF0ZSBhcnJheSBGSVhNRSwgaW5pdCBzcGlubG9j ayAqLwogCXNobUludmFsQnVmZmVyLT5taW5Nc2dOdW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5t YXhNc2dOdW0gPSAwOwogCXNobUludmFsQnVmZmVyLT5uZXh0VGhyZXNob2xkID0gQ0xFQU5VUF9N SU47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCBjN2EwMDFiM2I3OS4uODUzNzViNTE5NWUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtNzMsMTMgKzczLDMzIEBAIFBHUFJPQwkgICAq TXlQcm9jID0gTlVMTDsKICAqIHJlbGF0aXZlbHkgaW5mcmVxdWVudGx5IChvbmx5IGF0IGJhY2tl bmQgc3RhcnR1cCBvciBzaHV0ZG93bikgYW5kIG5vdCBmb3IKICAqIHZlcnkgbG9uZywgc28gYSBz cGlubG9jayBpcyBva2F5LgogICovCi1OT05fRVhFQ19TVEFUSUMgc2xvY2tfdCAqUHJvY1N0cnVj dExvY2sgPSBOVUxMOworI2RlZmluZSBQcm9jU3RydWN0TG9jayAoJlByb2NHbG9iYWwtPmZyZWVQ cm9jc0xvY2spCisKK3N0YXRpYyB2b2lkIFByb2NHbG9iYWxTaG1lbUluaXQodm9pZCAqYXJnKTsK Kworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9jR2xvYmFsU2htZW1EZXNjID0geworCS5uYW1l ID0gIlByb2MgSGVhZGVyIiwKKwkuc2l6ZSA9IHNpemVvZihQUk9DX0hEUiksCisJLmluaXRfZm4g PSBQcm9jR2xvYmFsU2htZW1Jbml0LAorfTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBQcm9j R2xvYmFsQWxsUHJvY3NTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiUEdQUk9DIHN0cnVjdHVyZXMi LAorCS5zaXplID0gMCwgLyogZHluYW1pYyAqLworfTsKKworc3RhdGljIFNobWVtU3RydWN0RGVz YyBGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJGYXN0LVBhdGggTG9j ayBBcnJheSIsCisJLnNpemUgPSAwLCAvKiBkeW5hbWljICovCit9OwogCiAvKiBQb2ludGVycyB0 byBzaGFyZWQtbWVtb3J5IHN0cnVjdHVyZXMgKi8KIFBST0NfSERSICAgKlByb2NHbG9iYWwgPSBO VUxMOwogTk9OX0VYRUNfU1RBVElDIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3MgPSBOVUxMOwogUEdQ Uk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jcyA9IE5VTEw7CiAKK3N0YXRpYyB1aW50MzIgVG90YWxQ cm9jczsKKwogc3RhdGljIERlYWRMb2NrU3RhdGUgZGVhZGxvY2tfc3RhdGUgPSBEU19OT1RfWUVU X0NIRUNLRUQ7CiAKIC8qIElzIGEgZGVhZGxvY2sgY2hlY2sgcGVuZGluZz8gKi8KQEAgLTkxLDI0 ICsxMTEsNiBAQCBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQcm9jS2lsbChpbnQgY29kZSwgRGF0dW0g YXJnKTsKIHN0YXRpYyB2b2lkIENoZWNrRGVhZExvY2sodm9pZCk7CiAKIAotLyoKLSAqIFJlcG9y dCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBQR1BST0MuCi0gKi8KLXN0YXRpYyBTaXpl Ci1QR1Byb2NTaG1lbVNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplID0gMDsKLQlTaXplCQlUb3Rh bFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllf UFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpKTsKLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xv YmFsLT5zdWJ4aWRTdGF0ZXMpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRv dGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKSk7Ci0KLQlyZXR1cm4g c2l6ZTsKLX0KLQogLyoKICAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5IHNwYWNlIG5lZWRlZCBieSBG YXN0LVBhdGggbG9ja3MuCiAgKi8KQEAgLTExNiw4ICsxMTgsNiBAQCBzdGF0aWMgU2l6ZQogRmFz dFBhdGhMb2NrU2htZW1TaXplKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZSA9IDA7Ci0JU2l6ZQkJVG90 YWxQcm9jcyA9Ci0JCWFkZF9zaXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZ X1BST0NTLCBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJ CQlmcFJlbElkU2l6ZTsKIApAQCAtMTMzLDI1ICsxMzMsNiBAQCBGYXN0UGF0aExvY2tTaG1lbVNp emUodm9pZCkKIAlyZXR1cm4gc2l6ZTsKIH0KIAotLyoKLSAqIFJlcG9ydCBzaGFyZWQtbWVtb3J5 IHNwYWNlIG5lZWRlZCBieSBJbml0UHJvY0dsb2JhbC4KLSAqLwotU2l6ZQotUHJvY0dsb2JhbFNo bWVtU2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCi0JLyogUHJvY0dsb2JhbCAqLwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXplb2YoUFJPQ19IRFIpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgc2l6ZW9mKHNsb2NrX3QpKTsKLQotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBQR1Nl bWFwaG9yZVNobWVtU2l6ZShQcm9jR2xvYmFsU2VtYXMoKSkpOwotCXNpemUgPSBhZGRfc2l6ZShz aXplLCBQR1Byb2NTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIEZhc3RQYXRo TG9ja1NobWVtU2l6ZSgpKTsKLQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogUmVwb3J0IG51 bWJlciBvZiBzZW1hcGhvcmVzIG5lZWRlZCBieSBJbml0UHJvY0dsb2JhbC4KICAqLwpAQCAtMTg2 LDM1ICsxNjcsNjMgQEAgUHJvY0dsb2JhbFNlbWFzKHZvaWQpCiAgKgkgIGltcGxlbWVudGF0aW9u IHR5cGljYWxseSByZXF1aXJlcyB1cyB0byBjcmVhdGUgc2VtYXBob3JlcyBpbiB0aGUKICAqCSAg cG9zdG1hc3Rlciwgbm90IGluIGJhY2tlbmRzLgogICoKLSAqIE5vdGU6IHRoaXMgaXMgTk9UIGNh bGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRzIHVuZGVyIGEgcG9zdG1hc3RlciwKKyAqIE5vdGU6 IHRoaXMgaXMgTk9UIGNhbGxlZCBieSBpbmRpdmlkdWFsIGJhY2tlbmRzIHVuZGVyIGEgcG9zdG1h c3RlciwgWFhYCiAgKiBub3QgZXZlbiBpbiB0aGUgRVhFQ19CQUNLRU5EIGNhc2UuICBUaGUgUHJv Y0dsb2JhbCBhbmQgQXV4aWxpYXJ5UHJvY3MKICAqIHBvaW50ZXJzIG11c3QgYmUgcHJvcGFnYXRl ZCBzcGVjaWFsbHkgZm9yIEVYRUNfQkFDS0VORCBvcGVyYXRpb24uCiAgKi8KIHZvaWQKLUluaXRQ cm9jR2xvYmFsKHZvaWQpCitQcm9jR2xvYmFsU2htZW1SZWdpc3Rlcih2b2lkKQoreworCVNpemUJ CXNpemUgPSAwOworCisJLyoKKwkgKiBSZXNlcnZlIGFsbCB0aGUgUEdQUk9DIHN0cnVjdHVyZXMg d2UnbGwgbmVlZC4gIFRoZXJlIGFyZQorCSAqIHNpeCBzZXBhcmF0ZSBjb25zdW1lcnM6ICgxKSBu b3JtYWwgYmFja2VuZHMsICgyKSBhdXRvdmFjdXVtIHdvcmtlcnMgYW5kCisJICogc3BlY2lhbCB3 b3JrZXJzLCAoMykgYmFja2dyb3VuZCB3b3JrZXJzLCAoNCkgd2Fsc2VuZGVycywgKDUpIGF1eGls aWFyeQorCSAqIHByb2Nlc3NlcywgYW5kICg2KSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuICAoRm9y IGxhcmdlbHktaGlzdG9yaWNhbAorCSAqIHJlYXNvbnMsIHdlIGNvbWJpbmUgYXV0b3ZhY3V1bSBh bmQgc3BlY2lhbCB3b3JrZXJzIGludG8gb25lIGNhdGVnb3J5CisJICogd2l0aCBhIHNpbmdsZSBm cmVlbGlzdC4pICBFYWNoIFBHUFJPQyBzdHJ1Y3R1cmUgaXMgZGVkaWNhdGVkIHRvIGV4YWN0bHkK KwkgKiBvbmUgb2YgdGhlc2UgcHVycG9zZXMsIGFuZCB0aGV5IGRvIG5vdCBtb3ZlIGJldHdlZW4g Z3JvdXBzLgorCSAqLworCVRvdGFsUHJvY3MgPQorCQlhZGRfc2l6ZShNYXhCYWNrZW5kcywgYWRk X3NpemUoTlVNX0FVWElMSUFSWV9QUk9DUywgbWF4X3ByZXBhcmVkX3hhY3RzKSk7CisKKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKFBHUFJPQykpKTsK KworCS8qIEZJWE1FOiB0aGUgc2l6ZW9mcyBsb29rIGRhbmdlcm91cyBiZWNhdXNlIFByb2NHbG9i YWwgaXMgbm90IGluaXRpYWxpemVkIHlldCAqLworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxf c2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlByb2NHbG9iYWwtPnhpZHMpKSk7CisJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3Vi eGlkU3RhdGVzKSkpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2Nz LCBzaXplb2YoKlByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzKSkpOworCisJUHJvY0dsb2JhbEFsbFBy b2NzU2htZW1EZXNjLnNpemUgPSBzaXplOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NHbG9i YWxBbGxQcm9jc1NobWVtRGVzYyk7CisKKwlGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYy5zaXpl ID0gRmFzdFBhdGhMb2NrU2htZW1TaXplKCk7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmRmFzdFBh dGhMb2NrQXJyYXlTaG1lbURlc2MpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIFByb2NHbG9iYWwg c2hhcmVkIHN0cnVjdHVyZSBsYXN0LiBJdHMgaW5pdCBjYWxsYmFjaworCSAqIGluaXRpYWxpemVz IHRoZSBvdGhlcnMgdG9vLgorCSAqLworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJlByb2NHbG9iYWxT aG1lbURlc2MpOworfQorCitzdGF0aWMgdm9pZAorUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lkICph cmcpCiB7CisJY2hhcgkgICAqcHRyOworCXNpemVfdAkJcmVxdWVzdFNpemU7CiAJUEdQUk9DCSAg ICpwcm9jczsKIAlpbnQJCQlpLAogCQkJCWo7Ci0JYm9vbAkJZm91bmQ7Ci0JdWludDMyCQlUb3Rh bFByb2NzID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJQVJZX1BST0NTICsgbWF4X3ByZXBhcmVk X3hhY3RzOwotCiAJLyogVXNlZCBmb3Igc2V0dXAgb2YgcGVyLWJhY2tlbmQgZmFzdC1wYXRoIHNs b3RzLiAqLwogCWNoYXIJICAgKmZwUHRyLAogCQkJICAgKmZwRW5kUHRyIFBHX1VTRURfRk9SX0FT U0VSVFNfT05MWTsKIAlTaXplCQlmcExvY2tCaXRzU2l6ZSwKIAkJCQlmcFJlbElkU2l6ZTsKLQlT aXplCQlyZXF1ZXN0U2l6ZTsKLQljaGFyCSAgICpwdHI7CiAKLQkvKiBDcmVhdGUgdGhlIFByb2NH bG9iYWwgc2hhcmVkIHN0cnVjdHVyZSAqLwotCVByb2NHbG9iYWwgPSAoUFJPQ19IRFIgKikKLQkJ U2htZW1Jbml0U3RydWN0KCJQcm9jIEhlYWRlciIsIHNpemVvZihQUk9DX0hEUiksICZmb3VuZCk7 Ci0JQXNzZXJ0KCFmb3VuZCk7CisJUHJvY0dsb2JhbCA9IFByb2NHbG9iYWxTaG1lbURlc2MucHRy OwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVyZXMuCi0JICovCiAJUHJv Y0dsb2JhbC0+c3BpbnNfcGVyX2RlbGF5ID0gREVGQVVMVF9TUElOU19QRVJfREVMQVk7CiAJZGxp c3RfaW5pdCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzKTsKIAlkbGlzdF9pbml0KCZQcm9jR2xvYmFs LT5hdXRvdmFjRnJlZVByb2NzKTsKQEAgLTIyNSwyMyArMjM0LDExIEBAIEluaXRQcm9jR2xvYmFs KHZvaWQpCiAJUHJvY0dsb2JhbC0+Y2hlY2twb2ludGVyUHJvYyA9IElOVkFMSURfUFJPQ19OVU1C RVI7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5wcm9jQXJyYXlHcm91cEZpcnN0 LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlwZ19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwt PmNsb2dHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKKwlTcGluTG9ja0luaXQoUHJv Y1N0cnVjdExvY2spOwogCi0JLyoKLQkgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYWxsIHRoZSBQ R1BST0Mgc3RydWN0dXJlcyB3ZSdsbCBuZWVkLiAgVGhlcmUgYXJlCi0JICogc2l4IHNlcGFyYXRl IGNvbnN1bWVyczogKDEpIG5vcm1hbCBiYWNrZW5kcywgKDIpIGF1dG92YWN1dW0gd29ya2VycyBh bmQKLQkgKiBzcGVjaWFsIHdvcmtlcnMsICgzKSBiYWNrZ3JvdW5kIHdvcmtlcnMsICg0KSB3YWxz ZW5kZXJzLCAoNSkgYXV4aWxpYXJ5Ci0JICogcHJvY2Vzc2VzLCBhbmQgKDYpIHByZXBhcmVkIHRy YW5zYWN0aW9ucy4gIChGb3IgbGFyZ2VseS1oaXN0b3JpY2FsCi0JICogcmVhc29ucywgd2UgY29t YmluZSBhdXRvdmFjdXVtIGFuZCBzcGVjaWFsIHdvcmtlcnMgaW50byBvbmUgY2F0ZWdvcnkKLQkg KiB3aXRoIGEgc2luZ2xlIGZyZWVsaXN0LikgIEVhY2ggUEdQUk9DIHN0cnVjdHVyZSBpcyBkZWRp Y2F0ZWQgdG8gZXhhY3RseQotCSAqIG9uZSBvZiB0aGVzZSBwdXJwb3NlcywgYW5kIHRoZXkgZG8g bm90IG1vdmUgYmV0d2VlbiBncm91cHMuCi0JICovCi0JcmVxdWVzdFNpemUgPSBQR1Byb2NTaG1l bVNpemUoKTsKLQotCXB0ciA9IFNobWVtSW5pdFN0cnVjdCgiUEdQUk9DIHN0cnVjdHVyZXMiLAot CQkJCQkJICByZXF1ZXN0U2l6ZSwKLQkJCQkJCSAgJmZvdW5kKTsKLQotCU1lbVNldChwdHIsIDAs IHJlcXVlc3RTaXplKTsKKwlwdHIgPSBQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2MucHRyOwor CXJlcXVlc3RTaXplID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjLnNpemU7CisJbWVtc2V0 KHB0ciwgMCwgcmVxdWVzdFNpemUpOwogCiAJcHJvY3MgPSAoUEdQUk9DICopIHB0cjsKIAlwdHIg PSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyk7CkBAIC0yNzcsMjAgKzI3NCwxMyBA QCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCWZwTG9ja0JpdHNTaXplID0gTUFYQUxJR04oRmFzdFBh dGhMb2NrR3JvdXBzUGVyQmFja2VuZCAqIHNpemVvZih1aW50NjQpKTsKIAlmcFJlbElkU2l6ZSA9 IE1BWEFMSUdOKEZhc3RQYXRoTG9ja1Nsb3RzUGVyQmFja2VuZCgpICogc2l6ZW9mKE9pZCkpOwog Ci0JcmVxdWVzdFNpemUgPSBGYXN0UGF0aExvY2tTaG1lbVNpemUoKTsKLQotCWZwUHRyID0gU2ht ZW1Jbml0U3RydWN0KCJGYXN0LVBhdGggTG9jayBBcnJheSIsCi0JCQkJCQkJcmVxdWVzdFNpemUs Ci0JCQkJCQkJJmZvdW5kKTsKLQotCU1lbVNldChmcFB0ciwgMCwgcmVxdWVzdFNpemUpOworCWZw UHRyID0gRmFzdFBhdGhMb2NrQXJyYXlTaG1lbURlc2MucHRyOworCXJlcXVlc3RTaXplID0gRmFz dFBhdGhMb2NrQXJyYXlTaG1lbURlc2Muc2l6ZTsKKwltZW1zZXQoZnBQdHIsIDAsIHJlcXVlc3RT aXplKTsKIAogCS8qIEZvciBhc3NlcnRzIGNoZWNraW5nIHdlIGRpZCBub3Qgb3ZlcmZsb3cuICov CiAJZnBFbmRQdHIgPSBmcFB0ciArIHJlcXVlc3RTaXplOwogCi0JLyogUmVzZXJ2ZSBzcGFjZSBm b3Igc2VtYXBob3Jlcy4gKi8KLQlQR1Jlc2VydmVTZW1hcGhvcmVzKFByb2NHbG9iYWxTZW1hcygp KTsKLQogCWZvciAoaSA9IDA7IGkgPCBUb3RhbFByb2NzOyBpKyspCiAJewogCQlQR1BST0MJICAg KnByb2MgPSAmcHJvY3NbaV07CkBAIC0zODAsMTIgKzM3MCw2IEBAIEluaXRQcm9jR2xvYmFsKHZv aWQpCiAJICovCiAJQXV4aWxpYXJ5UHJvY3MgPSAmcHJvY3NbTWF4QmFja2VuZHNdOwogCVByZXBh cmVkWGFjdFByb2NzID0gJnByb2NzW01heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DU107 Ci0KLQkvKiBDcmVhdGUgUHJvY1N0cnVjdExvY2sgc3BpbmxvY2ssIHRvbyAqLwotCVByb2NTdHJ1 Y3RMb2NrID0gKHNsb2NrX3QgKikgU2htZW1Jbml0U3RydWN0KCJQcm9jU3RydWN0TG9jayBzcGlu bG9jayIsCi0JCQkJCQkJCQkJCQkgc2l6ZW9mKHNsb2NrX3QpLAotCQkJCQkJCQkJCQkJICZmb3Vu ZCk7Ci0JU3BpbkxvY2tJbml0KFByb2NTdHJ1Y3RMb2NrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMu YwppbmRleCAwMmU5YWFhNmJjYS4uZWVkMTg4NDE2ZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTQx MTcsNiArNDExNyw4IEBAIFBvc3RncmVzU2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSwKIAkgKiBzaGFyZWQgbWVtb3J5LCBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIGFueSBydW50 aW1lLWNvbXB1dGVkIEdVQ3MgdGhhdAogCSAqIGRlcGVuZCBvbiB0aGUgYW1vdW50IG9mIHNoYXJl ZCBtZW1vcnkgcmVxdWlyZWQuCiAJICovCisJUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKTsKKwogCUlu aXRpYWxpemVTaG1lbUdVQ3MoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCA2ZmE5MWJm Y2RjMC4uNDlkNDc2ZTlkNWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApAQCAtMTUsNyArMTUsOSBAQAog I2RlZmluZSBUUkFOU0FNX0gKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgotCisjaWZu ZGVmIEZST05URU5ECisjaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgorI2VuZGlmCiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAqCQlTcGVjaWFsIHRyYW5zYWN0aW9uIElEIHZhbHVlcwpAQCAtMzMw LDcgKzMzMiwxMCBAQCBUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKFRyYW5zYWN0aW9uSWQg aWQxLCBUcmFuc2FjdGlvbklkIGlkMikKIGV4dGVybiBib29sIFRyYW5zYWN0aW9uU3RhcnRlZER1 cmluZ1JlY292ZXJ5KHZvaWQpOwogCiAvKiBpbiB0cmFuc2FtL3ZhcnN1cC5jICovCi1leHRlcm4g UEdETExJTVBPUlQgVHJhbnNhbVZhcmlhYmxlc0RhdGEgKlRyYW5zYW1WYXJpYWJsZXM7CisjaWZu ZGVmIEZST05URU5ECitleHRlcm4gUEdETExJTVBPUlQgc3RydWN0IFNobWVtU3RydWN0RGVzYyBU cmFuc2FtVmFyaWFibGVzU2htZW1EZXNjOworI2RlZmluZSBUcmFuc2FtVmFyaWFibGVzICgoVHJh bnNhbVZhcmlhYmxlc0RhdGEgKikgVHJhbnNhbVZhcmlhYmxlc1NobWVtRGVzYy5wdHIpCisjZW5k aWYKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB0cmFuc2FtL3RyYW5zYW0u YwpAQCAtMzQ1LDggKzM1MCw3IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIFRyYW5zYWN0aW9uSWRM YXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlueGlkLAogZXh0ZXJuIFhMb2dSZWNQdHIgVHJhbnNhY3Rp b25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIC8qIGluIHRyYW5zYW0vdmFy c3VwLmMgKi8KLWV4dGVybiBTaXplIFZhcnN1cFNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lk IFZhcnN1cFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFZhcnN1cFNobWVtUmVnaXN0ZXIo dm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0TmV3VHJhbnNhY3Rpb25JZChib29s IGlzU3ViWGFjdCk7CiBleHRlcm4gdm9pZCBBZHZhbmNlTmV4dEZ1bGxUcmFuc2FjdGlvbklkUGFz dFhpZChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgUmVhZE5l eHRGdWxsVHJhbnNhY3Rpb25JZCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvZHNtX3JlZ2lzdHJ5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCmlu ZGV4IDUwNmZhZTJjOWNhLi45YTFiNGQ5ODJhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9kc21fcmVnaXN0cnkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3Ry eS5oCkBAIC0yMiw3ICsyMiw2IEBAIGV4dGVybiBkc2FfYXJlYSAqR2V0TmFtZWREU0EoY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCAqZm91bmQpOwogZXh0ZXJuIGRzaGFzaF90YWJsZSAqR2V0TmFtZWRE U0hhc2goY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCQkJCWNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJz ICpwYXJhbXMsCiAJCQkJCQkJCQlib29sICpmb3VuZCk7Ci1leHRlcm4gU2l6ZSBEU01SZWdpc3Ry eVNobWVtU2l6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIERTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQp OworZXh0ZXJuIHZvaWQgRFNNUmVnaXN0cnlTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYJ CQkJCQkJLyogRFNNX1JFR0lTVFJZX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvaXBjLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCmluZGV4IGRhMzI3ODdhYjUxLi44 YTNiNzFhZDVkMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaAorKysgYi9z cmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oCkBAIC03Nyw2ICs3Nyw3IEBAIGV4dGVybiB2b2lkIGNo ZWNrX29uX3NobWVtX2V4aXRfbGlzdHNfYXJlX2VtcHR5KHZvaWQpOwogLyogaXBjaS5jICovCiBl eHRlcm4gUEdETExJTVBPUlQgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgc2htZW1fc3RhcnR1cF9o b29rOwogCitleHRlcm4gdm9pZCBSZWdpc3RlclNobWVtU3RydWN0cyh2b2lkKTsKIGV4dGVybiBT aXplIENhbGN1bGF0ZVNobWVtU2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIENyZWF0ZVNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXModm9pZCk7CiAjaWZkZWYgRVhFQ19CQUNLRU5ECmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Bt c2lnbmFsLmgKaW5kZXggMjA2ZmI3OGY4YTUuLjdjZGM0ODUyMzM0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wbXNp Z25hbC5oCkBAIC02Niw4ICs2Niw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBQTVNp Z25hbERhdGEgKlBNU2lnbmFsU3RhdGU7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25z IGluIHBtc2lnbmFsLmMKICAqLwotZXh0ZXJuIFNpemUgUE1TaWduYWxTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBQTVNpZ25hbFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNU2ln bmFsU2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFNlbmRQb3N0bWFzdGVyU2lnbmFs KFBNU2lnbmFsUmVhc29uIHJlYXNvbik7CiBleHRlcm4gYm9vbCBDaGVja1Bvc3RtYXN0ZXJTaWdu YWwoUE1TaWduYWxSZWFzb24gcmVhc29uKTsKIGV4dGVybiB2b2lkIFNldFF1aXRTaWduYWxSZWFz b24oUXVpdFNpZ25hbFJlYXNvbiByZWFzb24pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCA2NzlmMDYyNGY5 Mi4uMzcwMjNlMWE5M2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCisr KyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC00MTgsNiArNDE4LDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUFJPQ19IRFIKIAlkbGlzdF9oZWFkCWJnd29ya2VyRnJlZVByb2NzOwogCS8qIEhl YWQgb2YgbGlzdCBvZiB3YWxzZW5kZXIgZnJlZSBQR1BST0Mgc3RydWN0dXJlcyAqLwogCWRsaXN0 X2hlYWQJd2Fsc2VuZGVyRnJlZVByb2NzOworCisJc2xvY2tfdAkJZnJlZVByb2NzTG9jazsKKwog CS8qIEZpcnN0IHBncHJvYyB3YWl0aW5nIGZvciBncm91cCBYSUQgY2xlYXIgKi8KIAlwZ19hdG9t aWNfdWludDMyIHByb2NBcnJheUdyb3VwRmlyc3Q7CiAJLyogRmlyc3QgcGdwcm9jIHdhaXRpbmcg Zm9yIGdyb3VwIHRyYW5zYWN0aW9uIHN0YXR1cyB1cGRhdGUgKi8KQEAgLTQ4OCw3ICs0OTEsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKICAqIEZ1bmN0aW9u IFByb3RvdHlwZXMKICAqLwogZXh0ZXJuIGludAlQcm9jR2xvYmFsU2VtYXModm9pZCk7Ci1leHRl cm4gU2l6ZSBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY0dsb2Jh bFNobWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0UHJvY0dsb2JhbCh2b2lkKTsK IGV4dGVybiB2b2lkIEluaXRQcm9jZXNzKHZvaWQpOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3NQ aGFzZTIodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5o IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCAzYTg1OTNmODdiYS4uNDE3 NTNjM2E2MzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysr IGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtMjAsOCArMjAsNyBAQAogI2lu Y2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCiAKIAotZXh0ZXJuIFNpemUgUHJvY0FycmF5U2htZW1T aXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQpOworZXh0ZXJu IHZvaWQgUHJvY0FycmF5U2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFByb2NBcnJh eUFkZChQR1BST0MgKnByb2MpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5UmVtb3ZlKFBHUFJPQyAq cHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o CmluZGV4IGU1MmI4ZWI3Njk3Li5mMmRmMWYzMGM1ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFs LmgKQEAgLTcxLDggKzcxLDcgQEAgdHlwZWRlZiBlbnVtCiAvKgogICogcHJvdG90eXBlcyBmb3Ig ZnVuY3Rpb25zIGluIHByb2NzaWduYWwuYwogICovCi1leHRlcm4gU2l6ZSBQcm9jU2lnbmFsU2ht ZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkKTsKK2V4 dGVybiB2b2lkIFByb2NTaWduYWxTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiBleHRlcm4gdm9pZCBQ cm9jU2lnbmFsSW5pdChjb25zdCB1aW50OCAqY2FuY2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVu KTsKIGV4dGVybiBpbnQJU2VuZFByb2NTaWduYWwocGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVhc29u IHJlYXNvbiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAppbmRleCA4OWQ0NTI4N2MxNy4uNDBlMmZjMTcwNTYgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9z dG9yYWdlL3NobWVtLmgKQEAgLTI0LDYgKzI0LDUzIEBACiAjaW5jbHVkZSAic3RvcmFnZS9zcGlu LmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogCit0eXBlZGVmIHZvaWQgKCpTaG1lbUlu aXRDYWxsYmFjaykgKHZvaWQgKmFyZyk7Cit0eXBlZGVmIHZvaWQgKCpTaG1lbUF0dGFjaENhbGxi YWNrKSAodm9pZCAqYXJnKTsKKworLyoKKyAqIERlc2NyaXB0b3IgZm9yIGEgbmFtZWQgYXJlYSBv ciBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeQorICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVN0cnVj dERlc2MKK3sKKwkvKiBOYW1lIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEuIE11c3QgYmUgdW5p cXVlIGFjcm9zcyB0aGUgc3lzdGVtICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCXNpemVfdAkJ c2l6ZTsKKworCXNpemVfdAkJYWxpZ25tZW50OworCVNobWVtSW5pdENhbGxiYWNrIGluaXRfZm47 CisJU2htZW1Jbml0Q2FsbGJhY2sgYXR0YWNoX2ZuOworCXZvaWQJICAgKmluaXRfZm5fYXJnOwor CXZvaWQJICAgKmF0dGFjaF9mbl9hcmc7CisKKwkvKgorCSAqIEV4dHJhIHNwYWNlIHRvIGFsbG9j YXRlZCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBidXQgaXQncyBub3QKKwkgKiBwYXJ0 IG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLiBUaGlzIGlzIHVzZWQgZm9yIHNoYXJlZCBtZW1vcnkgaGFz aCB0YWJsZXMKKwkgKiB0aGF0IGNhbiBncm93IGJleW9uZCB0aGUgaW5pdGlhbCBzaXplIHdoZW4g bW9yZSBidWNrZXRzIGFyZSBhbGxvY2F0ZWQuCisJICovCisJc2l6ZV90CQlleHRyYV9zaXplOwor CisJLyogUG9pbnRlciB0byB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhLCB3aGVuIGl0J3MgYWxsb2Nh dGVkLiAqLworCXZvaWQJICAgKnB0cjsKK30gU2htZW1TdHJ1Y3REZXNjOworCisvKgorICogRGVz Y3JpcHRvciBmb3Igc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlCisgKi8KK3R5cGVkZWYgc3RydWN0 IFNobWVtSGFzaERlc2MKK3sKKwljb25zdCBjaGFyICpuYW1lOworCisJaW50CQkJaGFzaF9mbGFn czsKKworCXNpemVfdAkJaW5pdF9zaXplOwkJLyogaW5pdGlhbCBudW1iZXIgb2YgZW50cmllcyAq LworCXNpemVfdAkJbWF4X3NpemU7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KKwlIQVNI Q1RMCSAgICppbmZvUDsKKworCUhUQUIJICAgKnB0cjsKKworCVNobWVtU3RydWN0RGVzYwliYXNl X2Rlc2M7Cit9IFNobWVtSGFzaERlc2M7CiAKIC8qIHNobWVtLmMgKi8KIGV4dGVybiBQR0RMTElN UE9SVCBzbG9ja190ICpTaG1lbUxvY2s7CkBAIC0zNCw5ICs4MSwxOSBAQCBleHRlcm4gdm9pZCAq U2htZW1BbGxvYyhTaXplIHNpemUpOwogZXh0ZXJuIHZvaWQgKlNobWVtQWxsb2NOb0Vycm9yKFNp emUgc2l6ZSk7CiBleHRlcm4gYm9vbCBTaG1lbUFkZHJJc1ZhbGlkKGNvbnN0IHZvaWQgKmFkZHIp OwogZXh0ZXJuIHZvaWQgSW5pdFNobWVtSW5kZXgodm9pZCk7CisKK2V4dGVybiB2b2lkIFNobWVt UmVnaXN0ZXJIYXNoKFNobWVtSGFzaERlc2MgKmRlc2MsIEhBU0hDVEwgKmluZm9QLCBpbnQgaGFz aF9mbGFncyk7CitleHRlcm4gdm9pZCBTaG1lbVJlZ2lzdGVyU3RydWN0KFNobWVtU3RydWN0RGVz YyAqZGVzYyk7CisKKy8qIExlZ2FjeSBmdW5jdGlvbnMgKi8KIGV4dGVybiBIVEFCICpTaG1lbUlu aXRIYXNoKGNvbnN0IGNoYXIgKm5hbWUsIGludDY0IGluaXRfc2l6ZSwgaW50NjQgbWF4X3NpemUs CiAJCQkJCQkgICBIQVNIQ1RMICppbmZvUCwgaW50IGhhc2hfZmxhZ3MpOwogZXh0ZXJuIHZvaWQg KlNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXplIHNpemUsIGJvb2wgKmZvdW5k UHRyKTsKKworZXh0ZXJuIHNpemVfdCBTaG1lbVJlZ2lzdGVyZWRTaXplKHZvaWQpOworZXh0ZXJu IHZvaWQgU2htZW1Jbml0UmVnaXN0ZXJlZCh2b2lkKTsKK2V4dGVybiB2b2lkIFNobWVtQXR0YWNo UmVnaXN0ZXJlZCh2b2lkKTsKKwogZXh0ZXJuIFNpemUgYWRkX3NpemUoU2l6ZSBzMSwgU2l6ZSBz Mik7CiBleHRlcm4gU2l6ZSBtdWxfc2l6ZShTaXplIHMxLCBTaXplIHMyKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2ludmFsYWR0LmgKaW5kZXggYTE2OTQ1MDBhODUuLjRlZGJhMjkzNmU2IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3NpbnZhbGFkdC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c2ludmFsYWR0LmgKQEAgLTI4LDggKzI4LDcgQEAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5j dGlvbnMgaW4gc2ludmFsYWR0LmMKICAqLwotZXh0ZXJuIFNpemUgU2hhcmVkSW52YWxTaG1lbVNp emUodm9pZCk7Ci1leHRlcm4gdm9pZCBTaGFyZWRJbnZhbFNobWVtSW5pdCh2b2lkKTsKK2V4dGVy biB2b2lkIFNoYXJlZEludmFsU2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFNoYXJl ZEludmFsQmFja2VuZEluaXQoYm9vbCBzZW5kT25seSk7CiAKIGV4dGVybiB2b2lkIFNJSW5zZXJ0 RGF0YUVudHJpZXMoY29uc3QgU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSAqZGF0YSwgaW50IG4p OwoKYmFzZS1jb21taXQ6IGM2N2JlZjNmMzI1MmEzYTM4YmYzNDdmOWYxMTk5NDQxNzZhNzk2Y2UK LS0gCjIuMzQuMQoK --000000000000242bd9064ab32bfc Content-Type: text/x-patch; charset="US-ASCII"; name="0003-WIP-Resizable-shared-memory-structures-20260213.patch" Content-Disposition: attachment; filename="0003-WIP-Resizable-shared-memory-structures-20260213.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlktgrhv2 RnJvbSA3ZTRiMDc3OGM0MTQ0Y2ZhZWVjZDBiZDg3NGY5YmM1MjAyNjQ5Yzc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogRnJpLCAxMyBGZWIgMjAyNiAxNDo0MTo1OCArMDUzMApTdWJqZWN0OiBb UEFUQ0ggMy8zXSBXSVA6IFJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMKClRoaXMg Y29tbWl0cyBhZGRzIHN1cHBwb3J0IGZvciByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1 cmVzLgoKU3VnZ2VzdGVkIGJ5OiBIZWlra2kgTGlubmFrYW5nYXMKQXV0aG9yOiBBc2h1dG9zaCBC YXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvc3lz dGVtLXZpZXdzLnNnbWwgICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2JhY2tlbmQvY2F0YWxv Zy9zeXN0ZW1fdmlld3Muc3FsICAgICAgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3BvcnQvc3lz dl9zaG1lbS5jICAgICAgICAgICAgICAgICB8IDYwMSArKysrKysrKysrKysrKy0tLS0KIHNyYy9i YWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYyAgICAgICAgICAgICAgICB8IDI5NiArKysrKy0tLS0K IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyAgICAgICB8ICAzOSArLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAgICAgIHwgIDI3ICstCiBz cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jICAgICAgICAgICAgICAgfCA1NTggKysrKysr KysrKysrKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jICAgICAgICAg IHwgICAyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAg fCAgMTIgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaCAgICAgICAgICAgICAgICB8 ICA0OSArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaG1lbS5oICAgICAgICAgICAgICAgICAgIHwg IDE0ICstCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAg IDEgKwogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAx ICsKIHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL01ha2VmaWxlICAgICB8ICAyMyAr CiAuLi4vZXhwZWN0ZWQvcmVzaXphYmxlX3NobWVtLm91dCAgICAgICAgICAgICAgfCAgODkgKysr CiBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9tZXNvbi5idWlsZCAgfCAgMzcgKysK IC4uLi9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsICB8ICAyMiArCiAu Li4vbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmMgfCAyMDEgKysrKysr CiAuLi4vcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jb25mICAgICAgfCAgIDEgKwog Li4uL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0uY29udHJvbCAgIHwgICA1ICsKIC4u Li9zcGVjcy9yZXNpemFibGVfc2htZW0uc3BlYyAgICAgICAgICAgICAgICB8ICAzNyArKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgICAgIHwgICA5ICstCiBzcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDMgKwogMjMgZmls ZXMgY2hhbmdlZCwgMTY1NyBpbnNlcnRpb25zKCspLCAzODYgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vTWFrZWZpbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9leHBlY3Rl ZC9yZXNpemFibGVfc2htZW0ub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy9yZXNpemFibGVfc2htZW0vbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5zcWwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVf c2htZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3No bWVtL3Jlc2l6YWJsZV9zaG1lbS5jb25mCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmNvbnRyb2wKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9zcGVjcy9yZXNpemFibGVf c2htZW0uc3BlYwoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbCBi L2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAppbmRleCA4YjRhYmVmOGM2OC4uNjBiZTVh Njc4NTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKQEAgLTQyMTYsNiArNDIxNiwxNSBAQCBTRUxF Q1QgKiBGUk9NIHBnX2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0cyBwcHgKICAg ICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8L3Jvdz4KIAorICAgICA8cm93PgorICAgICAgPGVu dHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0 aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+c2VnbWVudDwvc3RydWN0ZmllbGQ+IDx0eXBlPnRl eHQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgbmFtZSBv ZiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGNvbnRhaW5pbmcgdGhlIGFsbG9jYXRpb24uCisg ICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKICAgICAgPHJvdz4KICAgICAgIDxl bnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5p dGlvbiI+CiAgICAgICAgPHN0cnVjdGZpZWxkPm9mZjwvc3RydWN0ZmllbGQ+IDx0eXBlPmludDg8 L3R5cGU+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggNzU1M2YzMWZlZjAu LmJjMTE1ODlhZWFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCkBAIC02Njgs NiArNjY4LDEzIEBAIEdSQU5UIFNFTEVDVCBPTiBwZ19zaG1lbV9hbGxvY2F0aW9ucyBUTyBwZ19y ZWFkX2FsbF9zdGF0czsKIFJFVk9LRSBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF9zaG1lbV9h bGxvY2F0aW9ucygpIEZST00gUFVCTElDOwogR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19n ZXRfc2htZW1fYWxsb2NhdGlvbnMoKSBUTyBwZ19yZWFkX2FsbF9zdGF0czsKIAorQ1JFQVRFIFZJ RVcgcGdfc2htZW1fc2VnbWVudHMgQVMKKyAgICBTRUxFQ1QgKiBGUk9NIHBnX2dldF9zaG1lbV9z ZWdtZW50cygpOworCitSRVZPS0UgQUxMIE9OIHBnX3NobWVtX3NlZ21lbnRzIEZST00gUFVCTElD OworR1JBTlQgU0VMRUNUIE9OIHBnX3NobWVtX3NlZ21lbnRzIFRPIHBnX3JlYWRfYWxsX3N0YXRz OworUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3NobWVtX3NlZ21lbnRzKCkgRlJP TSBQVUJMSUM7CitHUkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIHBnX2dldF9zaG1lbV9zZWdtZW50 cygpIFRPIHBnX3JlYWRfYWxsX3N0YXRzOwogQ1JFQVRFIFZJRVcgcGdfc2htZW1fYWxsb2NhdGlv bnNfbnVtYSBBUwogICAgIFNFTEVDVCAqIEZST00gcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zX251 bWEoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9ydC9zeXN2X3NobWVtLmMgYi9zcmMv YmFja2VuZC9wb3J0L3N5c3Zfc2htZW0uYwppbmRleCAyZTM4ODZjZjlmZS4uZDU0YjlkY2MxZDIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BvcnQvc3lzdl9zaG1lbS5jCisrKyBiL3NyYy9iYWNr ZW5kL3BvcnQvc3lzdl9zaG1lbS5jCkBAIC0zOSw3ICszOSwxNyBAQAogI2luY2x1ZGUgInV0aWxz L2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL3BpZGZpbGUuaCIKIAotCisvKgorICogVE9E TzogVGhlIGZpcnN0IHR3byBzZW50ZW5jZXMgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBiZWxvdyBt YWtlIG1lIGZlZWwgbGlrZQorICogd2Ugc2hvdWxkIGhhdmUgb25seSBvbmUgU3lzViBzZWdtZW50 LiBJcyB0aGF0IHRydWU/IE5lZWRzIGludmVzdGlnYXRpb24uCisgKi8KKy8qCisgKiBUT0RPOiB0 aGlyZCBwYXJhZ3JhcGggc2hvdWxkIG1lbnRpb24gdGhhdCB3ZSB1c2UgbWVtZmRfY3JlYXRlIHRv IGNyZWF0ZQorICogc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBhbmQgcG9zc2libHkgdGhlcmUncyBh IHdheSB0byBzaGFyZSB0aGF0IHNlZ21lbnQKKyAqIGJldHdlZW4gdHdvIHByb2Nlc3NlcyB1c2lu ZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCBTeXNWCisgKiBz aGFyZWQgbWVtb3J5IHNlZ21lbnQuIFNvIG9uZSBkYXkgRVhFQ19CQUNLRU5EIGNhbiBhbHNvIHVz ZSBhbm9ueW1vdXMgc2hhcmVkCisgKiBtZW1vcnkuCisgKi8KIC8qCiAgKiBBcyBvZiBQb3N0Z3Jl U1FMIDkuMywgd2Ugbm9ybWFsbHkgYWxsb2NhdGUgb25seSBhIHZlcnkgc21hbGwgYW1vdW50IG9m CiAgKiBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5LCBhbmQgb25seSBmb3IgdGhlIHB1cnBvc2VzIG9m IHByb3ZpZGluZyBhbgpAQCAtOTEsMTIgKzEwMSw0NiBAQCB0eXBlZGVmIGVudW0KIAlTSE1TVEFU RV9VTkFUVEFDSEVELAkJLyogcGVydGluZW50IHRvIERhdGFEaXIsIG5vIGF0dGFjaGVkIFBJRHMg Ki8KIH0gSXBjTWVtb3J5U3RhdGU7CiAKKy8qCisgKiBSZXNpemFibGUgYW5vbnltb3VzIHNoYXJl ZCBtZW1vcnkgc2VnbWVudHMuCisgKgorICogV2UgbmVlZCB0byBwbGFjZSByZXNpemFibGUgYW5v bnltb3VzIHNoYXJlZCBtZW1vcnkgbWFwcGluZ3MgaW4gc3VjaCBhIHdheSwKKyAqIHRoYXQgdGhl cmUgd2lsbCBiZSBnYXBzIGJldHdlZW4gdGhlbSBpbiB0aGUgYWRkcmVzcyBzcGFjZS4gVGhvc2Ug Z2FwcyBoYXZlIHRvCisgKiBiZSBsYXJnZSBlbm91Z2ggdG8gcmVzaXplIHRoZSBtYXBwaW5nIHVw IHRvIGdpdmVuIG1heGltdW0gc2l6ZSwgd2l0aG91dAorICogY291bnRpbmcgdG93YXJkcyB0aGUg dG90YWwgbWVtb3J5IGNvbnN1bXB0aW9uLgorICoKKyAqIFRvIGFjaGlldmUgdGhpcywgZm9yIGVh Y2ggc2hhcmVkIG1lbW9yeSBzZWdtZW50IHdlIGZpcnN0IGNyZWF0ZSBhbiBhbm9ueW1vdXMKKyAq IGZpbGUgdXNpbmcgbWVtZmRfY3JlYXRlLCB3aGljaCB3aWxsIGFjY29tbW9kYXRlIGFjdHVhbCBz aGFyZWQgbWVtb3J5IG1hcHBpbmcKKyAqIGNvbnRlbnQuIFRoZW4gd2UgY3JlYXRlIGEgbWFwcGlu ZyBmb3IgdGhpcyBmaWxlIHVzaW5nIG1tYXAgcmVzZXJ2aW5nIG1heGltdW0KKyAqIGFkZHJlc3Mg c3BhY2UgdXNpbmcgTUFQX05PUkVTRVJWRSAocHJldmVudHMgdGhlIHNwYWNlIGZyb20gYmVpbmcg Y291bnRlZAorICogYWdhaW5zdCBtZW1vcnkgbGltaXRzKS4gVGhlIG1hcHBpbmcgc2VydmVzIGFz IGFuIGFkZHJlc3Mgc3BhY2UgcmVzZXJ2YXRpb24sCisgKiBpbnRvIHdoaWNoIHNoYXJlZCBtZW1v cnkgc2VnbWVudCBjYW4gYmUgcmVzaXplZC4KKyAqLworCitQR1VzZWRTaG1lbUluZm8gVXNlZFNo bWVtSW5mb1tOVU1fTUVNT1JZX01BUFBJTkdTXTsKKworIC8qCisgICogU3RydWN0dXJlIHRvIGhv bGQgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBwcm9wZXJ0aWVzLgorICAqLwordHlw ZWRlZiBzdHJ1Y3QgQW5vblNobWVtRGF0YQoreworCWludAkJCWZkOwkJCQkvKiBmZCBmb3IgdGhl IGJhY2tpbmcgYW5vbiBmaWxlICovCisJdm9pZAkgICAqYWRkcjsJCQkvKiBQb2ludGVyIHRvIHRo ZSBzdGFydCBvZiB0aGUgbWFwcGVkIG1lbW9yeSAqLworCVNpemUJCXNpemU7CQkJLyogU2l6ZSBv ZiB0aGUgbWFwcGVkIG1lbW9yeSAqLwogCi11bnNpZ25lZCBsb25nIFVzZWRTaG1lbVNlZ0lEID0g MDsKLXZvaWQJICAgKlVzZWRTaG1lbVNlZ0FkZHIgPSBOVUxMOworfSBBbm9uU2htZW1EYXRhOwog Ci1zdGF0aWMgU2l6ZSBBbm9ueW1vdXNTaG1lbVNpemU7Ci1zdGF0aWMgdm9pZCAqQW5vbnltb3Vz U2htZW0gPSBOVUxMOworQW5vblNobWVtRGF0YSBBbm9uU2htZW1JbmZvW05VTV9NRU1PUllfTUFQ UElOR1NdOworCisvKgorICogVE9ETzogdGhlIHdob2xlIGh1Z2UgcGFnZXMgbG9naWMgbmVlZHMg YSByZXZpc2lvbi4gSXQncyBmcmFnaWxlIHJpZ2h0IG5vdy4KKyAqCisgKiBGbGFnIHRlbGxpbmcg dGhhdCB3ZSBoYXZlIGRlY2lkZWQgdG8gdXNlIGh1Z2UgcGFnZXMuCisgKgorICogWFhYOiBJdCdz IHBvc3NpYmxlIHRvIHVzZSBHZXRDb25maWdPcHRpb24oImh1Z2VfcGFnZXNfc3RhdHVzIiwgZmFs c2UsIGZhbHNlKQorICogaW5zdGVhZCwgYnV0IGl0IGZlZWxzIGxpa2UgYW4gb3ZlcmtpbGwuCisg Ki8KK3N0YXRpYyBib29sIGh1Z2VfcGFnZXNfb24gPSBmYWxzZTsKIAogc3RhdGljIHZvaWQgKklu dGVybmFsSXBjTWVtb3J5Q3JlYXRlKElwY01lbW9yeUtleSBtZW1LZXksIFNpemUgc2l6ZSk7CiBz dGF0aWMgdm9pZCBJcGNNZW1vcnlEZXRhY2goaW50IHN0YXR1cywgRGF0dW0gc2htYWRkcik7CkBA IC0yNTAsNiArMjk0LDcgQEAgSW50ZXJuYWxJcGNNZW1vcnlDcmVhdGUoSXBjTWVtb3J5S2V5IG1l bUtleSwgU2l6ZSBzaXplKQogCX0KIAogCS8qIFJlZ2lzdGVyIG9uLWV4aXQgcm91dGluZSB0byBk ZWxldGUgdGhlIG5ldyBzZWdtZW50ICovCisJLyogVE9ETzogVGhpcyBoYXBwZW5zIGZvciBldmVy eSBzaGFyZWQgbWVtb3J5IHRoYXQgZ2V0cyBjcmVhdGVkLiBEbyBpdCBvbmx5IG9uY2UuICovCiAJ b25fc2htZW1fZXhpdChJcGNNZW1vcnlEZWxldGUsIEludDMyR2V0RGF0dW0oc2htaWQpKTsKIAog CS8qIE9LLCBzaG91bGQgYmUgYWJsZSB0byBhdHRhY2ggdG8gdGhlIHNlZ21lbnQgKi8KQEAgLTI2 MCw2ICszMDUsNyBAQCBJbnRlcm5hbElwY01lbW9yeUNyZWF0ZShJcGNNZW1vcnlLZXkgbWVtS2V5 LCBTaXplIHNpemUpCiAJCQkgc2htaWQsIHJlcXVlc3RlZEFkZHJlc3MsIFBHX1NITUFUX0ZMQUdT KTsKIAogCS8qIFJlZ2lzdGVyIG9uLWV4aXQgcm91dGluZSB0byBkZXRhY2ggbmV3IHNlZ21lbnQg YmVmb3JlIGRlbGV0aW5nICovCisJLyogVE9ETzogVGhpcyBoYXBwZW5zIGZvciBldmVyeSBzaGFy ZWQgbWVtb3J5IHRoYXQgZ2V0cyBjcmVhdGVkLiBEbyBpdCBvbmx5IG9uY2UuICovCiAJb25fc2ht ZW1fZXhpdChJcGNNZW1vcnlEZXRhY2gsIFBvaW50ZXJHZXREYXR1bShtZW1BZGRyZXNzKSk7CiAK IAkvKgpAQCAtNDcxLDE5ICs1MTcsMjAgQEAgUEdTaGFyZWRNZW1vcnlBdHRhY2goSXBjTWVtb3J5 SWQgc2htSWQsCiAgKiBodWdlcGFnZSBzaXplcywgd2UgbWlnaHQgd2FudCB0byB0aGluayBhYm91 dCBtb3JlIGludmFzaXZlIHN0cmF0ZWdpZXMsCiAgKiBzdWNoIGFzIGluY3JlYXNpbmcgc2hhcmVk X2J1ZmZlcnMgdG8gYWJzb3JiIHRoZSBleHRyYSBzcGFjZS4KICAqCi0gKiBSZXR1cm5zIHRoZSAo cmVhbCwgYXNzdW1lZCBvciBjb25maWcgcHJvdmlkZWQpIHBhZ2Ugc2l6ZSBpbnRvCi0gKiAqaHVn ZXBhZ2VzaXplLCBhbmQgdGhlIGh1Z2VwYWdlLXJlbGF0ZWQgbW1hcCBmbGFncyB0byB1c2UgaW50 bwotICogKm1tYXBfZmxhZ3MgaWYgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuICBJZiBodWdlIHBh Z2VzIGFyZSBub3Qgc3VwcG9ydGVkLAotICogKmh1Z2VwYWdlc2l6ZSBhbmQgKm1tYXBfZmxhZ3Mg YXJlIHNldCB0byAwLgorICogUmV0dXJucyB0aGUgKHJlYWwsIGFzc3VtZWQgb3IgY29uZmlnIHBy b3ZpZGVkKSBwYWdlIHNpemUgaW50byAqaHVnZXBhZ2VzaXplLAorICogdGhlIGh1Z2VwYWdlLXJl bGF0ZWQgbW1hcCBhbmQgbWVtZmQgZmxhZ3MgdG8gdXNlIGludG8gKm1tYXBfZmxhZ3MgYW5kCisg KiAqbWVtZmRfZmxhZ3MgaWYgcmVxdWVzdGVkIGJ5IHRoZSBjYWxsZXIuIElmIGh1Z2UgcGFnZXMg YXJlIG5vdCBzdXBwb3J0ZWQsCisgKiAqaHVnZXBhZ2VzaXplLCAqbW1hcF9mbGFncyBhbmQgKm1l bWZkX2ZsYWdzIGFyZSBzZXQgdG8gMC4KICAqLwogdm9pZAotR2V0SHVnZVBhZ2VTaXplKFNpemUg Kmh1Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzKQorR2V0SHVnZVBhZ2VTaXplKFNpemUgKmh1 Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzLCBpbnQgKm1lbWZkX2ZsYWdzKQogewogI2lmZGVm IE1BUF9IVUdFVExCCiAKIAlTaXplCQlkZWZhdWx0X2h1Z2VwYWdlc2l6ZSA9IDA7CiAJU2l6ZQkJ aHVnZXBhZ2VzaXplX2xvY2FsID0gMDsKIAlpbnQJCQltbWFwX2ZsYWdzX2xvY2FsID0gMDsKKwlp bnQJCQltZW1mZF9mbGFnc19sb2NhbCA9IDA7CiAKIAkvKgogCSAqIFN5c3RlbS1kZXBlbmRlbnQg Y29kZSB0byBmaW5kIG91dCB0aGUgZGVmYXVsdCBodWdlIHBhZ2Ugc2l6ZS4KQEAgLTU0Miw2ICs1 ODksNyBAQCBHZXRIdWdlUGFnZVNpemUoU2l6ZSAqaHVnZXBhZ2VzaXplLCBpbnQgKm1tYXBfZmxh Z3MpCiAJfQogCiAJbW1hcF9mbGFnc19sb2NhbCA9IE1BUF9IVUdFVExCOworCW1lbWZkX2ZsYWdz X2xvY2FsID0gTUZEX0hVR0VUTEI7CiAKIAkvKgogCSAqIE9uIHJlY2VudCBlbm91Z2ggTGludXgs IGFsc28gaW5jbHVkZSB0aGUgZXhwbGljaXQgcGFnZSBzaXplLCBpZgpAQCAtNTU2LDExICs2MDQs MjIgQEAgR2V0SHVnZVBhZ2VTaXplKFNpemUgKmh1Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdz KQogCX0KICNlbmRpZgogCisjaWYgZGVmaW5lZChNRkRfSFVHRV9NQVNLKSAmJiBkZWZpbmVkKE1G RF9IVUdFX1NISUZUKQorCWlmIChodWdlcGFnZXNpemVfbG9jYWwgIT0gZGVmYXVsdF9odWdlcGFn ZXNpemUpCisJeworCQlpbnQJCQlzaGlmdCA9IHBnX2NlaWxfbG9nMl82NChodWdlcGFnZXNpemVf bG9jYWwpOworCisJCW1lbWZkX2ZsYWdzX2xvY2FsIHw9IChzaGlmdCAmIE1GRF9IVUdFX01BU0sp IDw8IE1GRF9IVUdFX1NISUZUOworCX0KKyNlbmRpZgorCiAJLyogYXNzaWduIHRoZSByZXN1bHRz IGZvdW5kICovCiAJaWYgKG1tYXBfZmxhZ3MpCiAJCSptbWFwX2ZsYWdzID0gbW1hcF9mbGFnc19s b2NhbDsKIAlpZiAoaHVnZXBhZ2VzaXplKQogCQkqaHVnZXBhZ2VzaXplID0gaHVnZXBhZ2VzaXpl X2xvY2FsOworCWlmIChtZW1mZF9mbGFncykKKwkJKm1lbWZkX2ZsYWdzID0gbWVtZmRfZmxhZ3Nf bG9jYWw7CiAKICNlbHNlCiAKQEAgLTU2OCw2ICs2MjcsOCBAQCBHZXRIdWdlUGFnZVNpemUoU2l6 ZSAqaHVnZXBhZ2VzaXplLCBpbnQgKm1tYXBfZmxhZ3MpCiAJCSpodWdlcGFnZXNpemUgPSAwOwog CWlmIChtbWFwX2ZsYWdzKQogCQkqbW1hcF9mbGFncyA9IDA7CisJaWYgKG1lbWZkX2ZsYWdzKQor CQkqbWVtZmRfZmxhZ3MgPSAwOwogCiAjZW5kaWYJCQkJCQkJLyogTUFQX0hVR0VUTEIgKi8KIH0K QEAgLTU4OSw4NCArNjUwLDIzMSBAQCBjaGVja19odWdlX3BhZ2Vfc2l6ZShpbnQgKm5ld3ZhbCwg dm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogCXJldHVybiB0cnVlOwogfQogCisvKgor ICogV3JhcHBlciBhcm91bmQgcG9zaXhfZmFsbG9jYXRlKCkgdG8gYWxsb2NhdGUgbWVtb3J5IGZv ciBhIGdpdmVuIHNoYXJlZCBtZW1vcnkKKyAqIHNlZ21lbnQuCisgKgorICogUGVyZm9ybXMgcmV0 cnkgb24gRUlOVFIsIGFuZCByYWlzZXMgZXJyb3IgdXBvbiBmYWlsdXJlLgorICovCitzdGF0aWMg dm9pZAorc2htZW1fZmFsbG9jYXRlKGludCBmZCwgY29uc3QgY2hhciAqbWFwcGluZ19uYW1lLCBT aXplIHNpemUsIGludCBlbGV2ZWwpCit7CisjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBTExPQ0FU RSkgJiYgZGVmaW5lZChfX2xpbnV4X18pCisJaW50CQkJcmV0OworCisKKwkvKgorCSAqIElmIHRo ZXJlIGlzIG5vdCBlbm91Z2ggbWVtb3J5LCB0cnlpbmcgdG8gYWNjZXNzIGEgaG9sZSBpbiBhZGRy ZXNzIHNwYWNlCisJICogd2lsbCBjYXVzZSBTSUdCVVMuIElmIHN1cHBvcnRlZCwgYXZvaWQgdGhh dCBieSBhbGxvY2F0aW5nIG1lbW9yeQorCSAqIHVwZnJvbnQuCisJICoKKwkgKiBXZSBzdGlsbCB1 c2UgYSB0cmFkaXRpb25hbCBFSU5UUiByZXRyeSBsb29wIHRvIGhhbmRsZSBTSUdDT05ULgorCSAq IHBvc2l4X2ZhbGxvY2F0ZSgpIGRvZXNuJ3QgcmVzdGFydCBhdXRvbWF0aWNhbGx5LCBhbmQgd2Ug ZG9uJ3Qgd2FudCB0aGlzCisJICogdG8gZmFpbCBpZiB5b3UgYXR0YWNoIGEgZGVidWdnZXIuCisJ ICovCisJZG8KKwl7CisJCXJldCA9IHBvc2l4X2ZhbGxvY2F0ZShmZCwgMCwgc2l6ZSk7CisJfSB3 aGlsZSAocmV0ID09IEVJTlRSKTsKKworCWlmIChyZXQgIT0gMCkKKwl7CisJCWVyZXBvcnQoZWxl dmVsLAorCQkJCShlcnJtc2coInNlZ21lbnRbJXNdOiBjb3VsZCBub3QgYWxsb2NhdGUgc3BhY2Ug Zm9yIGFub255bW91cyBmaWxlOiAlcyIsCisJCQkJCQltYXBwaW5nX25hbWUsIHN0cmVycm9yKHJl dCkpLAorCQkJCSAocmV0ID09IEVOT01FTSkgPworCQkJCSBlcnJoaW50KCJUaGlzIGVycm9yIHVz dWFsbHkgbWVhbnMgdGhhdCBQb3N0Z3JlU1FMJ3MgcmVxdWVzdCAiCisJCQkJCQkgImZvciBhIHNo YXJlZCBtZW1vcnkgc2VnbWVudCBleGNlZWRlZCBhdmFpbGFibGUgbWVtb3J5LCAiCisJCQkJCQkg InN3YXAgc3BhY2UsIG9yIGh1Z2UgcGFnZXMuIFRvIHJlZHVjZSB0aGUgcmVxdWVzdCBzaXplICIK KwkJCQkJCSAiKGN1cnJlbnRseSAlenUgYnl0ZXMpLCByZWR1Y2UgUG9zdGdyZVNRTCdzIHNoYXJl ZCAiCisJCQkJCQkgIm1lbW9yeSB1c2FnZSwgcGVyaGFwcyBieSByZWR1Y2luZyBcInNoYXJlZF9i dWZmZXJzXCIgb3IgIgorCQkJCQkJICJcIm1heF9jb25uZWN0aW9uc1wiLiIsCisJCQkJCQkgc2l6 ZSkgOiAwKSk7CisJfQorI2VuZGlmCit9CisKIC8qCiAgKiBDcmVhdGVzIGFuIGFub255bW91cyBt bWFwKCllZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCiAgKgotICogUGFzcyB0aGUgcmVxdWVzdGVk IHNpemUgaW4gKnNpemUuICBUaGlzIGZ1bmN0aW9uIHdpbGwgbW9kaWZ5ICpzaXplIHRvIHRoZQot ICogYWN0dWFsIHNpemUgb2YgdGhlIGFsbG9jYXRpb24sIGlmIGl0IGVuZHMgdXAgYWxsb2NhdGlu ZyBhIHNlZ21lbnQgdGhhdCBpcwotICogbGFyZ2VyIHRoYW4gcmVxdWVzdGVkLgorICogVGhpcyBm dW5jdGlvbiB3aWxsIG1vZGlmeSBtYXBwaW5nIHNpemUgdG8gdGhlIGFjdHVhbCBzaXplIG9mIHRo ZSBhbGxvY2F0aW9uLAorICogaWYgaXQgZW5kcyB1cCBhbGxvY2F0aW5nIGEgc2VnbWVudCB0aGF0 IGlzIGxhcmdlciB0aGFuIHJlcXVlc3RlZC4gSWYgbmVlZGVkLAorICogaXQgYWxzbyByb3VuZHMg dXAgdGhlIG1hcHBpbmcgcmVzZXJ2ZWQgc2l6ZSB0byBiZSBhIG11bHRpcGxlIG9mIGh1Z2UgcGFn ZQorICogc2l6ZS4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGZhbGxiYWNrIGZyb20gaHVn ZSBwYWdlcyB0byByZWd1bGFyIHBhZ2VzIGluIHRoaXMKKyAqIGZ1bmN0aW9uLCB0aGlzIGRlY2lz aW9uIHdhcyBhbHJlYWR5IG1hZGUgaW4gUmVzZXJ2ZUFub255bW91c01lbW9yeSBhbmQgd2UKKyAq IHN0aWNrIHRvIGl0LgorICoKKyAqIFRPRE86IFVwZGF0ZSB0aGUgcHJvbG9ndWUgdG8gYmUgY29u c2lzdGVudCB3aXRoIHRoZSBjb2RlLgogICovCi1zdGF0aWMgdm9pZCAqCi1DcmVhdGVBbm9ueW1v dXNTZWdtZW50KFNpemUgKnNpemUpCitzdGF0aWMgdm9pZAorQ3JlYXRlQW5vbnltb3VzU2VnbWVu dChpbnQgc2VnbWVudF9pZCwgY29uc3QgY2hhciAqc2VnbmFtZSwgU2l6ZSBpbml0X3NpemUsIFNp emUgbWF4X3NpemUpCiB7Ci0JU2l6ZQkJYWxsb2NzaXplID0gKnNpemU7CiAJdm9pZAkgICAqcHRy ID0gTUFQX0ZBSUxFRDsKLQlpbnQJCQltbWFwX2Vycm5vID0gMDsKLQlpbnQJCQltbWFwX2ZsYWdz ID0gTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSEFTU0VNQVBIT1JFOworCWludAkJ CW1tYXBfZmxhZ3MgPSBNQVBfU0hBUkVEIHwgTUFQX0hBU1NFTUFQSE9SRSB8IE1BUF9OT1JFU0VS VkU7CisJQW5vblNobWVtRGF0YSAqYW5vbnNobWVtID0gJkFub25TaG1lbUluZm9bc2VnbWVudF9p ZF07CisJaW50CQkJbWVtZmRfZmxhZ3MgPSAwOwogCiAjaWZuZGVmIE1BUF9IVUdFVExCCi0JLyog UEdTaGFyZWRNZW1vcnlDcmVhdGUgc2hvdWxkIGhhdmUgZGVhbHQgd2l0aCB0aGlzIGNhc2UgKi8K LQlBc3NlcnQoaHVnZV9wYWdlcyAhPSBIVUdFX1BBR0VTX09OKTsKKwkvKiBQcmVwYXJlSHVnZVBh Z2VzIHNob3VsZCBoYXZlIGRlYWx0IHdpdGggdGhpcyBjYXNlICovCisJQXNzZXJ0KGh1Z2VfcGFn ZXMgIT0gSFVHRV9QQUdFU19PTiAmJiAhaHVnZV9wYWdlc19vbik7CiAjZWxzZQotCWlmIChodWdl X3BhZ2VzID09IEhVR0VfUEFHRVNfT04gfHwgaHVnZV9wYWdlcyA9PSBIVUdFX1BBR0VTX1RSWSkK KwlpZiAoaHVnZV9wYWdlc19vbikKIAl7Ci0JCS8qCi0JCSAqIFJvdW5kIHVwIHRoZSByZXF1ZXN0 IHNpemUgdG8gYSBzdWl0YWJsZSBsYXJnZSB2YWx1ZS4KLQkJICovCiAJCVNpemUJCWh1Z2VwYWdl c2l6ZTsKIAkJaW50CQkJaHVnZV9tbWFwX2ZsYWdzOworCQlpbnQJCQlodWdlX21lbWZkX2ZsYWdz OwogCi0JCUdldEh1Z2VQYWdlU2l6ZSgmaHVnZXBhZ2VzaXplLCAmaHVnZV9tbWFwX2ZsYWdzKTsK KwkJLyogTWFrZSBzdXJlIG5vdGhpbmcgaXMgbWVzc2VkIHVwICovCisJCUFzc2VydChodWdlX3Bh Z2VzID09IEhVR0VfUEFHRVNfT04gfHwgaHVnZV9wYWdlcyA9PSBIVUdFX1BBR0VTX1RSWSk7CiAK LQkJaWYgKGFsbG9jc2l6ZSAlIGh1Z2VwYWdlc2l6ZSAhPSAwKQotCQkJYWxsb2NzaXplID0gYWRk X3NpemUoYWxsb2NzaXplLCBodWdlcGFnZXNpemUgLSAoYWxsb2NzaXplICUgaHVnZXBhZ2VzaXpl KSk7CisJCS8qIFJvdW5kIHVwIHRoZSByZXF1ZXN0IHNpemUgdG8gYSBzdWl0YWJsZSBsYXJnZSB2 YWx1ZSAqLworCQlHZXRIdWdlUGFnZVNpemUoJmh1Z2VwYWdlc2l6ZSwgJmh1Z2VfbW1hcF9mbGFn cywgJmh1Z2VfbWVtZmRfZmxhZ3MpOworCQlpbml0X3NpemUgPSBhbGlnbl9zaXplKGluaXRfc2l6 ZSwgaHVnZXBhZ2VzaXplKTsKKwkJbWF4X3NpemUgPSBhbGlnbl9zaXplKG1heF9zaXplLCBodWdl cGFnZXNpemUpOwogCi0JCXB0ciA9IG1tYXAoTlVMTCwgYWxsb2NzaXplLCBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFLAotCQkJCSAgIG1tYXBfZmxhZ3MgfCBodWdlX21tYXBfZmxhZ3MsIC0xLCAwKTsK LQkJbW1hcF9lcnJubyA9IGVycm5vOwotCQlpZiAoaHVnZV9wYWdlcyA9PSBIVUdFX1BBR0VTX1RS WSAmJiBwdHIgPT0gTUFQX0ZBSUxFRCkKLQkJCWVsb2coREVCVUcxLCAibW1hcCglenUpIHdpdGgg TUFQX0hVR0VUTEIgZmFpbGVkLCBodWdlIHBhZ2VzIGRpc2FibGVkOiAlbSIsCi0JCQkJIGFsbG9j c2l6ZSk7CisJCS8qIFZlcmlmeSB0aGF0IHRoZSBuZXcgc2l6ZSBpcyB3aXRoaW5nIHRoZSByZXNl cnZlZCBib3VuZGFyaWVzICovCisJCUFzc2VydChtYXhfc2l6ZSA+PSBpbml0X3NpemUpOworCisJ CW1tYXBfZmxhZ3MgPSBtbWFwX2ZsYWdzIHwgaHVnZV9tbWFwX2ZsYWdzOworCQltZW1mZF9mbGFn cyA9IG1lbWZkX2ZsYWdzIHwgaHVnZV9tZW1mZF9mbGFnczsKIAl9CiAjZW5kaWYKIAogCS8qCi0J ICogUmVwb3J0IHdoZXRoZXIgaHVnZSBwYWdlcyBhcmUgaW4gdXNlLiAgVGhpcyBuZWVkcyB0byBi ZSB0cmFja2VkIGJlZm9yZQotCSAqIHRoZSBzZWNvbmQgbW1hcCgpIGNhbGwgaWYgYXR0ZW1wdGlu ZyB0byB1c2UgaHVnZSBwYWdlcyBmYWlsZWQKLQkgKiBwcmV2aW91c2x5LgorCSAqIFByZXBhcmUg YW4gYW5vbnltb3VzIGZpbGUgYmFja2luZyB0aGUgc2VnbWVudC4gSXRzIHNpemUgd2lsbCBiZQor CSAqIHNwZWNpZmllZCBsYXRlciB2aWEgZnRydW5jYXRlLgorCSAqCisJICogVGhlIGZpbGUgYmVo YXZlcyBsaWtlIGEgcmVndWxhciBmaWxlLCBidXQgbGl2ZXMgaW4gbWVtb3J5LiBPbmNlIGFsbAor CSAqIHJlZmVyZW5jZXMgdG8gdGhlIGZpbGUgYXJlIGRyb3BwZWQsICBpdCBpcyBhdXRvbWF0aWNh bGx5IHJlbGVhc2VkLgorCSAqIEFub255bW91cyBtZW1vcnkgaXMgdXNlZCBmb3IgYWxsIGJhY2tp bmcgcGFnZXMgb2YgdGhlIGZpbGUsIHRodXMgaXQgaGFzCisJICogdGhlIHNhbWUgc2VtYW50aWNz IGFzIGFub255bW91cyBtZW1vcnkgYWxsb2NhdGlvbnMgdXNpbmcgbW1hcCB3aXRoIHRoZQorCSAq IE1BUF9BTk9OWU1PVVMgZmxhZy4KKwkgKgorCSAqIFRPRE86IE5lZWQgYSBjb25maWd1cmF0aW9u IHRlc3QgZm9yIG1lbWZkX2NyZWF0ZS4KKwkgKgorCSAqIFRPRE86IEVhcmxpZXIgcmVsZWFzZXMg ZGlkIG5vdCB1c2UgZmlsZSBiYWNrZWQgc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4KKwkgKiBCeSBz ZXR0aW5nIGJpdCAxIGluIC9wcm9jLzxQSUQ+L2NvcmVkdW1wX2ZpbHRlciwgdGhvc2Ugc2hhcmVk IG1lbW9yeQorCSAqIHNlZ21lbnRzIGNvdWxkIGJlIGR1bXBlZCB0byB0aGUgY29yZSBmaWxlLiBC dXQgZHVtcGluZyBmaWxlIGJhY2tlZAorCSAqIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgcmVxdWly ZXMgYml0IDMgdG8gYmUgc2V0LiBXZSBuZWVkIHRvIGRvY3VtZW50CisJICogdGhpcyBjaGFuZ2Ug aW4gdGhlIHJlbGVhc2Ugbm90ZXMuCiAJICovCi0JU2V0Q29uZmlnT3B0aW9uKCJodWdlX3BhZ2Vz X3N0YXR1cyIsIChwdHIgPT0gTUFQX0ZBSUxFRCkgPyAib2ZmIiA6ICJvbiIsCi0JCQkJCVBHQ19J TlRFUk5BTCwgUEdDX1NfRFlOQU1JQ19ERUZBVUxUKTsKKwlhbm9uc2htZW0tPmZkID0gbWVtZmRf Y3JlYXRlKHNlZ25hbWUsIG1lbWZkX2ZsYWdzKTsKKwlpZiAoYW5vbnNobWVtLT5mZCA9PSAtMSkK KwkJZXJlcG9ydChGQVRBTCwKKwkJCQkoZXJybXNnKCJzZWdtZW50WyVzXTogY291bGQgbm90IGNy ZWF0ZSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeSBmaWxlOiAlbSIsCisJCQkJCQlzZWduYW1lKSkp OwogCi0JaWYgKHB0ciA9PSBNQVBfRkFJTEVEICYmIGh1Z2VfcGFnZXMgIT0gSFVHRV9QQUdFU19P TikKLQl7Ci0JCS8qCi0JCSAqIFVzZSB0aGUgb3JpZ2luYWwgc2l6ZSwgbm90IHRoZSByb3VuZGVk LXVwIHZhbHVlLCB3aGVuIGZhbGxpbmcgYmFjawotCQkgKiB0byBub24taHVnZSBwYWdlcy4KLQkJ ICovCi0JCWFsbG9jc2l6ZSA9ICpzaXplOwotCQlwdHIgPSBtbWFwKE5VTEwsIGFsbG9jc2l6ZSwg UFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJCQkgICBtbWFwX2ZsYWdzLCAtMSwgMCk7Ci0JCW1t YXBfZXJybm8gPSBlcnJubzsKLQl9CisJZWxvZyhERUJVRzEsICJzZWdtZW50WyVzXTogbW1hcCgl enUpIiwgc2VnbmFtZSwgaW5pdF9zaXplKTsKIAorCS8qCisJICogUmVzZXJ2ZSBtYXhpbXVtIHJl cXVpcmVkIGFkZHJlc3Mgc3BhY2UgZm9yIGZ1dHVyZSBleHBhbnNpb24gb2YgdGhpcworCSAqIG1l bW9yeSBzZWdtZW50LiBUaGUgd2hvbGUgYWRkcmVzcyBzcGFjZSB3aWxsIGJlIHNldHVwIGZvciBy ZWFkL3dyaXRlCisJICogYWNjZXNzLCBzbyB0aGF0IG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhpcyBh ZGRyZXNzIHNwYWNlIGNhbiBiZSByZWFkIG9yCisJICogd3JpdHRlbiB0byBldmVuIGlmIGl0IGlz IHJlc2l6ZWQgaW4gdGhlIGZ1dHVyZSB1c2luZyBqdXN0IGZ0cnVuY2F0ZS4KKwkgKiBNQVBfTk9S RVNFUlZFIGFsb25lIHNob3VsZCBlbnN1cmUgdGhhdCBubyBtZW1vcnkgaXMgYWxsb2NhdGVkLiBC dXQgd2hlbgorCSAqIHVzaW5nIGh1Z2UgcGFnZXMsIHRoZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGF0 IG1tYXAgdGltZSBpZiBQUk9UX1dSSVRFIHwKKwkgKiBQUk9UX1JFQUQgaXMgdXNlZC4gSGVuY2Ug d2UgY3JlYXRlIHRoZSBtYXBwaW5nIHdpdGggUFJPVF9OT05FIGZpcnN0IGFuZAorCSAqIHRoZW4g dXNlIG1wcm90ZWN0IHRvIHNldCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbnMuCisJICovCisJcHRy ID0gbW1hcChOVUxMLCBtYXhfc2l6ZSwgUFJPVF9OT05FLCBtbWFwX2ZsYWdzLCBhbm9uc2htZW0t PmZkLCAwKTsKIAlpZiAocHRyID09IE1BUF9GQUlMRUQpCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJ KGVycm1zZygic2VnbWVudFslc106IGNvdWxkIG5vdCBtYXAgYW5vbnltb3VzIHNoYXJlZCBtZW1v cnk6ICVtIiwKKwkJCQkJCXNlZ25hbWUpKSk7CisKKwlpZiAobXByb3RlY3QocHRyLCBtYXhfc2l6 ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkgPT0gLTEpCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJ KGVycm1zZygic2VnbWVudFslc106IGNvdWxkIG5vdCB1cGRhdGUgYW5vbnltb3VzIHNoYXJlZCBt ZW1vcnkgcGVybWlzc2lvbnM6ICVtIiwKKwkJCQkJCXNlZ25hbWUpKSk7CisKKworCS8qCisJICog UmVzaXplIHRoZSBiYWNraW5nIGZpbGUgdG8gdGhlIHJlcXVpcmVkIHNpemUuIE9uIHBsYXRmb3Jt cyB3aGVyZSBpdCBpcworCSAqIHN1cHBvcnRlZCwgd2UgYWxzbyBhbGxvY2F0ZSB0aGUgcmVxdWly ZWQgbWVtb3J5IHVwZnJvbnQuIE9uIG90aGVyCisJICogcGxhdGZvcm0gdGhlIG1lbW9yeSB1cHRv IHRoZSBzaXplIG9mIGZpbGUgd2lsbCBiZSBhbGxvY2F0ZWQgb24gZGVtYW5kLgorCSAqLworCWlm IChmdHJ1bmNhdGUoYW5vbnNobWVtLT5mZCwgaW5pdF9zaXplKSA9PSAtMSkKIAl7Ci0JCWVycm5v ID0gbW1hcF9lcnJubzsKKwkJaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOworCisJCWNsb3NlKGFu b25zaG1lbS0+ZmQpOworCQlhbm9uc2htZW0tPmZkID0gLTE7CisKKwkJZXJybm8gPSBzYXZlX2Vy cm5vOwogCQllcmVwb3J0KEZBVEFMLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBtYXAgYW5vbnlt b3VzIHNoYXJlZCBtZW1vcnk6ICVtIiksCi0JCQkJIChtbWFwX2Vycm5vID09IEVOT01FTSkgPwor CQkJCShlcnJtc2coInNlZ21lbnRbJXNdOiBjb3VsZCBub3QgdHJ1bmNhdGUgYW5vbnltb3VzIGZp bGUgdG8gc2l6ZSAlenU6ICVtIiwKKwkJCQkJCXNlZ25hbWUsIGluaXRfc2l6ZSksCisJCQkJIChz YXZlX2Vycm5vID09IEVOT01FTSkgPwogCQkJCSBlcnJoaW50KCJUaGlzIGVycm9yIHVzdWFsbHkg bWVhbnMgdGhhdCBQb3N0Z3JlU1FMJ3MgcmVxdWVzdCAiCiAJCQkJCQkgImZvciBhIHNoYXJlZCBt ZW1vcnkgc2VnbWVudCBleGNlZWRlZCBhdmFpbGFibGUgbWVtb3J5LCAiCiAJCQkJCQkgInN3YXAg c3BhY2UsIG9yIGh1Z2UgcGFnZXMuIFRvIHJlZHVjZSB0aGUgcmVxdWVzdCBzaXplICIKIAkJCQkJ CSAiKGN1cnJlbnRseSAlenUgYnl0ZXMpLCByZWR1Y2UgUG9zdGdyZVNRTCdzIHNoYXJlZCAiCiAJ CQkJCQkgIm1lbW9yeSB1c2FnZSwgcGVyaGFwcyBieSByZWR1Y2luZyBcInNoYXJlZF9idWZmZXJz XCIgb3IgIgogCQkJCQkJICJcIm1heF9jb25uZWN0aW9uc1wiLiIsCi0JCQkJCQkgYWxsb2NzaXpl KSA6IDApKTsKKwkJCQkJCSBpbml0X3NpemUpIDogMCkpOworCX0KKwkvKiBUT0RPOiBUaGlzIG1p Z2h0IG1ha2UgdGhlIGJhY2tlbmQgc3RhcnR1cCBzbG93ZXIuICovCisJc2htZW1fZmFsbG9jYXRl KGFub25zaG1lbS0+ZmQsIHNlZ25hbWUsIGluaXRfc2l6ZSwgRkFUQUwpOworCisJYW5vbnNobWVt LT5hZGRyID0gcHRyOworCWFub25zaG1lbS0+c2l6ZSA9IG1heF9zaXplOworfQorCisvKgorICog UHJlcGFyZUh1Z2VQYWdlcworICoKKyAqIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGVub3VnaCBo dWdlIHBhZ2VzIHRvIGFsbG9jYXRlIGFsbCBzaGFyZWQgbWVtb3J5CisgKiBzZWdtZW50cywgYW5k IHJlcG9ydCB0aGF0IGluZm9ybWF0aW9uIHZpYSBodWdlX3BhZ2VzX3N0YXR1cyBhbmQKKyAqIGh1 Z2VfcGFnZXNfb24uIEl0IG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgc2hhcmVk IG1lbW9yeSBzZWdtZW50cy4KKyAqCisgKiBJdCBpcyBuZWNlc3NhcnkgdG8gbWFpbnRhaW4gdGhl IHNhbWUgc2VtYW50aWMgKHNpbXBsZSBvbi9vZmYpIGZvcgorICogaHVnZV9wYWdlc19zdGF0dXMs IGV2ZW4gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNoYXJlZCBtZW1vcnkgc2VnbWVudHM6IGFsbAor ICogc2VnbWVudHMgZWl0aGVyIHVzZSBodWdlIHBhZ2VzIG9yIG5vdCwgdGhlcmUgaXMgbm8gbWl4 IG9mIHNlZ21lbnRzIHdpdGgKKyAqIGRpZmZlcmVudCBwYWdlIHNpemUuIFRoZSBsYXR0ZXIgbWln aHQgYmUgYWN0dWFsbHkgYmVuZWZpY2lhbCwgaW4gcGFydGljdWxhcgorICogYmVjYXVzZSBvbmx5 IHNvbWUgc2VnbWVudHMgbWF5IHJlcXVpcmUgbGFyZ2UgYW1vdW50IG9mIG1lbW9yeSwgYnV0IGZv ciBub3cKKyAqIHdlIGdvIHdpdGggYSBzaW1wbGUgc29sdXRpb24uCisgKi8KK3ZvaWQKK1ByZXBh cmVIdWdlUGFnZXMoKQoreworCXZvaWQJICAgKnB0ciA9IE1BUF9GQUlMRUQ7CisJU2l6ZQl0b3Rh bF9zaXplOworCWludAkJCW1tYXBfZmxhZ3MgPSAoTUFQX1NIQVJFRCB8IE1BUF9IQVNTRU1BUEhP UkUpOworCisJLyogVE9ETzogdGhpcyBkb2Vzbid0IGNvdW50IHRoZSBtZW1vcnkgaW4gb24tZGVt YW5kIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgKi8KKwl0b3RhbF9zaXplID0gQ2FsY3VsYXRlU2ht ZW1TaXplKCk7CisKKwkvKiBDb21wbGFpbiBpZiBodWdlcGFnZXMgZGVtYW5kZWQgYnV0IHdlIGNh bid0IHBvc3NpYmx5IHN1cHBvcnQgdGhlbSAqLworI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKQor CWlmIChodWdlX3BhZ2VzID09IEhVR0VfUEFHRVNfT04pCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coImh1 Z2UgcGFnZXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikpKTsKKyNlbHNlCisJaWYg KGh1Z2VfcGFnZXMgPT0gSFVHRV9QQUdFU19PTiB8fCBodWdlX3BhZ2VzID09IEhVR0VfUEFHRVNf VFJZKQorCXsKKwkJU2l6ZQkJaHVnZXBhZ2VzaXplOworCQlpbnQJCQlodWdlX21tYXBfZmxhZ3M7 CisKKwkJR2V0SHVnZVBhZ2VTaXplKCZodWdlcGFnZXNpemUsICZodWdlX21tYXBfZmxhZ3MsIE5V TEwpOworCisJCS8qIE1hcCB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHRvIHRlc3QgaXRzIGF2YWls YWJpbGl0eS4gKi8KKwkJZWxvZyhERUJVRzEsICJyZXNlcnZpbmcgc3BhY2U6IHByb2JlIG1tYXAo JXp1KSB3aXRoIE1BUF9IVUdFVExCIiwKKwkJCSB0b3RhbF9zaXplKTsKKwkJcHRyID0gbW1hcChO VUxMLCB0b3RhbF9zaXplLCBQUk9UX05PTkUsCisJCQkJICAgbW1hcF9mbGFncyB8IE1BUF9BTk9O WU1PVVMgfCBodWdlX21tYXBfZmxhZ3MsIC0xLCAwKTsKIAl9CisjZW5kaWYKIAotCSpzaXplID0g YWxsb2NzaXplOwotCXJldHVybiBwdHI7CisJLyoKKwkgKiBSZXBvcnQgd2hldGhlciBodWdlIHBh Z2VzIGFyZSBpbiB1c2UuIFRoaXMgbmVlZHMgdG8gYmUgdHJhY2tlZCBiZWZvcmUKKwkgKiBjcmVh dGluZyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLgorCSAqLworCVNldENvbmZpZ09wdGlvbigiaHVn ZV9wYWdlc19zdGF0dXMiLCAocHRyID09IE1BUF9GQUlMRUQpID8gIm9mZiIgOiAib24iLAorCQkJ CQlQR0NfSU5URVJOQUwsIFBHQ19TX0RZTkFNSUNfREVGQVVMVCk7CisJaHVnZV9wYWdlc19vbiA9 IHB0ciAhPSBNQVBfRkFJTEVEOwogfQogCiAvKgpAQCAtNjc2LDE2ICs4ODQsODYgQEAgQ3JlYXRl QW5vbnltb3VzU2VnbWVudChTaXplICpzaXplKQogc3RhdGljIHZvaWQKIEFub255bW91c1NobWVt RGV0YWNoKGludCBzdGF0dXMsIERhdHVtIGFyZykKIHsKLQkvKiBSZWxlYXNlIGFub255bW91cyBz aGFyZWQgbWVtb3J5IGJsb2NrLCBpZiBhbnkuICovCi0JaWYgKEFub255bW91c1NobWVtICE9IE5V TEwpCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTUVNT1JZX01BUFBJTkdTOyBpKyspCiAJewot CQlpZiAobXVubWFwKEFub255bW91c1NobWVtLCBBbm9ueW1vdXNTaG1lbVNpemUpIDwgMCkKLQkJ CWVsb2coTE9HLCAibXVubWFwKCVwLCAlenUpIGZhaWxlZDogJW0iLAotCQkJCSBBbm9ueW1vdXNT aG1lbSwgQW5vbnltb3VzU2htZW1TaXplKTsKLQkJQW5vbnltb3VzU2htZW0gPSBOVUxMOworCQlB bm9uU2htZW1EYXRhICpzZWdtZW50ID0gJkFub25TaG1lbUluZm9baV07CisKKwkJLyogUmVsZWFz ZSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeSBibG9jaywgaWYgYW55LiAqLworCQlpZiAoc2VnbWVu dC0+YWRkciAhPSBOVUxMKQorCQl7CisJCQlBc3NlcnQoc2VnbWVudC0+ZmQgIT0gLTEpOworCisJ CQlpZiAobXVubWFwKHNlZ21lbnQtPmFkZHIsIHNlZ21lbnQtPnNpemUpIDwgMCkKKwkJCQllbG9n KExPRywgIm11bm1hcCglcCwgJXp1KSBmYWlsZWQ6ICVtIiwKKwkJCQkJIHNlZ21lbnQtPmFkZHIs IHNlZ21lbnQtPnNpemUpOworCQkJc2VnbWVudC0+YWRkciA9IE5VTEw7CisJCQljbG9zZShzZWdt ZW50LT5mZCk7CisJCQlzZWdtZW50LT5mZCA9IC0xOworCQl9CiAJfQogfQogCisvKgorICogUmVz aXplIGFsbCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGJhc2VkIG9uIHRoZSBuZXcgc2hhcmVkX2J1 ZmZlcnMgdmFsdWUgKHNhdmVkCisgKiBpbiBTaG1lbUN0cmwgYXJlYSkuIFRoZSBhY3R1YWwgc2Vn bWVudCByZXNpemluZyBpcyBkb25lIHZpYSBmdHJ1bmNhdGUsIHdoaWNoCisgKiB3aWxsIGZhaWwg aWYgdGhlcmUgaXMgbm90IHN1ZmZpY2llbnQgc3BhY2UgdG8gZXhwYW5kIHRoZSBhbm9uIGZpbGUu CisgKgorICogVE9ETzogUmVuYW1lIHRoaXMgdG8gQnVmZmVyU2htZW1SZXNpemUoKSBvciBzb21l dGhpbmcuIE9ubHkgYnVmZmVyIG1hbmFnZXIncworICogbWVtb3J5IHNob3VsZCBiZSByZXNpemVk IGluIHRoaXMgZnVuY3Rpb24uCisgKgorICogVE9ETzogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRo ZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSB1c2VkLiBTbyBpdCBzaG91bGQKKyAqIGFsc28gdXBk YXRlIHRoZSBzaG93IG9ubHkgR1VDcyBzaGFyZWRfbWVtb3J5X3NpemUgYW5kCisgKiBzaGFyZWRf bWVtb3J5X3NpemVfaW5faHVnZV9wYWdlcyBpbiBhbGwgYmFja2VuZHMuIFNldENvbmZpZ09wdGlv bigpIG1heSBiZQorICogdXNlZCBmb3IgdGhhdC4gQnV0IGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIg aXNfcmVsb2FkIHBhcmFtZXRlciBpcyBzYWZlIHRvIHVzZQorICogd2hpbGUgcmVzaXppbmcgaXMg Z29pbmcgb247IGFsc28gYXQgd2hhdCBzdGFnZSBpdCBzaG91bGQgYmUgZG9uZS4KKyAqLworc3Rh dGljIGJvb2wKK0Fub255bW91c1NobWVtUmVzaXplKGludCBzZWdtZW50X2lkLCBjb25zdCBjaGFy ICpzZWduYW1lLCBTaXplIG5ld19zaXplLCBib29sIGV4cGFuZGluZykKK3sKKwlTaXplCQlodWdl cGFnZXNpemU7CisJQW5vblNobWVtRGF0YSAqYW5vbnNobWVtID0gJkFub25TaG1lbUluZm9bc2Vn bWVudF9pZF07CisKKwlpZiAoYW5vbnNobWVtLT5mZCA9PSAtMSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwK KwkJCQkgZXJybXNnKCJzZWdtZW50WyVzXTogb25seSBhbm9ueW1vdXMgKG1tYXBlZCkgZmlsZSBi YWNrZWQgc2VnbWVudHMgY2FuIGJlIHJlc2l6ZWQiLAorCQkJCQkJc2VnbmFtZSkpKTsKKworI2lm bmRlZiBNQVBfSFVHRVRMQgorCS8qIFByZXBhcmVIdWdlUGFnZXMgc2hvdWxkIGhhdmUgZGVhbHQg d2l0aCB0aGlzIGNhc2UgKi8KKwlBc3NlcnQoaHVnZV9wYWdlcyAhPSBIVUdFX1BBR0VTX09OICYm ICFodWdlX3BhZ2VzX29uKTsKKyNlbHNlCisJaWYgKGh1Z2VfcGFnZXNfb24pCisJeworCQlBc3Nl cnQoaHVnZV9wYWdlcyA9PSBIVUdFX1BBR0VTX09OIHx8IGh1Z2VfcGFnZXMgPT0gSFVHRV9QQUdF U19UUlkpOworCQlHZXRIdWdlUGFnZVNpemUoJmh1Z2VwYWdlc2l6ZSwgTlVMTCwgTlVMTCk7CisJ CW5ld19zaXplID0gYWxpZ25fc2l6ZShuZXdfc2l6ZSwgaHVnZXBhZ2VzaXplKTsKKwl9CisjZW5k aWYKKwlBc3NlcnQoYW5vbnNobWVtLT5hZGRyKTsKKworCS8qCisJICogU2l6ZSBvZiB0aGUgcmVz ZXJ2ZWQgYWRkcmVzcyBzcGFjZSBzaG91bGQgbm90IGNoYW5nZSwgc2luY2UgaXQgZGVwZW5kcwor CSAqIHVwb24gTWF4TkJ1ZmZlcnMsIHdoaWNoIGNhbiBiZSBjaGFuZ2VkIG9ubHkgb24gcmVzdGFy dC4KKwkgKi8KKwlBc3NlcnQoYW5vbnNobWVtLT5zaXplID49IG5ld19zaXplKTsKKworCS8qCisJ ICogUmVzaXplIHRoZSBiYWNraW5nIGZpbGUgdG8gcmVzaXplIHRoZSBhbGxvY2F0ZWQgbWVtb3J5 LCBhbmQgYWxsb2NhdGUKKwkgKiBtb3JlIG1lbW9yeSBvbiBzdXBwb3J0ZWQgcGxhdGZvcm1zIGlm IHJlcXVpcmVkLgorCSAqLworCWlmIChmdHJ1bmNhdGUoYW5vbnNobWVtLT5mZCwgbmV3X3NpemUp ID09IC0xKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfU1lTVEVNX0VS Uk9SKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgYW5vbnltb3VzIGZpbGUgc2Vn bWVudCBmb3IgXCIlc1wiOiAlbSIsCisJCQkJCQlzZWduYW1lKSkpOworCS8qIFRPRE86IFRoaXMg bWlnaHQgbWFrZSB0aGUgcHJvZ3JhbSBzbG93ZXIuICovCisJaWYgKGV4cGFuZGluZykKKwkJc2ht ZW1fZmFsbG9jYXRlKGFub25zaG1lbS0+ZmQsIHNlZ25hbWUsIG5ld19zaXplLCBFUlJPUik7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIFBHU2hhcmVkTWVtb3J5Q3JlYXRlCiAgKgpAQCAt Njk5LDcgKzk3Nyw3IEBAIEFub255bW91c1NobWVtRGV0YWNoKGludCBzdGF0dXMsIERhdHVtIGFy ZykKICAqIHBvc3RtYXN0ZXIgb3IgYmFja2VuZC4KICAqLwogUEdTaG1lbUhlYWRlciAqCi1QR1No YXJlZE1lbW9yeUNyZWF0ZShTaXplIHNpemUsCitQR1NoYXJlZE1lbW9yeUNyZWF0ZShpbnQgc2Vn bWVudF9pZCwgY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBpbml0X3NpemUsIFNpemUgbWF4X3NpemUs CiAJCQkJCSBQR1NobWVtSGVhZGVyICoqc2hpbSkKIHsKIAlJcGNNZW1vcnlLZXkgTmV4dFNobWVt U2VnSUQ7CkBAIC03MDcsNiArOTg1LDggQEAgUEdTaGFyZWRNZW1vcnlDcmVhdGUoU2l6ZSBzaXpl LAogCVBHU2htZW1IZWFkZXIgKmhkcjsKIAlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOwogCVNpemUJCXN5 c3ZzaXplOworCUFub25TaG1lbURhdGEgKmFub25zaG1lbSA9ICZBbm9uU2htZW1JbmZvW3NlZ21l bnRfaWRdOworCVBHVXNlZFNobWVtSW5mbyAqdXNlZFNobWVtID0gJlVzZWRTaG1lbUluZm9bc2Vn bWVudF9pZF07CiAKIAkvKgogCSAqIFdlIHVzZSB0aGUgZGF0YSBkaXJlY3RvcnkncyBJRCBpbmZv IChpbm9kZSBhbmQgZGV2aWNlIG51bWJlcnMpIHRvCkBAIC03MTksMTQgKzk5OSw2IEBAIFBHU2hh cmVkTWVtb3J5Q3JlYXRlKFNpemUgc2l6ZSwKIAkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhdCBk YXRhIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKIAkJCQkJCURhdGFEaXIpKSk7CiAKLQkvKiBDb21w bGFpbiBpZiBodWdlcGFnZXMgZGVtYW5kZWQgYnV0IHdlIGNhbid0IHBvc3NpYmx5IHN1cHBvcnQg dGhlbSAqLwotI2lmICFkZWZpbmVkKE1BUF9IVUdFVExCKQotCWlmIChodWdlX3BhZ2VzID09IEhV R0VfUEFHRVNfT04pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAotCQkJCSBlcnJtc2coImh1Z2UgcGFnZXMgbm90IHN1cHBvcnRl ZCBvbiB0aGlzIHBsYXRmb3JtIikpKTsKLSNlbmRpZgotCiAJLyogRm9yIG5vdywgd2UgZG9uJ3Qg c3VwcG9ydCBodWdlIHBhZ2VzIGluIFN5c1YgbWVtb3J5ICovCiAJaWYgKGh1Z2VfcGFnZXMgPT0g SFVHRV9QQUdFU19PTiAmJiBzaGFyZWRfbWVtb3J5X3R5cGUgIT0gU0hNRU1fVFlQRV9NTUFQKQog CQllcmVwb3J0KEVSUk9SLApAQCAtNzM0LDE0ICsxMDA2LDE1IEBAIFBHU2hhcmVkTWVtb3J5Q3Jl YXRlKFNpemUgc2l6ZSwKIAkJCQkgZXJybXNnKCJodWdlIHBhZ2VzIG5vdCBzdXBwb3J0ZWQgd2l0 aCB0aGUgY3VycmVudCBcInNoYXJlZF9tZW1vcnlfdHlwZVwiIHNldHRpbmciKSkpOwogCiAJLyog Um9vbSBmb3IgYSBoZWFkZXI/ICovCi0JQXNzZXJ0KHNpemUgPiBNQVhBTElHTihzaXplb2YoUEdT aG1lbUhlYWRlcikpKTsKKwlBc3NlcnQoaW5pdF9zaXplID4gTUFYQUxJR04oc2l6ZW9mKFBHU2ht ZW1IZWFkZXIpKSk7CiAKIAlpZiAoc2hhcmVkX21lbW9yeV90eXBlID09IFNITUVNX1RZUEVfTU1B UCkKIAl7Ci0JCUFub255bW91c1NobWVtID0gQ3JlYXRlQW5vbnltb3VzU2VnbWVudCgmc2l6ZSk7 Ci0JCUFub255bW91c1NobWVtU2l6ZSA9IHNpemU7CisJCS8qIE9uIHN1Y2Nlc3MsIG1hcHBpbmcg ZGF0YSB3aWxsIGJlIG1vZGlmaWVkLiAqLworCQlDcmVhdGVBbm9ueW1vdXNTZWdtZW50KHNlZ21l bnRfaWQsIG5hbWUsIGluaXRfc2l6ZSwgbWF4X3NpemUpOwogCiAJCS8qIFJlZ2lzdGVyIG9uLWV4 aXQgcm91dGluZSB0byB1bm1hcCB0aGUgYW5vbnltb3VzIHNlZ21lbnQgKi8KKwkJLyogVE9ETzog VGhpcyBoYXBwZW5zIGZvciBldmVyeSBzaGFyZWQgbWVtb3J5IHRoYXQgZ2V0cyBjcmVhdGVkLiBE byBpdCBvbmx5IG9uY2UuICovCiAJCW9uX3NobWVtX2V4aXQoQW5vbnltb3VzU2htZW1EZXRhY2gs IChEYXR1bSkgMCk7CiAKIAkJLyogTm93IHdlIG5lZWQgb25seSBhbGxvY2F0ZSBhIG1pbmltYWwt c2l6ZWQgU3lzViBzaG1lbSBibG9jay4gKi8KQEAgLTc0OSw3ICsxMDIyLDcgQEAgUEdTaGFyZWRN ZW1vcnlDcmVhdGUoU2l6ZSBzaXplLAogCX0KIAllbHNlCiAJewotCQlzeXN2c2l6ZSA9IHNpemU7 CisJCXN5c3ZzaXplID0gaW5pdF9zaXplOwogCiAJCS8qIGh1Z2UgcGFnZXMgYXJlIG9ubHkgYXZh aWxhYmxlIHdpdGggbW1hcCAqLwogCQlTZXRDb25maWdPcHRpb24oImh1Z2VfcGFnZXNfc3RhdHVz IiwgIm9mZiIsCkBAIC03NjIsNyArMTAzNSw3IEBAIFBHU2hhcmVkTWVtb3J5Q3JlYXRlKFNpemUg c2l6ZSwKIAkgKiBsb29wIHNpbXVsdGFuZW91c2x5LiAgKENyZWF0ZURhdGFEaXJMb2NrRmlsZSgp IGRvZXMgbm90IGVudGlyZWx5IGVuc3VyZQogCSAqIHRoYXQsIGJ1dCBwcmVmZXIgZml4aW5nIGl0 IG92ZXIgY29waW5nIGhlcmUuKQogCSAqLwotCU5leHRTaG1lbVNlZ0lEID0gc3RhdGJ1Zi5zdF9p bm87CisJTmV4dFNobWVtU2VnSUQgPSBzdGF0YnVmLnN0X2lubyArIHVzZWRTaG1lbS0+VXNlZFNo bWVtU2VnSUQ7CiAKIAlmb3IgKDs7KQogCXsKQEAgLTgwMCw2ICsxMDczLDcgQEAgUEdTaGFyZWRN ZW1vcnlDcmVhdGUoU2l6ZSBzaXplLAogCQkJCQkJIGVycm1zZygicHJlLWV4aXN0aW5nIHNoYXJl ZCBtZW1vcnkgYmxvY2sgKGtleSAlbHUsIElEICVsdSkgaXMgc3RpbGwgaW4gdXNlIiwKIAkJCQkJ CQkJKHVuc2lnbmVkIGxvbmcpIE5leHRTaG1lbVNlZ0lELAogCQkJCQkJCQkodW5zaWduZWQgbG9u Zykgc2htaWQpLAorCQkJCQkJIGVycmRldGFpbCgid2hlbiB0cnlpbmcgdG8gY3JlYXRlIHNoYXJl ZCBtZW1vcnkgYmxvY2sgZm9yIHNlZ21lbnQgXCIlc1wiIiwgbmFtZSksCiAJCQkJCQkgZXJyaGlu dCgiVGVybWluYXRlIGFueSBvbGQgc2VydmVyIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggZGF0 YSBkaXJlY3RvcnkgXCIlc1wiLiIsCiAJCQkJCQkJCSBEYXRhRGlyKSkpOwogCQkJCWJyZWFrOwpA QCAtODU0LDI0ICsxMTI4LDU3IEBAIFBHU2hhcmVkTWVtb3J5Q3JlYXRlKFNpemUgc2l6ZSwKIAkv KgogCSAqIEluaXRpYWxpemUgc3BhY2UgYWxsb2NhdGlvbiBzdGF0dXMgZm9yIHNlZ21lbnQuCiAJ ICovCi0JaGRyLT50b3RhbHNpemUgPSBzaXplOworCWhkci0+dG90YWxzaXplID0gaW5pdF9zaXpl OworCWhkci0+cmVzZXJ2ZWRzaXplID0gbWF4X3NpemU7CiAJaGRyLT5jb250ZW50X29mZnNldCA9 IE1BWEFMSUdOKHNpemVvZihQR1NobWVtSGVhZGVyKSk7CiAJKnNoaW0gPSBoZHI7CiAKIAkvKiBT YXZlIGluZm8gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UgKi8KLQlVc2VkU2htZW1TZWdBZGRyID0g bWVtQWRkcmVzczsKLQlVc2VkU2htZW1TZWdJRCA9ICh1bnNpZ25lZCBsb25nKSBOZXh0U2htZW1T ZWdJRDsKKwl1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIgPSBtZW1BZGRyZXNzOworCXVzZWRT aG1lbS0+VXNlZFNobWVtU2VnSUQgPSAodW5zaWduZWQgbG9uZykgTmV4dFNobWVtU2VnSUQ7CiAK IAkvKgotCSAqIElmIEFub255bW91c1NobWVtIGlzIE5VTEwgaGVyZSwgdGhlbiB3ZSdyZSBub3Qg dXNpbmcgYW5vbnltb3VzIHNoYXJlZAotCSAqIG1lbW9yeSwgYW5kIHNob3VsZCByZXR1cm4gYSBw b2ludGVyIHRvIHRoZSBTeXN0ZW0gViBzaGFyZWQgbWVtb3J5Ci0JICogYmxvY2suIE90aGVyd2lz ZSwgdGhlIFN5c3RlbSBWIHNoYXJlZCBtZW1vcnkgYmxvY2sgaXMgb25seSBhIHNoaW0sIGFuZAot CSAqIHdlIG11c3QgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVhbCBibG9jay4KKwkgKiBJZiB3 ZSdyZSBub3QgdXNpbmcgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnksIHJldHVybiBhIHBvaW50ZXIg dG8gdGhlCisJICogU3lzdGVtIFYgc2hhcmVkIG1lbW9yeSBibG9jay4gT3RoZXJ3aXNlLCB0aGUg U3lzdGVtIFYgc2hhcmVkIG1lbW9yeQorCSAqIGJsb2NrIGlzIG9ubHkgYSBzaGltLCBhbmQgd2Ug bXVzdCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZWFsIGJsb2NrLgogCSAqLwotCWlmIChBbm9u eW1vdXNTaG1lbSA9PSBOVUxMKQorCWlmIChhbm9uc2htZW0tPmFkZHIgPT0gTlVMTCkKIAkJcmV0 dXJuIGhkcjsKLQltZW1jcHkoQW5vbnltb3VzU2htZW0sIGhkciwgc2l6ZW9mKFBHU2htZW1IZWFk ZXIpKTsKLQlyZXR1cm4gKFBHU2htZW1IZWFkZXIgKikgQW5vbnltb3VzU2htZW07CisJbWVtY3B5 KGFub25zaG1lbS0+YWRkciwgaGRyLCBzaXplb2YoUEdTaG1lbUhlYWRlcikpOworCXJldHVybiBh bm9uc2htZW0tPmFkZHI7Cit9CisKK2Jvb2wKK1BHU2hhcmVkTWVtb3J5UmVzaXplKGludCBzZWdt ZW50X2lkLCBjb25zdCBjaGFyICpuYW1lLCBTaXplIG5ld19zaXplKQoreworCUFub25TaG1lbURh dGEgKmFub25zaG1lbSA9ICZBbm9uU2htZW1JbmZvW3NlZ21lbnRfaWRdOworCVBHU2htZW1IZWFk ZXIgKmhkcjsKKworCS8qIEZvciBub3csIHdlIGFsbG93IG9ubHkgbW1hcHBlZCBtZW1vcnkgdG8g YmUgcmVzaXplZC4gKi8KKwlpZiAoc2hhcmVkX21lbW9yeV90eXBlICE9IFNITUVNX1RZUEVfTU1B UCB8fCBhbm9uc2htZW0tPmZkID09IC0xKQorCQllbG9nKEVSUk9SLCAib25seSBhbm9ueW1vdXMg KG1tYXBlZCkgZmlsZSBiYWNrZWQgbWVtb3J5IGNhbiBiZSByZXNpemVkIik7CisKKwkvKiBBbm9u eW1vdXMgbWVtb3J5IGhhcyBoZWFkZXIgYXMgdGhlIGZpcnN0IGNodW5rLiAqLworCWhkciA9IChQ R1NobWVtSGVhZGVyICopIGFub25zaG1lbS0+YWRkcjsKKworCS8qCisJICogV2Ugc2hvdWxkIGhh dmUgcmVzZXJ2ZWQgZW5vdWdoIGFkZHJlc3Mgc3BhY2UgZm9yIHJlc2l6aW5nLiBQQU5JQyBpZgor CSAqIHRoYXQncyBub3QgdGhlIGNhc2UuCisJICovCisJaWYgKGhkci0+cmVzZXJ2ZWRzaXplIDwg bmV3X3NpemUpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJ Q0lFTlRfUkVTT1VSQ0VTKSwKKwkJCQkgZXJybXNnKCJub3QgZW5vdWdoIGFkZHJlc3Mgc3BhY2Ug aXMgcmVzZXJ2ZWQiKSkpOworCisJLyogTm90aGluZyB0byBkbyBpZiBzaXplIGlzIHVuY2hhbmdl ZCAqLworCWlmIChoZHItPnRvdGFsc2l6ZSA9PSBuZXdfc2l6ZSkKKwkJcmV0dXJuIHRydWU7CisK KwlBbm9ueW1vdXNTaG1lbVJlc2l6ZShzZWdtZW50X2lkLCBuYW1lLCBuZXdfc2l6ZSwgbmV3X3Np emUgPiBoZHItPnRvdGFsc2l6ZSk7CisKKwkvKiBVcGRhdGUgdGhlIGF2YWlsYWJsZSBzaXplLiAq LworCWhkci0+dG90YWxzaXplID0gbmV3X3NpemU7CisJcmV0dXJuIHRydWU7CiB9CiAKICNpZmRl ZiBFWEVDX0JBQ0tFTkQKQEAgLTg4NCw5ICsxMTkxLDkgQEAgUEdTaGFyZWRNZW1vcnlDcmVhdGUo U2l6ZSBzaXplLAogICogRVhFQ19CQUNLRU5EIGNhc2U7IG90aGVyd2lzZSBwb3N0bWFzdGVyIGNo aWxkcmVuIGluaGVyaXQgdGhlIHNoYXJlZCBtZW1vcnkKICAqIHNlZ21lbnQgYXR0YWNobWVudCB2 aWEgZm9yaygpLgogICoKLSAqIFVzZWRTaG1lbVNlZ0lEIGFuZCBVc2VkU2htZW1TZWdBZGRyIGFy ZSBpbXBsaWNpdCBwYXJhbWV0ZXJzIHRvIHRoaXMKLSAqIHJvdXRpbmUuICBUaGUgY2FsbGVyIG11 c3QgaGF2ZSBhbHJlYWR5IHJlc3RvcmVkIHRoZW0gdG8gdGhlIHBvc3RtYXN0ZXIncwotICogdmFs dWVzLgorICogVXNlZFNobWVtSW5mbyBhcnJheSBpcyBhbiBpbXBsaWNpdCBwYXJhbWV0ZXIgdG8g dGhpcworICogcm91dGluZS4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgcmVzdG9yZWQg aXQgdG8gdGhlIHBvc3RtYXN0ZXIncworICogc3RhdGUuCiAgKi8KIHZvaWQKIFBHU2hhcmVkTWVt b3J5UmVBdHRhY2godm9pZCkKQEAgLTg5NCwzMiArMTIwMSw0MiBAQCBQR1NoYXJlZE1lbW9yeVJl QXR0YWNoKHZvaWQpCiAJSXBjTWVtb3J5SWQgc2htaWQ7CiAJUEdTaG1lbUhlYWRlciAqaGRyOwog CUlwY01lbW9yeVN0YXRlIHN0YXRlOwotCXZvaWQJICAgKm9yaWdVc2VkU2htZW1TZWdBZGRyID0g VXNlZFNobWVtU2VnQWRkcjsKKwl2b2lkCSAgICpvcmlnVXNlZFNobWVtU2VnQWRkcjsKIAotCUFz c2VydChVc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpOwotCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rl cik7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTUVNT1JZX01BUFBJTkdTOyBpKyspCisJewor CQlQR1VzZWRTaG1lbUluZm8gKnVzZWRTaG1lbSA9ICZVc2VkU2htZW1JbmZvW2ldOworCisJCW9y aWdVc2VkU2htZW1TZWdBZGRyID0gdXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRyOworCisJCUFz c2VydCh1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIgIT0gTlVMTCk7CisJCUFzc2VydChJc1Vu ZGVyUG9zdG1hc3Rlcik7CiAKICNpZmRlZiBfX0NZR1dJTl9fCi0JLyogY3lnaXBjIChjdXJyZW50 bHkpIGFwcGVhcnMgdG8gbm90IGRldGFjaCBvbiBleGVjLiAqLwotCVBHU2hhcmVkTWVtb3J5RGV0 YWNoKCk7Ci0JVXNlZFNobWVtU2VnQWRkciA9IG9yaWdVc2VkU2htZW1TZWdBZGRyOworCQkvKiBj eWdpcGMgKGN1cnJlbnRseSkgYXBwZWFycyB0byBub3QgZGV0YWNoIG9uIGV4ZWMuICovCisJCVBH U2hhcmVkTWVtb3J5RGV0YWNoKCk7CisJCXVzZWRTaG1lbS0+VXNlZFNobWVtU2VnQWRkciA9IG9y aWdVc2VkU2htZW1TZWdBZGRyOwogI2VuZGlmCiAKLQllbG9nKERFQlVHMywgImF0dGFjaGluZyB0 byAlcCIsIFVzZWRTaG1lbVNlZ0FkZHIpOwotCXNobWlkID0gc2htZ2V0KFVzZWRTaG1lbVNlZ0lE LCBzaXplb2YoUEdTaG1lbUhlYWRlciksIDApOwotCWlmIChzaG1pZCA8IDApCi0JCXN0YXRlID0g U0hNU1RBVEVfRk9SRUlHTjsKLQllbHNlCi0JCXN0YXRlID0gUEdTaGFyZWRNZW1vcnlBdHRhY2go c2htaWQsIFVzZWRTaG1lbVNlZ0FkZHIsICZoZHIpOwotCWlmIChzdGF0ZSAhPSBTSE1TVEFURV9B VFRBQ0hFRCkKLQkJZWxvZyhGQVRBTCwgImNvdWxkIG5vdCByZWF0dGFjaCB0byBzaGFyZWQgbWVt b3J5IChrZXk9JWQsIGFkZHI9JXApOiAlbSIsCi0JCQkgKGludCkgVXNlZFNobWVtU2VnSUQsIFVz ZWRTaG1lbVNlZ0FkZHIpOwotCWlmIChoZHIgIT0gb3JpZ1VzZWRTaG1lbVNlZ0FkZHIpCi0JCWVs b2coRkFUQUwsICJyZWF0dGFjaGluZyB0byBzaGFyZWQgbWVtb3J5IHJldHVybmVkIHVuZXhwZWN0 ZWQgYWRkcmVzcyAoZ290ICVwLCBleHBlY3RlZCAlcCkiLAotCQkJIGhkciwgb3JpZ1VzZWRTaG1l bVNlZ0FkZHIpOwotCWRzbV9zZXRfY29udHJvbF9oYW5kbGUoaGRyLT5kc21fY29udHJvbCk7Ci0K LQlVc2VkU2htZW1TZWdBZGRyID0gaGRyOwkJLyogcHJvYmFibHkgcmVkdW5kYW50ICovCisJCWVs b2coREVCVUczLCAiYXR0YWNoaW5nIHRvICVwIiwgdXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRy KTsKKwkJc2htaWQgPSBzaG1nZXQodXNlZFNobWVtLT5Vc2VkU2htZW1TZWdJRCwgc2l6ZW9mKFBH U2htZW1IZWFkZXIpLCAwKTsKKwkJaWYgKHNobWlkIDwgMCkKKwkJCXN0YXRlID0gU0hNU1RBVEVf Rk9SRUlHTjsKKwkJZWxzZQorCQkJc3RhdGUgPSBQR1NoYXJlZE1lbW9yeUF0dGFjaChzaG1pZCwg dXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRyLCAmaGRyKTsKKwkJaWYgKHN0YXRlICE9IFNITVNU QVRFX0FUVEFDSEVEKQorCQkJZWxvZyhGQVRBTCwgImNvdWxkIG5vdCByZWF0dGFjaCB0byBzaGFy ZWQgbWVtb3J5IChrZXk9JWQsIGFkZHI9JXApOiAlbSIsCisJCQkJIChpbnQpIHVzZWRTaG1lbS0+ VXNlZFNobWVtU2VnSUQsIHVzZWRTaG1lbS0+VXNlZFNobWVtU2VnQWRkcik7CisJCWlmIChoZHIg IT0gb3JpZ1VzZWRTaG1lbVNlZ0FkZHIpCisJCQllbG9nKEZBVEFMLCAicmVhdHRhY2hpbmcgdG8g c2hhcmVkIG1lbW9yeSByZXR1cm5lZCB1bmV4cGVjdGVkIGFkZHJlc3MgKGdvdCAlcCwgZXhwZWN0 ZWQgJXApIiwKKwkJCQkgaGRyLCBvcmlnVXNlZFNobWVtU2VnQWRkcik7CisKKwkJLyogUmUtZXN0 YWJsaXNoIGRzbV9jb250cm9sIG1hcHBpbmcsIGlmIGFueSAqLworCQlpZiAoaGRyLT5kc21fY29u dHJvbCAhPSAwKQorCQkJZHNtX3NldF9jb250cm9sX2hhbmRsZShoZHItPmRzbV9jb250cm9sKTsK KworCQl1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIgPSBoZHI7CS8qIHByb2JhYmx5IHJlZHVu ZGFudCAqLworCX0KIH0KIAogLyoKQEAgLTkzMywxNCArMTI1MCwxMyBAQCBQR1NoYXJlZE1lbW9y eVJlQXR0YWNoKHZvaWQpCiAgKiBUaGUgY2hpbGQgcHJvY2VzcyBzdGFydHVwIGxvZ2ljIG1pZ2h0 IG9yIG1pZ2h0IG5vdCBjYWxsIFBHU2hhcmVkTWVtb3J5RGV0YWNoCiAgKiBhZnRlciB0aGlzOyBt YWtlIHN1cmUgdGhhdCBpdCB3aWxsIGJlIGEgbm8tb3AgaWYgY2FsbGVkLgogICoKLSAqIFVzZWRT aG1lbVNlZ0lEIGFuZCBVc2VkU2htZW1TZWdBZGRyIGFyZSBpbXBsaWNpdCBwYXJhbWV0ZXJzIHRv IHRoaXMKLSAqIHJvdXRpbmUuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBhbHJlYWR5IHJlc3RvcmVk IHRoZW0gdG8gdGhlIHBvc3RtYXN0ZXIncwotICogdmFsdWVzLgorICogVXNlZFNobWVtSW5mbyBh cnJheSBpcyBhbiBpbXBsaWNpdCBwYXJhbWV0ZXIgdG8gdGhpcworICogcm91dGluZS4gIFRoZSBj YWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgcmVzdG9yZWQgaXQgdG8gdGhlIHBvc3RtYXN0ZXIncwor ICogc3RhdGUuCiAgKi8KIHZvaWQKIFBHU2hhcmVkTWVtb3J5Tm9SZUF0dGFjaCh2b2lkKQogewot CUFzc2VydChVc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpOwogCUFzc2VydChJc1VuZGVyUG9zdG1h c3Rlcik7CiAKICNpZmRlZiBfX0NZR1dJTl9fCkBAIC05NDgsMTAgKzEyNjQsMTYgQEAgUEdTaGFy ZWRNZW1vcnlOb1JlQXR0YWNoKHZvaWQpCiAJUEdTaGFyZWRNZW1vcnlEZXRhY2goKTsKICNlbmRp ZgogCi0JLyogRm9yIGNsZWFubGluZXNzLCByZXNldCBVc2VkU2htZW1TZWdBZGRyIHRvIHNob3cg d2UncmUgbm90IGF0dGFjaGVkLiAqLwotCVVzZWRTaG1lbVNlZ0FkZHIgPSBOVUxMOwotCS8qIEFu ZCB0aGUgc2FtZSBmb3IgVXNlZFNobWVtU2VnSUQuICovCi0JVXNlZFNobWVtU2VnSUQgPSAwOwor CWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01FTU9SWV9NQVBQSU5HUzsgaSsrKQorCXsKKwkJUEdV c2VkU2htZW1JbmZvICp1c2VkU2htZW0gPSAmVXNlZFNobWVtSW5mb1tpXTsKKworCQlBc3NlcnQo dXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpOworCQkvKiBGb3IgY2xlYW5saW5l c3MsIHJlc2V0IFVzZWRTaG1lbVNlZ0FkZHIgdG8gc2hvdyB3ZSdyZSBub3QgYXR0YWNoZWQuICov CisJCXVzZWRTaG1lbS0+VXNlZFNobWVtU2VnQWRkciA9IE5VTEw7CisJCS8qIEFuZCB0aGUgc2Ft ZSBmb3IgVXNlZFNobWVtU2VnSUQuICovCisJCXVzZWRTaG1lbS0+VXNlZFNobWVtU2VnSUQgPSAw OworCX0KIH0KIAogI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwpAQCAtOTU5LDM1ICsx MjgxLDQ0IEBAIFBHU2hhcmVkTWVtb3J5Tm9SZUF0dGFjaCh2b2lkKQogLyoKICAqIFBHU2hhcmVk TWVtb3J5RGV0YWNoCiAgKgotICogRGV0YWNoIGZyb20gdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVu dCwgaWYgc3RpbGwgYXR0YWNoZWQuICBUaGlzIGlzIG5vdAorICogRGV0YWNoIGZyb20gdGhlIHNo YXJlZCBtZW1vcnkgc2VnbWVudHMsIGlmIHN0aWxsIGF0dGFjaGVkLiAgVGhpcyBpcyBub3QKICAq IGludGVuZGVkIHRvIGJlIGNhbGxlZCBleHBsaWNpdGx5IGJ5IHRoZSBwcm9jZXNzIHRoYXQgb3Jp Z2luYWxseSBjcmVhdGVkIHRoZQotICogc2VnbWVudCAoaXQgd2lsbCBoYXZlIG9uX3NobWVtX2V4 aXQgY2FsbGJhY2socykgcmVnaXN0ZXJlZCB0byBkbyB0aGF0KS4KKyAqIHNlZ21lbnRzIChpdCB3 aWxsIGhhdmUgb25fc2htZW1fZXhpdCBjYWxsYmFjayhzKSByZWdpc3RlcmVkIHRvIGRvIHRoYXQp LgogICogUmF0aGVyLCB0aGlzIGlzIGZvciBzdWJwcm9jZXNzZXMgdGhhdCBoYXZlIGluaGVyaXRl ZCBhbiBhdHRhY2htZW50IGFuZCB3YW50CiAgKiB0byBnZXQgcmlkIG9mIGl0LgogICoKLSAqIFVz ZWRTaG1lbVNlZ0lEIGFuZCBVc2VkU2htZW1TZWdBZGRyIGFyZSBpbXBsaWNpdCBwYXJhbWV0ZXJz IHRvIHRoaXMKLSAqIHJvdXRpbmUsIGFsc28gQW5vbnltb3VzU2htZW0gYW5kIEFub255bW91c1No bWVtU2l6ZS4KKyAqIFBHVXNlZFNobWVtSW5mbzo6VXNlZFNobWVtU2VnSUQgYW5kIFBHVXNlZFNo bWVtSW5mbzo6VXNlZFNobWVtU2VnQWRkciBhcmUKKyAqIGltcGxpY2l0IHBhcmFtZXRlcnMgdG8g dGhpcyByb3V0aW5lIG9idGFpbmVkIGZyb20gZW50cmllcyBpbiBVc2VkU2htZW1JbmZvCisgKiBh cnJheS4KICAqLwogdm9pZAogUEdTaGFyZWRNZW1vcnlEZXRhY2godm9pZCkKIHsKLQlpZiAoVXNl ZFNobWVtU2VnQWRkciAhPSBOVUxMKQorCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNX01FTU9SWV9N QVBQSU5HUzsgaSsrKQogCXsKLQkJaWYgKChzaG1kdChVc2VkU2htZW1TZWdBZGRyKSA8IDApCisJ CVBHVXNlZFNobWVtSW5mbyAqdXNlZFNobWVtID0gJlVzZWRTaG1lbUluZm9baV07CisJCUFub25T aG1lbURhdGEgKmFub25zaG1lbSA9ICZBbm9uU2htZW1JbmZvW2ldOworCisJCWlmICh1c2VkU2ht ZW0tPlVzZWRTaG1lbVNlZ0FkZHIgIT0gTlVMTCkKKwkJeworCQkJaWYgKChzaG1kdCh1c2VkU2ht ZW0tPlVzZWRTaG1lbVNlZ0FkZHIpIDwgMCkKICNpZiBkZWZpbmVkKEVYRUNfQkFDS0VORCkgJiYg ZGVmaW5lZChfX0NZR1dJTl9fKQotCQkvKiBXb3JrLWFyb3VuZCBmb3IgY3lnaXBjIGV4ZWMgYnVn ICovCi0JCQkmJiBzaG1kdChOVUxMKSA8IDAKKwkJCS8qIFdvcmstYXJvdW5kIGZvciBjeWdpcGMg ZXhlYyBidWcgKi8KKwkJCQkmJiBzaG1kdChOVUxMKSA8IDAKICNlbmRpZgotCQkJKQotCQkJZWxv ZyhMT0csICJzaG1kdCglcCkgZmFpbGVkOiAlbSIsIFVzZWRTaG1lbVNlZ0FkZHIpOwotCQlVc2Vk U2htZW1TZWdBZGRyID0gTlVMTDsKLQl9CisJCQkJKQorCQkJCWVsb2coTE9HLCAic2htZHQoJXAp IGZhaWxlZDogJW0iLCB1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIpOworCQkJdXNlZFNobWVt LT5Vc2VkU2htZW1TZWdBZGRyID0gTlVMTDsKKwkJfQogCi0JaWYgKEFub255bW91c1NobWVtICE9 IE5VTEwpCi0JewotCQlpZiAobXVubWFwKEFub255bW91c1NobWVtLCBBbm9ueW1vdXNTaG1lbVNp emUpIDwgMCkKLQkJCWVsb2coTE9HLCAibXVubWFwKCVwLCAlenUpIGZhaWxlZDogJW0iLAotCQkJ CSBBbm9ueW1vdXNTaG1lbSwgQW5vbnltb3VzU2htZW1TaXplKTsKLQkJQW5vbnltb3VzU2htZW0g PSBOVUxMOworCQlpZiAoYW5vbnNobWVtLT5hZGRyICE9IE5VTEwpCisJCXsKKwkJCWlmIChtdW5t YXAoYW5vbnNobWVtLT5hZGRyLCBhbm9uc2htZW0tPnNpemUpIDwgMCkKKwkJCQllbG9nKExPRywg Im11bm1hcCglcCwgJXp1KSBmYWlsZWQ6ICVtIiwKKwkJCQkJIGFub25zaG1lbS0+YWRkciwgYW5v bnNobWVtLT5zaXplKTsKKwkJCWFub25zaG1lbS0+YWRkciA9IE5VTEw7CisJCQljbG9zZShhbm9u c2htZW0tPmZkKTsKKwkJCWFub25zaG1lbS0+ZmQgPSAtMTsKKwkJfQogCX0KIH0KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYyBiL3NyYy9iYWNrZW5kL3BvcnQvd2lu MzJfc2htZW0uYwppbmRleCA3OTRlNGZjYjJhZC4uNzZhOGNjOWFlNTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BvcnQvd2luMzJfc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9wb3J0L3dpbjMy X3NobWVtLmMKQEAgLTM5LDE1ICszOSwxNCBAQAogICogYWRkcmVzcyBzcGFjZSBhbmQgaXMgbmVn bGlnaWJsZSByZWxhdGl2ZSB0byB0aGUgNjQtYml0IGFkZHJlc3Mgc3BhY2UuCiAgKi8KICNkZWZp bmUgUFJPVEVDVElWRV9SRUdJT05fU0laRSAoMTAgKiBXSU4zMl9TVEFDS19STElNSVQpCi12b2lk CSAgICpTaG1lbVByb3RlY3RpdmVSZWdpb24gPSBOVUxMOwotCi1IQU5ETEUJCVVzZWRTaG1lbVNl Z0lEID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci12b2lkCSAgICpVc2VkU2htZW1TZWdBZGRyID0g TlVMTDsKLXN0YXRpYyBTaXplIFVzZWRTaG1lbVNlZ1NpemUgPSAwOwogCiBzdGF0aWMgYm9vbCBF bmFibGVMb2NrUGFnZXNQcml2aWxlZ2UoaW50IGVsZXZlbCk7CiBzdGF0aWMgdm9pZCBwZ3dpbjMy X1NoYXJlZE1lbW9yeURlbGV0ZShpbnQgc3RhdHVzLCBEYXR1bSBzaG1JZCk7CiAKK1BHVXNlZFNo bWVtSW5mbyBVc2VkU2htZW1JbmZvW05VTV9NRU1PUllfTUFQUElOR1NdOworCitzdGF0aWMgU2l6 ZSBVc2VkU2htZW1TZWdTaXplc1tOVU1fTUVNT1JZX01BUFBJTkdTXSA9IHswfTsKKwogLyoKICAq IEdlbmVyYXRlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBuYW1lLiBFeHBhbmQgdGhlIGRhdGEgZGly ZWN0b3J5LCB0byBnZW5lcmF0ZQogICogYW4gaWRlbnRpZmllciB1bmlxdWUgZm9yIHRoaXMgZGF0 YSBkaXJlY3RvcnkuIFRoZW4gcmVwbGFjZSBhbGwgYmFja3NsYXNoZXMKQEAgLTIwMiw5ICsyMDEs MTEgQEAgRW5hYmxlTG9ja1BhZ2VzUHJpdmlsZWdlKGludCBlbGV2ZWwpCiAgKgogICogQ3JlYXRl IGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IG9mIHRoZSBnaXZlbiBzaXplIGFuZCBpbml0aWFsaXpl IGl0cwogICogc3RhbmRhcmQgaGVhZGVyLgorICoKKyAqIFRPRE86IENoZWNrIHRoYXQgdGhlIHNl Z21lbnRfaWQgaXMgYSB2YWxpZCBvbmUgYmVmb3JlIGluZGV4aW5nIGNvcnJlc3BvbmRpbmcgYXJy YXlzLgogICovCi1QR1NobWVtSGVhZGVyICoKLVBHU2hhcmVkTWVtb3J5Q3JlYXRlKFNpemUgc2l6 ZSwKK3ZvaWQKK1BHU2hhcmVkTWVtb3J5Q3JlYXRlKGludCBzZWdtZW50X2lkLCBjb25zdCBjaGFy ICpuYW1lLCBTaXplIGluaXRfc2l6ZSwgU2l6ZSBtYXhfc2l6ZSwKIAkJCQkJIFBHU2htZW1IZWFk ZXIgKipzaGltKQogewogCXZvaWQJICAgKm1lbUFkZHJlc3M7CkBAIC0yMTYsMTMgKzIxNywxNCBA QCBQR1NoYXJlZE1lbW9yeUNyZWF0ZShTaXplIHNpemUsCiAJRFdPUkQJCXNpemVfaGlnaDsKIAlE V09SRAkJc2l6ZV9sb3c7CiAJU0laRV9UCQlsYXJnZVBhZ2VTaXplID0gMDsKLQlTaXplCQlvcmln X3NpemUgPSBzaXplOworCVNpemUJCXNpemUgPSBtYXBwaW5nX3NpemVzLT5zaG1lbV9yZXFfc2l6 ZTsKIAlEV09SRAkJZmxQcm90ZWN0ID0gUEFHRV9SRUFEV1JJVEU7CiAJRFdPUkQJCWRlc2lyZWRB Y2Nlc3M7CisJUEdVc2VkU2htZW1JbmZvICp1c2VkU2htZW0gPSAmVXNlZFNobWVtSW5mb1tzZWdt ZW50X2lkXTsKIAotCVNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9IFZpcnR1YWxBbGxvYyhOVUxMLCBQ Uk9URUNUSVZFX1JFR0lPTl9TSVpFLAotCQkJCQkJCQkJCSBNRU1fUkVTRVJWRSwgUEFHRV9OT0FD Q0VTUyk7Ci0JaWYgKFNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9PSBOVUxMKQorCXVzZWRTaG1lbS0+ U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gVmlydHVhbEFsbG9jKE5VTEwsIFBST1RFQ1RJVkVfUkVH SU9OX1NJWkUsCisJCQkJCQkJCQkJCQkJTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1MpOworCWlm ICh1c2VkU2htZW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9PSBOVUxMKQogCQllbG9nKEZBVEFM LCAiY291bGQgbm90IHJlc2VydmUgbWVtb3J5IHJlZ2lvbjogZXJyb3IgY29kZSAlbHUiLAogCQkJ IEdldExhc3RFcnJvcigpKTsKIApAQCAtMjMxLDggKzIzMywxMiBAQCBQR1NoYXJlZE1lbW9yeUNy ZWF0ZShTaXplIHNpemUsCiAKIAlzelNoYXJlTWVtID0gR2V0U2hhcmVkTWVtTmFtZSgpOwogCi0J VXNlZFNobWVtU2VnQWRkciA9IE5VTEw7CisJdXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRyID0g TlVMTDsKIAorCS8qCisJICogVE9ETzogV2UgZG9uJ3QgbmVlZCB0byBwZXJmb3JtIHRoaXMgYXMg bWFueSB0aW1lcyBhcyB0aGUgbnVtYmVyIG9mCisJICogc2VnbWVudHMuIEluc3RlYWQgZG8gc29t ZXRoaW5nIHNpbWlsYXIgdG8gc3lzdl9zaG1lbS5jCisJICovCiAJaWYgKGh1Z2VfcGFnZXMgPT0g SFVHRV9QQUdFU19PTiB8fCBodWdlX3BhZ2VzID09IEhVR0VfUEFHRVNfVFJZKQogCXsKIAkJLyog RG9lcyB0aGUgcHJvY2Vzc29yIHN1cHBvcnQgbGFyZ2UgcGFnZXM/ICovCkBAIC0zMDQsNyArMzEw LDcgQEAgcmV0cnk6CiAJCQkJICogVXNlIHRoZSBvcmlnaW5hbCBzaXplLCBub3QgdGhlIHJvdW5k ZWQtdXAgdmFsdWUsIHdoZW4KIAkJCQkgKiBmYWxsaW5nIGJhY2sgdG8gbm9uLWh1Z2UgcGFnZXMu CiAJCQkJICovCi0JCQkJc2l6ZSA9IG9yaWdfc2l6ZTsKKwkJCQlzaXplID0gbWFwcGluZ19zaXpl cy0+c2htZW1fcmVxX3NpemU7CiAJCQkJZmxQcm90ZWN0ID0gUEFHRV9SRUFEV1JJVEU7CiAJCQkJ Z290byByZXRyeTsKIAkJCX0KQEAgLTMzNyw2ICszNDMsOCBAQCByZXRyeToKIAlpZiAoIWhtYXAp CiAJCWVyZXBvcnQoRkFUQUwsCiAJCQkJKGVycm1zZygicHJlLWV4aXN0aW5nIHNoYXJlZCBtZW1v cnkgYmxvY2sgaXMgc3RpbGwgaW4gdXNlIiksCisJCQkJIGVycmRldGFpbCgid2hlbiB0cnlpbmcg dG8gY3JlYXRlIHNoYXJlZCBtZW1vcnkgYmxvY2sgZm9yIHNlZ21lbnQgXCIlc1wiIiwKKwkJCQkJ CSAgIFBHU2htZW1TZWdtZW50TmFtZShzZWdtZW50KSksCiAJCQkJIGVycmhpbnQoIkNoZWNrIGlm IHRoZXJlIGFyZSBhbnkgb2xkIHNlcnZlciBwcm9jZXNzZXMgc3RpbGwgcnVubmluZywgYW5kIHRl cm1pbmF0ZSB0aGVtLiIpKSk7CiAKIAlmcmVlKHN6U2hhcmVNZW0pOwpAQCAtMzkzLDExICs0MDEs MTIgQEAgcmV0cnk6CiAJaGRyLT5kc21fY29udHJvbCA9IDA7CiAKIAkvKiBTYXZlIGluZm8gZm9y IHBvc3NpYmxlIGZ1dHVyZSB1c2UgKi8KLQlVc2VkU2htZW1TZWdBZGRyID0gbWVtQWRkcmVzczsK LQlVc2VkU2htZW1TZWdTaXplID0gc2l6ZTsKLQlVc2VkU2htZW1TZWdJRCA9IGhtYXAyOworCXVz ZWRTaG1lbS0+VXNlZFNobWVtU2VnQWRkciA9IG1lbUFkZHJlc3M7CisJVXNlZFNobWVtU2VnU2l6 ZXNbc2VnbWVudF9pZF0gPSBzaXplOworCXVzZWRTaG1lbS0+VXNlZFNobWVtU2VnSUQgPSAodW5z aWduZWQgbG9uZykgaG1hcDI7CiAKIAkvKiBSZWdpc3RlciBvbi1leGl0IHJvdXRpbmUgdG8gZGVs ZXRlIHRoZSBuZXcgc2VnbWVudCAqLworCS8qIFRPRE86IFRoaXMgbWF5IGhhcHBlbiBmb3IgZXZl cnkgc2hhcmVkIG1lbW9yeSB0aGF0IGdldHMgY3JlYXRlZC4gRG8gaXQgb25seSBvbmNlLiAqLwog CW9uX3NobWVtX2V4aXQocGd3aW4zMl9TaGFyZWRNZW1vcnlEZWxldGUsIFBvaW50ZXJHZXREYXR1 bShobWFwMikpOwogCiAJKnNoaW0gPSBoZHI7CkBAIC00MDUsOCArNDE0LDEyIEBAIHJldHJ5Ogog CS8qIFJlcG9ydCB3aGV0aGVyIGh1Z2UgcGFnZXMgYXJlIGluIHVzZSAqLwogCVNldENvbmZpZ09w dGlvbigiaHVnZV9wYWdlc19zdGF0dXMiLCAoZmxQcm90ZWN0ICYgU0VDX0xBUkdFX1BBR0VTKSA/ CiAJCQkJCSJvbiIgOiAib2ZmIiwgUEdDX0lOVEVSTkFMLCBQR0NfU19EWU5BTUlDX0RFRkFVTFQp OworfQogCi0JcmV0dXJuIGhkcjsKK2Jvb2wKK1BHU2hhcmVkTWVtb3J5UmVzaXplKGludCBzZWdt ZW50X2lkLCBjb25zdCBjaGFyICpuYW1lLCBTaXplIG5ld19zaXplKQoreworCWVsb2coRVJST1Is ICJyZXNpemluZyBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2lu ZG93cyIpOwogfQogCiAvKgpAQCAtNDE2LDQyICs0MjksNTIgQEAgcmV0cnk6CiAgKiBhbiBhbHJl YWR5IGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgc2VnbWVudCwgdXNpbmcgdGhlIGhhbmRsZSBpbmhl cml0ZWQgZnJvbQogICogdGhlIHBvc3RtYXN0ZXIuCiAgKgotICogU2htZW1Qcm90ZWN0aXZlUmVn aW9uLCBVc2VkU2htZW1TZWdJRCBhbmQgVXNlZFNobWVtU2VnQWRkciBhcmUgaW1wbGljaXQKLSAq IHBhcmFtZXRlcnMgdG8gdGhpcyByb3V0aW5lLiAgVGhlIGNhbGxlciBtdXN0IGhhdmUgYWxyZWFk eSByZXN0b3JlZCB0aGVtIHRvCi0gKiB0aGUgcG9zdG1hc3RlcidzIHZhbHVlcy4KKyAqIFNlZ21l bnRzIGlzIGFuIGltcGxpY2l0IHBhcmFtZXRlcnMgdG8gdGhpcyByb3V0aW5lLiAgVGhlIGNhbGxl ciBtdXN0IGhhdmUKKyAqIGFscmVhZHkgcmVzdG9yZWQgU2htZW1Qcm90ZWN0aXZlUmVnaW9uLCBV c2VkU2htZW1TZWdJRCBhbmQgVXNlZFNobWVtU2VnQWRkcgorICogaW4gZWFjaCBTZWdtZW50IHRv IHRoZSBwb3N0bWFzdGVyJ3MgdmFsdWVzLgogICovCiB2b2lkCiBQR1NoYXJlZE1lbW9yeVJlQXR0 YWNoKHZvaWQpCiB7CiAJUEdTaG1lbUhlYWRlciAqaGRyOwotCXZvaWQJICAgKm9yaWdVc2VkU2ht ZW1TZWdBZGRyID0gVXNlZFNobWVtU2VnQWRkcjsKKwl2b2lkCSAgICpvcmlnVXNlZFNobWVtU2Vn QWRkcjsKIAotCUFzc2VydChTaG1lbVByb3RlY3RpdmVSZWdpb24gIT0gTlVMTCk7Ci0JQXNzZXJ0 KFVzZWRTaG1lbVNlZ0FkZHIgIT0gTlVMTCk7CiAJQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsK IAotCS8qCi0JICogUmVsZWFzZSBtZW1vcnkgcmVnaW9uIHJlc2VydmF0aW9ucyBtYWRlIGJ5IHRo ZSBwb3N0bWFzdGVyCi0JICovCi0JaWYgKFZpcnR1YWxGcmVlKFNobWVtUHJvdGVjdGl2ZVJlZ2lv biwgMCwgTUVNX1JFTEVBU0UpID09IDApCi0JCWVsb2coRkFUQUwsICJmYWlsZWQgdG8gcmVsZWFz ZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uIChhZGRyPSVwKTogZXJyb3IgY29kZSAlbHUiLAotCQkJ IFNobWVtUHJvdGVjdGl2ZVJlZ2lvbiwgR2V0TGFzdEVycm9yKCkpOwotCWlmIChWaXJ0dWFsRnJl ZShVc2VkU2htZW1TZWdBZGRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKLQkJZWxvZyhGQVRBTCwg ImZhaWxlZCB0byByZWxlYXNlIHJlc2VydmVkIG1lbW9yeSByZWdpb24gKGFkZHI9JXApOiBlcnJv ciBjb2RlICVsdSIsCi0JCQkgVXNlZFNobWVtU2VnQWRkciwgR2V0TGFzdEVycm9yKCkpOwotCi0J aGRyID0gKFBHU2htZW1IZWFkZXIgKikgTWFwVmlld09mRmlsZUV4KFVzZWRTaG1lbVNlZ0lELCBG SUxFX01BUF9SRUFEIHwgRklMRV9NQVBfV1JJVEUsIDAsIDAsIDAsIFVzZWRTaG1lbVNlZ0FkZHIp OwotCWlmICghaGRyKQotCQllbG9nKEZBVEFMLCAiY291bGQgbm90IHJlYXR0YWNoIHRvIHNoYXJl ZCBtZW1vcnkgKGtleT0lcCwgYWRkcj0lcCk6IGVycm9yIGNvZGUgJWx1IiwKLQkJCSBVc2VkU2ht ZW1TZWdJRCwgVXNlZFNobWVtU2VnQWRkciwgR2V0TGFzdEVycm9yKCkpOwotCWlmIChoZHIgIT0g b3JpZ1VzZWRTaG1lbVNlZ0FkZHIpCi0JCWVsb2coRkFUQUwsICJyZWF0dGFjaGluZyB0byBzaGFy ZWQgbWVtb3J5IHJldHVybmVkIHVuZXhwZWN0ZWQgYWRkcmVzcyAoZ290ICVwLCBleHBlY3RlZCAl cCkiLAotCQkJIGhkciwgb3JpZ1VzZWRTaG1lbVNlZ0FkZHIpOwotCWlmIChoZHItPm1hZ2ljICE9 IFBHU2htZW1NYWdpYykKLQkJZWxvZyhGQVRBTCwgInJlYXR0YWNoaW5nIHRvIHNoYXJlZCBtZW1v cnkgcmV0dXJuZWQgbm9uLVBvc3RncmVTUUwgbWVtb3J5Iik7Ci0JZHNtX3NldF9jb250cm9sX2hh bmRsZShoZHItPmRzbV9jb250cm9sKTsKLQotCVVzZWRTaG1lbVNlZ0FkZHIgPSBoZHI7CQkvKiBw cm9iYWJseSByZWR1bmRhbnQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NRU1PUllfTUFQ UElOR1M7IGkrKykKKwl7CisJCVBHVXNlZFNobWVtSW5mbyAqdXNlZFNobWVtID0gJlVzZWRTaG1l bUluZm9baV07CisKKwkJQXNzZXJ0KHVzZWRTaG1lbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uICE9 IE5VTEwpOworCQlBc3NlcnQodXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpOwor CisJCW9yaWdVc2VkU2htZW1TZWdBZGRyID0gdXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRyOwor CisJCS8qCisJCSAqIFJlbGVhc2UgbWVtb3J5IHJlZ2lvbiByZXNlcnZhdGlvbnMgbWFkZSBieSB0 aGUgcG9zdG1hc3RlcgorCQkgKi8KKwkJaWYgKFZpcnR1YWxGcmVlKHVzZWRTaG1lbS0+U2htZW1Q cm90ZWN0aXZlUmVnaW9uLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKwkJCWVsb2coRkFUQUwsICJm YWlsZWQgdG8gcmVsZWFzZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uIChhZGRyPSVwKTogZXJyb3Ig Y29kZSAlbHUiLAorCQkJCSB1c2VkU2htZW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbiwgR2V0TGFz dEVycm9yKCkpOworCQlpZiAoVmlydHVhbEZyZWUodXNlZFNobWVtLT5Vc2VkU2htZW1TZWdBZGRy LCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKwkJCWVsb2coRkFUQUwsICJmYWlsZWQgdG8gcmVsZWFz ZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uIChhZGRyPSVwKTogZXJyb3IgY29kZSAlbHUiLAorCQkJ CSB1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIsIEdldExhc3RFcnJvcigpKTsKKworCQloZHIg PSAoUEdTaG1lbUhlYWRlciAqKSBNYXBWaWV3T2ZGaWxlRXgodXNlZFNobWVtLT5Vc2VkU2htZW1T ZWdJRCwgRklMRV9NQVBfUkVBRCB8IEZJTEVfTUFQX1dSSVRFLCAwLCAwLCAwLCB1c2VkU2htZW0t PlVzZWRTaG1lbVNlZ0FkZHIpOworCQlpZiAoIWhkcikKKwkJCWVsb2coRkFUQUwsICJjb3VsZCBu b3QgcmVhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSAoa2V5PSVwLCBhZGRyPSVwKTogZXJyb3IgY29k ZSAlbHUiLAorCQkJCSB1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0lELCB1c2VkU2htZW0tPlVzZWRT aG1lbVNlZ0FkZHIsIEdldExhc3RFcnJvcigpKTsKKwkJaWYgKGhkciAhPSBvcmlnVXNlZFNobWVt U2VnQWRkcikKKwkJCWVsb2coRkFUQUwsICJyZWF0dGFjaGluZyB0byBzaGFyZWQgbWVtb3J5IHJl dHVybmVkIHVuZXhwZWN0ZWQgYWRkcmVzcyAoZ290ICVwLCBleHBlY3RlZCAlcCkiLAorCQkJCSBo ZHIsIG9yaWdVc2VkU2htZW1TZWdBZGRyKTsKKwkJaWYgKGhkci0+bWFnaWMgIT0gUEdTaG1lbU1h Z2ljKQorCQkJZWxvZyhGQVRBTCwgInJlYXR0YWNoaW5nIHRvIHNoYXJlZCBtZW1vcnkgcmV0dXJu ZWQgbm9uLVBvc3RncmVTUUwgbWVtb3J5Iik7CisJCS8qIFJlLWVzdGFibGlzaCBkc21fY29udHJv bCBtYXBwaW5nLCBpZiBhbnkgKi8KKwkJaWYgKGhkci0+ZHNtX2NvbnRyb2wgIT0gMCkKKwkJCWRz bV9zZXRfY29udHJvbF9oYW5kbGUoaGRyLT5kc21fY29udHJvbCk7CisKKwkJdXNlZFNobWVtLT5V c2VkU2htZW1TZWdBZGRyID0gaGRyOwkvKiBwcm9iYWJseSByZWR1bmRhbnQgKi8KKwl9CiB9CiAK IC8qCkBAIC00NjQsMjIgKzQ4NywyOCBAQCBQR1NoYXJlZE1lbW9yeVJlQXR0YWNoKHZvaWQpCiAg KiBUaGUgY2hpbGQgcHJvY2VzcyBzdGFydHVwIGxvZ2ljIG1pZ2h0IG9yIG1pZ2h0IG5vdCBjYWxs IFBHU2hhcmVkTWVtb3J5RGV0YWNoCiAgKiBhZnRlciB0aGlzOyBtYWtlIHN1cmUgdGhhdCBpdCB3 aWxsIGJlIGEgbm8tb3AgaWYgY2FsbGVkLgogICoKLSAqIFNobWVtUHJvdGVjdGl2ZVJlZ2lvbiwg VXNlZFNobWVtU2VnSUQgYW5kIFVzZWRTaG1lbVNlZ0FkZHIgYXJlIGltcGxpY2l0Ci0gKiBwYXJh bWV0ZXJzIHRvIHRoaXMgcm91dGluZS4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGFscmVhZHkgcmVz dG9yZWQgdGhlbSB0bwotICogdGhlIHBvc3RtYXN0ZXIncyB2YWx1ZXMuCisgKiBTZWdtZW50cyBp cyBhbiBpbXBsaWNpdCBwYXJhbWV0ZXJzIHRvIHRoaXMgcm91dGluZS4gIFRoZSBjYWxsZXIgbXVz dCBoYXZlCisgKiBhbHJlYWR5IHJlc3RvcmVkIFNobWVtUHJvdGVjdGl2ZVJlZ2lvbiBhbmQgVXNl ZFNobWVtU2VnQWRkcgorICogaW4gZWFjaCBTZWdtZW50IHRvIHRoZSBwb3N0bWFzdGVyJ3MgdmFs dWVzLgogICovCiB2b2lkCiBQR1NoYXJlZE1lbW9yeU5vUmVBdHRhY2godm9pZCkKIHsKLQlBc3Nl cnQoU2htZW1Qcm90ZWN0aXZlUmVnaW9uICE9IE5VTEwpOwotCUFzc2VydChVc2VkU2htZW1TZWdB ZGRyICE9IE5VTEwpOwogCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rlcik7CisJZm9yIChpbnQgaSA9 IDA7IGkgPCBOVU1fTUVNT1JZX01BUFBJTkdTOyBpKyspCisJeworCQlQR1VzZWRTaG1lbUluZm8g KnVzZWRTaG1lbSA9ICZVc2VkU2htZW1JbmZvW2ldOwogCi0JLyoKLQkgKiBVbmRlciBXaW5kb3dz IHdlIHdpbGwgbm90IGhhdmUgbWFwcGVkIHRoZSBzZWdtZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRv Ci0JICogdW4tbWFwIGl0LiAgSnVzdCByZXNldCBVc2VkU2htZW1TZWdBZGRyIHRvIHNob3cgd2Un cmUgbm90IGF0dGFjaGVkLgotCSAqLwotCVVzZWRTaG1lbVNlZ0FkZHIgPSBOVUxMOworCQlBc3Nl cnQodXNlZFNobWVtLT5TaG1lbVByb3RlY3RpdmVSZWdpb24gIT0gTlVMTCk7CisJCUFzc2VydCh1 c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIgIT0gTlVMTCk7CisKKwkJLyoKKwkJICogVW5kZXIg V2luZG93cyB3ZSB3aWxsIG5vdCBoYXZlIG1hcHBlZCB0aGUgc2VnbWVudCwgc28gd2UgZG9uJ3Qg bmVlZAorCQkgKiB0byB1bi1tYXAgaXQuICBKdXN0IHJlc2V0IFVzZWRTaG1lbVNlZ0FkZHIgdG8g c2hvdyB3ZSdyZSBub3QKKwkJICogYXR0YWNoZWQuCisJCSAqLworCQl1c2VkU2htZW0tPlVzZWRT aG1lbVNlZ0FkZHIgPSBOVUxMOworCX0KIAogCS8qCiAJICogV2UgKm11c3QqIGNsb3NlIHRoZSBp bmhlcml0ZWQgc2htZW0gc2VnbWVudCBoYW5kbGUsIGVsc2UgV2luZG93cyB3aWxsCkBAIC00OTIs NDkgKzUyMSw1NSBAQCBQR1NoYXJlZE1lbW9yeU5vUmVBdHRhY2godm9pZCkKIC8qCiAgKiBQR1No YXJlZE1lbW9yeURldGFjaAogICoKLSAqIERldGFjaCBmcm9tIHRoZSBzaGFyZWQgbWVtb3J5IHNl Z21lbnQsIGlmIHN0aWxsIGF0dGFjaGVkLiAgVGhpcyBpcyBub3QKKyAqIERldGFjaCBmcm9tIHRo ZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLCBpZiBzdGlsbCBhdHRhY2hlZC4gIFRoaXMgaXMgbm90 CiAgKiBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZXhwbGljaXRseSBieSB0aGUgcHJvY2VzcyB0aGF0 IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGUKLSAqIHNlZ21lbnQgKGl0IHdpbGwgaGF2ZSBhbiBvbl9z aG1lbV9leGl0IGNhbGxiYWNrIHJlZ2lzdGVyZWQgdG8gZG8gdGhhdCkuCi0gKiBSYXRoZXIsIHRo aXMgaXMgZm9yIHN1YnByb2Nlc3NlcyB0aGF0IGhhdmUgaW5oZXJpdGVkIGFuIGF0dGFjaG1lbnQg YW5kIHdhbnQKLSAqIHRvIGdldCByaWQgb2YgaXQuCisgKiBzZWdtZW50cyAoaXQgd2lsbCBoYXZl IGFuIG9uX3NobWVtX2V4aXQgY2FsbGJhY2sgcmVnaXN0ZXJlZCB0byBkbyB0aGF0KS4KKyAqIFJh dGhlciwgdGhpcyBpcyBmb3Igc3VicHJvY2Vzc2VzIHRoYXQgaGF2ZSBpbmhlcml0ZWQgYW4gYXR0 YWNobWVudCBhbmQgd2FudCB0bworICogZ2V0IHJpZCBvZiBpdC4KICAqCi0gKiBTaG1lbVByb3Rl Y3RpdmVSZWdpb24sIFVzZWRTaG1lbVNlZ0lEIGFuZCBVc2VkU2htZW1TZWdBZGRyIGFyZSBpbXBs aWNpdAotICogcGFyYW1ldGVycyB0byB0aGlzIHJvdXRpbmUuCisgKiBVc2VkU2htZW1JbmZvIGlz IGFuIGltcGxpY2l0IHBhcmFtZXRlcnMgdG8gdGhpcyByb3V0aW5lLiAgVGhlIGNhbGxlciBtdXN0 IGhhdmUKKyAqIGFscmVhZHkgcmVzdG9yZWQgU2htZW1Qcm90ZWN0aXZlUmVnaW9uLCBVc2VkU2ht ZW1TZWdJRCBhbmQgVXNlZFNobWVtU2VnQWRkciBpbgorICogZWFjaCBTZWdtZW50IHRvIHRoZSBw b3N0bWFzdGVyJ3MgdmFsdWVzLgogICovCiB2b2lkCiBQR1NoYXJlZE1lbW9yeURldGFjaCh2b2lk KQogewotCS8qCi0JICogUmVsZWFzaW5nIHRoZSBwcm90ZWN0aXZlIHJlZ2lvbiBsaWJlcmF0ZXMg YW4gdW5pbXBvcnRhbnQgcXVhbnRpdHkgb2YKLQkgKiBhZGRyZXNzIHNwYWNlLCBidXQgYmUgdGlk eS4KLQkgKi8KLQlpZiAoU2htZW1Qcm90ZWN0aXZlUmVnaW9uICE9IE5VTEwpCisJZm9yIChpbnQg aSA9IDA7IGkgPCBOVU1fTUVNT1JZX01BUFBJTkdTOyBpKyspCiAJewotCQlpZiAoVmlydHVhbEZy ZWUoU2htZW1Qcm90ZWN0aXZlUmVnaW9uLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKLQkJCWVsb2co TE9HLCAiZmFpbGVkIHRvIHJlbGVhc2UgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiAoYWRkcj0lcCk6 IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkgU2htZW1Qcm90ZWN0aXZlUmVnaW9uLCBHZXRMYXN0RXJy b3IoKSk7CisJCVBHVXNlZFNobWVtSW5mbyAqc2VnbWVudCA9ICZVc2VkU2htZW1JbmZvW2ldOwog Ci0JCVNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9IE5VTEw7Ci0JfQorCQkvKgorCQkgKiBSZWxlYXNp bmcgdGhlIHByb3RlY3RpdmUgcmVnaW9uIGxpYmVyYXRlcyBhbiB1bmltcG9ydGFudCBxdWFudGl0 eQorCQkgKiBvZiBhZGRyZXNzIHNwYWNlLCBidXQgYmUgdGlkeS4KKwkJICovCisJCWlmIChzZWdt ZW50LT5TaG1lbVByb3RlY3RpdmVSZWdpb24gIT0gTlVMTCkKKwkJeworCQkJaWYgKFZpcnR1YWxG cmVlKHNlZ21lbnQtPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbiwgMCwgTUVNX1JFTEVBU0UpID09IDAp CisJCQkJZWxvZyhMT0csICJmYWlsZWQgdG8gcmVsZWFzZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9u IChhZGRyPSVwKTogZXJyb3IgY29kZSAlbHUiLAorCQkJCQkgc2VnbWVudC0+U2htZW1Qcm90ZWN0 aXZlUmVnaW9uLCBHZXRMYXN0RXJyb3IoKSk7CiAKLQkvKiBVbm1hcCB0aGUgdmlldywgaWYgaXQn cyBtYXBwZWQgKi8KLQlpZiAoVXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQotCXsKLQkJaWYgKCFV bm1hcFZpZXdPZkZpbGUoVXNlZFNobWVtU2VnQWRkcikpCi0JCQllbG9nKExPRywgImNvdWxkIG5v dCB1bm1hcCB2aWV3IG9mIHNoYXJlZCBtZW1vcnk6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkgR2V0 TGFzdEVycm9yKCkpOworCQkJc2VnbWVudC0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gTlVMTDsK KwkJfQogCi0JCVVzZWRTaG1lbVNlZ0FkZHIgPSBOVUxMOwotCX0KKwkJLyogVW5tYXAgdGhlIHZp ZXcsIGlmIGl0J3MgbWFwcGVkICovCisJCWlmIChzZWdtZW50LT5Vc2VkU2htZW1TZWdBZGRyICE9 IE5VTEwpCisJCXsKKwkJCWlmICghVW5tYXBWaWV3T2ZGaWxlKHNlZ21lbnQtPlVzZWRTaG1lbVNl Z0FkZHIpKQorCQkJCWVsb2coTE9HLCAiY291bGQgbm90IHVubWFwIHZpZXcgb2Ygc2hhcmVkIG1l bW9yeTogZXJyb3IgY29kZSAlbHUiLAorCQkJCQkgR2V0TGFzdEVycm9yKCkpOwogCi0JLyogQW5k IGNsb3NlIHRoZSBzaG1lbSBoYW5kbGUsIGlmIHdlIGhhdmUgb25lICovCi0JaWYgKFVzZWRTaG1l bVNlZ0lEICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQotCXsKLQkJaWYgKCFDbG9zZUhhbmRsZShV c2VkU2htZW1TZWdJRCkpCi0JCQllbG9nKExPRywgImNvdWxkIG5vdCBjbG9zZSBoYW5kbGUgdG8g c2hhcmVkIG1lbW9yeTogZXJyb3IgY29kZSAlbHUiLAotCQkJCSBHZXRMYXN0RXJyb3IoKSk7CisJ CQlzZWdtZW50LT5Vc2VkU2htZW1TZWdBZGRyID0gTlVMTDsKKwkJfQogCi0JCVVzZWRTaG1lbVNl Z0lEID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisJCS8qIEFuZCBjbG9zZSB0aGUgc2htZW0gaGFu ZGxlLCBpZiB3ZSBoYXZlIG9uZSAqLworCQlpZiAoc2VnbWVudC0+VXNlZFNobWVtU2VnSUQgIT0g SU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXsKKwkJCWlmICghQ2xvc2VIYW5kbGUoc2VnbWVudC0+ VXNlZFNobWVtU2VnSUQpKQorCQkJCWVsb2coTE9HLCAiY291bGQgbm90IGNsb3NlIGhhbmRsZSB0 byBzaGFyZWQgbWVtb3J5OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCSBHZXRMYXN0RXJyb3IoKSk7 CisKKwkJCXNlZ21lbnQtPlVzZWRTaG1lbVNlZ0lEID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisJ CX0KIAl9CiB9CiAKQEAgLTU3NCw1MCArNjA5LDU1IEBAIHBnd2luMzJfUmVzZXJ2ZVNoYXJlZE1l bW9yeVJlZ2lvbihIQU5ETEUgaENoaWxkKQogewogCXZvaWQJICAgKmFkZHJlc3M7CiAKLQlBc3Nl cnQoU2htZW1Qcm90ZWN0aXZlUmVnaW9uICE9IE5VTEwpOwotCUFzc2VydChVc2VkU2htZW1TZWdB ZGRyICE9IE5VTEwpOwotCUFzc2VydChVc2VkU2htZW1TZWdTaXplICE9IDApOwotCi0JLyogU2ht ZW1Qcm90ZWN0aXZlUmVnaW9uICovCi0JYWRkcmVzcyA9IFZpcnR1YWxBbGxvY0V4KGhDaGlsZCwg U2htZW1Qcm90ZWN0aXZlUmVnaW9uLAotCQkJCQkJCSBQUk9URUNUSVZFX1JFR0lPTl9TSVpFLAot CQkJCQkJCSBNRU1fUkVTRVJWRSwgUEFHRV9OT0FDQ0VTUyk7Ci0JaWYgKGFkZHJlc3MgPT0gTlVM TCkKKwlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NRU1PUllfTUFQUElOR1M7IGkrKykKIAl7Ci0J CS8qIERvbid0IHVzZSBGQVRBTCBzaW5jZSB3ZSdyZSBydW5uaW5nIGluIHRoZSBwb3N0bWFzdGVy ICovCi0JCWVsb2coTE9HLCAiY291bGQgbm90IHJlc2VydmUgc2hhcmVkIG1lbW9yeSByZWdpb24g KGFkZHI9JXApIGZvciBjaGlsZCAlcDogZXJyb3IgY29kZSAlbHUiLAotCQkJIFNobWVtUHJvdGVj dGl2ZVJlZ2lvbiwgaENoaWxkLCBHZXRMYXN0RXJyb3IoKSk7Ci0JCXJldHVybiBmYWxzZTsKLQl9 Ci0JaWYgKGFkZHJlc3MgIT0gU2htZW1Qcm90ZWN0aXZlUmVnaW9uKQotCXsKLQkJLyoKLQkJICog U2hvdWxkIG5ldmVyIGhhcHBlbiAtIGluIHRoZW9yeSBpZiBhbGxvY2F0aW9uIGdyYW51bGFyaXR5 IGNhdXNlcwotCQkgKiBzdHJhbmdlIGVmZmVjdHMgaXQgY291bGQsIHNvIGNoZWNrIGp1c3QgaW4g Y2FzZS4KLQkJICoKLQkJICogRG9uJ3QgdXNlIEZBVEFMIHNpbmNlIHdlJ3JlIHJ1bm5pbmcgaW4g dGhlIHBvc3RtYXN0ZXIuCi0JCSAqLwotCQllbG9nKExPRywgInJlc2VydmVkIHNoYXJlZCBtZW1v cnkgcmVnaW9uIGdvdCBpbmNvcnJlY3QgYWRkcmVzcyAlcCwgZXhwZWN0ZWQgJXAiLAotCQkJIGFk ZHJlc3MsIFNobWVtUHJvdGVjdGl2ZVJlZ2lvbik7Ci0JCXJldHVybiBmYWxzZTsKLQl9CisJCVBH VXNlZFNobWVtSW5mbyAqc2VnbWVudCA9ICZVc2VkU2htZW1JbmZvW2ldOwogCi0JLyogVXNlZFNo bWVtU2VnQWRkciAqLwotCWFkZHJlc3MgPSBWaXJ0dWFsQWxsb2NFeChoQ2hpbGQsIFVzZWRTaG1l bVNlZ0FkZHIsIFVzZWRTaG1lbVNlZ1NpemUsCi0JCQkJCQkJIE1FTV9SRVNFUlZFLCBQQUdFX1JF QURXUklURSk7Ci0JaWYgKGFkZHJlc3MgPT0gTlVMTCkKLQl7Ci0JCWVsb2coTE9HLCAiY291bGQg bm90IHJlc2VydmUgc2hhcmVkIG1lbW9yeSByZWdpb24gKGFkZHI9JXApIGZvciBjaGlsZCAlcDog ZXJyb3IgY29kZSAlbHUiLAotCQkJIFVzZWRTaG1lbVNlZ0FkZHIsIGhDaGlsZCwgR2V0TGFzdEVy cm9yKCkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChhZGRyZXNzICE9IFVzZWRTaG1lbVNl Z0FkZHIpCi0JewotCQllbG9nKExPRywgInJlc2VydmVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGdv dCBpbmNvcnJlY3QgYWRkcmVzcyAlcCwgZXhwZWN0ZWQgJXAiLAotCQkJIGFkZHJlc3MsIFVzZWRT aG1lbVNlZ0FkZHIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQorCQlBc3NlcnQoc2VnbWVudC0+U2ht ZW1Qcm90ZWN0aXZlUmVnaW9uICE9IE5VTEwpOworCQlBc3NlcnQoc2VnbWVudC0+VXNlZFNobWVt U2VnQWRkciAhPSBOVUxMKTsKKwkJQXNzZXJ0KFVzZWRTaG1lbVNlZ1NpemVzW2ldICE9IDApOwor CisJCS8qIFNobWVtUHJvdGVjdGl2ZVJlZ2lvbiAqLworCQlhZGRyZXNzID0gVmlydHVhbEFsbG9j RXgoaENoaWxkLCBzZWdtZW50LT5TaG1lbVByb3RlY3RpdmVSZWdpb24sCisJCQkJCQkJCSBQUk9U RUNUSVZFX1JFR0lPTl9TSVpFLAorCQkJCQkJCQkgTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1Mp OworCQlpZiAoYWRkcmVzcyA9PSBOVUxMKQorCQl7CisJCQkvKiBEb24ndCB1c2UgRkFUQUwgc2lu Y2Ugd2UncmUgcnVubmluZyBpbiB0aGUgcG9zdG1hc3RlciAqLworCQkJZWxvZyhMT0csICJjb3Vs ZCBub3QgcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiAoYWRkcj0lcCkgZm9yIGNoaWxkICVw OiBlcnJvciBjb2RlICVsdSIsCisJCQkJIHNlZ21lbnQtPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbiwg aENoaWxkLCBHZXRMYXN0RXJyb3IoKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKGFk ZHJlc3MgIT0gc2VnbWVudC0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uKQorCQl7CisJCQkvKgorCQkJ ICogU2hvdWxkIG5ldmVyIGhhcHBlbiAtIGluIHRoZW9yeSBpZiBhbGxvY2F0aW9uIGdyYW51bGFy aXR5CisJCQkgKiBjYXVzZXMgc3RyYW5nZSBlZmZlY3RzIGl0IGNvdWxkLCBzbyBjaGVjayBqdXN0 IGluIGNhc2UuCisJCQkgKgorCQkJICogRG9uJ3QgdXNlIEZBVEFMIHNpbmNlIHdlJ3JlIHJ1bm5p bmcgaW4gdGhlIHBvc3RtYXN0ZXIuCisJCQkgKi8KKwkJCWVsb2coTE9HLCAicmVzZXJ2ZWQgc2hh cmVkIG1lbW9yeSByZWdpb24gZ290IGluY29ycmVjdCBhZGRyZXNzICVwLCBleHBlY3RlZCAlcCIs CisJCQkJIGFkZHJlc3MsIHNlZ21lbnQtPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbik7CisJCQlyZXR1 cm4gZmFsc2U7CisJCX0KKworCQkvKiBVc2VkU2htZW1TZWdBZGRyICovCisJCWFkZHJlc3MgPSBW aXJ0dWFsQWxsb2NFeChoQ2hpbGQsIHNlZ21lbnQtPlVzZWRTaG1lbVNlZ0FkZHIsIFVzZWRTaG1l bVNlZ1NpemVzW2ldLAorCQkJCQkJCQkgTUVNX1JFU0VSVkUsIFBBR0VfUkVBRFdSSVRFKTsKKwkJ aWYgKGFkZHJlc3MgPT0gTlVMTCkKKwkJeworCQkJZWxvZyhMT0csICJjb3VsZCBub3QgcmVzZXJ2 ZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiAoYWRkcj0lcCkgZm9yIGNoaWxkICVwOiBlcnJvciBjb2Rl ICVsdSIsCisJCQkJIHNlZ21lbnQtPlVzZWRTaG1lbVNlZ0FkZHIsIGhDaGlsZCwgR2V0TGFzdEVy cm9yKCkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWlmIChhZGRyZXNzICE9IHNlZ21lbnQt PlVzZWRTaG1lbVNlZ0FkZHIpCisJCXsKKwkJCWVsb2coTE9HLCAicmVzZXJ2ZWQgc2hhcmVkIG1l bW9yeSByZWdpb24gZ290IGluY29ycmVjdCBhZGRyZXNzICVwLCBleHBlY3RlZCAlcCIsCisJCQkJ IGFkZHJlc3MsIHNlZ21lbnQtPlVzZWRTaG1lbVNlZ0FkZHIpOworCQkJcmV0dXJuIGZhbHNlOwor CQl9CiAKKwl9CiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTYyNyw3ICs2NjcsNyBAQCBwZ3dpbjMy X1Jlc2VydmVTaGFyZWRNZW1vcnlSZWdpb24oSEFORExFIGhDaGlsZCkKICAqIHVzZSBHZXRMYXJn ZVBhZ2VNaW5pbXVtKCkgaW5zdGVhZC4KICAqLwogdm9pZAotR2V0SHVnZVBhZ2VTaXplKFNpemUg Kmh1Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzKQorR2V0SHVnZVBhZ2VTaXplKFNpemUgKmh1 Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzLCBpbnQgKm1lbWZkX2ZsYWdzKQogewogCWlmICho dWdlcGFnZXNpemUpCiAJCSpodWdlcGFnZXNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9s YXVuY2hfYmFja2VuZC5jCmluZGV4IDhmNjM4MTE4Y2RmLi43YzU1ODUzOThhZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwpAQCAtOTAsMTMgKzkwLDcgQEAgdHlwZWRl ZiBpbnQgSW5oZXJpdGFibGVTb2NrZXQ7CiB0eXBlZGVmIHN0cnVjdAogewogCWNoYXIJCURhdGFE aXJbTUFYUEdQQVRIXTsKLSNpZm5kZWYgV0lOMzIKLQl1bnNpZ25lZCBsb25nIFVzZWRTaG1lbVNl Z0lEOwotI2Vsc2UKLQl2b2lkCSAgICpTaG1lbVByb3RlY3RpdmVSZWdpb247Ci0JSEFORExFCQlV c2VkU2htZW1TZWdJRDsKLSNlbmRpZgotCXZvaWQJICAgKlVzZWRTaG1lbVNlZ0FkZHI7CisJUEdV c2VkU2htZW1JbmZvIFVzZWRTaG1lbUluZm9bTlVNX01FTU9SWV9NQVBQSU5HU107CiAjaWZkZWYg VVNFX0lOSkVDVElPTl9QT0lOVFMKIAlzdHJ1Y3QgSW5qZWN0aW9uUG9pbnRzQ3RsICpBY3RpdmVJ bmplY3Rpb25Qb2ludHM7CiAjZW5kaWYKQEAgLTU4MCw2ICs1NzQsNyBAQCBTdWJQb3N0bWFzdGVy TWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKmNoaWxkX2tpbmQ7CiAJQmFj a2VuZFR5cGUgY2hpbGRfdHlwZTsKIAlUaW1lc3RhbXBUeiBmb3JrX2VuZDsKKwlib29sCQlyZWdp c3Rlcl9zaG1lbV9zdHJ1Y3RzID0gZmFsc2U7CiAKIAkvKiBJbiBFWEVDX0JBQ0tFTkQgY2FzZSB3 ZSB3aWxsIG5vdCBoYXZlIGluaGVyaXRlZCB0aGVzZSBzZXR0aW5ncyAqLwogCUlzUG9zdG1hc3Rl ckVudmlyb25tZW50ID0gdHJ1ZTsKQEAgLTY3NiwxMiArNjcxLDIyIEBAIFN1YlBvc3RtYXN0ZXJN YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJy YXJpZXMoKTsKIAogCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwot CWlmIChVc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpCisJLyoKKwkgKiBUT0RPOiBOZWVkIHRvIGZp bmQgYSB3YXkgdG8gcGFzcyBudW1fc2VnX3JlZ2lzdHJhdGlvbnMgaGVyZSBhbmQgYWxzbyB0aGUK KwkgKiBwcm9wZXJ0aWVzIG9mIHRoZSBzZWdtZW50cyBsaWtlIG5hbWUuCisJICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBOVU1fTUVNT1JZX01BUFBJTkdTOyBpKyspCiAJewotCQlJbml0U2htZW1B bGxvY2F0b3IoVXNlZFNobWVtU2VnQWRkcik7CisJCVBHVXNlZFNobWVtSW5mbyAqdXNlZFNobWVt ID0gJlVzZWRTaG1lbUluZm9baV07CiAKLQkJUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKTsKKwkJaWYg KHVzZWRTaG1lbS0+VXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQorCQl7CisJCQlJbml0U2htZW1B bGxvY2F0b3IoaSwgIm1haW4iLCB1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0FkZHIpOworCQkJcmVn aXN0ZXJfc2htZW1fc3RydWN0cyA9IHRydWU7CisJCX0KIAl9CisJaWYgKHJlZ2lzdGVyX3NobWVt X3N0cnVjdHMpCisJCVJlZ2lzdGVyU2htZW1TdHJ1Y3RzKCk7CiAKIAkvKgogCSAqIFJ1biB0aGUg YXBwcm9wcmlhdGUgTWFpbiBmdW5jdGlvbgpAQCAtNzIyLDEyICs3MjcsNyBAQCBzYXZlX2JhY2tl bmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwKIAlzdHJsY3B5KHBhcmFtLT5E YXRhRGlyLCBEYXRhRGlyLCBNQVhQR1BBVEgpOwogCiAJcGFyYW0tPk15UE1DaGlsZFNsb3QgPSBj aGlsZF9zbG90OwotCi0jaWZkZWYgV0lOMzIKLQlwYXJhbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9u ID0gU2htZW1Qcm90ZWN0aXZlUmVnaW9uOwotI2VuZGlmCi0JcGFyYW0tPlVzZWRTaG1lbVNlZ0lE ID0gVXNlZFNobWVtU2VnSUQ7Ci0JcGFyYW0tPlVzZWRTaG1lbVNlZ0FkZHIgPSBVc2VkU2htZW1T ZWdBZGRyOworCW1lbWNweShwYXJhbS0+VXNlZFNobWVtSW5mbywgVXNlZFNobWVtSW5mbywgc2l6 ZW9mKFVzZWRTaG1lbUluZm8pKTsKIAogI2lmZGVmIFVTRV9JTkpFQ1RJT05fUE9JTlRTCiAJcGFy YW0tPkFjdGl2ZUluamVjdGlvblBvaW50cyA9IEFjdGl2ZUluamVjdGlvblBvaW50czsKQEAgLTk4 MCwxMiArOTgwLDcgQEAgcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVy cyAqcGFyYW0pCiAJU2V0RGF0YURpcihwYXJhbS0+RGF0YURpcik7CiAKIAlNeVBNQ2hpbGRTbG90 ID0gcGFyYW0tPk15UE1DaGlsZFNsb3Q7Ci0KLSNpZmRlZiBXSU4zMgotCVNobWVtUHJvdGVjdGl2 ZVJlZ2lvbiA9IHBhcmFtLT5TaG1lbVByb3RlY3RpdmVSZWdpb247Ci0jZW5kaWYKLQlVc2VkU2ht ZW1TZWdJRCA9IHBhcmFtLT5Vc2VkU2htZW1TZWdJRDsKLQlVc2VkU2htZW1TZWdBZGRyID0gcGFy YW0tPlVzZWRTaG1lbVNlZ0FkZHI7CisJbWVtY3B5KFVzZWRTaG1lbUluZm8sIHBhcmFtLT5Vc2Vk U2htZW1JbmZvLCBzaXplb2YoVXNlZFNobWVtSW5mbykpOwogCiAjaWZkZWYgVVNFX0lOSkVDVElP Tl9QT0lOVFMKIAlBY3RpdmVJbmplY3Rpb25Qb2ludHMgPSBwYXJhbS0+QWN0aXZlSW5qZWN0aW9u UG9pbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4IDk1Mjk4ODY0NWQwLi4zYzI5NDcyMTc4 NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTQyLDggKzE0Miw3IEBAIENhbGN1bGF0ZVNo bWVtU2l6ZSh2b2lkKQogCS8qIGluY2x1ZGUgYWRkaXRpb25hbCByZXF1ZXN0ZWQgc2htZW0gZnJv bSBwcmVsb2FkIGxpYnJhcmllcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCB0b3RhbF9hZGRp bl9yZXF1ZXN0KTsKIAotCS8qIG1pZ2h0IGFzIHdlbGwgcm91bmQgaXQgb2ZmIHRvIGEgbXVsdGlw bGUgb2YgYSB0eXBpY2FsIHBhZ2Ugc2l6ZSAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCA4MTky IC0gKHNpemUgJSA4MTkyKSk7CisJU2htZW1SZWdpc3RlclNlZ21lbnQoIm1haW4iLCBzaXplLCBz aXplKTsKIAogCXJldHVybiBzaXplOwogfQpAQCAtMTgyLDI1ICsxODEsMjAgQEAgQXR0YWNoU2hh cmVkTWVtb3J5U3RydWN0cyh2b2lkKQogCiAvKgogICogQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3JlcwotICoJCUNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIHNoYXJlZCBtZW1vcnkgYW5kIHNl bWFwaG9yZXMuCisgKiAgCUNyZWF0ZXMgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhbmQgaW5pdGlh bGl6ZXMgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmVzCisgKiAgCWFuZCBzZW1hcGhvcmVzLgogICov CiB2b2lkCiBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiB7Ci0JUEdTaG1l bUhlYWRlciAqc2hpbTsKLQlQR1NobWVtSGVhZGVyICpzZWdoZHI7Ci0JU2l6ZQkJc2l6ZTsKKwlQ R1NobWVtSGVhZGVyICptYWluX3NlZ19zaGltID0gTlVMTDsKIAogCUFzc2VydCghSXNVbmRlclBv c3RtYXN0ZXIpOwogCi0JLyogQ29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgc2hhcmVkLW1lbW9yeSBi bG9jayAqLwotCXNpemUgPSBDYWxjdWxhdGVTaG1lbVNpemUoKTsKLQllbG9nKERFQlVHMywgImlu dm9raW5nIElwY01lbW9yeUNyZWF0ZShzaXplPSV6dSkiLCBzaXplKTsKKwlDYWxjdWxhdGVTaG1l bVNpemUoKTsKIAotCS8qCi0JICogQ3JlYXRlIHRoZSBzaG1lbSBzZWdtZW50Ci0JICovCi0Jc2Vn aGRyID0gUEdTaGFyZWRNZW1vcnlDcmVhdGUoc2l6ZSwgJnNoaW0pOworCS8qIERlY2lkZSBpZiB3 ZSB1c2UgaHVnZSBwYWdlcyBvciByZWd1bGFyIHNpemUgcGFnZXMgKi8KKwlQcmVwYXJlSHVnZVBh Z2VzKCk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IGh1Z2UgcGFnZXMgYXJlIG5ldmVyIHJl cG9ydGVkIGFzICJ1bmtub3duIiB3aGlsZSB0aGUKQEAgLTIxMiw3ICsyMDYsNyBAQCBDcmVhdGVT aGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJLyoKIAkgKiBTZXQgdXAgc2hhcmVkIG1l bW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbQogCSAqLwotCUluaXRTaG1lbUFsbG9jYXRvcihzZWdo ZHIpOworCW1haW5fc2VnX3NoaW0gPSBTaG1lbUNyZWF0ZVJlZ2lzdGVyZWRTZWdtZW50cygpOwog CiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3Igc2VtYXBob3Jlcy4gKi8KIAlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQpAQCAtMjIyLDcgKzIxNiw3IEBAIENyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9y ZXModm9pZCkKIAlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOwogCiAJLyogSW5pdGlhbGl6 ZSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgZmFjaWxpdGllcy4gKi8KLQlkc21fcG9zdG1hc3Rlcl9z dGFydHVwKHNoaW0pOworCWRzbV9wb3N0bWFzdGVyX3N0YXJ0dXAobWFpbl9zZWdfc2hpbSk7CiAK IAkvKgogCSAqIE5vdyBnaXZlIGxvYWRhYmxlIG1vZHVsZXMgYSBjaGFuY2UgdG8gc2V0IHVwIHRo ZWlyIHNobWVtIGFsbG9jYXRpb25zCkBAIC0zNjAsNiArMzU0LDcgQEAgSW5pdGlhbGl6ZVNobWVt R1VDcyh2b2lkKQogCS8qCiAJICogQ2FsY3VsYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHNpemUgYW5k IHJvdW5kIHVwIHRvIHRoZSBuZWFyZXN0IG1lZ2FieXRlLgogCSAqLworCS8qIFRPRE86IHRoaXMg ZG9lc24ndCBhY2NvdW50IGZvciB0aGUgb24tZGVtYW5kIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMu ICovCiAJc2l6ZV9iID0gQ2FsY3VsYXRlU2htZW1TaXplKCk7CiAJc2l6ZV9tYiA9IGFkZF9zaXpl KHNpemVfYiwgKDEwMjQgKiAxMDI0KSAtIDEpIC8gKDEwMjQgKiAxMDI0KTsKIAlzcHJpbnRmKGJ1 ZiwgIiV6dSIsIHNpemVfbWIpOwpAQCAtMzY5LDcgKzM2NCw3IEBAIEluaXRpYWxpemVTaG1lbUdV Q3Modm9pZCkKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcmVx dWlyZWQuCiAJICovCi0JR2V0SHVnZVBhZ2VTaXplKCZocF9zaXplLCBOVUxMKTsKKwlHZXRIdWdl UGFnZVNpemUoJmhwX3NpemUsIE5VTEwsIE5VTEwpOwogCWlmIChocF9zaXplICE9IDApCiAJewog CQlTaXplCQlocF9yZXF1aXJlZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IGU3M2FjNDg5 YjJiLi43ODM2OTYyZWRmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ht ZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBAIC04OCw2ICs4OCwy MSBAQAogc3RhdGljIFNobWVtU3RydWN0RGVzYyAqcmVnaXN0cnlbU0hNRU1fSU5ERVhfU0laRV07 CiBzdGF0aWMgaW50IG51bV9yZWdpc3RyYXRpb25zID0gMDsKIAordHlwZWRlZiBzdHJ1Y3QgU2ht ZW1TZWdEZXNjCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlTaXplCQlpbml0X3NpemU7CisJLyoK KwkgKiBUT0RPOiBBdCBsZWFzdCByaWdodCBub3cgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgaXMg b25seSBhdmFpbGFibGUgaW4gbm9uCisJICogRVhFQ19CQUNLRU5EIGJ1aWxkcy4gV2Ugc2hvdWxk IG1vdmUgdGhpcyBhbmQgYWxsIHRoZSByZWxldmFudCBjb2RlIHVuZGVyCisJICogI2lmZGVmIEVY RUNfQkFDS0VORC4KKwkgKi8KKwlTaXplCQltYXhfc2l6ZTsKK30gU2htZW1TZWdEZXNjOworCitz dGF0aWMgU2htZW1TZWdEZXNjIHNlZ19yZWdpc3RyeVtOVU1fTUVNT1JZX01BUFBJTkdTXTsKK3N0 YXRpYyBpbnQgbnVtX3NlZ19yZWdpc3RyYXRpb25zID0gMDsKKwogLyoKICAqIFRoaXMgaXMgdGhl IGZpcnN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50 LCBhdAogICogdGhlIG9mZnNldCB0aGF0IFBHU2htZW1IZWFkZXItPmNvbnRlbnRfb2Zmc2V0IHBv aW50cyB0by4gIEFsbG9jYXRpb25zIGJ5CkBAIC0xMDUsMjEgKzEyMCw0MSBAQCB0eXBlZGVmIHN0 cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAlzbG9ja190CQlzaG1lbV9sb2NrOwogfSBTaG1lbUFs bG9jYXRvckRhdGE7CiAKLXN0YXRpYyB2b2lkICpTaG1lbUFsbG9jUmF3KFNpemUgc2l6ZSwgU2l6 ZSAqYWxsb2NhdGVkX3NpemUpOworLyogU3RydWN0dXJlIG1hbmFnaW5nIG9uZSBzaGFyZWQgbWVt b3J5IHNlZ21lbnQuICovCit0eXBlZGVmIHN0cnVjdCBTaG1lbVNlZ21lbnQKK3sKKwlQR1NobWVt SGVhZGVyICpTaG1lbVNlZ0hkcjsgLyogc2hhcmVkIG1lbSBzZWdtZW50IGhlYWRlciAqLworCVNo bWVtQWxsb2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3I7CisJdm9pZAkgICAqU2htZW1CYXNlOwkJ Lyogc3RhcnQgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5ICovCisJY29uc3QgY2hhciAqU2htZW1T ZWdtZW50TmFtZTsJLyogbmFtZSBvZiB0aGUgc2VnbWVudCBmb3IgbG9nZ2luZyAqLworfSBTaG1l bVNlZ21lbnQ7CisKK1NobWVtU2VnbWVudCBTZWdtZW50c1tOVU1fTUVNT1JZX01BUFBJTkdTXTsK Kworc3RhdGljIHZvaWQgKlNobWVtQWxsb2NSYXcoU2htZW1TZWdtZW50ICpzZWdtZW50LCBTaXpl IHNpemUsIFNpemUgKmFsbG9jYXRlZF9zaXplKTsKK3N0YXRpYyBib29sIFNobWVtQWRkcklzVmFs aWQoaW50IHNlZ21lbnRfaWQsIGNvbnN0IHZvaWQgKmFkZHIpOworc3RhdGljIHZvaWQgKlNobWVt SW5pdFN0cnVjdEluU2VnbWVudChjb25zdCBjaGFyICpuYW1lLCBTaXplIHNpemUsCisJCQkJCQkJ CQkgIGJvb2wgKmZvdW5kUHRyLCBpbnQgc2VnbWVudF9pZCk7CiAKIHN0YXRpYyB2b2lkIHNobWVt X2hhc2hfaW5pdCh2b2lkICphcmcpOwogc3RhdGljIHZvaWQgc2htZW1faGFzaF9hdHRhY2godm9p ZCAqYXJnKTsKIAotLyogc2hhcmVkIG1lbW9yeSBnbG9iYWwgdmFyaWFibGVzICovCisvKiBFeHBv c2UgU2htZW1Mb2NrIGZyb20gdGhlIG1haW4gc2VnbWVudCBmb3IgYWxsb2NhdGluZyBMV0xvY2sg dHJhbmNoZXMuICovCitzbG9ja190ICAgICpTaG1lbUxvY2s7CiAKLXN0YXRpYyBQR1NobWVtSGVh ZGVyICpTaG1lbVNlZ0hkcjsJLyogc2hhcmVkIG1lbSBzZWdtZW50IGhlYWRlciAqLwotc3RhdGlj IHZvaWQgKlNobWVtQmFzZTsJCQkvKiBzdGFydCBhZGRyZXNzIG9mIHNoYXJlZCBtZW1vcnkgKi8K LXN0YXRpYyB2b2lkICpTaG1lbUVuZDsJCQkvKiBlbmQrMSBhZGRyZXNzIG9mIHNoYXJlZCBtZW1v cnkgKi8KKy8qCisgKiBJZCBvZiBtYWluIG9yIHRoZSBkZWZhdWx0IHNlZ21lbnQgd2hpY2ggY29u dGFpbnMgYWxsIHRoZSBmaXhlZCBzaGFyZWQgbWVtb3J5CisgKiBzdHJ1Y3R1cmVzLgorICovCitp bnQgbWFpbl9zZWdfaWQgPSAtMTsKIAotc3RhdGljIFNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1B bGxvY2F0b3I7Ci1zbG9ja190ICAgICpTaG1lbUxvY2s7CQkJLyogcG9pbnRzIHRvIFNobWVtQWxs b2NhdG9yLT5zaG1lbV9sb2NrICovCi0gLyogcHJpbWFyeSBpbmRleCBoYXNodGFibGUgZm9yIHNo bWVtICovCi1IVEFCICpTaG1lbUluZGV4ID0gTlVMTDsKKy8qCisgKiBQcmltYXJ5IGluZGV4IGhh c2h0YWJsZSBmb3Igc2htZW0sIGZvciBzaW1wbGljaXR5IHdlIHVzZSBhIHNpbmdsZSBmb3IgYWxs CisgKiBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBpbmRlcGVuZGVudCBvZiB0aGUgc2VnbWVudHMg dGhleSBiZWxvbmcgdG8uIFRoZXJlIGNhbgorICogYmUgcGVyZm9ybWFuY2UgY29uc2VxdWVuY2Vz IG9mIHRoYXQsIGFuZCBhbiBhbHRlcm5hdGl2ZSBvcHRpb24gd291bGQgYmUgdG8KKyAqIGhhdmUg b25lIGluZGV4IHBlciBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLgorICovCitzdGF0aWMgSFRBQiAq U2htZW1JbmRleCA9IE5VTEw7CiAKIAogCkBAIC0xMzYsNiArMTcxLDI5IEBAIHN0YXRpYyBib29s IGZpcnN0TnVtYVRvdWNoID0gdHJ1ZTsKIAogRGF0dW0JCXBnX251bWFfYXZhaWxhYmxlKFBHX0ZV TkNUSU9OX0FSR1MpOwogCit2b2lkCitTaG1lbVJlZ2lzdGVyU2VnbWVudChjb25zdCBjaGFyICpu YW1lLCBTaXplIGluaXRfc2l6ZSwgU2l6ZSBtYXhfc2l6ZSkKK3sKKwlTaG1lbVNlZ0Rlc2MgKmRl c2M7CisKKwlpZiAobnVtX3NlZ19yZWdpc3RyYXRpb25zID49IE5VTV9NRU1PUllfTUFQUElOR1Mp CisJCWVsb2coRVJST1IsICJjYW5ub3QgcmVnaXN0ZXIgbW9yZSB0aGFuICVkIHNoYXJlZCBtZW1v cnkgc2VnbWVudHMiLAorCQkJIE5VTV9NRU1PUllfTUFQUElOR1MpOworCisJLyogV2UgYWxsb2Nh dGUgUEdTaG1lbUhlYWRlciBhbmQgU2htZW1BbGxvY2F0b3IgaW4gdGhlIHNlZ21lbnQsIGFjY291 bnQgZm9yIHRoYXQuICovCisJaW5pdF9zaXplID0gYWRkX3NpemUoaW5pdF9zaXplLCBzaXplb2Yo UEdTaG1lbUhlYWRlcikgKyBzaXplb2YoU2htZW1BbGxvY2F0b3JEYXRhKSk7CisJbWF4X3NpemUg PSBhZGRfc2l6ZShtYXhfc2l6ZSwgc2l6ZW9mKFBHU2htZW1IZWFkZXIpICsgc2l6ZW9mKFNobWVt QWxsb2NhdG9yRGF0YSkpOworCisJZGVzYyA9ICZzZWdfcmVnaXN0cnlbbnVtX3NlZ19yZWdpc3Ry YXRpb25zKytdOworCisJZGVzYy0+bmFtZSA9IG5hbWU7CisJLyogbWlnaHQgYXMgd2VsbCByb3Vu ZCBpdCBvZmYgdG8gYSBtdWx0aXBsZSBvZiBhIHR5cGljYWwgcGFnZSBzaXplICovCisJZGVzYy0+ aW5pdF9zaXplID0gYWxpZ25fc2l6ZShpbml0X3NpemUsIDgxOTIpOworCWRlc2MtPm1heF9zaXpl ID0gYWxpZ25fc2l6ZShtYXhfc2l6ZSwgODE5Mik7CisKKwlpZiAoc3RyY21wKG5hbWUsICJtYWlu IikgPT0gMCkKKwkJbWFpbl9zZWdfaWQgPSBudW1fc2VnX3JlZ2lzdHJhdGlvbnMgLSAxOworfQog CiB2b2lkCiBTaG1lbVJlZ2lzdGVyU3RydWN0KFNobWVtU3RydWN0RGVzYyAqZGVzYykKQEAgLTE0 MywxNiArMjAxLDU4IEBAIFNobWVtUmVnaXN0ZXJTdHJ1Y3QoU2htZW1TdHJ1Y3REZXNjICpkZXNj KQogCWVsb2coREVCVUcyLCAiUkVHSVNURVI6ICVzIHdpdGggc2l6ZSAlemQiLCBkZXNjLT5uYW1l LCBkZXNjLT5zaXplKTsKIAogCXJlZ2lzdHJ5W251bV9yZWdpc3RyYXRpb25zKytdID0gZGVzYzsK KworCWlmIChkZXNjLT5tYXhfc2l6ZSA+IDApCisJeworCQllbG9nKExPRywgIlJFU0laQUJMRSBz dHJ1Y3R1cmU6ICVzIGhhcyBtYXhfc2l6ZSAlemQiLCBkZXNjLT5uYW1lLCBkZXNjLT5tYXhfc2l6 ZSk7CisJCVNobWVtUmVnaXN0ZXJTZWdtZW50KGRlc2MtPm5hbWUsIGRlc2MtPnNpemUgKyBkZXNj LT5leHRyYV9zaXplLCBkZXNjLT5tYXhfc2l6ZSk7CisJCS8qCisJCSAqIFRPRE86CisJCSAqIEF0 IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhlIHNlZ21lbnQgaWQgZm9yIHRoaXMgcmVzaXphYmxlIHN0 cnVjdHVyZSwKKwkJICogc2hvdWxkIHdlIHNhdmUgaXQgaW4gU2htZW1TdHJ1Y3REZXNjIGl0c2Vs ZiBhbmQgbWFrZSB1c2Ugb2YgaXQgaW4KKwkJICogU2htZW1Jbml0UmVnaXN0ZXJlZCgpPyBSaWdo dCBub3cgdGhhdCBmdW5jdGlvbiByZWxpZXMgb24gdGhlIG9yZGVyIGluCisJCSAqIHdoaWNoIHJl c2l6YWJsZSBzdHJ1Y3R1cmVzIGFwcGVhciBpbiB0aGUgcmVnaXN0cnkuCisJCSAqCisJCSAqIEZs aXAgc2l6ZSBpcyB0aGF0IHRoZSBzZWdtZW50IGlkIGlzIGFzc2lnbmVkIGJ5IHNobWVtLmMgbW9k dWxlIGJ1dCBpdAorCQkgKiBpcyBwYXJ0IG9mIHRoZSBTaG1lbVN0cnVjdERlc2Mgd2hpY2ggaXMg ZmlsbGVkIGJ5IHRoZSBtb2R1bGUgd2hpY2gKKwkJICogbWF5IHRoaW5rIHRoYXQgdGhleSBoYXZl IHRvIHNwZWNpZnkgdGhlIHNlZ21lbnQgaWQgdG9vLiBCdXQgdGhhdCBjYW4KKwkJICogYmUgZml4 ZWQgdXNpbmcgYSBjb21tZW50LgorCQkgKi8KKwl9CiB9CiAKIHNpemVfdAogU2htZW1SZWdpc3Rl cmVkU2l6ZSh2b2lkKQogewogCXNpemVfdAkJc2l6ZTsKKwlpbnQJCQlzZWdfaWQgPSAwOwogCiAJ c2l6ZSA9IDA7CiAJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0cmF0aW9uczsgaSsrKQog CXsKKwkJaWYgKHJlZ2lzdHJ5W2ldLT5tYXhfc2l6ZSA+IDApCisJCXsKKwkJCVNobWVtU2VnRGVz YyAqc2VnRGVzYyA9ICZzZWdfcmVnaXN0cnlbc2VnX2lkKytdOworCisJCQkvKgorCQkJICogQSBy ZXNpemFibGUgc3RydWN0dXJlIGlzIHBsYWNlZCBpbiBpdHMgb3duIHNoYXJlZCBtZW1vcnkgc2Vn bWVudCwKKwkJCSAqIHdoaWNoIGlzIGFsbG9jYXRlZCBvbiBGSUZPIGJhc2lzLiBKdXN0IG1ha2Ug c3VyZSB0aGF0IHRoZQorCQkJICogY29ycmVzcG9uZGluZyBzZWdtZW50IGlzIHRoZSByaWdodCBv bmUuIFdlIHJldHVybnMgb25seSB0aGUgc3VtIG9mCisJCQkgKiB0aGUgc2l6ZXMgaW4gdGhlIG1h aW4gc2VnbWVudC4KKwkJCSAqCisJCQkgKiBUT0RPOiBPbmNlIHdlIHVzZSBTaG1lbVJlZ2lzdGVy U3RydWN0IGZvciBldmVyeSBzaGFyZWQgbWVtb3J5CisJCQkgKiBzdHJ1Y3R1cmUsIHdlIHNob3Vs ZCBjaGFuZ2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gdGhlIHRvdGFsIHNpemUKKwkJCSAqIG9m IGFsbCB0aGUgc2VnbWVudHMgaW5zdGVhZCBvZiBqdXN0IHRoZSBtYWluIHNlZ21lbnQuIEFuZCBh bHNvCisJCQkgKiBjYWxsIFNobWVtUmVnaXN0ZXJTZWdtZW50KCkgZm9yIG1haW4gc2VnbWVudCBm cm9tIGhlcmUgaW5zdGVhZCBvZgorCQkJICogQ2FsY3VsYXRlU2htZW1TaXplKCkuCisJCQkgKi8K KwkJCUFzc2VydChzdHJjbXAoc2VnRGVzYy0+bmFtZSwgcmVnaXN0cnlbaV0tPm5hbWUpID09IDAp OworCQkJQXNzZXJ0KHNlZ0Rlc2MtPmluaXRfc2l6ZSA+PSByZWdpc3RyeVtpXS0+c2l6ZSArIHJl Z2lzdHJ5W2ldLT5leHRyYV9zaXplKTsKKwkJCUFzc2VydChzZWdEZXNjLT5tYXhfc2l6ZSA+PSBy ZWdpc3RyeVtpXS0+bWF4X3NpemUpOworCisJCQllbG9nKExPRywgIlJFU0laQUJMRSBzdHJ1Y3R1 cmU6ICVzIGhhcyBpbml0X3NpemUgPSAlemQgbWF4X3NpemUgJXpkIiwgc2VnRGVzYy0+bmFtZSwg c2VnRGVzYy0+aW5pdF9zaXplLCBzZWdEZXNjLT5tYXhfc2l6ZSk7CisKKwkJfQogCQlzaXplID0g YWRkX3NpemUoc2l6ZSwgcmVnaXN0cnlbaV0tPnNpemUpOwogCQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgcmVnaXN0cnlbaV0tPmV4dHJhX3NpemUpOwogCX0KQEAgLTE2Miw5ICsyNjIsNTQgQEAgU2ht ZW1SZWdpc3RlcmVkU2l6ZSh2b2lkKQogCXJldHVybiBzaXplOwogfQogCitQR1NobWVtSGVhZGVy ICoKK1NobWVtQ3JlYXRlUmVnaXN0ZXJlZFNlZ21lbnRzKHZvaWQpCit7CisJUEdTaG1lbUhlYWRl ciAqbWFpbl9zZWdfc2hpbSA9IE5VTEw7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgYnkg dGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuICovCisJQXNzZXJ0KCFJc1Vu ZGVyUG9zdG1hc3Rlcik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9zZWdfcmVnaXN0cmF0 aW9uczsgaSsrKQorCXsKKwkJU2htZW1TZWdEZXNjICpzZWdEZXNjID0gJnNlZ19yZWdpc3RyeVtp XTsKKworCQlQR1VzZWRTaG1lbUluZm8gKnVzZWRTaG1lbSA9ICZVc2VkU2htZW1JbmZvW2ldOwor CQlQR1NobWVtSGVhZGVyICpzaGltOworCQlQR1NobWVtSGVhZGVyICpzZWdoZHI7CisKKwkJLyoK KwkJICogU2V0IHNlZWQgc2htZW0gaWRlbnRpZmllciB3aGljaCB3aWxsIGJlIGNoYW5nZWQgdG8g dGhlIGZpbmFsIG9uZQorCQkgKiB3aGVuIGNyZWF0aW5nIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21l bnQuCisJCSAqLworCQl1c2VkU2htZW0tPlVzZWRTaG1lbVNlZ0lEID0gaTsKKworCQllbG9nKERF QlVHMywgImludm9raW5nIFBHU2hhcmVkTWVtb3J5Q3JlYXRlKHNlZ21lbnQgJXMsIHNpemU9JXp1 LCByZXNlcnZlZCBhZGRyZXNzIHNwYWNlPSV6dSkiLAorCQkJIHNlZ0Rlc2MtPm5hbWUsIHNlZ0Rl c2MtPmluaXRfc2l6ZSwgc2VnRGVzYy0+bWF4X3NpemUpOworCisJCS8qCisJCSAqIENyZWF0ZSB0 aGUgc2htZW0gc2VnbWVudC4KKwkJICovCisJCXNlZ2hkciA9IFBHU2hhcmVkTWVtb3J5Q3JlYXRl KGksIHNlZ0Rlc2MtPm5hbWUsIHNlZ0Rlc2MtPmluaXRfc2l6ZSwgc2VnRGVzYy0+bWF4X3NpemUs ICZzaGltKTsKKworCQkvKgorCQkgKiBTZXQgdXAgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uIG1l Y2hhbmlzbQorCQkgKi8KKwkJSW5pdFNobWVtQWxsb2NhdG9yKGksIHNlZ0Rlc2MtPm5hbWUsIHNl Z2hkcik7CisKKwkJLyogUmVtZW1iZXIgbWFpbiBzZWdtZW50IHNoaW0gZm9yIHRoZSBjYWxsZXIg dG8gdXNlLiAqLworCQlpZiAoaSA9PSBtYWluX3NlZ19pZCkKKwkJCW1haW5fc2VnX3NoaW0gPSBz aGltOworCX0KKworCXJldHVybiBtYWluX3NlZ19zaGltOworfQorCiB2b2lkCiBTaG1lbUluaXRS ZWdpc3RlcmVkKHZvaWQpCiB7CisJaW50IHNlZ19pZCA9IDA7CisKIAkvKiBTaG91bGQgYmUgY2Fs bGVkIG9ubHkgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuICovCiAJ QXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7CiAKQEAgLTE3NCw2ICszMTksNyBAQCBTaG1lbUlu aXRSZWdpc3RlcmVkKHZvaWQpCiAJCXZvaWQJICAgKnN0cnVjdFB0cjsKIAkJYm9vbAkJZm91bmQ7 CiAJCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsKKwkJaW50IHN0cnVjdF9zZWdfaWQ7CiAKIAkJZWxv ZyhERUJVRzIsICJJTklUIFslZC8lZF06ICVzIiwgaSwgbnVtX3JlZ2lzdHJhdGlvbnMsIHJlZ2lz dHJ5W2ldLT5uYW1lKTsKIApAQCAtMTkwLDggKzMzNiwyNyBAQCBTaG1lbUluaXRSZWdpc3RlcmVk KHZvaWQpCiAJCWlmIChmb3VuZCkKIAkJCWVsb2coRVJST1IsICJzaG1lbSBzdHJ1Y3QgXCIlc1wi IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQiLCByZWdpc3RyeVtpXS0+bmFtZSk7CiAKLQkJLyogYWxs b2NhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KLQkJc3RydWN0UHRyID0gU2htZW1BbGxvY1Jhdyhy ZWdpc3RyeVtpXS0+c2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsKKwkJLyoKKwkJICogYWxsb2NhdGUg YW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZXMuIFJlc2l6YWJsZSBzdHJ1Y3R1cmVzIGdvIGlu dG8KKwkJICogdGhlaXIgb3duIHNlZ21lbnRzIGFuZCBmaXhlZCBzdHJ1Y3R1cmVzIGdvIGludG8g dGhlIG1haW4gc2VnbWVudC4KKwkJICovCisJCWlmIChyZWdpc3RyeVtpXS0+bWF4X3NpemUgPiAw KQorCQl7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCQkJU2htZW1TZWdEZXNjICpzZWdE ZXNjID0gJnNlZ19yZWdpc3RyeVtzZWdfaWRdOworCisJCQlBc3NlcnQoc2VnX2lkIDwgbnVtX3Nl Z19yZWdpc3RyYXRpb25zIC0gMSk7CisJCQlBc3NlcnQoc3RyY21wKHNlZ0Rlc2MtPm5hbWUsIHJl Z2lzdHJ5W2ldLT5uYW1lKSA9PSAwKTsKKwkJCUFzc2VydChzZWdEZXNjLT5pbml0X3NpemUgPj0g cmVnaXN0cnlbaV0tPnNpemUgKyByZWdpc3RyeVtpXS0+ZXh0cmFfc2l6ZSk7CisJCQlBc3NlcnQo c2VnRGVzYy0+bWF4X3NpemUgPj0gcmVnaXN0cnlbaV0tPm1heF9zaXplKTsKKyNlbmRpZgorCQkJ c3RydWN0X3NlZ19pZCA9IHNlZ19pZCsrOworCisJCX0KKwkJZWxzZQorCQkJc3RydWN0X3NlZ19p ZCA9IG1haW5fc2VnX2lkOworCisJCXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcoJlNlZ21lbnRz W3N0cnVjdF9zZWdfaWRdLCByZWdpc3RyeVtpXS0+c2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsKIAkJ aWYgKHN0cnVjdFB0ciA9PSBOVUxMKQogCQl7CiAJCQkvKiBvdXQgb2YgbWVtb3J5OyByZW1vdmUg dGhlIGZhaWxlZCBTaG1lbUluZGV4IGVudHJ5ICovCkBAIC0yMDUsNiArMzcwLDcgQEAgU2htZW1J bml0UmVnaXN0ZXJlZCh2b2lkKQogCQlyZXN1bHQtPnNpemUgPSByZWdpc3RyeVtpXS0+c2l6ZTsK IAkJcmVzdWx0LT5hbGxvY2F0ZWRfc2l6ZSA9IGFsbG9jYXRlZF9zaXplOwogCQlyZXN1bHQtPmxv Y2F0aW9uID0gc3RydWN0UHRyOworCQlyZXN1bHQtPnNlZ21lbnRfaWQgPSBzdHJ1Y3Rfc2VnX2lk OwogCiAJCSoocmVnaXN0cnlbaV0tPnB0cikgPSBzdHJ1Y3RQdHI7CiAJCWlmIChyZWdpc3RyeVtp XS0+aW5pdF9mbikKQEAgLTIxMiwxMyArMzc4LDEwMSBAQCBTaG1lbUluaXRSZWdpc3RlcmVkKHZv aWQpCiAJfQogfQogCisjaWZuZGVmIEVYRUNfQkFDS0VORAordm9pZAorU2htZW1SZXNpemVSZWdp c3RlcmVkKGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgbmV3X3NpemUpCit7CisJU2htZW1JbmRleEVu dCAqcmVzdWx0OworCWJvb2wgZm91bmQ7CisJLyogQ2FjaGVhbGlnbiBuZXcgc2l6ZSAqLworCVNp emUgYWxsb2NhdGVkX3NpemUgPSBDQUNIRUxJTkVBTElHTihuZXdfc2l6ZSk7CisJU2htZW1TZWdt ZW50ICpzZWdtZW50OworCVNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3I7CisJU2l6 ZQkJbmV3RnJlZTsKKwlQR1NobWVtSGVhZGVyICpzaG1oZHI7CisJU2l6ZSBuZXdfc2VnX3NpemU7 CisKKwkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLworCUxXTG9ja0FjcXVpcmUo U2htZW1JbmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CisJcmVzdWx0ID0gKFNobWVtSW5kZXhFbnQg KikKKwkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgbmFtZSwgSEFTSF9GSU5ELCAmZm91bmQpOwor CWlmICghZm91bmQpCisJCWVsb2coRVJST1IsICJzaG1lbSBzdHJ1Y3QgXCIlc1wiIGlzIG5vdCBp bml0aWFsaXplZCIsIG5hbWUpOworCisJQXNzZXJ0KHJlc3VsdCk7CisKKwkvKgorCSAqIFRPRE86 CisJICogSW4gb3JkZXIgdG8gdXNlIG51bV9zZWdfcmVnaXN0cmF0aW9ucyBoZXJlIGluIEVYRUNf QkFDS0VORCBjYXNlLCBpdCBuZWVkcworCSAqIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGxhdW5jaF9i YWNrZW5kKCkgdG8gdGhlIGJhY2tlbmQgcHJvY2VzcyB3aGljaCB3aWxsCisJICogY2FsbCB0aGlz IGZ1bmN0aW9uLgorCSAqLworCUFzc2VydChyZXN1bHQtPnNlZ21lbnRfaWQgPj0gMCAmJiByZXN1 bHQtPnNlZ21lbnRfaWQgPCBudW1fc2VnX3JlZ2lzdHJhdGlvbnMpOworCisJLyogU3RydWN0dXJl cyBpbiB0aGUgbWFpbiBzZWdtZW50IHNob3VsZCBhcmUgZml4ZWQgc2l6ZWQuICovCisJQXNzZXJ0 KHJlc3VsdC0+c2VnbWVudF9pZCAhPSBtYWluX3NlZ19pZCk7CisKKwlzZWdtZW50ID0gJlNlZ21l bnRzW3Jlc3VsdC0+c2VnbWVudF9pZF07CisJU2htZW1BbGxvY2F0b3IgPSBzZWdtZW50LT5TaG1l bUFsbG9jYXRvcjsKKwlzaG1oZHIgPSBzZWdtZW50LT5TaG1lbVNlZ0hkcjsKKworCS8qCisJICog VGhlIHJlc2l6YWJsZSBzdHJ1Y3R1cmVzIGFyZSBwbGFjZWQgaW4gdGhlaXIgb3duIHNlZ21lbnQg YWZ0ZXIgdGhlCisJICogaGVhZGVyIGFuZCB0aGUgc3BpbmxvY2suIEhlbmNlIHRoZSBtZW1vcnkg bG9jYXRpb24gd2hlcmUgdGhleSBlbmQgYXJlCisJICogc2FtZSBhcyB0aGUgc3RhcnQgb2YgZnJl ZSBtZW1vcnkgaW4gdGhhdCBzZWdtZW50LgorCSAqLworCUFzc2VydCgoY2hhciAqKSBzZWdtZW50 LT5TaG1lbUJhc2UgKyBTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQgPT0gKGNoYXIgKikgcmVz dWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+YWxsb2NhdGVkX3NpemUpOworCW5ld0ZyZWUgPSBTaG1l bUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQgKyAoYWxsb2NhdGVkX3NpemUgLSByZXN1bHQtPmFsbG9j YXRlZF9zaXplKTsKKwluZXdfc2VnX3NpemUgPSBzaG1oZHItPnRvdGFsc2l6ZSArIChhbGxvY2F0 ZWRfc2l6ZSAtIHJlc3VsdC0+YWxsb2NhdGVkX3NpemUpOworCW5ld19zZWdfc2l6ZSA9IGFsaWdu X3NpemUobmV3X3NlZ19zaXplLCA4MTkyKTsKKwlBc3NlcnQobmV3X3NlZ19zaXplID49IDApOwor CWlmIChhbGxvY2F0ZWRfc2l6ZSA9PSByZXN1bHQtPmFsbG9jYXRlZF9zaXplKQorCXsKKwkJcmVz dWx0LT5zaXplID0gbmV3X3NpemU7CisJCS8qIE5vIG5lZWQgdG8gcmVzaXplIGlmIHRoZSBleGlz dGluZyBhbGxvY2F0ZWQgc2l6ZSBpcyBzdWZmaWNpZW50ICovCisJCUxXTG9ja1JlbGVhc2UoU2ht ZW1JbmRleExvY2spOworCQlyZXR1cm47CisJfQorCS8qIFRPRE86IENhbiB3ZSBjYWxsIFBHU2hh cmVkTWVtb3J5UmVzaXplIHdoaWxlIGhvbGRpbmcgdGhlIExXTG9jaz8gKi8KKwllbHNlIGlmIChh bGxvY2F0ZWRfc2l6ZSA+IHJlc3VsdC0+YWxsb2NhdGVkX3NpemUpCisJeworCQkvKiBXZSBuZWVk IHRvIGV4cGFuZCB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGJlZm9yZSBleHBhbmRpbmcgdGhl IHN0cnVjdHVyZS4gKi8KKwkJUEdTaGFyZWRNZW1vcnlSZXNpemUocmVzdWx0LT5zZWdtZW50X2lk LCBzZWdtZW50LT5TaG1lbVNlZ21lbnROYW1lLCBuZXdfc2VnX3NpemUpOworCQkgLyogVXBkYXRl IHRoZSBhdmFpbGFibGUgc2l6ZSBpbiB0aGUgc2htZW0gaW5kZXggZW50cnkuICovCisJCVNwaW5M b2NrQWNxdWlyZSgmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2spOworCQlTaG1lbUFsbG9jYXRv ci0+ZnJlZV9vZmZzZXQgPSBuZXdGcmVlOworCQlTcGluTG9ja1JlbGVhc2UoJlNobWVtQWxsb2Nh dG9yLT5zaG1lbV9sb2NrKTsKKwkJcmVzdWx0LT5zaXplID0gbmV3X3NpemU7CisJCXJlc3VsdC0+ YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwl9CisJZWxzZQorCXsKKwkJU3Bpbkxv Y2tBY3F1aXJlKCZTaG1lbUFsbG9jYXRvci0+c2htZW1fbG9jayk7CisJCVNobWVtQWxsb2NhdG9y LT5mcmVlX29mZnNldCA9IG5ld0ZyZWU7CisJCVNwaW5Mb2NrUmVsZWFzZSgmU2htZW1BbGxvY2F0 b3ItPnNobWVtX2xvY2spOworCQlyZXN1bHQtPnNpemUgPSBuZXdfc2l6ZTsKKwkJcmVzdWx0LT5h bGxvY2F0ZWRfc2l6ZSA9IGFsbG9jYXRlZF9zaXplOworCQkvKiBTaHJpbmsgdGhlIHNoYXJlZCBz dHJ1Y3R1cmUgYmVmb3JlIHNocmlua2luZyB0aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAqLwor CQlQR1NoYXJlZE1lbW9yeVJlc2l6ZShyZXN1bHQtPnNlZ21lbnRfaWQsIHNlZ21lbnQtPlNobWVt U2VnbWVudE5hbWUsIG5ld19zZWdfc2l6ZSk7CisJfQorCisJLyoKKwkgKiBFbmQgb2YgdGhlIHN0 cnVjdHVyZSBzaG91bGQgc3RpbGwgYmUgc2FtZSBhcyB0aGUgc3RhcnQgb2YgZnJlZSBtZW1vcnkK KwkgKiBpbiB0aGUgc2VnbWVudAorCSAqLworCUFzc2VydCgoY2hhciAqKSBzZWdtZW50LT5TaG1l bUJhc2UgKyBTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQgPT0gKGNoYXIgKikgcmVzdWx0LT5s b2NhdGlvbiArIHJlc3VsdC0+YWxsb2NhdGVkX3NpemUpOworCisJTFdMb2NrUmVsZWFzZShTaG1l bUluZGV4TG9jayk7Cit9CisjZW5kaWYKKwogI2lmZGVmIEVYRUNfQkFDS0VORAogdm9pZAogU2ht ZW1BdHRhY2hSZWdpc3RlcmVkKHZvaWQpCiB7CiAJLyogTXVzdCBiZSBpbml0aWFsaXppbmcgYSAo bm9uLXN0YW5kYWxvbmUpIGJhY2tlbmQgKi8KIAlBc3NlcnQoSXNVbmRlclBvc3RtYXN0ZXIpOwot CUFzc2VydChTaG1lbUFsbG9jYXRvci0+aW5kZXggIT0gTlVMTCk7CisJQXNzZXJ0KFNobWVtSW5k ZXggIT0gTlVMTCk7CiAKIAlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19FWENMVVNJ VkUpOwogCkBAIC0yNTEsNyArNTA1LDcgQEAgU2htZW1BdHRhY2hSZWdpc3RlcmVkKHZvaWQpCiAj ZW5kaWYKIAogLyoKLSAqCUluaXRTaG1lbUFsbG9jYXRvcigpIC0tLSBzZXQgdXAgYmFzaWMgcG9p bnRlcnMgdG8gc2hhcmVkIG1lbW9yeS4KKyAqCUluaXRTaG1lbUFsbG9jYXRvcigpIC0tLSBzZXQg dXAgYmFzaWMgcG9pbnRlcnMgdG8gc2hhcmVkIG1lbW9yeSBpbiB0aGUgZ2l2ZW4gc2VnbWVudC4K ICAqCiAgKiBDYWxsZWQgYXQgcG9zdG1hc3RlciBvciBzdGFuZC1hbG9uZSBiYWNrZW5kIHN0YXJ0 dXAsIHRvIGluaXRpYWxpemUgdGhlCiAgKiBhbGxvY2F0b3IncyBkYXRhIHN0cnVjdHVyZSBpbiB0 aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiAgSW4gRVhFQ19CQUNLRU5ELApAQCAtMjU5LDkgKzUx MywxMyBAQCBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQodm9pZCkKICAqIG1lbW9yeSBhcmVhcy4KICAq Lwogdm9pZAotSW5pdFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcikKK0luaXRT aG1lbUFsbG9jYXRvcihpbnQgc2VnbWVudF9pZCwgY29uc3QgY2hhciAqc2VnbmFtZSwgUEdTaG1l bUhlYWRlciAqc2VnaGRyKQogeworCVNobWVtU2VnbWVudCAqc2VnbWVudDsKKwogCUFzc2VydChz ZWdoZHIgIT0gTlVMTCk7CisJQXNzZXJ0KHNlZ21lbnRfaWQgPj0gMCAmJiBzZWdtZW50X2lkIDwg TlVNX01FTU9SWV9NQVBQSU5HUyk7CisJc2VnbWVudCA9ICZTZWdtZW50c1tzZWdtZW50X2lkXTsK IAogCS8qCiAJICogV2UgYXNzdW1lIHRoZSBwb2ludGVyIGFuZCBvZmZzZXQgYXJlIE1BWEFMSUdO LiAgTm90IGEgaGFyZCByZXF1aXJlbWVudCwKQEAgLTI3MCwyMyArNTI4LDI0IEBAIEluaXRTaG1l bUFsbG9jYXRvcihQR1NobWVtSGVhZGVyICpzZWdoZHIpCiAJQXNzZXJ0KHNlZ2hkciA9PSAodm9p ZCAqKSBNQVhBTElHTihzZWdoZHIpKTsKIAlBc3NlcnQoc2VnaGRyLT5jb250ZW50X29mZnNldCA9 PSBNQVhBTElHTihzZWdoZHItPmNvbnRlbnRfb2Zmc2V0KSk7CiAKLQlTaG1lbVNlZ0hkciA9IHNl Z2hkcjsKLQlTaG1lbUJhc2UgPSBzZWdoZHI7Ci0JU2htZW1FbmQgPSAoY2hhciAqKSBTaG1lbUJh c2UgKyBzZWdoZHItPnRvdGFsc2l6ZTsKKwlzZWdtZW50LT5TaG1lbVNlZ0hkciA9IHNlZ2hkcjsK KwlzZWdtZW50LT5TaG1lbUJhc2UgPSBzZWdoZHI7CisJc2VnbWVudC0+U2htZW1TZWdtZW50TmFt ZSA9IHNlZ25hbWU7CiAKICNpZm5kZWYgRVhFQ19CQUNLRU5ECiAJQXNzZXJ0KCFJc1VuZGVyUG9z dG1hc3Rlcik7CiAjZW5kaWYKIAlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCiAJewotCQlQR1NobWVt SGVhZGVyICpzaG1oZHIgPSBTaG1lbVNlZ0hkcjsKKwkJUEdTaG1lbUhlYWRlciAqc2htaGRyID0g c2VnbWVudC0+U2htZW1TZWdIZHI7CisKKwkJc2VnbWVudC0+U2htZW1BbGxvY2F0b3IgPSAoU2ht ZW1BbGxvY2F0b3JEYXRhICopICgoY2hhciAqKSBzaG1oZHIgKyBzaG1oZHItPmNvbnRlbnRfb2Zm c2V0KTsKIAotCQlTaG1lbUFsbG9jYXRvciA9IChTaG1lbUFsbG9jYXRvckRhdGEgKikgKChjaGFy ICopIHNobWhkciArIHNobWhkci0+Y29udGVudF9vZmZzZXQpOwotCQlTaG1lbUxvY2sgPSAmU2ht ZW1BbGxvY2F0b3ItPnNobWVtX2xvY2s7CiAJfQogCWVsc2UKIAl7CiAJCVNpemUJCW9mZnNldDsK KwkJU2htZW1BbGxvY2F0b3JEYXRhICpTaG1lbUFsbG9jYXRvcjsKIAogCQkvKgogCQkgKiBBbGxv Y2F0aW9ucyBhZnRlciB0aGlzIHBvaW50IHNob3VsZCBnbyB0aHJvdWdoIFNobWVtQWxsb2MsIHdo aWNoCkBAIC0zMDMsNDcgKzU2Miw2NSBAQCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1lbUhlYWRl ciAqc2VnaGRyKQogCQlTaG1lbUFsbG9jYXRvciA9IChTaG1lbUFsbG9jYXRvckRhdGEgKikgKChj aGFyICopIHNlZ2hkciArIHNlZ2hkci0+Y29udGVudF9vZmZzZXQpOwogCiAJCVNwaW5Mb2NrSW5p dCgmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2spOwotCQlTaG1lbUxvY2sgPSAmU2htZW1BbGxv Y2F0b3ItPnNobWVtX2xvY2s7CiAJCVNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldCA9IG9mZnNl dDsKIAkJLyogU2htZW1JbmRleCBjYW4ndCBiZSBzZXQgdXAgeWV0IChuZWVkIExXTG9ja3MgZmly c3QpICovCiAJCVNobWVtQWxsb2NhdG9yLT5pbmRleCA9IE5VTEw7CisKKwkJc2VnbWVudC0+U2ht ZW1BbGxvY2F0b3IgPSBTaG1lbUFsbG9jYXRvcjsKIAkJU2htZW1JbmRleCA9IChIVEFCICopIE5V TEw7CiAJfQorCisJLyogRXhwb3NlIFNobWVtTG9jayBmcm9tIHRoZSBtYWluIHNlZ21lbnQgZm9y IGFsbG9jYXRpbmcgTFdMb2NrIHRyYW5jaGVzLiAqLworCWlmIChzZWdtZW50X2lkID09IG1haW5f c2VnX2lkKQorCQlTaG1lbUxvY2sgPSAmc2VnbWVudC0+U2htZW1BbGxvY2F0b3ItPnNobWVtX2xv Y2s7CiB9CiAKIC8qCi0gKiBTaG1lbUFsbG9jIC0tIGFsbG9jYXRlIG1heC1hbGlnbmVkIGNodW5r IGZyb20gc2hhcmVkIG1lbW9yeQorICogU2htZW1BbGxvYyAtLQorICogCQlhbGxvY2F0ZSBtYXgt YWxpZ25lZCBjaHVuayBmcm9tIGdpdmVuIHNoYXJlZCBtZW1vcnkgc2VnbWVudAogICoKICAqIFRo cm93cyBlcnJvciBpZiByZXF1ZXN0IGNhbm5vdCBiZSBzYXRpc2ZpZWQuCiAgKgotICogQXNzdW1l cyBTaG1lbUxvY2sgYW5kIFNobWVtU2VnSGRyIGFyZSBpbml0aWFsaXplZC4KKyAqIEFzc3VtZXMg U2htZW1Mb2NrIGFuZCBTaG1lbVNlZ0hkciBpbiB0aGUgZ2l2ZW4gc2VnbWVudCBhcmUgaW5pdGlh bGl6ZWQuCiAgKi8KLXZvaWQgKgotU2htZW1BbGxvYyhTaXplIHNpemUpCitzdGF0aWMgdm9pZCAq CitTaG1lbUFsbG9jSW50ZXJuYWwoU2htZW1TZWdtZW50ICpzZWdtZW50LCBTaXplIHNpemUpCiB7 CiAJdm9pZAkgICAqbmV3U3BhY2U7CiAJU2l6ZQkJYWxsb2NhdGVkX3NpemU7CiAKLQluZXdTcGFj ZSA9IFNobWVtQWxsb2NSYXcoc2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsKKwluZXdTcGFjZSA9IFNo bWVtQWxsb2NSYXcoc2VnbWVudCwgc2l6ZSwgJmFsbG9jYXRlZF9zaXplKTsKIAlpZiAoIW5ld1Nw YWNlKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9S WSksCi0JCQkJIGVycm1zZygib3V0IG9mIHNoYXJlZCBtZW1vcnkgKCV6dSBieXRlcyByZXF1ZXN0 ZWQpIiwKLQkJCQkJCXNpemUpKSk7CisJCQkJIGVycm1zZygib3V0IG9mIHNoYXJlZCBtZW1vcnkg aW4gc2VnbWVudCAlcyAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAorCQkJCQkJc2VnbWVudC0+U2ht ZW1TZWdtZW50TmFtZSwgc2l6ZSkpKTsKIAlyZXR1cm4gbmV3U3BhY2U7CiB9CiAKK3ZvaWQgKgor U2htZW1BbGxvYyhTaXplIHNpemUpCit7CisJcmV0dXJuIFNobWVtQWxsb2NJbnRlcm5hbCgmU2Vn bWVudHNbbWFpbl9zZWdfaWRdLCBzaXplKTsKK30KKwogLyoKICAqIFNobWVtQWxsb2NOb0Vycm9y IC0tIGFsbG9jYXRlIG1heC1hbGlnbmVkIGNodW5rIGZyb20gc2hhcmVkIG1lbW9yeQogICoKICAq IEFzIFNobWVtQWxsb2MsIGJ1dCByZXR1cm5zIE5VTEwgaWYgb3V0IG9mIHNwYWNlLCByYXRoZXIg dGhhbiBlcnJvcmluZy4KKyAqCisgKiBUaGlzIGlzIHVzZWQgYXMgYSBtZW1vcnkgYWxsb2NhdGlv biBjYWxsYmFjayBmb3IgaGFzaCB0YWJsZXMgY3JlYXRlZCB1c2luZworICogZHluYWhhc2guYyBB UElzLiBJdCdzIGEgYml0IG9mIHdvcmsgdG8gbWFrZSB0aGUgY2FsbGJhY2sgc3BlY2lmeSB0aGUg c2VnbWVudAorICogd2hlcmUgdG8gYWxsb2NhdGUgdGhlIG1lbW9yeS4gRm9yIG5vdywgdGhlcmUg aXMgbm8gbmVlZCB0byBjcmVhdGUgc2hhcmVkCisgKiBtZW1vcnkgaGFzaCB0YWJsZXMgaW4gc2hh cmVkIG1lbW9yeSBzZWdtZW50cyBvdGhlciB0aGFuIG1haW4gbWVtb3J5IHNlZ21lbnQuCisgKiBI ZW5jZSB3ZSBkbyBub3Qgc3VwcG9ydCBzZWdtZW50X2lkIHBhcmFtZXRlciBoZXJlLgogICovCiB2 b2lkICoKIFNobWVtQWxsb2NOb0Vycm9yKFNpemUgc2l6ZSkKIHsKIAlTaXplCQlhbGxvY2F0ZWRf c2l6ZTsKIAotCXJldHVybiBTaG1lbUFsbG9jUmF3KHNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJ cmV0dXJuIFNobWVtQWxsb2NSYXcoJlNlZ21lbnRzW21haW5fc2VnX2lkXSwgc2l6ZSwgJmFsbG9j YXRlZF9zaXplKTsKIH0KIAogLyoKQEAgLTM1MywxMSArNjMwLDEzIEBAIFNobWVtQWxsb2NOb0Vy cm9yKFNpemUgc2l6ZSkKICAqIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgcmVxdWVzdGVkIHBsdXMg YW55IHBhZGRpbmcgd2UgY2hvb3NlIHRvIGFkZC4KICAqLwogc3RhdGljIHZvaWQgKgotU2htZW1B bGxvY1JhdyhTaXplIHNpemUsIFNpemUgKmFsbG9jYXRlZF9zaXplKQorU2htZW1BbGxvY1JhdyhT aG1lbVNlZ21lbnQgKnNlZ21lbnQsIFNpemUgc2l6ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpCiB7 CiAJU2l6ZQkJbmV3U3RhcnQ7CiAJU2l6ZQkJbmV3RnJlZTsKIAl2b2lkCSAgICpuZXdTcGFjZTsK KwlQR1NobWVtSGVhZGVyICpzaG1oZHIgPSBzZWdtZW50LT5TaG1lbVNlZ0hkcjsKKwlTaG1lbUFs bG9jYXRvckRhdGEgKlNobWVtQWxsb2NhdG9yID0gc2VnbWVudC0+U2htZW1BbGxvY2F0b3I7CiAK IAkvKgogCSAqIEVuc3VyZSBhbGwgc3BhY2UgaXMgYWRlcXVhdGVseSBhbGlnbmVkLiAgV2UgdXNl ZCB0byBvbmx5IE1BWEFMSUdOIHRoaXMKQEAgLTM3MywyMiArNjUyLDIxIEBAIFNobWVtQWxsb2NS YXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRfc2l6ZSkKIAlzaXplID0gQ0FDSEVMSU5FQUxJ R04oc2l6ZSk7CiAJKmFsbG9jYXRlZF9zaXplID0gc2l6ZTsKIAotCUFzc2VydChTaG1lbVNlZ0hk ciAhPSBOVUxMKTsKKwlBc3NlcnQoc2htaGRyICE9IE5VTEwpOwogCi0JU3BpbkxvY2tBY3F1aXJl KFNobWVtTG9jayk7CisJU3BpbkxvY2tBY3F1aXJlKCZTaG1lbUFsbG9jYXRvci0+c2htZW1fbG9j ayk7CiAKIAluZXdTdGFydCA9IFNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldDsKLQogCW5ld0Zy ZWUgPSBuZXdTdGFydCArIHNpemU7Ci0JaWYgKG5ld0ZyZWUgPD0gU2htZW1TZWdIZHItPnRvdGFs c2l6ZSkKKwlpZiAobmV3RnJlZSA8PSBzaG1oZHItPnRvdGFsc2l6ZSkKIAl7Ci0JCW5ld1NwYWNl ID0gKGNoYXIgKikgU2htZW1CYXNlICsgbmV3U3RhcnQ7CisJCW5ld1NwYWNlID0gKGNoYXIgKikg c2VnbWVudC0+U2htZW1CYXNlICsgbmV3U3RhcnQ7CiAJCVNobWVtQWxsb2NhdG9yLT5mcmVlX29m ZnNldCA9IG5ld0ZyZWU7CiAJfQogCWVsc2UKIAkJbmV3U3BhY2UgPSBOVUxMOwogCi0JU3Bpbkxv Y2tSZWxlYXNlKFNobWVtTG9jayk7CisJU3BpbkxvY2tSZWxlYXNlKCZTaG1lbUFsbG9jYXRvci0+ c2htZW1fbG9jayk7CiAKIAkvKiBub3RlIHRoaXMgYXNzZXJ0IGlzIG9rYXkgd2l0aCBuZXdTcGFj ZSA9PSBOVUxMICovCiAJQXNzZXJ0KG5ld1NwYWNlID09ICh2b2lkICopIENBQ0hFTElORUFMSUdO KG5ld1NwYWNlKSk7CkBAIC0zOTYsMTUgKzY3NCw0OSBAQCBTaG1lbUFsbG9jUmF3KFNpemUgc2l6 ZSwgU2l6ZSAqYWxsb2NhdGVkX3NpemUpCiAJcmV0dXJuIG5ld1NwYWNlOwogfQogCitib29sCitT aG1lbVN0cnVjdEFkZHJJc1ZhbGlkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmFkZHIp Cit7CisJU2htZW1JbmRleEVudCAqcmVzdWx0OworCWJvb2wgZm91bmQ7CisJaW50IHNlZ21lbnRf aWQ7CisKKwlMV0xvY2tBY3F1aXJlKFNobWVtSW5kZXhMb2NrLCBMV19TSEFSRUQpOworCXJlc3Vs dCA9IChTaG1lbUluZGV4RW50ICopCisJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhB U0hfRklORCwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCXsKKwkJTFdMb2NrUmVsZWFzZShTaG1l bUluZGV4TG9jayk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJc2VnbWVudF9pZCA9IHJlc3VsdC0+ c2VnbWVudF9pZDsKKwlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKKworCS8qCisJICog VE9ETzogV2UgY291bGQgZG8gYSBiZXR0ZXIgam9iIGhlcmU6IE1ha2Ugc3VyZSB0aGF0IHRoZSBn aXZlbiBhZGRyZXNzIGlzCisJICogd2l0aGluIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUg Z2l2ZW4gc3RydWN0dXJlLgorCSAqLworCXJldHVybiBTaG1lbUFkZHJJc1ZhbGlkKHNlZ21lbnRf aWQsIGFkZHIpOworfQorCiAvKgotICogU2htZW1BZGRySXNWYWxpZCAtLSB0ZXN0IGlmIGFuIGFk ZHJlc3MgcmVmZXJzIHRvIHNoYXJlZCBtZW1vcnkKKyAqIFNobWVtQWRkcklzVmFsaWQKKyAqIAkJ dGVzdCBpZiBhbiBhZGRyZXNzIHJlZmVycyB0byB0aGUgZ2l2ZW4gc2hhcmVkIG1lbW9yeSBzZWdt ZW50LgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9pbnRlciBwb2ludHMgd2l0aGluIHRo ZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuCiAgKi8KLWJvb2wKLVNobWVtQWRkcklzVmFsaWQoY29u c3Qgdm9pZCAqYWRkcikKK3N0YXRpYyBib29sCitTaG1lbUFkZHJJc1ZhbGlkKGludCBzZWdtZW50 X2lkLCBjb25zdCB2b2lkICphZGRyKQogewotCXJldHVybiAoYWRkciA+PSBTaG1lbUJhc2UpICYm IChhZGRyIDwgU2htZW1FbmQpOworCVNobWVtU2VnbWVudCAqc2VnbWVudDsKKwl2b2lkCSAgICpz aG1lbUVuZDsKKworCUFzc2VydChzZWdtZW50X2lkID49IDAgJiYgc2VnbWVudF9pZCA8IE5VTV9N RU1PUllfTUFQUElOR1MpOworCisJc2VnbWVudCA9ICZTZWdtZW50c1tzZWdtZW50X2lkXTsKKwlz aG1lbUVuZCA9IChjaGFyICopIHNlZ21lbnQtPlNobWVtQmFzZSArIHNlZ21lbnQtPlNobWVtU2Vn SGRyLT50b3RhbHNpemU7CisKKwlyZXR1cm4gKGFkZHIgPj0gc2VnbWVudC0+U2htZW1CYXNlKSAm JiAoYWRkciA8IHNobWVtRW5kKTsKIH0KIAogLyoKQEAgLTU1Niw2ICs4NjgsOSBAQCBzaG1lbV9o YXNoX2F0dGFjaCh2b2lkICphcmcpCiAgKiBOb3RlOiBiZWZvcmUgUG9zdGdyZXMgOS4wLCB0aGlz IGZ1bmN0aW9uIHJldHVybmVkIE5VTEwgZm9yIHNvbWUgZmFpbHVyZQogICogY2FzZXMuICBOb3cs IGl0IGFsd2F5cyB0aHJvd3MgZXJyb3IgaW5zdGVhZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVj awogICogZm9yIE5VTEwuCisgKgorICogU2VlIHByb2xvZ3VlIG9mIFNobWVtQWxsb2NOb0Vycm9y IGZvciBleHBsYW5hdGlvbiBhYm91dCBsYWNrIG9mIHNlZ21lbnRfaWQKKyAqIHBhcmFtZXRlci4K ICAqLwogSFRBQiAqCiBTaG1lbUluaXRIYXNoKGNvbnN0IGNoYXIgKm5hbWUsCQkvKiB0YWJsZSBz dHJpbmcgbmFtZSBmb3Igc2htZW0gaW5kZXggKi8KQEAgLTU3OSw5ICs4OTQsOSBAQCBTaG1lbUlu aXRIYXNoKGNvbnN0IGNoYXIgKm5hbWUsCQkvKiB0YWJsZSBzdHJpbmcgbmFtZSBmb3Igc2htZW0g aW5kZXggKi8KIAloYXNoX2ZsYWdzIHw9IEhBU0hfU0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBI QVNIX0RJUlNJWkU7CiAKIAkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLwotCWxv Y2F0aW9uID0gU2htZW1Jbml0U3RydWN0KG5hbWUsCi0JCQkJCQkJICAgaGFzaF9nZXRfc2hhcmVk X3NpemUoaW5mb1AsIGhhc2hfZmxhZ3MpLAotCQkJCQkJCSAgICZmb3VuZCk7CisJbG9jYXRpb24g PSBTaG1lbUluaXRTdHJ1Y3RJblNlZ21lbnQobmFtZSwKKwkJCQkJCQkJCQloYXNoX2dldF9zaGFy ZWRfc2l6ZShpbmZvUCwgaGFzaF9mbGFncyksCisJCQkJCQkJCQkJJmZvdW5kLCBtYWluX3NlZ19p ZCk7CiAKIAkvKgogCSAqIGlmIGl0IGFscmVhZHkgZXhpc3RzLCBhdHRhY2ggdG8gaXQgcmF0aGVy IHRoYW4gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKQEAgLTYxMSwxOCArOTI2LDM4IEBAIFNobWVt SW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZvciBzaG1l bSBpbmRleCAqLwogICoJTm90ZTogYmVmb3JlIFBvc3RncmVzIDkuMCwgdGhpcyBmdW5jdGlvbiBy ZXR1cm5lZCBOVUxMIGZvciBzb21lIGZhaWx1cmUKICAqCWNhc2VzLiAgTm93LCBpdCBhbHdheXMg dGhyb3dzIGVycm9yIGluc3RlYWQsIHNvIGNhbGxlcnMgbmVlZCBub3QgY2hlY2sKICAqCWZvciBO VUxMLgorICoKKyAqIFRPRE86IE9uY2Ugd2UgdXNlIFNobWVtUmVnaXN0ZXJTdHJ1Y3QgZm9yIGFs bCBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMsIHdlCisgKiB3b24ndCBuZWVkIHRoaXMgZnVuY3Rp b24gYW55bW9yZTsgbm90IGF0IGxlYXN0IGluIHRoaXMgZm9ybS4gQW5kIHBvc3NpYmx5IG5leHQg YXMgd2VsbC4KICAqLwogdm9pZCAqCiBTaG1lbUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwg U2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKK3sKKwlyZXR1cm4gU2htZW1Jbml0U3RydWN0SW5T ZWdtZW50KG5hbWUsIHNpemUsIGZvdW5kUHRyLCBtYWluX3NlZ19pZCk7Cit9CisKK3ZvaWQgKgor U2htZW1Jbml0U3RydWN0SW5TZWdtZW50KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9v bCAqZm91bmRQdHIsIGludCBzZWdtZW50X2lkKQogewogCVNobWVtSW5kZXhFbnQgKnJlc3VsdDsK IAl2b2lkCSAgICpzdHJ1Y3RQdHI7CisJU2htZW1TZWdtZW50ICpzZWdtZW50OworCisJQXNzZXJ0 KHNlZ21lbnRfaWQgPj0gMCAmJiBzZWdtZW50X2lkIDwgbnVtX3JlZ2lzdHJhdGlvbnMpOworCisJ c2VnbWVudCA9ICZTZWdtZW50c1tzZWdtZW50X2lkXTsKIAogCUxXTG9ja0FjcXVpcmUoU2htZW1J bmRleExvY2ssIExXX0VYQ0xVU0lWRSk7CiAKIAlpZiAoIVNobWVtSW5kZXgpCiAJewotCQkvKiBN dXN0IGJlIHRyeWluZyB0byBjcmVhdGUvYXR0YWNoIHRvIFNobWVtSW5kZXggaXRzZWxmICovCisJ CVNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3IgPSBzZWdtZW50LT5TaG1lbUFsbG9j YXRvcjsKKworCQkvKgorCQkgKiBNdXN0IGJlIHRyeWluZyB0byBjcmVhdGUvYXR0YWNoIHRvIFNo bWVtSW5kZXggaXRzZWxmIGluIHRoZSBtYWluCisJCSAqIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4K KwkJICovCisJCUFzc2VydChzZWdtZW50X2lkID09IG1haW5fc2VnX2lkKTsKIAkJQXNzZXJ0KHN0 cmNtcChuYW1lLCAiU2htZW1JbmRleCIpID09IDApOwogCiAJCWlmIChJc1VuZGVyUG9zdG1hc3Rl cikKQEAgLTY0Myw3ICs5NzgsNyBAQCBTaG1lbUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwg U2l6ZSBzaXplLCBib29sICpmb3VuZFB0cikKIAkJCSAqIHByb2Nlc3MgY2FuIGJlIGFjY2Vzc2lu ZyBzaGFyZWQgbWVtb3J5IHlldC4KIAkJCSAqLwogCQkJQXNzZXJ0KFNobWVtQWxsb2NhdG9yLT5p bmRleCA9PSBOVUxMKTsKLQkJCXN0cnVjdFB0ciA9IFNobWVtQWxsb2Moc2l6ZSk7CisJCQlzdHJ1 Y3RQdHIgPSBTaG1lbUFsbG9jSW50ZXJuYWwoc2VnbWVudCwgc2l6ZSk7CiAJCQlTaG1lbUFsbG9j YXRvci0+aW5kZXggPSBzdHJ1Y3RQdHI7CiAJCQkqZm91bmRQdHIgPSBmYWxzZTsKIAkJfQpAQCAt NjYwLDggKzk5NSw4IEBAIFNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBTaXplIHNp emUsIGJvb2wgKmZvdW5kUHRyKQogCQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKIAkJ ZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJ CSBlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3IgZGF0YSBzdHJ1 Y3R1cmUgXCIlc1wiIiwKLQkJCQkJCW5hbWUpKSk7CisJCQkJIGVycm1zZygiY291bGQgbm90IGNy ZWF0ZSBTaG1lbUluZGV4IGVudHJ5IGZvciBkYXRhIHN0cnVjdHVyZSBcIiVzXCIgaW4gc2VnbWVu dCAlZCIsCisJCQkJCQluYW1lLCBzZWdtZW50X2lkKSkpOwogCX0KIAogCWlmICgqZm91bmRQdHIp CkBAIC02ODYsNyArMTAyMSw3IEBAIFNobWVtSW5pdFN0cnVjdChjb25zdCBjaGFyICpuYW1lLCBT aXplIHNpemUsIGJvb2wgKmZvdW5kUHRyKQogCQlTaXplCQlhbGxvY2F0ZWRfc2l6ZTsKIAogCQkv KiBJdCBpc24ndCBpbiB0aGUgdGFibGUgeWV0LiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAq LwotCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KHNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJ CXN0cnVjdFB0ciA9IFNobWVtQWxsb2NSYXcoc2VnbWVudCwgc2l6ZSwgJmFsbG9jYXRlZF9zaXpl KTsKIAkJaWYgKHN0cnVjdFB0ciA9PSBOVUxMKQogCQl7CiAJCQkvKiBvdXQgb2YgbWVtb3J5OyBy ZW1vdmUgdGhlIGZhaWxlZCBTaG1lbUluZGV4IGVudHJ5ICovCkBAIC03MDEsMTEgKzEwMzYsMTIg QEAgU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91 bmRQdHIpCiAJCXJlc3VsdC0+c2l6ZSA9IHNpemU7CiAJCXJlc3VsdC0+YWxsb2NhdGVkX3NpemUg PSBhbGxvY2F0ZWRfc2l6ZTsKIAkJcmVzdWx0LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKwkJcmVz dWx0LT5zZWdtZW50X2lkID0gc2VnbWVudF9pZDsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKFNobWVt SW5kZXhMb2NrKTsKIAotCUFzc2VydChTaG1lbUFkZHJJc1ZhbGlkKHN0cnVjdFB0cikpOworCUFz c2VydChTaG1lbUFkZHJJc1ZhbGlkKHNlZ21lbnRfaWQsIHN0cnVjdFB0cikpOwogCiAJQXNzZXJ0 KHN0cnVjdFB0ciA9PSAodm9pZCAqKSBDQUNIRUxJTkVBTElHTihzdHJ1Y3RQdHIpKTsKIApAQCAt NzQzLDE4ICsxMDc5LDM1IEBAIG11bF9zaXplKFNpemUgczEsIFNpemUgczIpCiAJcmV0dXJuIHJl c3VsdDsKIH0KIAorLyoKKyAqIFJvdW5kIHVwIHRoZSBnaXZlbiBzaXplIHRvIHRoZSBuZXh0IG11 bHRpcGxlIG9mIHRoZSBnaXZlbiBhbGlnbm1lbnQsIGNoZWNraW5nCisgKiBmb3Igb3ZlcmZsb3cu CisgKi8KK1NpemUKK2FsaWduX3NpemUoU2l6ZSBzaXplLCBTaXplIGFsaWdubWVudCkKK3sKKwor CUFzc2VydChhbGlnbm1lbnQgIT0gMCk7CisKKwlpZiAoc2l6ZSAlIGFsaWdubWVudCA9PSAwKQor CQlyZXR1cm4gc2l6ZTsKKwlyZXR1cm4gYWRkX3NpemUoc2l6ZSwgYWxpZ25tZW50IC0gKHNpemUg JSBhbGlnbm1lbnQpKTsKK30KKwogLyogU1FMIFNSRiBzaG93aW5nIGFsbG9jYXRlZCBzaGFyZWQg bWVtb3J5ICovCiBEYXR1bQogcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zKFBHX0ZVTkNUSU9OX0FS R1MpCiB7Ci0jZGVmaW5lIFBHX0dFVF9TSE1FTV9TSVpFU19DT0xTIDQKKyNkZWZpbmUgUEdfR0VU X1NITUVNX1NJWkVTX0NPTFMgNQogCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJ bmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKIAlIQVNIX1NFUV9TVEFUVVMgaHN0YXQ7CiAJU2ht ZW1JbmRleEVudCAqZW50OwotCVNpemUJCW5hbWVkX2FsbG9jYXRlZCA9IDA7CisJU2l6ZQkJKm5h bWVkX2FsbG9jYXRlZDsKIAlEYXR1bQkJdmFsdWVzW1BHX0dFVF9TSE1FTV9TSVpFU19DT0xTXTsK IAlib29sCQludWxsc1tQR19HRVRfU0hNRU1fU0laRVNfQ09MU107CisJaW50CQkJaTsKIAorCW5h bWVkX2FsbG9jYXRlZCA9IHBhbGxvYzAoc2l6ZW9mKFNpemUpICogbnVtX3NlZ19yZWdpc3RyYXRp b25zKTsKIAlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CiAKIAlMV0xvY2tBY3F1aXJl KFNobWVtSW5kZXhMb2NrLCBMV19TSEFSRUQpOwpAQCAtNzY1LDMwICsxMTE4LDQ5IEBAIHBnX2dl dF9zaG1lbV9hbGxvY2F0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCW1lbXNldChudWxscywgMCwg c2l6ZW9mKG51bGxzKSk7CiAJd2hpbGUgKChlbnQgPSAoU2htZW1JbmRleEVudCAqKSBoYXNoX3Nl cV9zZWFyY2goJmhzdGF0KSkgIT0gTlVMTCkKIAl7CisJCVNobWVtU2VnbWVudCAqc2VnbWVudCA9 ICZTZWdtZW50c1tlbnQtPnNlZ21lbnRfaWRdOworCQlQR1NobWVtSGVhZGVyICpzaG1oZHIgPSBz ZWdtZW50LT5TaG1lbVNlZ0hkcjsKKwogCQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KGVudC0+a2V5KTsKLQkJdmFsdWVzWzFdID0gSW50NjRHZXREYXR1bSgoY2hhciAqKSBlbnQtPmxv Y2F0aW9uIC0gKGNoYXIgKikgU2htZW1TZWdIZHIpOwotCQl2YWx1ZXNbMl0gPSBJbnQ2NEdldERh dHVtKGVudC0+c2l6ZSk7Ci0JCXZhbHVlc1szXSA9IEludDY0R2V0RGF0dW0oZW50LT5hbGxvY2F0 ZWRfc2l6ZSk7Ci0JCW5hbWVkX2FsbG9jYXRlZCArPSBlbnQtPmFsbG9jYXRlZF9zaXplOworCQl2 YWx1ZXNbMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHNlZ21lbnQtPlNobWVtU2VnbWVudE5hbWUp OworCQl2YWx1ZXNbMl0gPSBJbnQ2NEdldERhdHVtKChjaGFyICopIGVudC0+bG9jYXRpb24gLSAo Y2hhciAqKSBzaG1oZHIpOworCQl2YWx1ZXNbM10gPSBJbnQ2NEdldERhdHVtKGVudC0+c2l6ZSk7 CisJCXZhbHVlc1s0XSA9IEludDY0R2V0RGF0dW0oZW50LT5hbGxvY2F0ZWRfc2l6ZSk7CisJCW5h bWVkX2FsbG9jYXRlZFtlbnQtPnNlZ21lbnRfaWRdICs9IGVudC0+YWxsb2NhdGVkX3NpemU7CiAK IAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVz YywKIAkJCQkJCQkgdmFsdWVzLCBudWxscyk7CiAJfQogCiAJLyogb3V0cHV0IHNoYXJlZCBtZW1v cnkgYWxsb2NhdGVkIGJ1dCBub3QgY291bnRlZCB2aWEgdGhlIHNobWVtIGluZGV4ICovCi0JdmFs dWVzWzBdID0gQ1N0cmluZ0dldFRleHREYXR1bSgiPGFub255bW91cz4iKTsKLQludWxsc1sxXSA9 IHRydWU7Ci0JdmFsdWVzWzJdID0gSW50NjRHZXREYXR1bShTaG1lbUFsbG9jYXRvci0+ZnJlZV9v ZmZzZXQgLSBuYW1lZF9hbGxvY2F0ZWQpOwotCXZhbHVlc1szXSA9IHZhbHVlc1syXTsKLQl0dXBs ZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1 ZXMsIG51bGxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NlZ19yZWdpc3RyYXRpb25zOyBpKysp CisJeworCQlTaG1lbVNlZ21lbnQgKnNlZ21lbnQgPSAmU2VnbWVudHNbaV07CisJCVNobWVtQWxs b2NhdG9yRGF0YSAqU2htZW1BbGxvY2F0b3IgPSBzZWdtZW50LT5TaG1lbUFsbG9jYXRvcjsKKwor CQl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKCI8YW5vbnltb3VzPiIpOworCQl2YWx1 ZXNbMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHNlZ21lbnQtPlNobWVtU2VnbWVudE5hbWUpOwor CQludWxsc1syXSA9IHRydWU7CisJCXZhbHVlc1szXSA9IEludDY0R2V0RGF0dW0oU2htZW1BbGxv Y2F0b3ItPmZyZWVfb2Zmc2V0IC0gbmFtZWRfYWxsb2NhdGVkW2ldKTsKKwkJdmFsdWVzWzRdID0g dmFsdWVzWzNdOworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNp bmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwl9CiAKIAkvKiBvdXRwdXQgYXMtb2YteWV0 IHVudXNlZCBzaGFyZWQgbWVtb3J5ICovCi0JbnVsbHNbMF0gPSB0cnVlOwotCXZhbHVlc1sxXSA9 IEludDY0R2V0RGF0dW0oU2htZW1BbGxvY2F0b3ItPmZyZWVfb2Zmc2V0KTsKLQludWxsc1sxXSA9 IGZhbHNlOwotCXZhbHVlc1syXSA9IEludDY0R2V0RGF0dW0oU2htZW1TZWdIZHItPnRvdGFsc2l6 ZSAtIFNobWVtQWxsb2NhdG9yLT5mcmVlX29mZnNldCk7Ci0JdmFsdWVzWzNdID0gdmFsdWVzWzJd OwotCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsIHZhbHVlcywgbnVsbHMpOworCW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisJ Zm9yIChpID0gMDsgaSA8IG51bV9zZWdfcmVnaXN0cmF0aW9uczsgaSsrKQorCXsKKwkJU2htZW1T ZWdtZW50ICpzZWdtZW50ID0gJlNlZ21lbnRzW2ldOworCQlQR1NobWVtSGVhZGVyICpzaG1oZHIg PSBzZWdtZW50LT5TaG1lbVNlZ0hkcjsKKwkJU2htZW1BbGxvY2F0b3JEYXRhICpTaG1lbUFsbG9j YXRvciA9IHNlZ21lbnQtPlNobWVtQWxsb2NhdG9yOworCisJCW51bGxzWzBdID0gdHJ1ZTsKKwkJ dmFsdWVzWzFdID0gQ1N0cmluZ0dldFRleHREYXR1bShzZWdtZW50LT5TaG1lbVNlZ21lbnROYW1l KTsKKwkJdmFsdWVzWzJdID0gSW50NjRHZXREYXR1bShTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZz ZXQpOworCQl2YWx1ZXNbM10gPSBJbnQ2NEdldERhdHVtKHNobWhkci0+dG90YWxzaXplIC0gU2ht ZW1BbGxvY2F0b3ItPmZyZWVfb2Zmc2V0KTsKKwkJdmFsdWVzWzRdID0gdmFsdWVzWzNdOworCQl0 dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2 YWx1ZXMsIG51bGxzKTsKKwl9CiAKIAlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKIApA QCAtODEzLDcgKzExODUsNyBAQCBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnNfbnVtYShQR19GVU5D VElPTl9BUkdTKQogCVNpemUJCW9zX3BhZ2Vfc2l6ZTsKIAl2b2lkCSAgKipwYWdlX3B0cnM7CiAJ aW50CQkgICAqcGFnZXNfc3RhdHVzOwotCXVpbnQ2NAkJc2htX3RvdGFsX3BhZ2VfY291bnQsCisJ dWludDY0CQlzaG1fdG90YWxfcGFnZV9jb3VudCA9IDAsCiAJCQkJc2htX2VudF9wYWdlX2NvdW50 LAogCQkJCW1heF9ub2RlczsKIAlTaXplCSAgICpub2RlczsKQEAgLTg0OCw3ICsxMjIwLDEzIEBA IHBnX2dldF9zaG1lbV9hbGxvY2F0aW9uc19udW1hKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICogdGhp cyBpcyBub3QgdmVyeSBsaWtlbHksIGFuZCBtb3Jlb3ZlciB3ZSBoYXZlIG1vcmUgZW50cmllcywg ZWFjaCBvZgogCSAqIHRoZW0gdXNpbmcgb25seSBmcmFjdGlvbiBvZiB0aGUgdG90YWwgcGFnZXMu CiAJICovCi0Jc2htX3RvdGFsX3BhZ2VfY291bnQgPSAoU2htZW1TZWdIZHItPnRvdGFsc2l6ZSAv IG9zX3BhZ2Vfc2l6ZSkgKyAxOworCWZvciAoaW50IHNlZ21lbnQgPSAwOyBzZWdtZW50IDwgbnVt X3NlZ19yZWdpc3RyYXRpb25zOyBzZWdtZW50KyspCisJeworCQlQR1NobWVtSGVhZGVyICpzaG1o ZHIgPSBTZWdtZW50c1tzZWdtZW50XS5TaG1lbVNlZ0hkcjsKKworCQlzaG1fdG90YWxfcGFnZV9j b3VudCArPSAoc2htaGRyLT50b3RhbHNpemUgLyBvc19wYWdlX3NpemUpICsgMTsKKwl9CisKIAlw YWdlX3B0cnMgPSBwYWxsb2MwX2FycmF5KHZvaWQgKiwgc2htX3RvdGFsX3BhZ2VfY291bnQpOwog CXBhZ2VzX3N0YXR1cyA9IHBhbGxvY19hcnJheShpbnQsIHNobV90b3RhbF9wYWdlX2NvdW50KTsK IApAQCAtOTg5LDcgKzEzNjcsNyBAQCBwZ19nZXRfc2htZW1fcGFnZXNpemUodm9pZCkKIAlBc3Nl cnQoaHVnZV9wYWdlc19zdGF0dXMgIT0gSFVHRV9QQUdFU19VTktOT1dOKTsKIAogCWlmIChodWdl X3BhZ2VzX3N0YXR1cyA9PSBIVUdFX1BBR0VTX09OKQotCQlHZXRIdWdlUGFnZVNpemUoJm9zX3Bh Z2Vfc2l6ZSwgTlVMTCk7CisJCUdldEh1Z2VQYWdlU2l6ZSgmb3NfcGFnZV9zaXplLCBOVUxMLCBO VUxMKTsKIAogCXJldHVybiBvc19wYWdlX3NpemU7CiB9CkBAIC05OTksMyArMTM3Nyw0NSBAQCBw Z19udW1hX2F2YWlsYWJsZShQR19GVU5DVElPTl9BUkdTKQogewogCVBHX1JFVFVSTl9CT09MKHBn X251bWFfaW5pdCgpICE9IC0xKTsKIH0KKworLyogU1FMIFNSRiBzaG93aW5nIHNoYXJlZCBtZW1v cnkgc2VnbWVudHMgKi8KK0RhdHVtCitwZ19nZXRfc2htZW1fc2VnbWVudHMoUEdfRlVOQ1RJT05f QVJHUykKK3sKKyNkZWZpbmUgUEdfR0VUX1NITUVNX1NFR1NfQ09MUyA1CisJUmV0dXJuU2V0SW5m byAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCURhdHVt CQl2YWx1ZXNbUEdfR0VUX1NITUVNX1NFR1NfQ09MU107CisJYm9vbAkJbnVsbHNbUEdfR0VUX1NI TUVNX1NFR1NfQ09MU107CisJaW50CQkJaTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZv LCAwKTsKKworCS8qIG91dHB1dCBhbGwgYWxsb2NhdGVkIGVudHJpZXMgKi8KKwlmb3IgKGkgPSAw OyBpIDwgbnVtX3NlZ19yZWdpc3RyYXRpb25zOyBpKyspCisJeworCQlTaG1lbVNlZ21lbnQgKnNl Z21lbnQgPSAmU2VnbWVudHNbaV07CisJCVBHU2htZW1IZWFkZXIgKnNobWhkciA9IHNlZ21lbnQt PlNobWVtU2VnSGRyOworCQlTaG1lbUFsbG9jYXRvckRhdGEgKlNobWVtQWxsb2NhdG9yID0gc2Vn bWVudC0+U2htZW1BbGxvY2F0b3I7CisJCWludAkJCWo7CisKKwkJaWYgKHNobWhkciA9PSBOVUxM KQorCQl7CisJCQlmb3IgKGogPSAwOyBqIDwgUEdfR0VUX1NITUVNX1NFR1NfQ09MUzsgaisrKQor CQkJCW51bGxzW2pdID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW1lbXNldChudWxscywg MCwgc2l6ZW9mKG51bGxzKSk7CisJCQl2YWx1ZXNbMF0gPSBJbnQzMkdldERhdHVtKGkpOworCQkJ dmFsdWVzWzFdID0gQ1N0cmluZ0dldFRleHREYXR1bShzZWdtZW50LT5TaG1lbVNlZ21lbnROYW1l KTsKKwkJCXZhbHVlc1syXSA9IEludDY0R2V0RGF0dW0oc2htaGRyLT50b3RhbHNpemUpOworCQkJ dmFsdWVzWzNdID0gSW50NjRHZXREYXR1bShTaG1lbUFsbG9jYXRvci0+ZnJlZV9vZmZzZXQpOwor CQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bShzaG1oZHItPnJlc2VydmVkc2l6ZSk7CisJCX0K KworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXRE ZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1cm4gKERhdHVtKSAwOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IGZlNzVlYWQzNTAxLi44ZDIy M2JlZDMyNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtNTk1LDcgKzU5 NSw3IEBAIENyZWF0ZVByZWRYYWN0KHZvaWQpCiBzdGF0aWMgdm9pZAogUmVsZWFzZVByZWRYYWN0 KFNFUklBTElaQUJMRVhBQ1QgKnN4YWN0KQogewotCUFzc2VydChTaG1lbUFkZHJJc1ZhbGlkKHN4 YWN0KSk7CisJQXNzZXJ0KFNobWVtU3RydWN0QWRkcklzVmFsaWQoIlByZWRYYWN0TGlzdCIsIHN4 YWN0KSk7CiAKIAlkbGlzdF9kZWxldGUoJnN4YWN0LT54YWN0TGluayk7CiAJZGxpc3RfcHVzaF90 YWlsKCZQcmVkWGFjdC0+YXZhaWxhYmxlTGlzdCwgJnN4YWN0LT54YWN0TGluayk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdAppbmRleCA4M2Y2NTAxZGYzOC4uNGIyN2YyYTI0NWUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19wcm9jLmRhdApAQCAtODU5Miw4ICs4NTkyLDggQEAKIHsgb2lkID0+ICc1MDUyJywgZGVz Y3IgPT4gJ2FsbG9jYXRpb25zIGZyb20gdGhlIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50JywK ICAgcHJvbmFtZSA9PiAncGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zJywgcHJvcm93cyA9PiAnNTAn LCBwcm9yZXRzZXQgPT4gJ3QnLAogICBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4g J3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAotICBwcm9hbGxhcmd0eXBlcyA9PiAne3RleHQs aW50OCxpbnQ4LGludDh9JywgcHJvYXJnbW9kZXMgPT4gJ3tvLG8sbyxvfScsCi0gIHByb2FyZ25h bWVzID0+ICd7bmFtZSxvZmYsc2l6ZSxhbGxvY2F0ZWRfc2l6ZX0nLAorICBwcm9hbGxhcmd0eXBl cyA9PiAne3RleHQsdGV4dCxpbnQ4LGludDgsaW50OH0nLCBwcm9hcmdtb2RlcyA9PiAne28sbyxv LG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne25hbWUsc2VnbWVudCxvZmYsc2l6ZSxhbGxvY2F0 ZWRfc2l6ZX0nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9zaG1lbV9hbGxvY2F0aW9ucycgfSwKIAog eyBvaWQgPT4gJzQwOTknLCBkZXNjciA9PiAnSXMgTlVNQSBzdXBwb3J0IGF2YWlsYWJsZT8nLApA QCAtODYxNiw2ICs4NjE2LDE0IEBACiAgIHByb2FyZ21vZGVzID0+ICd7byxvLG99JywgcHJvYXJn bmFtZXMgPT4gJ3tuYW1lLHR5cGUsc2l6ZX0nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9kc21fcmVn aXN0cnlfYWxsb2NhdGlvbnMnIH0sCiAKKyMgc2hhcmVkIG1lbW9yeSBzZWdtZW50cworeyBvaWQg PT4gJzUxMDEnLCBkZXNjciA9PiAnc2hhcmVkIG1lbW9yeSBzZWdtZW50cycsCisgIHByb25hbWUg PT4gJ3BnX2dldF9zaG1lbV9zZWdtZW50cycsIHByb3Jvd3MgPT4gJzYnLCBwcm9yZXRzZXQgPT4g J3QnLAorICBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2Fy Z3R5cGVzID0+ICcnLAorICBwcm9hbGxhcmd0eXBlcyA9PiAne2ludDQsdGV4dCxpbnQ4LGludDgs aW50OH0nLCBwcm9hcmdtb2RlcyA9PiAne28sbyxvLG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAn e2lkLG5hbWUsc2l6ZSxmcmVlb2Zmc2V0LHJlc2VydmVkX3NpemV9JywKKyAgcHJvc3JjID0+ICdw Z19nZXRfc2htZW1fc2VnbWVudHMnIH0sCisKICMgbWVtb3J5IGNvbnRleHQgb2YgbG9jYWwgYmFj a2VuZAogeyBvaWQgPT4gJzIyODInLAogICBkZXNjciA9PiAnaW5mb3JtYXRpb24gYWJvdXQgYWxs IG1lbW9yeSBjb250ZXh0cyBvZiBsb2NhbCBiYWNrZW5kJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcGdfc2htZW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcGdfc2htZW0uaApp bmRleCAxMGM3YjA2NTg2MS4uZDBiODkxMGUwYWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcGdfc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3BnX3NobWVtLmgKQEAg LTMxLDcgKzMxLDE0IEBAIHR5cGVkZWYgc3RydWN0IFBHU2htZW1IZWFkZXIJLyogc3RhbmRhcmQg aGVhZGVyIGZvciBhbGwgUG9zdGdyZXMgc2htZW0gKi8KIAlpbnQzMgkJbWFnaWM7CQkJLyogbWFn aWMgIyB0byBpZGVudGlmeSBQb3N0Z3JlcyBzZWdtZW50cyAqLwogI2RlZmluZSBQR1NobWVtTWFn aWMgIDY3OTgzNDg5NAogCXBpZF90CQljcmVhdG9yUElEOwkJLyogUElEIG9mIGNyZWF0aW5nIHBy b2Nlc3MgKHNldCBidXQgdW5yZWFkKSAqLworCisJLyoKKwkgKiBUT0RPOiBXZSBtaWdodCBoYXZl IHRvIHJlbmFtZSB0aGVzZSBmaWVsZHMgdG8gYWxsb2NTaXplIChmb3IgYW1vdW50IG9mCisJICog bWVtb3J5IGFsbG9jYXRlZCBjdXJyZW50bHkgaW4gdGhpcyBzZWdtZW50KSwgbWF4U2l6ZSAoZm9y IG1heGltdW0gc2l6ZQorCSAqIHRoZSBzZWdtZW50IGNhbiBncm93IHRvLikKKwkgKi8KIAlTaXpl CQl0b3RhbHNpemU7CQkvKiB0b3RhbCBzaXplIG9mIHNlZ21lbnQgKi8KKwlTaXplCQlyZXNlcnZl ZHNpemU7CS8qIFNpemUgb2YgdGhlIHJlc2VydmVkIG1hcHBpbmcgKi8KIAlTaXplCQljb250ZW50 X29mZnNldDsgLyogb2Zmc2V0IHRvIHRoZSBkYXRhLCBpLmUuIHNpemUgb2YgdGhpcwogCQkJCQkJ CQkgKiBoZWFkZXIgKi8KIAlkc21faGFuZGxlCWRzbV9jb250cm9sOwkvKiBJRCBvZiBkeW5hbWlj IHNoYXJlZCBtZW1vcnkgY29udHJvbCBzZWcgKi8KQEAgLTQxLDYgKzQ4LDMzIEBAIHR5cGVkZWYg c3RydWN0IFBHU2htZW1IZWFkZXIJLyogc3RhbmRhcmQgaGVhZGVyIGZvciBhbGwgUG9zdGdyZXMg c2htZW0gKi8KICNlbmRpZgogfSBQR1NobWVtSGVhZGVyOwogCisvKgorICogSW5mb3JtYXRpb24g YWJvdXQgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCB0aGF0IGlzIHJlcXVpcmVkIHRvIGJlIHBh c3NlZAorICogZnJvbSB0aGUgUG9zdG1hc3RlciB0byBlYWNoIGJhY2tlbmQuCisgKi8KK3R5cGVk ZWYgc3RydWN0IFBHVXNlZFNobWVtSW5mbworeworCXZvaWQJICAgKlVzZWRTaG1lbVNlZ0FkZHI7 CS8qIFN5c1Ygc2hhcmVkIG1lbW9yeSBmb3IgdGhlIGhlYWRlciAqLworI2lmbmRlZiBXSU4zMgor CXVuc2lnbmVkIGxvbmcgVXNlZFNobWVtU2VnSUQ7CS8qIElQQyBrZXkgKi8KKyNlbHNlCisJdm9p ZAkgICAqU2htZW1Qcm90ZWN0aXZlUmVnaW9uOwkvKiBQcm90ZWN0aXZlIHJlZ2lvbiBmb3IgV2lu ZG93cworCQkJCQkJCQkJCSAqIHNoYXJlZCBtZW1vcnkgKi8KKwlIQU5ETEUJCVVzZWRTaG1lbVNl Z0lEOworI2VuZGlmCit9IFBHVXNlZFNobWVtSW5mbzsKKworLyoKKyAqIFJlc2l6YWJsZSBzaGFy ZWQgbWVtb3J5IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBpbiB0aGVpciBvd24gc2hhcmVkIG1l bW9yeQorICogc2VnbWVudHMuIEZvciBub3cgd2UgYWxsb2NhdGUgYXJyYXlzIHRvIGhvbGQgcHJv cGVydGllcyBvZiBlYWNoIHNlZ21lbnQuIFRoaXMKKyAqIG1hY3JvIGlzIG1heGltdW0gbnVtYmVy IG9mIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIHRoYXQgd2Ugc3VwcG9ydC4KKyAq CisgKiBUT0RPOiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBjaGFuZ2UgdGhpcyBvbi1kZW1hbmQu CisgKi8KKyNkZWZpbmUgTlVNX01FTU9SWV9NQVBQSU5HUyA0CisKK2V4dGVybiBQR0RMTElNUE9S VCBQR1VzZWRTaG1lbUluZm8gVXNlZFNobWVtSW5mb1tOVU1fTUVNT1JZX01BUFBJTkdTXTsKKwog LyogR1VDIHZhcmlhYmxlcyAqLwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBzaGFyZWRfbWVtb3J5 X3R5cGU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGh1Z2VfcGFnZXM7CkBAIC02NCwxNCArOTgs NiBAQCB0eXBlZGVmIGVudW0KIAlTSE1FTV9UWVBFX01NQVAsCiB9CQkJUEdTaG1lbVR5cGU7CiAK LSNpZm5kZWYgV0lOMzIKLWV4dGVybiBQR0RMTElNUE9SVCB1bnNpZ25lZCBsb25nIFVzZWRTaG1l bVNlZ0lEOwotI2Vsc2UKLWV4dGVybiBQR0RMTElNUE9SVCBIQU5ETEUgVXNlZFNobWVtU2VnSUQ7 Ci1leHRlcm4gUEdETExJTVBPUlQgdm9pZCAqU2htZW1Qcm90ZWN0aXZlUmVnaW9uOwotI2VuZGlm Ci1leHRlcm4gUEdETExJTVBPUlQgdm9pZCAqVXNlZFNobWVtU2VnQWRkcjsKLQogI2lmICFkZWZp bmVkKFdJTjMyKSAmJiAhZGVmaW5lZChFWEVDX0JBQ0tFTkQpCiAjZGVmaW5lIERFRkFVTFRfU0hB UkVEX01FTU9SWV9UWVBFIFNITUVNX1RZUEVfTU1BUAogI2VsaWYgIWRlZmluZWQoV0lOMzIpCkBA IC04NSwxMCArMTExLDEzIEBAIGV4dGVybiB2b2lkIFBHU2hhcmVkTWVtb3J5UmVBdHRhY2godm9p ZCk7CiBleHRlcm4gdm9pZCBQR1NoYXJlZE1lbW9yeU5vUmVBdHRhY2godm9pZCk7CiAjZW5kaWYK IAotZXh0ZXJuIFBHU2htZW1IZWFkZXIgKlBHU2hhcmVkTWVtb3J5Q3JlYXRlKFNpemUgc2l6ZSwK K2V4dGVybiBQR1NobWVtSGVhZGVyICpQR1NoYXJlZE1lbW9yeUNyZWF0ZShpbnQgc2VnbWVudF9p ZCwgY29uc3QgY2hhciAqbmFtZSwgIFNpemUgaW5pdF9zaXplLCBTaXplIG1heF9zaXplLAogCQkJ CQkJCQkJCSAgIFBHU2htZW1IZWFkZXIgKipzaGltKTsKIGV4dGVybiBib29sIFBHU2hhcmVkTWVt b3J5SXNJblVzZSh1bnNpZ25lZCBsb25nIGlkMSwgdW5zaWduZWQgbG9uZyBpZDIpOwogZXh0ZXJu IHZvaWQgUEdTaGFyZWRNZW1vcnlEZXRhY2godm9pZCk7Ci1leHRlcm4gdm9pZCBHZXRIdWdlUGFn ZVNpemUoU2l6ZSAqaHVnZXBhZ2VzaXplLCBpbnQgKm1tYXBfZmxhZ3MpOworZXh0ZXJuIHZvaWQg R2V0SHVnZVBhZ2VTaXplKFNpemUgKmh1Z2VwYWdlc2l6ZSwgaW50ICptbWFwX2ZsYWdzLAorCQkJ CQkJCWludCAqbWVtZmRfZmxhZ3MpOworZXh0ZXJuIHZvaWQgUHJlcGFyZUh1Z2VQYWdlcyh2b2lk KTsKK2V4dGVybiBib29sIFBHU2hhcmVkTWVtb3J5UmVzaXplKGludCBzZWdtZW50X2lkLCBjb25z dCBjaGFyICpuYW1lLCBTaXplIG5ld19zaXplKTsKIAogI2VuZGlmCQkJCQkJCS8qIFBHX1NITUVN X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2Uvc2htZW0uaAppbmRleCBjYmQ0ZWY4ZDAzZi4uZDM0NTUzY2ZkN2IgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NobWVtLmgKQEAgLTUwLDYgKzUwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1TdHJ1Y3RE ZXNjCiAJICovCiAJc2l6ZV90CQlleHRyYV9zaXplOwogCisJLyogTWF4aW11bSBzaXplIHRoaXMg c3RydWN0dXJlIGNhbiBncm93IHVwdG8gaW4gZnV0dXJlLiBUaGUgbWVtb3J5IGlzIG5vdCBhbGxv Y2F0ZWQgcmlnaHQgYXdheSBidXQgdGhlIGNvcnJlc3BvbmRpbmcgYWRkcmVzcyBzcGFjZSBpcyBh bGxvY2F0ZWQgc28gdGhhdCBtZW1vcnkgY2FuIGJlIG1hcHBlZCB0byBpdCB3aGVuIHRoZSBzdHJ1 Y3R1cmUgZ3Jvd3MuIFR5cGljYWxseSBzaG91bGQgYmUgdXNlZCBmb3Igc3RydWN0dXJlcyBsaWtl IGJ1ZmZlciBibG9ja3Mgd2hpY2ggbmVlZCBjb250aWd1b3VzIGFuZCBsYXJnZSBtZW1vcnkuICov CisJc2l6ZV90CQltYXhfc2l6ZTsKKwogCS8qIFBvaW50ZXIgdG8gdGhlIHZhcmlhYmxlIHRvIHdo aWNoIHBvaW50ZXIgdG8gdGhpcyBzaGFyZWQgbWVtb3J5IGFyZWEgaXMgYXNzaWduZWQgYWZ0ZXIg YWxsb2NhdGlvbi4gKi8KIAl2b2lkCSAgICoqcHRyOwogfSBTaG1lbVN0cnVjdERlc2M7CkBAIC03 NiwxNCArNzksMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgU2htZW1IYXNoRGVzYwogZXh0ZXJuIFBHRExM SU1QT1JUIHNsb2NrX3QgKlNobWVtTG9jazsKIHR5cGVkZWYgc3RydWN0IFBHU2htZW1IZWFkZXIg UEdTaG1lbUhlYWRlcjsgLyogYXZvaWQgaW5jbHVkaW5nCiAJCQkJCQkJCQkJCSAqIHN0b3JhZ2Uv cGdfc2htZW0uaCBoZXJlICovCi1leHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0b3IoUEdTaG1l bUhlYWRlciAqc2VnaGRyKTsKK2V4dGVybiB2b2lkIEluaXRTaG1lbUFsbG9jYXRvcihpbnQgc2Vn bWVudF9pZCwgY29uc3QgY2hhciAqc2VnbmFtZSwgUEdTaG1lbUhlYWRlciAqc2VnaGRyKTsKIGV4 dGVybiB2b2lkICpTaG1lbUFsbG9jKFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2htZW1BbGxv Y05vRXJyb3IoU2l6ZSBzaXplKTsKLWV4dGVybiBib29sIFNobWVtQWRkcklzVmFsaWQoY29uc3Qg dm9pZCAqYWRkcik7CitleHRlcm4gYm9vbCBTaG1lbVN0cnVjdEFkZHJJc1ZhbGlkKGNvbnN0IGNo YXIgKm5hbWUsIGNvbnN0IHZvaWQgKmFkZHIpOwogZXh0ZXJuIHZvaWQgSW5pdFNobWVtSW5kZXgo dm9pZCk7CiAKIGV4dGVybiB2b2lkIFNobWVtUmVnaXN0ZXJIYXNoKFNobWVtSGFzaERlc2MgKmRl c2MsIEhBU0hDVEwgKmluZm9QLCBpbnQgaGFzaF9mbGFncyk7CiBleHRlcm4gdm9pZCBTaG1lbVJl Z2lzdGVyU3RydWN0KFNobWVtU3RydWN0RGVzYyAqZGVzYyk7CitleHRlcm4gdm9pZCBTaG1lbVJl Z2lzdGVyU2VnbWVudChjb25zdCBjaGFyICpuYW1lLCBTaXplIGluaXRfc2l6ZSwgU2l6ZSBtYXhf c2l6ZSk7CitleHRlcm4gUEdTaG1lbUhlYWRlciAqU2htZW1DcmVhdGVSZWdpc3RlcmVkU2VnbWVu dHModm9pZCk7CisjaWZuZGVmIEVYRUNfQkFDS0VORAorZXh0ZXJuIHZvaWQgU2htZW1SZXNpemVS ZWdpc3RlcmVkKGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgbmV3X3NpemUpOworI2VuZGlmCiAKIC8q IExlZ2FjeSBmdW5jdGlvbnMgKi8KIGV4dGVybiBIVEFCICpTaG1lbUluaXRIYXNoKGNvbnN0IGNo YXIgKm5hbWUsIGludDY0IGluaXRfc2l6ZSwgaW50NjQgbWF4X3NpemUsCkBAIC05Niw2ICsxMDQs NyBAQCBleHRlcm4gdm9pZCBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQodm9pZCk7CiAKIGV4dGVybiBT aXplIGFkZF9zaXplKFNpemUgczEsIFNpemUgczIpOwogZXh0ZXJuIFNpemUgbXVsX3NpemUoU2l6 ZSBzMSwgU2l6ZSBzMik7CitleHRlcm4gU2l6ZSBhbGlnbl9zaXplKFNpemUgc2l6ZSwgU2l6ZSBh bGlnbik7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBTaXplIHBnX2dldF9zaG1lbV9wYWdlc2l6ZSh2 b2lkKTsKIApAQCAtMTE1LDYgKzEyNCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJdm9pZAkgICAqbG9j YXRpb247CQkvKiBsb2NhdGlvbiBpbiBzaGFyZWQgbWVtICovCiAJU2l6ZQkJc2l6ZTsJCQkvKiAj IGJ5dGVzIHJlcXVlc3RlZCBmb3IgdGhlIHN0cnVjdHVyZSAqLwogCVNpemUJCWFsbG9jYXRlZF9z aXplOyAvKiAjIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAqLworCWludAkJCXNlZ21lbnRfaWQ7 CQkvKiBzZWdtZW50IGluIHdoaWNoIHRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkICovCiB9IFNo bWVtSW5kZXhFbnQ7CiAKICNlbmRpZgkJCQkJCQkvKiBTSE1FTV9IICovCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRl eCA0NGM3MTYzYzFjZC4uYTVkZjZlZGFlMTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTQsNiArMTQsNyBA QCBTVUJESVJTID0gXAogCQkgIGxpYnBxX3BpcGVsaW5lIFwKIAkJICBvYXV0aF92YWxpZGF0b3Ig XAogCQkgIHBsc2FtcGxlIFwKKwkJICByZXNpemFibGVfc2htZW0gXAogCQkgIHNwZ2lzdF9uYW1l X29wcyBcCiAJCSAgdGVzdF9haW8gXAogCQkgIHRlc3RfYmluYXJ5aGVhcCBcCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5i dWlsZAppbmRleCAyNjM0YTUxOTkzNS4uOTYxYmI2Mjc1OWQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L21vZHVsZXMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApA QCAtMTMsNiArMTMsNyBAQCBzdWJkaXIoJ2xpYnBxX3BpcGVsaW5lJykKIHN1YmRpcignbmJ0cmVl JykKIHN1YmRpcignb2F1dGhfdmFsaWRhdG9yJykKIHN1YmRpcigncGxzYW1wbGUnKQorc3ViZGly KCdyZXNpemFibGVfc2htZW0nKQogc3ViZGlyKCdzcGdpc3RfbmFtZV9vcHMnKQogc3ViZGlyKCdz c2xfcGFzc3BocmFzZV9jYWxsYmFjaycpCiBzdWJkaXIoJ3Rlc3RfYWlvJykKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9k dWxlcy9yZXNpemFibGVfc2htZW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmFkMmYwNDBiMmYwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9yZXNpemFibGVfc2htZW0vTWFrZWZpbGUKQEAgLTAsMCArMSwyMyBAQAorIyBzcmMvdGVz dC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9NYWtlZmlsZQorCitNT0RVTEVTID0gcmVzaXphYmxl X3NobWVtCitJU09MQVRJT04gPSByZXNpemFibGVfc2htZW0KKworRVhURU5TSU9OID0gcmVzaXph YmxlX3NobWVtCitEQVRBID0gcmVzaXphYmxlX3NobWVtLS0xLjAuc3FsCitQR0ZJTEVERVNDID0g InJlc2l6YWJsZV9zaG1lbSAtIHRlc3QgbW9kdWxlIGZvciByZXNpemFibGUgc2hhcmVkIG1lbW9y eSIKKworIyBUaGlzIHRlc3QgcmVxdWlyZXMgbGlicmFyeSB0byBiZSBsb2FkZWQgYXQgdGhlIHNl cnZlciBzdGFydCwgc28gZGlzYWJsZQorIyBpbnN0YWxsY2hlY2sKK05PX0lOU1RBTExDSEVDSyA9 IDEKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNo ZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9 IHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtCit0b3BfYnVpbGRkaXIgPSAuLi8uLi8u Li8uLgoraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVk ZSAkKHRvcF9zcmNkaXIpL3NyYy9tYWtlZmlsZXMvcGd4cy5taworZW5kaWYKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL2V4cGVjdGVkL3Jlc2l6YWJsZV9zaG1l bS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9leHBlY3RlZC9yZXNpemFi bGVfc2htZW0ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ODI3 ZTdhZDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3No bWVtL2V4cGVjdGVkL3Jlc2l6YWJsZV9zaG1lbS5vdXQKQEAgLTAsMCArMSw4OSBAQAorUGFyc2Vk IHRlc3Qgc3BlYyB3aXRoIDMgc2Vzc2lvbnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHppYSB6 aXMgczF3MjA0OCBzMnIyMDQ4IHpzODE5MiB6aWEgemlzIHMydzgxOTIgczFyODE5MiB6czYxNDQg emlhIHppcyBzMXc2MTQ0IHMycjYxNDQKK3N0ZXAgemlhOiBTRUxFQ1QgbmFtZSwgc2l6ZSwgYWxs b2NhdGVkX3NpemUgRlJPTSBwZ19zaG1lbV9hbGxvY2F0aW9ucyBXSEVSRSBuYW1lID0gJ3Jlc2l6 YWJsZV9zaG1lbSc7CituYW1lICAgICAgICAgICB8c2l6ZXxhbGxvY2F0ZWRfc2l6ZQorLS0tLS0t LS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tLS0KK3Jlc2l6YWJsZV9zaG1lbXw4MTk2fCAgICAg ICAgICA4MzIwCisoMSByb3cpCisKK3N0ZXAgemlzOiBTRUxFQ1QgbmFtZSwgc2l6ZSwgZnJlZW9m ZnNldCwgcmVzZXJ2ZWRfc2l6ZSBGUk9NIHBnX3NobWVtX3NlZ21lbnRzIFdIRVJFIG5hbWUgPSAn cmVzaXphYmxlX3NobWVtJzsKK25hbWUgICAgICAgICAgIHwgc2l6ZXxmcmVlb2Zmc2V0fHJlc2Vy dmVkX3NpemUKKy0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0K K3Jlc2l6YWJsZV9zaG1lbXwxNjM4NHwgICAgICA4NDQ4fCAgICAgICAgNDA5NjAKKygxIHJvdykK Kworc3RlcCBzMXcyMDQ4OiBTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3dyaXRlKDAsIDEwMCksIHJl c2l6YWJsZV9zaG1lbV93cml0ZSgyMDQ3LCAyMDApOworcmVzaXphYmxlX3NobWVtX3dyaXRlfHJl c2l6YWJsZV9zaG1lbV93cml0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIAorKDEg cm93KQorCitzdGVwIHMycjIwNDg6IFNFTEVDVCByZXNpemFibGVfc2htZW1fcmVhZCgwKSwgcmVz aXphYmxlX3NobWVtX3JlYWQoMjA0Nyk7CityZXNpemFibGVfc2htZW1fcmVhZHxyZXNpemFibGVf c2htZW1fcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgICAgMTAwfCAgICAgICAgICAgICAgICAgMjAwCisoMSByb3cpCisKK3Jlc2l6 ZXI6IE5PVElDRTogIHJlc2l6ZWQgdG8gODE5MiBlbnRyaWVzICgzMjc3MiBieXRlcywgd2FzIDIw NDggZW50cmllcykKK3N0ZXAgenM4MTkyOiBTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3Jlc2l6ZSg4 MTkyKTsKK3Jlc2l6YWJsZV9zaG1lbV9yZXNpemUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworc3RlcCB6aWE6IFNFTEVDVCBuYW1lLCBz aXplLCBhbGxvY2F0ZWRfc2l6ZSBGUk9NIHBnX3NobWVtX2FsbG9jYXRpb25zIFdIRVJFIG5hbWUg PSAncmVzaXphYmxlX3NobWVtJzsKK25hbWUgICAgICAgICAgIHwgc2l6ZXxhbGxvY2F0ZWRfc2l6 ZQorLS0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0tLS0tCityZXNpemFibGVfc2htZW18 MzI3NzJ8ICAgICAgICAgMzI4OTYKKygxIHJvdykKKworc3RlcCB6aXM6IFNFTEVDVCBuYW1lLCBz aXplLCBmcmVlb2Zmc2V0LCByZXNlcnZlZF9zaXplIEZST00gcGdfc2htZW1fc2VnbWVudHMgV0hF UkUgbmFtZSA9ICdyZXNpemFibGVfc2htZW0nOworbmFtZSAgICAgICAgICAgfCBzaXplfGZyZWVv ZmZzZXR8cmVzZXJ2ZWRfc2l6ZQorLS0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQorcmVzaXphYmxlX3NobWVtfDQwOTYwfCAgICAgMzMwMjR8ICAgICAgICA0MDk2 MAorKDEgcm93KQorCitzdGVwIHMydzgxOTI6IFNFTEVDVCByZXNpemFibGVfc2htZW1fd3JpdGUo ODE5MSwgNTAwKSwgcmVzaXphYmxlX3NobWVtX3dyaXRlKDIwNDgsIDMwMCk7CityZXNpemFibGVf c2htZW1fd3JpdGV8cmVzaXphYmxlX3NobWVtX3dyaXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgczFyODE5MjogU0VMRUNUIHJlc2l6YWJsZV9zaG1l bV9yZWFkKDApLCByZXNpemFibGVfc2htZW1fcmVhZCgyMDQ3KSwgcmVzaXphYmxlX3NobWVtX3Jl YWQoMjA0OCksIHJlc2l6YWJsZV9zaG1lbV9yZWFkKDgxOTEpOworcmVzaXphYmxlX3NobWVtX3Jl YWR8cmVzaXphYmxlX3NobWVtX3JlYWR8cmVzaXphYmxlX3NobWVtX3JlYWR8cmVzaXphYmxlX3No bWVtX3JlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgIDEw MHwgICAgICAgICAgICAgICAgIDIwMHwgICAgICAgICAgICAgICAgIDMwMHwgICAgICAgICAgICAg ICAgIDUwMAorKDEgcm93KQorCityZXNpemVyOiBOT1RJQ0U6ICByZXNpemVkIHRvIDYxNDQgZW50 cmllcyAoMjQ1ODAgYnl0ZXMsIHdhcyA4MTkyIGVudHJpZXMpCitzdGVwIHpzNjE0NDogU0VMRUNU IHJlc2l6YWJsZV9zaG1lbV9yZXNpemUoNjE0NCk7CityZXNpemFibGVfc2htZW1fcmVzaXplCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisK K3N0ZXAgemlhOiBTRUxFQ1QgbmFtZSwgc2l6ZSwgYWxsb2NhdGVkX3NpemUgRlJPTSBwZ19zaG1l bV9hbGxvY2F0aW9ucyBXSEVSRSBuYW1lID0gJ3Jlc2l6YWJsZV9zaG1lbSc7CituYW1lICAgICAg ICAgICB8IHNpemV8YWxsb2NhdGVkX3NpemUKKy0tLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0t LS0tLS0tLQorcmVzaXphYmxlX3NobWVtfDI0NTgwfCAgICAgICAgIDI0NzA0CisoMSByb3cpCisK K3N0ZXAgemlzOiBTRUxFQ1QgbmFtZSwgc2l6ZSwgZnJlZW9mZnNldCwgcmVzZXJ2ZWRfc2l6ZSBG Uk9NIHBnX3NobWVtX3NlZ21lbnRzIFdIRVJFIG5hbWUgPSAncmVzaXphYmxlX3NobWVtJzsKK25h bWUgICAgICAgICAgIHwgc2l6ZXxmcmVlb2Zmc2V0fHJlc2VydmVkX3NpemUKKy0tLS0tLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KK3Jlc2l6YWJsZV9zaG1lbXwzMjc2 OHwgICAgIDI0ODMyfCAgICAgICAgNDA5NjAKKygxIHJvdykKKworc3RlcCBzMXc2MTQ0OiBTRUxF Q1QgcmVzaXphYmxlX3NobWVtX3dyaXRlKDYxNDMsIDk5OSk7CityZXNpemFibGVfc2htZW1fd3Jp dGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cp CisKK3N0ZXAgczJyNjE0NDogU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9yZWFkKDApLCByZXNpemFi bGVfc2htZW1fcmVhZCgyMDQ3KSwgcmVzaXphYmxlX3NobWVtX3JlYWQoMjA0OCksIHJlc2l6YWJs ZV9zaG1lbV9yZWFkKDYxNDMpOworcmVzaXphYmxlX3NobWVtX3JlYWR8cmVzaXphYmxlX3NobWVt X3JlYWR8cmVzaXphYmxlX3NobWVtX3JlYWR8cmVzaXphYmxlX3NobWVtX3JlYWQKKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgIDEwMHwgICAgICAgICAgICAgICAg IDIwMHwgICAgICAgICAgICAgICAgIDMwMHwgICAgICAgICAgICAgICAgIDk5OQorKDEgcm93KQor CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9tZXNvbi5idWls ZCBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxkCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZTVmNmQ1Y2FhZgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL21lc29uLmJ1aWxkCkBAIC0w LDAgKzEsMzcgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Jlc2l6YWJsZV9zaG1lbS9tZXNv bi5idWlsZAorCityZXNpemFibGVfc2htZW1fc291cmNlcyA9IGZpbGVzKAorICAncmVzaXphYmxl X3NobWVtLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcmVzaXphYmxl X3NobWVtX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9h cmdzOiBbCisgICAgJy0tTkFNRScsICdyZXNpemFibGVfc2htZW0nLAorICAgICctLUZJTEVERVND JywgJ3Jlc2l6YWJsZV9zaG1lbSAtIHRlc3QgbW9kdWxlIGZvciByZXNpemFibGUgc2hhcmVkIG1l bW9yeScsXSkKK2VuZGlmCisKK3Jlc2l6YWJsZV9zaG1lbSA9IHNoYXJlZF9tb2R1bGUoJ3Jlc2l6 YWJsZV9zaG1lbScsCisgIHJlc2l6YWJsZV9zaG1lbV9zb3VyY2VzLAorICBrd2FyZ3M6IHBnX3Rl c3RfbW9kX2FyZ3MsCispCit0ZXN0X2luc3RhbGxfbGlicyArPSByZXNpemFibGVfc2htZW0KKwor dGVzdF9pbnN0YWxsX2RhdGEgKz0gZmlsZXMoCisgICdyZXNpemFibGVfc2htZW0uY29udHJvbCcs CisgICdyZXNpemFibGVfc2htZW0tLTEuMC5zcWwnLAorKQorCit0ZXN0cyArPSB7CisgICduYW1l JzogJ3Jlc2l6YWJsZV9zaG1lbScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2Rpcigp LAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAnaXNvbGF0aW9uJzogewor ICAgICdzcGVjcyc6IFsKKyAgICAgICdyZXNpemFibGVfc2htZW0nLAorICAgIF0sCisgICAgJ3Jl Z3Jlc3NfYXJncyc6IFsnLS10ZW1wLWNvbmZpZycsIGZpbGVzKCdyZXNpemFibGVfc2htZW0uY29u ZicpXSwKKyAgICAjIFRoaXMgdGVzdCByZXF1aXJlcyBsaWJyYXJ5IHRvIGJlIGxvYWRlZCBhdCB0 aGUgc2VydmVyIHN0YXJ0LCBzbyBkaXNhYmxlCisgICAgIyBpbnN0YWxsY2hlY2sKKyAgICAncnVu bmluZ2NoZWNrJzogZmFsc2UsCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Jlc2l6YWJsZV9zaG1lbS9yZXNpemFibGVfc2htZW0tLTEuMC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJmYzI0MTdhYmM5Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLS0xLjAu c3FsCkBAIC0wLDAgKzEsMjIgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVt L3Jlc2l6YWJsZV9zaG1lbS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMg c291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8g VXNlICJDUkVBVEUgRVhURU5TSU9OIHJlc2l6YWJsZV9zaG1lbSIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CisKKy0tIEZ1bmN0aW9uIHRvIHJlc2l6ZSB0aGUgdGVzdCBzdHJ1Y3R1cmUgaW4gdGhl IHNoYXJlZCBtZW1vcnkKK0NSRUFURSBGVU5DVElPTiByZXNpemFibGVfc2htZW1fcmVzaXplKG5l d19lbnRyaWVzIGludGVnZXIpCitSRVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitM QU5HVUFHRSBDIFNUUklDVDsKKworLS0gRnVuY3Rpb24gdG8gd3JpdGUgZGF0YSB0byB0aGUgdGVz dCBzdHJ1Y3R1cmUgaW4gdGhlIHNoYXJlZCBtZW1vcnkKK0NSRUFURSBGVU5DVElPTiByZXNpemFi bGVfc2htZW1fd3JpdGUoZW50cnlfa2V5IGludGVnZXIsIGVudHJ5X3ZhbHVlIGludGVnZXIpCitS RVRVUk5TIHZvaWQKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5HVUFHRSBDIFNUUklDVDsKKwor LS0gRnVuY3Rpb24gdG8gcmVhZCBkYXRhIGZyb20gdGhlIHRlc3Qgc3RydWN0dXJlIGluIHRoZSBz aGFyZWQgbWVtb3J5CitDUkVBVEUgRlVOQ1RJT04gcmVzaXphYmxlX3NobWVtX3JlYWQoZW50cnlf a2V5IGludGVnZXIpCitSRVRVUk5TIGludGVnZXIKK0FTICdNT0RVTEVfUEFUSE5BTUUnCitMQU5H VUFHRSBDIFNUUklDVDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3No bWVtL3Jlc2l6YWJsZV9zaG1lbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0v cmVzaXphYmxlX3NobWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmYyOGUyZWZlYmFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFi bGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqCisgKiByZXNpemFibGVfc2htZW0uYworICoJCVRlc3QgbW9kdWxlIGZvciBQ b3N0Z3JlU1FMJ3MgcmVzaXphYmxlIHNoYXJlZCBtZW1vcnkgZnVuY3Rpb25hbGl0eQorICoKKyAq IFRoaXMgbW9kdWxlIGRlbW9uc3RyYXRlcyBhbmQgdGVzdHMgdGhlIHJlc2l6YWJsZSBzaGFyZWQg bWVtb3J5IEFQSQorICogcHJvdmlkZWQgYnkgc2htZW0uYy9zaG1lbS5oLgorICoKKyAqIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJmbWdy LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1 ZGUgInN0b3JhZ2Uvc2htZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKKyNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0 aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKK1BHX01PRFVM RV9NQUdJQzsKKworLyogRW50cnkgY29uc3RhbnRzICovCisjZGVmaW5lIFRFU1RfSU5JVElBTF9F TlRSSUVTCTIwNDgJCQkvKiBJbml0aWFsIG51bWJlciBvZiBlbnRyaWVzICovCisjZGVmaW5lIFRF U1RfTUFYX0VOVFJJRVMJCTgxOTIJCQkvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzICg0eCBp bml0aWFsKSAqLworI2RlZmluZSBURVNUX0VOVFJZX1NJWkUJCQlzaXplb2YoaW50MzIpCQkvKiBT aXplIG9mIGVhY2ggZW50cnkgKi8KKworLyoKKyAqIFJlc2l6YWJsZSB0ZXN0IGRhdGEgc3RydWN0 dXJlIHN0b3JlZCBpbiBzaGFyZWQgbWVtb3J5LgorICoKKyAqIFdlIGRvIG5vdCB1c2UgYW55IGxv Y2tzLiBUaGUgdGVzdCBwZXJmb3JtcyByZXNpemluZywgcmVhZHMgYW5kIHdyaXRlcyBub25lIG9m CisgKiB3aGljaCBhcmUgY29uY3VycmVudCB0byBrZWVwIHRoZSBjb2RlIGFuZCB0aGUgdGVzdCBz aW1wbGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IFRlc3RSZXNpemFibGVTaG1lbVN0cnVjdAorewor CS8qIE1ldGFkYXRhICovCisJaW50MzIJCW51bV9lbnRyaWVzOwkJLyogTnVtYmVyIG9mIGVudHJp ZXMgdGhhdCBjYW4gZml0ICovCisKKwkvKiBEYXRhIGFyZWEgLSB2YXJpYWJsZSBzaXplICovCisJ aW50MzIJCWRhdGFbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gVGVzdFJlc2l6YWJsZVNobWVt U3RydWN0OworCisvKiBHbG9iYWwgcG9pbnRlciB0byBvdXIgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1 cmUgKi8KK3N0YXRpYyBUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3QgKnJlc2l6YWJsZV9zaG1lbSA9 IE5VTEw7CisKK3N0YXRpYyB2b2lkIHJlc2l6YWJsZV9zaG1lbV9zaG1lbV9pbml0KHZvaWQgKmFy Zyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgdGVzdFNobWVtRGVzYyA9IHsKKwkubmFtZSA9 ICJyZXNpemFibGVfc2htZW0iLAorCS5zaXplID0gb2Zmc2V0b2YoVGVzdFJlc2l6YWJsZVNobWVt U3RydWN0LCBkYXRhKSArIChURVNUX0lOSVRJQUxfRU5UUklFUyAqIFRFU1RfRU5UUllfU0laRSks CisJLm1heF9zaXplID0gb2Zmc2V0b2YoVGVzdFJlc2l6YWJsZVNobWVtU3RydWN0LCBkYXRhKSAr IChURVNUX01BWF9FTlRSSUVTICogVEVTVF9FTlRSWV9TSVpFKSwKKwkuYWxpZ25tZW50ID0gTUFY SU1VTV9BTElHTk9GLAorCS5pbml0X2ZuID0gcmVzaXphYmxlX3NobWVtX3NobWVtX2luaXQsCisJ LnB0ciA9ICh2b2lkICoqKSAmcmVzaXphYmxlX3NobWVtLAorfTsKKworc3RhdGljIHNobWVtX3Jl cXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gTlVMTDsKKworc3RhdGlj IHZvaWQgcmVzaXphYmxlX3NobWVtX3JlcXVlc3Qodm9pZCk7CisKKy8qIFNRTC1jYWxsYWJsZSBm dW5jdGlvbnMgKi8KK1BHX0ZVTkNUSU9OX0lORk9fVjEocmVzaXphYmxlX3NobWVtX3Jlc2l6ZSk7 CitQR19GVU5DVElPTl9JTkZPX1YxKHJlc2l6YWJsZV9zaG1lbV93cml0ZSk7CitQR19GVU5DVElP Tl9JTkZPX1YxKHJlc2l6YWJsZV9zaG1lbV9yZWFkKTsKKworLyoKKyAqIE1vZHVsZSBsb2FkIGNh bGxiYWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJLyoKKwkgKiBUaGUgbW9kdWxl IG5lZWRzIHRvIGJlIGxvYWRlZCB2aWEgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzIHRvIHJlZ2lz dGVyCisJICogc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUuIEJ1dCBpZiB0aGF0J3Mgbm90IHRoZSBj YXNlLCBkb24ndCB0aHJvdyBhbiBlcnJvci4KKwkgKiBUaGUgU1FMIGZ1bmN0aW9ucyBjaGVjayBm b3IgZXhpc3RlbmNlIG9mIHRoZSBzaGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJlLgorCSAqLwor CWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCisJCXJl dHVybjsKKworI2lmZGVmIEVYRUNfQkFDS0VORAorCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29k ZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkgZXJybXNnKCJyZXNpemFibGVf c2htZW0gaXMgbm90IHN1cHBvcnRlZCBpbiBFWEVDX0JBQ0tFTkQgYnVpbGRzIikpKTsKKyNlbmRp ZgorCisJLyogSW5zdGFsbCBob29rIHRvIHJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJl LiAqLworCXByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOworCXNo bWVtX3JlcXVlc3RfaG9vayA9IHJlc2l6YWJsZV9zaG1lbV9yZXF1ZXN0OworfQorCisvKgorICog TW9kdWxlIHVubG9hZCBjYWxsYmFjaworICovCit2b2lkCitfUEdfZmluaSh2b2lkKQoreworCS8q IFJlc3RvcmUgaG9va3MgKi8KKwlzaG1lbV9yZXF1ZXN0X2hvb2sgPSBwcmV2X3NobWVtX3JlcXVl c3RfaG9vazsKK30KKworLyoKKyAqIFJlcXVlc3Qgc2hhcmVkIG1lbW9yeSByZXNvdXJjZXMKKyAq Lworc3RhdGljIHZvaWQKK3Jlc2l6YWJsZV9zaG1lbV9yZXF1ZXN0KHZvaWQpCit7CisJaWYgKHBy ZXZfc2htZW1fcmVxdWVzdF9ob29rKQorCQlwcmV2X3NobWVtX3JlcXVlc3RfaG9vaygpOworCisJ LyogUmVnaXN0ZXIgb3VyIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSAqLworCVNo bWVtUmVnaXN0ZXJTdHJ1Y3QoJnRlc3RTaG1lbURlc2MpOworfQorCisvKgorICogSW5pdGlhbGl6 ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZAorcmVzaXphYmxlX3No bWVtX3NobWVtX2luaXQodm9pZCAqYXJnKQoreworCS8qCisJICogU2hhcmVkIG1lbW9yeSBzdHJ1 Y3R1cmUgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aCB0aGUgcmVxdWVzdGVkCisJICog c2l6ZS4gSW5pdGlhbGl6ZSB0aGUgbWV0YWRhdGEuCisJICovCisJQXNzZXJ0KHJlc2l6YWJsZV9z aG1lbSAhPSBOVUxMKTsKKwlyZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzID0gVEVTVF9JTklU SUFMX0VOVFJJRVM7Cit9CisKKy8qCisgKiBSZXNpemUgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0 dXJlIHRvIGFjY29tbW9kYXRlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCisgKiBlbnRyaWVzLgor ICovCitEYXR1bQorcmVzaXphYmxlX3NobWVtX3Jlc2l6ZShQR19GVU5DVElPTl9BUkdTKQorewor CWludDMyCQluZXdfZW50cmllcyA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlTaXplCQluZXdfc2l6 ZTsKKwlpbnQJCQlvbGRfZW50cmllczsKKworCWlmICghcmVzaXphYmxlX3NobWVtKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJ VEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInJlc2l6YWJsZV9zaG1lbSBpcyBub3QgaW5pdGlhbGl6 ZWQiKSkpOworCisJbmV3X3NpemUgPSBvZmZzZXRvZihUZXN0UmVzaXphYmxlU2htZW1TdHJ1Y3Qs IGRhdGEpICsgKG5ld19lbnRyaWVzICogVEVTVF9FTlRSWV9TSVpFKTsKKwlTaG1lbVJlc2l6ZVJl Z2lzdGVyZWQodGVzdFNobWVtRGVzYy5uYW1lLCBuZXdfc2l6ZSk7CisJcmVzaXphYmxlX3NobWVt LT5udW1fZW50cmllcyA9IG5ld19lbnRyaWVzOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKwor LyoKKyAqIFdyaXRlIHRoZSBnaXZlbiBpbnRlZ2VyIHZhbHVlIHRvIHRoZSBzcGVjaWZpZWQgaW5k ZXggaW4gdGhlIGRhdGEgYXJyYXkuCisgKi8KK0RhdHVtCityZXNpemFibGVfc2htZW1fd3JpdGUo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQzMgkJZW50cnlfa2V5ID0gUEdfR0VUQVJHX0lOVDMy KDApOworCWludDMyCQllbnRyeV92YWx1ZSA9IFBHX0dFVEFSR19JTlQzMigxKTsKKworCWlmICgh cmVzaXphYmxlX3NobWVtKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInJlc2l6YWJs ZV9zaG1lbSBpcyBub3QgaW5pdGlhbGl6ZWQiKSkpOworCisJaWYgKGVudHJ5X2tleSA8IDAgfHwg ZW50cnlfa2V5ID49IHJlc2l6YWJsZV9zaG1lbS0+bnVtX2VudHJpZXMpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ IGVycm1zZygiZW50cnlfa2V5ICVkIGlzIG91dCBvZiByYW5nZSAoMC4uJWQpIiwgZW50cnlfa2V5 LCByZXNpemFibGVfc2htZW0tPm51bV9lbnRyaWVzIC0gMSkpKTsKKworCXJlc2l6YWJsZV9zaG1l bS0+ZGF0YVtlbnRyeV9rZXldID0gZW50cnlfdmFsdWU7CisKKwlQR19SRVRVUk5fVk9JRCgpOwor fQorCisvKgorICogUmVhZCBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIHNwZWNpZmllZCBpbmRl eCBpbiB0aGUgZGF0YSBhcnJheS4KKyAqLworRGF0dW0KK3Jlc2l6YWJsZV9zaG1lbV9yZWFkKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJaW50MzIJCWVudHJ5X2tleSA9IFBHX0dFVEFSR19JTlQzMigw KTsKKwlpbnQzMgkJdmFsdWU7CisKKwlpZiAocmVzaXphYmxlX3NobWVtID09IE5VTEwpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJ U0lURV9TVEFURSksCisJCQkJIGVycm1zZygicmVzaXphYmxlX3NobWVtIGlzIG5vdCBpbml0aWFs aXplZCIpKSk7CisKKwkvKiBWYWxpZGF0ZSBlbnRyeV9rZXkgdXNpbmcgY2FjaGVkIG51bV9lbnRy aWVzICovCisJaWYgKGVudHJ5X2tleSA8IDAgfHwgZW50cnlfa2V5ID49IHJlc2l6YWJsZV9zaG1l bS0+bnVtX2VudHJpZXMpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZW50cnlfa2V5ICVkIGlzIG91 dCBvZiByYW5nZSAoMC4uJWQpIiwgZW50cnlfa2V5LCByZXNpemFibGVfc2htZW0tPm51bV9lbnRy aWVzIC0gMSkpKTsKKworCS8qIFJlYWQgdGhlIGludGVnZXIgdmFsdWUgKi8KKwl2YWx1ZSA9IHJl c2l6YWJsZV9zaG1lbS0+ZGF0YVtlbnRyeV9rZXldOworCisJUEdfUkVUVVJOX0lOVDMyKHZhbHVl KTsKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6 YWJsZV9zaG1lbS5jb25mIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXph YmxlX3NobWVtLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk0 NzM4ZTBhYzcwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVf c2htZW0vcmVzaXphYmxlX3NobWVtLmNvbmYKQEAgLTAsMCArMSBAQAorc2hhcmVkX3ByZWxvYWRf bGlicmFyaWVzID0gJ3Jlc2l6YWJsZV9zaG1lbScKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvcmVzaXphYmxlX3NobWVtL3Jlc2l6YWJsZV9zaG1lbS5jb250cm9sIGIvc3JjL3Rlc3QvbW9k dWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmNvbnRyb2wKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFjZTJjNWVhMjFhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9yZXNpemFibGVfc2htZW0vcmVzaXphYmxlX3NobWVtLmNvbnRy b2wKQEAgLTAsMCArMSw1IEBACisjIHJlc2l6YWJsZV9zaG1lbSBleHRlbnNpb24gdGVzdCBtb2R1 bGUKK2NvbW1lbnQgPSAndGVzdCBtb2R1bGUgZm9yIHRlc3RpbmcgcmVzaXphYmxlIHNoYXJlZCBt ZW1vcnkgc3RydWN0dXJlIGZ1bmN0aW9uYWxpdHknCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJwor bW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcmVzaXphYmxlX3NobWVtJworcmVsb2NhdGFibGUg PSB0cnVlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Jlc2l6YWJsZV9zaG1lbS9zcGVj cy9yZXNpemFibGVfc2htZW0uc3BlYyBiL3NyYy90ZXN0L21vZHVsZXMvcmVzaXphYmxlX3NobWVt L3NwZWNzL3Jlc2l6YWJsZV9zaG1lbS5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5mM2U3MTY0MzY3YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVs ZXMvcmVzaXphYmxlX3NobWVtL3NwZWNzL3Jlc2l6YWJsZV9zaG1lbS5zcGVjCkBAIC0wLDAgKzEs MzcgQEAKKyMgVGVzdCByZXNpemFibGUgc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUKKyMKKyMgSXQg dGVzdHMgdGhhdCBhIHJlc2l6YWJsZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBjYW4gYmUgcmVz aXplZCBmcm9tIGFueQorIyBiYWNrZW5kIGFuZCB0aGF0IHRoZSBuZXcgc2l6ZXMgYXJlIHZpc2li bGUgdG8gYWxsIHRoZSBiYWNrZW5kcy4gSXQgdXNlcworIyBpc29sYXRpb24gdGVzdCBpbmZyYXN0 cnVjdHVyZSBzbyB0aGF0IHJlc2l6aW5nLCByZWFkaW5nIGFuZCB3cml0aW5nIGNhbiBiZQorIyBp bnRlcmxlYXZlZC4KKworc2V0dXAKK3sKKyAgQ1JFQVRFIEVYVEVOU0lPTiByZXNpemFibGVfc2ht ZW07Cit9CisKK3RlYXJkb3duCit7CisgIERST1AgRVhURU5TSU9OIHJlc2l6YWJsZV9zaG1lbTsK K30KKworc2Vzc2lvbiAic2Vzc2lvbjEiCitzdGVwIHMxdzIwNDggeyBTRUxFQ1QgcmVzaXphYmxl X3NobWVtX3dyaXRlKDAsIDEwMCksIHJlc2l6YWJsZV9zaG1lbV93cml0ZSgyMDQ3LCAyMDApOyB9 CitzdGVwIHMxcjgxOTIgeyBTRUxFQ1QgcmVzaXphYmxlX3NobWVtX3JlYWQoMCksIHJlc2l6YWJs ZV9zaG1lbV9yZWFkKDIwNDcpLCByZXNpemFibGVfc2htZW1fcmVhZCgyMDQ4KSwgcmVzaXphYmxl X3NobWVtX3JlYWQoODE5MSk7IH0KK3N0ZXAgczF3NjE0NCB7IFNFTEVDVCByZXNpemFibGVfc2ht ZW1fd3JpdGUoNjE0MywgOTk5KTsgfQorCitzZXNzaW9uICJzZXNzaW9uMiIKK3N0ZXAgczJyMjA0 OCB7IFNFTEVDVCByZXNpemFibGVfc2htZW1fcmVhZCgwKSwgcmVzaXphYmxlX3NobWVtX3JlYWQo MjA0Nyk7IH0KK3N0ZXAgczJ3ODE5MiB7IFNFTEVDVCByZXNpemFibGVfc2htZW1fd3JpdGUoODE5 MSwgNTAwKSwgcmVzaXphYmxlX3NobWVtX3dyaXRlKDIwNDgsIDMwMCk7fQorc3RlcCBzMnI2MTQ0 IHsgU0VMRUNUIHJlc2l6YWJsZV9zaG1lbV9yZWFkKDApLCByZXNpemFibGVfc2htZW1fcmVhZCgy MDQ3KSwgcmVzaXphYmxlX3NobWVtX3JlYWQoMjA0OCksIHJlc2l6YWJsZV9zaG1lbV9yZWFkKDYx NDMpO30KKworc2Vzc2lvbiAicmVzaXplciIKK3N0ZXAgenM4MTkyIHsgU0VMRUNUIHJlc2l6YWJs ZV9zaG1lbV9yZXNpemUoODE5Mik7IH0KK3N0ZXAgenM2MTQ0IHsgU0VMRUNUIHJlc2l6YWJsZV9z aG1lbV9yZXNpemUoNjE0NCk7IH0KK3N0ZXAgemlhIHsgU0VMRUNUIG5hbWUsIHNpemUsIGFsbG9j YXRlZF9zaXplIEZST00gcGdfc2htZW1fYWxsb2NhdGlvbnMgV0hFUkUgbmFtZSA9ICdyZXNpemFi bGVfc2htZW0nOyB9CitzdGVwICJ6aXMiIHsgU0VMRUNUIG5hbWUsIHNpemUsIGZyZWVvZmZzZXQs IHJlc2VydmVkX3NpemUgRlJPTSBwZ19zaG1lbV9zZWdtZW50cyBXSEVSRSBuYW1lID0gJ3Jlc2l6 YWJsZV9zaG1lbSc7IH0KKworIyBUZXN0IHNocmlua2luZyBhbmQgZXhwYW5kaW5nIHRoZSBzaGFy ZWQgbWVtb3J5LCB3aGlsZSBkb2luZyBzbyB0aGUgcHJldmlvdXNseQorIyB3cml0dGVuIGRhdGEg aW4gdGhlIHBvcnRpb24gb2YgdGhlIG1lbW9yeSB0aGF0IGRvZXNuJ3QgdW5kZXJnbyBjaGFuZ2Ug c2hvdWxkCisjIG5vdCBjaGFuZ2UuCitwZXJtdXRhdGlvbiB6aWEgemlzIHMxdzIwNDggczJyMjA0 OCB6czgxOTIgemlhIHppcyBzMnc4MTkyIHMxcjgxOTIgenM2MTQ0IHppYSB6aXMgczF3NjE0NCBz MnI2MTQ0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CmluZGV4IGY0ZWUyYmQ3NDU5Li4x ZTFiZDFlYjhiNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTE3NjgsMTQg KzE3NjgsMjEgQEAgcGdfc2hhZG93fCBTRUxFQ1QgcGdfYXV0aGlkLnJvbG5hbWUgQVMgdXNlbmFt ZSwKICAgICAgTEVGVCBKT0lOIHBnX2RiX3JvbGVfc2V0dGluZyBzIE9OICgoKHBnX2F1dGhpZC5v aWQgPSBzLnNldHJvbGUpIEFORCAocy5zZXRkYXRhYmFzZSA9ICgwKTo6b2lkKSkpKQogICBXSEVS RSBwZ19hdXRoaWQucm9sY2FubG9naW47CiBwZ19zaG1lbV9hbGxvY2F0aW9uc3wgU0VMRUNUIG5h bWUsCisgICAgc2VnbWVudCwKICAgICBvZmYsCiAgICAgc2l6ZSwKICAgICBhbGxvY2F0ZWRfc2l6 ZQotICAgRlJPTSBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoKSBwZ19nZXRfc2htZW1fYWxsb2Nh dGlvbnMobmFtZSwgb2ZmLCBzaXplLCBhbGxvY2F0ZWRfc2l6ZSk7CisgICBGUk9NIHBnX2dldF9z aG1lbV9hbGxvY2F0aW9ucygpIHBnX2dldF9zaG1lbV9hbGxvY2F0aW9ucyhuYW1lLCBzZWdtZW50 LCBvZmYsIHNpemUsIGFsbG9jYXRlZF9zaXplKTsKIHBnX3NobWVtX2FsbG9jYXRpb25zX251bWF8 IFNFTEVDVCBuYW1lLAogICAgIG51bWFfbm9kZSwKICAgICBzaXplCiAgICBGUk9NIHBnX2dldF9z aG1lbV9hbGxvY2F0aW9uc19udW1hKCkgcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zX251bWEobmFt ZSwgbnVtYV9ub2RlLCBzaXplKTsKK3BnX3NobWVtX3NlZ21lbnRzfCBTRUxFQ1QgaWQsCisgICAg bmFtZSwKKyAgICBzaXplLAorICAgIGZyZWVvZmZzZXQsCisgICAgcmVzZXJ2ZWRfc2l6ZQorICAg RlJPTSBwZ19nZXRfc2htZW1fc2VnbWVudHMoKSBwZ19nZXRfc2htZW1fc2VnbWVudHMoaWQsIG5h bWUsIHNpemUsIGZyZWVvZmZzZXQsIHJlc2VydmVkX3NpemUpOwogcGdfc3RhdF9hY3Rpdml0eXwg U0VMRUNUIHMuZGF0aWQsCiAgICAgZC5kYXRuYW1lLAogICAgIHMucGlkLApkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCA3NzUxODQ4OTQxMi4uMjkzZWQ5OWZkZDAgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0xMjAsNiArMTIwLDcgQEAgQW1jaGVja09wdGlvbnMKIEFuYWx5emVB dHRyQ29tcHV0ZVN0YXRzRnVuYwogQW5hbHl6ZUF0dHJGZXRjaEZ1bmMKIEFuYWx5emVGb3JlaWdu VGFibGVfZnVuY3Rpb24KK0Fub25TaG1lbURhdGEKIEFubEV4cHJEYXRhCiBBbmxJbmRleERhdGEK IEFueUFycmF5VHlwZQpAQCAtMTg4Nyw2ICsxODg4LDcgQEAgUEdGSW5mb0Z1bmN0aW9uCiBQR0Zp bGVUeXBlCiBQR0Z1bmN0aW9uCiBQR0lPQWxpZ25lZEJsb2NrCitQR1VzZWRTaG1lbUluZm8KIFBH TFpfSGlzdEVudHJ5CiBQR0xaX1N0cmF0ZWd5CiBQR0xvYWRCYWxhbmNlVHlwZQpAQCAtMjgwNyw2 ICsyODA5LDcgQEAgU2hpcHBhYmxlQ2FjaGVFbnRyeQogU2htZW1BbGxvY2F0b3JEYXRhCiBTaGlw cGFibGVDYWNoZUtleQogU2htZW1JbmRleEVudAorU2htZW1TZWdtZW50CiBTaHV0ZG93bkZvcmVp Z25TY2FuX2Z1bmN0aW9uCiBTaHV0ZG93bkluZm9ybWF0aW9uCiBTaHV0ZG93bk1vZGUKLS0gCjIu MzQuMQoK --000000000000242bd9064ab32bfc--