From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Matthew Bauer Newsgroups: gmane.emacs.bugs Subject: bug#48994: 28.0.50; [PATCH] 28.0.50; Native compilation unnecessarily recompiles .eln (macOS) Date: Mon, 21 Jun 2021 22:55:40 -0500 Message-ID: References: <83y2be6zj8.fsf@gnu.org> <83bl897kag.fsf@gnu.org> <8335tk7h32.fsf@gnu.org> <835yyg5k4p.fsf@gnu.org> <83fsxh1wdd.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000001ae9a905c552c4c8" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="18916"; mail-complaints-to="usenet@ciao.gmane.io" To: Alan Third , Eli Zaretskii , 48994@debbugs.gnu.org, Matthew Bauer , Andrea Corallo Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Jun 22 05:56:12 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lvXWF-0004hJ-UA for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 22 Jun 2021 05:56:12 +0200 Original-Received: from localhost ([::1]:34222 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lvXWC-00034O-U3 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 21 Jun 2021 23:56:08 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:52880) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lvXW6-00034C-6c for bug-gnu-emacs@gnu.org; Mon, 21 Jun 2021 23:56:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:53899) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lvXW5-0004bh-VD for bug-gnu-emacs@gnu.org; Mon, 21 Jun 2021 23:56:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lvXW5-0005l4-VU for bug-gnu-emacs@gnu.org; Mon, 21 Jun 2021 23:56:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Matthew Bauer Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Jun 2021 03:56:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48994 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 48994-submit@debbugs.gnu.org id=B48994.162433416022126 (code B ref 48994); Tue, 22 Jun 2021 03:56:01 +0000 Original-Received: (at 48994) by debbugs.gnu.org; 22 Jun 2021 03:56:00 +0000 Original-Received: from localhost ([127.0.0.1]:37212 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lvXW3-0005kn-Mf for submit@debbugs.gnu.org; Mon, 21 Jun 2021 23:56:00 -0400 Original-Received: from mail-ej1-f44.google.com ([209.85.218.44]:36714) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lvXW1-0005ka-P3 for 48994@debbugs.gnu.org; Mon, 21 Jun 2021 23:55:58 -0400 Original-Received: by mail-ej1-f44.google.com with SMTP id nd37so32251116ejc.3 for <48994@debbugs.gnu.org>; Mon, 21 Jun 2021 20:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=zbaIM5Pm6gQghQZfINxZj91wsN7rrA1HPRD1ywPi3Qg=; b=oDkKwlFJFo18voVi+lPUv9omo2kR5jg+r8c56yx3C2rAUEVroCyQ9PNUM2FCsUyViL yPYaHfE3HILnQj1dCQ8raqa2zyRlvNoWf5y0AAkAyzCvYoPVS5ZGOk2bTYSAjdD5THOp sRpMhef0MbCL4UHifJwgDwnuXkPgGCCc8NvEQZ41XjLAzshSKGK4KT3M71oHyue5lc/f dBNd4heQ3ngiMgaXlvhVvS1hnQXV3JYmHAfk2fiD9iSxBpcjbtRb9RrNp8tW8sx/ygfn 16b13byXbSGXpMP0i/LXiXnfH/FIgi/9a0JZ3S9lHkajbur04nn8h3uBAKn1Yx2wzWkC E+wA== 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; bh=zbaIM5Pm6gQghQZfINxZj91wsN7rrA1HPRD1ywPi3Qg=; b=HMsV0748wXfUPjkXac1Xyns0nIFJhB9vBHdUm5jzUwAErdS6qXncilWAhavzmmWEfg eCdwRwiwOq5FLgyOosHhkwYRIvKRp7JefIK6ksXrPKOTC+g9zkPmFllesLyQ9XcQFb0l WL/1rYLME1asVUH2fQvSAx8bKmgmeAiQjgOyFWGQ4hpBkbP6v6Zejn9wWaRk2a/v8B04 gQF327BR6z9YfvKCiX3KiwNigB2ijnmzzCEvBf5Rhl/0+zYPQhwBvBJeInYS4FsEH2LD WanTN2Jb+LpLEDvCEy1+PCgDs/6NW4odDh2kaYxuQTrgBo0HFSiYKntMWhLTH0Vx8uF7 EMLQ== X-Gm-Message-State: AOAM533CIH6CBYLqjLme2HugmDKEz3oBcb1TC7/J0ZIldht75ov3LsMz s3bve8SYo6zussZBWkM6aJR0SONECsG3e2xtPOQ= X-Google-Smtp-Source: ABdhPJz57f0rWp3oPLPrx65x54MtmXotELsSkseKo1c8ANKnLrEUnGDb3GiPtj2EP4dTmvDweOH3F94l2iJbdx3iTw0= X-Received: by 2002:a17:906:2a8e:: with SMTP id l14mr1556461eje.549.1624334151632; Mon, 21 Jun 2021 20:55:51 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:208839 Archived-At: --0000000000001ae9a905c552c4c8 Content-Type: multipart/alternative; boundary="0000000000001ae9a805c552c4c6" --0000000000001ae9a805c552c4c6 Content-Type: text/plain; charset="UTF-8" > Matthew, could you please try the attached patch and see if it solves > your problems (or makes them worse!)? That fixes the problem! I had to make a small change for it to work though (needed to add prefix & exec_prefix to nextstep/Makefile.in). On Sat, Jun 19, 2021 at 12:04 PM Alan Third wrote: > On Wed, Jun 16, 2021 at 09:45:50PM +0300, Eli Zaretskii wrote: > > > Date: Wed, 16 Jun 2021 19:25:14 +0100 > > > From: Alan Third > > > Cc: 48994@debbugs.gnu.org, mjbauer95@gmail.com, akrl@sdf.org > > > > > > > My primary worry is not the Makefiles, it's what the installed Emacs > > > > does upon startup to find its requisite files. > > > > > > I've done a lot of digging about and it looks like a bit of a mess, > > > frankly. > > > > It could be. But let me first ask you: did you understand how Emacs > > finds the directory with the *.eln files, and how that is related to > > finding the .pdmp file? These two parts are looked for together, and > > the place where we find the .pdmp file tells us directly where to look > > for the *.eln files. > > > > If this is "messy" on macOS, in either of the two types of install, > > then we should fix that first. > > I think I did understand that. As far as I can tell that bit actually > works fine, as long as the pdmp file can be found the eln files can be > found. > > > So we need to make NS-specific changes that will make this work > > correctly both in Unix-style and the app bundle style install. Do you > > understand how to fix this part? I'll gladly help you if needed. > > I've attached a patch which, I hope, should solve these problems. I've > tried to align the code more with how other terms work, so I've > removed all the functions that calculate the various paths Emacs uses, > and replaced them with a single function that, given a relative path > inside the application bundle, can work out what the full path should > be, but will pass any absolute paths unchanged. > > It's similar to w32_relocate, but not exactly the same, and I'm using > it in more places due to the app bundle layout being quite different. > > I've also followed the w32 lead in changing how epaths.h is generated. > Basically I post-process it so that any paths that are internal to the > app bundle are converted to relative paths, so the above mentioned > function can deal with them. > > > > > . Emacs binary in /usr/bin > > > > . the .pdmp file in /usr/libexec/emacs/VERSION/ARCHITECTURE > > > > . the *eln files in /usr/lib/emacs/VERSION/native-lisp > > > > > > > > ? > > > > > > Sorry, I must've missed it. > > > > > > Yes, a normal Unix style install should be like that. > > > > OK, then the Unix style install should already be working. Then I > > wonder how come this very install caused the OP trouble. But we can > > revisit it later, once the code whch looks for .pdmp and *.eln files > > is finalized. > > > > > However the OP appears to be using a Unix style install with a > > > different install prefix and is getting app bundle install paths in > > > his errors, specifically Contents/Resources/lisp, which I mentioned at > > > the top of the email. > > > > I wonder how this could happen, if the Unix style install is supposed > > to "just work". > > I think it's because of some hard-coding of things that was added to > work around problems in the app bundle code. They haven't been > suitably separated from the Unix style install code, so they end up > interfering with each other. > > I think that now a Unix style install shouldn't be affected at all by > the app bundle code, but I'd like some extra testing by people who run > it that way before I'm fully convinced I've been successful in that. > > > > > > I believe there's a ./configure flag. But like I said before, for > the > > > > > other paths there's a run-time check, so I'm not sure how it all > ties > > > > > together. > > > > > > > > Which run-time check did you have in mind? > > > > > > ns_exec_path, and friends. They return the app bundle paths if the > > > directories exist, and nil otherwise, then the code that calls them > > > modifies the search paths depending on the result. > > > > It's okay to use that, although I'd expect the install location to be > > known at compile time? > > The install location is known, but in the app bundle case the app can > be copied to anywhere and then the full paths will be different, so > they can't just be hard coded at install time. > > > > I think I can probably fix this now, hopefully without breaking > > > anything... ;) > > > > Fine, please do, but let's try doing that one step at a time... > > I tried, but it ended up quite a large patch as fixing one thing would > invariably break another, and I decided I had to sort out the epaths.h > situation before I could do much else, and most of the rest of the > patch is dealing with the fallout from that. > > Anyway, it's attached. It's working here for the app bundle case and I > believe it should work well for the Unix style install, but I've not > tested that in any depth. > > Matthew, could you please try the attached patch and see if it solves > your problems (or makes them worse!)? > -- > Alan Third > --0000000000001ae9a805c552c4c6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
>=C2=A0Matthew, could you please try the attached patch and se= e if it solves
> your problems (or makes them worse!)?

That fixes the problem! I had to make a small chang= e for it to work though (needed to add prefix &=C2=A0exec_prefix to=C2= =A0nextstep/Makefile.in).

On Sat, Jun 19, 2021 at 12= :04 PM Alan Third <alan@idiocy.org> wrote:
On Wed, Jun 16, 2021 at 09:45:50PM += 0300, Eli Zaretskii wrote:
> > Date: Wed, 16 Jun 2021 19:25:14 +0100
> > From: Alan Third <
alan@idiocy.org>
> > Cc: 48= 994@debbugs.gnu.org, mjbauer95@gmail.com, akrl@sdf.org
> >
> > > My primary worry is not the Makefiles, it's what the ins= talled Emacs
> > > does upon startup to find its requisite files.
> >
> > I've done a lot of digging about and it looks like a bit of a= mess,
> > frankly.
>
> It could be.=C2=A0 But let me first ask you: did you understand how Em= acs
> finds the directory with the *.eln files, and how that is related to > finding the .pdmp file?=C2=A0 These two parts are looked for together,= and
> the place where we find the .pdmp file tells us directly where to look=
> for the *.eln files.
>
> If this is "messy" on macOS, in either of the two types of i= nstall,
> then we should fix that first.

I think I did understand that. As far as I can tell that bit actually
works fine, as long as the pdmp file can be found the eln files can be
found.

> So we need to make NS-specific changes that will make this work
> correctly both in Unix-style and the app bundle style install.=C2=A0 D= o you
> understand how to fix this part?=C2=A0 I'll gladly help you if nee= ded.

I've attached a patch which, I hope, should solve these problems. I'= ;ve
tried to align the code more with how other terms work, so I've
removed all the functions that calculate the various paths Emacs uses,
and replaced them with a single function that, given a relative path
inside the application bundle, can work out what the full path should
be, but will pass any absolute paths unchanged.

It's similar to w32_relocate, but not exactly the same, and I'm usi= ng
it in more places due to the app bundle layout being quite different.

I've also followed the w32 lead in changing how epaths.h is generated.<= br> Basically I post-process it so that any paths that are internal to the
app bundle are converted to relative paths, so the above mentioned
function can deal with them.

> > >=C2=A0 =C2=A0. Emacs binary in /usr/bin
> > >=C2=A0 =C2=A0. the .pdmp file in /usr/libexec/emacs/VERSION/A= RCHITECTURE
> > >=C2=A0 =C2=A0. the *eln files in /usr/lib/emacs/VERSION/nativ= e-lisp
> > >
> > > ?
> >
> > Sorry, I must've missed it.
> >
> > Yes, a normal Unix style install should be like that.
>
> OK, then the Unix style install should already be working.=C2=A0 Then = I
> wonder how come this very install caused the OP trouble.=C2=A0 But we = can
> revisit it later, once the code whch looks for .pdmp and *.eln files > is finalized.
>
> > However the OP appears to be using a Unix style install with a > > different install prefix and is getting app bundle install paths = in
> > his errors, specifically Contents/Resources/lisp, which I mention= ed at
> > the top of the email.
>
> I wonder how this could happen, if the Unix style install is supposed<= br> > to "just work".

I think it's because of some hard-coding of things that was added to work around problems in the app bundle code. They haven't been
suitably separated from the Unix style install code, so they end up
interfering with each other.

I think that now a Unix style install shouldn't be affected at all by the app bundle code, but I'd like some extra testing by people who run<= br> it that way before I'm fully convinced I've been successful in that= .

> > > > I believe there's a ./configure flag. But like I sa= id before, for the
> > > > other paths there's a run-time check, so I'm no= t sure how it all ties
> > > > together.
> > >
> > > Which run-time check did you have in mind?
> >
> > ns_exec_path, and friends. They return the app bundle paths if th= e
> > directories exist, and nil otherwise, then the code that calls th= em
> > modifies the search paths depending on the result.
>
> It's okay to use that, although I'd expect the install locatio= n to be
> known at compile time?

The install location is known, but in the app bundle case the app can
be copied to anywhere and then the full paths will be different, so
they can't just be hard coded at install time.

> > I think I can probably fix this now, hopefully without breaking > > anything... ;)
>
> Fine, please do, but let's try doing that one step at a time...
I tried, but it ended up quite a large patch as fixing one thing would
invariably break another, and I decided I had to sort out the epaths.h
situation before I could do much else, and most of the rest of the
patch is dealing with the fallout from that.

Anyway, it's attached. It's working here for the app bundle case an= d I
believe it should work well for the Unix style install, but I've not tested that in any depth.

Matthew, could you please try the attached patch and see if it solves
your problems (or makes them worse!)?
--
Alan Third
--0000000000001ae9a805c552c4c6-- --0000000000001ae9a905c552c4c8 Content-Type: application/octet-stream; name="0001-Fix-NS-native-compilation-builds.patch" Content-Disposition: attachment; filename="0001-Fix-NS-native-compilation-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kq7ilr0h0 RnJvbSBjMDYyNzQzNjYxNjM5YjA1YWRhNzYxOGIzOTY4MTgzMjk4ZjMzZDA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IEJhdWVyIDxtamJhdWVyOTVAZ21haWwuY29tPgpE YXRlOiBNb24sIDIxIEp1biAyMDIxIDIxOjE4OjA1IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gRml4 IE5TIG5hdGl2ZSBjb21waWxhdGlvbiBidWlsZHMKCiogTWFrZWZpbGUuaW4gKG5zX2FwcGRpcik6 IE5ldyB2YXJpYWJsZS4KKC5QSE9OWSk6IEluY2x1ZGUgbmV3IHJ1bGUuCihlcGF0aHMtZm9yY2Ut bnMtc2VsZi1jb250YWluZWQpOiBSZW1vdmUgdGhlIGFwcCBidW5kbGUgZGlyZWN0b3J5IGZyb20K YWxsIHBhdGhzLgoqIGNvbmZpZ3VyZS5hYyAoTlNfU0VMRl9DT05UQUlORUQpOiBTZXQgdGhlIGRl ZmF1bHQgc2l0ZS1saXNwCmRpcmVjdG9yeSBpbnN0ZWFkIG9mIGhhcmQtY29kaW5nIGl0IGluIHRo ZSBPYmpDIGNvZGUsIGFuZCB1c2UgdGhlIG5ldwplcGF0aHMgZ2VuZXJhdGluZyBtYWtlIHJ1bGUu Ciogc3JjL2NhbGxwcm9jLmMgKGluaXRfY2FsbHByb2NfMSk6Cihpbml0X2NhbGxwcm9jKTogUmVt b3ZlIGFsbCB0aGUgTlMgc3BlY2lmaWMgY29kZSBhcyB0aGUgc3BlY2lhbCBjYXNlcwphcmUgbm93 IGhhbmRsZWQgYnkgZGVjb2RlX2Vudl9wYXRoLgoqIHNyYy9lbWFjcy5jIChsb2FkX3BkdW1wKToK KGRlY29kZV9lbnZfcGF0aCk6IFVzZSBuc19yZWxvY2F0ZSB0byBmaW5kIHRoZSBjb3JyZWN0IGRp cmVjdG9yeSBhZnRlcgpyZWxvY2F0aW9uLgoqIHNyYy9scmVhZC5jIChsb2FkX3BhdGhfZGVmYXVs dCk6IFJlbW92ZSBhbGwgdGhlIE5TIHNwZWNpZmljIGNvZGUgYXMKdGhlIHNwZWNpYWwgY2FzZXMg YXJlIG5vdyBoYW5kbGVkIGJ5IGRlY29kZV9lbnZfcGF0aC4KKiBzcmMvbnN0ZXJtLmg6IFVwZGF0 ZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KKiBzcmMvbnN0ZXJtLm0gKG5zX2V0Y19kaXJlY3Rvcnkp OgoobnNfZXhlY19wYXRoKToKKG5zX2xvYWRfcGF0aCk6IFJlbW92ZSBmdW5jdGlvbnMgdGhhdCBh cmUgbm8gbG9uZ2VyIG5lZWRlZC4KKG5zX3JlbG9jYXRlKTogTmV3IGZ1bmN0aW9uIHRvIGNhbGN1 bGF0ZSBwYXRocyB3aXRoaW4gdGhlIE5TIGFwcApidW5kbGUuCi0tLQogTWFrZWZpbGUuaW4gICAg ICAgICAgfCAgMTcgKysrKystCiBjb25maWd1cmUuYWMgICAgICAgICB8ICAxMiArKystLQogbmV4 dHN0ZXAvTWFrZWZpbGUuaW4gfCAgMTMgKysrLS0KIHNyYy9jYWxscHJvYy5jICAgICAgIHwgIDM2 ICsrLS0tLS0tLS0tLS0KIHNyYy9lbWFjcy5jICAgICAgICAgIHwgIDE2ICsrKysrLQogc3JjL2xy ZWFkLmMgICAgICAgICAgfCAgIDcgKy0tCiBzcmMvbnN0ZXJtLmggICAgICAgICB8ICAgNCArLQog c3JjL25zdGVybS5tICAgICAgICAgfCAxMjUgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogOCBmaWxlcyBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCAxNTYgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCAz ZmFjZmE1OWE5Li42OGZlN2Q3ODFhIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtl ZmlsZS5pbgpAQCAtMTA0LDggKzEwNCwxMCBAQCBIQVZFX05BVElWRV9DT01QID0gQEhBVkVfTkFU SVZFX0NPTVBACiAKICMgTG9jYXRpb24gdG8gaW5zdGFsbCBFbWFjcy5hcHAgdW5kZXIgR05Vc3Rl cCAvIG1hY09TLgogIyBMYXRlciB2YWx1ZXMgbWF5IHVzZSB0aGVzZS4KK25zX2FwcGRpcj1AbnNf YXBwZGlyQAogbnNfYXBwYmluZGlyPUBuc19hcHBiaW5kaXJACiBuc19hcHByZXNkaXI9QG5zX2Fw cHJlc2RpckAKK25zX2FwcGxpYmRpcj1AbnNfYXBwbGliZGlyQAogIyBFaXRoZXIgeWVzIG9yIG5v IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgYSByZWxvY2F0YWJsZSBFbWFjcy5hcHAuCiBu c19zZWxmX2NvbnRhaW5lZD1AbnNfc2VsZl9jb250YWluZWRACiAKQEAgLTMyOCwxMiArMzMwLDEy IEBAIEJJTl9ERVNURElSPSckKERFU1RESVIpJHtiaW5kaXJ9LycKIEVMTl9ERVNURElSID0gJChE RVNURElSKSR7bGliZGlyfS9lbWFjcy8ke3ZlcnNpb259LwogZWxzZQogQklOX0RFU1RESVI9JyR7 bnNfYXBwYmluZGlyfS8nCi1FTE5fREVTVERJUiA9ICR7bnNfYXBwcmVzZGlyfS8KK0VMTl9ERVNU RElSID0gJHtuc19hcHBsaWJkaXJ9L2VtYWNzLyR7dmVyc2lvbn0vCiBlbmRpZgogCiBhbGw6ICR7 U1VCRElSfSBpbmZvCiAKLS5QSE9OWTogYWxsICR7U1VCRElSfSBibGVzc21haWwgZXBhdGhzLWZv cmNlIGVwYXRocy1mb3JjZS13MzIgZXRjLWVtYWNzdmVyCisuUEhPTlk6IGFsbCAke1NVQkRJUn0g Ymxlc3NtYWlsIGVwYXRocy1mb3JjZSBlcGF0aHMtZm9yY2UtdzMyIGVwYXRocy1mb3JjZS1ucy1z ZWxmLWNvbnRhaW5lZCBldGMtZW1hY3N2ZXIKIAogIyBJZiBjb25maWd1cmUgd2VyZSB0byBqdXN0 IGdlbmVyYXRlIGVtYWNzdmVyLnRleCBmcm9tIGVtYWNzdmVyLnRleC5pbgogIyBpbiB0aGUgbm9y bWFsIHdheSwgdGhlIHRpbWVzdGFtcCBvZiBlbWFjc3Zlci50ZXggd291bGQgYWx3YXlzIGJlCkBA IC00MDIsNiArNDA0LDE3IEBAIGVwYXRocy1mb3JjZS13MzI6CiAJICAtZSAiL14uKiMvc3xAU1JD QHwkJHt3MzJzcmNkaXJ9fGciKSAmJgkJXAogCSR7c3JjZGlyfS9idWlsZC1hdXgvbW92ZS1pZi1j aGFuZ2UgZXBhdGhzLmguJCQkJCBzcmMvZXBhdGhzLmgKIAorIyBBIE5leHRTdGVwIHN0eWxlIGFw cCBidW5kbGUgaXMgcmVsb2NhdGFibGUsIHNvIGluc3RlYWQgb2YKKyMgaGFyZC1jb2RpbmcgcGF0 aHMgdHJ5IHRvIGdlbmVyYXRlIHRoZW0gYXQgcnVuLXRpbWUuCisjCisjIFRoZSBwYXRocyBhcmUg bW9zdGx5IHRoZSBzYW1lLCBhbmQgdGhlIGJ1bmRsZSBwYXRocyBhcmUgZGlmZmVyZW50CisjIGJl dHdlZW4gbWFjT1MgYW5kIEdOVXN0ZXAsIHNvIGp1c3QgcmVwbGFjZSBhbnkgcmVmZXJlbmNlcyB0 byB0aGUgYXBwCisjIGJ1bmRsZSByb290IGl0c2VsZiB3aXRoIHRoZSByZWxhdGl2ZSBwYXRoLgor ZXBhdGhzLWZvcmNlLW5zLXNlbGYtY29udGFpbmVkOiBlcGF0aHMtZm9yY2UKKwlAKHNlZCA8ICR7 c3JjZGlyfS9zcmMvZXBhdGhzLmggPiBlcGF0aHMuaC4kJCQkCVwKKwkgIC1lICdzOyR7bnNfYXBw ZGlyfS87OycpICYmCQkJXAorCSR7c3JjZGlyfS9idWlsZC1hdXgvbW92ZS1pZi1jaGFuZ2UgZXBh dGhzLmguJCQkJCBzcmMvZXBhdGhzLmgKKwogbGliLXNyYyBzcmM6ICQoTlRESVIpIGxpYgogCiBz cmM6IGxpYi1zcmMKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRl eCBjODI4ZjhkNzgyLi4wNWFmZGJjOGI4IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIv Y29uZmlndXJlLmFjCkBAIC0xODkxLDEwICsxODkxLDEwIEBAIGlmIHRlc3QgIiR7d2l0aF9uc30i ICE9IG5vOyB0aGVuCiAgICMgc28gYXZvaWQgTlNfSU1QTF9DT0NPQSBpZiBtYWN1dnMuaCBpcyBh YnNlbnQuCiAgICMgRXZlbiBhIGhlYWRsZXNzIEVtYWNzIGNhbiBidWlsZCBtYWN1dnMuaCwgc28g dGhpcyBzaG91bGQgbGV0IHlvdSBib290c3RyYXAuCiAgIGlmIHRlc3QgIiR7b3BzeXN9IiA9IGRh cndpbiAmJiB0ZXN0IC1mICIkc3JjZGlyL3NyYy9tYWN1dnMuaCI7IHRoZW4KLSAgICAgbGlzcGRp cnJlbD1Db250ZW50cy9SZXNvdXJjZXMvbGlzcAogICAgICBOU19JTVBMX0NPQ09BPXllcwogICAg ICBuc19hcHBkaXI9YHB3ZGAvbmV4dHN0ZXAvRW1hY3MuYXBwCiAgICAgIG5zX2FwcGJpbmRpcj0k e25zX2FwcGRpcn0vQ29udGVudHMvTWFjT1MKKyAgICAgbnNfYXBwbGliZGlyPSR7bnNfYXBwZGly fS9Db250ZW50cy9NYWNPUy9saWIKICAgICAgbnNfYXBwcmVzZGlyPSR7bnNfYXBwZGlyfS9Db250 ZW50cy9SZXNvdXJjZXMKICAgICAgbnNfYXBwc3JjPUNvY29hL0VtYWNzLmJhc2UKICAgICAgbnNf Zm9udGZpbGU9bWFjZm9udC5vCkBAIC0xOTUyLDYgKzE5NTIsNyBAQCBmYWlsOwogICBpZiB0ZXN0 ICROU19JTVBMX0dOVVNURVAgPSB5ZXM7IHRoZW4KICAgICAgbnNfYXBwZGlyPWBwd2RgL25leHRz dGVwL0VtYWNzLmFwcAogICAgICBuc19hcHBiaW5kaXI9JHtuc19hcHBkaXJ9CisgICAgIG5zX2Fw cGxpYmRpcj0ke25zX2FwcGRpcn0vbGliCiAgICAgIG5zX2FwcHJlc2Rpcj0ke25zX2FwcGRpcn0v UmVzb3VyY2VzCiAgICAgIG5zX2FwcHNyYz1HTlVzdGVwL0VtYWNzLmJhc2UKICAgICAgbnNfZm9u dGZpbGU9bnNmb250Lm8KQEAgLTIwMDgsNiArMjAwOSw3IEBAIGlmIHRlc3QgIiR7SEFWRV9OU30i ID0geWVzOyB0aGVuCiAgIHdpbmRvd19zeXN0ZW09bmV4dHN0ZXAKICAgIyBzZXQgdXAgcGFja2Fn aW5nIGRpcnMKICAgaWYgdGVzdCAiJHtFTl9OU19TRUxGX0NPTlRBSU5FRH0iID0geWVzOyB0aGVu CisgICAgIEFDX0RFRklORShOU19TRUxGX0NPTlRBSU5FRCwgMSwgW0J1aWxkIGFuIE5TIGJ1bmRs ZWQgYXBwXSkKICAgICAgbnNfc2VsZl9jb250YWluZWQ9eWVzCiAgICAgIHByZWZpeD0ke25zX2Fw cHJlc2Rpcn0KICAgICAgZXhlY19wcmVmaXg9JHtuc19hcHBiaW5kaXJ9CkBAIC0yMDIxLDcgKzIw MjMsNyBAQCBpZiB0ZXN0ICIke0hBVkVfTlN9IiA9IHllczsgdGhlbgogICAgICBpbmZvZGlyPSJc JHtuc19hcHByZXNkaXJ9L2luZm8iCiAgICAgIG1hbmRpcj0iXCR7bnNfYXBwcmVzZGlyfS9tYW4i CiAgICAgIGxpc3BkaXI9Ilwke25zX2FwcHJlc2Rpcn0vbGlzcCIKLSAgICAgdGVzdCAiJGxvY2Fs bGlzcHBhdGhzZXQiID0gbm8gJiYgbG9jYWxsaXNwcGF0aD0iIgorICAgICB0ZXN0ICIkbG9jYWxs aXNwcGF0aHNldCIgPSBubyAmJiBsb2NhbGxpc3BwYXRoPSJcJHtuc19hcHByZXNkaXJ9L3NpdGUt bGlzcCIKICAgICAgSU5TVEFMTF9BUkNIX0lOREVQX0VYVFJBPQogICBmaQogCkBAIC01NDA5LDYg KzU0MTEsNyBAQCBBQ19TVUJTVChDRkxBR1MpCiBBQ19TVUJTVChYX1RPT0xLSVRfVFlQRSkKIEFD X1NVQlNUKG5zX2FwcGRpcikKIEFDX1NVQlNUKG5zX2FwcGJpbmRpcikKK0FDX1NVQlNUKG5zX2Fw cGxpYmRpcikKIEFDX1NVQlNUKG5zX2FwcHJlc2RpcikKIEFDX1NVQlNUKG5zX2FwcHNyYykKIEFD X1NVQlNUKEdOVV9PQkpDX0NGTEFHUykKQEAgLTYwMDksMTAgKzYwMTIsMTMgQEAgZG5sIHRoZSB1 c2Ugb2YgZm9yY2UgaW4gdGhlICdlcGF0aHMtZm9yY2UnIHJ1bGUgaW4gTWFrZWZpbGUuaW4uCiBB Q19DT05GSUdfQ09NTUFORFMoW3NyYy9lcGF0aHMuaF0sIFsKIGlmIHRlc3QgIiR7b3BzeXN9IiA9 ICJtaW5ndzMyIjsgdGhlbgogICAke01BS0UtbWFrZX0gTUFLRUZJTEVfTkFNRT1kby1ub3QtbWFr ZS1NYWtlZmlsZSBlcGF0aHMtZm9yY2UtdzMyCitlbGlmIHRlc3QgIiRFTl9OU19TRUxGX0NPTlRB SU5FRCIgPSAieWVzIjsgdGhlbgorICAke01BS0UtbWFrZX0gTUFLRUZJTEVfTkFNRT1kby1ub3Qt bWFrZS1NYWtlZmlsZSBlcGF0aHMtZm9yY2UtbnMtc2VsZi1jb250YWluZWQKIGVsc2UKICAgJHtN QUtFLW1ha2V9IE1BS0VGSUxFX05BTUU9ZG8tbm90LW1ha2UtTWFrZWZpbGUgZXBhdGhzLWZvcmNl CiBmaSB8fCBBQ19NU0dfRVJST1IoWydzcmMvZXBhdGhzLmgnIGNvdWxkIG5vdCBiZSBtYWRlLl0p Ci1dLCBbR0NDPSIkR0NDIiBDUFBGTEFHUz0iJENQUEZMQUdTIiBvcHN5cz0iJG9wc3lzIl0pCitd LCBbR0NDPSIkR0NDIiBDUFBGTEFHUz0iJENQUEZMQUdTIiBvcHN5cz0iJG9wc3lzIgorICAgIEVO X05TX1NFTEZfQ09OVEFJTkVEPSIkRU5fTlNfU0VMRl9DT05UQUlORUQiXSkKIAogZG5sIE5CIHdl IGhhdmUgdG8gY2hlYXQgYW5kIHVzZSB0aGUgYWNfLi4uIHZlcnNpb24gYmVjYXVzZSBhYnNfdG9w X3NyY2RpcgogZG5sIGlzIG5vdCB5ZXQgc2V0LCBzaWdoLiAgT3Igd2UgY291bGQgdXNlIC4uLyRz cmNkaXIvc3JjLy5nZGJpbml0LApkaWZmIC0tZ2l0IGEvbmV4dHN0ZXAvTWFrZWZpbGUuaW4gYi9u ZXh0c3RlcC9NYWtlZmlsZS5pbgppbmRleCAzMTY4ZmVlNzZjLi44YTVjNjU2NTk3IDEwMDY0NAot LS0gYS9uZXh0c3RlcC9NYWtlZmlsZS5pbgorKysgYi9uZXh0c3RlcC9NYWtlZmlsZS5pbgpAQCAt MzIsMTkgKzMyLDIzIEBAIHRvcF9zcmNkaXJfYWJzID0gJChzaGVsbCBjZCBAdG9wX3NyY2RpckA7 IHB3ZCAtUCkKIAogTUtESVJfUCA9IEBNS0RJUl9QQAogCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNf cHJlZml4PUBleGVjX3ByZWZpeEAKKwogIyMgRW1hY3MuYXBwLgogbnNfYXBwZGlyID0gQG5zX2Fw cGRpckAKICMjIEdOVXN0ZXA6IG5zX2FwcGRpcjsgbWFjT1M6IG5zX2FwcGRpci9Db250ZW50cy9N YWNPUwogbnNfYXBwYmluZGlyID0gQG5zX2FwcGJpbmRpckAKICMjIEdOVXN0ZXAvRW1hY3MuYmFz ZSBvciBDb2NvYS9FbWFjcy5iYXNlLgogbnNfYXBwc3JjID0gQG5zX2FwcHNyY0AKK25zX2FwcGxp YmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKICMjIEdOVXN0ZXA6IEdOVXN0ZXAvRW1hY3MuYmFzZS9S ZXNvdXJjZXMvSW5mby1nbnVzdGVwLnBsaXN0CiAjIyBtYWNPUzogQ29jb2EvRW1hY3MuYmFzZS9D b250ZW50cy9JbmZvLnBsaXN0CiBuc19jaGVja19maWxlID0gQG5zX2FwcGRpckAvQG5zX2NoZWNr X2ZpbGVACiAKIC5QSE9OWTogYWxsCiAKLWFsbDogJHtuc19hcHBkaXJ9ICR7bnNfYXBwYmluZGly fS9FbWFjcyAke25zX2FwcGJpbmRpcn0vRW1hY3MucGRtcAorYWxsOiAke25zX2FwcGRpcn0gJHtu c19hcHBiaW5kaXJ9L0VtYWNzICR7bnNfYXBwbGliZXhlY2Rpcn0vRW1hY3MucGRtcAogCiAke25z X2NoZWNrX2ZpbGV9ICR7bnNfYXBwZGlyfTogJHtzcmNkaXJ9LyR7bnNfYXBwc3JjfSAke25zX2Fw cHNyY30KIAlybSAtcmYgJHtuc19hcHBkaXJ9CkBAIC02Myw4ICs2Nyw4IEBAICR7bnNfYXBwYmlu ZGlyfS9FbWFjczogJHtuc19hcHBkaXJ9ICR7bnNfY2hlY2tfZmlsZX0gLi4vc3JjL2VtYWNzJHtF WEVFWFR9CiAJJHtNS0RJUl9QfSAke25zX2FwcGJpbmRpcn0KIAljcCAtZiAuLi9zcmMvZW1hY3Mk e0VYRUVYVH0gJEAKIAotJHtuc19hcHBiaW5kaXJ9L0VtYWNzLnBkbXA6ICR7bnNfYXBwZGlyfSAk e25zX2NoZWNrX2ZpbGV9IC4uL3NyYy9lbWFjcyR7RVhFRVhUfS5wZG1wCi0JJHtNS0RJUl9QfSAk e25zX2FwcGJpbmRpcn0KKyR7bnNfYXBwbGliZXhlY2Rpcn0vRW1hY3MucGRtcDogJHtuc19hcHBk aXJ9ICR7bnNfY2hlY2tfZmlsZX0gLi4vc3JjL2VtYWNzJHtFWEVFWFR9LnBkbXAKKwkke01LRElS X1B9ICR7bnNfYXBwbGliZXhlY2Rpcn0KIAljcCAtZiAuLi9zcmMvZW1hY3Mke0VYRUVYVH0ucGRt cCAkQAogCiAuUEhPTlk6IEZPUkNFCkBAIC04NSw5ICs4OSw4IEBAIGxpbmtzOiAuLi9zcmMvZW1h Y3Mke0VYRUVYVH0KIAlsbiAtcyAkKHRvcF9zcmNkaXJfYWJzKS9pbmZvICR7bnNfYXBwZGlyfS9D b250ZW50cy9SZXNvdXJjZXMKIAkke01LRElSX1B9ICR7bnNfYXBwYmluZGlyfQogCWxuIC1zICQo YWJzX3RvcF9idWlsZGRpcikvc3JjL2VtYWNzJHtFWEVFWFR9ICR7bnNfYXBwYmluZGlyfS9FbWFj cwotCWxuIC1zICQoYWJzX3RvcF9idWlsZGRpcikvc3JjL2VtYWNzJHtFWEVFWFR9LnBkbXAgJHtu c19hcHBiaW5kaXJ9L0VtYWNzLnBkbXAKIAlsbiAtcyAkKGFic190b3BfYnVpbGRkaXIpL2xpYi1z cmMgJHtuc19hcHBiaW5kaXJ9L2JpbgotCWxuIC1zICQoYWJzX3RvcF9idWlsZGRpcikvbGliLXNy YyAke25zX2FwcGJpbmRpcn0vbGliZXhlYworCWxuIC1zICQoYWJzX3RvcF9idWlsZGRpcikvbGli LXNyYyAke25zX2FwcGxpYmV4ZWNkaXJ9CiAJJHtNS0RJUl9QfSAke25zX2FwcGRpcn0vQ29udGVu dHMvUmVzb3VyY2VzL2V0YwogCWZvciBmIGluICQoc2hlbGwgY2QgJCh0b3Bfc3JjZGlyX2Ficykv ZXRjOyBscyk7IGRvIGxuIC1zICQodG9wX3NyY2Rpcl9hYnMpL2V0Yy8kJGYgJHtuc19hcHBkaXJ9 L0NvbnRlbnRzL1Jlc291cmNlcy9ldGM7IGRvbmUKIAlsbiAtcyAkKGFic190b3BfYnVpbGRkaXIp L2V0Yy9ET0MgJHtuc19hcHBkaXJ9L0NvbnRlbnRzL1Jlc291cmNlcy9ldGMKZGlmZiAtLWdpdCBh L3NyYy9jYWxscHJvYy5jIGIvc3JjL2NhbGxwcm9jLmMKaW5kZXggZTQ0ZTI0MzY4MC4uYWFiYzM5 MzEzYiAxMDA2NDQKLS0tIGEvc3JjL2NhbGxwcm9jLmMKKysrIGIvc3JjL2NhbGxwcm9jLmMKQEAg LTE2NjEsMzIgKzE2NjEsMTUgQEAgbWFrZV9lbnZpcm9ubWVudF9ibG9jayAoTGlzcF9PYmplY3Qg Y3VycmVudF9kaXIpCiB2b2lkCiBpbml0X2NhbGxwcm9jXzEgKHZvaWQpCiB7Ci0jaWZkZWYgSEFW RV9OUwotICBjb25zdCBjaGFyICpldGNfZGlyID0gbnNfZXRjX2RpcmVjdG9yeSAoKTsKLSAgY29u c3QgY2hhciAqcGF0aF9leGVjID0gbnNfZXhlY19wYXRoICgpOwotI2VuZGlmCi0KLSAgVmRhdGFf ZGlyZWN0b3J5ID0gZGVjb2RlX2Vudl9wYXRoICgiRU1BQ1NEQVRBIiwKLSNpZmRlZiBIQVZFX05T Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGNfZGlyID8g ZXRjX2RpciA6Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBBVEhfREFUQSwgMCk7CisgIFZkYXRhX2RpcmVjdG9yeSA9IGRlY29kZV9lbnZfcGF0 aCAoIkVNQUNTREFUQSIsIFBBVEhfREFUQSwgMCk7CiAgIFZkYXRhX2RpcmVjdG9yeSA9IEZmaWxl X25hbWVfYXNfZGlyZWN0b3J5IChGY2FyIChWZGF0YV9kaXJlY3RvcnkpKTsKIAotICBWZG9jX2Rp cmVjdG9yeSA9IGRlY29kZV9lbnZfcGF0aCAoIkVNQUNTRE9DIiwKLSNpZmRlZiBIQVZFX05TCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGNfZGlyID8gZXRj X2RpciA6Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFBBVEhfRE9DLCAwKTsKKyAgVmRvY19kaXJlY3RvcnkgPSBkZWNvZGVfZW52X3BhdGggKCJF TUFDU0RPQyIsIFBBVEhfRE9DLCAwKTsKICAgVmRvY19kaXJlY3RvcnkgPSBGZmlsZV9uYW1lX2Fz X2RpcmVjdG9yeSAoRmNhciAoVmRvY19kaXJlY3RvcnkpKTsKIAogICAvKiBDaGVjayB0aGUgRU1B Q1NQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBkZWZhdWx0aW5nIHRvIHRoZQogICAgICBQQVRI X0VYRUMgcGF0aCBmcm9tIGVwYXRocy5oLiAgKi8KLSAgVmV4ZWNfcGF0aCA9IGRlY29kZV9lbnZf cGF0aCAoIkVNQUNTUEFUSCIsCi0jaWZkZWYgSEFWRV9OUwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXRoX2V4ZWMgPyBwYXRoX2V4ZWMgOgotI2VuZGlmCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBBVEhfRVhFQywgMCk7CisgIFZleGVjX3BhdGggPSBkZWNvZGVf ZW52X3BhdGggKCJFTUFDU1BBVEgiLCBQQVRIX0VYRUMsIDApOwogICBWZXhlY19kaXJlY3Rvcnkg PSBGZmlsZV9uYW1lX2FzX2RpcmVjdG9yeSAoRmNhciAoVmV4ZWNfcGF0aCkpOwogICAvKiBGSVhN RT8gIEZvciBucywgcGF0aF9leGVjIHNob3VsZCBnbyBhdCB0aGUgZnJvbnQ/ICAqLwogICBWZXhl Y19wYXRoID0gbmNvbmMyIChkZWNvZGVfZW52X3BhdGggKCJQQVRIIiwgIiIsIDApLCBWZXhlY19w YXRoKTsKQEAgLTE3MDEsMTAgKzE2ODQsNiBAQCBpbml0X2NhbGxwcm9jICh2b2lkKQogCiAgIGNo YXIgKnNoOwogICBMaXNwX09iamVjdCB0ZW1wZGlyOwotI2lmZGVmIEhBVkVfTlMKLSAgaWYgKGRh dGFfZGlyID09IDApCi0gICAgZGF0YV9kaXIgPSBuc19ldGNfZGlyZWN0b3J5ICgpICE9IDA7Ci0j ZW5kaWYKIAogICBpZiAoIU5JTFAgKFZpbnN0YWxsYXRpb25fZGlyZWN0b3J5KSkKICAgICB7CkBA IC0xNzE2LDE1ICsxNjk1LDggQEAgaW5pdF9jYWxscHJvYyAodm9pZCkKIAkgIC8qIE1TRE9TIHVz ZXMgd3JhcHBlZCBiaW5hcmllcywgc28gZG9uJ3QgZG8gdGhpcy4gICovCiAgICAgICBpZiAoTklM UCAoRm1lbWJlciAodGVtLCBWZXhlY19wYXRoKSkpCiAJewotI2lmZGVmIEhBVkVfTlMKLQkgIGNv bnN0IGNoYXIgKnBhdGhfZXhlYyA9IG5zX2V4ZWNfcGF0aCAoKTsKLSNlbmRpZgogCSAgLyogUnVu bmluZyB1bmluc3RhbGxlZCwgc28gZGVmYXVsdCB0byB0ZW0gcmF0aGVyIHRoYW4gUEFUSF9FWEVD LiAgKi8KLQkgIFZleGVjX3BhdGggPSBkZWNvZGVfZW52X3BhdGggKCJFTUFDU1BBVEgiLAotI2lm ZGVmIEhBVkVfTlMKLQkJCQkJcGF0aF9leGVjID8gcGF0aF9leGVjIDoKLSNlbmRpZgotCQkJCQlT U0RBVEEgKHRlbSksIDApOworCSAgVmV4ZWNfcGF0aCA9IGRlY29kZV9lbnZfcGF0aCAoIkVNQUNT UEFUSCIsIFNTREFUQSAodGVtKSwgMCk7CiAJICBWZXhlY19wYXRoID0gbmNvbmMyIChkZWNvZGVf ZW52X3BhdGggKCJQQVRIIiwgIiIsIDApLCBWZXhlY19wYXRoKTsKIAl9CiAKZGlmZiAtLWdpdCBh L3NyYy9lbWFjcy5jIGIvc3JjL2VtYWNzLmMKaW5kZXggNjBhNTdhNjkzYy4uYjc5ODJlY2U2NCAx MDA2NDQKLS0tIGEvc3JjL2VtYWNzLmMKKysrIGIvc3JjL2VtYWNzLmMKQEAgLTgzNSw3ICs4MzUs MTMgQEAgbG9hZF9wZHVtcCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIE5VTEwKICNlbmRp ZgogICAgIDsKLSAgY29uc3QgY2hhciAqYXJndjBfYmFzZSA9ICJlbWFjcyI7CisgIGNvbnN0IGNo YXIgKmFyZ3YwX2Jhc2UgPQorI2lmZGVmIE5TX1NFTEZfQ09OVEFJTkVECisgICAgIkVtYWNzIgor I2Vsc2UKKyAgICAiZW1hY3MiCisjZW5kaWYKKyAgICA7CiAKICAgLyogVE9ETzogbWF5YmUgbW9y ZSB0aG9yb3VnaGx5IHNjcnViIHByb2Nlc3MgZW52aXJvbm1lbnQgaW4gb3JkZXIgdG8KICAgICAg bWFrZSB0aGlzIHVzZSBjYXNlIChsb2FkaW5nIGEgZHVtcCBmaWxlIGluIGFuIHVuZXhlY2VkIGVt YWNzKQpAQCAtOTEyLDYgKzkxOCw4IEBAIGxvYWRfcGR1bXAgKGludCBhcmdjLCBjaGFyICoqYXJn dikKICAgLyogT24gTVMtV2luZG93cywgUEFUSF9FWEVDIG5vcm1hbGx5IHN0YXJ0cyB3aXRoIGEg bGl0ZXJhbAogICAgICAiJWVtYWNzX2RpciUiLCBzbyBpdCB3aWxsIG5ldmVyIHdvcmsgd2l0aG91 dCBzb21lIHR3ZWFraW5nLiAgKi8KICAgcGF0aF9leGVjID0gdzMyX3JlbG9jYXRlIChwYXRoX2V4 ZWMpOworI2VsaWYgZGVmaW5lZCAoSEFWRV9OUykKKyAgcGF0aF9leGVjID0gbnNfcmVsb2NhdGUg KHBhdGhfZXhlYyk7CiAjZW5kaWYKIAogICAvKiBMb29rIGZvciAiZW1hY3MucGRtcCIgaW4gUEFU SF9FWEVDLiAgV2UgaGFyZGNvZGUgImVtYWNzIiBpbgpAQCAtOTI5LDYgKzkzNyw3IEBAIGxvYWRf cGR1bXAgKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICB9CiAgIHNwcmludGYgKGR1bXBfZmls ZSwgIiVzJWMlcyVzIiwKICAgICAgICAgICAgcGF0aF9leGVjLCBESVJFQ1RPUllfU0VQLCBhcmd2 MF9iYXNlLCBzdWZmaXgpOworI2lmICFkZWZpbmVkIChOU19TRUxGX0NPTlRBSU5FRCkKICAgLyog QXNzdW1lIHRoZSBFbWFjcyBiaW5hcnkgbGl2ZXMgaW4gYSBzaWJsaW5nIGRpcmVjdG9yeSBhcyBz ZXQgdXAgYnkKICAgICAgdGhlIGRlZmF1bHQgaW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb24uICAq LwogICBjb25zdCBjaGFyICpnb191cCA9ICIuLi8uLi8uLi8uLi9iaW4vIjsKQEAgLTk0Myw2ICs5 NTIsNyBAQCBsb2FkX3BkdW1wIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgIHNwcmludGYgKGVt YWNzX2V4ZWN1dGFibGUsICIlcyVjJXMlcyVzIiwKIAkgICBwYXRoX2V4ZWMsIERJUkVDVE9SWV9T RVAsIGdvX3VwLCBhcmd2MF9iYXNlLAogCSAgIHN0cmlwX3N1ZmZpeCA/IHN0cmlwX3N1ZmZpeCA6 ICIiKTsKKyNlbmRpZgogICByZXN1bHQgPSBwZHVtcGVyX2xvYWQgKGR1bXBfZmlsZSwgZW1hY3Nf ZXhlY3V0YWJsZSk7CiAKICAgaWYgKHJlc3VsdCA9PSBQRFVNUEVSX0xPQURfRklMRV9OT1RfRk9V TkQpCkBAIC0yOTYwLDcgKzI5NzAsMTEgQEAgZGVjb2RlX2Vudl9wYXRoIChjb25zdCBjaGFyICpl dmFybmFtZSwgY29uc3QgY2hhciAqZGVmYWx0LCBib29sIGVtcHR5KQogICAgIHBhdGggPSAwOwog ICBpZiAoIXBhdGgpCiAgICAgeworI2lmZGVmIE5TX1NFTEZfQ09OVEFJTkVECisgICAgICBwYXRo ID0gbnNfcmVsb2NhdGUgKGRlZmFsdCk7CisjZWxzZQogICAgICAgcGF0aCA9IGRlZmFsdDsKKyNl bmRpZgogI2lmZGVmIFdJTkRPV1NOVAogICAgICAgZGVmYXVsdGVkID0gMTsKICNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL2xyZWFkLmMgYi9zcmMvbHJlYWQuYwppbmRleCAwYjMzZmQwZjI1Li40NjE3 ZmZkNjI2IDEwMDY0NAotLS0gYS9zcmMvbHJlYWQuYworKysgYi9zcmMvbHJlYWQuYwpAQCAtNDc2 OSwxNCArNDc2OSw5IEBAIGxvYWRfcGF0aF9kZWZhdWx0ICh2b2lkKQogICAgIHJldHVybiBkZWNv ZGVfZW52X3BhdGggKDAsIFBBVEhfRFVNUExPQURTRUFSQ0gsIDApOwogCiAgIExpc3BfT2JqZWN0 IGxwYXRoID0gUW5pbDsKLSAgY29uc3QgY2hhciAqbm9ybWFsID0gUEFUSF9MT0FEU0VBUkNIOwog ICBjb25zdCBjaGFyICpsb2FkcGF0aCA9IE5VTEw7CiAKLSNpZmRlZiBIQVZFX05TCi0gIGxvYWRw YXRoID0gbnNfbG9hZF9wYXRoICgpOwotI2VuZGlmCi0KLSAgbHBhdGggPSBkZWNvZGVfZW52X3Bh dGggKDAsIGxvYWRwYXRoID8gbG9hZHBhdGggOiBub3JtYWwsIDApOworICBscGF0aCA9IGRlY29k ZV9lbnZfcGF0aCAoMCwgUEFUSF9MT0FEU0VBUkNILCAwKTsKIAogICBpZiAoIU5JTFAgKFZpbnN0 YWxsYXRpb25fZGlyZWN0b3J5KSkKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvbnN0ZXJtLmggYi9z cmMvbnN0ZXJtLmgKaW5kZXggZjY0MzU0YjhhNy4uYjI5ZTc2Y2M2MyAxMDA2NDQKLS0tIGEvc3Jj L25zdGVybS5oCisrKyBiL3NyYy9uc3Rlcm0uaApAQCAtMTE5MCw5ICsxMTkwLDcgQEAgZXh0ZXJu IHZvaWQgbnNfcnVuX2FzY3JpcHQgKHZvaWQpOwogI2RlZmluZSBOU0FQUF9EQVRBMl9SVU5GSUxF RElBTE9HIDExCiBleHRlcm4gdm9pZCBuc19ydW5fZmlsZV9kaWFsb2cgKHZvaWQpOwogCi1leHRl cm4gY29uc3QgY2hhciAqbnNfZXRjX2RpcmVjdG9yeSAodm9pZCk7Ci1leHRlcm4gY29uc3QgY2hh ciAqbnNfZXhlY19wYXRoICh2b2lkKTsKLWV4dGVybiBjb25zdCBjaGFyICpuc19sb2FkX3BhdGgg KHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKm5zX3JlbG9jYXRlIChjb25zdCBjaGFyICplcGF0 aCk7CiBleHRlcm4gdm9pZCBzeW1zX29mX25zdGVybSAodm9pZCk7CiBleHRlcm4gdm9pZCBzeW1z X29mX25zZm5zICh2b2lkKTsKIGV4dGVybiB2b2lkIHN5bXNfb2ZfbnNtZW51ICh2b2lkKTsKZGlm ZiAtLWdpdCBhL3NyYy9uc3Rlcm0ubSBiL3NyYy9uc3Rlcm0ubQppbmRleCBlODFhNGNiYzBkLi5l MWEyMTlhMTNiIDEwMDY0NAotLS0gYS9zcmMvbnN0ZXJtLm0KKysrIGIvc3JjL25zdGVybS5tCkBA IC00OTksMTE4ICs0OTksMzUgQEAgLSAoTlNDb2xvciAqKWNvbG9yVXNpbmdEZWZhdWx0Q29sb3JT cGFjZQogCiAKIGNvbnN0IGNoYXIgKgotbnNfZXRjX2RpcmVjdG9yeSAodm9pZCkKLS8qIElmIHJ1 bm5pbmcgYXMgYSBzZWxmLWNvbnRhaW5lZCBhcHAgYnVuZGxlLCByZXR1cm4gYXMgYSBzdHJpbmcg dGhlCi0gICBmaWxlbmFtZSBvZiB0aGUgZXRjIGRpcmVjdG9yeSwgaWYgcHJlc2VudDsgZWxzZSBu aWwuICAqLwotewotICBOU0J1bmRsZSAqYnVuZGxlID0gW05TQnVuZGxlIG1haW5CdW5kbGVdOwot ICBOU1N0cmluZyAqcmVzb3VyY2VEaXIgPSBbYnVuZGxlIHJlc291cmNlUGF0aF07Ci0gIE5TU3Ry aW5nICpyZXNvdXJjZVBhdGg7Ci0gIE5TRmlsZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0gW05TRmls ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwotICBCT09MIGlzRGlyOworbnNfcmVsb2NhdGUgKGNv bnN0IGNoYXIgKmVwYXRoKQorLyogSWYgd2UncmUgcnVubmluZyBpbiBhIHNlbGYtY29udGFpbmVk IGFwcCBidW5kbGUgc29tZSBoYXJkLWNvZGVkCisgICBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhl IHJvb3Qgb2YgdGhlIGJ1bmRsZSwgc28gd29yayBvdXQgdGhlIGZ1bGwKKyAgIHBhdGguCiAKLSAg cmVzb3VyY2VQYXRoID0gW3Jlc291cmNlRGlyIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVu dDogQCJldGMiXTsKLSAgaWYgKFtmaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOiByZXNvdXJj ZVBhdGggaXNEaXJlY3Rvcnk6ICZpc0Rpcl0pCi0gICAgewotICAgICAgaWYgKGlzRGlyKSByZXR1 cm4gW3Jlc291cmNlUGF0aCBVVEY4U3RyaW5nXTsKLSAgICB9Ci0gIHJldHVybiBOVUxMOwotfQot Ci0KLWNvbnN0IGNoYXIgKgotbnNfZXhlY19wYXRoICh2b2lkKQotLyogSWYgcnVubmluZyBhcyBh IHNlbGYtY29udGFpbmVkIGFwcCBidW5kbGUsIHJldHVybiBhcyBhIHBhdGggc3RyaW5nCi0gICB0 aGUgZmlsZW5hbWVzIG9mIHRoZSBsaWJleGVjIGFuZCBiaW4gZGlyZWN0b3JpZXMsIGllIGxpYmV4 ZWM6YmluLgotICAgT3RoZXJ3aXNlLCByZXR1cm4gbmlsLgotICAgTm9ybWFsbHksIEVtYWNzIGRv ZXMgbm90IGFkZCBpdHMgb3duIGJpbi8gZGlyZWN0b3J5IHRvIHRoZSBQQVRILgotICAgSG93ZXZl ciwgYSBzZWxmLWNvbnRhaW5lZCBOUyBidWlsZCBoYXMgYSBkaWZmZXJlbnQgbGF5b3V0LCB3aXRo Ci0gICBiaW4vIGFuZCBsaWJleGVjLyBzdWJkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5IHRo YXQgY29udGFpbnMKLSAgIEVtYWNzLmFwcCBpdHNlbGYuCi0gICBXZSBwdXQgbGliZXhlYyBmaXJz dCwgYmVjYXVzZSBpbml0X2NhbGxwcm9jXzEgdXNlcyB0aGUgZmlyc3QKLSAgIGVsZW1lbnQgdG8g aW5pdGlhbGl6ZSBleGVjLWRpcmVjdG9yeS4gIEFuIGFsdGVybmF0aXZlIHdvdWxkIGJlCi0gICBm b3IgaW5pdF9jYWxscHJvYyB0byBjaGVjayBmb3IgaW52b2NhdGlvbi1kaXJlY3RvcnkvbGliZXhl Yy4KLSovCisgICBGSVhNRTogSSB0aGluayB0aGlzIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBj YXNlcyB3aGVyZSBtdWx0aXBsZQorICAgZGlyZWN0b3JpZXMgYXJlIHNlcGFyYXRlZCBieSBjb2xv bnMuICAqLwogeworI2lmZGVmIE5TX1NFTEZfQ09OVEFJTkVECiAgIE5TQnVuZGxlICpidW5kbGUg PSBbTlNCdW5kbGUgbWFpbkJ1bmRsZV07Ci0gIE5TU3RyaW5nICpyZXNvdXJjZURpciA9IFtidW5k bGUgcmVzb3VyY2VQYXRoXTsKLSAgTlNTdHJpbmcgKmJpbkRpciA9IFtidW5kbGUgYnVuZGxlUGF0 aF07Ci0gIE5TU3RyaW5nICpyZXNvdXJjZVBhdGgsICpyZXNvdXJjZVBhdGhzOwotICBOU1Jhbmdl IHJhbmdlOwotICBOU1N0cmluZyAqcGF0aFNlcGFyYXRvciA9IFtOU1N0cmluZyBzdHJpbmdXaXRo Rm9ybWF0OiBAIiVjIiwgU0VQQ0hBUl07CisgIE5TU3RyaW5nICpyb290ID0gW2J1bmRsZSBidW5k bGVQYXRoXTsKKyAgTlNTdHJpbmcgKm9yaWdpbmFsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4 U3RyaW5nOmVwYXRoXTsKKyAgTlNTdHJpbmcgKmZpeGVkUGF0aCA9IFtOU1N0cmluZyBwYXRoV2l0 aENvbXBvbmVudHM6QFtyb290LCBvcmlnaW5hbF1dOwogICBOU0ZpbGVNYW5hZ2VyICpmaWxlTWFu YWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgTlNBcnJheSAqcGF0aHM7 Ci0gIE5TRW51bWVyYXRvciAqcGF0aEVudW07Ci0gIEJPT0wgaXNEaXI7CiAKLSAgcmFuZ2UgPSBb cmVzb3VyY2VEaXIgcmFuZ2VPZlN0cmluZzogQCJDb250ZW50cyJdOwotICBpZiAocmFuZ2UubG9j YXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICB7Ci0gICAgICBiaW5EaXIgPSBbYmluRGlyIHN0cmlu Z0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDogQCJDb250ZW50cyJdOwotI2lmZGVmIE5TX0lNUExf Q09DT0EKLSAgICAgIGJpbkRpciA9IFtiaW5EaXIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9u ZW50OiBAIk1hY09TIl07Ci0jZW5kaWYKLSAgICB9CisgIGlmICghW29yaWdpbmFsIGlzQWJzb2x1 dGVQYXRoXQorICAgICAgJiYgW2ZpbGVNYW5hZ2VyIGZpbGVFeGlzdHNBdFBhdGg6Zml4ZWRQYXRo IGlzRGlyZWN0b3J5Om5pbF0pCisgICAgcmV0dXJuIFtmaXhlZFBhdGggVVRGOFN0cmluZ107CiAK LSAgcGF0aHMgPSBbYmluRGlyIHN0cmluZ3NCeUFwcGVuZGluZ1BhdGhzOgotICAgICAgICAgICAg ICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IEAibGliZXhlYyIsIEAiYmluIiwgbmlsXV07 Ci0gIHBhdGhFbnVtID0gW3BhdGhzIG9iamVjdEVudW1lcmF0b3JdOwotICByZXNvdXJjZVBhdGhz ID0gQCIiOworICAvKiBJZiB3ZSByZWFjaCBoZXJlIGVpdGhlciB0aGUgcGF0aCBpcyBhYnNvbHV0 ZSBhbmQgdGhlcmVmb3JlIHdlCisgICAgIGRvbid0IG5lZWQgdG8gY29tcGxldGUgaXQsIG9yIHdl J3JlIHVuYWJsZSB0byByZWxvY2F0ZSB0aGUKKyAgICAgZmlsZS9kaXJlY3RvcnkuICBJZiBpdCdz IHRoZSBsYXR0ZXIgaXQgbWF5IGJlIGJlY2F1c2UgdGhlIHVzZXIgaXMKKyAgICAgdHJ5aW5nIHRv IHVzZSBhIGJ1bmRsZWQgYXBwIGFzIHRob3VnaCBpdCdzIGEgVW5peCBzdHlsZSBpbnN0YWxsCisg ICAgIGFuZCB3ZSBoYXZlIG5vIHdheSB0byBndWVzcyB3aGF0IHdhcyBpbnRlbmRlZCwgc28gcmV0 dXJuIHRoZQorICAgICBvcmlnaW5hbCBzdHJpbmcgdW5hbHRlcmVkLiAgKi8KIAotICB3aGlsZSAo KHJlc291cmNlUGF0aCA9IFtwYXRoRW51bSBuZXh0T2JqZWN0XSkpCi0gICAgewotICAgICAgaWYg KFtmaWxlTWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOiByZXNvdXJjZVBhdGggaXNEaXJlY3Rvcnk6 ICZpc0Rpcl0pCi0gICAgICAgIGlmIChpc0RpcikKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBp ZiAoW3Jlc291cmNlUGF0aHMgbGVuZ3RoXSA+IDApCi0gICAgICAgICAgICAgIHJlc291cmNlUGF0 aHMKLSAgICAgICAgICAgICAgICA9IFtyZXNvdXJjZVBhdGhzIHN0cmluZ0J5QXBwZW5kaW5nU3Ry aW5nOiBwYXRoU2VwYXJhdG9yXTsKLSAgICAgICAgICAgIHJlc291cmNlUGF0aHMKLSAgICAgICAg ICAgICAgPSBbcmVzb3VyY2VQYXRocyBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzogcmVzb3VyY2VQ YXRoXTsKLSAgICAgICAgICB9Ci0gICAgfQotICBpZiAoW3Jlc291cmNlUGF0aHMgbGVuZ3RoXSA+ IDApIHJldHVybiBbcmVzb3VyY2VQYXRocyBVVEY4U3RyaW5nXTsKLQotICByZXR1cm4gTlVMTDsK LX0KLQotCi1jb25zdCBjaGFyICoKLW5zX2xvYWRfcGF0aCAodm9pZCkKLS8qIElmIHJ1bm5pbmcg YXMgYSBzZWxmLWNvbnRhaW5lZCBhcHAgYnVuZGxlLCByZXR1cm4gYXMgYSBwYXRoIHN0cmluZwot ICAgdGhlIGZpbGVuYW1lcyBvZiB0aGUgc2l0ZS1saXNwIGFuZCBsaXNwIGRpcmVjdG9yaWVzLgot ICAgSWUsIHNpdGUtbGlzcDpsaXNwLiAgT3RoZXJ3aXNlLCByZXR1cm4gbmlsLiAgKi8KLXsKLSAg TlNCdW5kbGUgKmJ1bmRsZSA9IFtOU0J1bmRsZSBtYWluQnVuZGxlXTsKLSAgTlNTdHJpbmcgKnJl c291cmNlRGlyID0gW2J1bmRsZSByZXNvdXJjZVBhdGhdOwotICBOU1N0cmluZyAqcmVzb3VyY2VQ YXRoLCAqcmVzb3VyY2VQYXRoczsKLSAgTlNTdHJpbmcgKnBhdGhTZXBhcmF0b3IgPSBbTlNTdHJp bmcgc3RyaW5nV2l0aEZvcm1hdDogQCIlYyIsIFNFUENIQVJdOwotICBOU0ZpbGVNYW5hZ2VyICpm aWxlTWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKLSAgQk9PTCBpc0Rp cjsKLSAgTlNBcnJheSAqcGF0aHMgPSBbcmVzb3VyY2VEaXIgc3RyaW5nc0J5QXBwZW5kaW5nUGF0 aHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmpl Y3RzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAInNpdGUtbGlz cCIsIEAibGlzcCIsIG5pbF1dOwotICBOU0VudW1lcmF0b3IgKnBhdGhFbnVtID0gW3BhdGhzIG9i amVjdEVudW1lcmF0b3JdOwotICByZXNvdXJjZVBhdGhzID0gQCIiOwotCi0gIC8qIEhhY2sgdG8g c2tpcCBzaXRlLWxpc3AuICAqLwotICBpZiAobm9fc2l0ZV9saXNwKSByZXNvdXJjZVBhdGggPSBb cGF0aEVudW0gbmV4dE9iamVjdF07Ci0KLSAgd2hpbGUgKChyZXNvdXJjZVBhdGggPSBbcGF0aEVu dW0gbmV4dE9iamVjdF0pKQotICAgIHsKLSAgICAgIGlmIChbZmlsZU1hbmFnZXIgZmlsZUV4aXN0 c0F0UGF0aDogcmVzb3VyY2VQYXRoIGlzRGlyZWN0b3J5OiAmaXNEaXJdKQotICAgICAgICBpZiAo aXNEaXIpCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKFtyZXNvdXJjZVBhdGhzIGxlbmd0 aF0gPiAwKQotICAgICAgICAgICAgICByZXNvdXJjZVBhdGhzCi0gICAgICAgICAgICAgICAgPSBb cmVzb3VyY2VQYXRocyBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzogcGF0aFNlcGFyYXRvcl07Ci0g ICAgICAgICAgICByZXNvdXJjZVBhdGhzCi0gICAgICAgICAgICAgID0gW3Jlc291cmNlUGF0aHMg c3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6IHJlc291cmNlUGF0aF07Ci0gICAgICAgICAgfQotICAg IH0KLSAgaWYgKFtyZXNvdXJjZVBhdGhzIGxlbmd0aF0gPiAwKSByZXR1cm4gW3Jlc291cmNlUGF0 aHMgVVRGOFN0cmluZ107CisjZW5kaWYKIAotICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGVwYXRo OwogfQogCiAKLS0gCjIuMzAuMAoK --0000000000001ae9a905c552c4c8--