Is that a mistake or bug?

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Is that a mistake or bug?

zhenyuan wei
Hi all,
    I saw the code like following:

QueryResult result = new QueryResult();

cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
if (cmd.getSegmentTerminateEarly()) {
  result.setSegmentTerminatedEarly(Boolean.FALSE);
}

It says if request's param segmentTerminateEarly=true, which means search
maybe terminated early within a segment,  then set
result.setSegmentTerminatedEarly as false , this code is of a little confusion
.
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

Mikhail Khludnev-2
It's neither, it's on purpose. By default  result.segmentTerminatedEarly is
null, hence it doesn't appear in result output. see
ResponseBuilder.setResult(QueryResult).
So, if cmd requests early termination, it sets false by default, enabling
"false" output even it won't be the case. And later it might be flipped to
true.


On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]> wrote:

> Hi all,
>     I saw the code like following:
>
> QueryResult result = new QueryResult();
>
>
> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> if (cmd.getSegmentTerminateEarly()) {
>   result.setSegmentTerminatedEarly(Boolean.FALSE);
> }
>
> It says if request's param segmentTerminateEarly=true, which means search
> maybe terminated early within a segment,  then set
> result.setSegmentTerminatedEarly as false , this code is of a little
> confusion
> .
>


--
Sincerely yours
Mikhail Khludnev
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

zhenyuan wei
Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a boolean,
instead of Boolean,  is better, right?

Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:

> It's neither, it's on purpose. By default  result.segmentTerminatedEarly is
> null, hence it doesn't appear in result output. see
> ResponseBuilder.setResult(QueryResult).
> So, if cmd requests early termination, it sets false by default, enabling
> "false" output even it won't be the case. And later it might be flipped to
> true.
>
>
> On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]> wrote:
>
> > Hi all,
> >     I saw the code like following:
> >
> > QueryResult result = new QueryResult();
> >
> >
> >
> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> > if (cmd.getSegmentTerminateEarly()) {
> >   result.setSegmentTerminatedEarly(Boolean.FALSE);
> > }
> >
> > It says if request's param segmentTerminateEarly=true, which means search
> > maybe terminated early within a segment,  then set
> > result.setSegmentTerminatedEarly as false , this code is of a little
> > confusion
> > .
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
>
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

Mikhail Khludnev-2
Nope. In this case, it will respond terminatedEarly=false even if noone
request it.

On Mon, Sep 3, 2018 at 9:09 AM zhenyuan wei <[hidden email]> wrote:

> Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a boolean,
> instead of Boolean,  is better, right?
>
> Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:
>
> > It's neither, it's on purpose. By default  result.segmentTerminatedEarly
> is
> > null, hence it doesn't appear in result output. see
> > ResponseBuilder.setResult(QueryResult).
> > So, if cmd requests early termination, it sets false by default, enabling
> > "false" output even it won't be the case. And later it might be flipped
> to
> > true.
> >
> >
> > On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]> wrote:
> >
> > > Hi all,
> > >     I saw the code like following:
> > >
> > > QueryResult result = new QueryResult();
> > >
> > >
> > >
> >
> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> > > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> > > if (cmd.getSegmentTerminateEarly()) {
> > >   result.setSegmentTerminatedEarly(Boolean.FALSE);
> > > }
> > >
> > > It says if request's param segmentTerminateEarly=true, which means
> search
> > > maybe terminated early within a segment,  then set
> > > result.setSegmentTerminatedEarly as false , this code is of a little
> > > confusion
> > > .
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> >
>


--
Sincerely yours
Mikhail Khludnev
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

zhenyuan wei
I mean, use terminatedEarly as basic boolean type, then  no need to explicitly
assign it as Boolean.FALSE,  because basic boolean's default value is false.

Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午4:13写道:

> Nope. In this case, it will respond terminatedEarly=false even if noone
> request it.
>
> On Mon, Sep 3, 2018 at 9:09 AM zhenyuan wei <[hidden email]> wrote:
>
> > Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a boolean,
> > instead of Boolean,  is better, right?
> >
> > Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:
> >
> > > It's neither, it's on purpose. By default
> result.segmentTerminatedEarly
> > is
> > > null, hence it doesn't appear in result output. see
> > > ResponseBuilder.setResult(QueryResult).
> > > So, if cmd requests early termination, it sets false by default,
> enabling
> > > "false" output even it won't be the case. And later it might be flipped
> > to
> > > true.
> > >
> > >
> > > On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]> wrote:
> > >
> > > > Hi all,
> > > >     I saw the code like following:
> > > >
> > > > QueryResult result = new QueryResult();
> > > >
> > > >
> > > >
> > >
> >
> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> > > > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> > > > if (cmd.getSegmentTerminateEarly()) {
> > > >   result.setSegmentTerminatedEarly(Boolean.FALSE);
> > > > }
> > > >
> > > > It says if request's param segmentTerminateEarly=true, which means
> > search
> > > > maybe terminated early within a segment,  then set
> > > > result.setSegmentTerminatedEarly as false , this code is of a little
> > > > confusion
> > > > .
> > > >
> > >
> > >
> > > --
> > > Sincerely yours
> > > Mikhail Khludnev
> > >
> >
>
>
> --
> Sincerely yours
> Mikhail Khludnev
>
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

p.bodnar
In reply to this post by Mikhail Khludnev-2
Hi, really nope :) Because as MK writes below, result.segmentTerminatedEarly is used as a 3-state variable.

The only line that could be improved, is probably replacing "Boolean.FALSE" by simply "false", but that is really a minor thing...

Regards

PB
______________________________________________________________

> Od: "zhenyuan wei" <[hidden email]>
> Komu: [hidden email]
> Datum: 03.09.2018 10:24
> Předmět: Re: Is that a mistake or bug?
>
>I mean, use terminatedEarly as basic boolean type, then  no need to explicitly
>assign it as Boolean.FALSE,  because basic boolean's default value is false.
>
>Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午4:13写道:
>
>> Nope. In this case, it will respond terminatedEarly=false even if noone
>> request it.
>>
>> On Mon, Sep 3, 2018 at 9:09 AM zhenyuan wei <[hidden email]> wrote:
>>
>> > Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a boolean,
>> > instead of Boolean,  is better, right?
>> >
>> > Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:
>> >
>> > > It's neither, it's on purpose. By default
>> result.segmentTerminatedEarly
>> > is
>> > > null, hence it doesn't appear in result output. see
>> > > ResponseBuilder.setResult(QueryResult).
>> > > So, if cmd requests early termination, it sets false by default,
>> enabling
>> > > "false" output even it won't be the case. And later it might be flipped
>> > to
>> > > true.
>> > >
>> > >
>> > > On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]> wrote:
>> > >
>> > > > Hi all,
>> > > >     I saw the code like following:
>> > > >
>> > > > QueryResult result = new QueryResult();
>> > > >
>> > > >
>> > > >
>> > >
>> >
>> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
>> > > > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
>> > > > if (cmd.getSegmentTerminateEarly()) {
>> > > >   result.setSegmentTerminatedEarly(Boolean.FALSE);
>> > > > }
>> > > >
>> > > > It says if request's param segmentTerminateEarly=true, which means
>> > search
>> > > > maybe terminated early within a segment,  then set
>> > > > result.setSegmentTerminatedEarly as false , this code is of a little
>> > > > confusion
>> > > > .
>> > > >
>> > >
>> > >
>> > > --
>> > > Sincerely yours
>> > > Mikhail Khludnev
>> > >
>> >
>>
>>
>> --
>> Sincerely yours
>> Mikhail Khludnev
>>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

zhenyuan wei
Oh ~ I feel embarrassed to  explaining it again, maybe my english not so
well~
my actually mean is:   IF  QueryResult.segmentTerminatedEarly  is boolean
,not Boolean , declared in QueryResult.
public class QueryResult{
       private boolean partialResults
      * private Boolean segmentTerminatedEarly;  ====>  private boolean
segmentTerminatedEarly;*
       ......
}

then  in QueryComponent.process() method, like follow :

QueryResult result = new QueryResult();
cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));


*if (cmd.getSegmentTerminateEarly()) {     // this if block code can be
deleted .    result.setSegmentTerminatedEarly(Boolean.FALSE); } *







<[hidden email]> 于2018年9月3日周一 下午4:52写道:

> Hi, really nope :) Because as MK writes below,
> result.segmentTerminatedEarly is used as a 3-state variable.
>
> The only line that could be improved, is probably replacing
> "Boolean.FALSE" by simply "false", but that is really a minor thing...
>
> Regards
>
> PB
> ______________________________________________________________
> > Od: "zhenyuan wei" <[hidden email]>
> > Komu: [hidden email]
> > Datum: 03.09.2018 10:24
> > Předmět: Re: Is that a mistake or bug?
> >
> >I mean, use terminatedEarly as basic boolean type, then  no need to
> explicitly
> >assign it as Boolean.FALSE,  because basic boolean's default value is
> false.
> >
> >Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午4:13写道:
> >
> >> Nope. In this case, it will respond terminatedEarly=false even if noone
> >> request it.
> >>
> >> On Mon, Sep 3, 2018 at 9:09 AM zhenyuan wei <[hidden email]> wrote:
> >>
> >> > Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a
> boolean,
> >> > instead of Boolean,  is better, right?
> >> >
> >> > Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:
> >> >
> >> > > It's neither, it's on purpose. By default
> >> result.segmentTerminatedEarly
> >> > is
> >> > > null, hence it doesn't appear in result output. see
> >> > > ResponseBuilder.setResult(QueryResult).
> >> > > So, if cmd requests early termination, it sets false by default,
> >> enabling
> >> > > "false" output even it won't be the case. And later it might be
> flipped
> >> > to
> >> > > true.
> >> > >
> >> > >
> >> > > On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]>
> wrote:
> >> > >
> >> > > > Hi all,
> >> > > >     I saw the code like following:
> >> > > >
> >> > > > QueryResult result = new QueryResult();
> >> > > >
> >> > > >
> >> > > >
> >> > >
> >> >
> >>
> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> >> > > > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> >> > > > if (cmd.getSegmentTerminateEarly()) {
> >> > > >   result.setSegmentTerminatedEarly(Boolean.FALSE);
> >> > > > }
> >> > > >
> >> > > > It says if request's param segmentTerminateEarly=true, which means
> >> > search
> >> > > > maybe terminated early within a segment,  then set
> >> > > > result.setSegmentTerminatedEarly as false , this code is of a
> little
> >> > > > confusion
> >> > > > .
> >> > > >
> >> > >
> >> > >
> >> > > --
> >> > > Sincerely yours
> >> > > Mikhail Khludnev
> >> > >
> >> >
> >>
> >>
> >> --
> >> Sincerely yours
> >> Mikhail Khludnev
> >>
> >
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

p.bodnar
In reply to this post by p.bodnar
I think we both understand you well :) So once again, to explain it to you, please have a look at the aforementioned https://github.com/apache/lucene-solr/blob/master/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java, these lines:

    final Boolean segmentTerminatedEarly = result.getSegmentTerminatedEarly();
    if (segmentTerminatedEarly != null) {
      rsp.getResponseHeader().add(SolrQueryResponse.RESPONSE_HEADER_SEGMENT_TERMINATED_EARLY_KEY, segmentTerminatedEarly);
}

Got it now? :)

Petr
______________________________________________________________

> Od: "zhenyuan wei" <[hidden email]>
> Komu: [hidden email]
> Datum: 03.09.2018 11:21
> Předmět: Re: Is that a mistake or bug?
>
>Oh ~ I feel embarrassed to  explaining it again, maybe my english not so
>well~
>my actually mean is:   IF  QueryResult.segmentTerminatedEarly  is boolean
>,not Boolean , declared in QueryResult.
>public class QueryResult{
>       private boolean partialResults
>      * private Boolean segmentTerminatedEarly;  ====>  private boolean
>segmentTerminatedEarly;*
>       ......
>}
>
>then  in QueryComponent.process() method, like follow :
>
>QueryResult result = new QueryResult();
>cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
>CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
>
>
>*if (cmd.getSegmentTerminateEarly()) {     // this if block code can be
>deleted .    result.setSegmentTerminatedEarly(Boolean.FALSE); } *
>
>
>
>
>
>
>
><[hidden email]> 于2018年9月3日周一 下午4:52写道:
>
>> Hi, really nope :) Because as MK writes below,
>> result.segmentTerminatedEarly is used as a 3-state variable.
>>
>> The only line that could be improved, is probably replacing
>> "Boolean.FALSE" by simply "false", but that is really a minor thing...
>>
>> Regards
>>
>> PB
>> ______________________________________________________________
>> > Od: "zhenyuan wei" <[hidden email]>
>> > Komu: [hidden email]
>> > Datum: 03.09.2018 10:24
>> > Předmět: Re: Is that a mistake or bug?
>> >
>> >I mean, use terminatedEarly as basic boolean type, then  no need to
>> explicitly
>> >assign it as Boolean.FALSE,  because basic boolean's default value is
>> false.
>> >
>> >Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午4:13写道:
>> >
>> >> Nope. In this case, it will respond terminatedEarly=false even if noone
>> >> request it.
>> >>
>> >> On Mon, Sep 3, 2018 at 9:09 AM zhenyuan wei <[hidden email]> wrote:
>> >>
>> >> > Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a
>> boolean,
>> >> > instead of Boolean,  is better, right?
>> >> >
>> >> > Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:
>> >> >
>> >> > > It's neither, it's on purpose. By default
>> >> result.segmentTerminatedEarly
>> >> > is
>> >> > > null, hence it doesn't appear in result output. see
>> >> > > ResponseBuilder.setResult(QueryResult).
>> >> > > So, if cmd requests early termination, it sets false by default,
>> >> enabling
>> >> > > "false" output even it won't be the case. And later it might be
>> flipped
>> >> > to
>> >> > > true.
>> >> > >
>> >> > >
>> >> > > On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]>
>> wrote:
>> >> > >
>> >> > > > Hi all,
>> >> > > >     I saw the code like following:
>> >> > > >
>> >> > > > QueryResult result = new QueryResult();
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
>> >> > > > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
>> >> > > > if (cmd.getSegmentTerminateEarly()) {
>> >> > > >   result.setSegmentTerminatedEarly(Boolean.FALSE);
>> >> > > > }
>> >> > > >
>> >> > > > It says if request's param segmentTerminateEarly=true, which means
>> >> > search
>> >> > > > maybe terminated early within a segment,  then set
>> >> > > > result.setSegmentTerminatedEarly as false , this code is of a
>> little
>> >> > > > confusion
>> >> > > > .
>> >> > > >
>> >> > >
>> >> > >
>> >> > > --
>> >> > > Sincerely yours
>> >> > > Mikhail Khludnev
>> >> > >
>> >> >
>> >>
>> >>
>> >> --
>> >> Sincerely yours
>> >> Mikhail Khludnev
>> >>
>> >
>> >
>>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Is that a mistake or bug?

zhenyuan wei
Oh~ got it, Thanks

<[hidden email]> 于2018年9月16日周日 下午9:54写道:

> I think we both understand you well :) So once again, to explain it to
> you, please have a look at the aforementioned
> https://github.com/apache/lucene-solr/blob/master/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java,
> these lines:
>
>     final Boolean segmentTerminatedEarly =
> result.getSegmentTerminatedEarly();
>     if (segmentTerminatedEarly != null) {
>
> rsp.getResponseHeader().add(SolrQueryResponse.RESPONSE_HEADER_SEGMENT_TERMINATED_EARLY_KEY,
> segmentTerminatedEarly);
> }
>
> Got it now? :)
>
> Petr
> ______________________________________________________________
> > Od: "zhenyuan wei" <[hidden email]>
> > Komu: [hidden email]
> > Datum: 03.09.2018 11:21
> > Předmět: Re: Is that a mistake or bug?
> >
> >Oh ~ I feel embarrassed to  explaining it again, maybe my english not so
> >well~
> >my actually mean is:   IF  QueryResult.segmentTerminatedEarly  is boolean
> >,not Boolean , declared in QueryResult.
> >public class QueryResult{
> >       private boolean partialResults
> >      * private Boolean segmentTerminatedEarly;  ====>  private boolean
> >segmentTerminatedEarly;*
> >       ......
> >}
> >
> >then  in QueryComponent.process() method, like follow :
> >
> >QueryResult result = new QueryResult();
>
> >cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> >CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> >
> >
> >*if (cmd.getSegmentTerminateEarly()) {     // this if block code can be
> >deleted .    result.setSegmentTerminatedEarly(Boolean.FALSE); } *
> >
> >
> >
> >
> >
> >
> >
> ><[hidden email]> 于2018年9月3日周一 下午4:52写道:
> >
> >> Hi, really nope :) Because as MK writes below,
> >> result.segmentTerminatedEarly is used as a 3-state variable.
> >>
> >> The only line that could be improved, is probably replacing
> >> "Boolean.FALSE" by simply "false", but that is really a minor thing...
> >>
> >> Regards
> >>
> >> PB
> >> ______________________________________________________________
> >> > Od: "zhenyuan wei" <[hidden email]>
> >> > Komu: [hidden email]
> >> > Datum: 03.09.2018 10:24
> >> > Předmět: Re: Is that a mistake or bug?
> >> >
> >> >I mean, use terminatedEarly as basic boolean type, then  no need to
> >> explicitly
> >> >assign it as Boolean.FALSE,  because basic boolean's default value is
> >> false.
> >> >
> >> >Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午4:13写道:
> >> >
> >> >> Nope. In this case, it will respond terminatedEarly=false even if
> noone
> >> >> request it.
> >> >>
> >> >> On Mon, Sep 3, 2018 at 9:09 AM zhenyuan wei <[hidden email]>
> wrote:
> >> >>
> >> >> > Yeah,got it~. So the QueryResult.segmentTerminatedEarly maybe a
> >> boolean,
> >> >> > instead of Boolean,  is better, right?
> >> >> >
> >> >> > Mikhail Khludnev <[hidden email]> 于2018年9月3日周一 下午1:36写道:
> >> >> >
> >> >> > > It's neither, it's on purpose. By default
> >> >> result.segmentTerminatedEarly
> >> >> > is
> >> >> > > null, hence it doesn't appear in result output. see
> >> >> > > ResponseBuilder.setResult(QueryResult).
> >> >> > > So, if cmd requests early termination, it sets false by default,
> >> >> enabling
> >> >> > > "false" output even it won't be the case. And later it might be
> >> flipped
> >> >> > to
> >> >> > > true.
> >> >> > >
> >> >> > >
> >> >> > > On Mon, Sep 3, 2018 at 5:57 AM zhenyuan wei <[hidden email]>
> >> wrote:
> >> >> > >
> >> >> > > > Hi all,
> >> >> > > >     I saw the code like following:
> >> >> > > >
> >> >> > > > QueryResult result = new QueryResult();
> >> >> > > >
> >> >> > > >
> >> >> > > >
> >> >> > >
> >> >> >
> >> >>
> >>
> cmd.setSegmentTerminateEarly(params.getBool(CommonParams.SEGMENT_TERMINATE_EARLY,
> >> >> > > > CommonParams.SEGMENT_TERMINATE_EARLY_DEFAULT));
> >> >> > > > if (cmd.getSegmentTerminateEarly()) {
> >> >> > > >   result.setSegmentTerminatedEarly(Boolean.FALSE);
> >> >> > > > }
> >> >> > > >
> >> >> > > > It says if request's param segmentTerminateEarly=true, which
> means
> >> >> > search
> >> >> > > > maybe terminated early within a segment,  then set
> >> >> > > > result.setSegmentTerminatedEarly as false , this code is of a
> >> little
> >> >> > > > confusion
> >> >> > > > .
> >> >> > > >
> >> >> > >
> >> >> > >
> >> >> > > --
> >> >> > > Sincerely yours
> >> >> > > Mikhail Khludnev
> >> >> > >
> >> >> >
> >> >>
> >> >>
> >> >> --
> >> >> Sincerely yours
> >> >> Mikhail Khludnev
> >> >>
> >> >
> >> >
> >>
> >
> >
>