Rocksolid Light

Welcome to RetroBBS

mail  files  register  newsreader  groups  login

Message-ID:  

APL hackers do it in the quad.


devel / comp.lang.prolog / The Missing Link in Picat: Mercury States

SubjectAuthor
* The Missing Link in Picat: Mercury StatesMild Shock
`* Re: The Missing Link in Picat: Mercury StatesMild Shock
 `* Re: The Missing Link in Picat: Mercury StatesMild Shock
  `* Re: The Missing Link in Picat: Mercury StatesMild Shock
   `* Re: The Missing Link in Picat: Mercury StatesMild Shock
    `- Re: The Missing Link in Picat: Mercury StatesMild Shock

1
The Missing Link in Picat: Mercury States

<1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=2156&group=comp.lang.prolog#2156

  copy link   Newsgroups: comp.lang.prolog
X-Received: by 2002:a05:620a:38ca:b0:774:cd1:f036 with SMTP id qq10-20020a05620a38ca00b007740cd1f036mr188772qkn.14.1696347199183;
Tue, 03 Oct 2023 08:33:19 -0700 (PDT)
X-Received: by 2002:a05:6808:1a19:b0:3ae:11ee:b66f with SMTP id
bk25-20020a0568081a1900b003ae11eeb66fmr7339801oib.3.1696347199011; Tue, 03
Oct 2023 08:33:19 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.prolog
Date: Tue, 3 Oct 2023 08:33:18 -0700 (PDT)
Injection-Info: google-groups.googlegroups.com; posting-host=77.57.50.239; posting-account=UjEXBwoAAAAOk5fiB8WdHvZddFg9nJ9r
NNTP-Posting-Host: 77.57.50.239
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>
Subject: The Missing Link in Picat: Mercury States
From: bursejan@gmail.com (Mild Shock)
Injection-Date: Tue, 03 Oct 2023 15:33:19 +0000
Content-Type: text/plain; charset="UTF-8"
 by: Mild Shock - Tue, 3 Oct 2023 15:33 UTC

Would it be possibly to make a Picat that has more syntactic
sugar. Like for example today I write:

foo(X, R, Y, S) =>
(X := X+1; Y := Y+1), R = X, S = Y.

What if I could write:

foo(!X, !Y) =>
(X := X+1; Y := Y+1).

Similar something for predicate goal invokation, including
some query processing along the following lines:

?- X = 0, Y = 0, foo(!X, !Y).
X = 1, Y = 0;
X = 0, Y = 1.

Re: The Missing Link in Picat: Mercury States

<0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=2157&group=comp.lang.prolog#2157

  copy link   Newsgroups: comp.lang.prolog
X-Received: by 2002:a05:620a:3f04:b0:770:7460:c3f6 with SMTP id tx4-20020a05620a3f0400b007707460c3f6mr29961qkn.6.1696432165257;
Wed, 04 Oct 2023 08:09:25 -0700 (PDT)
X-Received: by 2002:a05:6808:14c7:b0:3a7:b55e:a54 with SMTP id
f7-20020a05680814c700b003a7b55e0a54mr1447874oiw.1.1696432165072; Wed, 04 Oct
2023 08:09:25 -0700 (PDT)
Path: i2pn2.org!i2pn.org!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.prolog
Date: Wed, 4 Oct 2023 08:09:24 -0700 (PDT)
In-Reply-To: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=77.57.50.239; posting-account=UjEXBwoAAAAOk5fiB8WdHvZddFg9nJ9r
NNTP-Posting-Host: 77.57.50.239
References: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com>
Subject: Re: The Missing Link in Picat: Mercury States
From: bursejan@gmail.com (Mild Shock)
Injection-Date: Wed, 04 Oct 2023 15:09:25 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Bytes: 3323
 by: Mild Shock - Wed, 4 Oct 2023 15:09 UTC

The sum_list example that I made had an evaluable function which is
predicate defined. But the foo/2 example with X := X+1 and Y := Y+1
doesn’t use some predicate defined evaluable function.

One has to check with the Picat Manual. It has a section 1.3 Defining Functions,
But this was never my point, to introduce this feature of Picat. Because
you don’t need it to translate X := X+1. It is tempting to translate it into:

+(!.X, 1, !:X)

But you can also translate X := X+1 into, in terms of Mercury state variables:

!:X is !.X+1

Basically in Picat, every variable is already automatically a state
variable. There are papers of Picat that detail the translation
used in Picat. Basically Picat translates to BProlog. Example paper:

Canonicalizing High-Level Constructs in Picat
2.4 Assignments and While Loops
https://www.sci.brooklyn.cuny.edu/~zhou/papers/padl17.pdf

The approach is relatively straight forward, every variable is automatically
a state variable, but its not automatically a pair. It gets a pair during
assignment which is described by Neng-Fa Zhou and Jonathan Fruhman:

Canonicalizing High-Level Constructs in Picat
3.5 Transformation of Assignments
Picat creates a new variable, say X1, to hold the value of X after
the assignment X := X + 1. […] All occurrences of X after the assignment
are replaced by X1. […] When encountering X1 := X1 + 2, Picat creates
another new variable. Etc…
https://www.sci.brooklyn.cuny.edu/~zhou/papers/padl17.pdf

Mild Shock schrieb am Dienstag, 3. Oktober 2023 um 17:33:20 UTC+2:
> Would it be possibly to make a Picat that has more syntactic
> sugar. Like for example today I write:
>
> foo(X, R, Y, S) =>
> (X := X+1; Y := Y+1), R = X, S = Y.
>
> What if I could write:
>
> foo(!X, !Y) =>
> (X := X+1; Y := Y+1).
>
> Similar something for predicate goal invokation, including
> some query processing along the following lines:
>
> ?- X = 0, Y = 0, foo(!X, !Y).
> X = 1, Y = 0;
> X = 0, Y = 1.

Re: The Missing Link in Picat: Mercury States

<afbd5cd2-c32a-4fb3-829b-f9f717ca4562n@googlegroups.com>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=2158&group=comp.lang.prolog#2158

  copy link   Newsgroups: comp.lang.prolog
X-Received: by 2002:ad4:56ee:0:b0:649:fc3d:7659 with SMTP id cr14-20020ad456ee000000b00649fc3d7659mr35814qvb.12.1696432796440;
Wed, 04 Oct 2023 08:19:56 -0700 (PDT)
X-Received: by 2002:a05:6870:7698:b0:1e1:2f43:1dc5 with SMTP id
dx24-20020a056870769800b001e12f431dc5mr1015078oab.3.1696432796181; Wed, 04
Oct 2023 08:19:56 -0700 (PDT)
Path: i2pn2.org!i2pn.org!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.prolog
Date: Wed, 4 Oct 2023 08:19:55 -0700 (PDT)
In-Reply-To: <0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=77.57.50.239; posting-account=UjEXBwoAAAAOk5fiB8WdHvZddFg9nJ9r
NNTP-Posting-Host: 77.57.50.239
References: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com> <0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <afbd5cd2-c32a-4fb3-829b-f9f717ca4562n@googlegroups.com>
Subject: Re: The Missing Link in Picat: Mercury States
From: bursejan@gmail.com (Mild Shock)
Injection-Date: Wed, 04 Oct 2023 15:19:56 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Bytes: 4274
 by: Mild Shock - Wed, 4 Oct 2023 15:19 UTC

I am already thinking of a name for the new programming language,
that results from the fusion of Picat and Marcury, basically adding (!)/1
to Picat. Some ideas: Picachu, Swicat, Candy, what else?

Mostlikely instead of translating to BProlog or SWI-Prolog, the new
language can possibly also be translated to Novacore. If the new
language has some momentum, it could be worth providing such

a translation layer. Currently Picat alone and also (=>)/2 alone of
SWI-Prolog is not very attractive. Picachu would go a totally different
route than Logtalk, instead of adding objects, it adds pseudo imperativity.

Mild Shock schrieb am Mittwoch, 4. Oktober 2023 um 17:09:26 UTC+2:
> The sum_list example that I made had an evaluable function which is
> predicate defined. But the foo/2 example with X := X+1 and Y := Y+1
> doesn’t use some predicate defined evaluable function.
>
> One has to check with the Picat Manual. It has a section 1.3 Defining Functions,
> But this was never my point, to introduce this feature of Picat. Because
> you don’t need it to translate X := X+1. It is tempting to translate it into:
>
> +(!.X, 1, !:X)
>
> But you can also translate X := X+1 into, in terms of Mercury state variables:
>
> !:X is !.X+1
>
> Basically in Picat, every variable is already automatically a state
> variable. There are papers of Picat that detail the translation
> used in Picat. Basically Picat translates to BProlog. Example paper:
>
> Canonicalizing High-Level Constructs in Picat
> 2.4 Assignments and While Loops
> https://www.sci.brooklyn.cuny.edu/~zhou/papers/padl17.pdf
>
> The approach is relatively straight forward, every variable is automatically
> a state variable, but its not automatically a pair. It gets a pair during
> assignment which is described by Neng-Fa Zhou and Jonathan Fruhman:
>
> Canonicalizing High-Level Constructs in Picat
> 3.5 Transformation of Assignments
> Picat creates a new variable, say X1, to hold the value of X after
> the assignment X := X + 1. […] All occurrences of X after the assignment
> are replaced by X1. […] When encountering X1 := X1 + 2, Picat creates
> another new variable. Etc…
> https://www.sci.brooklyn.cuny.edu/~zhou/papers/padl17.pdf
> Mild Shock schrieb am Dienstag, 3. Oktober 2023 um 17:33:20 UTC+2:
> > Would it be possibly to make a Picat that has more syntactic
> > sugar. Like for example today I write:
> >
> > foo(X, R, Y, S) =>
> > (X := X+1; Y := Y+1), R = X, S = Y.
> >
> > What if I could write:
> >
> > foo(!X, !Y) =>
> > (X := X+1; Y := Y+1).
> >
> > Similar something for predicate goal invokation, including
> > some query processing along the following lines:
> >
> > ?- X = 0, Y = 0, foo(!X, !Y).
> > X = 1, Y = 0;
> > X = 0, Y = 1.

Re: The Missing Link in Picat: Mercury States

<a0498b31-0207-4a8f-92ad-3a9b9609cbcfn@googlegroups.com>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=2159&group=comp.lang.prolog#2159

  copy link   Newsgroups: comp.lang.prolog
X-Received: by 2002:ac8:7d96:0:b0:417:b54b:e45a with SMTP id c22-20020ac87d96000000b00417b54be45amr37322qtd.4.1696433863067;
Wed, 04 Oct 2023 08:37:43 -0700 (PDT)
X-Received: by 2002:a05:6808:144d:b0:3ae:7044:fdce with SMTP id
x13-20020a056808144d00b003ae7044fdcemr1502275oiv.7.1696433862896; Wed, 04 Oct
2023 08:37:42 -0700 (PDT)
Path: i2pn2.org!i2pn.org!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.prolog
Date: Wed, 4 Oct 2023 08:37:42 -0700 (PDT)
In-Reply-To: <afbd5cd2-c32a-4fb3-829b-f9f717ca4562n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=77.57.50.239; posting-account=UjEXBwoAAAAOk5fiB8WdHvZddFg9nJ9r
NNTP-Posting-Host: 77.57.50.239
References: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>
<0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com> <afbd5cd2-c32a-4fb3-829b-f9f717ca4562n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <a0498b31-0207-4a8f-92ad-3a9b9609cbcfn@googlegroups.com>
Subject: Re: The Missing Link in Picat: Mercury States
From: bursejan@gmail.com (Mild Shock)
Injection-Date: Wed, 04 Oct 2023 15:37:43 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Bytes: 4646
 by: Mild Shock - Wed, 4 Oct 2023 15:37 UTC

You can always tell grandchildren a lie, that its due to Chu-Spaces.

LoL

Mild Shock schrieb am Mittwoch, 4. Oktober 2023 um 17:19:57 UTC+2:
> I am already thinking of a name for the new programming language,
> that results from the fusion of Picat and Marcury, basically adding (!)/1
> to Picat. Some ideas: Picachu, Swicat, Candy, what else?
>
> Mostlikely instead of translating to BProlog or SWI-Prolog, the new
> language can possibly also be translated to Novacore. If the new
> language has some momentum, it could be worth providing such
>
> a translation layer. Currently Picat alone and also (=>)/2 alone of
> SWI-Prolog is not very attractive. Picachu would go a totally different
> route than Logtalk, instead of adding objects, it adds pseudo imperativity.
> Mild Shock schrieb am Mittwoch, 4. Oktober 2023 um 17:09:26 UTC+2:
> > The sum_list example that I made had an evaluable function which is
> > predicate defined. But the foo/2 example with X := X+1 and Y := Y+1
> > doesn’t use some predicate defined evaluable function.
> >
> > One has to check with the Picat Manual. It has a section 1.3 Defining Functions,
> > But this was never my point, to introduce this feature of Picat. Because
> > you don’t need it to translate X := X+1. It is tempting to translate it into:
> >
> > +(!.X, 1, !:X)
> >
> > But you can also translate X := X+1 into, in terms of Mercury state variables:
> >
> > !:X is !.X+1
> >
> > Basically in Picat, every variable is already automatically a state
> > variable. There are papers of Picat that detail the translation
> > used in Picat. Basically Picat translates to BProlog. Example paper:
> >
> > Canonicalizing High-Level Constructs in Picat
> > 2.4 Assignments and While Loops
> > https://www.sci.brooklyn.cuny.edu/~zhou/papers/padl17.pdf
> >
> > The approach is relatively straight forward, every variable is automatically
> > a state variable, but its not automatically a pair. It gets a pair during
> > assignment which is described by Neng-Fa Zhou and Jonathan Fruhman:
> >
> > Canonicalizing High-Level Constructs in Picat
> > 3.5 Transformation of Assignments
> > Picat creates a new variable, say X1, to hold the value of X after
> > the assignment X := X + 1. […] All occurrences of X after the assignment
> > are replaced by X1. […] When encountering X1 := X1 + 2, Picat creates
> > another new variable. Etc…
> > https://www.sci.brooklyn.cuny.edu/~zhou/papers/padl17.pdf
> > Mild Shock schrieb am Dienstag, 3. Oktober 2023 um 17:33:20 UTC+2:
> > > Would it be possibly to make a Picat that has more syntactic
> > > sugar. Like for example today I write:
> > >
> > > foo(X, R, Y, S) =>
> > > (X := X+1; Y := Y+1), R = X, S = Y.
> > >
> > > What if I could write:
> > >
> > > foo(!X, !Y) =>
> > > (X := X+1; Y := Y+1).
> > >
> > > Similar something for predicate goal invokation, including
> > > some query processing along the following lines:
> > >
> > > ?- X = 0, Y = 0, foo(!X, !Y).
> > > X = 1, Y = 0;
> > > X = 0, Y = 1.

Re: The Missing Link in Picat: Mercury States

<c194a4b3-9e53-4ac9-8a37-b2cae6ee26f4n@googlegroups.com>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=2162&group=comp.lang.prolog#2162

  copy link   Newsgroups: comp.lang.prolog
X-Received: by 2002:a05:620a:3707:b0:773:eed7:76ad with SMTP id de7-20020a05620a370700b00773eed776admr97473qkb.11.1696535962504;
Thu, 05 Oct 2023 12:59:22 -0700 (PDT)
X-Received: by 2002:a05:6870:a88d:b0:1dc:fea7:12ae with SMTP id
eb13-20020a056870a88d00b001dcfea712aemr2267734oab.8.1696535962293; Thu, 05
Oct 2023 12:59:22 -0700 (PDT)
Path: i2pn2.org!i2pn.org!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.prolog
Date: Thu, 5 Oct 2023 12:59:22 -0700 (PDT)
In-Reply-To: <a0498b31-0207-4a8f-92ad-3a9b9609cbcfn@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=77.57.50.239; posting-account=UjEXBwoAAAAOk5fiB8WdHvZddFg9nJ9r
NNTP-Posting-Host: 77.57.50.239
References: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>
<0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com> <afbd5cd2-c32a-4fb3-829b-f9f717ca4562n@googlegroups.com>
<a0498b31-0207-4a8f-92ad-3a9b9609cbcfn@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <c194a4b3-9e53-4ac9-8a37-b2cae6ee26f4n@googlegroups.com>
Subject: Re: The Missing Link in Picat: Mercury States
From: bursejan@gmail.com (Mild Shock)
Injection-Date: Thu, 05 Oct 2023 19:59:22 +0000
Content-Type: text/plain; charset="UTF-8"
X-Received-Bytes: 2160
 by: Mild Shock - Thu, 5 Oct 2023 19:59 UTC

How does one do the push back? I think its also on the agenda.
In DCG a push back need not be a list. It can also be a non-terminal.
If you have the following DCG clause with a push back:

p, q --> r.

Its translated as follows:

p(A, B) :- r(A, C), q(B, C).

So the push back is appended to the goal list of the body,
and the push back has the argument order reversed. This lead me
to an idea, which might be not present in Mercury, not sure, but to
have both !IO and ?IO. A Push back would be translated:

p(!IO) :- r(!IO), q(?IO)

The question mark (?)/2, unlike the exclamation mark (!)/1, has the
pair flipped, providing a mirror relation ship. This could be useful Short-
DeadfishNumbers problem, if the state transtions are formulated !IO style,
but with the help of ?IO one could search backward from the goal to the start.

Re: The Missing Link in Picat: Mercury States

<9755d2e4-ee1c-4805-ac4c-9a351e50f26fn@googlegroups.com>

  copy mid

https://www.rocksolidbbs.com/devel/article-flat.php?id=2163&group=comp.lang.prolog#2163

  copy link   Newsgroups: comp.lang.prolog
X-Received: by 2002:a05:6214:5644:b0:656:1a7e:e6ee with SMTP id mh4-20020a056214564400b006561a7ee6eemr63453qvb.6.1696536021927;
Thu, 05 Oct 2023 13:00:21 -0700 (PDT)
X-Received: by 2002:a05:6830:453:b0:6c4:b847:cb9a with SMTP id
d19-20020a056830045300b006c4b847cb9amr1696755otc.0.1696536021716; Thu, 05 Oct
2023 13:00:21 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.lang.prolog
Date: Thu, 5 Oct 2023 13:00:21 -0700 (PDT)
In-Reply-To: <c194a4b3-9e53-4ac9-8a37-b2cae6ee26f4n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=77.57.50.239; posting-account=UjEXBwoAAAAOk5fiB8WdHvZddFg9nJ9r
NNTP-Posting-Host: 77.57.50.239
References: <1e1f844f-ed0b-4e18-adb6-fe5980071b62n@googlegroups.com>
<0a5cefa0-24df-4e6f-afbd-4641907e0660n@googlegroups.com> <afbd5cd2-c32a-4fb3-829b-f9f717ca4562n@googlegroups.com>
<a0498b31-0207-4a8f-92ad-3a9b9609cbcfn@googlegroups.com> <c194a4b3-9e53-4ac9-8a37-b2cae6ee26f4n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <9755d2e4-ee1c-4805-ac4c-9a351e50f26fn@googlegroups.com>
Subject: Re: The Missing Link in Picat: Mercury States
From: bursejan@gmail.com (Mild Shock)
Injection-Date: Thu, 05 Oct 2023 20:00:21 +0000
Content-Type: text/plain; charset="UTF-8"
 by: Mild Shock - Thu, 5 Oct 2023 20:00 UTC

Corr.: Typo

The question mark (?)/1, unlike the exclamation mark (!)/1, has the

Mild Shock schrieb am Donnerstag, 5. Oktober 2023 um 21:59:23 UTC+2:
> How does one do the push back? I think its also on the agenda.
> In DCG a push back need not be a list. It can also be a non-terminal.
> If you have the following DCG clause with a push back:
>
> p, q --> r.
>
> Its translated as follows:
>
> p(A, B) :- r(A, C), q(B, C).
>
> So the push back is appended to the goal list of the body,
> and the push back has the argument order reversed. This lead me
> to an idea, which might be not present in Mercury, not sure, but to
> have both !IO and ?IO. A Push back would be translated:
>
> p(!IO) :- r(!IO), q(?IO)
>
> The question mark (?)/2, unlike the exclamation mark (!)/1, has the
> pair flipped, providing a mirror relation ship. This could be useful Short-
> DeadfishNumbers problem, if the state transtions are formulated !IO style,
> but with the help of ?IO one could search backward from the goal to the start.

1
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor