From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3127 invoked by alias); 18 Feb 2013 22:40:31 -0000 Received: (qmail 3077 invoked by uid 22791); 18 Feb 2013 22:40:30 -0000 X-SWARE-Spam-Status: No, hits=-5.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-la0-f52.google.com (HELO mail-la0-f52.google.com) (209.85.215.52) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 18 Feb 2013 22:40:19 +0000 Received: by mail-la0-f52.google.com with SMTP id fs12so5842979lab.25 for ; Mon, 18 Feb 2013 14:40:17 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.152.132.170 with SMTP id ov10mr12080734lab.21.1361227217481; Mon, 18 Feb 2013 14:40:17 -0800 (PST) Received: by 10.112.31.169 with HTTP; Mon, 18 Feb 2013 14:40:17 -0800 (PST) In-Reply-To: References: Date: Mon, 18 Feb 2013 22:40:00 -0000 Message-ID: Subject: Re: [patch] Fix libstdc++/55043 - issue with nesting unordered_map containing unique_ptr into vector From: Jonathan Wakely To: "libstdc++" , gcc-patches Content-Type: multipart/mixed; boundary=f46d04308562c1b22504d60768f8 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-02/txt/msg00877.txt.bz2 --f46d04308562c1b22504d60768f8 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2335 On 16 January 2013 23:57, Jonathan Wakely wrote: > Here's another attempt to fix this regression, I hope this time it > doesn't cause more problems than it solves. > > Instead of specializing is_copy_constructible for the unordered > containers this causes their copy constructors to be deleted if the > value_type is not CopyInsertable into the container. This makes > is_copy_constructible naturally give the right result, and so > __move_if_noexcept does the right thing and the testcase in the PR > passes. Yay. > > As Daniel pointed out in the PR comments, the unfortunate side effect > of this approach is that we can no longer support instantiating > unordered containers with incomplete types. That's undefined > behaviour, but was allowed as QoI. Conformance trumps QoI, I'm > afraid. If someday we have noexcept move constructors for the > unordered containers we could allow incomplete types again. > > PR libstdc++/55043 (again) > * include/bits/alloc_traits.h (allocator_traits::construct): Disable > unless construction would be well-formed. > (__allow_copy_cons, __check_copy_constructible): Define. > * include/bits/unordered_map.h (__check_copy_constructible): Use as > base class so copy constructor will be deleted if appropriate. > (is_copy_constructible): Remove specialization. > * include/bits/unordered_set.h: Likewise. > * include/debug/unordered_map.h: Undo previous commit. Default copy > and move constructors. > * include/debug/unordered_set.h: Likewise. > * include/profile/unordered_map.h: Undo previous commit. > * include/profile/unordered_set.h: Likewise. > * testsuite/23_containers/unordered_map/55043.cc: Fix test. > * testsuite/23_containers/unordered_multimap/55043.cc: Likewise. > * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. > * testsuite/23_containers/unordered_set/55043.cc: Likewise. > * testsuite/23_containers/unordered_map/requirements/53339.cc: XFAIL, > cannot support incomplete types. > * testsuite/23_containers/unordered_multimap/requirements/53339.cc: > Likewise. > > Tested x86_86-linux, committed to trunk. I plan to commit the attached to the 4.7 branch to fix the regression there too. --f46d04308562c1b22504d60768f8 Content-Type: text/plain; charset=US-ASCII; name="patch-c.txt" Content-Disposition: attachment; filename="patch-c.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdc7ikt31 Content-length: 33929 Y29tbWl0IDAxNjI5NTZmMzQzMDdmNTkxOGMwYzAyMjQ4NTU0NzI5N2U1OWEx ZDgKQXV0aG9yOiBKb25hdGhhbiBXYWtlbHkgPGp3YWtlbHkuZ2NjQGdtYWls LmNvbT4KRGF0ZTogICBNb24gRmViIDE4IDIxOjI2OjQ1IDIwMTMgKzAwMDAK CiAgICAJUFIgbGlic3RkYysrLzU1MDQzCiAgICAJKiBpbmNsdWRlL2JpdHMv YWxsb2NfdHJhaXRzLmggKGFsbG9jYXRvcl90cmFpdHM6OmNvbnN0cnVjdCk6 IERpc2FibGUKICAgIAl1bmxlc3MgY29uc3RydWN0aW9uIHdvdWxkIGJlIHdl bGwtZm9ybWVkLgogICAgCShfX2FsbG93X2NvcHlfY29ucywgX19jaGVja19j b3B5X2NvbnN0cnVjdGlibGUpOiBEZWZpbmUuCiAgICAJKiBpbmNsdWRlL2Jp dHMvdW5vcmRlcmVkX21hcC5oIChfX2NoZWNrX2NvcHlfY29uc3RydWN0aWJs ZSk6IFVzZSBhcwogICAgCWJhc2UgY2xhc3Mgc28gY29weSBjb25zdHJ1Y3Rv ciB3aWxsIGJlIGRlbGV0ZWQgaWYgYXBwcm9wcmlhdGUuCiAgICAJKiBpbmNs dWRlL2JpdHMvdW5vcmRlcmVkX3NldC5oOiBMaWtld2lzZS4KICAgIAkqIGlu Y2x1ZGUvc3RkL3Vub3JkZXJlZF9zZXQ6IEluY2x1ZGUgYWxsb2NfdHJhaXRz LmguCiAgICAJKiBpbmNsdWRlL3N0ZC91bm9yZGVyZWRfc2V0OiBMaWtld2lz ZS4KICAgIAkqIGluY2x1ZGUvZGVidWcvdW5vcmRlcmVkX21hcC5oOiBEZWZh dWx0IGNvcHkgYW5kIG1vdmUgY29uc3RydWN0b3JzLgogICAgCSogaW5jbHVk ZS9kZWJ1Zy91bm9yZGVyZWRfc2V0Lmg6IExpa2V3aXNlLgogICAgCSogdGVz dHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21hcC81NTA0My5jYzog Rml4IHRlc3QuCiAgICAJKiB0ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9y ZGVyZWRfbXVsdGltYXAvNTUwNDMuY2M6IExpa2V3aXNlLgogICAgCSogdGVz dHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpc2V0LzU1MDQz LmNjOiBMaWtld2lzZS4KICAgIAkqIHRlc3RzdWl0ZS8yM19jb250YWluZXJz L3Vub3JkZXJlZF9zZXQvNTUwNDMuY2M6IExpa2V3aXNlLgogICAgCSogdGVz dHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21hcC9yZXF1aXJlbWVu dHMvNTMzMzkuY2M6IFhGQUlMLAogICAgCWNhbm5vdCBzdXBwb3J0IGluY29t cGxldGUgdHlwZXMuCiAgICAJKiB0ZXN0c3VpdGUvMjNfY29udGFpbmVycy91 bm9yZGVyZWRfbXVsdGltYXAvcmVxdWlyZW1lbnRzLzUzMzM5LmNjOgogICAg CUxpa2V3aXNlLgogICAgCSogdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5v cmRlcmVkX3NldC9pbnN0YW50aWF0aW9uX25lZy5jYzogQWRqdXN0CiAgICAJ ZGctZXJyb3IgbGluZSBudW1iZXIuCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9hbGxvY190cmFpdHMuaCBiL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvYWxsb2NfdHJhaXRzLmgKaW5kZXggM2IxMjk4MS4u YmZhNTBkZSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0 cy9hbGxvY190cmFpdHMuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9i aXRzL2FsbG9jX3RyYWl0cy5oCkBAIC0xLDYgKzEsNiBAQAogLy8gQWxsb2Nh dG9yIHRyYWl0cyAtKi0gQysrIC0qLQogCi0vLyBDb3B5cmlnaHQgKEMpIDIw MTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLyBD b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCiAvLwogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2Yg dGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJl ZQogLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQgdW5kZXIgdGhlCkBAIC0zOSw2ICszOSw5IEBAIG5hbWVz cGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQogewogX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAorICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CisgICAgY2xhc3MgYWxsb2NhdG9yOworCiAgIHRlbXBs YXRlPHR5cGVuYW1lIF9BbGxvYywgdHlwZW5hbWUgX1RwPgogICAgIGNsYXNz IF9fYWxsb2N0cl9yZWJpbmRfaGVscGVyCiAgICAgewpAQCAtMjU0LDcgKzI1 Nyw4IEBAIF9HTElCQ1hYX0FMTE9DX1RSX05FU1RFRF9UWVBFKHByb3BhZ2F0 ZV9vbl9jb250YWluZXJfc3dhcCwKIAogICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KIAlzdGF0aWMgdHlwZW5hbWUK LSAgICAgICAJZW5hYmxlX2lmPCFfX2NvbnN0cnVjdF9oZWxwZXI8X1RwLCBf QXJncy4uLj46OnZhbHVlLCB2b2lkPjo6dHlwZQorCWVuYWJsZV9pZjxfX2Fu ZF88X19ub3RfPF9fY29uc3RydWN0X2hlbHBlcjxfVHAsIF9BcmdzLi4uPj4s CisJCQkgaXNfY29uc3RydWN0aWJsZTxfVHAsIF9BcmdzLi4uPj46OnZhbHVl LCB2b2lkPjo6dHlwZQogICAgICAgIAlfU19jb25zdHJ1Y3QoX0FsbG9jJiwg X1RwKiBfX3AsIF9BcmdzJiYuLi4gX19hcmdzKQogCXsgOjpuZXcoKHZvaWQq KV9fcCkgX1RwKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0K IApAQCAtMzg2LDcgKzM5MCw4IEBAIF9HTElCQ1hYX0FMTE9DX1RSX05FU1RF RF9UWVBFKHByb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcCwKICAgICAgICAq ICBhcmd1bWVudHMgQGEgX19hcmdzLi4uCiAgICAgICAqLwogICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZS4uLiBfQXJncz4KLQlzdGF0 aWMgdm9pZCBjb25zdHJ1Y3QoX0FsbG9jJiBfX2EsIF9UcCogX19wLCBfQXJn cyYmLi4uIF9fYXJncykKKwlzdGF0aWMgYXV0byBjb25zdHJ1Y3QoX0FsbG9j JiBfX2EsIF9UcCogX19wLCBfQXJncyYmLi4uIF9fYXJncykKKwktPiBkZWNs dHlwZShfU19jb25zdHJ1Y3QoX19hLCBfX3AsIHN0ZDo6Zm9yd2FyZDxfQXJn cz4oX19hcmdzKS4uLikpCiAJeyBfU19jb25zdHJ1Y3QoX19hLCBfX3AsIHN0 ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7IH0KIAogICAgICAgLyoq CkBAIC01MDYsNiArNTExLDU2IEBAIF9HTElCQ1hYX0FMTE9DX1RSX05FU1RF RF9UWVBFKHByb3BhZ2F0ZV9vbl9jb250YWluZXJfc3dhcCwKICAgICAgIF9f ZG9fYWxsb2Nfb25fc3dhcChfX29uZSwgX190d28sIF9fcG9jcygpKTsKICAg ICB9CiAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIGNsYXNz IF9faXNfY29weV9pbnNlcnRhYmxlX2ltcGwKKyAgICB7CisgICAgICB0eXBl ZGVmIGFsbG9jYXRvcl90cmFpdHM8X0FsbG9jPiBfVHJhaXRzOworCisgICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXAsIHR5cGVuYW1lCisJICAgICAgID0g ZGVjbHR5cGUoX1RyYWl0czo6Y29uc3RydWN0KHN0ZDo6ZGVjbHZhbDxfQWxs b2MmPigpLAorCQkJCQkgICAgIHN0ZDo6ZGVjbHZhbDxfVXAqPigpLAorCQkJ CQkgICAgIHN0ZDo6ZGVjbHZhbDxjb25zdCBfVXAmPigpKSk+CisJc3RhdGlj IHRydWVfdHlwZQorCV9NX3NlbGVjdChpbnQpOworCisgICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVXA+CisJc3RhdGljIGZhbHNlX3R5cGUKKwlfTV9zZWxl Y3QoLi4uKTsKKworICAgIHB1YmxpYzoKKyAgICAgIHR5cGVkZWYgZGVjbHR5 cGUoX01fc2VsZWN0PHR5cGVuYW1lIF9BbGxvYzo6dmFsdWVfdHlwZT4oMCkp IHR5cGU7CisgICAgfTsKKworICAvLyB0cnVlIGlmIF9BbGxvYzo6dmFsdWVf dHlwZSBpcyBDb3B5SW5zZXJ0YWJsZSBpbnRvIGNvbnRhaW5lcnMgdXNpbmcg X0FsbG9jCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KKyAgICBzdHJ1 Y3QgX19pc19jb3B5X2luc2VydGFibGUKKyAgICA6IF9faXNfY29weV9pbnNl cnRhYmxlX2ltcGw8X0FsbG9jPjo6dHlwZQorICAgIHsgfTsKKworICAvLyBz dGQ6OmFsbG9jYXRvcjxfVHA+IGp1c3QgcmVxdWlyZXMgQ29weUNvbnN0cnVj dGlibGUKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAgIHN0cnVjdCBf X2lzX2NvcHlfaW5zZXJ0YWJsZTxhbGxvY2F0b3I8X1RwPj4KKyAgICA6IGlz X2NvcHlfY29uc3RydWN0aWJsZTxfVHA+CisgICAgeyB9OworCisgIC8vIFVz ZWQgdG8gYWxsb3cgY29weSBjb25zdHJ1Y3Rpb24gb2YgdW5vcmRlcmVkIGNv bnRhaW5lcnMKKyAgdGVtcGxhdGU8Ym9vbD4gc3RydWN0IF9fYWxsb3dfY29w eV9jb25zIHsgfTsKKworICAvLyBVc2VkIHRvIGRlbGV0ZSBjb3B5IGNvbnN0 cnVjdG9yIG9mIHVub3JkZXJlZCBjb250YWluZXJzCisgIHRlbXBsYXRlPD4K KyAgICBzdHJ1Y3QgX19hbGxvd19jb3B5X2NvbnM8ZmFsc2U+CisgICAgewor ICAgICAgX19hbGxvd19jb3B5X2NvbnMoKSA9IGRlZmF1bHQ7CisgICAgICBf X2FsbG93X2NvcHlfY29ucyhjb25zdCBfX2FsbG93X2NvcHlfY29ucyYpID0g ZGVsZXRlOworICAgICAgX19hbGxvd19jb3B5X2NvbnMoX19hbGxvd19jb3B5 X2NvbnMmJikgPSBkZWZhdWx0OworICAgICAgX19hbGxvd19jb3B5X2NvbnMm IG9wZXJhdG9yPShjb25zdCBfX2FsbG93X2NvcHlfY29ucyYpID0gZGVmYXVs dDsKKyAgICAgIF9fYWxsb3dfY29weV9jb25zJiBvcGVyYXRvcj0oX19hbGxv d19jb3B5X2NvbnMmJikgPSBkZWZhdWx0OworICAgIH07CisKKyAgdGVtcGxh dGU8dHlwZW5hbWUgX0FsbG9jPgorICAgIHVzaW5nIF9fY2hlY2tfY29weV9j b25zdHJ1Y3RpYmxlCisgICAgICA9IF9fYWxsb3dfY29weV9jb25zPF9faXNf Y29weV9pbnNlcnRhYmxlPF9BbGxvYz46OnZhbHVlPjsKKwogX0dMSUJDWFhf RU5EX05BTUVTUEFDRV9WRVJTSU9OCiB9IC8vIG5hbWVzcGFjZSBzdGQKIApk aWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy91bm9yZGVy ZWRfbWFwLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3Vub3JkZXJl ZF9tYXAuaAppbmRleCA5NWY1NjU3Li4zN2U1NzBmIDEwMDY0NAotLS0gYS9s aWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9tYXAuaAorKysg Yi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9tYXAuaApA QCAtMSw2ICsxLDYgQEAKIC8vIHVub3JkZXJlZF9tYXAgaW1wbGVtZW50YXRp b24gLSotIEMrKyAtKi0KIAotLy8gQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8gQ29weXJpZ2h0 IChDKSAyMDEwLCAyMDExLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwgSW5jLgogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUg SVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKIC8vIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 IGl0IHVuZGVyIHRoZQpAQCAtNTAsNyArNTAsOCBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfQ09OVEFJTkVSCiAJCQlfSGFzaCwgX19kZXRhaWw6Ol9N b2RfcmFuZ2VfaGFzaGluZywKIAkJCV9fZGV0YWlsOjpfRGVmYXVsdF9yYW5n ZWRfaGFzaCwKIAkJCV9fZGV0YWlsOjpfUHJpbWVfcmVoYXNoX3BvbGljeSwK LQkJCV9fY2FjaGVfaGFzaF9jb2RlLCBmYWxzZSwgdHJ1ZT4KKwkJCV9fY2Fj aGVfaGFzaF9jb2RlLCBmYWxzZSwgdHJ1ZT4sCisgICAgICBfX2NoZWNrX2Nv cHlfY29uc3RydWN0aWJsZTxfQWxsb2M+CiAgICAgewogICAgICAgdHlwZWRl ZiBfSGFzaHRhYmxlPF9LZXksIHN0ZDo6cGFpcjxjb25zdCBfS2V5LCBfVHA+ LCBfQWxsb2MsCiAJCQkgc3RkOjpfU2VsZWN0MXN0PHN0ZDo6cGFpcjxjb25z dCBfS2V5LCBfVHA+ID4sIF9QcmVkLApAQCAtMTIzLDcgKzEyNCw4IEBAIF9H TElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05UQUlORVIKIAkJCV9IYXNoLCBf X2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5nLAogCQkJX19kZXRhaWw6Ol9E ZWZhdWx0X3JhbmdlZF9oYXNoLAogCQkJX19kZXRhaWw6Ol9QcmltZV9yZWhh c2hfcG9saWN5LAotCQkJX19jYWNoZV9oYXNoX2NvZGUsIGZhbHNlLCBmYWxz ZT4KKwkJCV9fY2FjaGVfaGFzaF9jb2RlLCBmYWxzZSwgZmFsc2U+LAorICAg ICAgX19jaGVja19jb3B5X2NvbnN0cnVjdGlibGU8X0FsbG9jPgogICAgIHsK ICAgICAgIHR5cGVkZWYgX0hhc2h0YWJsZTxfS2V5LCBzdGQ6OnBhaXI8Y29u c3QgX0tleSwgX1RwPiwKIAkJCSBfQWxsb2MsCmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvaW5jbHVkZS9iaXRzL3Vub3JkZXJlZF9zZXQuaCBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvdW5vcmRlcmVkX3NldC5oCmluZGV4IDNk NTM2MWQuLmQ2NWM3OWMgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvdW5vcmRlcmVkX3NldC5oCisrKyBiL2xpYnN0ZGMrKy12My9p bmNsdWRlL2JpdHMvdW5vcmRlcmVkX3NldC5oCkBAIC0xLDYgKzEsNiBAQAog Ly8gdW5vcmRlcmVkX3NldCBpbXBsZW1lbnRhdGlvbiAtKi0gQysrIC0qLQog Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEs IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAvLwogLy8g VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnku ICBUaGlzIGxpYnJhcnkgaXMgZnJlZQogLy8gc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCkBA IC01MCw3ICs1MCw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9DT05U QUlORVIKIAkJCV9IYXNoLCBfX2RldGFpbDo6X01vZF9yYW5nZV9oYXNoaW5n LAogCQkJX19kZXRhaWw6Ol9EZWZhdWx0X3JhbmdlZF9oYXNoLAogCQkJX19k ZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5LAotCQkJX19jYWNoZV9oYXNo X2NvZGUsIHRydWUsIHRydWU+CisJCQlfX2NhY2hlX2hhc2hfY29kZSwgdHJ1 ZSwgdHJ1ZT4sCisgICAgICBfX2NoZWNrX2NvcHlfY29uc3RydWN0aWJsZTxf QWxsb2M+CiAgICAgewogICAgICAgdHlwZWRlZiBfSGFzaHRhYmxlPF9WYWx1 ZSwgX1ZhbHVlLCBfQWxsb2MsCiAJCQkgc3RkOjpfSWRlbnRpdHk8X1ZhbHVl PiwgX1ByZWQsCkBAIC0xMzQsNyArMTM1LDggQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX0NPTlRBSU5FUgogCQkJX0hhc2gsIF9fZGV0YWlsOjpfTW9k X3JhbmdlX2hhc2hpbmcsCiAJCQlfX2RldGFpbDo6X0RlZmF1bHRfcmFuZ2Vk X2hhc2gsCiAJCQlfX2RldGFpbDo6X1ByaW1lX3JlaGFzaF9wb2xpY3ksCi0J CQlfX2NhY2hlX2hhc2hfY29kZSwgdHJ1ZSwgZmFsc2U+CisJCQlfX2NhY2hl X2hhc2hfY29kZSwgdHJ1ZSwgZmFsc2U+LAorICAgICAgX19jaGVja19jb3B5 X2NvbnN0cnVjdGlibGU8X0FsbG9jPgogICAgIHsKICAgICAgIHR5cGVkZWYg X0hhc2h0YWJsZTxfVmFsdWUsIF9WYWx1ZSwgX0FsbG9jLAogCQkJIHN0ZDo6 X0lkZW50aXR5PF9WYWx1ZT4sIF9QcmVkLApkaWZmIC0tZ2l0IGEvbGlic3Rk YysrLXYzL2luY2x1ZGUvZGVidWcvdW5vcmRlcmVkX21hcCBiL2xpYnN0ZGMr Ky12My9pbmNsdWRlL2RlYnVnL3Vub3JkZXJlZF9tYXAKaW5kZXggMTg2MWI4 Ni4uNGM1NjJhZiAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUv ZGVidWcvdW5vcmRlcmVkX21hcAorKysgYi9saWJzdGRjKystdjMvaW5jbHVk ZS9kZWJ1Zy91bm9yZGVyZWRfbWFwCkBAIC0xLDYgKzEsNiBAQAogLy8gRGVi dWdnaW5nIHVub3JkZXJlZF9tYXAvdW5vcmRlcmVkX211bHRpbWFwIGltcGxl bWVudGF0aW9uIC0qLSBDKysgLSotCiAKLS8vIENvcHlyaWdodCAoQykgMjAw MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg MjAxMQorLy8gQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2 LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEzCiAvLyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIC8vCiAvLyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGli cmFyeSBpcyBmcmVlCkBAIC05NywxNCArOTcsMTIgQEAgbmFtZXNwYWNlIF9f ZGVidWcKIAkJX19nbnVfZGVidWc6Ol9fYmFzZShfX2xhc3QpLCBfX24sCiAJ CV9faGYsIF9fZXFsLCBfX2EpIHsgfQogCi0gICAgICB1bm9yZGVyZWRfbWFw KGNvbnN0IHVub3JkZXJlZF9tYXAmIF9feCkgCi0gICAgICA6IF9CYXNlKF9f eCkgeyB9CisgICAgICB1bm9yZGVyZWRfbWFwKGNvbnN0IHVub3JkZXJlZF9t YXAmIF9feCkgPSBkZWZhdWx0OwogCiAgICAgICB1bm9yZGVyZWRfbWFwKGNv bnN0IF9CYXNlJiBfX3gpCiAgICAgICA6IF9CYXNlKF9feCkgeyB9CiAKLSAg ICAgIHVub3JkZXJlZF9tYXAodW5vcmRlcmVkX21hcCYmIF9feCkKLSAgICAg IDogX0Jhc2Uoc3RkOjptb3ZlKF9feCkpIHsgfQorICAgICAgdW5vcmRlcmVk X21hcCh1bm9yZGVyZWRfbWFwJiYgX194KSA9IGRlZmF1bHQ7CiAKICAgICAg IHVub3JkZXJlZF9tYXAoaW5pdGlhbGl6ZXJfbGlzdDx2YWx1ZV90eXBlPiBf X2wsCiAJCSAgICBzaXplX3R5cGUgX19uID0gMCwKQEAgLTUxMSwxNCArNTA5 LDEyIEBAIG5hbWVzcGFjZSBfX2RlYnVnCiAJCV9fZ251X2RlYnVnOjpfX2Jh c2UoX19sYXN0KSwgX19uLAogCQlfX2hmLCBfX2VxbCwgX19hKSB7IH0KIAot ICAgICAgdW5vcmRlcmVkX211bHRpbWFwKGNvbnN0IHVub3JkZXJlZF9tdWx0 aW1hcCYgX194KSAKLSAgICAgIDogX0Jhc2UoX194KSB7IH0KKyAgICAgIHVu b3JkZXJlZF9tdWx0aW1hcChjb25zdCB1bm9yZGVyZWRfbXVsdGltYXAmIF9f eCkgPSBkZWZhdWx0OwogCiAgICAgICB1bm9yZGVyZWRfbXVsdGltYXAoY29u c3QgX0Jhc2UmIF9feCkgCiAgICAgICA6IF9CYXNlKF9feCkgeyB9CiAKLSAg ICAgIHVub3JkZXJlZF9tdWx0aW1hcCh1bm9yZGVyZWRfbXVsdGltYXAmJiBf X3gpCi0gICAgICA6IF9CYXNlKHN0ZDo6bW92ZShfX3gpKSB7IH0KKyAgICAg IHVub3JkZXJlZF9tdWx0aW1hcCh1bm9yZGVyZWRfbXVsdGltYXAmJiBfX3gp ID0gZGVmYXVsdDsKIAogICAgICAgdW5vcmRlcmVkX211bHRpbWFwKGluaXRp YWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAogCQkJIHNpemVfdHlwZSBf X24gPSAwLApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVi dWcvdW5vcmRlcmVkX3NldCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVn L3Vub3JkZXJlZF9zZXQKaW5kZXggNzMyMzE4NC4uYjkxYTE3OCAxMDA2NDQK LS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZGVidWcvdW5vcmRlcmVkX3Nl dAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy91bm9yZGVyZWRf c2V0CkBAIC0xLDYgKzEsNiBAQAogLy8gRGVidWdnaW5nIHVub3JkZXJlZF9z ZXQvdW5vcmRlcmVkX211bHRpc2V0IGltcGxlbWVudGF0aW9uIC0qLSBDKysg LSotCiAKLS8vIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw NiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMQorLy8gQ29weXJpZ2h0 IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5 LCAyMDEwLCAyMDExLCAyMDEzCiAvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KIC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05V IElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCkBAIC05 NywxNCArOTcsMTIgQEAgbmFtZXNwYWNlIF9fZGVidWcKIAkJX19nbnVfZGVi dWc6Ol9fYmFzZShfX2xhc3QpLCBfX24sCiAJCV9faGYsIF9fZXFsLCBfX2Ep IHsgfQogCi0gICAgICB1bm9yZGVyZWRfc2V0KGNvbnN0IHVub3JkZXJlZF9z ZXQmIF9feCkgCi0gICAgICA6IF9CYXNlKF9feCkgeyB9CisgICAgICB1bm9y ZGVyZWRfc2V0KGNvbnN0IHVub3JkZXJlZF9zZXQmIF9feCkgPSBkZWZhdWx0 OwogCiAgICAgICB1bm9yZGVyZWRfc2V0KGNvbnN0IF9CYXNlJiBfX3gpIAog ICAgICAgOiBfQmFzZShfX3gpIHsgfQogCi0gICAgICB1bm9yZGVyZWRfc2V0 KHVub3JkZXJlZF9zZXQmJiBfX3gpCi0gICAgICA6IF9CYXNlKHN0ZDo6bW92 ZShfX3gpKSB7IH0KKyAgICAgIHVub3JkZXJlZF9zZXQodW5vcmRlcmVkX3Nl dCYmIF9feCkgPSBkZWZhdWx0OwogCiAgICAgICB1bm9yZGVyZWRfc2V0KGlu aXRpYWxpemVyX2xpc3Q8dmFsdWVfdHlwZT4gX19sLAogCQkgICAgc2l6ZV90 eXBlIF9fbiA9IDAsCkBAIC01MDYsMTQgKzUwNCwxMiBAQCBuYW1lc3BhY2Ug X19kZWJ1ZwogCQlfX2dudV9kZWJ1Zzo6X19iYXNlKF9fbGFzdCksIF9fbiwK IAkJX19oZiwgX19lcWwsIF9fYSkgeyB9CiAKLSAgICAgIHVub3JkZXJlZF9t dWx0aXNldChjb25zdCB1bm9yZGVyZWRfbXVsdGlzZXQmIF9feCkgCi0gICAg ICA6IF9CYXNlKF9feCkgeyB9CisgICAgICB1bm9yZGVyZWRfbXVsdGlzZXQo Y29uc3QgdW5vcmRlcmVkX211bHRpc2V0JiBfX3gpID0gZGVmYXVsdDsKIAog ICAgICAgdW5vcmRlcmVkX211bHRpc2V0KGNvbnN0IF9CYXNlJiBfX3gpIAog ICAgICAgOiBfQmFzZShfX3gpIHsgfQogCi0gICAgICB1bm9yZGVyZWRfbXVs dGlzZXQodW5vcmRlcmVkX211bHRpc2V0JiYgX194KQotICAgICAgOiBfQmFz ZShzdGQ6Om1vdmUoX194KSkgeyB9CisgICAgICB1bm9yZGVyZWRfbXVsdGlz ZXQodW5vcmRlcmVkX211bHRpc2V0JiYgX194KSA9IGRlZmF1bHQ7CiAKICAg ICAgIHVub3JkZXJlZF9tdWx0aXNldChpbml0aWFsaXplcl9saXN0PHZhbHVl X3R5cGU+IF9fbCwKIAkJCSBzaXplX3R5cGUgX19uID0gMCwKZGlmZiAtLWdp dCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC91bm9yZGVyZWRfbWFwIGIv bGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL3Vub3JkZXJlZF9tYXAKaW5kZXgg ZTc3YTI5Ny4uYmZlYWJlYyAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2lu Y2x1ZGUvc3RkL3Vub3JkZXJlZF9tYXAKKysrIGIvbGlic3RkYysrLXYzL2lu Y2x1ZGUvc3RkL3Vub3JkZXJlZF9tYXAKQEAgLTQwLDYgKzQwLDcgQEAKICNp bmNsdWRlIDxpbml0aWFsaXplcl9saXN0PgogI2luY2x1ZGUgPGJpdHMvc3Rs X2FsZ29iYXNlLmg+CiAjaW5jbHVkZSA8Yml0cy9hbGxvY2F0b3IuaD4KKyNp bmNsdWRlIDxiaXRzL2FsbG9jX3RyYWl0cy5oPgogI2luY2x1ZGUgPGJpdHMv c3RsX2Z1bmN0aW9uLmg+IC8vIGVxdWFsX3RvLCBfSWRlbnRpdHksIF9TZWxl Y3Qxc3QKICNpbmNsdWRlIDxiaXRzL2Z1bmN0aW9uYWxfaGFzaC5oPgogI2lu Y2x1ZGUgPGJpdHMvaGFzaHRhYmxlLmg+CmRpZmYgLS1naXQgYS9saWJzdGRj KystdjMvaW5jbHVkZS9zdGQvdW5vcmRlcmVkX3NldCBiL2xpYnN0ZGMrKy12 My9pbmNsdWRlL3N0ZC91bm9yZGVyZWRfc2V0CmluZGV4IDczOWUwYTQuLjBj NzU0MDQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC91 bm9yZGVyZWRfc2V0CisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC91 bm9yZGVyZWRfc2V0CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8aW5p dGlhbGl6ZXJfbGlzdD4KICNpbmNsdWRlIDxiaXRzL3N0bF9hbGdvYmFzZS5o PgogI2luY2x1ZGUgPGJpdHMvYWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8Yml0 cy9hbGxvY190cmFpdHMuaD4KICNpbmNsdWRlIDxiaXRzL3N0bF9mdW5jdGlv bi5oPiAvLyBlcXVhbF90bywgX0lkZW50aXR5LCBfU2VsZWN0MXN0CiAjaW5j bHVkZSA8Yml0cy9mdW5jdGlvbmFsX2hhc2guaD4KICNpbmNsdWRlIDxiaXRz L2hhc2h0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3Rz dWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9tYXAvNTUwNDMuY2MgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVk X21hcC81NTA0My5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi41MGU1NDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYz L3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9tYXAvNTUwNDMu Y2MKQEAgLTAsMCArMSw2OSBAQAorLy8geyBkZy1vcHRpb25zICItc3RkPWdu dSsrMHgiIH0KKy8vIHsgZGctZG8gY29tcGlsZSB9CisKKy8vIENvcHlyaWdo dCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8v CisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGli cmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0 aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikK Ky8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0 aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKwor Ly8gbGlic3RkYysrLzU1MDQzCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFw PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworc3RydWN0IE1vdmVPbmx5Cit7Cisg IE1vdmVPbmx5KCkgPSBkZWZhdWx0OworICBNb3ZlT25seShNb3ZlT25seSYm KSA9IGRlZmF1bHQ7Cit9OworCit1c2luZyBoYXNoID0gc3RkOjpoYXNoPGlu dD47Cit1c2luZyBlcXVhbCA9IHN0ZDo6ZXF1YWxfdG88aW50PjsKKwordGVt cGxhdGU8dHlwZW5hbWUgQWxsb2M+CisgIHVzaW5nIHRlc3RfdHlwZSA9IHN0 ZDo6dW5vcmRlcmVkX21hcDxpbnQsIE1vdmVPbmx5LCBoYXNoLCBlcXVhbCwg QWxsb2M+OworCit2b2lkIHRlc3QwMSgpCit7CisgIHR5cGVkZWYgdGVzdF90 eXBlPHN0ZDo6YWxsb2NhdG9yPE1vdmVPbmx5Pj4gdWltOworICBzdGQ6OnZl Y3Rvcjx1aW0+IHY7CisgIHYuZW1wbGFjZV9iYWNrKHVpbSgpKTsKK30KKwor Ly8gVW5vcmRlcmVkIGNvbnRhaW5lcnMgZG9uJ3QgdXNlIGFsbG9jYXRvcl90 cmFpdHMgeWV0IHNvIG5lZWQgZnVsbAorLy8gQWxsb2NhdG9yIGludGVyZmFj ZSwgZGVyaXZlIGZyb20gc3RkOjphbGxvY2F0b3IgdG8gZ2V0IGl0LgordGVt cGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBSPgorc3RydWN0IEFsbG9jIDogc3Rk OjphbGxvY2F0b3I8VD4KK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg ICBzdHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBBbGxvYzxVLCBSPiBvdGhlcjsg fTsKKworICBBbGxvYygpID0gZGVmYXVsdDsKKworICB0ZW1wbGF0ZTx0eXBl bmFtZSBVPgorICAgIEFsbG9jKGNvbnN0IEFsbG9jPFUsIFI+JikgeyB9CisK KyAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPFIsIFQmJiwg Y29uc3QgVCY+Ojp0eXBlIGFyZ190eXBlOworCisgIHZvaWQgY29uc3RydWN0 KFQqIHAsIGFyZ190eXBlKSBjb25zdAorICB7IG5ldygodm9pZCopcCkgVCgp OyB9Cit9OworCisvLyB2ZXJpZnkgaXNfY29weV9jb25zdHJ1Y3RpYmxlIGRl cGVuZHMgb24gYWxsb2NhdG9yCit0eXBlZGVmIHRlc3RfdHlwZTxBbGxvYzxN b3ZlT25seSwgdHJ1ZT4+IHVpbV9ydmFsOworc3RhdGljX2Fzc2VydCghc3Rk Ojppc19jb3B5X2NvbnN0cnVjdGlibGU8dWltX3J2YWw+Ojp2YWx1ZSwgImlz IG5vdCBjb3B5YWJsZSIpOworCit0eXBlZGVmIHRlc3RfdHlwZTxBbGxvYzxN b3ZlT25seSwgZmFsc2U+PiB1aW1fbHZhbDsKK3N0YXRpY19hc3NlcnQoc3Rk Ojppc19jb3B5X2NvbnN0cnVjdGlibGU8dWltX2x2YWw+Ojp2YWx1ZSwgImlz IGNvcHlhYmxlIik7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1 aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21hcC9yZXF1aXJlbWVudHMv NTMzMzkuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5l cnMvdW5vcmRlcmVkX21hcC9yZXF1aXJlbWVudHMvNTMzMzkuY2MKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0MDRjZQotLS0gL2Rl di9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFp bmVycy91bm9yZGVyZWRfbWFwL3JlcXVpcmVtZW50cy81MzMzOS5jYwpAQCAt MCwwICsxLDM2IEBACisvLyBYRkFJTCBiZWNhdXNlIG9mIFBSIGxpYnN0ZGMr Ky81NTA0MyBmaXgKKy8vIHsgZGctZG8gY29tcGlsZSB7IHhmYWlsICotKi0q IH0gfQorLy8geyBkZy1leGNlc3MtZXJyb3JzICIiIH0KKy8vIHsgZGctb3B0 aW9ucyAiLXN0ZD1nbnUrKzExIiB9CisKKy8vIENvcHlyaWdodCAoQykgMjAx Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8v IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5 LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQor Ly8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8g YW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor Ly8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8v IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRo aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5j bHVkZSA8dW5vcmRlcmVkX21hcD4KKworc3RydWN0IExpbmtlZEhhc2hNYXAK K3sKKyAgc3RydWN0IEVudHJ5OworCisgIHR5cGVkZWYgc3RkOjp1bm9yZGVy ZWRfbWFwPGludCwgRW50cnk+IFN0b3JhZ2U7CisgIHR5cGVkZWYgU3RvcmFn ZTo6aXRlcmF0b3IgRW50cnlQdHI7CisKKyAgc3RydWN0IEVudHJ5CisgIHsK KyAgICBFbnRyeVB0ciBwcmV2LCBuZXh0OworICB9OworfTsKZGlmZiAtLWdp dCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9y ZGVyZWRfbXVsdGltYXAvNTUwNDMuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1 aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpbWFwLzU1MDQzLmNj Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZWVjYWEK LS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIz X2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpbWFwLzU1MDQzLmNjCkBAIC0w LDAgKzEsNjkgQEAKKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzB4IiB9 CisvLyB7IGRnLWRvIGNvbXBpbGUgfQorCisvLyBDb3B5cmlnaHQgKEMpIDIw MTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhp cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBU aGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkg bGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor Ly8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBs aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisv LyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8vIGxpYnN0 ZGMrKy81NTA0MworCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNs dWRlIDx2ZWN0b3I+CisKK3N0cnVjdCBNb3ZlT25seQoreworICBNb3ZlT25s eSgpID0gZGVmYXVsdDsKKyAgTW92ZU9ubHkoTW92ZU9ubHkmJikgPSBkZWZh dWx0OworfTsKKwordXNpbmcgaGFzaCA9IHN0ZDo6aGFzaDxpbnQ+OwordXNp bmcgZXF1YWwgPSBzdGQ6OmVxdWFsX3RvPGludD47CisKK3RlbXBsYXRlPHR5 cGVuYW1lIEFsbG9jPgorICB1c2luZyB0ZXN0X3R5cGUgPSBzdGQ6OnVub3Jk ZXJlZF9tdWx0aW1hcDxpbnQsIE1vdmVPbmx5LCBoYXNoLCBlcXVhbCwgQWxs b2M+OworCit2b2lkIHRlc3QwMSgpCit7CisgIHR5cGVkZWYgdGVzdF90eXBl PHN0ZDo6YWxsb2NhdG9yPE1vdmVPbmx5Pj4gdWltOworICBzdGQ6OnZlY3Rv cjx1aW0+IHY7CisgIHYuZW1wbGFjZV9iYWNrKHVpbSgpKTsKK30KKworLy8g VW5vcmRlcmVkIGNvbnRhaW5lcnMgZG9uJ3QgdXNlIGFsbG9jYXRvcl90cmFp dHMgeWV0IHNvIG5lZWQgZnVsbAorLy8gQWxsb2NhdG9yIGludGVyZmFjZSwg ZGVyaXZlIGZyb20gc3RkOjphbGxvY2F0b3IgdG8gZ2V0IGl0LgordGVtcGxh dGU8dHlwZW5hbWUgVCwgYm9vbCBSPgorc3RydWN0IEFsbG9jIDogc3RkOjph bGxvY2F0b3I8VD4KK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz dHJ1Y3QgcmViaW5kIHsgdHlwZWRlZiBBbGxvYzxVLCBSPiBvdGhlcjsgfTsK KworICBBbGxvYygpID0gZGVmYXVsdDsKKworICB0ZW1wbGF0ZTx0eXBlbmFt ZSBVPgorICAgIEFsbG9jKGNvbnN0IEFsbG9jPFUsIFI+JikgeyB9CisKKyAg dHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPFIsIFQmJiwgY29u c3QgVCY+Ojp0eXBlIGFyZ190eXBlOworCisgIHZvaWQgY29uc3RydWN0KFQq IHAsIGFyZ190eXBlKSBjb25zdAorICB7IG5ldygodm9pZCopcCkgVCgpOyB9 Cit9OworCisvLyB2ZXJpZnkgaXNfY29weV9jb25zdHJ1Y3RpYmxlIGRlcGVu ZHMgb24gYWxsb2NhdG9yCit0eXBlZGVmIHRlc3RfdHlwZTxBbGxvYzxNb3Zl T25seSwgdHJ1ZT4+IHVpbV9ydmFsOworc3RhdGljX2Fzc2VydCghc3RkOjpp c19jb3B5X2NvbnN0cnVjdGlibGU8dWltX3J2YWw+Ojp2YWx1ZSwgImlzIG5v dCBjb3B5YWJsZSIpOworCit0eXBlZGVmIHRlc3RfdHlwZTxBbGxvYzxNb3Zl T25seSwgZmFsc2U+PiB1aW1fbHZhbDsKK3N0YXRpY19hc3NlcnQoc3RkOjpp c19jb3B5X2NvbnN0cnVjdGlibGU8dWltX2x2YWw+Ojp2YWx1ZSwgImlzIGNv cHlhYmxlIik7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRl LzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpbWFwL3JlcXVpcmVtZW50 cy81MzMzOS5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFp bmVycy91bm9yZGVyZWRfbXVsdGltYXAvcmVxdWlyZW1lbnRzLzUzMzM5LmNj Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjY2QyYTgK LS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIz X2NvbnRhaW5lcnMvdW5vcmRlcmVkX211bHRpbWFwL3JlcXVpcmVtZW50cy81 MzMzOS5jYwpAQCAtMCwwICsxLDM2IEBACisvLyBYRkFJTCBiZWNhdXNlIG9m IFBSIGxpYnN0ZGMrKy81NTA0MyBmaXgKKy8vIHsgZGctZG8gY29tcGlsZSB7 IHhmYWlsICotKi0qIH0gfQorLy8geyBkZy1leGNlc3MtZXJyb3JzICIiIH0K Ky8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzExIiB9CisKKy8vIENvcHly aWdodCAoQykgMjAxMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNP IEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIg b3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGli cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25n CisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcz LiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworc3RydWN0IExp bmtlZEhhc2hNYXAKK3sKKyAgc3RydWN0IEVudHJ5OworCisgIHR5cGVkZWYg c3RkOjp1bm9yZGVyZWRfbXVsdGltYXA8aW50LCBFbnRyeT4gU3RvcmFnZTsK KyAgdHlwZWRlZiBTdG9yYWdlOjppdGVyYXRvciBFbnRyeVB0cjsKKworICBz dHJ1Y3QgRW50cnkKKyAgeworICAgIEVudHJ5UHRyIHByZXYsIG5leHQ7Cisg IH07Cit9OwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8y M19jb250YWluZXJzL3Vub3JkZXJlZF9tdWx0aXNldC81NTA0My5jYyBiL2xp YnN0ZGMrKy12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRf bXVsdGlzZXQvNTUwNDMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uOWQ3MWNmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfbXVsdGlz ZXQvNTUwNDMuY2MKQEAgLTAsMCArMSw3MyBAQAorLy8geyBkZy1vcHRpb25z ICItc3RkPWdudSsrMHgiIH0KKy8vIHsgZGctZG8gY29tcGlsZSB9CisKKy8v IENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElT TyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3Vy IG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxp YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4gIElmIG5vdCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKworLy8gbGlic3RkYysrLzU1MDQzCisKKyNpbmNsdWRlIDx1bm9y ZGVyZWRfc2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworc3RydWN0IE1vdmVP bmx5Cit7CisgIE1vdmVPbmx5KCkgPSBkZWZhdWx0OworICBNb3ZlT25seShN b3ZlT25seSYmKSA9IGRlZmF1bHQ7Cit9OworCitzdHJ1Y3QgZXF1YWwgewor ICBib29sIG9wZXJhdG9yKCkoY29uc3QgTW92ZU9ubHkmLCBjb25zdCBNb3Zl T25seSkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKK3N0cnVjdCBoYXNo IHsKKyAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBNb3ZlT25seSYp IGNvbnN0IHsgcmV0dXJuIDA7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l IEFsbG9jPgorICB1c2luZyB0ZXN0X3R5cGUgPSBzdGQ6OnVub3JkZXJlZF9t dWx0aXNldDxNb3ZlT25seSwgaGFzaCwgZXF1YWwsIEFsbG9jPjsKKwordm9p ZCB0ZXN0MDEoKQoreworICB0eXBlZGVmIHRlc3RfdHlwZTxzdGQ6OmFsbG9j YXRvcjxNb3ZlT25seT4+IHVpbTsKKyAgc3RkOjp2ZWN0b3I8dWltPiB2Owor ICB2LmVtcGxhY2VfYmFjayh1aW0oKSk7Cit9CisKKy8vIFVub3JkZXJlZCBj b250YWluZXJzIGRvbid0IHVzZSBhbGxvY2F0b3JfdHJhaXRzIHlldCBzbyBu ZWVkIGZ1bGwKKy8vIEFsbG9jYXRvciBpbnRlcmZhY2UsIGRlcml2ZSBmcm9t IHN0ZDo6YWxsb2NhdG9yIHRvIGdldCBpdC4KK3RlbXBsYXRlPHR5cGVuYW1l IFQsIGJvb2wgUj4KK3N0cnVjdCBBbGxvYyA6IHN0ZDo6YWxsb2NhdG9yPFQ+ Cit7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RydWN0IHJlYmlu ZCB7IHR5cGVkZWYgQWxsb2M8VSwgUj4gb3RoZXI7IH07CisKKyAgQWxsb2Mo KSA9IGRlZmF1bHQ7CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBB bGxvYyhjb25zdCBBbGxvYzxVLCBSPiYpIHsgfQorCisgIHR5cGVkZWYgdHlw ZW5hbWUgc3RkOjpjb25kaXRpb25hbDxSLCBUJiYsIGNvbnN0IFQmPjo6dHlw ZSBhcmdfdHlwZTsKKworICB2b2lkIGNvbnN0cnVjdChUKiBwLCBhcmdfdHlw ZSkgY29uc3QKKyAgeyBuZXcoKHZvaWQqKXApIFQoKTsgfQorfTsKKworLy8g dmVyaWZ5IGlzX2NvcHlfY29uc3RydWN0aWJsZSBkZXBlbmRzIG9uIGFsbG9j YXRvcgordHlwZWRlZiB0ZXN0X3R5cGU8QWxsb2M8TW92ZU9ubHksIHRydWU+ PiB1aW1fcnZhbDsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfY29weV9jb25z dHJ1Y3RpYmxlPHVpbV9ydmFsPjo6dmFsdWUsICJpcyBub3QgY29weWFibGUi KTsKKwordHlwZWRlZiB0ZXN0X3R5cGU8QWxsb2M8TW92ZU9ubHksIGZhbHNl Pj4gdWltX2x2YWw7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29weV9jb25z dHJ1Y3RpYmxlPHVpbV9sdmFsPjo6dmFsdWUsICJpcyBjb3B5YWJsZSIpOwpk aWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWlu ZXJzL3Vub3JkZXJlZF9zZXQvNTUwNDMuY2MgYi9saWJzdGRjKystdjMvdGVz dHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX3NldC81NTA0My5jYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTI0ODkwCi0t LSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19j b250YWluZXJzL3Vub3JkZXJlZF9zZXQvNTUwNDMuY2MKQEAgLTAsMCArMSw3 MyBAQAorLy8geyBkZy1vcHRpb25zICItc3RkPWdudSsrMHgiIH0KKy8vIHsg ZGctZG8gY29tcGlsZSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxMyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGli cmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2 ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7 IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8vIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8gbGlic3RkYysrLzU1 MDQzCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorI2luY2x1ZGUgPHZl Y3Rvcj4KKworc3RydWN0IE1vdmVPbmx5Cit7CisgIE1vdmVPbmx5KCkgPSBk ZWZhdWx0OworICBNb3ZlT25seShNb3ZlT25seSYmKSA9IGRlZmF1bHQ7Cit9 OworCitzdHJ1Y3QgZXF1YWwgeworICBib29sIG9wZXJhdG9yKCkoY29uc3Qg TW92ZU9ubHkmLCBjb25zdCBNb3ZlT25seSkgY29uc3QgeyByZXR1cm4gdHJ1 ZTsgfQorfTsKK3N0cnVjdCBoYXNoIHsKKyAgc3RkOjpzaXplX3Qgb3BlcmF0 b3IoKShjb25zdCBNb3ZlT25seSYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KK307 CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFsbG9jPgorICB1c2luZyB0ZXN0X3R5 cGUgPSBzdGQ6OnVub3JkZXJlZF9zZXQ8TW92ZU9ubHksIGhhc2gsIGVxdWFs LCBBbGxvYz47CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgdHlwZWRlZiB0ZXN0 X3R5cGU8c3RkOjphbGxvY2F0b3I8TW92ZU9ubHk+PiB1aW07CisgIHN0ZDo6 dmVjdG9yPHVpbT4gdjsKKyAgdi5lbXBsYWNlX2JhY2sodWltKCkpOworfQor CisvLyBVbm9yZGVyZWQgY29udGFpbmVycyBkb24ndCB1c2UgYWxsb2NhdG9y X3RyYWl0cyB5ZXQgc28gbmVlZCBmdWxsCisvLyBBbGxvY2F0b3IgaW50ZXJm YWNlLCBkZXJpdmUgZnJvbSBzdGQ6OmFsbG9jYXRvciB0byBnZXQgaXQuCit0 ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIFI+CitzdHJ1Y3QgQWxsb2MgOiBz dGQ6OmFsbG9jYXRvcjxUPgoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor ICAgIHN0cnVjdCByZWJpbmQgeyB0eXBlZGVmIEFsbG9jPFUsIFI+IG90aGVy OyB9OworCisgIEFsbG9jKCkgPSBkZWZhdWx0OworCisgIHRlbXBsYXRlPHR5 cGVuYW1lIFU+CisgICAgQWxsb2MoY29uc3QgQWxsb2M8VSwgUj4mKSB7IH0K KworICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8UiwgVCYm LCBjb25zdCBUJj46OnR5cGUgYXJnX3R5cGU7CisKKyAgdm9pZCBjb25zdHJ1 Y3QoVCogcCwgYXJnX3R5cGUpIGNvbnN0CisgIHsgbmV3KCh2b2lkKilwKSBU KCk7IH0KK307CisKKy8vIHZlcmlmeSBpc19jb3B5X2NvbnN0cnVjdGlibGUg ZGVwZW5kcyBvbiBhbGxvY2F0b3IKK3R5cGVkZWYgdGVzdF90eXBlPEFsbG9j PE1vdmVPbmx5LCB0cnVlPj4gdWltX3J2YWw7CitzdGF0aWNfYXNzZXJ0KCFz dGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTx1aW1fcnZhbD46OnZhbHVlLCAi aXMgbm90IGNvcHlhYmxlIik7CisKK3R5cGVkZWYgdGVzdF90eXBlPEFsbG9j PE1vdmVPbmx5LCBmYWxzZT4+IHVpbV9sdmFsOworc3RhdGljX2Fzc2VydChz dGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTx1aW1fbHZhbD46OnZhbHVlLCAi aXMgY29weWFibGUiKTsKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjNfY29udGFpbmVycy91bm9yZGVyZWRfc2V0L2luc3RhbnRpYXRp b25fbmVnLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWlu ZXJzL3Vub3JkZXJlZF9zZXQvaW5zdGFudGlhdGlvbl9uZWcuY2MKaW5kZXgg M2E2OTg0Yy4uMTllNWQ1ZSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL3Rl c3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9zZXQvaW5zdGFudGlh dGlvbl9uZWcuY2MKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19j b250YWluZXJzL3Vub3JkZXJlZF9zZXQvaW5zdGFudGlhdGlvbl9uZWcuY2MK QEAgLTE5LDcgKzE5LDcgQEAKIC8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg dGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAvLyA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKLS8vIHsgZGctZXJyb3IgInN0YXRp YyBhc3NlcnRpb24gZmFpbGVkIiAiIiB7IHRhcmdldCAqLSotKiB9IDE4NSB9 CisvLyB7IGRnLWVycm9yICJzdGF0aWMgYXNzZXJ0aW9uIGZhaWxlZCIgIiIg eyB0YXJnZXQgKi0qLSogfSAxODcgfQogCiAjaW5jbHVkZSA8dW5vcmRlcmVk X3NldD4KIAo= --f46d04308562c1b22504d60768f8--