"could not reattach to shared memory" on buildfarm member dory

Started by Tom Laneover 7 years ago33 messages
#1Tom Lane
tgl@sss.pgh.pa.us

So far, dory has failed three times with essentially identical symptoms:

2018-04-23 19:57:10.624 GMT [2240] FATAL: could not reattach to shared memory (key=0000000000000190, addr=00000000018E0000): error code 487
2018-04-23 15:57:10.657 EDT [8836] ERROR: lost connection to parallel worker
2018-04-23 15:57:10.657 EDT [8836] STATEMENT: select count(*) from tenk1 group by twenty;
2018-04-23 15:57:10.660 EDT [3820] LOG: background worker "parallel worker" (PID 2240) exited with exit code 1

Now how can this be? We've successfully reserved and released the address
range we want to use, so it *should* be free at the instant we try to map.

Another thing that seems curious, though it may just be an artifact of
not having many data points yet, is that these failures all occurred
during pg_upgradecheck. You'd think the "check" and "install-check"
steps would be equally vulnerable to the failure.

I guess the good news is that we're seeing this in a reasonably
reproducible fashion, so there's some hope of digging down to find
out the actual cause.

regards, tom lane

#2Stephen Frost
sfrost@snowman.net
In reply to: Tom Lane (#1)
Re: "could not reattach to shared memory" on buildfarm member dory

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

So far, dory has failed three times with essentially identical symptoms:

2018-04-23 19:57:10.624 GMT [2240] FATAL: could not reattach to shared memory (key=0000000000000190, addr=00000000018E0000): error code 487
2018-04-23 15:57:10.657 EDT [8836] ERROR: lost connection to parallel worker
2018-04-23 15:57:10.657 EDT [8836] STATEMENT: select count(*) from tenk1 group by twenty;
2018-04-23 15:57:10.660 EDT [3820] LOG: background worker "parallel worker" (PID 2240) exited with exit code 1

Now how can this be? We've successfully reserved and released the address
range we want to use, so it *should* be free at the instant we try to map.

Yeah, that's definitely interesting.

I guess the good news is that we're seeing this in a reasonably
reproducible fashion, so there's some hope of digging down to find
out the actual cause.

I've asked Heath to take a look at the system again and see if there's
any Windows logs or such that might help us understand what's happening.
AV was disabled on the box, so don't think it's that, at least.

Thanks!

Stephen

#3Thomas Munro
thomas.munro@enterprisedb.com
In reply to: Stephen Frost (#2)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, Apr 24, 2018 at 11:18 AM, Stephen Frost <sfrost@snowman.net> wrote:

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

So far, dory has failed three times with essentially identical symptoms:

2018-04-23 19:57:10.624 GMT [2240] FATAL: could not reattach to shared memory (key=0000000000000190, addr=00000000018E0000): error code 487
2018-04-23 15:57:10.657 EDT [8836] ERROR: lost connection to parallel worker
2018-04-23 15:57:10.657 EDT [8836] STATEMENT: select count(*) from tenk1 group by twenty;
2018-04-23 15:57:10.660 EDT [3820] LOG: background worker "parallel worker" (PID 2240) exited with exit code 1

Now how can this be? We've successfully reserved and released the address
range we want to use, so it *should* be free at the instant we try to map.

Yeah, that's definitely interesting.

I wondered if another thread with the right timing could map something
between the VirtualFree() and MapViewOfFileEx() calls, but we don't
create the Windows signal handling thread until a bit later. Could
there be any any other threads active in the process?

Maybe try asking what's mapped there with VirtualQueryEx() on failure?

--
Thomas Munro
http://www.enterprisedb.com

#4Noah Misch
noah@leadboat.com
In reply to: Thomas Munro (#3)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, Apr 24, 2018 at 11:37:33AM +1200, Thomas Munro wrote:

On Tue, Apr 24, 2018 at 11:18 AM, Stephen Frost <sfrost@snowman.net> wrote:

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

So far, dory has failed three times with essentially identical symptoms:

2018-04-23 19:57:10.624 GMT [2240] FATAL: could not reattach to shared memory (key=0000000000000190, addr=00000000018E0000): error code 487
2018-04-23 15:57:10.657 EDT [8836] ERROR: lost connection to parallel worker
2018-04-23 15:57:10.657 EDT [8836] STATEMENT: select count(*) from tenk1 group by twenty;
2018-04-23 15:57:10.660 EDT [3820] LOG: background worker "parallel worker" (PID 2240) exited with exit code 1

Now how can this be? We've successfully reserved and released the address
range we want to use, so it *should* be free at the instant we try to map.

Yeah, that's definitely interesting.

I wondered if another thread with the right timing could map something
between the VirtualFree() and MapViewOfFileEx() calls, but we don't
create the Windows signal handling thread until a bit later. Could
there be any any other threads active in the process?

Maybe try asking what's mapped there with VirtualQueryEx() on failure?

+1. An implementation of that:
/messages/by-id/20170403065106.GA2624300@tornado.leadboat.com

#5Magnus Hagander
magnus@hagander.net
In reply to: Stephen Frost (#2)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, Apr 24, 2018 at 1:18 AM, Stephen Frost <sfrost@snowman.net> wrote:

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

So far, dory has failed three times with essentially identical symptoms:

2018-04-23 19:57:10.624 GMT [2240] FATAL: could not reattach to shared

memory (key=0000000000000190, addr=00000000018E0000): error code 487

2018-04-23 15:57:10.657 EDT [8836] ERROR: lost connection to parallel

worker

2018-04-23 15:57:10.657 EDT [8836] STATEMENT: select count(*) from

tenk1 group by twenty;

2018-04-23 15:57:10.660 EDT [3820] LOG: background worker "parallel

worker" (PID 2240) exited with exit code 1

Now how can this be? We've successfully reserved and released the

address

range we want to use, so it *should* be free at the instant we try to

map.

Yeah, that's definitely interesting.

I guess the good news is that we're seeing this in a reasonably
reproducible fashion, so there's some hope of digging down to find
out the actual cause.

I've asked Heath to take a look at the system again and see if there's
any Windows logs or such that might help us understand what's happening.
AV was disabled on the box, so don't think it's that, at least.

Disabled or uninstalled?

Back when I was combating windows AV on a daily basis, this normally did
not have the same effect. Just disabling the AV didn't actually remove the
parts that caused issues, it just hid them. Actual uninstall is what was
required.

--
Magnus Hagander
Me: https://www.hagander.net/ <http://www.hagander.net/&gt;
Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/&gt;

#6Craig Ringer
craig@2ndquadrant.com
In reply to: Magnus Hagander (#5)
Re: "could not reattach to shared memory" on buildfarm member dory

On 24 April 2018 at 15:18, Magnus Hagander <magnus@hagander.net> wrote:

Back when I was combating windows AV on a daily basis, this normally did not
have the same effect. Just disabling the AV didn't actually remove the parts
that caused issues, it just hid them. Actual uninstall is what was required.

Yep. Specifically, they tended to inject kernel hooks and/or load hook
DLLs that did funky and often flakey things. Often with poor awareness
of things like multiple processes opening one file for write at the
same time.

I think I heard that MS has cleaned up the situation with AV
considerably by offering more kernel infrastructure for it, and
restricting what you can do in terms of kernel extensions etc. But I
don't know how much.

In any case, do you think dropping a minidump at the point of failure
might be informative? It should contain the full memory mapping
information. For this purpose we could just create a crashdumps/
directory then abort() when we detect the error, and have the
buildfarm stop processing until someone can grab the tempdir with the
dumps, binaries, .pdb files, etc.

src/backend/port/win32/crashdump.c doesn't expose a helper function to
do all the dbghelp.dll messing around and create a crashdump, it only
allows that to be done via a crash handler. But it might make sense to
break out the actual "write a crash dump" part to a separately
callable function. I've looked at doing this before, but always got
stuck with the apparent lack of support in gdb or lldb to be used as a
library for self-dumping. You can always shell out to gcore I guess...
but ew. Or we can fork() and abort() the forked child like
https://github.com/RuntimeTools/gencore does, but again, ew.

I was thinking that maybe the buildfarm could just create crashdumps/
automatically, but then we'd need to have support infrastructure for
recording the Pg binaries and .pdb files along with the dumps,
rotating them so we don't run out of space, etc etc.

--
Craig Ringer http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

#7Stephen Frost
sfrost@snowman.net
In reply to: Magnus Hagander (#5)
Re: "could not reattach to shared memory" on buildfarm member dory

Greetings,

* Magnus Hagander (magnus@hagander.net) wrote:

On Tue, Apr 24, 2018 at 1:18 AM, Stephen Frost <sfrost@snowman.net> wrote:

I've asked Heath to take a look at the system again and see if there's
any Windows logs or such that might help us understand what's happening.
AV was disabled on the box, so don't think it's that, at least.

Disabled or uninstalled?

The only AV installed on the system is the "Windows Defender" thing, so
it's not some additional AV system.

Thanks!

Stephen

#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#4)
Re: "could not reattach to shared memory" on buildfarm member dory

Noah Misch <noah@leadboat.com> writes:

On Tue, Apr 24, 2018 at 11:37:33AM +1200, Thomas Munro wrote:

Maybe try asking what's mapped there with VirtualQueryEx() on failure?

+1. An implementation of that:
/messages/by-id/20170403065106.GA2624300@tornado.leadboat.com

Not seeing any other work happening here, I pushed a little bit of
quick-hack investigation code. This is based on noting that
VirtualAllocEx is documented as rounding the allocation up to a page
boundary (4K), but there's nothing specific about whether or how much
CreateFileMapping or MapViewOfFileEx might round up. The observed
failures could be explained if those guys might eat more virtual
address space for the same request size as VirtualAllocEx does.
This is a stretch, for sure, but given the lack of any other theories
we might as well check it.

regards, tom lane

#9Stephen Frost
sfrost@snowman.net
In reply to: Tom Lane (#8)
Re: "could not reattach to shared memory" on buildfarm member dory

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

Noah Misch <noah@leadboat.com> writes:

On Tue, Apr 24, 2018 at 11:37:33AM +1200, Thomas Munro wrote:

Maybe try asking what's mapped there with VirtualQueryEx() on failure?

+1. An implementation of that:
/messages/by-id/20170403065106.GA2624300@tornado.leadboat.com

Not seeing any other work happening here, I pushed a little bit of
quick-hack investigation code. This is based on noting that
VirtualAllocEx is documented as rounding the allocation up to a page
boundary (4K), but there's nothing specific about whether or how much
CreateFileMapping or MapViewOfFileEx might round up. The observed
failures could be explained if those guys might eat more virtual
address space for the same request size as VirtualAllocEx does.
This is a stretch, for sure, but given the lack of any other theories
we might as well check it.

Sounds good to me. Just as an FYI, there are a couple folks taking a
look at the system and trying to figure out what's going on. We've seen
an Event ID 1530 error in the Windows Event log associated with
vctip.exe which Visual Studio was running with the build, but only
sometimes. When vctip.exe is being run and then finishes, it goes and
cleans things up which seems to be what's triggering the 1530 and that
appears to correllate with the failures, but hard to say if that's
really a smoking gun or is just coincidence.

Thanks!

Stephen

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#4)
Re: "could not reattach to shared memory" on buildfarm member dory

[ Thanks to Stephen for cranking up a continuous build loop on dory ]

Noah Misch <noah@leadboat.com> writes:

On Tue, Apr 24, 2018 at 11:37:33AM +1200, Thomas Munro wrote:

Maybe try asking what's mapped there with VirtualQueryEx() on failure?

+1. An implementation of that:
/messages/by-id/20170403065106.GA2624300@tornado.leadboat.com

So I tried putting in that code, and it turns the problem from something
that maybe happens in every third buildfarm run or so, to something that
happens at least a dozen times in a single "make check" step. This seems
to mean that either EnumProcessModules or GetModuleFileNameEx is itself
allocating memory, and sometimes that allocation comes out of the space
VirtualFree just freed :-(.

So we can't use those functions. We have however proven that no new
module gets loaded during VirtualFree or MapViewOfFileEx, so there
doesn't seem to be anything more to be learned from them anyway.

What it looks like to me is that MapViewOfFileEx allocates some memory and
sometimes that comes out of the wrong place. This is, um, unfortunate.
It also appears that VirtualFree might sometimes allocate some memory,
and that'd be even more unfortunate, but it's hard to be certain; the
blame might well fail on VirtualQuery instead. (Ain't Heisenbugs fun?)

The solution I was thinking about last night was to have
PGSharedMemoryReAttach call MapViewOfFileEx to map the shared memory
segment at an unspecified address, then unmap it, then call VirtualFree,
and finally call MapViewOfFileEx with the real target address. The idea
here is to get these various DLLs to set up any memory allocation pools
they're going to set up before we risk doing VirtualFree. I am not,
at this point, convinced this will fix it :-( ... but I'm not sure what
else to try.

In any case, it's still pretty unclear why dory is showing this problem
and other buildfarm members are not. whelk for instance seems to be
loading all the same DLLs and more besides.

regards, tom lane

#11Stephen Frost
sfrost@snowman.net
In reply to: Tom Lane (#10)
Re: "could not reattach to shared memory" on buildfarm member dory

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

[ Thanks to Stephen for cranking up a continuous build loop on dory ]

That was actually Heath, who is also trying to work this issue and has
an idea about something else which might help (and some more information
about what's happening in the event log). Adding him to the thread so
he can (easily) reply with what he's found.

Heath..?

Thanks!

Stephen

#12Heath Lord
heath.lord@crunchydata.com
In reply to: Stephen Frost (#11)
Re: "could not reattach to shared memory" on buildfarm member dory

On Mon, Apr 30, 2018 at 2:34 PM, Stephen Frost <sfrost@snowman.net> wrote:

Greetings,

* Tom Lane (tgl@sss.pgh.pa.us) wrote:

[ Thanks to Stephen for cranking up a continuous build loop on dory ]

That was actually Heath, who is also trying to work this issue and has
an idea about something else which might help (and some more information
about what's happening in the event log). Adding him to the thread so
he can (easily) reply with what he's found.

Heath..?

Thanks!

Stephen

So what I noticed after adding the '--force' flag was that in the Event
Viewer logs there was an Error in the System log stating that "The
application-specific permission settings do not grant Local Activation
permission for the COM Server application" for the Runtime Broker. So
around 2:00 pm today I went and changed the ownership of the registry
values to Administrators so I could add the user we are running the builds
under to the list of members that have access to it. However right after I
made that change the build was actually broken for me so I am just now
turning the builds back on to run constantly to verify if this has
any effect on the issue of not being able to reattach to the shared
memory. I am hoping that this makes things more stable, however I am not
confident that these are related.
The change that I attempted prior to this, which was done last Wednesday,
was to remove the vctip.exe program from being used as this was causing
issues for us as well. This was causing an Event ID 1530 error that stated
that "The application this is listed in the event details is leaving the
registry handle open" and Windows was helpfully closing any registry values
for that user profile, and I thought that possibly when doing so it was
cleaning up the memory that was allocated prior. However this did not
change anything for us after making that change.
Any ideas or changes that we could do to help debug or verify would be
helpful. We have considered changing it to run everything as SYSTEM but if
possible we would like to avoid this for security reasons. Thank you in
advance and I appreciate all the help.

-Heath

#13Stephen Frost
sfrost@snowman.net
In reply to: Heath Lord (#12)
Re: "could not reattach to shared memory" on buildfarm member dory

Greetings,

* Heath Lord (heath.lord@crunchydata.com) wrote:

Any ideas or changes that we could do to help debug or verify would be
helpful. We have considered changing it to run everything as SYSTEM but if
possible we would like to avoid this for security reasons. Thank you in
advance and I appreciate all the help.

Just to be clear- there is no longer anything showing up in the event
viewer associated with running the builds. There may still be an issue
with the system setup or such, but it at least seems less likely for
that to be the issue, so I'm thinking that Tom is more likely correct
that PG is doing something not quite right here.

Thanks!

Stephen

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Heath Lord (#12)
Re: "could not reattach to shared memory" on buildfarm member dory

Heath Lord <heath.lord@crunchydata.com> writes:

So what I noticed after adding the '--force' flag was that in the Event
Viewer logs there was an Error in the System log stating that "The
application-specific permission settings do not grant Local Activation
permission for the COM Server application" for the Runtime Broker. So
around 2:00 pm today I went and changed the ownership of the registry
values to Administrators so I could add the user we are running the builds
under to the list of members that have access to it. However right after I
made that change the build was actually broken for me so I am just now
turning the builds back on to run constantly to verify if this has
any effect on the issue of not being able to reattach to the shared
memory. I am hoping that this makes things more stable, however I am not
confident that these are related.

The build was broken on Windows between about 12:30 and 14:30 EDT,
thanks to an unrelated change. Now that that's sorted, dory is
still failing :-(.

Moreover, even though I took out the module dump logic, the failure rate
is still a good bit higher than it was before, which seems to confirm my
fear that this is a Heisenbug: either VirtualQuery itself, or the act of
elog'ing a bunch of output, is causing memory allocations to take place
that otherwise would not have.

I'm hoping that the elog output is to blame for that, and am going to
go try to rejigger the code so that we capture the memory maps into space
that was allocated before VirtualFree.

Any ideas or changes that we could do to help debug or verify would be
helpful. We have considered changing it to run everything as SYSTEM but if
possible we would like to avoid this for security reasons.

Yeah, that's no solution. Even if it were OK for dory, end users wouldn't
necessarily want to run PG that way.

regards, tom lane

#15Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#10)
Re: "could not reattach to shared memory" on buildfarm member dory

I wrote:

The solution I was thinking about last night was to have
PGSharedMemoryReAttach call MapViewOfFileEx to map the shared memory
segment at an unspecified address, then unmap it, then call VirtualFree,
and finally call MapViewOfFileEx with the real target address. The idea
here is to get these various DLLs to set up any memory allocation pools
they're going to set up before we risk doing VirtualFree. I am not,
at this point, convinced this will fix it :-( ... but I'm not sure what
else to try.

So the answer is that that doesn't help at all.

It's clear from dory's results that something is causing a 4MB chunk
of memory to get reserved in the process's address space, sometimes.
It might happen during the main MapViewOfFileEx call, or during the
preceding VirtualFree, or with my map/unmap dance in place, it might
happen during that. Frequently it doesn't happen at all, at least not
before the point where we've successfully done MapViewOfFileEx. But
if it does happen, and the chunk happens to get put in a spot that
overlaps where we want to put the shmem block, kaboom.

What seems like a plausible theory at this point is that the apparent
asynchronicity is due to the allocation being triggered by a different
thread, and the fact that our added monitoring code seems to make the
failure more likely can be explained by that code changing the timing.
But what thread could it be? It doesn't really look to me like either
the signal thread or the timer thread could eat 4MB. syslogger.c
also spawns a thread, on Windows, but AFAICS that's not being used in
this test configuration. Maybe the reason dory is showing the problem
is something or other is spawning a thread we don't even know about?

I'm going to go put a 1-sec sleep into the beginning of
PGSharedMemoryReAttach and see if that changes anything. If I'm right
that this is being triggered by another thread, that should allow the
other thread to do its thing (at least most of the time) so that the
failure rate ought to go way down.

Even if that does happen, I'm at a loss for a reasonable way to fix it
for real. Is there a way to seize control of a Windows process so that
there are no other running threads? Any other ideas?

regards, tom lane

#16Andres Freund
andres@anarazel.de
In reply to: Tom Lane (#15)
Re: "could not reattach to shared memory" on buildfarm member dory

Him

On 2018-04-30 20:01:40 -0400, Tom Lane wrote:

What seems like a plausible theory at this point is that the apparent
asynchronicity is due to the allocation being triggered by a different
thread, and the fact that our added monitoring code seems to make the
failure more likely can be explained by that code changing the timing.
But what thread could it be? It doesn't really look to me like either
the signal thread or the timer thread could eat 4MB.

It seems plausible that the underlying allocator allocates larger chunks
to serve small allocations. But we don't seem to have started any threads
at PGSharedMemoryReAttach() time? So it'd have to be something else that
starts threads.

Heath, could you use process explorer or such to check which processes
are running inside a working backend process?

Greetings,

Andres Freund

#17Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#15)
Re: "could not reattach to shared memory" on buildfarm member dory

On Mon, Apr 30, 2018 at 08:01:40PM -0400, Tom Lane wrote:

It's clear from dory's results that something is causing a 4MB chunk
of memory to get reserved in the process's address space, sometimes.
It might happen during the main MapViewOfFileEx call, or during the
preceding VirtualFree, or with my map/unmap dance in place, it might
happen during that. Frequently it doesn't happen at all, at least not
before the point where we've successfully done MapViewOfFileEx. But
if it does happen, and the chunk happens to get put in a spot that
overlaps where we want to put the shmem block, kaboom.

What seems like a plausible theory at this point is that the apparent
asynchronicity is due to the allocation being triggered by a different
thread, and the fact that our added monitoring code seems to make the
failure more likely can be explained by that code changing the timing.
But what thread could it be? It doesn't really look to me like either
the signal thread or the timer thread could eat 4MB. syslogger.c
also spawns a thread, on Windows, but AFAICS that's not being used in
this test configuration. Maybe the reason dory is showing the problem
is something or other is spawning a thread we don't even know about?

Likely some privileged daemon is creating a thread in every new process. (On
Windows, it's not unusual for one process to create a thread in another
process.) We don't have good control over that.

I'm at a loss for a reasonable way to fix it
for real. Is there a way to seize control of a Windows process so that
there are no other running threads?

I think not.

Any other ideas?

PostgreSQL could retry the whole process creation, analogous to
internal_forkexec() retries. Have the failed process exit after recording the
fact that it couldn't attach. Make the postmaster notice and spawn a
replacement. Give up after 100 failed attempts.

#18Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#17)
Re: "could not reattach to shared memory" on buildfarm member dory

Noah Misch <noah@leadboat.com> writes:

On Mon, Apr 30, 2018 at 08:01:40PM -0400, Tom Lane wrote:

What seems like a plausible theory at this point is that the apparent
asynchronicity is due to the allocation being triggered by a different
thread, and the fact that our added monitoring code seems to make the
failure more likely can be explained by that code changing the timing.
But what thread could it be? It doesn't really look to me like either
the signal thread or the timer thread could eat 4MB. syslogger.c
also spawns a thread, on Windows, but AFAICS that's not being used in
this test configuration.

The 1-second wait doesn't seem to have changed things much, which puts
a hole in the idea that this is triggered by a thread spawned earlier
in backend process startup.

Maybe the reason dory is showing the problem
is something or other is spawning a thread we don't even know about?

Likely some privileged daemon is creating a thread in every new process.

Yeah, I'm afraid that's the most likely theory at this point; it offers
an explanation why we're seeing this on dory and not other machines.
Although if the daemon were responding to process startup, wouldn't the
extra wait have given it time to do so? There's still something that
doesn't add up here.

Any other ideas?

PostgreSQL could retry the whole process creation, analogous to
internal_forkexec() retries.

In the absence of any clearer theory about what's causing this,
that may be our only recourse. Sure is ugly though.

regards, tom lane

#19Thomas Munro
thomas.munro@enterprisedb.com
In reply to: Noah Misch (#17)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, May 1, 2018 at 2:59 PM, Noah Misch <noah@leadboat.com> wrote:

Likely some privileged daemon is creating a thread in every new process. (On
Windows, it's not unusual for one process to create a thread in another
process.) We don't have good control over that.

Huh. I was already amazed (as a non-Windows user) by the DSM code
that duplicates file handles into the postmaster process without its
cooperation, but starting threads is even more amazing.
Apparently debuggers do that. Could this be running in some kind of
debugger-managed environment or build, perhaps as a result of some
core dump capturing mode or something?

https://msdn.microsoft.com/en-us/library/windows/desktop/dd405484(v=vs.85).aspx

Apparently another way to mess with another process's memory map is
via "Asynchronous Procedure Calls":

http://blogs.microsoft.co.il/pavely/2017/03/14/injecting-a-dll-without-a-remote-thread/

It looks like that mechanism could allow something either in our own
process (perhaps some timer-related thing that we might have set up
ourselves or might be set up by the system?) or another process to
queue actions for our own thread to run at certain points.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms681951(v=vs.85).aspx

--
Thomas Munro
http://www.enterprisedb.com

#20Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#16)
Re: "could not reattach to shared memory" on buildfarm member dory

Andres Freund <andres@anarazel.de> writes:

Heath, could you use process explorer or such to check which processes
are running inside a working backend process?

It seems to be possible to enumerate the threads that are present inside a
Windows process, although it's not clear to me how much identifying info
is available. Perhaps it'd be worth putting in some "dump threads"
debugging code like the "dump modules" code we had in there for a bit?

regards, tom lane

#21Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#20)
Re: "could not reattach to shared memory" on buildfarm member dory

Well, at this point the only thing that's entirely clear is that none
of the ideas I had work. I think we are going to be forced to pursue
Noah's idea of doing an end-to-end retry. Somebody else will need to
take point on that; I lack a Windows environment and have already done
a lot more blind patch-pushing than I like in this effort.

I'll revert the debugging code I added to win32_shmem.c, unless
someone sees a reason to leave it there awhile longer.

regards, tom lane

#22Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#21)
2 attachment(s)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, May 01, 2018 at 11:31:50AM -0400, Tom Lane wrote:

Well, at this point the only thing that's entirely clear is that none
of the ideas I had work. I think we are going to be forced to pursue
Noah's idea of doing an end-to-end retry. Somebody else will need to
take point on that; I lack a Windows environment and have already done
a lot more blind patch-pushing than I like in this effort.

Having tried this, I find a choice between performance and complexity. Both
of my designs use proc_exit(4) to indicate failure to reattach. The simpler,
slower design has WIN32 internal_forkexec() block until the child reports (via
SetEvent()) that it reattached to shared memory. This caused a fivefold
reduction in process creation performance[1]This (2 forks per transaction) dropped from 139tps to 27tps: echo 'select 1' >script env PGOPTIONS="--default_transaction_isolation=repeatable\\ read --force_parallel_mode=on" pgbench -T15 -j30 -c30 --connect -n -fscript. The less-simple, faster design
stashes the Port structure and retry count in the BackendList entry, which
reaper() uses to retry the fork upon seeing status 4. Notably, this requires
new code for regular backends, for bgworkers, and for others. It's currently
showing a 30% performance _increase_ on the same benchmark; I can't explain
that increase and doubt it will last, but I think it's plausible for the
less-simple design to be performance-neutral.

I see these options:

1. Use the simpler design with a GUC, disabled by default, to control whether
the new code is active. Mention the GUC in a new errhint() for the "could
not reattach to shared memory" error.

2. Like (1), but enable the GUC by default.

3. Like (1), but follow up with a patch to enable the GUC by default in v12
only.

4. In addition to (1), enable retries if the GUC is set _or_ this postmaster
has seen at least one child fail to reattach.

5. Use the less-simple design, with retries enabled unconditionally.

I think I prefer (3), with (1) being a close second. My hesitation on (3) is
that parallel query has made startup time count even if you use a connection
pool, and all the Windows users not needing these retries will see parallel
query become that much slower. I dislike (5) for its impact on
platform-independent postmaster code. Other opinions?

I'm attaching a mostly-finished patch for the slower design. I tested
correctness with -DREATTACH_FORCE_FAIL_PERCENT=99. I'm also attaching a
proof-of-concept patch for the faster design. In this proof of concept, the
postmaster does not close its copy of a backend socket until the backend
exits. Also, bgworkers can change from BGWH_STARTED back to
BGWH_NOT_YET_STARTED; core code tolerates this, but external code may not.
Those would justify paying some performance to fix. The proof of concept
handles bgworkers and regular backends, but it does not handle the startup
process, checkpointer, etc. That doesn't affect benchmarking, of course.

nm

[1]: This (2 forks per transaction) dropped from 139tps to 27tps: echo 'select 1' >script env PGOPTIONS="--default_transaction_isolation=repeatable\\ read --force_parallel_mode=on" pgbench -T15 -j30 -c30 --connect -n -fscript
echo 'select 1' >script
env PGOPTIONS="--default_transaction_isolation=repeatable\\ read --force_parallel_mode=on" pgbench -T15 -j30 -c30 --connect -n -fscript

Attachments:

w32attach-retry-block-v1.patchtext/plain; charset=us-asciiDownload
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index f8ca52e..e96517f 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -383,6 +383,20 @@ PGSharedMemoryReAttach(void)
 	Assert(UsedShmemSegAddr != NULL);
 	Assert(IsUnderPostmaster);
 
+#ifdef REATTACH_FORCE_FAIL_PERCENT
+
+	/*
+	 * For testing, emulate a system where my MapViewOfFileEx() fails some
+	 * percentage of the time.
+	 */
+	srandom((unsigned int) (MyProcPid ^ MyStartTime));
+	if (random() % 100 < (REATTACH_FORCE_FAIL_PERCENT))
+	{
+		elog(LOG, "emulating failure to reattach to shared memory");
+		proc_exit(4);
+	}
+#endif
+
 	/*
 	 * Release memory region reservation that was made by the postmaster
 	 */
@@ -392,8 +406,11 @@ PGSharedMemoryReAttach(void)
 
 	hdr = (PGShmemHeader *) MapViewOfFileEx(UsedShmemSegID, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0, UsedShmemSegAddr);
 	if (!hdr)
-		elog(FATAL, "could not reattach to shared memory (key=%p, addr=%p): error code %lu",
+	{
+		elog(LOG, "could not reattach to shared memory (key=%p, addr=%p): error code %lu",
 			 UsedShmemSegID, UsedShmemSegAddr, GetLastError());
+		proc_exit(4);			/* Ask internal_forkexec() to retry. */
+	}
 	if (hdr != origUsedShmemSegAddr)
 		elog(FATAL, "reattaching to shared memory returned unexpected address (got %p, expected %p)",
 			 hdr, origUsedShmemSegAddr);
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index a4b53b3..7432223 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -454,6 +454,12 @@ static void InitPostmasterDeathWatchHandle(void);
 static pid_t waitpid(pid_t pid, int *exitstatus, int options);
 static void WINAPI pgwin32_deadchild_callback(PVOID lpParameter, BOOLEAN TimerOrWaitFired);
 
+/*
+ * During internal_forkexec(), the child signals this auto-reset event to
+ * indicate that it is no longer at risk of needing a fork retry.
+ */
+static HANDLE win32ReAttach;
+
 static HANDLE win32ChildQueue;
 
 typedef struct
@@ -520,6 +526,7 @@ typedef struct
 	int			max_safe_fds;
 	int			MaxBackends;
 #ifdef WIN32
+	HANDLE		win32ReAttach;
 	HANDLE		PostmasterHandle;
 	HANDLE		initial_signal_pipe;
 	HANDLE		syslogPipe[2];
@@ -556,6 +563,7 @@ static void ShmemBackendArrayRemove(Backend *bn);
 #define EXIT_STATUS_0(st)  ((st) == 0)
 #define EXIT_STATUS_1(st)  (WIFEXITED(st) && WEXITSTATUS(st) == 1)
 #define EXIT_STATUS_3(st)  (WIFEXITED(st) && WEXITSTATUS(st) == 3)
+/* status 4 means PGSharedMemoryReAttach() failure; see internal_forkexec() */
 
 #ifndef WIN32
 /*
@@ -1197,6 +1205,20 @@ PostmasterMain(int argc, char *argv[])
 
 #ifdef WIN32
 
+	{
+		SECURITY_ATTRIBUTES sa;
+
+		sa.nLength = sizeof(sa);
+		sa.lpSecurityDescriptor = NULL;
+		sa.bInheritHandle = TRUE;
+
+		win32ReAttach = CreateEvent(&sa, FALSE, FALSE, NULL);
+		if (win32ReAttach == NULL)
+			ereport(FATAL,
+					(errmsg("could not create event to facilitate fork emulation: error code %lu",
+							GetLastError())));
+	}
+
 	/*
 	 * Initialize I/O completion port used to deliver list of dead children.
 	 */
@@ -4524,6 +4546,8 @@ internal_forkexec(int argc, char *argv[], Port *port)
 	BackendParameters *param;
 	SECURITY_ATTRIBUTES sa;
 	char		paramHandleStr[32];
+	HANDLE		wait_handles[2];
+	bool		done;
 	win32_deadchild_waitinfo *childinfo;
 
 	/* Make sure caller set up argv properly */
@@ -4650,8 +4674,7 @@ retry:
 
 	/*
 	 * Now that the backend variables are written out, we start the child
-	 * thread so it can start initializing while we set up the rest of the
-	 * parent state.
+	 * thread so it can start initializing.
 	 */
 	if (ResumeThread(pi.hThread) == -1)
 	{
@@ -4673,6 +4696,64 @@ retry:
 	}
 
 	/*
+	 * Block until child dies or uses SetEvent(win32ReAttach) to indicate that
+	 * it reattached to shared memory.
+	 */
+	wait_handles[0] = win32ReAttach;
+	wait_handles[1] = pi.hProcess;
+	done = false;
+	while (!done)
+	{
+		DWORD		rc,
+					exitcode;
+
+		rc = WaitForMultipleObjectsEx(2, wait_handles, FALSE, INFINITE, TRUE);
+		switch (rc)
+		{
+			case WAIT_OBJECT_0: /* child reattached */
+				done = true;
+				break;
+			case WAIT_OBJECT_0 + 1: /* child exited */
+				done = true;
+				if (GetExitCodeProcess(pi.hProcess, &exitcode) &&
+					exitcode == 4)
+				{
+					/* child already made a log entry */
+					CloseHandle(pi.hProcess);
+					CloseHandle(pi.hThread);
+					if (++retry_count < 100)
+						goto retry;
+					ereport(LOG,
+							(errmsg("giving up after too many tries to reattach to shared memory"),
+							 errhint("This might be caused by ASLR or antivirus software.")));
+					return -1;
+				}
+				/* else, let pgwin32_deadchild_callback() handle the exit */
+				break;
+			case WAIT_IO_COMPLETION:
+
+				/*
+				 * The system interrupted the wait to execute an I/O
+				 * completion routine or asynchronous procedure call in this
+				 * thread.  PostgreSQL does not provoke either of these, but
+				 * atypical loaded DLLs or even other processes might do so.
+				 * Now, resume waiting.
+				 */
+				break;
+			case WAIT_FAILED:
+				ereport(FATAL,
+						(errmsg("could not wait for new child to start: error code %lu",
+								GetLastError())));
+				break;
+			default:
+				elog(FATAL,
+					 "unexpected return code from WaitForMultipleObjectsEx(): %lu",
+					 rc);
+				break;
+		}
+	}
+
+	/*
 	 * Queue a waiter for to signal when this child dies. The wait will be
 	 * handled automatically by an operating system thread pool.
 	 *
@@ -4787,6 +4868,14 @@ SubPostmasterMain(int argc, char *argv[])
 	else
 		PGSharedMemoryNoReAttach();
 
+#ifdef WIN32
+	if (!SetEvent(win32ReAttach))
+		elog(FATAL,
+			 "could not indicate, to postmaster, reattach to shared memory: error code %lu",
+			 GetLastError());
+	/* postmaster is now free to return from internal_forkexec() */
+#endif
+
 	/* autovacuum needs this set before calling InitProcess */
 	if (strcmp(argv[1], "--forkavlauncher") == 0)
 		AutovacuumLauncherIAm();
@@ -6030,6 +6119,7 @@ save_backend_variables(BackendParameters *param, Port *port,
 	param->MaxBackends = MaxBackends;
 
 #ifdef WIN32
+	param->win32ReAttach = win32ReAttach;
 	param->PostmasterHandle = PostmasterHandle;
 	if (!write_duplicated_handle(&param->initial_signal_pipe,
 								 pgwin32_create_signal_listener(childPid),
@@ -6262,6 +6352,7 @@ restore_backend_variables(BackendParameters *param, Port *port)
 	MaxBackends = param->MaxBackends;
 
 #ifdef WIN32
+	win32ReAttach = param->win32ReAttach;
 	PostmasterHandle = param->PostmasterHandle;
 	pgwin32_initial_signal_pipe = param->initial_signal_pipe;
 #else
w32attach-retry-nonblock-v0.patchtext/plain; charset=us-asciiDownload
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index f8ca52e..e84e2fc 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -382,6 +382,7 @@ PGSharedMemoryReAttach(void)
 
 	Assert(UsedShmemSegAddr != NULL);
 	Assert(IsUnderPostmaster);
+	/* FIXME change FATAL to proc_exit(1) */
 
 	/*
 	 * Release memory region reservation that was made by the postmaster
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index a4b53b3..eadf7f1 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -180,6 +180,14 @@ typedef struct bkend
 	bool		dead_end;		/* is it going to send an error and quit? */
 	bool		bgworker_notify;	/* gets bgworker start/stop notifications */
 	dlist_node	elem;			/* list link in BackendList */
+
+#ifdef EXEC_BACKEND
+#define RETRYABLE_FORK
+#endif
+#ifdef RETRYABLE_FORK
+	Port	   *port;			/* for still-opening backends */
+	int			retry_count;
+#endif
 } Backend;
 
 static dlist_head BackendList = DLIST_STATIC_INIT(BackendList);
@@ -412,6 +420,7 @@ static void BackendInitialize(Port *port);
 static void BackendRun(Port *port) pg_attribute_noreturn();
 static void ExitPostmaster(int status) pg_attribute_noreturn();
 static int	ServerLoop(void);
+static pid_t BackendFork(Backend *bn);
 static int	BackendStartup(Port *port);
 static int	ProcessStartupPacket(Port *port, bool SSLdone);
 static void SendNegotiateProtocolVersion(List *unrecognized_protocol_options);
@@ -427,6 +436,7 @@ static void TerminateChildren(int signal);
 #define SignalChildren(sig)			   SignalSomeChildren(sig, BACKEND_TYPE_ALL)
 
 static int	CountChildren(int target);
+static pid_t do_fork_bgworker(RegisteredBgWorker *rw);
 static bool assign_backendlist_entry(RegisteredBgWorker *rw);
 static void maybe_start_bgworkers(void);
 static bool CreateOptsFile(int argc, char *argv[], char *fullprogname);
@@ -543,6 +553,7 @@ static bool save_backend_variables(BackendParameters *param, Port *port,
 #endif
 
 static void ShmemBackendArrayAdd(Backend *bn);
+static void ShmemBackendArrayUpdate(Backend *bn, pid_t oldpid);
 static void ShmemBackendArrayRemove(Backend *bn);
 #endif							/* EXEC_BACKEND */
 
@@ -556,6 +567,7 @@ static void ShmemBackendArrayRemove(Backend *bn);
 #define EXIT_STATUS_0(st)  ((st) == 0)
 #define EXIT_STATUS_1(st)  (WIFEXITED(st) && WEXITSTATUS(st) == 1)
 #define EXIT_STATUS_3(st)  (WIFEXITED(st) && WEXITSTATUS(st) == 3)
+#define EXIT_STATUS_4(st)  (WIFEXITED(st) && WEXITSTATUS(st) == 4)
 
 #ifndef WIN32
 /*
@@ -1703,14 +1715,8 @@ ServerLoop(void)
 					port = ConnCreate(ListenSocket[i]);
 					if (port)
 					{
+						/* FIXME refactor more to happen in BackendStartup() */
 						BackendStartup(port);
-
-						/*
-						 * We no longer need the open socket or port structure
-						 * in this process
-						 */
-						StreamClose(port->sock);
-						ConnFree(port);
 					}
 				}
 			}
@@ -2311,7 +2317,11 @@ processCancelRequest(Port *port, void *pkt)
 								backendPID)));
 			return;
 		}
+#ifndef EXEC_BACKEND
+	}
+#else
 	}
+#endif
 
 	/* No matching backend */
 	ereport(LOG,
@@ -2393,8 +2403,6 @@ ConnCreate(int serverFd)
 
 	if (StreamConnection(serverFd, port) != STATUS_OK)
 	{
-		if (port->sock != PGINVALID_SOCKET)
-			StreamClose(port->sock);
 		ConnFree(port);
 		return NULL;
 	}
@@ -2425,6 +2433,8 @@ ConnCreate(int serverFd)
 static void
 ConnFree(Port *conn)
 {
+	if (conn->sock != PGINVALID_SOCKET)
+		StreamClose(conn->sock);
 #ifdef USE_SSL
 	secure_close(conn);
 #endif
@@ -2814,6 +2824,8 @@ reaper(SIGNAL_ARGS)
 				continue;
 			}
 
+			/* FIXME restart startup process after status 4 */
+
 			/*
 			 * Unexpected exit of startup process (including FATAL exit)
 			 * during PM_STARTUP is treated as catastrophic. There are no
@@ -2897,14 +2909,15 @@ reaper(SIGNAL_ARGS)
 		}
 
 		/*
-		 * Was it the bgwriter?  Normal exit can be ignored; we'll start a new
-		 * one at the next iteration of the postmaster's main loop, if
-		 * necessary.  Any other exit condition is treated as a crash.
+		 * Was it the bgwriter?  Normal exit and retryable startup failure can
+		 * be ignored; we'll start a new one at the next iteration of the
+		 * postmaster's main loop, if necessary.  Any other exit condition is
+		 * treated as a crash.
 		 */
 		if (pid == BgWriterPID)
 		{
 			BgWriterPID = 0;
-			if (!EXIT_STATUS_0(exitstatus))
+			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_4(exitstatus))
 				HandleChildCrash(pid, exitstatus,
 								 _("background writer process"));
 			continue;
@@ -2953,6 +2966,7 @@ reaper(SIGNAL_ARGS)
 				if (PgStatPID != 0)
 					signal_child(PgStatPID, SIGQUIT);
 			}
+			/* FIXME retry checkpointer */
 			else
 			{
 				/*
@@ -2967,44 +2981,47 @@ reaper(SIGNAL_ARGS)
 		}
 
 		/*
-		 * Was it the wal writer?  Normal exit can be ignored; we'll start a
-		 * new one at the next iteration of the postmaster's main loop, if
-		 * necessary.  Any other exit condition is treated as a crash.
+		 * Was it the wal writer?  Normal exit and retryable startup failure
+		 * can be ignored; we'll start a new one at the next iteration of the
+		 * postmaster's main loop, if necessary.  Any other exit condition is
+		 * treated as a crash.
 		 */
 		if (pid == WalWriterPID)
 		{
 			WalWriterPID = 0;
-			if (!EXIT_STATUS_0(exitstatus))
+			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_4(exitstatus))
 				HandleChildCrash(pid, exitstatus,
 								 _("WAL writer process"));
 			continue;
 		}
 
 		/*
-		 * Was it the wal receiver?  If exit status is zero (normal) or one
-		 * (FATAL exit), we assume everything is all right just like normal
-		 * backends.  (If we need a new wal receiver, we'll start one at the
-		 * next iteration of the postmaster's main loop.)
+		 * Was it the wal receiver?  If exit status is zero (normal), one
+		 * (FATAL exit) or four (retryable startup failure), we assume
+		 * everything is all right just like normal backends.  (If we need a
+		 * new wal receiver, we'll start one at the next iteration of the
+		 * postmaster's main loop.)
 		 */
 		if (pid == WalReceiverPID)
 		{
 			WalReceiverPID = 0;
-			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus))
+			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus) &&
+				!EXIT_STATUS_4(exitstatus))
 				HandleChildCrash(pid, exitstatus,
 								 _("WAL receiver process"));
 			continue;
 		}
 
 		/*
-		 * Was it the autovacuum launcher?	Normal exit can be ignored; we'll
-		 * start a new one at the next iteration of the postmaster's main
-		 * loop, if necessary.  Any other exit condition is treated as a
-		 * crash.
+		 * Was it the autovacuum launcher? Normal exit and retryable startup
+		 * failure can be ignored; we'll start a new one at the next iteration
+		 * of the postmaster's main loop, if necessary.  Any other exit
+		 * condition is treated as a crash.
 		 */
 		if (pid == AutoVacPID)
 		{
 			AutoVacPID = 0;
-			if (!EXIT_STATUS_0(exitstatus))
+			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_4(exitstatus))
 				HandleChildCrash(pid, exitstatus,
 								 _("autovacuum launcher process"));
 			continue;
@@ -3116,33 +3133,60 @@ CleanupBackgroundWorker(int pid,
 		snprintf(namebuf, MAXPGPATH, _("background worker \"%s\""),
 				 rw->rw_worker.bgw_type);
 
+		LogChildExit(DEBUG2, namebuf, pid, exitstatus);
 
-		if (!EXIT_STATUS_0(exitstatus))
-		{
-			/* Record timestamp, so we know when to restart the worker. */
-			rw->rw_crashed_at = GetCurrentTimestamp();
-		}
-		else
+		if (EXIT_STATUS_0(exitstatus))
 		{
 			/* Zero exit status means terminate */
 			rw->rw_crashed_at = 0;
 			rw->rw_terminate = true;
 		}
+		else if (!EXIT_STATUS_4(exitstatus))
+		{
+			/* Record timestamp, so we know when to restart the worker. */
+			rw->rw_crashed_at = GetCurrentTimestamp();
+		}
 
 		/*
 		 * Additionally, for shared-memory-connected workers, just like a
-		 * backend, any exit status other than 0 or 1 is considered a crash
+		 * backend, any exit status other than 0, 1 or 4 is considered a crash
 		 * and causes a system-wide restart.
 		 */
 		if ((rw->rw_worker.bgw_flags & BGWORKER_SHMEM_ACCESS) != 0)
 		{
-			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus))
+			if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus) &&
+				!EXIT_STATUS_4(exitstatus))
 			{
 				HandleChildCrash(pid, exitstatus, namebuf);
 				return true;
 			}
 		}
 
+#ifdef RETRYABLE_FORK
+		if (EXIT_STATUS_4(exitstatus))
+		{
+			Backend *bp = rw->rw_backend;
+
+			if (++bp->retry_count >= 100) /* FIXME use a constant */
+			{
+				ereport(LOG,
+						(errmsg("giving up after too many tries to reserve shared memory"),
+						 errhint("This might be caused by ASLR or antivirus software.")));
+			}
+			else
+			{
+				bp->pid = do_fork_bgworker(rw);
+				if (bp->pid > 0)
+				{
+					ShmemBackendArrayUpdate(bp, pid);
+					return true;
+				}
+			}
+			/* mark entry as crashed, so we'll try again later */
+			rw->rw_crashed_at = GetCurrentTimestamp();
+		}
+#endif
+
 		/*
 		 * We must release the postmaster child slot whether this worker is
 		 * connected to shared memory or not, but we only treat it as a crash
@@ -3187,7 +3231,8 @@ CleanupBackgroundWorker(int pid,
 /*
  * CleanupBackend -- cleanup after terminated backend.
  *
- * Remove all local state associated with backend.
+ * If the backend failed during early startup, retry forking it.  Otherwise,
+ * remove all local state associated with backend.
  *
  * If you change this, see also CleanupBackgroundWorker.
  */
@@ -3222,7 +3267,8 @@ CleanupBackend(int pid,
 	}
 #endif
 
-	if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus))
+	if (!EXIT_STATUS_0(exitstatus) && !EXIT_STATUS_1(exitstatus) &&
+		!EXIT_STATUS_4(exitstatus))
 	{
 		HandleChildCrash(pid, exitstatus, _("server process"));
 		return;
@@ -3234,6 +3280,40 @@ CleanupBackend(int pid,
 
 		if (bp->pid == pid)
 		{
+#ifdef RETRYABLE_FORK
+			if (EXIT_STATUS_4(exitstatus))
+			{
+				Assert(bp->port);
+
+				if (++bp->retry_count >= 100)
+				{
+					ereport(LOG,
+							(errmsg("giving up after too many tries to reserve shared memory"),
+							 errhint("This might be caused by ASLR or antivirus software.")));
+					report_fork_failure_to_client(bp->port, EAGAIN);
+				}
+				else
+				{
+					bp->pid = BackendFork(bp);
+					if (bp->pid > 0)
+					{
+						if (!bp->dead_end)
+							ShmemBackendArrayUpdate(bp, pid);
+						return;
+					}
+					/* Else, fork failed.  Fall through to remove local state. */
+				}
+			}
+			/*
+			 * For a sufficiently long-running backend, FIXME will have
+			 * already called ConnFree().
+			 */
+			if (bp->port)
+			{
+				ConnFree(bp->port);
+				bp->port = NULL;
+			}
+#endif
 			if (!bp->dead_end)
 			{
 				if (!ReleasePostmasterChildSlot(bp->child_slot))
@@ -3607,6 +3687,14 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus)
 static void
 PostmasterStateMachine(void)
 {
+	if (pmState == PM_STARTUP && StartupStatus == STARTUP_NOT_RUNNING)
+	{
+		/* We need a startup process, either the  */
+		StartupPID = StartupDataBase();
+		Assert(StartupPID != 0);
+		StartupStatus = STARTUP_RUNNING;
+	}
+
 	if (pmState == PM_WAIT_BACKUP)
 	{
 		/*
@@ -3954,9 +4042,60 @@ TerminateChildren(int signal)
 		signal_child(PgStatPID, signal);
 }
 
+/* FIXME comment */
+static pid_t
+BackendFork(Backend *bn)
+{
+	pid_t		pid;
+
+	MyCancelKey = bn->cancel_key;
+	MyPMChildSlot = bn->child_slot;
+
+#ifdef EXEC_BACKEND
+	pid = backend_forkexec(bn->port);
+#else							/* !EXEC_BACKEND */
+	pid = fork_process();
+	if (pid == 0)				/* child */
+	{
+		/* Detangle from postmaster */
+		InitPostmasterChild();
+
+		/* Close the postmaster's sockets */
+		ClosePostmasterPorts(false);
+
+		/* Perform additional initialization and collect startup packet */
+		BackendInitialize(bn->port);
+
+		/* And run the backend */
+		BackendRun(bn->port);
+	}
+#endif							/* EXEC_BACKEND */
+
+	if (pid < 0)
+	{
+		/* in parent, fork failed */
+		int			save_errno = errno;
+
+		errno = save_errno;
+		ereport(LOG,
+				(errmsg("could not fork new process for connection: %m")));
+		report_fork_failure_to_client(bn->port, save_errno);
+	}
+	else
+	{
+		/* in parent, successful fork */
+		ereport(DEBUG2,
+				(errmsg_internal("forked new backend, pid=%d socket=%d",
+								 (int) pid, (int) bn->port->sock)));
+	}
+
+	return pid;
+}
+
 /*
  * BackendStartup -- start backend process
  *
+ * FIXME
  * returns: STATUS_ERROR if the fork failed, STATUS_OK otherwise.
  *
  * Note: if you change this code, also consider StartAutovacuumWorker.
@@ -3965,7 +4104,6 @@ static int
 BackendStartup(Port *port)
 {
 	Backend    *bn;				/* for backend cleanup */
-	pid_t		pid;
 
 	/*
 	 * Create backend data structure.  Better before the fork() so we can
@@ -3977,24 +4115,13 @@ BackendStartup(Port *port)
 		ereport(LOG,
 				(errcode(ERRCODE_OUT_OF_MEMORY),
 				 errmsg("out of memory")));
-		return STATUS_ERROR;
-	}
-
-	/*
-	 * Compute the cancel key that will be assigned to this backend. The
-	 * backend will have its own copy in the forked-off process' value of
-	 * MyCancelKey, so that it can transmit the key to the frontend.
-	 */
-	if (!RandomCancelKey(&MyCancelKey))
-	{
-		free(bn);
-		ereport(LOG,
-				(errcode(ERRCODE_INTERNAL_ERROR),
-				 errmsg("could not generate random cancel key")));
-		return STATUS_ERROR;
+		goto err;
 	}
 
-	bn->cancel_key = MyCancelKey;
+#ifdef RETRYABLE_FORK
+	bn->port = port;
+	bn->retry_count = 0;
+#endif
 
 	/* Pass down canAcceptConnections state */
 	port->canAcceptConnections = canAcceptConnections();
@@ -4005,60 +4132,38 @@ BackendStartup(Port *port)
 	 * Unless it's a dead_end child, assign it a child slot number
 	 */
 	if (!bn->dead_end)
-		bn->child_slot = MyPMChildSlot = AssignPostmasterChildSlot();
+		bn->child_slot = AssignPostmasterChildSlot();
 	else
 		bn->child_slot = 0;
 
 	/* Hasn't asked to be notified about any bgworkers yet */
 	bn->bgworker_notify = false;
 
-#ifdef EXEC_BACKEND
-	pid = backend_forkexec(port);
-#else							/* !EXEC_BACKEND */
-	pid = fork_process();
-	if (pid == 0)				/* child */
+	/* Compute the cancel key that will be assigned to this backend. */
+	if (!RandomCancelKey(&bn->cancel_key))
 	{
-		free(bn);
-
-		/* Detangle from postmaster */
-		InitPostmasterChild();
-
-		/* Close the postmaster's sockets */
-		ClosePostmasterPorts(false);
-
-		/* Perform additional initialization and collect startup packet */
-		BackendInitialize(port);
-
-		/* And run the backend */
-		BackendRun(port);
-	}
-#endif							/* EXEC_BACKEND */
-
-	if (pid < 0)
-	{
-		/* in parent, fork failed */
-		int			save_errno = errno;
-
-		if (!bn->dead_end)
-			(void) ReleasePostmasterChildSlot(bn->child_slot);
-		free(bn);
-		errno = save_errno;
 		ereport(LOG,
-				(errmsg("could not fork new process for connection: %m")));
-		report_fork_failure_to_client(port, save_errno);
-		return STATUS_ERROR;
+				(errcode(ERRCODE_INTERNAL_ERROR),
+				 errmsg("could not generate random cancel key")));
+		goto err;
 	}
 
-	/* in parent, successful fork */
-	ereport(DEBUG2,
-			(errmsg_internal("forked new backend, pid=%d socket=%d",
-							 (int) pid, (int) port->sock)));
+	bn->pid = BackendFork(bn);
+	if (bn->pid < 0)
+		goto err;
+
+#ifndef RETRYABLE_FORK
+	/*
+	 * We no longer need the open socket or port structure
+	 * in this process
+	 */
+	ConnFree(port);
+#endif
 
 	/*
 	 * Everything's been successful, it's safe to add this backend to our list
 	 * of backends.
 	 */
-	bn->pid = pid;
 	bn->bkend_type = BACKEND_TYPE_NORMAL;	/* Can change later to WALSND */
 	dlist_push_head(&BackendList, &bn->elem);
 
@@ -4068,6 +4173,16 @@ BackendStartup(Port *port)
 #endif
 
 	return STATUS_OK;
+
+err:
+	ConnFree(port);
+	if (bn)
+	{
+		if (bn->child_slot)
+			(void) ReleasePostmasterChildSlot(bn->child_slot);
+		free(bn);
+	}
+	return STATUS_ERROR;
 }
 
 /*
@@ -4708,6 +4823,15 @@ retry:
 #endif							/* WIN32 */
 
 
+static void
+MarkSharedStateComplete(void)
+{
+#ifdef FIXME_WIN32
+	SendPostmasterSignal(PMSIGNAL_BACKEND_SHMAT);
+#endif
+}
+
+
 /*
  * SubPostmasterMain -- Get the fork/exec'd process into a state equivalent
  *			to what it would be if we'd simply forked on Unix, and then
@@ -4783,7 +4907,24 @@ SubPostmasterMain(int argc, char *argv[])
 		strcmp(argv[1], "--forkavworker") == 0 ||
 		strcmp(argv[1], "--forkboot") == 0 ||
 		strncmp(argv[1], "--forkbgworker=", 15) == 0)
+	{
+		/* test retryable starts */
+		if (0 && (strcmp(argv[1], "--forkbackend") == 0 ||
+				  strcmp(argv[1], "--forkavlauncher") == 0 ||
+				  strcmp(argv[1], "--forkavworker") == 0 ||
+				  /* strcmp(argv[1], "--forkboot") == 0 || */
+				  strncmp(argv[1], "--forkbgworker=", 15) == 0))
+		{
+			MyProcPid = getpid(); /* FIXME not needed? */
+			srandom((unsigned int ) (MyProcPid ^ MyStartTime));
+			if (random() % 10 != 0)
+			{
+				elog(LOG, "failing startup for testing purposes");
+				proc_exit(4);
+			}
+		}
 		PGSharedMemoryReAttach();
+	}
 	else
 		PGSharedMemoryNoReAttach();
 
@@ -4878,6 +5019,7 @@ SubPostmasterMain(int argc, char *argv[])
 
 		/* Attach process to shared data structures */
 		CreateSharedMemoryAndSemaphores(false, 0);
+		MarkSharedStateComplete();
 
 		/* And run the backend */
 		BackendRun(&port);		/* does not return */
@@ -4892,6 +5034,7 @@ SubPostmasterMain(int argc, char *argv[])
 
 		/* Attach process to shared data structures */
 		CreateSharedMemoryAndSemaphores(false, 0);
+		MarkSharedStateComplete();
 
 		AuxiliaryProcessMain(argc - 2, argv + 2);	/* does not return */
 	}
@@ -4905,6 +5048,7 @@ SubPostmasterMain(int argc, char *argv[])
 
 		/* Attach process to shared data structures */
 		CreateSharedMemoryAndSemaphores(false, 0);
+		MarkSharedStateComplete();
 
 		AutoVacLauncherMain(argc - 2, argv + 2);	/* does not return */
 	}
@@ -4918,6 +5062,7 @@ SubPostmasterMain(int argc, char *argv[])
 
 		/* Attach process to shared data structures */
 		CreateSharedMemoryAndSemaphores(false, 0);
+		MarkSharedStateComplete();
 
 		AutoVacWorkerMain(argc - 2, argv + 2);	/* does not return */
 	}
@@ -4936,6 +5081,7 @@ SubPostmasterMain(int argc, char *argv[])
 
 		/* Attach process to shared data structures */
 		CreateSharedMemoryAndSemaphores(false, 0);
+		MarkSharedStateComplete();
 
 		/* Fetch MyBgworkerEntry from shared memory */
 		shmem_slot = atoi(argv[1] + 15);
@@ -4952,12 +5098,14 @@ SubPostmasterMain(int argc, char *argv[])
 	if (strcmp(argv[1], "--forkcol") == 0)
 	{
 		/* Do not want to attach to shared memory */
+		MarkSharedStateComplete();
 
 		PgstatCollectorMain(argc, argv);	/* does not return */
 	}
 	if (strcmp(argv[1], "--forklog") == 0)
 	{
 		/* Do not want to attach to shared memory */
+		MarkSharedStateComplete();
 
 		SysLoggerMain(argc, argv);	/* does not return */
 	}
@@ -5620,40 +5768,14 @@ bgworker_forkexec(int shmem_slot)
 }
 #endif
 
-/*
- * Start a new bgworker.
- * Starting time conditions must have been checked already.
- *
- * Returns true on success, false on failure.
- * In either case, update the RegisteredBgWorker's state appropriately.
- *
- * This code is heavily based on autovacuum.c, q.v.
- */
-static bool
-do_start_bgworker(RegisteredBgWorker *rw)
+/* FIXME comment */
+static pid_t
+do_fork_bgworker(RegisteredBgWorker *rw)
 {
 	pid_t		worker_pid;
 
-	Assert(rw->rw_pid == 0);
-
-	/*
-	 * Allocate and assign the Backend element.  Note we must do this before
-	 * forking, so that we can handle out of memory properly.
-	 *
-	 * Treat failure as though the worker had crashed.  That way, the
-	 * postmaster will wait a bit before attempting to start it again; if it
-	 * tried again right away, most likely it'd find itself repeating the
-	 * out-of-memory or fork failure condition.
-	 */
-	if (!assign_backendlist_entry(rw))
-	{
-		rw->rw_crashed_at = GetCurrentTimestamp();
-		return false;
-	}
-
-	ereport(DEBUG1,
-			(errmsg("starting background worker process \"%s\"",
-					rw->rw_worker.bgw_name)));
+	MyCancelKey = rw->rw_backend->cancel_key;
+	MyPMChildSlot = rw->rw_backend->child_slot;
 
 #ifdef EXEC_BACKEND
 	switch ((worker_pid = bgworker_forkexec(rw->rw_shmem_slot)))
@@ -5665,13 +5787,6 @@ do_start_bgworker(RegisteredBgWorker *rw)
 			/* in postmaster, fork failed ... */
 			ereport(LOG,
 					(errmsg("could not fork worker process: %m")));
-			/* undo what assign_backendlist_entry did */
-			ReleasePostmasterChildSlot(rw->rw_child_slot);
-			rw->rw_child_slot = 0;
-			free(rw->rw_backend);
-			rw->rw_backend = NULL;
-			/* mark entry as crashed, so we'll try again later */
-			rw->rw_crashed_at = GetCurrentTimestamp();
 			break;
 
 #ifndef EXEC_BACKEND
@@ -5702,15 +5817,73 @@ do_start_bgworker(RegisteredBgWorker *rw)
 #endif
 		default:
 			/* in postmaster, fork successful ... */
-			rw->rw_pid = worker_pid;
+			rw->rw_pid = worker_pid; /* FIXME move later */
 			rw->rw_backend->pid = rw->rw_pid;
-			ReportBackgroundWorkerPID(rw);
-			/* add new worker to lists of backends */
-			dlist_push_head(&BackendList, &rw->rw_backend->elem);
+			ReportBackgroundWorkerPID(rw); /* FIXME move later */
+
+			ereport(DEBUG2,
+					(errmsg_internal("FIXME forked new bgworker, pid=%d",
+									 (int) worker_pid)));
+	}
+
+	return worker_pid;
+}
+
+/*
+ * Start a new bgworker.
+ * Starting time conditions must have been checked already.
+ *
+ * Returns true on success, false on failure.
+ * In either case, update the RegisteredBgWorker's state appropriately.
+ * FIXME responsible for BackendList lifecycle
+ *
+ * This code is heavily based on autovacuum.c, q.v.
+ */
+static bool
+do_start_bgworker(RegisteredBgWorker *rw)
+{
+	pid_t		worker_pid;
+
+	Assert(rw->rw_pid == 0);
+
+	/*
+	 * Allocate and assign the Backend element.  Note we must do this before
+	 * forking, so that we can handle out of memory properly.
+	 *
+	 * Treat failure as though the worker had crashed.  That way, the
+	 * postmaster will wait a bit before attempting to start it again; if it
+	 * tried again right away, most likely it'd find itself repeating the
+	 * out-of-memory or fork failure condition.
+	 */
+	if (!assign_backendlist_entry(rw))
+	{
+		rw->rw_crashed_at = GetCurrentTimestamp();
+		return false;
+	}
+
+	ereport(DEBUG1,
+			(errmsg("starting background worker process \"%s\"",
+					rw->rw_worker.bgw_name)));
+
+	worker_pid = do_fork_bgworker(rw);
+	if (worker_pid == -1)
+	{
+		/* undo what assign_backendlist_entry did */
+		ReleasePostmasterChildSlot(rw->rw_child_slot);
+		rw->rw_child_slot = 0;
+		free(rw->rw_backend);
+		rw->rw_backend = NULL;
+		/* mark entry as crashed, so we'll try again later */
+		rw->rw_crashed_at = GetCurrentTimestamp();
+	}
+	else
+	{
+		/* add new worker to lists of backends */
+		dlist_push_head(&BackendList, &rw->rw_backend->elem);
 #ifdef EXEC_BACKEND
-			ShmemBackendArrayAdd(rw->rw_backend);
+		ShmemBackendArrayAdd(rw->rw_backend);
 #endif
-			return true;
+		return true;
 	}
 
 	return false;
@@ -5797,6 +5970,10 @@ assign_backendlist_entry(RegisteredBgWorker *rw)
 	bn->bkend_type = BACKEND_TYPE_BGWORKER;
 	bn->dead_end = false;
 	bn->bgworker_notify = false;
+#ifdef RETRYABLE_FORK
+	bn->port = NULL;
+	bn->retry_count = 0;
+#endif
 
 	rw->rw_backend = bn;
 	rw->rw_child_slot = bn->child_slot;
@@ -6306,6 +6483,15 @@ ShmemBackendArrayAdd(Backend *bn)
 }
 
 static void
+ShmemBackendArrayUpdate(Backend *bn, pid_t oldpid)
+{
+	int			i = bn->child_slot - 1;
+
+	Assert(ShmemBackendArray[i].pid == oldpid);
+	ShmemBackendArray[i] = *bn;
+}
+
+static void
 ShmemBackendArrayRemove(Backend *bn)
 {
 	int			i = bn->child_slot - 1;
diff --git a/src/include/storage/pmsignal.h b/src/include/storage/pmsignal.h
index 0747341..1a6a46c 100644
--- a/src/include/storage/pmsignal.h
+++ b/src/include/storage/pmsignal.h
@@ -35,6 +35,7 @@ typedef enum
 	PMSIGNAL_RECOVERY_STARTED,	/* recovery has started */
 	PMSIGNAL_BEGIN_HOT_STANDBY, /* begin Hot Standby */
 	PMSIGNAL_WAKEN_ARCHIVER,	/* send a NOTIFY signal to xlog archiver */
+	PMSIGNAL_BACKEND_SHMAT,		/* newest backend no longer seeks shmem attachment */
 	PMSIGNAL_ROTATE_LOGFILE,	/* send SIGUSR1 to syslogger to rotate logfile */
 	PMSIGNAL_START_AUTOVAC_LAUNCHER,	/* start an autovacuum launcher */
 	PMSIGNAL_START_AUTOVAC_WORKER,	/* start an autovacuum worker */
#23Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#22)
Re: "could not reattach to shared memory" on buildfarm member dory

Noah Misch <noah@leadboat.com> writes:

On Tue, May 01, 2018 at 11:31:50AM -0400, Tom Lane wrote:

Well, at this point the only thing that's entirely clear is that none
of the ideas I had work. I think we are going to be forced to pursue
Noah's idea of doing an end-to-end retry. Somebody else will need to
take point on that; I lack a Windows environment and have already done
a lot more blind patch-pushing than I like in this effort.

Having tried this, I find a choice between performance and complexity. Both
of my designs use proc_exit(4) to indicate failure to reattach. The simpler,
slower design has WIN32 internal_forkexec() block until the child reports (via
SetEvent()) that it reattached to shared memory. This caused a fivefold
reduction in process creation performance[1].

Ouch.

The less-simple, faster design
stashes the Port structure and retry count in the BackendList entry, which
reaper() uses to retry the fork upon seeing status 4. Notably, this requires
new code for regular backends, for bgworkers, and for others.

Messy as that is, I think actually the worse problem with it is:

In this proof of concept, the
postmaster does not close its copy of a backend socket until the backend
exits.

That seems unworkable because it would interfere with detection of client
connection drops. But since you say this is just a POC, maybe you
intended to fix that? It'd probably be all right for the postmaster to
hold onto the socket until the new backend reports successful attach,
using the same signaling mechanism you had in mind for the other way.

Overall, I agree that neither of these approaches are exactly attractive.
We're paying a heck of a lot of performance or complexity to solve a
problem that shouldn't even be there, and that we don't understand well.
In particular, the theory that some privileged code is injecting a thread
into every new process doesn't square with my results at
/messages/by-id/15345.1525145612@sss.pgh.pa.us

I think our best course of action at this point is to do nothing until
we have a clearer understanding of what's actually happening on dory.
Perhaps such understanding will yield an idea for a less painful fix.

regards, tom lane

#24Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#23)
Re: "could not reattach to shared memory" on buildfarm member dory

On Mon, Sep 24, 2018 at 01:53:05PM -0400, Tom Lane wrote:

Noah Misch <noah@leadboat.com> writes:

In this proof of concept, the
postmaster does not close its copy of a backend socket until the backend
exits.

That seems unworkable because it would interfere with detection of client
connection drops. But since you say this is just a POC, maybe you
intended to fix that? It'd probably be all right for the postmaster to
hold onto the socket until the new backend reports successful attach,
using the same signaling mechanism you had in mind for the other way.

It wasn't relevant to the concept being proven, so I suspended decisions in that
area. Arranging for socket closure is a simple matter of programming.

Overall, I agree that neither of these approaches are exactly attractive.
We're paying a heck of a lot of performance or complexity to solve a
problem that shouldn't even be there, and that we don't understand well.
In particular, the theory that some privileged code is injecting a thread
into every new process doesn't square with my results at
/messages/by-id/15345.1525145612@sss.pgh.pa.us

I think our best course of action at this point is to do nothing until
we have a clearer understanding of what's actually happening on dory.
Perhaps such understanding will yield an idea for a less painful fix.

I see.

#25Noah Misch
noah@leadboat.com
In reply to: Noah Misch (#24)
2 attachment(s)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, Sep 25, 2018 at 08:05:12AM -0700, Noah Misch wrote:

On Mon, Sep 24, 2018 at 01:53:05PM -0400, Tom Lane wrote:

Overall, I agree that neither of these approaches are exactly attractive.
We're paying a heck of a lot of performance or complexity to solve a
problem that shouldn't even be there, and that we don't understand well.
In particular, the theory that some privileged code is injecting a thread
into every new process doesn't square with my results at
/messages/by-id/15345.1525145612@sss.pgh.pa.us

I think our best course of action at this point is to do nothing until
we have a clearer understanding of what's actually happening on dory.
Perhaps such understanding will yield an idea for a less painful fix.

I see.

Could one of you having a dory login use
https://live.sysinternals.com/Procmon.exe to capture process events during
backend startup? The ideal would be one capture where startup failed reattach
and another where it succeeded, but having the successful run alone would be a
good start. The procedure is roughly this:

- Install PostgreSQL w/ debug symbols.
- Start a postmaster.
- procmon /nomonitor
- procmon "Filter" menu -> Enable Advanced Output
- Ctrl-l, add filter for "Process Name" is "postgres.exe"
- Ctrl-e (starts collecting data)
- psql (leave it running)
- After ~60s, Ctrl-e again in procmon (stops collecting data)
- File -> Save -> PML
- File -> Save -> XML, include stack traces, resolve stack symbols
- Compress the PML and XML files, and mail them here

I'm attaching the data from a system not having the problem. On this system,
backend startup sees six thread creations:

1. main thread
2. thread created before postgres.exe has control
3. thread created before postgres.exe has control
4. thread created before postgres.exe has control
5. in pgwin32_signal_initialize()
6. in src\backend\port\win32\timer.c:setitimer()

Threads 2-4 exit exactly 30s after creation. If we fail to reattach to shared
memory, we'll exit before reaching code to start 5 or 6. It would be quite
interesting if dory makes a different number of threads or if threads 2-4 live
some duration other than 30s. It would also be interesting if dory has "Load
Image" events after postgres.exe code has started running. This unaffected
system loads mswsock.dll during read_inheritable_socket().

Thanks,
nm

Attachments:

unaffected-gustnado.XML.xzapplication/octet-streamDownload
�7zXZ���F!�X���w�$]w��������3�a`����f���'D�$��"8�S.��5��Xn����X�����@��5���\�X��!��y�yRU�U������'��w�6=�l�E��6���m��-Y�!fg7s��7�e����j ��)��1Yi|��g/�,�?���a	5"d����D�{c�I$f�E

 X�6Pu�
7n�rmp��[b��v�`�j���V��w*�xR�L��';9������[�8��&�^s�����l}���� ��d�M����,K����%�U�UpQ�v
=��lP�C���%�����4S���.��>�Y�z���
)}��]�\TlQq@��P���&R����6��(M0�V��������w�F}�<��)�((���3])<�?��}:����M�"�J3fud�c_����,svL���[1���h���n�Huht�
'fjFh"�u�K�Y�����y���;�h�������C��l&F��v��)��~U(HSLwj�X#jvDz����L��.��V/[��Lm�H�L�G��� _ �1=�����8t���8����</?�Cx��������}U�����a����t[�`}�sF�%���EDh+�<��Doa��?r0�^j�����(���4��4n��q�;`�_����z8#�4�RQ�><�J����>�:�1����R��$�����2�K�t�Q�V�e�� 9
$��_~��F���-�f'��q4��J�i�r6�m�4+YW��g*J�68�	�=P��s��D#a������������P�>)���Tl������j[���Gv�aW�X���-g`e}n����8�L
?��$���c��\{�PFm�~C��*�?�V��G��oc����8����g5w"����I
�q�QL���^T�w�paE�o+�/��W[��\fC6��]������$-������u/�%�'T��^,�9[7�"%���<��O���Y!B�T������h7CUR�������?+���u������a��3p�BV�K�=b��\8��Y$c��`�h�K�*��mj?J�;QY��s��I�
e�M��jY�;,((����a(N8�`��������N�bg������d)���E������r�;�Yg8F���~�C^�����a5����s����R�Ti�;�Tx�,3�X�=2Tk�c�V�,l$&����+�w7;��P�|5�`��z����i�����;�e�V�93��H��TSJ���ss�,�03��f?pY0���3������'�<�>����Q��x�^��9�<R�����RGs)�In��V��5](�
1��G�a������;lE$��F�f�M�T��~]�5v�[��y(�v{y����j)�����nM5ny��?�{��G''���0p�|�IQ����������,��
#RO1P�����MQ5����b����g�[!YiV/:�xf1N�B�@���%�M�6���~D$���dTs��/<�~;�U����z�s6H����Ty���{���f��g_}������K�v��4�#�!�gMo*�����Z��;��k���`�����C�?bvz?�i+��*2������
T�/��y�5Q�z��tk��E���8&yM+5M={X%�h�����+2��AV��,]�~��,�v����9�<W�[QC����I����s	B^���P��^���i�`C�SZA�'���>w�
%p�n�9��� r��\������0��d{��n�b>�I�E�H�r�n����S���+�/w�,��F�S9I�uf��p���o3*�V����%<��{<}jMo�oc����������RR�oM}�o�������I`@��W��p��V�l���DQ�!t��@�c��Bd��Fr���f2m�����x�x��7�oOk�p�A:���a�V�ap������`{6V�rV��!��k��h��������*5>}r�����KF����g��o�F^��#�BABI���M����[@}{�-��F���'!����T(�6��d�H��k��J��k���k��&c��6Q)J�g���9�����������H�-���,���� t�h[�O��!S]���yI��v�	�a��b7YA�
>O�@1%�7H�����$@�����1�)�'���}8��$RCK��TI�v������LF����R���fw��J�.�PZs�h<���W�����p�O[v=��������@&����{j�j]�2������rDk��UID�
�r�6����Y6]v�f�b��X~�b����|���Q5K����o;|��*V��I���VO��]�����1��v������Z@�-�O^8��)�����6����BU�������s���a��]Pq:PSl; d�	�8�>�2���L�l<D�P 6�w@D��������:�e�t7S:�����`US�W������2��)XK���@[YU* ��c�X�E��s�<Be������g,"�+��Yd���2`���t���s����T7"K�z���A���^�,������cV����>H��	}���w����V{l���*8X��6��m���Yz��;���)�T���&����8~���T���^���t
-���3�����b�l����)��j.����T�f;4}�L��6�V�`���l��1Q������B����?Zt����:k���[e�Z\RpSv9��B�}s�E�O��P�o~�cn�B�7NE]2WS%dF��U�)jy��\7�j�w:0)��KZ6g����53�x��g����o��y�]�14��.�'���6��
U���CJ�%��
~��������=]B�bh'�d^Y�~�:��%�������,!MK�tC�j�K�������[@��y�8F��$���{o����G!@�Q��]l4�(n�k6����Y������������\5�L'�;�<�0�b0�V,�[�~mi Z�Y����v[��QiH�'S��x�?[� Op�����U8x�*
b=�i8:�z-l�C"'g��a�@t��Q�f���-vt��Q	����\��������I"���:����h	P���^bv�7k,��{����8?e�P[�Y[h��X��e{q�f����1�Hw_�����5ll�87�e*T`0�}�
��'d-q������S���?����s�<P�.����_.��
�;�[��=�9a�II8���/S+������]f^6�(QY���i���I��O�������F%�c�m4�a�l�� zy���K�/����%�ty6!�	R��+X%��W�������l1�N[A�����Hj�{/a;�v��]�-���M���dF�>�@kI�$ �o���O"%c��+���5-�(�3�5��"�~���,���|�,G��������,w��%X�9��~�\����8	n/Wp��=|���������a���$b���asv)
S���)��O2��L��b�(�n%���oae������Y���Y��*2\EVo�4��
vxc!{�%V�]���F��������_������W���4�HV�>W}�J'�v�\1�g��>���q2�c������������uK3i���N��-�KS��������]Wj.�����XqH�!�g�����3"y�����3�7p�K��w^M��]/���:����c��|�����9�s�4�$��U��,��k��������M�S�:4H��jd��:��W����tpF1O��'�>���F>���N-���������N�
��#(1�3��@,:��S����C�r0��`sRqp8b&E&�[a�	�YO���N���6���0��x+�Z@��w���c�*�V�N�f��a��>�Pv�P(~)�n��T���N������<���Z��d�e��!%�Xs��1��#t]0�v��p��O}����Y��^�_C��Sv�f\ y�<Em���-(uF)l���3��	�\�'�Uw#\.�h�=6x��D5��~3+�G��XG�q�eWO*�TM����@��`|1��[������D���"&�X2�_��l1&�|^~|������U���	(8�v��&��}�����A{r��j��d�+�\���~�8�f������A������8��(�}�AA���|�.A�Z�SW���i�+��ru1�����?a3�C����kx�v�)���d�HXn:�fY?��%a��������V0�z�g�4N?J��wE(�p�����~�2a�\��	�-��lP2"X�o��f�Y�*c?f��6��Q�C]�g���o�F{����S�2��|�"�1_�#�0�s��Xg��%6	�j��M0�3$�_K��/*�����\�$�#�Q�������"H�2|c�t�E���,d�����[�����se�A��j�!L
nHW���g<�\������
tp�
KI���y�L`���g<��z�I+)>����-���rxW����?���L�Er=����;W�X������#�w���D1=y��������������{'?2�."d��JZ�To��[����"8����M&���ut���!?�d�����X���y����6_���T_�c��_@�V����o�L9P��lt�x��KFiH�V,���tm�3�3�`<���nk�4E�Y�U� a����]�.:�) ��s�������� {Ig���%�^n^%1��X�\�S|�mBQ?��N��6�'��n���`��HU�7�����n�k�@5�"0>���D!��+��f�/&��J���_#
8_���|�3}��C�_�S�0���z����+�uG�H��M�d�_���W6��g���~;*4h�F�>t��}DX�^%*����b�����P��T�U������jhB�/�����O��������'l[m�v^1�U���g{5,�.����3P�wd���f�����x���1j�H�k�6���������R��Fi�?�����rB����$����N����-����5�N���6�B������#�2"4�
�A�����������Fv�-��v�������4�|d�P}+$\�5���������B��W��WQ����&���W����
�(���5r��Z�Nh��)*�w3n$�>�a�,��(����
�5��������0I"�I���@N����	4'��
X������|��y��D]�_�;�M���x��g��RC�H-��>+
��(��.����
�����~^7{7C�0��>��loQ�K��u�|��+�����TN�WY]���c���}`C���������P�������`���![]������4t��)54��`8^��5^}���DWh��� +����2}��M����K���1P+���t���qqR�VB �4�'N���Z�����b��@J6W��i�Jgl�NWB>!O��X
Il��3�j�1��w��C�B����F�V�^�����u�L���B���n�nv�F���P�Q�]l�u��AM�����=�v@R����M�Vf';��G�j�fY�r5o.�3G#�����e��B�Ox�US�^����V���
�z��r�8��G�]��@���Ok�/���������y',\��3V�!?�P��?�3
1����v ��8^9�vm����v���L�n&v������K������u���o�~��F���n�Z�KN|K����
����DJy�5���-n ��]�J��)�\`������#9��m���Y�������Iv����f������������{�y�G1�t��)���x�������7k��������_�2�W���Uug�gV����M��?H38q'H��z��g����76��}r09�
�$�AS��gL��|����2��d�����[��v�x�7�hK������]��K)�@~}�N����@�^��Z��?����lWi3���%tFO*-�k��������	���OK�Ud?1�M��f8��ka~>y�q$O5n1G'�:@pSM]]	���?��=DL����5���a�>D�0�Q��-9���`��N��������J��n>
I4�v4(��-�!��Ex��\T\���F_�*\*�Jv�w>�LP�5�����3�I+��)O!�ud;zHD�Q�������\	��<���d#���g����8?� H���|l��P1"c�<r�\��V@�~���Z���~�F�.�d��@����u�
�K��i�o��������6�bq�_[��Hb�A;�%���k|�����v��@���;�L7���TB��x%6�S�E��#]qP�D���5��'�������L��B��N99��2��-���FY�X��	���9�;�H��pUiD�]���q+_��<N�76���:E2����iZM(b>�d4s���<����M����CtM(
���_.J ���W���3Qs\� J��y�V��\��s�xe��
<Jdq!�@6���j2u�"^]������OlV]o�#:N��M����@5��dU�u��1�C����gj��L��-��"��B"��u\0=�"��-��1�&t�P&�4&@��T��S��<,ZfPdvx�<k����rrh��NC�J ���=�eJ`>y�kqY-+�������63�gSdn�Vh�0�A?#y��o�Z������J
9��\f`)��^B�%l���u+Z�b�������5���yI��G��:n��f]�b����/����K��4�tW��8���$��<�!��������6������� 6�O�xU�U���;!	R������`p���j�����{rH���;NQ4��R����Y-�W�m�!�r4�;������5�q��z������?Z���w�(�7���Y��DJ�w�8�
������%���ME�������#�kD�2���:�x�F����%��	Kw��HC��w���nc��Ki��}w��������{�i
p�{_��V�����^�"����
 �Pi�Jz����S:2F�H���Wy5����=/�wE�O�&�X�Q�0��<]
@�V�P�0��i��_�<����
���[K!H:L��i��/���mf]s
%L�o�4;LW�������\y�n���'Y8��0K�F�z��
���W	o	?g�b���f�J�o�A������f����P���/�4��j������������q�^$�8*�t����]S�����^j��(��UG{�p��[fUX��I���F���[�����������[���m�>�
�Z+�J��p�����%>��T��rk z�����*rE+�S�JN�HGg����/R�=5��������N��L�����a�o�����������Pu�
��uN������������"��_�����J��8�<C`s���]��!<m?����\����$�D�9��m�1�(K�!�A5���m�{l�w��a$	4�#R.D�9����l�^
�|����`i.��{��������� �{9pl��B�v3���������������	����!�����+e�U=D�M]�@��SC�������������Tg�Y�o��?r����|��!������H���s�GQ�j_,kHP�8��O��T��%����_�
*J�������� �<g�����hk�jp4�������F-�^4��S&3��pQu��O��-���E����x	�zAx�!���J�<}qd�Vu^��"n�`����"'-�o*�l��y�����(��gL��/������V����IKh<��J��P�,�O�v�
A���q��8�uP&����B��.*%����civ��w��Ll��@C����/��u�H�k�����;�#�]��_>�ATr�)�R�����c�N��\�Q�O��.��m�#��(����i��s���J8���Y]��P_�9�������~f/��%�Gj�
��1��
�!�Y���<~n�s�s�~�:R��BO�t��D��y��6l��@ ���4�I#�b8"�@(
Yp�q���A�)Z?���Lq��H4�BL~}����a�)iUkaE�7���	j%�x,�l�P���^v��?�s3[��,pr�Y^�|�/�c����X\�Z��S�64��|/�jvP_l�{S�6�Q����*�u�`��x�!��H�T��(�(��V�K���FC��^��+�0Ox8zA�y"����+��_���S��,�9p�^�qJ�C��b��d�k&�E}^�iW�F+8�
������/�/�:���(��f�����W=l�{�#
�8Ze�
d�k
C��2>���a	�J0=y5�n���m����s=Y_[J/���h}���8��R0���T��l����]��g�:������k"W4��O�)��R��'�n�h����6���B���M��3�1/��c��v�F���A������}��ne�������_�j{9��=g�>b�(�u����@�;��q�Sk�;��jW�9&�"����5����w'hA���V�"����7�*A��m���6�������� fA�b�v��p��I��M)s�"�.���.G�|�C�����UO�%���E����������g7/����=�����'�u�?�"��.�$�;�65cg=����84HJx�
��(M������ �E�"*h5�r�Q�	�[f�
���p�����7�;�5��/�[#�}r���Y����T3���#�,>_�������uPavV���P3����m�O!7@�$i�m�t���I�u����)��D���)�{#�d�$��\���4�*�f<�54�����D\�3�g���n�4Vv{���dmgIo�]�j���<e����f�>�$��1�7#Q���y�V��!b���{d��x�;��1�_�@�%}���<�_���Nb&�k7�{��H�%Nh�v�r�p=U�Zs����P�`�n��`����s�&�=[��N��f���9+O
S���eG��/)y������1��Bz��ZU�>Dq�����D����D?
$~+�z-����G+�5V�VXo�#�g��M:�k��94�.��:�"�1���*��\�4��Q����;�5�������nT���,���]uFS(L��2�:�M��%P$Y��`��
�YFs����^~i��0`����+Cm��{j���|tA��
�C��������0O����QO�5lr��:WK�J�����nvzJ�H�X���N%�f���kw/?��o��R>�������C��������
��FT�����i,=����6|g�ux|Of�F�<S�}�G
�t�+	�}��7��X�h�(��iuT�U	�����@�B���G_���q�w��v!���Y��r�01��t���Be�����!���G��GX���.��h��w���si�����	����=����r W�5�
��DR��|I�E��J��%�m�@W�kaXXD=B�+�����&��	������Z#,�%[��WG�����g��r%�n}�<�<��\����3;���P+����c�X�H�����+N
�D}�LJ�1��6�g����>��>����$w1������'+2Go��z]�i����I����o� M6(�b�M�v�z���A���>�~�$�2JX�k@������v�ub��k�x�����7�v�*���nB�Bd
��"q.*h�b��*-<�5�Z�P�������Z���l�������@�ZD��m�mI���5��WB
�}��B���)�v��JXY��"��t4�c�����2�	Kn�42<tEoB��mb8
������t?2t�c�� h����%������TK�!JJ�l����f`F�X�6��v����=�t���\��	����s��.=>c>�[R���A���_iy�~W�g�d]���(��<��<G�f_K�cOpqx�����{n��k�E�1�u�����a�*QoJM��t�?/}Y���v��g}���au-��$���D�P����{����xl�=B�>���h��MF�S������|t�� ����
������R�l9���yN>����!ts�9�z�^F��D�<?�����p�3PYUd����������1r�m�u�L5�y!TSPU.d�)��9������F��~��}@�j��s���j�-n��1n�R�*��c)��i�{�$�k/j���m�s;���{A"�s���xr�����������1��� ���p���	����>_��0E�B�� T�������2���n�?D� [<1�0e�|��7��MV�����Q�'dj�`�~:#Y_M���ia��i�:�4��>������HaV����y��T)��3[��+
�ou�#11a��
��/��ekz��h��d&�:��}=��XTH��0A���CY^<��mXJp����������Wb�����]{�C��c����
��-E%�3���f�g>��<������b�������dU�[�]2Y�k�g@����� X�'���!-t�u+�������L�����ub��w�cDR��$o���L��,��u��g�c?��F��]T(1<(\��udc��g8c����-hh?IgD4J.��@���C�1:��Ic7^���4�	��H�K��R �~��x��]�lz���yMt����[9����X(��O.����@��C�����V��=���HBn��N��,`E��,�GD����������O�?���yeEN2���3��?(�o��P���H��kwN�9����~0�����b����1P`�T���9QKw<kP���x[L�����j���~
�
vJ�[�RbI7S8�����t�^]���i,�m��6 ������n���V[*e�g���.���b�%>�ba����.�W)P�w!y��yS.����"�.����W���?Q{
-A�:7�{�3#��%�9�(z����{���{��4p�}=}~�CN�LN��NX��5���o�����
������g�rZ�V���G�)c5�g��
:[�R���x�gn1x]a;�B:���Z������������F��Y�����a���Z��[�`� ������Mh���lI����]������wi�:rN�bp��0��Qq�s(C�~�v+��`5����o(��}����9
�( ��V��`g<:��u�`��4�>����F8�-�4���z��H����&�����3�s�Y�N!�g2�����u�YM4Q���uj�Z{hal>i�E���p�K�!��!:�&���������^�����|g����{	�J2
��<�"�S��K���6���������P9���UL������Ro�N�����z�����UM$[�KFi}���;��T�5(~��n'��*����f��0���'�?��Dr�\ ���`:G0����]���"�#M]��q{�.��0�D�$����Z3Q����F����g�kz�����1�;1a[������@�J��@���Bxw�,a����� 
~�<�H��1)F���Sk��G������3�>�.MT���{�F���o'[�h;�R�S����^s|�2�5hy��;_���h/�����a[^�j�j�|/�p����yj��!9��jF*];�{��<���S�z����p��AO�*�]h����V��j~>�QWv���5'�Z�`D�K3��va��b���*��>�����-�xZ��k���R��>�c/�d�[���)
x�&I#@/��%T�������78�G��#]��.�FY����7�0r_�F�T;�\��������g��}������[b;.T���������mS40����Ys�3:��gP��iG��Yy������"�=a����[H��Gp�l�o���.u����!lbm����v�����[� #w,�5
�kg���_�����#R�tf�y(uY����A���0�6"�\���A�B��I`s!�{%����Y)8���~deT��	K�O@�
���W��G*"��@{�H�*q��y!���\���g�qQ.�)����N��y�
F���2�%M�'2�WYT���F�vY�F���*���9�,��_�<���P^/"���x�:X������������^~\�HQ�[3��vw���E�W��6�#����X
a��C^`I���j/@�����<�]�u���Nc1�q���$'�����K����s���l)�m��Ds%��9�Ez�Ds��8����a-��`_�e;+����A�y������0=�}a,H�����I��]?�S�������i+��sC`F�#��v�����wc�$/h/)��t�*9 ��t�0�S�ER���[�������`������f�}/ ���7tY}�rz�G�����������-M��D���(2��I�����Zs��^�� 5����F����m+��������A�&doN"��U�������a=N�VN��i���7ZDtP�L�Y�)�[�x�%HrH��1tY_�w��������?��<���}{1~���y�u���]K��=��l7��nD�o<2�)B"2;���g(X�M_]�x���%�
�4�u��Y��r��
�v�����}���X�*����D�,��1�@���'�C�L�J����&�g�����^������7�8�_���$A����r4���3�!���7��;&':��b#��#�e�GRM�ZVC��%�d����g��2D,��_�,������?����k���:�U�N��jF�`�0���Q�}#T�m�����>��U�v�lh9���&�9�izqJ���)����6����rp���!��=B��������rd�h��/\G��$t��8$��U���i������|$S-G(�u8��g���P�RE��:���,�5��`������d�y��\���	��(S��f��t��	��T2e ���M"���^��i�e�_�i�h�c�r���A��~��6�����|�����[�F����\����~��R�o�a,�4�m�Q�z;���bg	�=��,����n_TU4�w�0���?	5��;Q�'�	�N�����r���������l�����X��������D��z�������p�;���i�g�#VBO&[i�Lg�U�_2�$D�!<���_&{�>X6�j8�W���,K���g�Q��~�S�����]~�7C�Gj�b�"���5�W�
A7�����	a����VF����N��n�����N5����;Q���N ZV7D��5���������&`P�p�l��v�:���;��$��dt�"�����#�M�"���t&�H�X-�	�a$�[��N������]UHY�8=h_��V�}��> 
�b�4��i<}�J�Y��Rby~A��p�
��J�K[����3�E��B���������6��u��P�����^$���v�U6��
0��F�=FY�^�J�� �j\�b��i}4R%M������u��t���-~����U
 b�Y��OP����dW������'�
����o*��{G;���=��Z���0!e,���d4����6F�����}�O����^��[�#H�����Y�*�O~���9�bx�4������'���}�������wM��,��F���$�+��}�"�xWe�D���B.� �
�D���sr��w;5�t���{'XJ2|giw_�"9��^���Z��U��+D���Hh��oE��1���	�~)Y$1��|�m�U����o`0��apM1�!�����Gj�1�?�{����������PY]�kW����o��"��j����'{���-� �
�~�x�	��z!��l����7%J
6��������BzP�p�$��O�v�QL���@�&��b���y��d�%J���<8�0��������XGT��)��k(rHHX��Wi���y��A�a��6�f��`�L�p���
W���}��	�1�^��o��j��^��?����nb�nzTA���t�Gx��k��f�@���T�eR��������&o3#>��W��H.zyg{Z��B;��j���;���P_/e��^��0�`��s�^\�
4����m�=���j����%�2�x�BD��Re��0X��d��d��2���nd��j+B�0��������4a�R���zf�����H������Dg�����1R�K�{��Q���9276��t�:�Wb�����i�K��?vc�O�es#\�%�0O�9��6���li!�wM&i�Z���������s1*I���S���uO5�fserd��\~
=,�G������j���f�_�'wd��8�pH��p@q�#��kn"��x�����YG�0)c�ERqM��=��#7����V�$���g�q/n�����+��3����Zj��V���	�����h+�6���F�~�������x�������O&������U���f.��x���x��
;%�+8�R��3�u��Vq���H"T�k�P�S��lf���Jc'A
_�"�&&8�hL�X�3GE�p"d��t���Q�g�5&H���q�.8f��
�����s�|]�=����(!�'���
��$����b��x������c5�=�}���!|J���n	���9f�C��Ie����0U�e�]Q�����(���iN�	����
�f=��������7��fT�C��_�<Ww��dI:�4:�8��dV���t�;���2x��9OtN;��&1�4���`*@�I5~����@��9/�Yj�E�
����XLQz��4�����_~�yf�,����X>���F_�9�<�I�{��]�AU��m�q������H
*��o�u���=p�<}5>1:���������6��D�`�L��
QU2B���Ei2�w|F���
�d���A
)���o������t�X�����k���-�����S�U��Pk��TY���R��)z�I���|�P���{���n
���o��#����phmx3�ONJ�����"#��@�J@
H���t9�R9pp�/��C����X�@���gx���o�3��>R�UB}�����dpP�z��`���[
����cx�i?e�sX{�z��z�h����dH�3�D�=)�J��0���m	J���f�y��0�eYl��e��{c��~���b!d��y>�g��v���]�������������
~(9dm-7Y�����H�x���]?�JF�=,����65��R)R�������Qk�h���+�+����V-g/�C.�c��������a?�f<8S��5���SdKsJ��k)�n�}4��?�(��bs-/5T��
���9�����K���P�"6�+�������fE���Y�� �K}t�_
�6�b�(����r/N��	=�o�U������'�O�uv�d���������%l��',����Q0��;��������/S��������8������I�,�VON����������
G�7�:r&�U��A:�7����/�e�2�s�
���h�q�e�7BK,1����j�u.x��Y@�����F�2L6:�`�����_x�ND��;ST������1r�Z@��{�������:��d�{?v�k9}�����b?�����/�m_����j�����p0�������q�j��� #-P����3]8�r��=�-y
���;vY�/�����������wC��>@�#���:m�:�J�qF9K�]�/#�1l�=b1/Y�����u��i���Ym��=��$��`�#���rR���mD�=<�z�x�m&Ag����DO�s��EaM�L�6�.�	����"&�{L�\�$RC'���8��P����%@5MWN#�L���h�D��}�Y�`��hv�Z��`�A���@��vY�Ly&�����aD{��������������n�z�S�gI�k��p���2����N�^����������\mb����$�@�b��������|�(I��#�()���K��n�$�n�n�hr{��1t$I�h*���Z�<R���CZ�V�x�"�z�Z�6(�<����'(���<8����S��'z��s�C�:JuJU����e�����
�[0{`�=�Y�����z�c���7�S�]����_D�7=�pw�]�����������u�������7�4��6�I5J��6�]�����S�>iP�c��tV�c����Z�`f2�[�A6�-���
v�t�.R�$sH�����5h���������d6��G�rW������lh�CE�s����3�V��7%{L
�okH��d4k�P��/y�����}�������>l����fq8�H&R2��/��co���;�jWtQ��W�An����
�`�h�BG���]~?�Z�5,����T��;���!i4���������$1�e�1�.������{�����f%� �;���A��~<{v����4�Cp�O�����*�r�d����B�v�a��;+7��$�qo,������k�;���A�[X�����:�?|����Hk��f)��
�L~���`�������(�V�.�Y�w��TJ:��J(�^^�X
�`��P�����P�c����i�>����A��I����m'�S&G*���:�[��@���|O��A���������~����1��Ea��W����}��v��aEs���s>�)j�HA#���� '\a�8$>��O�� ��?�������_�5�� F����^��=p&�`tH�����?-o��5�P)�p&�a�w��`�"}^3r�k@�wqbR�����~9�*�2R�7l�{R*�a�\E@���XK�Xc�����>��	[{oC=�Y�Lk�L�f�Q��fu�U���t�lL#�$\>����9�N�z4�}
@���sd|���n��x,a��A�G�%���
�y��aK|��i���Q��B)��zO��FG�^�7mh��@���C��Y��{�Y�J�bi���t >#�������&��� �L�)@�4�����o���GQ����M�lI1���}�p�$�Q��^��u\�=�q'|�V\1� �W_',%D����Hz�Q#CF��5fX�4���������AO@c���W!{T�V�n���8�Z3!�Sb���4c�
Q�6��=Yc��p��d,a�����E���3k�>���=ZI���,�2���^�f�Y����T����r����yE�;D�)��F��*/y�z>rU��D��v��rYt|V��FpZL�,N?�}�����6�D�5�1FqK�C����$c{c�T 
Xi.����,��v��u���0����Y 7���.��i�}�&N��<������-���d�_#�J�V~�}���%HeDzF�Yc#���d�V�Xj�����-�2�����|�IU�VQ/z�^�����m����X!�7�����xS�Q�M�c����|�x�%F,����F\�L|s����)���F
����)^�.��C����d��A���D�^���4������^�����I�f�K��v!�w.���Me>������hw��v��|�\��,`�>�� d
+�)�bwC�9��r��(�jF&SW�����+��n�w���g}b���b��KW�,#f8��D�3�����N���z����'���.T�m���f+�"2�~���R�Fj�f4����1	m��u]6�=����nG&-�wxsd�$��������oD58�;�Y�m&�D�����*�i����XD�<��6x�l1������fp�t�3e�a_W�n�[��Nj���5����"�#>|����{�Xv�O7�yBfXG����Py�'���EpQ�<�
�������q#j���&��gNy'}�(V�9P�{�(��VA�(��HQQ����x~M���;.�������@t��}Vn�n��<���hp��~r����w�9��(�:,��%/����Y���J�P;����l^����5�_��b��a�bH���qU�b���aG�?<q�!T�$�Kd�',��?R��Ed"9�_Kuph}]�ou�NWZrF���n��Z�7byL��%��q�WJX5U���3H���������O��V�pn�N�5�m�$������G���c��W�w�npL_?����s���cj��.�������o���3����/�v��Q�����P�	�D�:������]3��o�
��Y�t�~��L���������,�'�yd��Y������[��D�b��3�|d��d����������������!���(3a����������!u�����[�87��zV�!�/�%�f6GuK7�]'�`E�H	R��&^�>���Q���c7���z�����9l��jr�iQ-���La�~���J��qe�G��H�4�u����;^F��}��	�xo���8���������'��?�%��9?A��'Uc>2���.��X��?���Y�
�L�q�J���N�(���W���T���w������2p(�p��:[�E[;����B{.��N���uQ]F�<����	X^��	�[j;�)���HGp��{@��sq�O�|^E�������:���^`�#=�{87@l�S��h'+����wM)��a]�h37�_0,�3�7[��R�A���[(�yb�$����NCs�#�������bE��� �������2.HQ3x�������	�����\��R}�����N|.�F=�!c��Q�y��q�N7��C���:�Q~�F^q�C��d�m$��F�u�?�F������|�H���l�������=Gb�d��j*�����-ubt�#�A�Y��!6���lR��jS��Hc���J'2"\����1�
�7���Rf����"c�g�\��L��I�:�{L>iT����� P"�S~G���[qal�.��+��_��5�5q��'�Eiz��P�������HA5b:t����j�
��tY!-5��
B�"�c�3sv�U��y���nn�r����Pz�k��B��m����9?EyQKQAx�<��'�*�8RS/�!����I�:<*ebp��"(/&����j�c�'H��|���Q��Xa������N2��c@W��4���j������^p�J�B�px%g���k�0z���+��(o��^����F�k�r:����G�=NOP��Q	^��E�O��h����������fo����)����T��y�R�	�<d'��IgZV�C��.�g�[Yf�9��k�7�@�S����
����7���B�"��iB���z��I���=7:�e]U�]"�IN��������@?G�2�4:��=���xF��U��ih�Z::Bj�������M,�������:�������y�]r���S�0Cv��H�`�tX?�t������6���g�t���oX���?������#'*)4dv�&F�8���g6M
�1�������������u�<�qn�J����]�0�)PGn�y���)��IhHR6	4e�=MP�h���������2�y�a�Ebp�k�tb.E���������e�i�;��B��)I�=����iKo�IG5?a����D#u���pIb���	&�Oy���S4TW��^E_^�t��h��z�=��,f�YC���n���������-V�����=�<��b�2��w4��h���$�9+5�n��^(��;����T�	��t�2�[r(~�!�1�(�4�iL�����d>+x�k��*pJ*C��������<R��N��GP_� m�^(��F�l{)����������(��Y����~�ZQ���|�=h�������G��(�
B"4�?yAw|W�Y�*�9Fx��"�g6�zY:�6���>Nw�.v�dK����0<�q
�C�,����2 ,�6p����sUQ~t�M�V�����������n�S���#0!)��nz1�����w�,S������ET��UB��I��N`���t�Q�H�){��+p��n'��.u��&T�v�l��.#�e�4M�������hc�3O�j>"�'�]0y����A
$���m8�o!��y'!�]�d��X�%�.
���2���{����V��=������]!��1���=[���C&����D�9�+l��H�V[2��AD��k�0�(�+���${p�
0PL�\�x�)3���AR��p<�E]��}���`�
��S������s�
�h�^�� j&��i�p�7�-�R.�����*�3���������sQ,&(.�%,N
�+�2���`+$R�0h��w�;�o���t!E������)������v�&g;6���E�C�h�s���yFT����z��g[��-��	e���CTc*���Y�}�����,��<R�*Py�~U3/L��T����wmZ����{�s�G�U�L�)������I�����h��}p�$S�vr���w>�:�W���Zd���x�D im��(^����],��
�lS�M����mL�3Z����hP#k���ha�����0���Bl9�g�.<�S���P ���{���S~5����7�G�����4$���J��h!P}x��uO��f�}�fKto����n������d��@v��Z�[
���'��U�t$.k��;�5������rpEU�}���Be��?j~��|�gKa�'3�Z+2��R&�/ymoQe����A6�}�=+`����D#��h%����,���a%ql�����v�9
��8q��]�����4�:�V�|�P,�~����I���Z��M-��q�UG��O"}<om��-WN@E��Q���*`�eX}�l�&�N),�#�%������;C?2i��R�Vh�KU��U������ Aa��"|�����t�:P���p�f�8��O����=���_\@��7��x���U����@p���8�3f�';�Z����6�� �y��(.ng>��;� 3g{e�N��#v�[e��m���iJ�^n�m��<�����oLBur���i��|��B���;y|'�
-��+k/���5��v���Y��vNYM@��Rxi���O3ue�X>���`�:����~rLp?�Us�����U��`�3
s�F��%?�*�t�Z�g�B_Y���VH����U[��M�_��������m��`�t������
V5�i�0��v�
�e6
�9F2P'g�R�8ugX(�[���:n�Y�%�Oyc�xE����������?#�\E}������z��:���?I-��!-l4��������[�����F]��!�E4�oo��j��>�\���6;�H�`��m��{�q���k>�n�)�'	���+?x^]f��McaCm������Mn].�+N&~K�f���3����NL;O�	��}y��:Y��2S;�O���q���XO�����]�$�4s����D������A�N�@�$���8$m�w��
Q�h0J�5��0��Vc�D�
�p��j���{d&�[c���C��l�)�����q��6�D��Y�<.��y:��'^:�5�_��IW>��|`�F
b��
	������R6%����P�yR�K=���N��]7��.*B��y
���������m���9�&��������~�8k{�:�<0�T��0+1"�<(��8��c:yVQ��c�w5��tJ�:��D��d.�v�U��Y�C8b�4rf�Pr�>Sg���z��A����������CKax8q^;!'Z�sf!.F\6lM��C2SAFV<�w=1��k����7�@��A��������.g(�y��Yz�:G�i���%<r������8���w+�bY-$��8�/����Q�(zjC@\oH��)?p�F�%�]h$�/r{&�;�����uO���q��@)�Qs��ZM��������<���N^��J�����'��0���<��p���iGj�CHJs�;��W���m����������Ht��U��u6/h%<|���u�C������/2����g.��������i�b����s�uElN0y����I9WeM���H������R� ��S���=!Z��Yh��ny�T�cx��������M��f�	��^�P��?/j�����O�/Hn�����^�Z
�����M��ixr�i�B�]����&�N��#�8�BwV���XYh"�sB��o�gJ��:�m>]�<8��'�Md�B���w�e�[�4�������
5�I4���vG�����Q�'�3���8C����
g��h���
�FBYb��4�1v��3Iqne�B"lJ9=~X��AJ9���o�e5
�i^���9>�x��e�iV�Um�{������`#��p�f+�*�I,�����`�p�_��]T���x9��'�
���J��;l���)~�P~���8�j4�M�'&e5����o����Am����O|O��8l��<�v-���7��7;~�1w��6��AKj�Q7�pO��+�][Zq���j<���J���e����3G-[����p�����H��m�. J:��4��~�/�03L����[�6�������yh�N����O&,�����#��t�k��l�k�!�'��wU;��_Oxr2nM�YTg(.=��A�O��&����'����kb2}Sq�N/�S�g�������T^M8�2��G�W�,RK�0l7�������Y����������F����kQhGd�p�+��7H&�;B�zB�������8~��\O�Y`w��b��b}�$�g9�x�
�v�H
���'��S&�Ik��w��^��}�[�)g��$ze�������������K��U�q�kL^��Og5��N�E:����D��\1�h �������g�.����B��z.!�Z����������b��2�%����sEW��;C��$j�`����g���(�~������q���x�R*��-��ID���rH�h��k�6�m]B��O4������V�����4�E��m5���F�����/�c�g,�W���i��<��N!siz�3P���:{b~z
S�yi�$Y�
���L�T��B�b>��Rxr������v����z�p��'@	s^D�^�;���X���U����9&}�����	���d_]Rlj������;�Zja�rK��v�R��q���X1%���~�k�)���U��nOS4��IE�!T7�C<�]��(��;�����r�D�k��-Q���l�U�(��i:�����O�����+�];@�^�\���-RTsS#&
�����vV�=��+����^|�`����s)�WabLb~�������7g��l[;nF����
��f`�D��G�1��u	��s��[.w�C��O����ct5�x�Gl��O$��T����m�����M���Q�~��2�i:�����N��C�����a�X�Z�$�F���k�x��T����V6��a|	�������%�����l�����6fr� ���|'c
��=k�}�M�'����$��WC�o��i�/���dK�xBY���J�|��^Ml��?[R
�o��A�~�\��^���>2c�({X�����JA�d����zJ&;��E�M%/�%��..�/���jN��-�*��4��0Hw�Ef�
+�~�����j8`�<^�?���V��GporOp�����R�E�/O���=���t%[���Y���W6��n����`�sn;��(UH>(�`f�#n��p����G�����z��!}��*\K�D�\�����$'�)�x�W����r>����0�!������"��{+���).����F�K�3X�
�~����w`�rN6�6O�M�������?i~^������Z�b��h�o���sHt�D#���{��w=�)�D}$"xo������N�+��d���OCdGal6�\R����BUA��6�?RD�� &���2aL��h	�^k0�MU9
���1���EF�����������m�6��`%�s.��O;�S������96�?D�jc������J;�����w-�b��\�������Xj��	�|t�?�,�$?0�.7����y��'{YZ�����(^�>��|�
=m�B���`Z[�~�w�
Um-���R)�Z����/z.(���
�?�v�\��eU��'�fg���B�'�=��D�'Xhlu
��)�J�8N�������1���A��{����<;��h`����"��C�	
q����J�I�7�u�*�g���&
��[7_�@�%����O�s+��XC,<��pE�~��|
+2���G�����-��������t�S�.�g^���1��b������t�h�w�X�N�Wn�GQ�"h4����G�}�����������*�4����KBgWh2����
�gnL{�����wK'���R;U� ,kS9|�A�H�0@������,�q4A����'�_"
w��T0OqX�M��]���V!�RV�}f����	�����N�r^\|�-K6!�`d���s�+�%����/�������j����F�������d\gk��l�@�.��Z9��
���G�1G���5���n��miR;w�,����S,��7fR	30�1��e^�����<5�It\`:�G�����=�V��
����S���������Z^���|F
���� �k�*�������������_W����N����=��xC��S����O����i����!k���7"����M�p�^�Hg��<6�s���x0e�I>���{�F�T���,P��Y9�_tN|��v����k<oI���vz�h:�T���x�d5��b��Fd�0���+|R=�_���n)���\�mW�9�E(M45���F�b�t��������������	���Bw�H"mz�t}��q����~��^��*c��v��,�hY��aC��1�@}��42|�z��AZ9�D�u���*��qoh��m�=N����gr�#�~l���3L)�D��C��������s���:����?�w@b�U��H�{8d@S���:}�M,���'|��X��`��D�������((��.i��^%up��wv}�#`����3���w���N�6&~����S�D�)nc���&I��b$H��4�J�~�Wg"�U~���(�+�<-����.E~	�N�a8� ��v\�,�U>���'�����L��?�����!���g�**@^�]�yFqc�U���\�6���\�G�m��)],E�W����|W��C��X��N7�+<z51��Z� '��_$=�S���@	��
)����Ce�$O�$�Y����]�j=@oQ�X
2z\@]��x�e,O������`!��Yfc �M�E�R�R�����������V��:�2���wk�FH�4��j�	wd�D��}��<M<o��[�
2|�
Anz�N�������(-R�b���S���0�ykI�Z%C-7`}�������z����I�����
q�}�aD�w���v��[���3
�C/!�;�A�'�G}z�Z��vaqo�[�O*�1{�|,����/&�V�C�������z|�H���8<�xu@�y��C=�._������������;�����@�������c��d"[�b��Cs7����b�U+�%ZY�$T0�%
�l���@7LCo�(-H��u�����P����U�)5V�C��2j'FKf��[Zv|!g�|�pQ��B�C�� �L�!�@F���x3a��dZ��3|C�X�iYDi�6� �N��/�������L�D���<�;�[�^DMDYCc0��z<2����DLN�i�&�L����Fl��j����t��[��z�d�v���-����z�J���]����:f8��:�l���NoO�t*�J��*�9�X�����r�b��l.�����s��U�U��&���K���'��"N���������96c%�%���c	\W����TGe���-\�m�}Qo��["
����>G�c�Q>3�=t�����?]�u��k��H`>+���y;<+��T2#�v����PtV����F=4`jcd(�s'X�����R�?Rj1,���k*���(J���Q������g�w
\(.JR�2G������G�\{��3�Pr��M�����s���0�.OT�������
!�����5"�j,hq@U�I�]f�y}����E�[WM���r}�F�@3��hr��2��I5�>ei��hOao.j�I�S+�'�����Q�
�y��^���Y�~\�n3�K�I���
�����[>�H0�a.������>S^����%���h`��F�,~�P���J���CQ��7���	�]��[�	�X��mon����2OO�������H/c��+��%�#�����l�
�_��3�����;�?K����lF�D~��=�Da��,���<���$X�l>=c����-�'�����A�M�KJ�L���m�f��������)��a�h���`�)���; !�7@P��o�
F�}8)]�O�Q3�B����Sa���oY��^��q�S����G�����7�R�4�p�E%��)�7�T��8�NqK�I�@k�^48��
�/?
/�?HoCn����~��f$
�#�D/!���|���=���?e�����������[�o�<����2����#XHz,p�Va������L���`�b�����[+�u��)����mI=3�F�8��������>�����g����z?P��Y�z�v��PHB`�����:�$z����������2��mH�LB���I
�+���S<^�GUCm���z��#���2���D�F��E*C�|ZagG��Yd���h�HM
q`�Z�'7���aI��.��Fh)�+&�\����p�]1��*����GM��|M��b��|R�4���
��
i�z�:�J�F��i<�h{ah����w��J�(��T�����*��1���B�C�;���|?�n�p(������(��������������T�	V�y�	K��R�W����p��a!�t�:*�.+���	R`��������*1��k�B�n�������%3�Hj�o��yU��q�b����\�s'{�T��E�x��A|��9$�a+���p������5A'ED0�a��+�J���9C�%7��6<�p;�h�'g<�5(5vke[5lE�y��E-	��R�~�S����NDp0��Z������n�3�p�]s����1H��-����(���}ePF6�L� ��U���w��n?��^$r�=���<�~q��n+�s�o���)C%w.V�-KU�@�Z��x��,0��:��na��2�
Q�����,�+���W������+�����h,'�M���[�jp$@�Z�.���Y`�4�����������������%)A�q������P���h�'��O6 *7Z�B9���u�K���n]��ts=6���o.�S�aM�a���A����������*�a��V������@b�8�������r�:��+��mX�<(��8X������L]�����O��E�ls)�o���QA�#�j���\Lkr�2��;=���D����lFq���8aO	��
!�r����V+���;�(XI�>�U?P��*���s���|�\��5���7����r
�m����������oO��8U�1�$+�q~P�.�������X����r�����bA8��<~H)�k`R$RpxNKWv:��/�y����	�}S.�C��@�{"��c��AZ��?G��r�����g
�i����0<�]������r�+5����{S#7��I+�O{slm�(������@����� �!��'=��P��o,��i�@����������>�<�bC�
�s�A���$���m��|s�bx��s]Fn�f>��u,��L��<��m�N�h|L�	�F�v.�M�P���r^���YD������{����wP�����$hk���%5:������*T��$��;P�����7�w�F0x97��'����;�!���
�����I;f��.�V��o?2I�;0��d/�q�:v�=��7���)s��G69���X%�=?�=�D`z�O�V0
b=b�|�|�(Ot���Fk��vS�C�de\8@��������FB�i����L��%�vL)�N����6ae���d&+�OV�y��x�\I�)=�a��wV, �A��>�?SB2������\�zzj����I��;���
w$=������Q�n������u���Y�����~]�Deu��\3;����t�q��������%�9���9F*�>;1�����o96��%���LX:���n{���
T��d]����F����!�6���t������o
#�?&<��I��Q9i�����B��^/�"��j6��w����qH�w������@�6�Sf����w.���s����9���1-����T��/C ;�25W���[�h�uz��d��[%/�xg�F��~�������d��a�<D�I�1w�Hl/|W&�]'�E���!���+�{`��P.�G��I2�\v��0
�q<���t7�.5�*p����$r���`d��W����]_N�?��0=�
_,�(��O�!a��\�AN�u������*����IX������o�����V��<K0��Q��nU��~s��2N������G8~��f�;�������wA����v�'3KJPo�w�6��3b�)����� �`�[~����r��FR,dK���c_��S�-�V<�������oE��oh� �����i�*�#N�0��E�r��
N�#�w����?b��+u�9����*���q��Q
�r��;Q+���BQ��d���im�	�I���&����b']�Th����{G��EZ��VQ��<[�V�!�BW���-
���$Lt)4�W���RiO�FH�K��NJf0�������S�2����+�Gb�S��K&�xd�����dCt�)�`�f%Cp�w��{e�O#���v-�8lT`����h%=�T:0�C#:�������H����8����uu�!����T6w�^���������{��v_zgXdf��v�s+�}�Y��*_�y�zJpT!3��JF ��B<��a��\C���K���Bb��b6R��w���"��(�SC�����3���nw
E`k��h�.����������\A��5v��>�yi�A-���Y�/�T���3$8�?6�;�u^�S�15���N\�-|E��R��XTl����$�'j��� ]cI h&��C2��W$��Ad��R-�����k�D�m1��$�B�G���	��J9�|���0G��#���10���''�Utq���y����3�q���&*���a��|��4�BZ��{����rU�D`u3��%�&8��f��}e����_�R���(�P�W��dT�*��[I1����G��R`�&>�G� �_H�Xs�����b��@M,�~�n�:F���hN��a#m����5����s�z��m�=��q��������.��V�L��X�}�l�t��a~�ia�l���D��1���$�T�#u��������N��V��[������"*)3��*���C����}�t��`F�����H�j�N;
���|�q�����}��>�:AO�iN`�\�>��@,8B�f�[b��A�d�c���[�����qLx5�	��Z�:���
�A<��A�=�M���Os��-w�FX�J��b����.����N�O��P��J��/�3����N����k���&� �P���u��:.x���y�������B�7�B�����;�>�uT������+�Z���}l7�t��"��_����j{�{������S�;�����2��G�C�b���do�o��Yij�B�x=n��|����
����2;��s�m�t�!��D���`�m.X�y����&����WM�Y5���%������,���Bb�0Q�`�Vc��P�i9�|s�%F���L��1�6|����p�f�9:H���[��?�D�s�!b�V���#��D��}�nhK������B�4����C�+��K�N���bP1������B�v!��V���5�������:X ��y.�8��EK����sh
���b	V���cY�!j���B���sv����b�[ �->e�V��%t$��V0=%-�
&���=I��.�Mr��������oi��H����i?����#���.?krSqo!�WDA.�_w�=�
i*!�����d��[2$�>F:��`*�K�T���n�����k
g��:#��Q�F]u�Zu��

9�
P��a����P�kG���0����A�Vx�0���k����l*�l~�) �&@Q�t@�a�������5�d�-�7�Mf@u�o��aH�x����W���zTM�K�?�I����G=���O�N
O���� OzHm����Pj���[�X;!|���?tZ��Qe�X��p(�R������LG�	:'��B����vnl�hZT���k'hr�����(��*�<P�=u���]O}��>��Ib+��p!����=0Y�Z�c;����W�������{�eh���(
��D�e�U����2q�������"x��0��c�n�G�M���h�C
 ����Y(P<��^�����t����c���|�;<A)�#
F�M���0��Y�h�������w�EzH]��h����u�,���k�v�&�����7#vQ[���Xw=���K����L19�-8G|��N�� fr���eT����->YEI]�Kn�S�Qj��?D
:�GZO�1�r���Ke�D���m�����&�"�y@�m�J�TI-�'���y\KK�� �@�!�l9���Tu@/�I�R)y^M�;%q�
���wz���A�\���y�\���Hc�d�
�wzP�������2�'%������@��>��W�H�*^�;�OVN���I����~C�kcSJ�!���F"{XW3���
w�#W'���y5����q��*�7���y���r��x�wF8����A��%��p�l;Ei�J{����V,����'�W������(������f����� ���O��&�9�?,?�+.G��hB���������W+Q����h����d�Q�_[�L�9f�����CfH��7]G���K��$D����Z��2��-&o������&5c�a+�t>�:���W�2(|�-�$��d���+��$���F	����^f*oJ��: <�	'\��q����XF��D�`n��0us"�A2&�X������1��� ����{G~^�� d���Wl�� �d?�`@�e,���5� ����1Ej���`�b{�c�K�y��?��K�B��5~��3��8�O�v�����R�O��2��D��ec��UH��O�m<H�\��X��r�]nd(��M,�l7�8mR��U�s��c}���}v6��:0��;M�������h����my��8���a������]�Z~g��#���k/-�H����s�aplJV@"�C�����m_�
���'H��(�K����s�L��[�?�`y;m�7�j$�'�;���
����{���j���� ��U�!+�-��{<P;9�<X���IZ�1.M	����zh��G��
�$���q�k�j����L�iN��O�e1kXl��b%[�OZ��?YZ��F�8�V�;~��K����
S�*�@���\HR�?��!�SA.I`�aQ}8��L�����`���Y#��R�P��'���e8-O����)�PB�]E��^�$�CRY���(��i��K~sp�0`�/R��1���%�(RD�\�9�����!K@�������B�(&��5��� St��L�q����W�Yt��vT�]�
D��I�$AA���Zj����w��wy&���<�Y�^�N2���Z���<�#��������[s�&e0����Y�v���Tt;��dm+hJ!7��y���gU_`�%�=�v�Pl��������8u��_�����
��]f�3���$��u�o��,jea��F����I��q��\�W^�S��C�i�(O@4=���"��Gx�!>�k8]�CH��&k�'D�����5�V
���r��A��M�t��2��-(S�Q�p�Q��$�%pE��Ism,/�����3�`���\o��aP�n�,�E���e��,�+����E����O5�!KIy�<��=:h����'i<� f#r�p����'��.����z����PT�k2\���0;��T�#d����;"V�b�v�E�poLOm���?4t��c8R��/^LVko�'o/�v��}e�tz����n�|�6g����Im��juk �<�~��[���	mg���`�����e���������K�8�����K�}T��n; �W��qy~ ���4�Yx6����Z.�f�>�7�������j�������gC0���{<�>Wh*R�(��}���$a��n*�����O�}����A��`0w�9c�%����,mYAk894�b��2[����O�;�Y�����������>G��S�vj�����YF��E�(E�l�G|xF��u1�Eg�����7��-�	 |��9���f�����:P&:��R����J~��,/Y��N��{���)��<p9��_5IxeY�:h�x�_V�������wS�*^9���fz
���tK�<G~E�=�����O5{+1�+HN��:�0��0_�d�E@��!�`l�#\��V���1��$�k	z�(o�S��p�/�*lB�"�^{�����������F>]N����<c������.�\�����s:>�HF,1��G��G%jh��T�K.��W����n��/���} �Z
��C������D����JJ�[3Vb�	Mf������\�3��GI&�A�s��6��[S&�\J��(>L����3K;�@}m��Lr�bsmK|���"0���5�',�}</����Ji�5�����������M9\�P`��JM$_�����~4��RP�������Q���q�y�N����U#�B�b
H��(��Rni��wJ�
Y��4j[�Sac��p�<u���f��h'-�������t����f�xk*�
*�����	*������n���1���k�Z3��wT��^d'�Ve1\|�S�<�t%X*��u���9��Q)���/�A����d�e�d���e��@��@���������������L��<�� }.�
%z�&��g�v�b&��n��_}������R������u������.~�������J����I�n{��?�{�M��))��
�����c�o<h�ass�iX�cQ������E���iM0���6���3�.?������he+���[���l���7����m����^���X��&�x/#3C��h0���e>�o�|*�{�V�>�a����m��n�[�8�4��0iw����,~�J��}���mQ4�>&���!�4�������V���y������	)��JEA�����[8��&����t*�����Ke���B�Bp�_�G;2��*�������_���;�z�m0��L$��������%y����Z&3n��"����F!Y��L'
)3;-��l����(�X���i^��FX���*<S[
��[9K��H�6p������*���eSpm����n��i!�.�dG��	��"�����3��yL�gH��LQ����P��$J����Fq��	iP�j�*'%�@�E6"ZCA�G��<eR�PA1iv��q#�U�2�k�ZO�����M��f�����T�����1���q
���/H
 7�~�Aa
��*��X5o��IrW��H8��.{��U
��1��2>i��2$�Q:0?�%Ra�&}7Si��	d�`l+�l��0N��^���r���q��&����g3�B����}�"=l�#<$`YZ�M�j���KW�,�f���H�R���0����C0�l����� q�>9�4����
E��B/��*s{�5�%�Q��(lp��)�BW�IXs�n�'����<v���*5[�$��e6������v����]`��K�����v��a�G���K�G�6�J��������&�5�%�?��i�b��# :J�/�)g�����k5I��i��N�n�����9G{lh*����������mhU��d�����-?�	����
�z��/�����T���.��v��B-D9�
���g�SC�� ��)��K@��W#�%��P�D���`S�c�Q{�,�T:���[��1�dCTA��3����z��'}E�!���	U>���� �u�8�{{A�DD2�=���p�d����fg^M���7�M_~�IV^B�Z�����j���������l�'��~������*�1�(���a�|�H��!��s������l�����rh[�C�3�#���,�nH&&�?a[�d&�i��{[��5�=ph������5�����_[ ���w�]3�DDW${E��� �'�&����XIM"���%^�j��'�����R��6��+:�JR�|�����L'���rq�=�IZ6�1����'�@2����e��HWs
�u�%��zn�r�-W���c�k����b�b
�a�^���*�9�9������ ����L�(��Li�]��Z�����E'��P���0X�GX�P�dZs�dw6���M�q�C�1�>T��Q����z���m�^�m�d��){�k���m��#O�y�<���n�~����p����q�$-�������R��cr^�$��_�Y�f�[�#������-�F"����c�����h;p�i~�d_�~���#7�#�f`�L���qi�w��L���������c��"�U�Q�������C.��$������$�9\`����O��P����
 ��m��_�]J����[���{{���j��������x��EZ*L=�n?�J��y)�e��(���� V�qgs�6k.�%�U��7�U��3�Q�q�J�|�	������"��^���N�T�&.����%��\NHEf�KU"T�z�Ay��[Vd����_��WN��/���5��Y�g��9���H�%F������������N_'MR�
9
�e*�e�(
g��S��p�I����(
�5�	�N�f@L�k�zj�u[�-A�!�E�]�c�L�H�>KA����Ni����d;�����������.����#/<�p���;:����U�V��O��-th^�`�����	A�o�@hF��{J�#w��7*�^g�%`�\�s��dl�-`��Z��*�|v����o���I�Z5���r��| �,Y��,����C�+RW��TrO�xX
)'3���*1n:��}���Y����/���n�����`��>�����<
J��[T��Z
D�E��p����W����]����z���T�05���D��#��i*H��_�5��Z8�j�@���4��T���ohr��9��#���J��I��{T6�W��e��+V��
�F:�� ���w��o-J������c��FR��#U�����lyJ�Q���PD��Tm����#�X{X����'���������c���c"�?��{@?;K��}�w��n�_���t_�x���+���Q��xJ�=��J/�X���`VV-��)�JX��w���!�r��<�$��r����|'�>��1���r2��������d��D�?���s`0m�}��
�1���J����Mb�{9���W��M]�vU"-�$����� �GZQ^v|��vy�+��'^�ha� >��5I	���e%��@dB;E;GH��n�.��5�3)�6\@^�Y�/����&(�2O�	��uR���Gd���Oz��x�T3)U �!O���P���6���,'�*�������ff���d����������13�0:�y#`n'����&������6��wc��o(w������N�������U��2��.#a�f��<HZV�mW���v�3
�#�>^-G�K�@��s��vG�o�N5��<��-����GU��C��3�$(����[�/L3��7	���r���[�1�	b	����q��v-��[�fR�VT�2,Mk�@C�6�eC�2�A������zb�$�c|V��9���8Z�F'i
*��U�Wo�����%�@��z�m�]c"��"�,�=����!��k)��^��b�:w��{���Aj}&��GP�bj����h�/S2NS�������|r;�����e|����mH�]�:��%X^��T��P��O�i����9d���B='�u���� 7�MR���	�=��`��b�0w8���XH����	��#�>2�x0\�5����}w�`�i��j'ge���7!�h���Sg��	|:1���%M��i8��6j�2���A
��hT��������z�E���>L\�<7C�����+���r���W���� q���.����`�!�iz�I��3U�
�DW@~!���Y��5�<SuQ5�����S����v���/(��z=h����_~c�%���
�0��OQqz�e��yYd�c�'�9�[�9�_5�a'�'
�;{&�9�:�����<�U��N�p�@Vx�O������6�m�gdV��Nm�8�L��)� �������T�������^�����$�U�>~Z,�BVZ0��d�"C�!��yjT�I
<
/�I���Ig��h���N�d�T���!.r.W��~h�b����yod0�+����q�h=�O��bZ�����-,���� .�rAT{x�f�?����=-*Y����i��=C'.�w�Qx��=W+"~m��I�4�=��y�����Fl�p��*#4�-��N����Q��E��N�|�������r�'��[���Sf��cAWI;��`8�Jq/�}n]7��� ��4����=m`)�'H�
�h����Ak����w�L#��QZB��q"F{��U����U�$N+���wa�\]z�t��9��OHX�'F��F��T��x|�>�X���({�O��d������?9����Q�#X[+���I�.�*%V��!�f�EXg���f������}PG$I�����YC��p�H��A����+��#j���o�����@~�J��^�"�m�T\��w]�*��4���s�x�:���b�.�]^��F��)><1��B�(}]��O�\'�O7��� !~��Q7������&CP�k�������Xb��&�X���vo*aN�un�`��l����H;�7��a'�����O�KB��U�!�[#Q5o����<}��a��O}���i'�.��������:W���t��P��g������Jx��%���E�,��4����w,����:Y.v`�r��P�k������=�AQ�j�0������dT�������
���*�a�![��K:�,1��i��������K0iar5����YF���j^m�� ���[��|-��1�N��
i>9�-�L������R�I ��"R��c��p}��ZL78�� \w)P���h�:/�BX�g^?���QkjW�1c�S�PC�nfW<���MbQ�NR�:�}4�
v�}��!T�~����G��t�������89SY������>E��2���W6����n��~����3(��3����%�����Q�b��}vS�O���Y�;�*3��L$����Ut.]M����x/�����HR
�k�
�����7�M r��`�4:&C�,��$��p�;�xwp44i<��OUv`K���8|�o�EDs��\�OR�|��7T��S�{�=�t��^b�D �w���?k�Ok��L�{�jmKxkeJJ�E\d[}���!�	��T�d��n,����}f��[GF}�w�s�)W�F�+*"p=���.{4��$��6��n���MS�1R��������I�lS��T�J�/CdM4���C�����������6�5������L�'��\�sH��>6<f��,��W��p�!�h�\���m�������y$�����{�GI�A����Rd��i�&S����>{E��EPK�����^����D��w�A�"Jr�d�	f5���]���g�g�BF�!�)��-j�����l�����Q'�[�Q';���XJ8(��������.��4�>���\G_��������������|�f�%����!��
��r�}�#`��H����J���X��~\��W}����_�EO])h����n�I�����rj@������l����������)���xhR���>��I���_u�%[:i4�G��&�L���a7�Z{]f�k+J_rv�-����U�o;��2r&<gDi��_��Q��	�.I�&ux������xV����5o2%�h����>y"V������_�b�L"@����\��3.����M���.A��(KG}�������D��<���
�I��$
���Qco�i�c�,�{+
GAc�����<�������oHF������7ME"�Z�p��q����<r�s}�1�.�\
�M�F���;�yF�o���T
��L:c�)K��=��������w_~o�{�%h�y/s�+���A�r��=g�_�D�Yob��p�����EQ3�g�I�
�j�0�������<��W����N������n����6�`���$��;�,�<��"[w�r��a�(���zL``��O�~��*��[�6�&�H�\�:�v��7��>/��9������Sm���d�w*B��]�i,6�\i�\>��Xc�yU('�D�n[�W�dZ�O��*�g1�m�OY�����*�����,��MX�6�j�f��yH�U�<������lT����Q���"�[_9���JZ��������7�Rc��=��,��m{�M/�n�*Wr
��>��M}��'�wE��R%[K�[��U�B�tJ�/[]�&$T�/t(���d�n]Ce�fepk�q�"C����3�K�s�� 1���?W�
(��(��_��5��y��`��p�^~$M�2�\t(����	���-Vt��71��FWq��#Z��v��E����^�^�����g8�I����AF��Q����?�(�\��I�����C
2
���J��l�'�@so�&�68��R���K`3�I�*��r����[�PoY�	���
��t4��O�4�2�0������#(��0�/g�}yZFd��k�F#*�����alq�pd�a�N�O�%n�����q�Os�pt�J-�o������q�Bu �{� ���/���C��K��N�a��t�E�Y�����q���7�A���F��ND
��sx1+��*�C�y�����
+����)cz�)�VJ����uu9��s�f3���-��� ��p��yOobhg�p��?�8����_j��QQV�c}�����5���u������s���Mz>s�^��V(�/��{����u����dP(�Y�F�j�p4��NN�t���������?qKj�i�W����K`�6/"�A\�yAt��~�0s	���(���O�,oe���1�UJ�g&2��*�����Y gr
���D;XJ�^X��C��
�9=y�@��1y�qM#���w��O_<N���@�9'W���O}�J����P���N��qe���Z$|N�������v������-k��:E�&�~�R�s�|U������\�ge���V'��^��!!	y�	���#�������s� 
x��}���]{��� t���e���V�|��?�����ZB@��]hMu���P����x�?���H��xOR���e]0'�j��$���9�T����7��(��G%��BC��\@�����/4�Pc4�	��Z_1'�]8���^���k:��������5��*��}r���2����*�`@o���������S��D�|'.�|h��?�[�NM��ItG��%������}��'��=Pj:*�<��oW{��&���Q����0-!,��G������!r\a6�W��)g�J��.�*��7\d����/~G���sDAY�^pi$5��6Z���+�p�z���������5<��Y|�(��UJ��1Yu�&:�[o��������K����e��8sWw��������l��=�F�9����������'�o��)j���:}^�n���I2W�C�h0�R&�����P�������,����&4�7�������?������6���
���m�\�M���*�?��Q�e5���n���������y=����� �ok��E���w�e�e���}e���I�A(_�9qD����\RY�������}��Ed��a"3����]����2���:�V�%h�� Z�������4x�0��H�b/z��J���+]��X�C�I�o�D��8��-�ua�����lM���^���\��f�~_�U�X����!k����Dv�����$�~E��Tk��������`���^W�6��T���-���a��G:+#���s�L��9�I�A���,�<��M�D
����N�*u�]��)�=�5��E�2���D�y_1u�������?P�E?����-!B���[:+�X�	�j�������e�7���:��7����,aS!W��������iSBd%�k
�T��42�#�G�#�J,����F &-H=.��{��#����r�:����l�}A�'9W����S.�0��O��������l8��6�bYc'1`�v�����.D���o2��*���2D�.����5�(��:���e���B�/qT����� �`
�h�����~N$���NeH��A�#*�v��~��2�)��������u\���-I�{xP�0��XDM��;��#~$BVm���T�h.�v��d��f��?^��^�)V/]�e�2�#=B�S���B��V���!��A]>����^������_����i�mXm�5��>o������E�P>��]����d��Vxtwo��7���C�s&�����;nCSH4�)������}�2������c�O�S]�
yE)���U����L����T|�s`���U�3f�'-��tJ7��Q-��?SZ�/���\�#���:�2����-�pcs��I��n�DX[c��������i������1�b,=����Me��kS$�1}T-r3����U��m[]x��p}�^��Hi(�/I�{��+��52��U��
HE�+Y��*>2��#s����o�i���5���J�8��vj����k�����Y#�a%���]<�
,����o�#���Pk�-�g,5�9����/�����]��|i-�������z����2f���X�iq�=�>���'a���(�����RY��BP�����=N�;_��7F�$j
�#�0����6qT:��X�B=���.0�z�
(&��S���3��a�L����|��R�;S\L�\l���D���\*�	�H�r0�|����"������5 �X���f���h��s����9�B���h?��
���Jvv��])���O��of��X��$ �dvc�J+��6@ma~�����G��X+�����`�T�T�$,J�$h�O1	�6N:�B%�l��\���S2��S��8����!�}�VS�E��4;�d�b�uY���$�dd�9��0c�G��L-��9�@��g����O������]�Y�*|u�&�������~� ��om���jN�auT<(R���G�w��$a��%��R��3��p�E ����WD�P��w}?���o�|Pk�L�,���g�h"��<���q�j����B��/2��b���j5��������Y�%I�A1*�3�X�K �@���T!����y�n9H1k`u��x��j����`,0I��:7dO�5����3?�_�B�{�1��l�h.-}��9M�����p"���>8n�XgMJ��C��-��x�s�?�D�4����`�����P��W����p���e��<��UU�:?�
?�7+��3]�^���uc���J>�m��
��Cr���t��~�����-�}��9i������-_�[(�j&�+�������%���7��\���0�>��R].|��}o`����Cz��e�s��/���I�=6�B�R/�'��?��G�4�j���p�r��j��������Up�L�bzY)��O��:��m<�4 �����������A7�h������� ��#D��~>Z�H-hQ=3^�*0c��pl�Lzd.bWR�����IC;�)A��v���u5�p�#2c��,��{����n�8
Hw�<��Td��nm��=���o�_z��������B}��r�$tx\5��)�AN����:0����C�j���en��/��ev���B,6#^
N;��n��.�P��(Sw����1�m��[(��{H��x���������������^
�.~�2-EV�Jd�jzcF?����!���&N�8����OTp�%��|��/��nF����6a���jn!>h�s�n���>���?��$�����i\�N�����a3��F�P�~*��TD���IR���������B�����]1�"
�P�����WW���}��W>��������r������*@�ftg��ffHM���h�G�HrM�f��fR���/S� �-�����L^�dJ,��2�8������'C���#�4�h�EB�=�^���:���F�Nq.:��i�m���*}��+�W?�[�A�a~?��,L��l�������u�����	��Vb��bFM�"L3����gt�,�g���8��{�"���P9��H�=�o��5a:�g.�e�$=�`����
\>�1�����o�B�3
Im�T���'������ry�P��
t_a��
L!�"I�i�D����y����e9�p�������3�t[��!zu\<48�O��`�r�}��^����I�R��X����%��@
w��������Lp����l��`�����5$���O����+G%Pb�����8�Q�N8��76�u�U>��x`����>�2	�b=*���r�Wq�}�M��O
=���$��:i2 ��[����+����6�����\�c�o4Js����T'X�`����4����R�&��z��n�0J�����{��%<Uk��'�*�\���oj��Zn_���{n=����e>��m5-(t��^����[��.���I�t��"yC�)>/��� bLJ��hsruX
��3�+�������CBc&�
��
r|��&d�d��a��m�D�r�z�i����hVi�J?��v����H���-n0tK�N���A(��K�]�	{^a�����7%�f��H(V�3Ww�h��$.&)��g���������ab3��%��:G�I�A����}6,�c�i����?%H�o�����;�74Z�=Y�)o"����S����A`jR�����bo7DsK50�S�lH�ee�����?�V�<f�(��|8r�2��$����J*�J�{���?���T5`��?��u�����������B���	|3\��������I�){�;��A�{C��p��W��2vi�{�����
�������\��4���H�����M�)@����Xry�:�NCX#i�u����+��B��\���������^�.��A�He��n�Fc��|����SQ,�DmG$]']S���g�.~L@��
{H@t����g�)/67d�������^'~�?��Fy�����������,Z�j��ga����c��s�������n�-����+�C>|q����?u��5�Q�&��$��(�1�(���������/��n��]����uOA�]�G�'��0Q��X&b6�7a�w�a�i��.���H�����t%H���a��"zf����x�T�xx:��|n�
^TuH�0�[<��,zx�����XK^�^S��g�2q/8�1��lQz�4Jz�2�,;�vx���Y�<4�cf� �rEE�����`�����l��s&������Y�U�N)�6z���g
�������|9��30�s:����(��z �.�����5�W��MA�*8���PQ��N9�fw=wq6�\����J0�4�
��P�=���	�m�i/2'��w-�.,�I�=�������;����f���"����#$?��>���+i���?�F\P-z2�`x`Lvx������
�@a����|��~��E���Mv�
��G��S��6T5��nc������#���n� ���9BE$/@�3�,~�KIC�
j�����Y��9����6�<K�o��j����13I|��(��e���^qM�W��c��q�������9�w�J�h����@����Or���R�86��$4�"<K
���s-��p������\�����/������mW�����?7�����T1��W��E��4<{�@e,�T�O�����u���ck������`��X�{~1�@� X��]����jJ�r���*3��Cte��Y��D:���5�e����-\�
����&�0���H��8���	�Z�2������l1���������s�
������J���T3������*�e]�'j��\�3�Ez���e�K���`gn���L��!���
�3_7��_Y��ej9w5��P�$�h���u����|��Y�L�E�Z�Q��r�H�<���3����r��k]N���B/�{����TO��`�(���_&��0g��+��e�9������	��j�Xo�wewzX��(w~NK�s�x2�
�fh�;J`4���?�����{rX"��`K$I/�X�<����mR�t��I����MY'�x�����M1 :��������$K������z`�V�/a���D�.Q�.�`����?�z��M]�KVE������/5�I�F8YO��OA��k*�W&�	�|�{��>���m���j[��d�
Z{�����'G�e>���"����#dX��@�^�N�h<fq{����t���^`h�@$���{H�aOw���S�Uy�>��~�����TU��kY(mHj��
ng��A��qq
8�&��C4"I��(U�~�L�����*��-�][e�����8��?���U-��C����T���=@_�����~�V�lz�hy)Y���!������6al
��P�������5������������z�\2"���f]$-�����V�"���l��t��R�lq]AD\T���Tw�_�^�V�)���"������FYZo�`*�8��������N{�u\W�MZ#��x�X[H�x�y�M�e��=����!Q��{��*S;���P�gs�Pz��x���S�lL"��(�(vl��dd�o9����R�����p�X-<1��������%�8��%�%���]a�A�	���}�Uich1)��I��G��&k=�������_7w^������pR�3����;�����U�Z:n�Yx ��FP�?�������#d�p���B���}pf��(d)h��{��=
��N�ACg������	?��w�Gm�h�3��K�Dv�y�����p0w:�c,O.-���*b�(�u;�sn��t���*�����Z�6��a��,^E-L�t���LAG�&V�@t��Hh�u�g_�������1������(q�o����,5�X��b?X�RjG�����C6��r;c�������(�����x�/������c�9��������k���`�y�o��JP�$�u"1f{f�L�p#2f����)�(�jR9��=�R�H�,p��7/x�����We�
!�5'ho�����S[;XY����F��t�v����������7�f.�F�+��C��]P\��;G,��,-"��'o���h��������qx���SM�
#k��������'�s70	7Pg�5um���+����L��E����k��?
��4��e"t&�4F���J�E���f]A!E�
fc�Z��0|���3<������<n�������].F/p�:�����a�,������}��<����hT-�~�`>�� ��O���?j�=�7b���0�^���-R~w�x6�	��[I�n�4�1~�
BY�P��`�<��<P���v>'�9U�u#�P���Y�J�/���Q=pR1<2w{(8�~�Aav�|���D�0<hy?��d���c�����f^%���s�|"��7��W=:���8W������+b\�a���0�L���v��kX�)����&���;���
G�Y�s�
#����i�^M���^�6�������|�2�L@�J{�-q9`VB'ar�vM+�mpn�Vdk.���S��x����l�������FJ���Phz0!��t����6�^
A�"�����H=P��v'���0Tp����D��	��Z��o����b R�c�{l�E��-�)��!���m�����=��,���!��nO����*��������������Vr-�����$4��������k
�k���28�G�
���L)��&�}��p��~��.��C!�u�
�|<��z+2��0���f�t�nZB�����	�0�,E���XK2dX��W�[6��4Q{���/p�S=�1�B�I�H���K�S��v>og�"�'k9��Dwnq�s��>.�.���q�.������
�&���>LC6 ��
�]��"��J������!���d�^u���	U��[m{H�sSL���f�#�e��
�s�?���E'dv��%����������jN��O���p����L=���y[�����4�z�����=�������&��&�%U�;�����'��z�6Z���8q�^};�����
q����cS��\��f�v�Cc/�k�9�cah�����F�
M]��2�'E(��)�.�K����)���1,�d$��8��%�1K�2��b�����/)��@d�}��X9;���0��?���4��qq.�uQ�A���Be��������E��=oTN����i��b��27�>����o=J<��:V������fzs>�43���������(	��-��v����g
o���!����jz��60�a�������r�4�j�y�nV�j-5&\�hi�M#����S����.��-:l��}�e�tJ�5.������xuRu}�*sP�4x��������3��!�La@M���RX���Iv����ef4�T��e���KP��.{+=0�7(7��;B����������g
i`�3o��<S�N,Mu���z�:La��2���R�jz�K]o
����IN��T�+�i��b�2t�$��I�R>����1�������k��O�"�8(�P'��br0���������%����{D��Fy�@'�EJ�ZRV����UX�92r�(vI2y�N3
[�>���]��kL�<�D���!��Z�a����Z�v�m��L����^R�^R�j���������������8�����a�Q��d�fh����c��VF����k]J���>��� !���-^���_��x�Rl�%���^�Hb��y��'Pzk����FmT���'��0��-Am�pS��~�����hA���C�=9������2�Ju���}�����E�5�+Z�J�~�q�b�K���l�� �@J
�LO�v�h8��]�����YC�����3��+v`�]��P�� ?�z�'m����[7��)���Y#���0U�5rx9o��-K��|��P���.|�)�.�����e5x���8�~���K�L�����:aH(g;"�������j��&�4�0=��^V��y������Zo���	�R���$��\�@G�/�����Q�D���Mi�ck�'�>�X�W��9����T��>�}UT��k} ��X��M3��"z/	��cG��rz����4��������|b����v��h%rQ���?���8��E|�����5p���k$9����n�F�U��V��!j��+��d;S�@�YjyL\�j	KT�S%P�����!Z��+)�?��5�2{~�}��y������c���� if��1 ��8"�0-E��:�>��
��7J�
�"�UK�;>8a�D�qC����{���x�^�����U���p��|��v���$�~�l
8��0��v��b+3�����?����Ro;%5����F\B����&�818��{�lZ��|��"'���(��
L`��	���l���|d����a^/�9.YG�8[K���:��\�����u)�Vr�7��3]���A��@�r�G2��^�D�:�����>�yDm�����g�OY����S��{�'�'<:�/��Hi�h��A��!d����Vt�sH�B��(Z���?���[�.'[�q4,E���!�GxZGV(W��>����?��{��X�����)-������Y�G���5b8@5l�
�5E��-���1�\���������((�p�����^
�K�a��E�������JC�����oy����nO�yz�1G��V��V�Y��79���P������K����zsR�]���S^�u�4�Tr���!AQ�E
er\����s��*�C��q�thFO�,��b���BT��q���m��Y��N���	�����"o���g��v���E���F��^��41k
~#<9�U#��T��+�@@��-yYJ*��_�C.�p��_qE�(t��G��M��c#\�Pw���dlm�Q�.�S�lK.�sq������[]��d�K����Z �Z� svkR��i#v�UA����1���"��kd-�[7k� Ap�FM���,��
����{���N����y��;��I�!ek3��}�r������C��
)!5X���N]��c�����t��f2��l��Y�{w���(�3�z�0��V��z�'�F?;�&[�:�%'�3�����@�wa��R4�A�wZs�*a|�r�[{��`���eU�"�G��{�05��,{�H��������e�����26���)!�>l��7�����{���tfw0�1w&�����&�]��~���D=�g"�C�L�d��p�����5�Mr��z�^�QW��s.�4���>1���`(b�*�W�bDl~����N���'������d�\����Y�J�E���jL���)���xM��4���W[)����Lp�6�#
��
���y�����x�?o/5��C����4�,�
������g5N����\�N�����o�}�)���/ZGI��L�k������+��\�`����1�I�z�W.���P�����=��n�C����qH��b��S�!L��"h�z�L��lv�b(4�Z���i-L�M���+L��yW���H�d6Y8���H$@^�-��)���o���(�S�������z9���r0j�j�7�(e���eHF� ��8U[��(����1`E�/�:0�0��AZC�w��s�bB����2��j^��^�?����|CR��t��Z��;b{�B������R�����F;��$���e#����n���oT��8kcj��~4{��\�B��%b��
�B���|I�h�P�)D��}8���c}��0.�2��Dn��9si����K�{�� _}�@`�~���$q�#0��#ne�G��;��~���2@bQf��.���:�dmYa~���=e����&�X��,���+"M�����rO+��Or�Z1��X�������}���E����p/�X�o���H���]�p� [���������D%��@�*�e���;m���Z3����y�n��$���5��������X����S�:�N��'O���&U7����i�s���FV�!e/�)A�;��_k���(�K�4�O!������+2�w�(K�l�r�WN�y���|���C����Q�Y�WtI�a�R�
���C�����G1�a���3������������0j�bX(�@|l���m��h�
����+��w�K������b3Q3p;[6�\���D���
e\Z�YM���{��I��E��&Q�C���[j�
nO��"br�?�B���VB��puGb�m
� ���v�
�}�=�;)��`�s��=X��[T��uN��e�9e������|"o��,��$�:���o�ohU���%"%E�9*�� �y������z�{�0d�{}����UKg�F��(��|PO��?T�����?rz����%�'8�Y�`�O)��-����=�ar����t�{�N��KE��S�������9F�����q��[8#�������
����.�I���7�������5d�_���_�.���x�Q@������6Wd
��~����{�|8�q��!��$MZ�y�V��mw��"�9Otrgap�
�iU�u��V��&=����Hf37~��5���;�=FEz*�F`���-"�F��u��lrj�I���8&����O3��������O����=*����(�G<��5�*ZH��(���r��4��0&]���3LPg]U@?���4���Q<�����7�x������*��y�����B�#�G.�V.f�$�����l&=L�R�6��|�]{:87p^
���A5o�U�;�:�%�\'����i��K*~���#u�>{�0��\4�*/=��������(k�O���`�m���D�W�������
8��:��Z�t�K�����y�����-�<p7�M������
��:r�8
�(A0;����#=u��=]�W��"U����^�}� ���9T<;`+�e$���2���6/���^z������yx�6��P�N�9��k��m�P(�
G �D5���9:����4�4�J�|�#^�Z�����zU^�U�X�T�1��i�'������Qy�	+���!������w�`���A�W�����.���1�|��1F���}�b�����X�W�,��k��`2�{U���-�%|0�}�<)v.ex���?������p�14>����T���R}4�:v|v��S�YE�{��(0�EzLo>R��oU��y�$yw��k,DHCt�u,e���S�V��~uN�)�@t?�0��6���X�N
��	z�,tlgZ��D*�8����a��zv�*�k��hh����p5���d��<�z"�����?_gm�����+��U"!��0��a�f��AL��Q7�l9*S�',�E��o��fd�1���r����9�����>1�`Y���W�f���4��@jv|�~�f���c����E��]��/L�^��m�#0�|���������4���f�������\1���������\��M�V���R���"i��t����q�w���M�r��4E�<� �pH?8i�O�t���9�T�*��-�����CEL��s#�$�a��L�#C\�������(���M��IzT���[����Vs�+�z�gq W��%�����O��@�����r7����
���)�IgN�i���/V��t9I�0I������[��fQ3Qa{��!s�hy!��y7��������]�t��|h�=�r�_��T����nw==��#�F 1t����wh��#�fn���oA�Rh4@�0&"���0�
Rw'��J���F��4df�C�^L6�,��[���&{uu�P��v$s��E��B�p���{����W�m�u�T[%�o�#Cb	>��r3g�$�'b�A_�����6�C��Z�9�q,��ex�d����|2����(�yC>�c�N�k��g�
�{x7F�>T�!M��g��i�'�7��g�F�E*E4~Rq-��0��
*Q���u��hj)/��a��'lZ����Hv�xBL�������!�N{�
W}]���1U���=�||�y#�&�������7w�����	t��3'_��T��z���}k��X�2�bX�I�J����("
#i!e
 _��6G��Q�;$Yy�!��X�A���T���$=�������z�j�5�d'�3�%~���4��=$D���Y&$P�ix���o|:��@S���hr,=R)�D9��-9ypB�����8����	�`���!�����a
�����C\��K7���UX��ad�9V"���	����,k�W��.��b*���^t��Q�5:��� ��~K��<�Mfz�~.[iyU�l�`���>�*�PL�����g��m�9��	f���*L"��!��c��;�*�������C���\��1f*s�M�������%�>�#��8��c�n���6?��Z��r��*�\�H�&�$��*��d����	��-����e	CJ/�$���0�#���j��/(qu���V�{�����0�S��^<i���h��e�v��N�;���y���?<�6�K�>��������;	'��d���n�����^0
p�J}H��)4(�bi��\��]��Q��F���C^���<��������;~�m}���d��)Y����+����.���&������=H
�%�,��9�/�N��4�b
��n^G~�(�(��^���]d��0�~I����<m�I�F���S�q^���}S�
�2nm)�O������������G�Z�K1��f#��S�y�W���9���g��J���|�;pf�0�,�%i����dW��2�29@�Em��K�����sw���IS��2�@�����0#@O�c�����,��Y���������������}!��+�h���Y:�n$QC�%B�6H�c�Q��r^������:��G�]��3�/����l� �"�i�B{p
�K����*P�+���We}3!���8JU�}n������%$R�zZq�(�i
�2J��@��
�c��V�NH����m%�������t�	�0XpY�?�W�:7�b�Y�=b$����^�6��$��>#I����:�/��D����@�o���;�e[��`���x�e/wZH���*6n���B1h<l����}r=���#�FEZ��'jNI~������;�T�K�fe��;N���*E��se�G�J?��`�E~�3#?F���1bE��j�����y���Q4*]��otj���Q����S/���Tb(��+��N�����A�E�����y�o��$F��g���IT[3d��W_�W��xZ%��?*�K�����fy���r�9��3kdZ�q
���O���>����?�4�w���!��d/H��=k������=	��|W�����L�s�KD��RnRiy�4�P�c���^;mD�+�����S2j5+��0�5��Q�����0n���L�����'mX����v"�:�bI�;�Z��������k�z��?K��a��Q\q��`U�A��k�������T�/?���~�E-Yn�����N�h�C���w�{_`�����e�l+���f/��ha���9m�[��UKX�i$��C�a��#i��BK��8�EjL`��qu���:��1<�Y�[��n2��K�	V�wH��.6/'+!�������z�7����7<c�M����T�J�
��T<�
p���i��woG-f����Y�/z}���jwL`e
��+�E��p�������Mf�)�Z�?����t�q�d����oZ<��/S��cN�w�		4��R�S\�~G�e�����< p��X�,�����[����k���������F����?�|�i��E*�u��������*��n�X��-lms�}U%���&��
e�C9 RL��[�%C��w��i}�e����~�����vg�f����]������p����7%O+�5
^���U7fN&���V���iJ�����&�W&7��#�B���� �=r�����1����"����!+$�X��R���7��:�w�^2�����-!)ssjt��S6���m�
�����B���b����s70�\A>}_������p���^C@��U�w�>@��
�x����=��~����A�7��;&���{
%�u��AImG��5��7�2E��g�<�/n-U{-���<�\�<�Mo!
��q%�6��f�$��_K=���q����K�\?V�I��,4�"�&�{o�Tnl�*�1fC�a+��W� ��	��s����g�����N����:Ta����A.
�gH`�&�H��4��d\��+ceA�=)*����A"�eJ����s��M��X�]�=�����+����� <s!�>�6��w'k����W�f��9�o�U�eQ:��g���G��3��\P�m�S\P��x�au|���`�4��$����yQV�T�/��?U|���b�V�K!�*3m�/@�^��q��m0�o����?8
��b��:  �"0����������w��B���!�"�<��=�1o�00�K��t���.���"���s������|^I/�v\<']�����C�{T�n�V;����p����������]g�����������e���$����(3,��V�	���/�S1��\+�������c�k�5�5��Tz����?�?.�V��xQ�Rh�
���T?�	��R3��m���d�vB�D�sr�P�O��#���.�By5L�3��lC@�bG��>���1`��UY�_��rsw���s74D�
�fj(�����>��]�K��5��H�J)��X0�YU�?�g��� �TEe����r��B������w��4�y��!�u��])���� �,�`�#)���"% ����j$%�&���*�paR\�ok??m�<{d
8�=U�*�>
�2q��_H�Z�z��Z^%��a�-;$h�W����I<��n�>���V������B����,m��������^��
�L��'�g,���r/�]�"V^Lc�����V��M�FC/���C�jWx%��Y_~��?w}-!<��3��.�Z1�gg�W��^���={����{Y��a�n��,��M������B,�z�8e�?K|
/�S��CZ_tY�������jf�Y��T����&Wp/����b	��=�L�Z�����s������*��6�l[���b���,�-�P����=Nv��1&!��?��t�o����Y��r���{�W���IDY�h�]�t����%��_;��2r)��v��9q�E���oP�e�D�r��`�X�0g���%�V����Z�fq��sL��T4��Y��(�"4�Z]��-�3�����������<����b#�K?��y:@u�s�
�[�c4.��_����3���|*�1�B�dc'6���/�V����Q4�_��vV+�`��<�a9I#p��[��-7����1|�I$D+z��PO���!����z&�,���Lf�j��<���yfD!�w[�U�
���?F��}����f�q����8@��^��Z������p8z������S�bX��~�>��J����`a�������Z����{!x�+�3kP��"�z��H:v[��!�=^��8��(��T�ya�C�bX|�\C��E{��~_3'/�����YELy�����[��p\���B�7���mb��m"���u:��gR����2��\�%�[��t�]K)�(S������]��#�SC��{��@1��`Yc�F��H�������z��D��*������C����|il9�#�c������"�L.�'Q�~0K���eCc�p���E�zaoUC�mV���j1���*�*Y����Z�a��6��y�Q�LI�	:�hq�{����{����=b�5��\����L+J��G����D��/�y[W�\>Q�B}	����%��Qmh���(����d�.�[%�Of��3a �=�{���7��������=
� �6��z��D�L����������$���6���_P��>�ox����|���z�6&.��J{s9���������%�-������z
M�(��F������o���&bG�`��T9b|4���~�k��o�\��Y��L�Z��~���'�������&���s`��!fQc��k�D������
y���%��M�m��o���I���;;���f������	>M;^�<��N��!a�@9��R�u���&eZ%���zZy����x���z����p(�@���u7+�}^������Wcg���#����L�-}C|fP�����-7Q$���H]�sO9i4�������Q�R��Vh�����������B��b�W�^^u�/���k�|�<	��pS�J���=������
;a�Z�l@��|W��k��{ ���J= ���������J�4�=����Ri�,.P���p�=��YH	��&j���o{��S��&���	���u��]��� z[u*N��R�8Oa��_Yo������+�h�H#>��Dxf��N)���|�6W��a�G��C�w�_86H���������)���b'��?�����3
B�)#�6�c���4�j�Xa�~��{0����e�.��p�A#�x��U��������X��13���C8@�UH
iM�u��`����p����*{������y�lE���7i�� 	1�;�@@XZ`c�	��gc�P�k*#�����`��GLV����eA/��~_�����E�#.���\����jz�6i@��:4\�N�o��Al!������m}^���D�h��KN"�^�[�bD�&
���4������1���s�����j���_�9pS��������8��{�\��AJ&p����n-�$O-�T��������~�A���?(�p��|������<Dh�4hk����)k���%+�j���!�=�Q�3_��<�~�	<��2��]C�?<[#���F���m��-�Z�<e��g����=�e*��o'u
m���c���f�������v)8O�T��s{�{�5;�m�a�/�����E���H-��g*�#�u���7am��-JTro�M��D�-�)]��R����
�U��������g�&�
�����NtQO�N�?^�v]�x:�R���`��L��7���Pu�M�N���{�����B�(?��'0�2�lG5�X0�ZF������
.r��%y�G]�G���#������K���:��BC��P�;��$r'�0�W0��
7"�B���C����SF�b�w��g
[HY)f 4rM�q��w��[�i�b��	h�����1Ut��giCf�|tQ
�)h�E��3��.�|o�����Hl��s���MJ��==NtZ�.����*=�AS�����7s��,�<}Z��Z�����������X��(�keh8�4
�rh$�0B���S��l[���O�����n�y8"��c:��Mh�����oXQ��3��'�+R:,���L�1������ef�+%p�QJT�B�����K�!`=�w�:���������������d~����_������'����_��Wh���S'+z��M�Z��J��D�/���1�E�����S.vhi���'�:4(~����o���d7�se����D��!<��b ��:Z�z�G �: =�v	a����}�?D��L�*
�~b1g�����v7�Ld��T5��iU���J��0�Ew6j�C����"_�!;��x���$��fr�uF%�t�������3��Kt���w7A���������NK�LS����UK��Mz�$#�::�B%[_z&�qD��upa��e���:�`��@�v6�N�?�����{UR�4n���
;!����di�|�
s"X�_��
�wy��8�
�bU��"9B���7uvRAb�\���O���1�C�~�����=��������T�
�-["j�6���t�nj���{zAq�Q\Wu��[���3�q�
l��=�N�?�|�D�>�A���oF��#m���>�.���LN����
��VH=���*�G�Z������o8�����3b`���������;	id�����������������@u"*?����)�-��Gr=nvG0�y������9V'�?���-���k����Zj���O��D?*f=������G:�Iq����6�?������>p��sPFT��6���6�V����P��[�����d�}]yC�3b�7==��M�P�1�0�+���nd��?�k_���,�j��� ����;;�V�B�K0�����;��%P�*^���8 V"2���Bk@�����k3r�2���T^��x�5��b�-��ym��l��x�2��q",V����m�r�.v�������@zO��$8��Rn�����J�?32[����.rB�c*�.�����IS(���Lc��D�Y��5�e`��!{N�%VLi�:��81����#3Wu���C71�q���'�$���t ����rn��T�,�=���S�����
�~}�
������oZ����
�'�?@�e��%��%��Ypi,��u��7�������q{��Q�o#�,������^P�$��K���FG�����5.�>Pf��H�I#<y=�����)T��_����)ny� r���I'N����|Hy�w=]dQ�l7~��X�G��������f��A����d^�����c�d�w�U�q�|r����z��<7�z��\�~�SU�3�M��2�(�=��
�q^p]��@�d��iPz�I%c}�i���1N��;�������F8�;��W�:�'�j��o/��5�HF��b���6"D��r��.j� �$���Nw\���~��A���N�c���P	���Y� ������5�cnGr��y{��	�)?���D����/�������OH�����)��@�N��U�`sM}���������;g�2�|����8�n�>��&eIkI]�+q(+��M0��U��l��������c��TQ��,:$��%�2���6��=(i0=����w�q�:~�U������)E"kU��-�Dq/36�N
������.?.^�n`��E�-\�/s���*f�\z��D����t����!~�Q`�'�,�QR�B�'��_�Y�%<�Ymg�jk(����d��f�LNm���rZ��#�u�_�"���dI���6�5�p"�b�+�~#��������<��������,
8�I�Q��/L_�p�����I����|���B3/�m|s���kFN 5��������m�>�����YM}[�H��~R%�+����D���Ok�j��W�
��P�s��9$�����<�)H������X���N�8���t��g�p����Pw���0x��]��[ [��-�~���D�R���A��p6��(��oP�V�1�_��
<���nx�G�b;K�g�]!�B�9�f\���_'W\��c��MI�0�{��E������
�~�O�Qm�MJB1��#t!�fQ�������=�U��y�IT��}��&�{�~�����H�H->���#��%p��<%j���O4��uQ�����d'�_��O����.1��'��;�9^�Y�
N1�'��U��{�zx�BJVwG�,�C3d�����T�1)�E"�����
����U������������!0W	�J6���W^L�>����t,a4��z�I����d��������p��k�������4~������a����?�������~���E^6i5���3��������^�1=����B'cx	�"�5���GPA3� R�s34��A!R��.(%��#.�<4��������������Tr8���qJ{��}�X�j&%=���L��5�o����h�,=55���k�J���)
��([��7�e��F�������_�ZG������r�����������5FO���;�]�
!��)�&���%���7h����c�@I�����r	�`�:E
�RD`�pL���V�t&�Y�T"������f{"� *1v����`%S�1���%���T����c,���%@�e�����g�_������"��+��$��Ad;������zb$���0b��s�k�46R���\42���/��vy=4������
)�<Z��N�)�6��H2�n�����s���1$lr��^k"&��<0�U����_*!�C�go���]sIu-��.g����J]����[�3]�<
M Yx�U�����������tA�~p���u�qgJ�GlL�����R�w��n���b�CH�l��z�:����x���<x,���:rV�E��%B��~?l���ZsI|��%BM)Z\g�!�����NP��g���l$�*��q�B�~?.C����b���
�h��9�u�GeWo��J�r�$9l��AF@?hS������<^<�h�'�n�2�7��!+�]��6�%9@�f)�1��9��n��>vO�8��$m�b����Ar�p��a������^r9taO_,�����H�zm�z1��0Uf����W��AL\�VW��\Ut�@a�O�X��I����((y�����>���l������P2!���U>)@5T���z_�_����6?P�������#�^��q���p,T���L�l����TYs	=}�3RRsnO�W�1o�`�6���(Cl��#�mB��+Wj�U�V��J�(������8�;���t��o�(���D��_|0T������'1$��!�^O��y��H&���,����]��"�x9y��'�v��b5���~���v}q����E��DRQ��9u��!��g�_3�]��51�����|zN�P����F@�%b|l�(H���W���\��d��i�����0\��������8C�fEX����/�3���=;�%��|cY����N�1;�vj��WQx��,#�<N�[�H����A�����_�:����g�AP����Uy��<8�`h�J�*� k?�(�y[�S��>=a����z���g`�^9����$��,B�7�����
s�	��5�J{.��h;�_�l��"$R��4A;��2h��� ��*�Ps�S�y&1���qw�W+R����+-��NP��:��"�]���d-���h��W�l���{���'�bK`~rP�gf�5Y�����N(��|]�X)>�h0d�K6%;��<�#g��{8`��+	�Vz$S����F5f�.����W�u
�yz&��U������b����^wb�{����������z[��6���z��.��w�t(Z���@��L �8i� �7���}~(z�����f���[L&��3��j���\�v�	��X�����)��U �V�������
�����G��'� e��d���.i�5���:��l���Xy�E�pZ��	��H�z�~N�a~_�����R�&a�����i,��g��D���r��RS���p��s�x*`�^��@���51���a���p�N���?�g���y�F�d�����Oe�:ma����}�eg�����,U>����{�1���t�4�G-���z '�#���'��@�������t@Br���R�����oQ����������>���������-���e������~7���F�'��WT
J\! 
 �k����y�p�"}�x����^U
w�	yW��f;��9B���C1�����9������<:�t��v�c���h���~�e<�g�c���)��I���+��ir���?u��oW�>�c���g�x{�qj����<����mX!��E�(����zg��nu��A�Qt����Y���f-��_��yh����#����{���{%�81�o���R�l��I���z�~���0����.����I����8����K0�uP����"K��)�Jf�'v�&�,e��P /
1q.J{>=��q�S�eQr��D��L��
��+��3�@6�x���f�;[�`|�����(��S�����=��Fw�xX�����V.w���1��I����@��]�����^���/�/�m"7�\_��$0�����Y}a9$��b������{jZ ���m�{|~i;e�����:-��K���e��wM����-6�}6�\k�&����8����<����L��?���4�d'$��l��6�Ys�D�!���w��:=
��P1�*�3{y���/�f��b����y�|������C��p:R
v9I9'���'3x�Kkf|�����m��Y���������\���J�������t��|��c��G��zl}j�������O{�>7p�>���:�d� ��J�
O3]���(`.bON��
�h�U�BPr$����&hOk�h����x�o�^��:��Iag�Q3���50��u�'�b�KQ�&S�2b�+�-�p�S�pC:Os��F�^)�?o��9��G�e�:$�=���W+�rh�$Q�L1
Q"��}�>u�����D|�Q_@�0���5�\��3�;�D�lt�(M����$2^�l�������E�A�^���,���o���rT@��M�h�}��"��Mr�f��GX�� ;�a.}�j��U*��-�3� hF�j#LL�Ym���������#�{'��*��sG1�?���U��^z�T1#7�zj^'�P��T��c���-`}�Z�'������q��1������4��9���
7�(��b�2:���W�!mU*O�r��w�b�2�6V��Z�m
��)[%��:MVQ���������}0��-�m�Sd~�����xmi�g��A[��W{�h���p�-�C�FA��X�^3Mn�o�/�f������%;[�<��	�M���
�k:����2��3Y��J���T����ex�3��G��3�]��^����A6�.���������>����p��>����<�J�3��q��7wJ+91��z;'_t��
�Zf99�=�g�4@�,�R���3����,_�nK'�M�5!�e�^;�t��L��%�I��g��(1��������.��,��\_�����AU��{�!��Mh���'D����G�(��k�~�6�_�n� �l�G��E��Q�J_�H=����?���0���J�G���/�8m��\P+�>�����2� B��YL�Dv>��T�u@��$_����a5/>��
����N��p�:N���z���bh@��C|-�;����&��������c�Dkn�gp�����K3
�*���1���B�Bx������];3��	Y���N3��
���!�P+�9���^1������T9u��Y8�|��
7���v�xL���m�sq�{�6�Y�@��O�����x�4Q
��$�
�{##���C���vzZ@*Z�#�$C
f���9+`��i�������\T�O|��-VZ�U\�"�jt�s7�]X��X����h�q%�%E,�-��+�9r���>���\q��nK+�
�	����P����'��)�u�JR���Ut���n��@�9����}HA��1>/��D�5�\����������L:��h����)�-%C���Wz���AV�)z����l�qWY_f��$��$���]��[S�jU�����V������������;�.%j��V�g�FH9i��?�{�H��V��(�Y�=G�kJx�A"�*Yj��&���\��k<��T�����"LR
��~��m���w���gP�l�r�u���)��I��(<osj���FN������6Q'��:���g����EYX7F�������o��F�M����p%5�<�-4�4���vo��/�-�f^I12�#��;C�-BgHU���m+�5�&z�	%���P|yH).�j?�D�e-�����|�-�.@���k�,�`V����q���YM?Rua�.��.q�H�<R��E��#1����{�+�K@�a?����E��+E���#?��O~L��%��J��U���=����%�Q�������DC��G�7pIPm���Pi&���;�/�>��q��P������y>�`��8E�h�����u�0��������|���%�i��n@���6
J�@{�eUC�Y�����{���RHwr&4����L�#��W�Mk����R����p��r��W_������do��_�z������B�s��B����h�x���}��������������3,�X}}���������,�2�z������/f���6��|G@�f���;.��`������\@����E^�:����e��=�-~��t���\�;�������U`G�y���C��@��K?�x���T`=�DR�D��P� -�@5�}�6�`�]�,���d�8_Q*O��`��sg��X�F����M�d���@p8`��0�u+����[�%L�U,]���4�p�p���g1��|�D��S�KHV�,�"n��$#�w���
�D����e�g��G�(���wdaD��=TS����9����u<j�8�7�&�������z���Qn�{��C��[�f��V�p�.f*2jp~*�����|	�~'F8�g��ih��S3Y��\��j^�s�Z���R����J�Q�d��k�� Z�h�����Y ��P)�����0�<����<%b���P�c��P�k.m� ���'y|��������D�;�I/��.��
�UK�$[��UQi����)&������M�:d�,�5��gR�DS��I>��b����H���|v0���,x��G���=t���m�F�u����r�}��b��!F��g��=Qi$��>����q�a�o�u����#M���`h��Mg{xt�y6e��6��[un�:"C����7��k2������ED��E����o�����@�O�F������t�j���*���@��A�����N/e�S%������Y������F�B'
��+����d���m-���n
c��J8��|��k�o0N0#��
M�����xa#��
n�\�8�����������(��?�2����Zo�E�#�
6^�z��UF����6���R�+w���L�����/8��W{Y��� ��D�wM-��TOpV�t�4��Y`����4���nA��*�����C�,��2.�������F�����Yh��l�6b�X��	j�Dj�����3�c�u��Y8|�yS�S	�_^��\$`#�������yraU�
&].�,���a�_���@�Bd@~���w�T�2(a�L�����'����0o�M}�@FOX����Q>U�U��	��R����Rz����}1�n�\��S�����M)����JT���a��������"��U9s�+���z�Y;��E���
.��<j\7�3:�g6f�M�"�B&�O����]��bu�M?�E�v���kW8����)Kz^�����	�Q=v;H��=����&�H/��*R���MEr6��.QeM(�������i����LT9�������]GA�`���p���3��
k�5���7��t���j�3=��N^e�FLX�>������Z��������)R����/C��9^�?�����R�A����-�����a|Y��T��h>�b.1�������z��J6������ Cc
�����1��)�b?5���?�#S�x�y�� ��>j;/�H���g���>�����G��a;���t�z��MH����\!��XB�-)%��i��4�����o�	�E>��S�x����cG��k�N�'�y���+w�N6�<�� ��4��3,�R�����E��P�b��I�r�/.����F	
d,�}n����x����z0��5�N����/SJ��lv��Z�R�}�_p�R6}�.
��;1\����
���
k����Y=����
���L:�r
x����>+� �#��,���������f��y��`.����Ud#�p�5"�F����KxrhK@�6�]hGI�����T_G7�+����D�# ��]S�|�G@��n����QS50��m�!L�@�'��b��[ ���b����h�C&f�k��7���a*�U�;:Ptq��=oF_\��Izd��tN%{����){�"X6�{������(|�Y6��Y��_l���rIN��uo(]��r8���+IU��hu���(*����V��y��$2
#b��SV]6��B�54Zc�y����F,���RV�Am����ea��ul�G>Y���;����
�u�A����W��f��Y���S@`sB�M�5�am�	^���)�����cB#���/����]�4��wz�J��f�����qY
Kp!��$���c����}gw��!��#�
�Z���������{��t�~Z�},�����^y1��LZ�$��V���Oc��c�H���Q|���)v�d=�4�OwR�'��sa$����|����r����r�����e{YG�������G&��g���Y�����FlH&����gw�XR�w������0;A�D�>zfJ���9�z%*A�~��"��m|1	�NC�@�,R��!�6�����E7�b��E���N+��)iQ���nx�����d�B��r1Y�7������U1�W������r��q5p�����,��\XY�������}?<�������	��E!]C?q[��R�.o����G������'p��'����1�ps�ue���/����G��t�!��I�Eq^k�Y��\������d���s���C�2��I���){�JU��hU�i�����`�����%c��{���!U��7h�B|Rb��V��M����sD�z��`h,BW`������D}�����5�k�qt[����f�90�0���s�S�=-H���o�6�"%����i���I�z�x$-���
�+�~�_�����U.Pu�$��e�[�����y�0TCs�B$������&���
J�����K�1�}�2�%V���Tt���X�����KO"���=4R��>dRs��2�x'7�4����K���b(�E	M�T��o�AKr��<s��^q�C�f����UwA�f����;��
T2���^�:!x�%���X�B�wN���_7������u�����;K�)�
��������qf��u�B�c2) �m9���^x�Sl�j�	Sk�Na���p��$R��im�����Zz4HV��p���}�`N��Ed�g}���P�:?�(�UBlzSrE.VO����L�\+���x0���LB9*���G�j���,]A	i�m�
������x��`[7���3
�<�Oe��Z�x��N�k\���b�@(	���������nj������\�(��Dd�g�>Sj� 	�:��?!
5�t��JQ4"&�CF`�n����cXx3~<"������I���k��b&(b
�_�3S������k��2c+u��35��,�m�	�%$��"����Yx
�Z��E"}eo.���j�iy�AA���Hb�z6�a(����`N��%qw���wZ���WO*�����>�4�����1���z#N&�=������a��'iC�S3�hu���b��|	��0>m�����VE��������"e<2M�@X&�hN��x���H}�y���i�Se8��;z���g������IWJE����{M79�V����e3c�)WV���b�3���J��W��t�j?���@��S�����Y�P�1����I����������[�q[
~��C`f����["�{�4���	��TS]H�������3j��n-�������R�������]���Jd4�w7���s8���bW�~hc��9�y������N�ER��$���8p���k��F&Gs������+�"u<<�I�{4X�~�8Ul��$����C�Z@d_4lB@�^�0�o
��2����jS��r���[�
�W���)e B�:1eE���Gi��L�Y���vq�E�/�!?��O�wKk��=�' ��~*�\�s�m���^����R�����_h�g�I��5�h,UE�zQ^N>d:M�����E�^cQ��V	�7~;�8��A�:\:�8���i��l�5=����)�Q��x���X��.g�r����C����U�W���f/��s>�@�`��HB��9n�P���w�F�7[#x[!jSMN|\�^`)T5�Q@���*jS���0��~����7F1����#-4�1�/�J	U�F<�"�~��2�[J4�{)���g������C;�u���8W���O�I'�,C���t�����*&*�D�T�����X��*�W-�����]�����F��0Z���7�8X�Ie�.�/4��)}wh	���^F�k9I������]W�T����>#J$��G{�g���l�3x�	��Wc� =�Yn+���]��DY�-(�
�Cr`}����	1�O&���*x�L������@XaK��.+��b��c��m�x~JF�+����*:>e��� �T{d�����X���F8,\�nd�m�Y)�ZZ�����P�'�K����4���� ��K�D����,�`�G�7�D�`
7K�1��*�������.�E�,��c������?���	������.�{��e�iL���Fj�3����o���j�il�X����^=������N�����QY\�})�iA.=�L������%�6CQ;v�U��97`���NIyx���N��lpNeL*���A�� Qc��n���v�	+:����@M��Nj4��0HU�plG>Pv{�s�����\���z|��B�;���vl�����t�
(��b��1X����8}4�V���@���A���������G�����{�Mb�m@-#'�4#��
��|x�S�����=7��U"M
���������>H�vn|81�cY97zh�ck��G_��/(����g}����)�0)�u	k^�h��3�2���I7jV�4W��`�3m�2��J?�a�#��G���3�$�:M.*���KO_~i��A����k'�1���(��p�\��q��3Q3T8��C�J���/<���h�j��{��?\C�k�%�(�Dh:!zw��H�����v8(G�{��`��J�j���f�U�
/�LlE��eM\���84;�|��-�����p������pf�Y+w�Z�XW���Lv5?�O�J6|t7f�����<)�DC-9(v����2�>��uB�QXc
p����Qo���	m���N�_jG���3e���
���)��8f�2�F�������%�v�M�. T��(�S���q�%uT�F�@��'<�y��T;t�~��5���X�(
����S��*�/���7��&�]�i���������.�Cq��B�C!����J{c�!G�$���v������f"���k\�~T��yS	?$�
��6xj�?q*����_���D�KSY*J�80�_A��x5Ze���X.��y{�V@��Vs���	6FZ9&5}����r����M��7�+����1�+n�_��`'��F��	�=}l�5�5��&kv�B�\�L!�|��A}�	t�`,%hb�
%�~�#z��v�����@LaD�tfN��|q�}"a
����e����^.��8���`4��������a���|����Owi��Vg�������nr8=��|�����(��uk_���S?���//��������f����Y$*�w��B��
�G$�R��)|0�Y��$��D)��z������0�<����|����0����ql����\6B�:�r
��3�c*��{,m�-��J!��5��	�UW��+t%^���P�[��{�>SN{W8p�s���b{-(���n�)�����	�(	B����&L��?#�2��N�$N����r����hQ�x�M�l*������kqz�6p\[�_M)��J`�\g����Z���mu�G����d,� rC>��-�T�=,:�Na8�h@Tz8'�YJX���'��S	/���]������$�����o�n���Q��f�1�@QM���������XT�v����V=`�
J�U1��O����6Z3���Z�����.�����Y]2*��Y��g(��I��=��5�����$�V�?��=�.D�?�k]��|g�<q��*�{Y'MI/�a^��<������9q�i7��k��i+�jm���2�R�X��5�������m1Q��Pc�e�~�r��������r�R6�K�P[���_-�?Z)}�#�s�� ��Q5��p���~�t���94gg���T�&Q���G�-�_r4�3��L��8U;9*����&x��xO���T��Po�����&��]n�bsW}�)�9�J	���C�{Z�UZG��b���SG^�p�nFVo��k��������2��D��ml$��<�!���j��g~j#1��Mx��gF;�����.���*n?mD����'���b���"�����f�A��s@'�]!�Dv,����.[5m""O����.|���nFG��}������y���Bcm�gZ vm�s:�]="^�F����4G#7|�UTU�y���[w����m#���e��>+���)h������	l�-0�F
���� ����u�z��#�;}�kYL��sWQ��N���������&�)��B� ��"(�-Wh!��%&��W�k�a��"����K��]�����@�j��)G
���Q50�0j���J�����V#l����7n�V�����@2�l*>
s<��?����J�W�7�`%�m�9�|��XP���:���K����r��E��Y���������S�r\L&��Q;��������������������-�"�0�b��*��tZ38��!~LU���}�>"��������3G�Se{:����h��$�+���9�a|Yf��x�l��h�N�T(�'q�\��Z).�]���+o!��|���r�j��}�n&����r��ZV�2#l����J�g_�=�����]~��JG�������DpR0�D����G�v�Pl�'7����T��x;��!0�c�����Zi��-�����n7��7��'A�34L��m�N�����_h��K�����q�\������u��G�uo��w���q]Q%	h�dW|�u��x�S#Y�7s�^���I�%��!�^���r����!�J����ZNk�{�N
��3|Y��K�N���e�&�'��W�c�-�z7�,�|�KDj� .����V�v"$����.����Cheh�>kp���#q�.,X��<�������z?DxB�U���X��b4�L��5�3W�~�a�� ����uJ5����p��Gg�f�c�=��MD�w=%�>�sl���gJT��(dW���<82`u����*�@���e�������eP?��:�)�eKAsg�?�r}]��V�������`�qK�tf$�]IA��Y�0�Uzz�xhs��y+�
eH���m��>���h�^��t3����F��D���f�E�����e����W�t���]=��tV�h�����l*_�jm��[?��9=�2���$�����=��������Q��+��|��]����*��e|�1GMN�����9 �x�?�+��������b;�D�>o/�U+���9W�?���o<s)�����%��k�;P)zD|���n����6�6|�I�CC+�,3�M��L����F�%��}I�Z�!��C�)O��tp�F��j���S
����X7}�����	��+�a����w.���������h��7�'j���aM,������~����i�t�j��O�����
�9��8n�Wh���	�p�oQ/x�����{�5_
\-jneY�������=\���E��I�Av��~u�7��������v����bds>��t<X�]��P��3�`���H[��r�49'�D�9.�����O���gGaa���%�?�+��WOq�i�����6�����D�9�o���D�e�|�yd����+|��*JN�hbN�^��\t�MZ����k�b%�)�D AB��=�J,����_)����o��n�;�\�(47p�f���B=�a��x�N����)
�GMq���U�h]�� �
�����H��tYD�r�L- g��@��!:�NU��X8|�zm��4[��RV��I3/�8��H^b���Hnj;	�+�;�K?��VC< ���Y��������al&��j�:�	��w�P�-�R��u ��Y\`b��ax��2@�'�����C?\��3/��uc�v\�0~�4y�[�RK����E��S����]
��
�W:�-����9C�����
��E���9�B_�����`>\���W�z��\��U�=����� >X���zlT���{�o8��g����Ufk����������������i������S�8)7���CT�D�]����$
�zw1u��.{�k�h)�{���;,��� mY#���x)��]`���n�$�u���o���f��7Pl��vr��B�������xt�_;(h��l��TxN0i$��y����=��4�*�i���X��Z�|�Q/�y�ed
���r���I����+r0��o��r��{�u*�o7J����"������ ��U��	`����}���d����9���*��<���tJV�	����v�����5s���3�j$�h~g�A���_z�Ys��|J�5�pI&���;i�7	c
�Y��0V;T`�]�b���@�:i���$]�
��&�!�jsR�
����U���r�OV�����;�O�r���&dD���nT���N�����V+
�%!����z��o%t=b�����tiW�S+�|�?�Y��:jI2�U"8Fz
 ��o,��Y	E�(���PQ{��v[����_�__�b�Q?�,���L��A�#�;��^�6n����,^7��p����O�u0���]���)~�5���g���-��M?������7"�\
��iy���0 T��1fx�Mjd��:���~�x�a���B�}��O5o����>
��P��0��D��Q��+����c/�:���������v
n����C��b��[y�~{tm[�}'�/�)��
�G��l�"�W�mQ�������f�e�>8B�+^
)b�bc}������P�j����'����fG4�e��'A����U8�(������]�>�p�p>����������C���S���[����M��~{�A+�{s7)���[�o��6�96Y�0#g�3����)���1����4-�v:�\���r��
w}xmI��.��
hv:�d57%v��
'e�bFN�h'�FuY��B��/�L[OH����v�8�Kq���� ��+���c��HL�A&�������<M)d'���D}��>�
�U��u�����@"%�2=�vO�����j8��e��#���JX�X+R����q�������HX��9���yz��Lb����blC���8�J�~1"J����5
|�yH@��{�s�\��-3����:��k��/��
�h���J����G.5���q%z����X�}<b0��������E%���U�@���E�m_#A��*02x�?+&"��l�s�~�Mg���/L�1�g�%6��Dg%�>����\�@�jA8Q\��0���M��CV'X�a�JE�se.��_m��X#M�)���s�*h�V��x^4��B�Par����p�����~���k((��I�F}{��{�^X���Vf.|[�K�%��)yD�\��E�w�J6�N���B�j9�����E@i�=� ��~$�Z@]��\tX�K�%whz����U�VTR��1m��vx�0xo��������/�1�':��tS����mU���dG�&������n��Au��,��>m�?�y#W=S��V����@7P�$4��}��uJos
��`1��i`�'��0���;l��!��]�mpO:4���)V������b�-k���g9O���e,��R�l��k��m���
'j�n��53�9w������S
L����b^6t��,��#����l���!z�F�t�M��s�!������y�M��JE`�����J��x	���X��U������x������l�?<�t�U�W&&�������'�n0����h��2
��V��<Ne�pV����\�Y��
�@c��1�� u`��O3��O����$B�S����	a�����u���+n��T�a��rF1�@���J�*��H��[;�90i�������[���z{�3����1�=����b��x���z
�$���	}�Df>�|����
pFu3�{M>b�%������$q���@��z
�x������\A���@]�����sr���!I�&2:��B�W'6��l�n�o����b�]�2R=t?7����(Z��3eQq>;gcM�����4$V�V�22��)��:��
��|>5
6]�x���`���/Z�!��<�g���Mht������`� �7[���qIc�z\���P��h��~k��s�.VC�l&����J�A���e���R�����������>&�b;���6=}1�|�+v�����iZ�����y:��TM�8F1��C%E2�}���3K���f4��HwDM�8��/��;c�.m��b���f��O��86_�������\Db6�]Cc�����"Q�m��T�.�D~
vT��!�0���J����`8��8�������@)�ax�a���RV��� �a�"0�����3���������B�����b���+8��)U������$���Y"����@��)�Yw+uVL*�;����Ak���6����sE�d��l��O����I�L88�=(����<=@�yd����+���x�x�F����#���dS1����u����Lp���.
��$�}�7�/p������~�?DV�����Y����;��fU��|��=�'��W�����u�<l���G����W���r9u��AX�sS"b���L�ex��O�������Eu+_�K��@��X[Bb�
W�M����OIBC�`�P���FVe=��cv��$O�3�k�h��J.���xS=�l Mwg=S�Z���tt"�_M"����J���Xs�*H��%��L�7�9Ga>��K%-�5V�����^S�I��6<I+�1�P�
W�,��?�$��s���$3��[���|[x���
�K�.v(|��/BZm�.���;���b?q�A��~����<�s�
)��(r|�Eh[��Q�������S_DgA��H�����U~l5
`�p���V">����U��)i���$�������*P�V��^xP1�hOVA
��64<��%� ��7e����w�����_L[
�@n����%��a�|{���V�	V��g�:(>�1vu�2���8��~%�)yV
����0����P�����0�R'y�#iP[�V*~M��h���&=������;\�������%Ff���L��o�u'D��a(�t�\�m�S	�\�<'n+dte�.�c.I����T��r��p�0k�[w������eud,��Z�$E6�S��L��qT���r"y��vH5hea'�I�����_�7a~�� �Q�� �������.'H���4Ukh=��B�����2�O/C]��J�1������
QC���q9	��������<���@<��,�d�����?D;���yt��*#&7�a�aYG�����=�U���k��������[37�%2������������qg�E��-IM�cf&���E*	�LE��p�D�����-���X�i�x��A/�k �{c�m5��3IW(/�������f)�����Pp�r�!4�d���G��r��;���c2��������='v���F5�;�����,,�e���l���������=�v�#�s|9�k�f�j;n�lc>@���k�)�����y�����RCBD��S_��V�9�j�jU0A�f���Ly�+e1G���d�}��n�}�o���"�Un��D����,^�>��h���R��J��?P�y�|q�����d�*�9�&���q
�m���@ �x�'�%��a��-n��@�GI��C���YT����T���6�C�2b{`[e"�A���E������	�9��T�ZP����F���!�aL.[)��A���������"+��G	'��AJ����:�0�?�����w���BZ��(�"o3��jM����lZd��"���C(N=}��#�(�b�n���oBE��>?( y����l���%RH�b�������`8���#��������'��
�Z�v�zn0i��p�����(�������7��Zq��#+�E�A����#�(i�[+�;<�����^��Q��9@����r�C<	�C��2;��A�d�C3�#�K:���Tm���}�!8�H��� �&�>����I`X�������kY��A�8%�nrV��U�!��#{@�F�*������������`�%�O��=<
}+I+������Mu��DRv��+���wkJ�Puw�R��ivo�U�c�����9g���1�FVa�s�1�-�(�����B����[�X��� &���WM���Z�#�}{}�	P>}��������W+�L[*����M�,`��`1n���ir���������dx��.&O�u�n9�����{�����[�����w�;�l���������Hf�}���fG�S�9:hqa*e� �k���i/��9�g4��?��8���
W���'�&c���j%�!Z���c�D��
0N��|A}����������W�}���-�+%iT�HsN�Pm��6'a]a����sW�)�� 
�K�������@�����*&.�*A�P�Q���:������z�C�`�g�����Sn�����$����LV���~���R�����Z=-��U)�����TU����4�kuV
.OI�������m��xI���$����y����K	������D�G����������%��q�@����D~}y�f����k��U��m�ET3FP����-��.�� O�Q���!�5�Zs���D�tJ����
�L���
��6,�OQ�z[����n]�72�n������`��D���U�$e����'�
��GK�k���D�����	�f���E�p~n�t�v�t�*�<]$ux����E��B��DBQ6���-�P�ue���}���!Z��O�����/�%��R�g��8�n �1��"&q�����~5���j� r���W ������(��QAK���MY�����>b\�<z�*e!���f�h�����6V��i6���Q����������1
�|(v]RJm,����'��SJ�M�k��[�U�	����0��tiE+��#�r�z���
<���B���B ��af��a��0R�u1�������~�����~���1|Y"�-�(��2�����Dd<i�)��]`K+��������S#"�cb�k�	L}6���,G��U����a�=����M��5�����<(v(�����(�5k�j-����j�*>���2U+���2��E���&x�BR<��
e���NR����bd�|J�V������<]=����q�e05%e�$
\7V��E�l�����y��+.D�>���Ho�0W���'Ev���{LG��Z�}S�/�����F-� o2������q����)�i �J�������5���k����a_-���vDe6�J��n�{�bS8 ��8����k��2�JL+)`a���]+oMN�f����P���l�
[���Eq����x�����-.J����m�
��5��C��MH@��t�D��r�s&Q������� b���H��W���4@������_�����%����������A4�9��U�t�G6���k|����K.��������J%�vc��C\8���,Zh���1���#��{D�~'T��OQJ�?!b�X��3QVK;N�\�3sq�{�>OE���e�a��
�R���={�4v#�`|��;�\��ti���������r-&M��J�9u�L�� l)D
�� R�T���OM[de��1��D��6���{���8��E��t�G�/��2c*uAR	�#Si��e���3�(�>�m9���d�����R�������j�@tUTn�X#��ea�^�����W���{��u"f��Jm��g�J����$�OV������)�OW�(Y:��w�L�4�W,fj3@�_l����02JN^��cr�zX������yA-����B����:8�w�c��%�|�
'&����Pn�w�;	G�#D�'h��bC[��GR~u����:��Cej
s5q�,*��W}�+���R�t���dw�=��6&��,��o�dKa�u��-��K��C��kc�EDM%���B�|E8�A-u62�0l�(4!z��@�5|��ldg�@�#�f0��h��|�`��ZYK�����Y��=��`}9�N��H+���Wz����2��#��}��Pf��!
\7-e��`��{����^O����Gx1`����}�hY�4�f r�m��D�$!j}���N�������s�u��nc���x���C�G����MrD��l��w9i��x��Pt)|9�DH9���r��ee.eb��
��X�_��A"�(A��!=���+e�"�-%E*�6�(0�9�������*���h�nQ�V������L���TKz`X�B&��OM���A����c�&L�9��x�T$e���r*�5�=��l���N�-D��@Lj����z�_��&�2� [��C��K���tp�&��LCn�Q>\/���M8��x}��y%|^t6���c�B*��)��H��b���C��w��+��];�/���.���i�~TX�J?�����>���<�5U/"��*(i�����Ag��G���kn?C�TS�� |B�jiu��w�&���\���I6�O����;��V�{c*%a��lks6��fVT���X}�Ut~*�c�/��u��O���n�0��URP�2����%CX�r`�
�l��6	Nj����_=�cIS��h���'W��������#99�� �������
�H�3��q�x���1_�`�S�i�w��wA���������@�����)^7"�V�����@�2y��E��8���6�R^�8$�P���9s9 P��7��Jz=�P�n>�q��~ 0v<��i�r������_�����t9���P�a p�m�m���Tx�#F<��h�n`��S-�LS9������%���Re
$����^��S4���b��fSc���k��u��N'�e�0��z�2WOE��� �Se#��E�`d�n�������
L�?764%k��c~|�`���wije��*���K)"/�y�^@H���fHI������p�Q��|d�W��w5�0��y.�u�J~x�9��\*��[�!t@�e&?,���E$��Z7���i�w������9���&[� T�!��Ct�(��MCNt�_���@�.��s�3��N�L�s3�d�2-B���T�	�^���:.��=�BDh.��W�]����>aD\�k��4�tMOI? ��`"������v�~��vZh��q���WH��X���6��PAC� +D���
`�D;#0��j�.�����Did3����.8�E,��i�������^,��r�h���@���iq�x�t}1;e��H��X����&��7�/�\0p�+N
z�f���6�$=���c��\���h�t~�oOTk|�����]��wg���pX �-�;t�!���a��
����<G�V(�j������f�*B�-	�\p-���Y*@'��
*���ZJh��`d�6'�nh�� fa����>d��?����3E�������z����'��h��O����D�{���#����K�*�4����V�������]Go_\m�#��f�8���jF�������u������X��T.�p�Y�+�=L'�C?i������P�����n����yJ����N;����D$TAq�bh_�vS���@�$$��R7�����~���#Q�(J���['������^�t]�<���&M����P���y�{Y��P�lKB�Q�uR8u�s^�h&BL��%DIcx\�9�u ����%M9�����X���	�[K"���=�Z0HQ��'���e�w$q.m����8�M|V����(�C�/	v��4;������k���D���
	�����.ck�!��t�+��w���v+]iw����+E�a�}�k��mS��P���(�JB�X�~���8�����V�U�JFi����pO�)!B�o��s�/���v��~�������N.�������P��(��N���+�Nn������;
{s)�s/"��a�����e�j����CC<����mV����&����4���#��i	�4�'{�I�8"N\��?�W�,)L�?����L�l]�+���L�deLO�)|7+'������Q�z�F�|�n-��F��������#p0r�n�d�2�I�\�E�n�m��X��t���`�C9~��&��p/An0Q���X{{��Hl�M��\�� ��,xC�C,�����3�-41Bio�u��	)Kk]Q�d�E��Y��`D���f8��}LO��>1�a9PZl��L��y���T
��S�B�Be�q.�Bph��nfA��/i=�$�e�usvT3"�-b������"Ih��l���D�V��/�'�_(D�`��[V�e�\
c�)�@��X��Z�����O��u����C��`��gu�i��.�|<���O����2���l���s��U����Cy��b��mT*������i8aUgyB8��=�-e#��?u��`u,��E���5���L��=z*��bqa���F�_�Lr��M���nP��+����X��R;K�����DV�QLD)	|��X���C�
��0 o�'�sq_Z�}P�"���N���7���Qwy���em2qAzBNR��'b���`�k�}/��Z����?�H�!���V�����-[��@j�����8����.sy���p����+�����ovM���s5gx���J�]��$r���C�(o�8
�q�$���K�<�����6"������9�=%��4{��aRV����~��th����S���P~h��9�t�	o�Pa`?���I��D���u�c��>�,Q�`�|�=�y������w��[w/t���y�6�DHe���3C�L�Y�dE_�+�o���"W�H��g�%���v1�@�e�.�5%��R��j���<��D��7��xK/�n� .��+���~,QL��a��o�!�bI��&���,��t�{Ch��T$�f�{A�����
���?N��C
�o��|��A��@�k���q=S����4��n� �+�Fy�,���4��t���py����Os�l����
I�JHD�5�'m+f���Nqq��{A+LO�-1_�
_y �����������	�������vy��zJx������Y�

e;�����y?�+EQ����g��
�S����M��n&�q�CT���D��3��@}z�xk����Y���h&k�a%��_������[[�MW���(��aT�`���n��Q�aQ������VP�m�PW��o�'�rAMNU/=���y��5�d�!r:������Tg_`b�c��%�����"����n"Ve<,�������������T�ml\9����GIL>��2�
�?!��XU��	
�ko�L/,_a�V*����H�L���wP���3�
:=�a�YX�Ca���yf�O}
�+7>|����);�B���?'*IBBUjt���X�g�?���������ZpX)~��Y�c��.s�A?����
��v��},qO��:�����N��u��j^�R�(9������O8$��j~�a>����S�&;=z*)3�R�:������� Y;���k���${:�'_�\7e��)�v�f���-�lu5?4���aI�F3��)��`���*����#��
Klf6��
	��16�6��3q�M*ZJU3��[8������	%E}=���{Y| X��
��| '�Bd�I�wos��l>�����th����k�>�.Z��Q��'����CX�d	�p@��B�x��������N*�_������}��7���.���E�Yqz����B��3��]"��u�R��BG��X�j�9m*o�|e����-y���n!7���h���!��d�h|�u����m���u4�>�
�X���1�X^J,�i�X�<�p��������=_���T'D�1�l�v��{X'�tEb�[=?4�w�����s��7��,^%����ub	hQ5[�I�
I�f��7����vG��$}ew�0zI���l�s�h��g�mr�]I��`+E����F�v��,�t����HCK�7�#�jd�j;���O4X=PC��\���d����cj!I�.�?Y�Xb���Z	eK]���o��`(K>I���#B �O��`y���x�F����bfFEM�hUq�b�z�-y�8�4��\�q�N���B2��n;�m�3�A,W�6&���3���W�($	��4|�o�pyJ����?3+<��+5��Y�L���u!����X�Z�j�Y�����;�J����$OQ���H��A�~^��x�Apk�>�#�h�����`����� 9�G'0R6�2�h��H������Kw����R�Yb���_N���L���F'[�Z�,����Z���}0s9'���hfto�nw�����9��Y4yKJl�9b^�������HH�	8XFJ��$P���i7�����\��U�l�3�K.����.T��&)fR+�������Bs���!�)��9	(�����g�pc���2.;a��p`�Y������v?��2pGz]I�9�+O���
���_$���J �������0�
N��Y2&U��m�E��6��I��X�-L;�^#4�u!�#��I�������36+�I��3���=N!��3��U�\}S~��[Ll�8:"_���6��Pp����y�o���4����.*ngfo�uY�7������i�����8��>�����m�m#�1�F�/����9Uz������������ W��u���a�����O�SXa~��}�6^�����3�wo�q1���=&M��_8�
5B�Y#NW%+{GF�N��	d7�&D{���=#G!��#�7D����8�N���z�����P1�=k
,Ho���b��fL���
s����J��{
����mX�O��w�g��A)������/�������ak��g���s��*�����s&�'�����M� ���w(�O�f�i��Lzu	��}]*����8"g�T�Oy�^��/�D���3^`�����mt?\��~eJ��~Vm��h1����k�oV4��/e�{S��P ^��BP���z�����#�>E�EA�V�j;o��m�iTG��J�0����r��a����_���u�����Y7��7�*�V��H/����X�����U�����h3��1Z�|�`������p8<Bfs��Qu�9��L�Rl���u%��z3�9�q��8������v�J`�+[�:����8�B[�HG���N���46�f>i��}����?��\�S�_&��?e��b���!�uo�pG�B/��!�c�x���2-�;�L5���B��I�&�p@H�WM��������A	��
�Iu^U8>](����u�w;~��y"'�HR
���t>Z8
>+_8���w�q����f��5�^�����N����S���w��-�+:�>��qG�/�%I�p�2A�������7
�eg6�Qa������������G�M���H�>����l����^1{��aL�e��s���|pw�`���+�i�$����h��~�&W���'eY����:�F&���x@>I���/�v$�!����hOgt��J'c�����R����e��_y�k8D�]NQ���7�b��o����f��9��6r��;�V�e)}�(�j����2%�~HC�}�v���X���P+��5O���b��N4���"�x��86B����u��!�8�iF����Cs��@�����s�����jT����g���X���
�]�za��������yx��5��� �yp���~]�-�+�B+>p�B�1����
n��K� =�N�dQ��R|RX&�Iu���R���E��I9xc�����kg���?\�*�H���y$��L�sgp���[�F-�6L���+�=k7��oh�_P��3�c�Qy��`�����i���_?*)[u��j`���u��B�n��]����K#�I�A��8���9�A6����R�LY1��#0����r�a�o,�	���:�g-��������T���p=��y_mo���3���e��^����;Az�$Ye+_7+=�����7D�O�n�������jX���e�QbC!ZZ4���9��@���%Y6�O5��p{���?�c�x�\a6]����
��l�Vd�-��NU��j)n?�ME��h�-���6�l����Ay~CV��c�G�J!TI��� �������K>���Y�l5�
p8pKG����AB���i���Fi�'����(�w�U����"9���z|�������y�8/s�
�p��N��[�lK%���UmUnA$����\@���6���H�FH�o�r�~#�N�\ w��*�����*�GO6�������}��=o?����FsK�f;�7�{v���A���svs���)�M{B�����W��������V�
qI6��K@> [��"q��%�\��inv@,�����R���.���#��;�����b���~���<)#����]pW����'/oF�	��J���+q����A�j)�3K��p7�x���:~�E������Yf�hka�H	��e��g�I���_�^���Q_��2��~�����
�NS���2
����W\�G��7,�>�;t/{_/���`�>��&��~5�/
�p�0���cPH��!�;���	�s��l���_�����M�~9�\����������M��uT4��T� w�Tx9@VX�J���h�RI*����n��X(�>�����T�@���N��\����98����=!|H�Va����!���?��O��3yA�i���w���G)�M<�M#��]�����'� ����sUK(��2�O����^Lx�}������"M�6:9�W���G�q�U�T�V����h��z���X�������nI�����tp%}>|Z��5��zu�����E+������mC|&��U>W�R���@�E�n�������kbb�	vH9����Ek�iG�^:�4{����?!����T[BJED��X�`��Rr91���
����H��L�b���f�E���H�x���vPU����-���������{���{e�����	6)`H����������:7$}�>\��bf�*2����3F-�������X|=���n�zS��J�2v�-\�`2��
��
�]���������'��h�o4��`J�c{W� ��5K='+���q������V���jE�i����F&�Q�/�K���)���Lm��4�UR���.W���Ir�L�eR�Na���\�*����54�'A�%�>�s�Zk���:`���n�H���J	L9�ps��o��A�)�3�
j��m��42 �J@���g�I�g�+�!��8�i�q�����"5�!C�q�c6k
��N��
�����u�1�
�mL
�@K���h���.��H_����MH$x��$����)I����5������{$��\�<��)��G����p}��~Qj��iQ�O�S��fw2���D��b��-�3_���hYZ-����Y�sTNR6��,�"r�5bk�uU�tz�H��~�T7�h�����������~��1���XY��4�7����askB���t�J�GK-�7�
��wSd���"-f�U�_z+�"l{S�����4�q�05D�w2;���'��|,��K?����W�p(���H���>���	��4���u��%���d����-��.�lF��A����[�g�w�C�����Wh"����T��X^bb�!8�zm�J�����pO�|ZZC������*�G4]��):!<)�f}unQu�z�
3����j��g
��n�����$�7���5�5@:�$HEG
-������7r���(YM�e3�,C���w;�U�	-#��@j7��l �d��P\v�8��!����U�����1x�!\���)>SS.�9aP�/���L���@���%�m����+�����E�]<���=���sM�|���F0�u�M;|v�0l�V��_
�-��}���%�}�(e����L��d�W5�S)��qlP3��6 �t44�@vx�F
�@����vc��]����D+\��:y�~H�=Oi�^>Y�����C�L���'�]"G;����r���M`���a��L��	Sy���0�Z�CL%���V<���AMmd�n������y�*�O��/��5!V9��{j*o�H��,K��(y+T��t��F������
�ry�0��l���K��_��!em���5(��8]����;������S���@���x����a��)��/���*+��D��0v:�i��,��Nd��u[�\y������z�z%���C�23�/8���U�k�u�2Do��#.�&*_��q�	sew(Q�6-������/N&YK�-d��Sm����r���IJ�?�M
���v�!
�.P0�Mf2���c�r��G#�a����x���p�KI����-��5�b�D�7�����<�uua�`5QedDp�zs2���GY$��hZ��B7$(,�m(��������j�x	���#
=��:Lu����L���MkQ+��s2�=X�������!�*c=]��L��[�#H��Q���^^r?7�Y@�J>�
��"J1�p�0�#���v�|p����<!���a"lZ6���x��><m�8��H}��CZ�$�M�S^�k�����u���j�H�H�_�%��k��
%���Z��A���Ic�h������<�Moy��<m�ten@2<O�@��*�G��7�a�BM��T���S7��;�N�kB25���-.�4����dZ������M������q}�k�����E�
����O�f�E/
?�m|t(���:HB$o4q�s������g�y��q�r�N�K�E������&#�Z-������`k������q���Z�b�O�����
N5�qE��<�$?�0�G}�h���<$�L�?��J<}�OGE<&����m�&��h�	����b!e���L	>4��p?$�\��A��^�_��m�l����&P�J�)g����c�R��G������?��h��d��~���������"Kx3]?k�Kh(�
�Ey���3(0��^���HeW����K�����n0St�"y�w>�}�
3�u��yvv�'��!��(h���������ae)��sC�]:r�E���l�'����
d��,BP9���U��.}����F�*����V��L�UO~��6�Yqx�-aWZ����%sI��2��;���i7�Z�L,�Yj�V��n�n��\j�2�`��)����/���g��k���'�7�_7�����"yl�����zOa�-G��Y�m���l�
���h��e��F�N���%k#�
�19�����F^��-$�l+	�W9(�����o������ �b�G�����sYF��l�%&�����6#��V�y�O4�%M�=�ZS�Se���<g|,'��������D-6�Ft;YA]�	R�,9��|���������hc�����-�m<x�n�3h��y�I���4}��t&`w�E�S_�x[�.�����c?�����a@�^vh��eW�r�}��L�����
�`gF�_.V,3�\$J������������6m�1����b�������G��q��\l9d&K�������G��5�����w�Z�/��(��wzu�pu����������[}�k����gy���]�_�����L��5�j���ox�����&d/���P��:�"�����!�0u{^�A*M (��0cE���?��}�9�V����`7L����O�#�gm/�,��	x��&2�$�ZH��H%�iGE}����H)dU�V����PH�m&�Nf�d�(��9�@��_:Q�DM���?����D�z���\m���l�4+(���:�Mo��P��;�D�c��h������wA��M5��;��,�Qq��4���E#�X�������vi���T'+Q��^c�����to\|��4�j���2y�BP�� ����=�	%��9}�p�lV�j�%��@����P�8���|.��M���N[�g����8���*y,�����b�I��u$�W�!Ii�o��@�1�" M&�h����1K��L�f���Q�T*��ls���������sEuw9�e#j'�_m�iRV�j,��5�Q1#�������.X��&��^��LM�2Y�
m��T��a�)���
�Fv��-@_�ctQVN�?,���
e����<��rG�N��r�����K_B2<p��E��
��,����?�/[�9�F�����K����������a6qW^=�6���\�M���gV�����VYy�����KL�&m_rk����ib�.N�H1��c����*U	��w\J"�<r����a��o�2Ti��O��X� ����������N����2D��)����y�%�,7��T�[/�K�yO��+=�-�X�U���z���i��~�"-���E��`C�L�aJyp��i�������M�]Bg�����e���L���
f����X��n��wf����*�*pu�'����U4����@�q8#�(4�D��J�F��g�MEz�r��TAo��`4q
���8,!�I�x������P�����xQA�2,�(���X��NV���\��&���~3
��Xcy<�� ���\�����>h�Z��3!������$�H��X�~�����<�f11D��\�������D�T����m.=S�4C���x�?�*�vr*S���0�'$)��VE��o��-Z��e
P;'>�Z0��g,�_(Q��s���O�@�������5�J6�_i�q3����#d~�6������v2�2����>^��/D�USo9y���G�Q8�r��������-�#4��|�����6��4y���[D�m�hC&��M�KL����%�q��)$�����\�6�:��f���B!#��l�1������Y�

�%�s����IXXQ���D�-Hste	���}����A���30�(/�J���E���WQ�"��h_��N#������`KNZW����Eor�H�J[<�s�&_��3�q������T{X����WSiq�_�vZ��'b��E����Z�[1����L�s@f��v�����
K#��
BA��g{e�>��������)j���5;�2J~
�0������*]��tp{��7�@5�TO��EI��4\��s��;����C��3�V]��K+5K}���-9�kp��%(�x������x�R�r�s�X�k@��#���"q����M*��|�HUM���#is������Cx�B���nSI��t�@zz?�i����M&�������b[Z:i�Oi��C�����"Dt+�47�V�_��JGvx�+L_=�M�dM/�<�QL�-C���ft%�����OU{���g�Wj� �uki�1������P��E�)otL�^�On6���Dtd��~��<f*�<����&����d�X=��G�z~?�l
8�I@��_���?��%�>��k�Y^�!q+�&B4���p�s������Y|1�L�i����t�Ks8%�i�aO��h�����^J���D{K��f�'��sD=���*h�G�Z�<<,��
�IM���������K�������@��3���!4�X5f��2�%`tT��n�)��q�H��P<����,�H��e�A���X�>i�{�Y������C|-Y����p�����q���"��$J�����\�AR`�{��"!����{d>�%����{���@6o�F�/G
}@�;1B�l����g���En�$�s��?Z��C��l(
'���
� ��W�����x���Nog�4�����Y7�U5G�� �V<a�.���`F����u��F[-_����z�m�������`FX/Qr�~���=y�-#����zu20���M���j�jT���P-���!E?K
����o0���l��;?���^f%���Dr7N}??�0uq?d(��V��Lm�I���
����V��jiobt���[�/�R�j�Yb���z�i���~�uA���o�����rC������D�H���H����H�_�M�Uo�5W�(s��O��"���/�8�9���1+A�=���:M�����H���.�d�{{���Zv�g'<��b��(��R����]5U�����^�@���;}C���0��*]2
z����]�B���73rL��7�&^�
�)�b�}���a{
C���:Hi�������C�2���aq����=�nO��)G������-��Z���S�ed����^�s���*�?��\�.M=�f�A49��J7f����jX�uw�]�D�L1!�����w��`�a9��P�>�F�k�A%�>r0��(X�M`�%���	h4yv\�
�r4v5}y�Y^�/7u,k�����4���*��*]�2��� ���O��������>+:�;��g��v"��a�F��e�:w���e@���TUv�*2�{���8�|U��>�ap5����*m5F�?0g���s��"n-a�c��,�I,�S��X��YX�-�\�2�Z����WaZ_v���g+���ifs�zp�R�5���	�nL&��ID)�"X������o$����u7����
�P��z&�r�����k�.|�G7��U�l ��
���R`OJTM!V�X�8���!a��0s����b���������d�k-�I��1��WD#�zxTO:�d.�D�I���b\�I^����X�Y7��`�m����'*F�f�"����A�\��.6a�u{@��W�%k��H���$�;0����D���h*A/n�hI���T�o��b*}}B���S���z����Q7��*l���-������4���d=�V �e������,�a��>�r�'�<�p�=h0�"�B�4�Y�������SoU`LU���'W�.2�g�q?�\�CJ�T7�����_���1��*m��mZ����������~I�>4"hb��*bX������ww7������?x��o�?7fv��	mH
����Nx��N�^����K4�b�)W��������6���\���qO��)hV�g1Ie^��B��qg8�S�1���HB�\Y�-a����@�9l
})��1Q)�#SX-�IT�!�����u�ph�ax�
 ������^`{9;0YZ
unaffected-gustnado.PML.xzapplication/octet-streamDownload
#26Noah Misch
noah@leadboat.com
In reply to: Noah Misch (#25)
Re: "could not reattach to shared memory" on buildfarm member dory

On Sun, Dec 02, 2018 at 09:35:06PM -0800, Noah Misch wrote:

On Tue, Sep 25, 2018 at 08:05:12AM -0700, Noah Misch wrote:

On Mon, Sep 24, 2018 at 01:53:05PM -0400, Tom Lane wrote:

Overall, I agree that neither of these approaches are exactly attractive.
We're paying a heck of a lot of performance or complexity to solve a
problem that shouldn't even be there, and that we don't understand well.
In particular, the theory that some privileged code is injecting a thread
into every new process doesn't square with my results at
/messages/by-id/15345.1525145612@sss.pgh.pa.us

I think our best course of action at this point is to do nothing until
we have a clearer understanding of what's actually happening on dory.
Perhaps such understanding will yield an idea for a less painful fix.

I see.

Could one of you having a dory login use
https://live.sysinternals.com/Procmon.exe to capture process events during
backend startup?

Ping.

Show quoted text

The ideal would be one capture where startup failed reattach
and another where it succeeded, but having the successful run alone would be a
good start. The procedure is roughly this:

- Install PostgreSQL w/ debug symbols.
- Start a postmaster.
- procmon /nomonitor
- procmon "Filter" menu -> Enable Advanced Output
- Ctrl-l, add filter for "Process Name" is "postgres.exe"
- Ctrl-e (starts collecting data)
- psql (leave it running)
- After ~60s, Ctrl-e again in procmon (stops collecting data)
- File -> Save -> PML
- File -> Save -> XML, include stack traces, resolve stack symbols
- Compress the PML and XML files, and mail them here

#27Heath Lord
heath.lord@crunchydata.com
In reply to: Noah Misch (#26)
Re: "could not reattach to shared memory" on buildfarm member dory

On Thu, Jan 17, 2019 at 3:27 AM Noah Misch <noah@leadboat.com> wrote:

On Sun, Dec 02, 2018 at 09:35:06PM -0800, Noah Misch wrote:

On Tue, Sep 25, 2018 at 08:05:12AM -0700, Noah Misch wrote:

On Mon, Sep 24, 2018 at 01:53:05PM -0400, Tom Lane wrote:

Overall, I agree that neither of these approaches are exactly

attractive.

We're paying a heck of a lot of performance or complexity to solve a
problem that shouldn't even be there, and that we don't understand

well.

In particular, the theory that some privileged code is injecting a

thread

into every new process doesn't square with my results at

/messages/by-id/15345.1525145612@sss.pgh.pa.us

I think our best course of action at this point is to do nothing

until

we have a clearer understanding of what's actually happening on dory.
Perhaps such understanding will yield an idea for a less painful fix.

I see.

Could one of you having a dory login use
https://live.sysinternals.com/Procmon.exe to capture process events

during

backend startup?

Ping.

The ideal would be one capture where startup failed reattach
and another where it succeeded, but having the successful run alone

would be a

good start. The procedure is roughly this:

- Install PostgreSQL w/ debug symbols.
- Start a postmaster.
- procmon /nomonitor
- procmon "Filter" menu -> Enable Advanced Output
- Ctrl-l, add filter for "Process Name" is "postgres.exe"
- Ctrl-e (starts collecting data)
- psql (leave it running)
- After ~60s, Ctrl-e again in procmon (stops collecting data)
- File -> Save -> PML
- File -> Save -> XML, include stack traces, resolve stack symbols
- Compress the PML and XML files, and mail them here

Noah,
I apologize for not responding earlier, but we attempting to capture the
information you requested. However, where would you like us to pull the
install for PostgreSQL with the debug symbols in it? We are aware of the
BigSQL and EDB installers, but are unsure if these contain the debug
symbols. Currently this machine has nothing on it other than the necessary
dependencies to build postgres for the community. If you could please give
us some more information on what you would like us to install to gather
this information to help debug the issue we are seeing we would really
appreciate it. Also, if there is any additional information on what we
have installed on the server or how we are configured please just let us
know and we will get you that as soon as possible. Thank you again for
your interest in this issue.

-Heath

#28Noah Misch
noah@leadboat.com
In reply to: Heath Lord (#27)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, Jan 29, 2019 at 11:28:56AM -0500, Heath Lord wrote:

On Thu, Jan 17, 2019 at 3:27 AM Noah Misch <noah@leadboat.com> wrote:

On Sun, Dec 02, 2018 at 09:35:06PM -0800, Noah Misch wrote:

Could one of you having a dory login use
https://live.sysinternals.com/Procmon.exe to capture process events

during

backend startup?
The ideal would be one capture where startup failed reattach
and another where it succeeded, but having the successful run alone

would be a

good start. The procedure is roughly this:

- Install PostgreSQL w/ debug symbols.
- Start a postmaster.
- procmon /nomonitor
- procmon "Filter" menu -> Enable Advanced Output
- Ctrl-l, add filter for "Process Name" is "postgres.exe"
- Ctrl-e (starts collecting data)
- psql (leave it running)
- After ~60s, Ctrl-e again in procmon (stops collecting data)
- File -> Save -> PML
- File -> Save -> XML, include stack traces, resolve stack symbols
- Compress the PML and XML files, and mail them here

I apologize for not responding earlier, but we attempting to capture the
information you requested. However, where would you like us to pull the
install for PostgreSQL with the debug symbols in it? We are aware of the
BigSQL and EDB installers, but are unsure if these contain the debug
symbols.

Please use a locally-built PostgreSQL as similar as possible to what dory's
buildfarm runs produce, except building with debug symbols. A
potentially-convenient way to achieve this would be to add CONFIG=>'Debug' to
build_env of your buildfarm configuration, then run the buildfarm client with
--keepall. By the end of the run, $buildroot/$branch/inst will contain an
installation. (I haven't actually tested that.) You can copy that installation
to any convenient place (e.g. your home directory) and use that copy for the
remaining steps.

Currently this machine has nothing on it other than the necessary
dependencies to build postgres for the community. If you could please give
us some more information on what you would like us to install to gather
this information to help debug the issue we are seeing we would really
appreciate it.

At the moment, I think the only other thing you'll need is to download
https://live.sysinternals.com/Procmon.exe.

Also, if there is any additional information on what we
have installed on the server or how we are configured please just let us
know and we will get you that as soon as possible.

Thanks. I don't have specific questions about that at this time, but feel free
to share any lists or config dumps that seem relevant.

#29Noah Misch
noah@leadboat.com
In reply to: Noah Misch (#25)
1 attachment(s)
Re: "could not reattach to shared memory" on buildfarm member dory

On Sun, Dec 02, 2018 at 09:35:06PM -0800, Noah Misch wrote:

On Tue, Sep 25, 2018 at 08:05:12AM -0700, Noah Misch wrote:

On Mon, Sep 24, 2018 at 01:53:05PM -0400, Tom Lane wrote:

Overall, I agree that neither of these approaches are exactly attractive.
We're paying a heck of a lot of performance or complexity to solve a
problem that shouldn't even be there, and that we don't understand well.
In particular, the theory that some privileged code is injecting a thread
into every new process doesn't square with my results at
/messages/by-id/15345.1525145612@sss.pgh.pa.us

I think our best course of action at this point is to do nothing until
we have a clearer understanding of what's actually happening on dory.
Perhaps such understanding will yield an idea for a less painful fix.

Could one of you having a dory login use
https://live.sysinternals.com/Procmon.exe to capture process events during
backend startup? The ideal would be one capture where startup failed reattach
and another where it succeeded, but having the successful run alone would be a
good start.

Joseph Ayers provided, off-list, the capture from a successful startup. It
wasn't materially different from the one my system generates, so I abandoned
that line of inquiry. Having explored other aspects of the problem, I expect
the attached fix will work. I can reproduce the 4 MiB allocations described
in /messages/by-id/29823.1525132900@sss.pgh.pa.us; a few times per
"vcregress check", they emerge in the middle of PGSharedMemoryReAttach(). On
my system, there's 5.7 MiB of free address space just before UsedShmemSegAddr,
so the 4 MiB allocation fits in there, and PGSharedMemoryReAttach() does not
fail. Still, it's easy to imagine that boring variations between environments
could surface dory's problem by reducing that free 5.7 MiB to, say, 3.9 MiB.

The 4 MiB allocations are stacks for new threads of the default thread
pool[1]https://docs.microsoft.com/en-us/windows/desktop/ProcThread/thread-pools. (I confirmed that by observing their size change when I changed
StackReserveSize in MSBuildProject.pm and by checking all stack pointers with
"thread apply all info frame" in gdb.) The API calls in
PGSharedMemoryReAttach() don't cause the thread creation; it's a timing
coincidence. Commit 2307868 would have worked around the problem, but
pg_usleep() is essentially a no-op on Windows before
pgwin32_signal_initialize() runs. (I'll push Assert(pgwin32_signal_event) to
some functions.) While one fix is to block until all expected threads have
started, that could be notably slow, and I don't know how to implement it
cleanly. I think a better fix is to arrange for the system to prefer a
different address space region for these thread stacks; for details, see the
first comment the patch adds to win32_shmem.c. This works here.

backend startup sees six thread creations:

1. main thread
2. thread created before postgres.exe has control
3. thread created before postgres.exe has control
4. thread created before postgres.exe has control
5. in pgwin32_signal_initialize()
6. in src\backend\port\win32\timer.c:setitimer()

Threads 2-4 exit exactly 30s after creation. If we fail to reattach to shared
memory, we'll exit before reaching code to start 5 or 6.

Threads 2-4 proved to be worker threads of the default thread pool.

[1]: https://docs.microsoft.com/en-us/windows/desktop/ProcThread/thread-pools

Attachments:

shmem-protective-region-v1.patchtext/plain; charset=us-asciiDownload
diff --git a/src/backend/port/win32/signal.c b/src/backend/port/win32/signal.c
index dd91fe5..7d8961f 100644
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c
index bc1e946..eed17c5 100644
--- a/src/backend/port/win32_shmem.c
+++ b/src/backend/port/win32_shmem.c
@@ -17,6 +17,28 @@
 #include "storage/ipc.h"
 #include "storage/pg_shmem.h"
 
+/*
+ * Early in a process's life, Windows asynchronously creates threads for the
+ * process's "default thread pool"
+ * (https://docs.microsoft.com/en-us/windows/desktop/ProcThread/thread-pools).
+ * Occasionally, thread creation allocates a stack after
+ * PGSharedMemoryReAttach() has released UsedShmemSegAddr and before it has
+ * mapped shared memory at UsedShmemSegAddr.  This would cause mapping to fail
+ * if the allocator preferred the just-released region for allocating the new
+ * thread stack.  We observed such failures in some Windows Server 2016
+ * configurations.  To give the system another region to prefer, reserve and
+ * release an additional, protective region immediately before reserving or
+ * releasing shared memory.  The idea is that, if the allocator handed out
+ * REGION1 pages before REGION2 pages at one occasion, it will do so whenever
+ * both regions are free.  Windows Server 2016 exhibits that behavior, and a
+ * system behaving differently would have less need to protect
+ * UsedShmemSegAddr.  The protective region must be at least large enough for
+ * one thread stack.  However, ten times as much is less than 2% of the 32-bit
+ * address space and is negligible relative to the 64-bit address space.
+ */
+#define PROTECTIVE_REGION_SIZE (10 * WIN32_STACK_RLIMIT)
+void	   *ShmemProtectiveRegion = NULL;
+
 HANDLE		UsedShmemSegID = INVALID_HANDLE_VALUE;
 void	   *UsedShmemSegAddr = NULL;
 static Size UsedShmemSegSize = 0;
@@ -192,6 +214,12 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port,
 	Size		orig_size = size;
 	DWORD		flProtect = PAGE_READWRITE;
 
+	ShmemProtectiveRegion = VirtualAlloc(NULL, PROTECTIVE_REGION_SIZE,
+										 MEM_RESERVE, PAGE_NOACCESS);
+	if (ShmemProtectiveRegion == NULL)
+		elog(FATAL, "could not reserve memory region: error code %lu",
+			 GetLastError());
+
 	/* Room for a header? */
 	Assert(size > MAXALIGN(sizeof(PGShmemHeader)));
 
@@ -370,9 +398,9 @@ retry:
  * an already existing shared memory segment, using the handle inherited from
  * the postmaster.
  *
- * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this
- * routine.  The caller must have already restored them to the postmaster's
- * values.
+ * ShmemProtectiveRegion, UsedShmemSegID and UsedShmemSegAddr are implicit
+ * parameters to this routine.  The caller must have already restored them to
+ * the postmaster's values.
  */
 void
 PGSharedMemoryReAttach(void)
@@ -380,12 +408,16 @@ PGSharedMemoryReAttach(void)
 	PGShmemHeader *hdr;
 	void	   *origUsedShmemSegAddr = UsedShmemSegAddr;
 
+	Assert(ShmemProtectiveRegion != NULL);
 	Assert(UsedShmemSegAddr != NULL);
 	Assert(IsUnderPostmaster);
 
 	/*
-	 * Release memory region reservation that was made by the postmaster
+	 * Release memory region reservations made by the postmaster
 	 */
+	if (VirtualFree(ShmemProtectiveRegion, 0, MEM_RELEASE) == 0)
+		elog(FATAL, "failed to release reserved memory region (addr=%p): error code %lu",
+			 ShmemProtectiveRegion, GetLastError());
 	if (VirtualFree(UsedShmemSegAddr, 0, MEM_RELEASE) == 0)
 		elog(FATAL, "failed to release reserved memory region (addr=%p): error code %lu",
 			 UsedShmemSegAddr, GetLastError());
@@ -414,13 +446,14 @@ PGSharedMemoryReAttach(void)
  * The child process startup logic might or might not call PGSharedMemoryDetach
  * after this; make sure that it will be a no-op if called.
  *
- * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this
- * routine.  The caller must have already restored them to the postmaster's
- * values.
+ * ShmemProtectiveRegion, UsedShmemSegID and UsedShmemSegAddr are implicit
+ * parameters to this routine.  The caller must have already restored them to
+ * the postmaster's values.
  */
 void
 PGSharedMemoryNoReAttach(void)
 {
+	Assert(ShmemProtectiveRegion != NULL);
 	Assert(UsedShmemSegAddr != NULL);
 	Assert(IsUnderPostmaster);
 
@@ -447,12 +480,25 @@ PGSharedMemoryNoReAttach(void)
  * Rather, this is for subprocesses that have inherited an attachment and want
  * to get rid of it.
  *
- * UsedShmemSegID and UsedShmemSegAddr are implicit parameters to this
- * routine.
+ * ShmemProtectiveRegion, UsedShmemSegID and UsedShmemSegAddr are implicit
+ * parameters to this routine.
  */
 void
 PGSharedMemoryDetach(void)
 {
+	/*
+	 * Releasing the protective region liberates an unimportant quantity of
+	 * address space, but be tidy.
+	 */
+	if (ShmemProtectiveRegion != NULL)
+	{
+		if (VirtualFree(ShmemProtectiveRegion, 0, MEM_RELEASE) == 0)
+			elog(LOG, "failed to release reserved memory region (addr=%p): error code %lu",
+				 ShmemProtectiveRegion, GetLastError());
+
+		ShmemProtectiveRegion = NULL;
+	}
+
 	/* Unmap the view, if it's mapped */
 	if (UsedShmemSegAddr != NULL)
 	{
@@ -510,19 +556,22 @@ pgwin32_ReserveSharedMemoryRegion(HANDLE hChild)
 {
 	void	   *address;
 
+	Assert(ShmemProtectiveRegion != NULL);
 	Assert(UsedShmemSegAddr != NULL);
 	Assert(UsedShmemSegSize != 0);
 
-	address = VirtualAllocEx(hChild, UsedShmemSegAddr, UsedShmemSegSize,
-							 MEM_RESERVE, PAGE_READWRITE);
+	/* ShmemProtectiveRegion */
+	address = VirtualAllocEx(hChild, ShmemProtectiveRegion,
+							 PROTECTIVE_REGION_SIZE,
+							 MEM_RESERVE, PAGE_NOACCESS);
 	if (address == NULL)
 	{
 		/* Don't use FATAL since we're running in the postmaster */
 		elog(LOG, "could not reserve shared memory region (addr=%p) for child %p: error code %lu",
-			 UsedShmemSegAddr, hChild, GetLastError());
+			 ShmemProtectiveRegion, hChild, GetLastError());
 		return false;
 	}
-	if (address != UsedShmemSegAddr)
+	if (address != ShmemProtectiveRegion)
 	{
 		/*
 		 * Should never happen - in theory if allocation granularity causes
@@ -531,8 +580,23 @@ pgwin32_ReserveSharedMemoryRegion(HANDLE hChild)
 		 * Don't use FATAL since we're running in the postmaster.
 		 */
 		elog(LOG, "reserved shared memory region got incorrect address %p, expected %p",
+			 address, ShmemProtectiveRegion);
+		return false;
+	}
+
+	/* UsedShmemSegAddr */
+	address = VirtualAllocEx(hChild, UsedShmemSegAddr, UsedShmemSegSize,
+							 MEM_RESERVE, PAGE_READWRITE);
+	if (address == NULL)
+	{
+		elog(LOG, "could not reserve shared memory region (addr=%p) for child %p: error code %lu",
+			 UsedShmemSegAddr, hChild, GetLastError());
+		return false;
+	}
+	if (address != UsedShmemSegAddr)
+	{
+		elog(LOG, "reserved shared memory region got incorrect address %p, expected %p",
 			 address, UsedShmemSegAddr);
-		VirtualFreeEx(hChild, address, 0, MEM_RELEASE);
 		return false;
 	}
 
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index fe59963..6ab1dda 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -484,6 +484,7 @@ typedef struct
 #ifndef WIN32
 	unsigned long UsedShmemSegID;
 #else
+	void	   *ShmemProtectiveRegion;
 	HANDLE		UsedShmemSegID;
 #endif
 	void	   *UsedShmemSegAddr;
@@ -6011,6 +6012,9 @@ save_backend_variables(BackendParameters *param, Port *port,
 	param->MyCancelKey = MyCancelKey;
 	param->MyPMChildSlot = MyPMChildSlot;
 
+#ifdef WIN32
+	param->ShmemProtectiveRegion = ShmemProtectiveRegion;
+#endif
 	param->UsedShmemSegID = UsedShmemSegID;
 	param->UsedShmemSegAddr = UsedShmemSegAddr;
 
@@ -6244,6 +6248,9 @@ restore_backend_variables(BackendParameters *param, Port *port)
 	MyCancelKey = param->MyCancelKey;
 	MyPMChildSlot = param->MyPMChildSlot;
 
+#ifdef WIN32
+	ShmemProtectiveRegion = param->ShmemProtectiveRegion;
+#endif
 	UsedShmemSegID = param->UsedShmemSegID;
 	UsedShmemSegAddr = param->UsedShmemSegAddr;
 
diff --git a/src/include/storage/pg_shmem.h b/src/include/storage/pg_shmem.h
index 57d3107..4e1e13d 100644
--- a/src/include/storage/pg_shmem.h
+++ b/src/include/storage/pg_shmem.h
@@ -65,6 +65,7 @@ typedef enum
 extern unsigned long UsedShmemSegID;
 #else
 extern HANDLE UsedShmemSegID;
+extern void *ShmemProtectiveRegion;
 #endif
 extern void *UsedShmemSegAddr;
 
diff --git a/src/port/open.c b/src/port/open.c
index 436cbae..f37afc7 100644
#30Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#29)
Re: "could not reattach to shared memory" on buildfarm member dory

Noah Misch <noah@leadboat.com> writes:

I can reproduce the 4 MiB allocations described
in /messages/by-id/29823.1525132900@sss.pgh.pa.us; a few times per
"vcregress check", they emerge in the middle of PGSharedMemoryReAttach().
The 4 MiB allocations are stacks for new threads of the default thread
pool[1].

Hah! It is great to finally have an understanding of what is happening
here.

I worry that your proposed fix is unstable, in particular this assumption
seems shaky:

+ * ... The idea is that, if the allocator handed out
+ * REGION1 pages before REGION2 pages at one occasion, it will do so whenever
+ * both regions are free.

I wonder whether it's possible to address this by configuring the "default
thread pool" to have only one thread? It seems like the extra threads are
just adding backend startup overhead to no benefit, since we won't use 'em.

regards, tom lane

#31Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#30)
Re: "could not reattach to shared memory" on buildfarm member dory

On Tue, Apr 02, 2019 at 10:09:00AM -0400, Tom Lane wrote:

Noah Misch <noah@leadboat.com> writes:

I can reproduce the 4 MiB allocations described
in /messages/by-id/29823.1525132900@sss.pgh.pa.us; a few times per
"vcregress check", they emerge in the middle of PGSharedMemoryReAttach().
The 4 MiB allocations are stacks for new threads of the default thread
pool[1].

Hah! It is great to finally have an understanding of what is happening
here.

I worry that your proposed fix is unstable, in particular this assumption
seems shaky:

+ * ... The idea is that, if the allocator handed out
+ * REGION1 pages before REGION2 pages at one occasion, it will do so whenever
+ * both regions are free.

True. If Windows changes to prefer allocating from the most recently freed
region, shmem-protective-region-v1.patch would cease to help. It's not
impossible.

I wonder whether it's possible to address this by configuring the "default
thread pool" to have only one thread? It seems like the extra threads are
just adding backend startup overhead to no benefit, since we won't use 'em.

I didn't find a way to configure the pool's size.

Another option is to reattach shared memory earlier, before the default thread
pool starts. A Windows application using only the unavoidable DLLs
(kernel32.dll, ntdll.dll, kernelbase.dll) doesn't get a default thread pool;
the pool starts when one loads ws2_32.dll, ucrtbased.dll, etc. Hence, the
DllMain() function of a DLL that loads early could avoid the problem. (Cygwin
fork() uses that route to remap shared memory, though it also retries failed
forks.) If we proceed that way, we'd add a tiny pg_shmem.dll that appears
early in the load order, just after the unavoidable DLLs. It would extract
applicable parameters from the command line and reattach shared memory. When
it fails, it would set a flag so the usual code can raise an error. Does that
sound more or less attractive than shmem-protective-region-v1.patch?

#32Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noah Misch (#31)
Re: "could not reattach to shared memory" on buildfarm member dory

Noah Misch <noah@leadboat.com> writes:

On Tue, Apr 02, 2019 at 10:09:00AM -0400, Tom Lane wrote:

I worry that your proposed fix is unstable, in particular this assumption
seems shaky:

+ * ... The idea is that, if the allocator handed out
+ * REGION1 pages before REGION2 pages at one occasion, it will do so whenever
+ * both regions are free.

True. If Windows changes to prefer allocating from the most recently freed
region, shmem-protective-region-v1.patch would cease to help. It's not
impossible.

I wonder whether it's possible to address this by configuring the "default
thread pool" to have only one thread? It seems like the extra threads are
just adding backend startup overhead to no benefit, since we won't use 'em.

I didn't find a way to configure the pool's size.

Seems odd ...

Another option is to reattach shared memory earlier, before the default thread
pool starts. A Windows application using only the unavoidable DLLs
(kernel32.dll, ntdll.dll, kernelbase.dll) doesn't get a default thread pool;
the pool starts when one loads ws2_32.dll, ucrtbased.dll, etc. Hence, the
DllMain() function of a DLL that loads early could avoid the problem. (Cygwin
fork() uses that route to remap shared memory, though it also retries failed
forks.) If we proceed that way, we'd add a tiny pg_shmem.dll that appears
early in the load order, just after the unavoidable DLLs. It would extract
applicable parameters from the command line and reattach shared memory. When
it fails, it would set a flag so the usual code can raise an error. Does that
sound more or less attractive than shmem-protective-region-v1.patch?

Well, it definitely sounds like more work. Let's not do such work
until we have to. Your patch has the advantages of being (a) small
and (b) done, and there's much to be said for that.

regards, tom lane

#33Noah Misch
noah@leadboat.com
In reply to: Tom Lane (#32)
Re: "could not reattach to shared memory" on buildfarm member dory

On Sun, Apr 07, 2019 at 12:43:23AM -0400, Tom Lane wrote:

Noah Misch <noah@leadboat.com> writes:

On Tue, Apr 02, 2019 at 10:09:00AM -0400, Tom Lane wrote:

I worry that your proposed fix is unstable, in particular this assumption
seems shaky:

+ * ... The idea is that, if the allocator handed out
+ * REGION1 pages before REGION2 pages at one occasion, it will do so whenever
+ * both regions are free.

True. If Windows changes to prefer allocating from the most recently freed
region, shmem-protective-region-v1.patch would cease to help. It's not
impossible.

I wonder whether it's possible to address this by configuring the "default
thread pool" to have only one thread? It seems like the extra threads are
just adding backend startup overhead to no benefit, since we won't use 'em.

I didn't find a way to configure the pool's size.

Seems odd ...

I think you're expected to create your own thread pool if you're picky about
the size. The default thread pool is for non-picky callers and for Windows
libraries to use internally. The fact that the pool starts before main() also
narrows the use case for configuring it. If there were an API for "block
until all threads of the pool are alive", that would meet our needs nicely.
Needless to say, I didn't find that, either.

Another option is to reattach shared memory earlier, before the default thread
pool starts. A Windows application using only the unavoidable DLLs
(kernel32.dll, ntdll.dll, kernelbase.dll) doesn't get a default thread pool;
the pool starts when one loads ws2_32.dll, ucrtbased.dll, etc. Hence, the
DllMain() function of a DLL that loads early could avoid the problem. (Cygwin
fork() uses that route to remap shared memory, though it also retries failed
forks.) If we proceed that way, we'd add a tiny pg_shmem.dll that appears
early in the load order, just after the unavoidable DLLs. It would extract
applicable parameters from the command line and reattach shared memory. When
it fails, it would set a flag so the usual code can raise an error. Does that
sound more or less attractive than shmem-protective-region-v1.patch?

Well, it definitely sounds like more work. Let's not do such work
until we have to. Your patch has the advantages of being (a) small
and (b) done, and there's much to be said for that.

Works for me. Pushed.