From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ot1-x334.google.com (mail-ot1-x334.google.com [IPv6:2607:f8b0:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id 1046F3851C0B; Mon, 25 May 2020 19:48:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1046F3851C0B Received: by mail-ot1-x334.google.com with SMTP id a68so14551812otb.10; Mon, 25 May 2020 12:48:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=XBGjEMauXTS3VDnPA+9zSUI1yL3R+SH1Ye70Hg87nCg=; b=l7OwNKdBnHbfjf4FdYZV5KMV8K4xPvf1gxHKGKjdZ3Crnaa3HRyZQseLKeWC0zkYFS YEvXT+gMAqUIto1nmWywHI7mG5Q56KJe8doQ1YJLJhz3M9LcSReKpPDWIyxmHxGJkEuk 0qdDWrq0AWUkjWA/cwPft0hPZOnFGzcKQRlkR/LEH262m8xcU7RBG0LNm25hKGTXaqRD qiZHdMsANhB+KM0zyj8WUQ0WMV3o7eVs7TMTuOgGMbfSOwMbJsoNICrCl6bleHO4mmCe 5ghpbvC139UDMgA3mdpGmBES7g7AKS6J10Wtl/5Pp+NxQtv6iJR/cuqgyDPDImBG4nzu 1+ew== X-Gm-Message-State: AOAM5314HDtxfoA7gmjLxDeJFw4frlWmiKRbpZ+2v96MixFJYm0RvoAg LfMmUtKDl0PA6SGfGfnaEB2fzlG8ajfI2v37E0g= X-Google-Smtp-Source: ABdhPJy+LhJ8vBNo0CpVWTfAKtZFYehGChgI7GMJL+JVJwq0rO1d5BKJLUlvEElREu0FaWx4zv1UjBmFLC4D28xnyCE= X-Received: by 2002:a9d:191:: with SMTP id e17mr21080291ote.193.1590436119383; Mon, 25 May 2020 12:48:39 -0700 (PDT) MIME-Version: 1.0 References: <4b619179a08075bd2ee7f9e98aa2d5918191306d.camel@redhat.com> In-Reply-To: <4b619179a08075bd2ee7f9e98aa2d5918191306d.camel@redhat.com> From: =?UTF-8?Q?Nicolas_B=C3=A9rtolo?= Date: Mon, 25 May 2020 16:48:26 -0300 Message-ID: Subject: Re: [PATCH] Port libgccjit to Windows. To: David Malcolm Cc: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="000000000000ef41fb05a67e4398" X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 May 2020 19:48:41 -0000 --000000000000ef41fb05a67e4398 Content-Type: text/plain; charset="UTF-8" Hi Dave, Thanks for your feedback. > Do you have copyright assignment paperwork on file? > https://gcc.gnu.org/contribute.html#legal My paperwork is done. > The autotools are not my strongest suit. > In a previous life I was a Windows developer, but I think it's been > about 18 years since I've done any coding on Windows, so I'm going to > have to trust your Windows expertise. I guess the best solution would be to use libtool and Automake, but that require major changes in the GCC build system. I came up with a solution that uses an if statement to choose the way to build the dynamic library. > > It is not necessary to use --enable-host-shared in Windows (I tested > it), > > but I > > don't know the proper way to disable that check. I used case statement to check the value of $(target). > What's the issue with fchmod on Windows? Does it not exist, or does it > not work? > Please add a comment explaining why. fchmod does not exist in Windows. > Please can you fix the indentation here to stay within 80 columns. > It looks like there's very similar (identical?) code to this below in > several places. > Can it be put in a subroutine to avoid repetition? I created a new file "jit-w32.{h,c}" to store the definitions of win_mkdtemp() and print_last_error(). > Is there a cast to HMODULE everywhere that m_dso_handle is used? > If so, does it make the code cleaner if the field becomes an HMODULE on > Windows? I added a new type "result::handle_t" that abstracts over this difference. > This seems like a very awkward way to get a temporary directory, but > perhaps it's the best that can be done on Windows? We could copy an implementation of mkdtemp () for Windows or write something using a random number generator. I did it this way because it was the fastest. > Sorry if this seems excessively like nitpicking - thanks again for the > patch. No problem. Here is a new version. Nico. --000000000000ef41fb05a67e4398 Content-Type: application/octet-stream; name="0001-Port-libgccjit-to-Windows.patch" Content-Disposition: attachment; filename="0001-Port-libgccjit-to-Windows.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kamwkyx00 RnJvbSBhNjIwYzE2YWRmYWRjZWJhYmQ5OTZhMGIxZDM3NjFhNTgyMTQzZWQ3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Tmljb2w9QzM9QTFzPTIwQj1DMz1BOXJ0b2xv Pz0gPG5pY29sYXNiZXJ0b2xvQGdtYWlsLmNvbT4KRGF0ZTogRnJpLCAyMiBNYXkgMjAyMCAxNzo1 NDo0MSAtMDMwMApTdWJqZWN0OiBbUEFUQ0hdIFBvcnQgbGliZ2Njaml0IHRvIFdpbmRvd3MuCgoq IGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKiBjb25maWd1cmUuYWM6IERvbid0IHJlcXVpcmUgLS1l bmFibGUtaG9zdC1zaGFyZWQgd2hlbiBidWlsZGluZyBmb3IgTWluZ3cuCiogZ2NjL01ha2VmaWxl LmluOiBkb24ndCBsb29rIGZvciBsaWJpYmVydHkgaW4gdGhlICJwaWMiIHN1YmRpcmVjdG9yeSB3 aGVuCmJ1aWxkaW5nIGZvciBNaW5ndy4gQWRkIGRlcGVuZGVuY3kgb24geGdjYyB3aXRoIHRoZSBw cm9wZXIgZXh0ZW5zaW9uLgoqIGdjYy9jL01ha2UtbGFuZy5pbjogUmVtb3ZlIGV4dHJhIHNsYXNo LgoqIGdjYy9qaXQvTWFrZS1sYW5nLmluOiBSZW1vdmUgZXh0cmEgc2xhc2guIEJ1aWxkIGxpYmdj Y2ppdC5kbGwgYW5kIGl0cyBpbXBvcnQKbGlicmFyeSBpbiBXaW5kb3dzLgoqIGdjYy9qaXQvaml0 LXczMi5oOiBOZXcgZmlsZS4KKiBnY2Mvaml0L2ppdC13MzIuYyAocHJpbnRfbGFzdF9lcnJvcik6 IE5ldyBmdW5jdGlvbiB0aGF0IHByaW50cyB0aGUgZXJyb3IKc3RyaW5nIGNvcnJlc3BvbmRpbmcg dG8gR2V0TGFzdEVycm9yKCkuCih3aW5fbWtkdGVtcCk6IENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJl Y3RvcnkgdXNpbmcgV2luZG93cyBBUElzLgoqIGdjYy9qaXQvaml0LXBsYXliYWNrLmM6IERvIG5v dCBjaG1vZCBmaWxlcyBpbiBXaW5kb3dzLiBVc2UgTG9hZExpYnJhcnksCkZyZWVMaWJyYXJ5IGFu ZCBHZXRQcm9jQWRkcmVzcyBpbnN0ZWFkIG9mIGxpYmRsLgoqIGdjYy9qaXQvaml0LXJlc3VsdC57 aCxjfTogSW50cm9kdWNlIHJlc3VsdDo6aGFuZGxlX3QgdG8gYWJzdHJhY3Qgb3ZlciB0aGUKdHlw ZXMgdXNlZCBmb3IgZHluYW1pYyBsaWJyYXJ5IGhhbmRsZXMuCiogZ2NjL2ppdC9qaXQtdGVtcGRp ci5jOiBEbyBub3QgdXNlIG1rZHRlbXAoKSBpbiBXaW5kb3dzLCB1c2Ugd2luX21rZHRlbXAoKS4K LS0tCiBjb25maWd1cmUgICAgICAgICAgICAgIHwgIDMyICsrKysrKystLS0tLS0KIGNvbmZpZ3Vy ZS5hYyAgICAgICAgICAgfCAgMzIgKysrKysrKy0tLS0tLQogZ2NjL01ha2VmaWxlLmluICAgICAg ICB8ICAxMCArKy0tCiBnY2MvYy9NYWtlLWxhbmcuaW4gICAgIHwgICAyICstCiBnY2Mvaml0L01h a2UtbGFuZy5pbiAgIHwgIDU1ICsrKysrKysrKysrKysrKysrKy0tLS0KIGdjYy9qaXQvaml0LXBs YXliYWNrLmMgfCAgMjQgKysrKysrKystLQogZ2NjL2ppdC9qaXQtcmVzdWx0LmMgICB8ICAzOSAr KysrKysrKysrKysrLS0tCiBnY2Mvaml0L2ppdC1yZXN1bHQuaCAgIHwgIDE0ICsrKysrLQogZ2Nj L2ppdC9qaXQtdGVtcGRpci5jICB8ICAxMCArKysrCiBnY2Mvaml0L2ppdC13MzIuYyAgICAgIHwg MTAyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBnY2Mvaml0L2pp dC13MzIuaCAgICAgIHwgIDMwICsrKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgMzAwIGlu c2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy9qaXQv aml0LXczMi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL2ppdC9qaXQtdzMyLmgKCmRpZmYgLS1n aXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggM2FmNmE1MzBiLi5iNzg5NzQ0NmMgMTAw NzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTY0ODksOSArNjQ4OSwxMyBA QCAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBHTkFUIGlzIHJlcXVpcmVkIHRvIGJ1aWxkICRs YW5ndWFnZSIgPiYyO30KICAgICAgICAgZXNhYwogCiAgICAgICAgICMgRGlzYWJsZSBqaXQgaWYg LWVuYWJsZS1ob3N0LXNoYXJlZCBub3Qgc3BlY2lmaWVkCi0gICAgICAgIGNhc2UgJHthZGRfdGhp c19sYW5nfToke2xhbmd1YWdlfToke2hvc3Rfc2hhcmVkfSBpbgotICAgICAgICAgIHllczpqaXQ6 bm8pCi0JICAgICMgUFIgaml0LzY0NzgwOiBleHBsaWNpdGx5IHNwZWNpZnkgLS1lbmFibGUtaG9z dC1zaGFyZWQKKyAgICAgICAgIyBidXQgbm90IGlmIGJ1aWxkaW5nIGZvciBNaW5ndworICAgICAg ICBjYXNlICR0YXJnZXQgaW4KKyAgICAgICAgICAqbWluZ3cqKSA7OworICAgICAgICAgICopCisg ICAgICAgICAgY2FzZSAke2FkZF90aGlzX2xhbmd9OiR7bGFuZ3VhZ2V9OiR7aG9zdF9zaGFyZWR9 IGluCisgICAgICAgICAgICB5ZXM6aml0Om5vKQorCSAgICAgICAgICAgIyBQUiBqaXQvNjQ3ODA6 IGV4cGxpY2l0bHkgc3BlY2lmeSAtLWVuYWJsZS1ob3N0LXNoYXJlZAogCSAgICBhc19mbl9lcnJv ciAkPyAiCiBFbmFibGluZyBsYW5ndWFnZSBcImppdFwiIHJlcXVpcmVzIC0tZW5hYmxlLWhvc3Qt c2hhcmVkLgogCkBAIC02NTAyLDE3ICs2NTA2LDE5IEBAIElmIHlvdSB3YW50IHRvIGJ1aWxkIGJv dGggdGhlIGppdCBhbmQgdGhlIHJlZ3VsYXIgY29tcGlsZXIsIGl0IGlzIG9mdGVuCiBiZXN0IHRv IGRvIHRoaXMgdmlhIHR3byBzZXBhcmF0ZSBjb25maWd1cmUvYnVpbGRzLCBpbiBzZXBhcmF0ZQog ZGlyZWN0b3JpZXMsIHRvIGF2b2lkIGltcG9zaW5nIHRoZSBwZXJmb3JtYW5jZSBjb3N0IG9mCiAt LWVuYWJsZS1ob3N0LXNoYXJlZCBvbiB0aGUgcmVndWxhciBjb21waWxlci4iICIkTElORU5PIiA1 Ci0JICAgIDs7Ci0gICAgICAgICAgYWxsOmppdDpubykKLQkgICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAtLWVuYWJsZS1ob3N0LXNoYXJlZCByZXF1 aXJlZCB0byBidWlsZCAkbGFuZ3VhZ2UiID4mNQorCSAgICAgICAgICAgIDs7CisgICAgICAgICAg ICBhbGw6aml0Om5vKQorCSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogV0FSTklORzogLS1lbmFibGUtaG9zdC1zaGFyZWQgcmVxdWlyZWQgdG8gYnVpbGQgJGxh bmd1YWdlIiA+JjUKICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IC0tZW5hYmxlLWhvc3Qtc2hh cmVkIHJlcXVpcmVkIHRvIGJ1aWxkICRsYW5ndWFnZSIgPiYyO30KLSAgICAgICAgICAgIGFkZF90 aGlzX2xhbmc9dW5zdXBwb3J0ZWQKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgKjpqaXQ6bm8p Ci0gICAgICAgICAgICAjIFNpbGVudGx5IGRpc2FibGUuCi0gICAgICAgICAgICBhZGRfdGhpc19s YW5nPXVuc3VwcG9ydGVkCi0gICAgICAgICAgICA7OwotCWVzYWMKKyAgICAgICAgICAgICAgYWRk X3RoaXNfbGFuZz11bnN1cHBvcnRlZAorICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKjpq aXQ6bm8pCisgICAgICAgICAgICAgICMgU2lsZW50bHkgZGlzYWJsZS4KKyAgICAgICAgICAgICAg YWRkX3RoaXNfbGFuZz11bnN1cHBvcnRlZAorICAgICAgICAgICAgICA7OworCSAgICAgICAgZXNh YworICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKIAogICAgICAgICAjIERpc2FibGUgYSBsYW5n dWFnZSB0aGF0IGlzIHVuc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQuCiAJY2FzZSAiJHthZGRfdGhp c19sYW5nfTogJHVuc3VwcG9ydGVkX2xhbmd1YWdlcyAiIGluCmRpZmYgLS1naXQgYS9jb25maWd1 cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggYTY3ODAxMzcxLi5lZGQ5NjNkM2QgMTAwNjQ0Ci0t LSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTIwNzksOSArMjA3OSwxMyBA QCBpZiB0ZXN0IC1kICR7c3JjZGlyfS9nY2M7IHRoZW4KICAgICAgICAgZXNhYwogCiAgICAgICAg ICMgRGlzYWJsZSBqaXQgaWYgLWVuYWJsZS1ob3N0LXNoYXJlZCBub3Qgc3BlY2lmaWVkCi0gICAg ICAgIGNhc2UgJHthZGRfdGhpc19sYW5nfToke2xhbmd1YWdlfToke2hvc3Rfc2hhcmVkfSBpbgot ICAgICAgICAgIHllczpqaXQ6bm8pCi0JICAgICMgUFIgaml0LzY0NzgwOiBleHBsaWNpdGx5IHNw ZWNpZnkgLS1lbmFibGUtaG9zdC1zaGFyZWQKKyAgICAgICAgIyBidXQgbm90IGlmIGJ1aWxkaW5n IGZvciBNaW5ndworICAgICAgICBjYXNlICR0YXJnZXQgaW4KKyAgICAgICAgICAqbWluZ3cqKSA7 OworICAgICAgICAgICopCisgICAgICAgICAgY2FzZSAke2FkZF90aGlzX2xhbmd9OiR7bGFuZ3Vh Z2V9OiR7aG9zdF9zaGFyZWR9IGluCisgICAgICAgICAgICB5ZXM6aml0Om5vKQorCSAgICAgICAg ICAgIyBQUiBqaXQvNjQ3ODA6IGV4cGxpY2l0bHkgc3BlY2lmeSAtLWVuYWJsZS1ob3N0LXNoYXJl ZAogCSAgICBBQ19NU0dfRVJST1IoWwogRW5hYmxpbmcgbGFuZ3VhZ2UgImppdCIgcmVxdWlyZXMg LS1lbmFibGUtaG9zdC1zaGFyZWQuCiAKQEAgLTIwOTIsMTYgKzIwOTYsMTggQEAgSWYgeW91IHdh bnQgdG8gYnVpbGQgYm90aCB0aGUgaml0IGFuZCB0aGUgcmVndWxhciBjb21waWxlciwgaXQgaXMg b2Z0ZW4KIGJlc3QgdG8gZG8gdGhpcyB2aWEgdHdvIHNlcGFyYXRlIGNvbmZpZ3VyZS9idWlsZHMs IGluIHNlcGFyYXRlCiBkaXJlY3RvcmllcywgdG8gYXZvaWQgaW1wb3NpbmcgdGhlIHBlcmZvcm1h bmNlIGNvc3Qgb2YKIC0tZW5hYmxlLWhvc3Qtc2hhcmVkIG9uIHRoZSByZWd1bGFyIGNvbXBpbGVy Ll0pCi0JICAgIDs7Ci0gICAgICAgICAgYWxsOmppdDpubykKLQkgICAgQUNfTVNHX1dBUk4oWy0t ZW5hYmxlLWhvc3Qtc2hhcmVkIHJlcXVpcmVkIHRvIGJ1aWxkICRsYW5ndWFnZV0pCi0gICAgICAg ICAgICBhZGRfdGhpc19sYW5nPXVuc3VwcG9ydGVkCi0gICAgICAgICAgICA7OwotICAgICAgICAg ICo6aml0Om5vKQotICAgICAgICAgICAgIyBTaWxlbnRseSBkaXNhYmxlLgotICAgICAgICAgICAg YWRkX3RoaXNfbGFuZz11bnN1cHBvcnRlZAotICAgICAgICAgICAgOzsKLQllc2FjCisJICAgICAg ICAgICAgOzsKKyAgICAgICAgICAgIGFsbDpqaXQ6bm8pCisJICAgICAgQUNfTVNHX1dBUk4oWy0t ZW5hYmxlLWhvc3Qtc2hhcmVkIHJlcXVpcmVkIHRvIGJ1aWxkICRsYW5ndWFnZV0pCisgICAgICAg ICAgICAgIGFkZF90aGlzX2xhbmc9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgICAgOzsKKyAgICAg ICAgICAgICo6aml0Om5vKQorICAgICAgICAgICAgICAjIFNpbGVudGx5IGRpc2FibGUuCisgICAg ICAgICAgICAgIGFkZF90aGlzX2xhbmc9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgICAgOzsKKwkg ICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCiAKICAgICAgICAgIyBEaXNh YmxlIGEgbGFuZ3VhZ2UgdGhhdCBpcyB1bnN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0LgogCWNhc2Ug IiR7YWRkX3RoaXNfbGFuZ306ICR1bnN1cHBvcnRlZF9sYW5ndWFnZXMgIiBpbgpkaWZmIC0tZ2l0 IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCmluZGV4IDBmZTJiYTI0MS4uNDU4 NTFlY2E4IDEwMDY0NAotLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrIGIvZ2NjL01ha2VmaWxlLmlu CkBAIC0xMDQ2LDEwICsxMDQ2LDEyIEBAIEFMTF9MSU5LRVJGTEFHUyA9ICQoQUxMX0NYWEZMQUdT KQogCiAjIEJ1aWxkIGFuZCBob3N0IHN1cHBvcnQgbGlicmFyaWVzLgogCi0jIFVzZSB0aGUgInBp YyIgYnVpbGQgb2YgbGliaWJlcnR5IGlmIC0tZW5hYmxlLWhvc3Qtc2hhcmVkLgorIyBVc2UgdGhl ICJwaWMiIGJ1aWxkIG9mIGxpYmliZXJ0eSBpZiAtLWVuYWJsZS1ob3N0LXNoYXJlZCwgdW5sZXNz IHdlIGFyZQorIyBidWlsZGluZyBmb3IgbWluZ3cuCitMSUJJQkVSVFlfUElDRElSPSQoaWYgJChm aW5kc3RyaW5nIG1pbmd3LCQodGFyZ2V0KSksLHBpYykKIGlmZXEgKCQoZW5hYmxlX2hvc3Rfc2hh cmVkKSx5ZXMpCi1MSUJJQkVSVFkgPSAuLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hCi1CVUlM RF9MSUJJQkVSVFkgPSAkKGJ1aWxkX2xpYm9iamRpcikvbGliaWJlcnR5L3BpYy9saWJpYmVydHku YQorTElCSUJFUlRZID0gLi4vbGliaWJlcnR5LyQoTElCSUJFUlRZX1BJQ0RJUikvbGliaWJlcnR5 LmEKK0JVSUxEX0xJQklCRVJUWSA9ICQoYnVpbGRfbGlib2JqZGlyKS9saWJpYmVydHkvJChMSUJJ QkVSVFlfUElDRElSKS9saWJpYmVydHkuYQogZWxzZQogTElCSUJFUlRZID0gLi4vbGliaWJlcnR5 L2xpYmliZXJ0eS5hCiBCVUlMRF9MSUJJQkVSVFkgPSAkKGJ1aWxkX2xpYm9iamRpcikvbGliaWJl cnR5L2xpYmliZXJ0eS5hCkBAIC0xNzI2LDcgKzE3MjgsNyBAQCBNT1NUTFlDTEVBTkZJTEVTID0g aW5zbi1mbGFncy5oIGluc24tY29uZmlnLmggaW5zbi1jb2Rlcy5oIFwKICMgVGhpcyBzeW1saW5r IG1ha2VzIHRoZSBmdWxsIGluc3RhbGxhdGlvbiBuYW1lIG9mIHRoZSBkcml2ZXIgYmUgYXZhaWxh YmxlCiAjIGZyb20gd2l0aGluIHRoZSAqYnVpbGQqIGRpcmVjdG9yeSwgZm9yIHVzZSB3aGVuIHJ1 bm5pbmcgdGhlIEpJVCBsaWJyYXJ5CiAjIGZyb20gdGhlcmUgKGUuZy4gd2hlbiBydW5uaW5nIGl0 cyB0ZXN0c3VpdGUpLgotJChGVUxMX0RSSVZFUl9OQU1FKTogLi94Z2NjCiskKEZVTExfRFJJVkVS X05BTUUpOiAuL3hnY2MkKGV4ZWV4dCkKIAlybSAtZiAkQAogCSQoTE5fUykgJDwgJEAKIApkaWZm IC0tZ2l0IGEvZ2NjL2MvTWFrZS1sYW5nLmluIGIvZ2NjL2MvTWFrZS1sYW5nLmluCmluZGV4IDg5 NDRiOWI5Zi4uN2VmYzdjMmMzIDEwMDY0NAotLS0gYS9nY2MvYy9NYWtlLWxhbmcuaW4KKysrIGIv Z2NjL2MvTWFrZS1sYW5nLmluCkBAIC0xNjIsNyArMTYyLDcgQEAgYy5pbnN0YWxsLXBsdWdpbjog aW5zdGFsbGRpcnMKICMgSW5zdGFsbCBpbXBvcnQgbGlicmFyeS4KIGlmZXEgKCQocGx1Z2luX2lt cGxpYikseWVzKQogCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX3Jlc291cmNl c2RpcikKLQkkKElOU1RBTExfREFUQSkgY2MxJChleGVleHQpLmEgJChERVNURElSKS8kKHBsdWdp bl9yZXNvdXJjZXNkaXIpL2NjMSQoZXhlZXh0KS5hCisJJChJTlNUQUxMX0RBVEEpIGNjMSQoZXhl ZXh0KS5hICQoREVTVERJUikkKHBsdWdpbl9yZXNvdXJjZXNkaXIpL2NjMSQoZXhlZXh0KS5hCiBl bmRpZgogCiBjLnVuaW5zdGFsbDoKZGlmZiAtLWdpdCBhL2djYy9qaXQvTWFrZS1sYW5nLmluIGIv Z2NjL2ppdC9NYWtlLWxhbmcuaW4KaW5kZXggMzhkZGZhZDI4Li4zOWQ1NTU2NTAgMTAwNjQ0Ci0t LSBhL2djYy9qaXQvTWFrZS1sYW5nLmluCisrKyBiL2djYy9qaXQvTWFrZS1sYW5nLmluCkBAIC00 MCwxMCArNDAsMTkgQEAKICMgaW50byB0aGUgaml0IHJ1bGUsIGJ1dCB0aGF0IG5lZWRzIGEgbGl0 dGxlIGJpdCBvZiB3b3JrCiAjIHRvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoaW4gYWxsLmNyb3Nz LgogCitpZm5lcSAoLCQoZmluZHN0cmluZyBtaW5ndywkKHRhcmdldCkpKQorTElCR0NDSklUX0ZJ TEVOQU1FID0gbGliZ2Njaml0LmRsbAorCitqaXQ6ICQoTElCR0NDSklUX0ZJTEVOQU1FKSBcCisJ JChGVUxMX0RSSVZFUl9OQU1FKQorCitlbHNlCisKIExJQkdDQ0pJVF9MSU5LRVJfTkFNRSA9IGxp YmdjY2ppdC5zbwogTElCR0NDSklUX1ZFUlNJT05fTlVNID0gMAogTElCR0NDSklUX01JTk9SX05V TSA9IDAKIExJQkdDQ0pJVF9SRUxFQVNFX05VTSA9IDEKKwogTElCR0NDSklUX1NPTkFNRSA9ICQo TElCR0NDSklUX0xJTktFUl9OQU1FKS4kKExJQkdDQ0pJVF9WRVJTSU9OX05VTSkKIExJQkdDQ0pJ VF9GSUxFTkFNRSA9IFwKICAgJChMSUJHQ0NKSVRfU09OQU1FKS4kKExJQkdDQ0pJVF9NSU5PUl9O VU0pLiQoTElCR0NDSklUX1JFTEVBU0VfTlVNKQpAQCAtNjgsNiArNzcsNyBAQCBqaXQ6ICQoTElC R0NDSklUX0ZJTEVOQU1FKSBcCiAJJChMSUJHQ0NKSVRfU1lNTElOSykgXAogCSQoTElCR0NDSklU X0xJTktFUl9OQU1FX1NZTUxJTkspIFwKIAkkKEZVTExfRFJJVkVSX05BTUUpCitlbmRpZgogCiAj IFRlbGwgR05VIG1ha2UgdG8gaWdub3JlIHRoZXNlIGlmIHRoZXkgZXhpc3QuCiAuUEhPTlk6IGpp dApAQCAtODQsOSArOTQsMjcgQEAgaml0X09CSlMgPSBhdHRyaWJzLm8gXAogCWppdC9qaXQtc3Bl Yy5vIFwKIAlnY2MubwogCitpZm5lcSAoLCQoZmluZHN0cmluZyBtaW5ndywkKHRhcmdldCkpKQor aml0X09CSlMgKz0gaml0L2ppdC13MzIubworZW5kaWYKKwogIyBVc2Ugc3RyaWN0IHdhcm5pbmdz IGZvciB0aGlzIGZyb250IGVuZC4KIGppdC13YXJuID0gJChTVFJJQ1RfV0FSTikKIAoraWZuZXEg KCwkKGZpbmRzdHJpbmcgbWluZ3csJCh0YXJnZXQpKSkKKyMgV2UgYXZvaWQgdXNpbmcgJChCQUNL RU5EKSBmcm9tIE1ha2VmaWxlLmluIGluIG9yZGVyIHRvIGF2b2lkIHB1bGxpbmcKKyMgaW4gbWFp bi5vCiskKExJQkdDQ0pJVF9GSUxFTkFNRSk6ICQoaml0X09CSlMpIFwKKwlsaWJiYWNrZW5kLmEg bGliY29tbW9uLXRhcmdldC5hIGxpYmNvbW1vbi5hIFwKKwkkKENQUExJQikgJChMSUJERUNOVU1C RVIpIFwKKwkkKExJQkRFUFMpICQoc3JjZGlyKS9qaXQvbGliZ2Njaml0Lm1hcCBcCisJJChFWFRS QV9HQ0NfT0JKUykKKwkrJChMTElOS0VSKSAkKEFMTF9MSU5LRVJGTEFHUykgJChMREZMQUdTKSAt byAkQCAtc2hhcmVkIFwKKwkgICAgICQoaml0X09CSlMpIGxpYmJhY2tlbmQuYSBsaWJjb21tb24t dGFyZ2V0LmEgbGliY29tbW9uLmEgXAorCSAgICAgJChDUFBMSUIpICQoTElCREVDTlVNQkVSKSAk KEVYVFJBX0dDQ19MSUJTKSAkKExJQlMpICQoQkFDS0VORExJQlMpIFwKKwkgICAgICQoRVhUUkFf R0NDX09CSlMpIFwKKwkgICAgIC1XbCwtLW91dC1pbXBsaWIsJChMSUJHQ0NKSVRfRklMRU5BTUUp LmEKK2Vsc2UKICMgV2UgYXZvaWQgdXNpbmcgJChCQUNLRU5EKSBmcm9tIE1ha2VmaWxlLmluIGlu IG9yZGVyIHRvIGF2b2lkIHB1bGxpbmcKICMgaW4gbWFpbi5vCiAkKExJQkdDQ0pJVF9GSUxFTkFN RSk6ICQoaml0X09CSlMpIFwKQEAgLTEwNiw2ICsxMzQsNyBAQCAkKExJQkdDQ0pJVF9TT05BTUVf U1lNTElOSyk6ICQoTElCR0NDSklUX0ZJTEVOQU1FKQogCiAkKExJQkdDQ0pJVF9MSU5LRVJfTkFN RV9TWU1MSU5LKTogJChMSUJHQ0NKSVRfU09OQU1FX1NZTUxJTkspCiAJbG4gLXNmICQoTElCR0ND SklUX1NPTkFNRV9TWU1MSU5LKSAkKExJQkdDQ0pJVF9MSU5LRVJfTkFNRV9TWU1MSU5LKQorZW5k aWYKIAogIwwKICMgQnVpbGQgaG9va3M6CkBAIC0yNzUsMTkgKzMwNCwyOSBAQCBzZWxmdGVzdC1q aXQ6CiAKICMMCiAjIEluc3RhbGwgaG9va3M6Ci1qaXQuaW5zdGFsbC1jb21tb246IGluc3RhbGxk aXJzCitqaXQuaW5zdGFsbC1oZWFkZXJzOgorCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvaml0 L2xpYmdjY2ppdC5oIFwKKwkgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmdjY2ppdC5oCisJ JChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9qaXQvbGliZ2Njaml0KysuaCBcCisJICAkKERFU1RE SVIpJChpbmNsdWRlZGlyKS9saWJnY2NqaXQrKy5oCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIG1p bmd3LCQodGFyZ2V0KSkpCitqaXQuaW5zdGFsbC1jb21tb246IGluc3RhbGxkaXJzIGppdC5pbnN0 YWxsLWhlYWRlcnMKKwkkKElOU1RBTExfUFJPR1JBTSkgJChMSUJHQ0NKSVRfRklMRU5BTUUpLmEg XAorCSAgJChERVNURElSKSQobGliZGlyKS8kKExJQkdDQ0pJVF9GSUxFTkFNRSkuYQogCSQoSU5T VEFMTF9QUk9HUkFNKSAkKExJQkdDQ0pJVF9GSUxFTkFNRSkgXAotCSAgJChERVNURElSKS8kKGxp YmRpcikvJChMSUJHQ0NKSVRfRklMRU5BTUUpCisJICAkKERFU1RESVIpJChiaW5kaXIpLyQoTElC R0NDSklUX0ZJTEVOQU1FKQorZWxzZQoraml0Lmluc3RhbGwtY29tbW9uOiBpbnN0YWxsZGlycyBq aXQuaW5zdGFsbC1oZWFkZXJzCisJJChJTlNUQUxMX1BST0dSQU0pICQoTElCR0NDSklUX0ZJTEVO QU1FKSBcCisJICAkKERFU1RESVIpJChsaWJkaXIpLyQoTElCR0NDSklUX0ZJTEVOQU1FKQogCWxu IC1zZiBcCiAJICAkKExJQkdDQ0pJVF9GSUxFTkFNRSkgXAotCSAgJChERVNURElSKS8kKGxpYmRp cikvJChMSUJHQ0NKSVRfU09OQU1FX1NZTUxJTkspCisJICAkKERFU1RESVIpJChsaWJkaXIpLyQo TElCR0NDSklUX1NPTkFNRV9TWU1MSU5LKQogCWxuIC1zZiBcCiAJICAkKExJQkdDQ0pJVF9TT05B TUVfU1lNTElOSylcCi0JICAkKERFU1RESVIpLyQobGliZGlyKS8kKExJQkdDQ0pJVF9MSU5LRVJf TkFNRV9TWU1MSU5LKQotCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvaml0L2xpYmdjY2ppdC5o IFwKLQkgICQoREVTVERJUikvJChpbmNsdWRlZGlyKS9saWJnY2NqaXQuaAotCSQoSU5TVEFMTF9E QVRBKSAkKHNyY2Rpcikvaml0L2xpYmdjY2ppdCsrLmggXAotCSAgJChERVNURElSKS8kKGluY2x1 ZGVkaXIpL2xpYmdjY2ppdCsrLmgKKwkgICQoREVTVERJUikkKGxpYmRpcikvJChMSUJHQ0NKSVRf TElOS0VSX05BTUVfU1lNTElOSykKK2VuZGlmCiAKIGppdC5pbnN0YWxsLW1hbjoKIApkaWZmIC0t Z2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suYyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmMKaW5k ZXggZDJjOGJiNGMxLi5kMTY5NGUwODkgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNr LmMKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suYwpAQCAtNDcsNiArNDcsMTAgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJq aXQtYnVpbHRpbnMuaCIKICNpbmNsdWRlICJqaXQtdGVtcGRpci5oIgogCisjaWZkZWYgX1dJTjMy CisjaW5jbHVkZSAiaml0LXczMi5oIgorI2VuZGlmCisKIC8qIENvbXBhcmUgd2l0aCBnY2MvYy1m YW1pbHkvYy1jb21tb24uaDogREVDTF9DX0JJVF9GSUVMRCwKICAgIFNFVF9ERUNMX0NfQklUX0ZJ RUxELgogICAgVGhlc2UgYXJlIHJlZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGRlcGVuZGluZyBmcm9t IHRoZSBDIGZyb250ZW5kLiAgKi8KQEAgLTIxNTksOCArMjE2MywxMCBAQCBwbGF5YmFjazo6Y29t cGlsZV90b19maWxlOjpjb3B5X2ZpbGUgKGNvbnN0IGNoYXIgKnNyY19wYXRoLAogCiAgIGdjY19h c3NlcnQgKHRvdGFsX3N6X2luID09IHRvdGFsX3N6X291dCk7CiAgIGlmIChnZXRfbG9nZ2VyICgp KQotICAgIGdldF9sb2dnZXIgKCktPmxvZyAoInRvdGFsIGJ5dGVzIGNvcGllZDogJWxkIiwgdG90 YWxfc3pfb3V0KTsKKyAgICBnZXRfbG9nZ2VyICgpLT5sb2cgKCJ0b3RhbCBieXRlcyBjb3BpZWQ6 ICV6dSIsIHRvdGFsX3N6X291dCk7CiAKKwkvKiBmY2htb2QgZG9lcyBub3QgZXhpc3QgaW4gV2lu ZG93cy4gKi8KKwkjaWZuZGVmIF9XSU4zMgogICAvKiBTZXQgdGhlIHBlcm1pc3Npb25zIG9mIHRo ZSBjb3B5IHRvIHRob3NlIG9mIHRoZSBvcmlnaW5hbCBmaWxlLAogICAgICBpbiBwYXJ0aWN1bGFy IHRoZSAiZXhlY3V0YWJsZSIgYml0cy4gICovCiAgIGlmIChmY2htb2QgKGZpbGVubyAoZl9vdXQp LCBzdGF0X2J1Zi5zdF9tb2RlKSA9PSAtMSkKQEAgLTIxNjgsNiArMjE3NCw3IEBAIHBsYXliYWNr Ojpjb21waWxlX3RvX2ZpbGU6OmNvcHlfZmlsZSAoY29uc3QgY2hhciAqc3JjX3BhdGgsCiAJICAg ICAgICJlcnJvciBzZXR0aW5nIG1vZGUgb2YgJXM6ICVzIiwKIAkgICAgICAgZHN0X3BhdGgsCiAJ ICAgICAgIHhzdHJlcnJvciAoZXJybm8pKTsKKwkjZW5kaWYKIAogICBmY2xvc2UgKGZfb3V0KTsK IH0KQEAgLTI2NDQsMTAgKzI2NTEsMTkgQEAgZGxvcGVuX2J1aWx0X2RzbyAoKQogewogICBKSVRf TE9HX1NDT1BFIChnZXRfbG9nZ2VyICgpKTsKICAgYXV0b190aW1ldmFyIGxvYWRfdGltZXZhciAo Z2V0X3RpbWVyICgpLCBUVl9MT0FEKTsKLSAgdm9pZCAqaGFuZGxlID0gTlVMTDsKLSAgY29uc3Qg Y2hhciAqZXJyb3IgPSBOVUxMOworCXJlc3VsdDo6aGFuZGxlX3QgaGFuZGxlID0gTlVMTDsKICAg cmVzdWx0ICpyZXN1bHRfb2JqID0gTlVMTDsKIAorI2lmZGVmIF9XSU4zMgorICAvKiBDbGVhciBh bnkgZXhpc3RpbmcgZXJyb3IuICAqLworICBTZXRMYXN0RXJyb3IoMCk7CisKKyAgaGFuZGxlID0g TG9hZExpYnJhcnkobV90ZW1wZGlyLT5nZXRfcGF0aF9zb19maWxlICgpKTsKKyAgaWYgKEdldExh c3RFcnJvcigpICE9IDApICB7CisJCXByaW50X2xhc3RfZXJyb3IoKTsKKyAgfQorI2Vsc2UKKyAg Y29uc3QgY2hhciAqZXJyb3IgPSBOVUxMOwogICAvKiBDbGVhciBhbnkgZXhpc3RpbmcgZXJyb3Iu ICAqLwogICBkbGVycm9yICgpOwogCkBAIC0yNjU2LDYgKzI2NzIsOCBAQCBkbG9wZW5fYnVpbHRf ZHNvICgpCiAgIGlmICgoZXJyb3IgPSBkbGVycm9yKCkpICE9IE5VTEwpICB7CiAgICAgYWRkX2Vy cm9yIChOVUxMLCAiJXMiLCBlcnJvcik7CiAgIH0KKyNlbmRpZgorCiAgIGlmIChoYW5kbGUpCiAg ICAgewogICAgICAgLyogV2UndmUgc3VjY2Vzc2Z1bGx5IGRsb3BlbmVkIHRoZSByZXN1bHQ7IGNy ZWF0ZSBhCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1yZXN1bHQuYyBiL2djYy9qaXQvaml0LXJl c3VsdC5jCmluZGV4IGMxMGU1YTEzYy4uNjA1YWU2NGVlIDEwMDY0NAotLS0gYS9nY2Mvaml0L2pp dC1yZXN1bHQuYworKysgYi9nY2Mvaml0L2ppdC1yZXN1bHQuYwpAQCAtMjcsMTMgKzI3LDE3IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAiaml0LXJlc3VsdC5oIgogI2luY2x1ZGUgImppdC10ZW1wZGlyLmgiCiAKKyNpZmRlZiBf V0lOMzIKKyNpbmNsdWRlICJqaXQtdzMyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIGdjYyB7CiBu YW1lc3BhY2Ugaml0IHsKIAogLyogQ29uc3RydWN0b3IgZm9yIGdjYzo6aml0OjpyZXN1bHQuICAq LwogCiByZXN1bHQ6OgotcmVzdWx0KGxvZ2dlciAqbG9nZ2VyLCB2b2lkICpkc29faGFuZGxlLCB0 ZW1wZGlyICp0ZW1wZGlyXykgOgorcmVzdWx0KGxvZ2dlciAqbG9nZ2VyLCBoYW5kbGVfdCBkc29f aGFuZGxlLCB0ZW1wZGlyICp0ZW1wZGlyXykgOgogICBsb2dfdXNlciAobG9nZ2VyKSwKICAgbV9k c29faGFuZGxlIChkc29faGFuZGxlKSwKICAgbV90ZW1wZGlyICh0ZW1wZGlyXykKQEAgLTQ5LDgg KzUzLDExIEBAIHJlc3VsdDo6fnJlc3VsdCgpCiB7CiAgIEpJVF9MT0dfU0NPUEUgKGdldF9sb2dn ZXIgKCkpOwogCisjaWZkZWYgX1dJTjMyCisgIEZyZWVMaWJyYXJ5KG1fZHNvX2hhbmRsZSk7Cisj ZWxzZQogICBkbGNsb3NlIChtX2Rzb19oYW5kbGUpOwotCisjZW5kaWYKICAgLyogUmVzcG9uc2li aWxpdHkgZm9yIGNsZWFuaW5nIHVwIHRoZSB0ZW1wZGlyIChpbmNsdWRpbmcgImZha2Uuc28iIHdp dGhpbgogICAgICB0aGUgZmlsZXN5c3RlbSkgbWlnaHQgaGF2ZSBiZWVuIGhhbmRlZCB0byB1cyBi eSB0aGUgcGxheWJhY2s6OmNvbnRleHQsCiAgICAgIHNvIHRoYXQgdGhlIGNsZWFudXAgY2FuIGJl IGRlbGF5ZWQgKHNlZSBQUiBqaXQvNjQyMDYpLgpAQCAtNzIsOCArNzksMTcgQEAgZ2V0X2NvZGUg KGNvbnN0IGNoYXIgKmZ1bmNuYW1lKQogICBKSVRfTE9HX1NDT1BFIChnZXRfbG9nZ2VyICgpKTsK IAogICB2b2lkICpjb2RlOwotICBjb25zdCBjaGFyICplcnJvcjsKIAorI2lmZGVmIF9XSU4zMgor ICAvKiBDbGVhciBhbnkgZXhpc3RpbmcgZXJyb3IuICAqLworICBTZXRMYXN0RXJyb3IoMCk7CisK KyAgY29kZSA9ICh2b2lkICopR2V0UHJvY0FkZHJlc3MobV9kc29faGFuZGxlLCBmdW5jbmFtZSk7 CisgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSAwKSAgeworCQlwcmludF9sYXN0X2Vycm9yICgpOwor ICB9CisjZWxzZQorICBjb25zdCBjaGFyICplcnJvcjsKICAgLyogQ2xlYXIgYW55IGV4aXN0aW5n IGVycm9yLiAgKi8KICAgZGxlcnJvciAoKTsKIApAQCAtODEsNyArOTcsOCBAQCBnZXRfY29kZSAo Y29uc3QgY2hhciAqZnVuY25hbWUpCiAKICAgaWYgKChlcnJvciA9IGRsZXJyb3IoKSkgIT0gTlVM TCkgIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBlcnJvcik7Ci0gIH0KKwl9CisjZW5k aWYKIAogICByZXR1cm4gY29kZTsKIH0KQEAgLTk5LDggKzExNiwxNyBAQCBnZXRfZ2xvYmFsIChj b25zdCBjaGFyICpuYW1lKQogICBKSVRfTE9HX1NDT1BFIChnZXRfbG9nZ2VyICgpKTsKIAogICB2 b2lkICpnbG9iYWw7Ci0gIGNvbnN0IGNoYXIgKmVycm9yOwogCisjaWZkZWYgX1dJTjMyCisgIC8q IENsZWFyIGFueSBleGlzdGluZyBlcnJvci4gICovCisgIFNldExhc3RFcnJvcigwKTsKKworICBn bG9iYWwgPSAodm9pZCAqKUdldFByb2NBZGRyZXNzKG1fZHNvX2hhbmRsZSwgbmFtZSk7CisgIGlm IChHZXRMYXN0RXJyb3IoKSAhPSAwKSAgeworCQlwcmludF9sYXN0X2Vycm9yICgpOworICB9Cisj ZWxzZQorICBjb25zdCBjaGFyICplcnJvcjsKICAgLyogQ2xlYXIgYW55IGV4aXN0aW5nIGVycm9y LiAgKi8KICAgZGxlcnJvciAoKTsKIApAQCAtMTA4LDcgKzEzNCw4IEBAIGdldF9nbG9iYWwgKGNv bnN0IGNoYXIgKm5hbWUpCiAKICAgaWYgKChlcnJvciA9IGRsZXJyb3IoKSkgIT0gTlVMTCkgIHsK ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBlcnJvcik7Ci0gIH0KKwl9CisjZW5kaWYKIAog ICByZXR1cm4gZ2xvYmFsOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVzdWx0LmggYi9n Y2Mvaml0L2ppdC1yZXN1bHQuaAppbmRleCAwMjU4NjA2MDMuLjJiYTg3ZTU4YyAxMDA2NDQKLS0t IGEvZ2NjL2ppdC9qaXQtcmVzdWx0LmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVzdWx0LmgKQEAgLTIx LDYgKzIxLDEwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCiAjaWZuZGVmIEpJVF9SRVNVTFRfSAogI2RlZmluZSBKSVRfUkVTVUxUX0gKIAorI2lm ZGVmIF9XSU4zMgorI2luY2x1ZGUgPG1pbndpbmRlZi5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBn Y2MgewogCiBuYW1lc3BhY2Ugaml0IHsKQEAgLTI5LDcgKzMzLDEzIEBAIG5hbWVzcGFjZSBqaXQg ewogY2xhc3MgcmVzdWx0IDogcHVibGljIGxvZ191c2VyCiB7CiBwdWJsaWM6Ci0gIHJlc3VsdChs b2dnZXIgKmxvZ2dlciwgdm9pZCAqZHNvX2hhbmRsZSwgdGVtcGRpciAqdGVtcGRpcl8pOworI2lm ZGVmIF9XSU4zMgorICB1c2luZyBoYW5kbGVfdCA9IEhNT0RVTEU7CisjZWxzZQorICB1c2luZyBo YW5kbGVfdCA9IHZvaWQgKjsKKyNlbmRpZgorCisgIHJlc3VsdChsb2dnZXIgKmxvZ2dlciwgaGFu ZGxlX3QgZHNvX2hhbmRsZSwgdGVtcGRpciAqdGVtcGRpcl8pOwogCiAgIHZpcnR1YWwgfnJlc3Vs dCgpOwogCkBAIC00MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgZ2V0X2dsb2JhbCAoY29uc3QgY2hh ciAqbmFtZSk7CiAKIHByaXZhdGU6Ci0gIHZvaWQgKm1fZHNvX2hhbmRsZTsKKyAgaGFuZGxlX3Qg bV9kc29faGFuZGxlOwogICB0ZW1wZGlyICptX3RlbXBkaXI7CiB9OwogCmRpZmYgLS1naXQgYS9n Y2Mvaml0L2ppdC10ZW1wZGlyLmMgYi9nY2Mvaml0L2ppdC10ZW1wZGlyLmMKaW5kZXggMTBjNTI4 ZmFmLi4wNTBkNTM0MDkgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXRlbXBkaXIuYworKysgYi9n Y2Mvaml0L2ppdC10ZW1wZGlyLmMKQEAgLTI0LDcgKzI0LDExIEBAIGFsb25nIHdpdGggR0NDOyBz ZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAKICNpbmNsdWRlICJqaXQtdGVtcGRp ci5oIgogCisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSAiaml0LXczMi5oIgorI2VuZGlmCiAKKyNp Zm5kZWYgX1dJTjMyCiAvKiBDb25zdHJ1Y3QgYSB0ZW1wZGlyIHBhdGggdGVtcGxhdGUgc3VpdGFi bGUgZm9yIHVzZSBieSBta2R0ZW1wCiAgICBlLmcuICIvdG1wL2xpYmdjY2ppdC1YWFhYWFgiLCBi dXQgcmVzcGVjdGluZyB0aGUgcnVsZXMgaW4KICAgIGxpYmliZXJ0eSdzIGNob29zZV90ZW1wZGly IHJhdGhlciB0aGFuIGhhcmRjb2RpbmcgIi90bXAvIi4KQEAgLTYyLDYgKzY2LDcgQEAgbWFrZV90 ZW1wZGlyX3BhdGhfdGVtcGxhdGUgKCkKIAogICByZXR1cm4gcmVzdWx0OwogfQorI2VuZGlmCiAK IC8qIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGppdDo6dGVtcGRpciBvYmplY3QuCiAgICBUaGUg cmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlIGppdDo6dGVtcGRpcjo6Y3JlYXRlIG1ldGhvZC4gICov CkBAIC04Nyw2ICs5Miw5IEBAIGdjYzo6aml0Ojp0ZW1wZGlyOjpjcmVhdGUgKCkKIHsKICAgSklU X0xPR19TQ09QRSAoZ2V0X2xvZ2dlciAoKSk7CiAKKyNpZmRlZiBfV0lOMzIKKyAgbV9wYXRoX3Rl bXBkaXIgPSB3aW5fbWtkdGVtcCAoKTsKKyNlbHNlCiAgIG1fcGF0aF90ZW1wbGF0ZSA9IG1ha2Vf dGVtcGRpcl9wYXRoX3RlbXBsYXRlICgpOwogICBpZiAoIW1fcGF0aF90ZW1wbGF0ZSkKICAgICBy ZXR1cm4gZmFsc2U7CkBAIC05Nyw2ICsxMDUsOCBAQCBnY2M6OmppdDo6dGVtcGRpcjo6Y3JlYXRl ICgpCiAgICAgIGlzIHVuaXF1ZS4gIEhlbmNlIG5vIG90aGVyIChub24tcm9vdCkgdXNlcnMgc2hv dWxkIGhhdmUgYWNjZXNzIHRvCiAgICAgIHRoZSBwYXRocyB3aXRoaW4gaXQuICAqLwogICBtX3Bh dGhfdGVtcGRpciA9IG1rZHRlbXAgKG1fcGF0aF90ZW1wbGF0ZSk7CisjZW5kaWYKKwogICBpZiAo IW1fcGF0aF90ZW1wZGlyKQogICAgIHJldHVybiBmYWxzZTsKICAgbG9nICgibV9wYXRoX3RlbXBk aXI6ICVzIiwgbV9wYXRoX3RlbXBkaXIpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtdzMyLmMg Yi9nY2Mvaml0L2ppdC13MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAu LjAzZGEyZDlmNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy9qaXQvaml0LXczMi5jCkBAIC0wLDAg KzEsMTAyIEBACisvKiBGdW5jdGlvbnMgdXNlZCBieSB0aGUgV2luZG93cyBwb3J0IG9mIGxpYmdj Y2ppdC4NCisgICBDb3B5cmlnaHQgKEMpIDIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuDQorICAgQ29udHJpYnV0ZWQgYnkgTmljb2xhcyBCZXJ0b2xvIDxuaWNvbGFzYmVydG9sb0Bn bWFpbC5jb20+Lg0KKw0KK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4NCisNCitHQ0MgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdA0KK3Vu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5DQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywg b3IgKGF0IHlvdXIgb3B0aW9uKQ0KK2FueSBsYXRlciB2ZXJzaW9uLg0KKw0KK0dDQyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQNCitXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUNCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UNCithbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQ0KKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovDQorDQorI2luY2x1ZGUgImNv bmZpZy5oIg0KKw0KKyNpbmNsdWRlIDxjc3RkaW8+DQorI2luY2x1ZGUgPGNzdGRpbnQ+DQorDQor I2luY2x1ZGUgImppdC13MzIuaCINCisNCisjaW5jbHVkZSAibGliaWJlcnR5LmgiDQorDQorbmFt ZXNwYWNlIGdjYyB7DQorbmFtZXNwYWNlIGppdCB7DQordm9pZA0KK3ByaW50X2xhc3RfZXJyb3Ig KHZvaWQpDQorew0KKwlMUFNUUiBwc3p7IG51bGxwdHIgfTsNCisJRFdPUkQgZHdFcnJvckNvZGU7 DQorCWR3RXJyb3JDb2RlID0gR2V0TGFzdEVycm9yKCk7DQorCWNvbnN0IERXT1JEIGNjaE1zZyA9 IEZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0NCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZPUk1BVF9NRVNTQUdFX0FM TE9DQVRFX0JVRkZFUg0KKwkJCQkJCQkJCQkJCQkJCQkJCSB8IEZPUk1BVF9NRVNTQUdFX01BWF9X SURUSF9NQVNLLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0Vycm9yQ29kZSwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxBTkdJRChMQU5HX05FVVRSQUws IFNVQkxBTkdfREVGQVVMVCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlaW50ZXJwcmV0X2Nhc3Q8TFBTVFI+KCZwc3opLA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMKTsNCisgIGlmIChjY2hNc2cgPiAwKQ0KKwkJew0KKwkJCWZwcmludGYgKHN0ZGVyciwgIiVz XG4iLCBwc3opOw0KKwkJCUxvY2FsRnJlZSAocHN6KTsNCisJCX0NCisJZWxzZQ0KKyAgICB7DQor CQkJZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIHJldHJpZXZlIGVycm9yIG1lc3NhZ2Ugc3Ry aW5nIGZvciBlcnJvciAlbHVcbiIsDQorCQkJCQkJCSBkd0Vycm9yQ29kZSk7DQorCQl9DQorfQ0K Kw0KK2NoYXIgKg0KK3dpbl9ta2R0ZW1wICh2b2lkKQ0KK3sNCisJY2hhciBzelRlbXBGaWxlTmFt ZVtNQVhfUEFUSF07DQorCWNoYXIgbHBUZW1wUGF0aEJ1ZmZlcltNQVhfUEFUSF07DQorDQorCXdo aWxlICh0cnVlKQ0KKwkJew0KKwkJCS8qIEdldHMgdGhlIHRlbXAgcGF0aCBlbnYgc3RyaW5nIChu byBndWFyYW50ZWUgaXQncyBhIHZhbGlkIHBhdGgpLiAqLw0KKwkJCURXT1JEIGR3UmV0VmFsID0g R2V0VGVtcFBhdGggKE1BWF9QQVRILCBscFRlbXBQYXRoQnVmZmVyKTsNCisJCQlpZiAoZHdSZXRW YWwgPiBNQVhfUEFUSCB8fCAoZHdSZXRWYWwgPT0gMCkpDQorCQkJCWdvdG8gZXJyb3I7DQorDQor CQkJLyogR2VuZXJhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgbmFtZS4gKi8NCisJCQlpZiAoIUdldFRl bXBGaWxlTmFtZUEgKGxwVGVtcFBhdGhCdWZmZXIsICJnY2MiLCAwLCBzelRlbXBGaWxlTmFtZSkp DQorCQkJCWdvdG8gZXJyb3I7DQorDQorCQkJLyogR2V0VGVtcEZpbGVOYW1lQSBhY3R1YWxseSBj cmVhdGVzIGEgZmlsZSwgd2UgYXJlIG5lZWQgYSBkaXJlY3RvcnksIHNvDQorCQkJCSByZW1vdmUg aXQuICovDQorCQkJaWYgKCFEZWxldGVGaWxlQSAoc3pUZW1wRmlsZU5hbWUpKQ0KKwkJCQlnb3Rv IGVycm9yOw0KKw0KKwkJCWlmIChDcmVhdGVEaXJlY3RvcnlBIChzelRlbXBGaWxlTmFtZSwgTlVM TCkpDQorCQkJCWJyZWFrOyAvLyBzdWNjZXNzIQ0KKw0KKwkJCS8qIElmIHdlIGNhbid0IGNyZWF0 ZSB0aGUgZGlyZWN0b3J5IGJlY2F1c2Ugd2UgZ290IHVubHVja3kgYW5kIGFub3RoZXINCisJCQkJ IHByb2Nlc3MgY3JlYXRlZCBhIGZpbGUgcmV0cnksIG90aGVyd2lzZSBmYWlsLiAqLw0KKwkJCWlm IChHZXRMYXN0RXJyb3IgKCkgIT0gRVJST1JfQUxSRUFEWV9FWElTVFMpDQorCQkJCWdvdG8gZXJy b3I7DQorCQl9DQorDQorCXsNCisJCWNoYXIgKiByZXN1bHQgPSBYTkVXVkVDIChjaGFyLCBNQVhf UEFUSCk7DQorCQlzdHJjcHkgKHJlc3VsdCwgc3pUZW1wRmlsZU5hbWUpOw0KKwkJcmV0dXJuIHJl c3VsdDsNCisJfQ0KKw0KKyBlcnJvcjoNCisJcHJpbnRfbGFzdF9lcnJvciAoKTsNCisJcmV0dXJu IE5VTEw7DQorfQ0KK30NCit9DQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtdzMyLmggYi9nY2Mv aml0L2ppdC13MzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjRhYjUw ZDI1OQotLS0gL2Rldi9udWxsCisrKyBiL2djYy9qaXQvaml0LXczMi5oCkBAIC0wLDAgKzEsMzAg QEAKKy8qIEZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBXaW5kb3dzIHBvcnQgb2YgbGliZ2Njaml0Lg0K KyAgIENvcHlyaWdodCAoQykgMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisg ICBDb250cmlidXRlZCBieSBOaWNvbGFzIEJlcnRvbG8gPG5pY29sYXNiZXJ0b2xvQGdtYWlsLmNv bT4uDQorDQorVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLg0KKw0KK0dDQyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0DQordW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkN Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg eW91ciBvcHRpb24pDQorYW55IGxhdGVyIHZlcnNpb24uDQorDQorR0NDIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KK1dJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCitNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0K K0dlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCitZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0K K2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlDQorPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgi DQorDQorI2luY2x1ZGUgPHdpbmRvd3MuaD4NCisNCituYW1lc3BhY2UgZ2NjIHsNCituYW1lc3Bh Y2Ugaml0IHsNCitleHRlcm4gdm9pZCBwcmludF9sYXN0X2Vycm9yICh2b2lkKTsNCitleHRlcm4g Y2hhciAqIHdpbl9ta2R0ZW1wKHZvaWQpOw0KK30NCit9DQotLSAKMi4yNS4xLndpbmRvd3MuMQoK --000000000000ef41fb05a67e4398--