moving from contrib to bin

Started by Peter Eisentrautabout 11 years ago94 messages
#1Peter Eisentraut
peter_e@gmx.net

Let's take another crack at moving stuff out of contrib. Nobody likes
contrib. The task is only finding something that most people like better.

Last time this was attempted, the discussion got lost in exactly which
extensions are worthy enough to be considered official or something like
that. I want to dodge that here by starting at the opposite end:

1. move programs to src/bin/

2. move test things to src/test/ (I had that in my notes, but someone
already did that, so the stars must be aligned.)

3. deal with extensions later

Here are the contrib programs:

oid2name
pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench
vacuumlo

The proposal would basically be to mv contrib/$x src/bin/$x and also
move the reference pages in the documentation.

We could consider alternative arrangements, if there is interest, such
as moving vacuumlo to scripts or moving pg_archivecleanup and pg_standby
into one directory. It doesn't matter very much to me.

There is precedent for this: Some time ago we moved reindexdb from
contrib to scripts.

Besides moving things out of contrib, there is also a practical
motivation for this. Putting both client and server programs into
contrib creates issues for packagers. One would have to create a
separate -contrib-client package to package this properly. Not to
mention packaging a bunch of unrelated extensions with these programs.
If we make these normal programs in src/bin/, packagers can put them
into the normal -client and -server packages, and everything will fall
into place.

Besides, a number of packagers have been treating pg_upgrade specially
and moved it out of contrib, so this would just be catching up with
reality a bit.

Comments?

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#1)
Re: moving from contrib to bin

Peter Eisentraut <peter_e@gmx.net> writes:

Last time this was attempted, the discussion got lost in exactly which
extensions are worthy enough to be considered official or something like
that. I want to dodge that here by starting at the opposite end:
1. move programs to src/bin/

Here are the contrib programs:

oid2name
pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench
vacuumlo

The proposal would basically be to mv contrib/$x src/bin/$x and also
move the reference pages in the documentation.

Personally, I'm good with moving pg_archivecleanup, pg_standby,
pg_upgrade, pg_xlogdump, and pgbench this way. (Although wasn't there
just some discussion about pg_standby being obsolete? If so, shouldn't
we remove it instead of promoting it?) As for the others:

I'm not exactly convinced that we want to encourage packagers to include
either pg_test_fsync or pg_test_timing in standard packages. They are not
all that useful to ordinary users.

oid2name and vacuumlo, besides being of very dubious general utility,
are fails from a namespacing standpoint. If we were to promote them
into standard install components I think a minimum requirement should be
to rename them to pg_something. (oid2name is an entirely bogus name for
what it does, anyway.) That would also be a good opportunity to revisit
their rather-ad-hoc APIs.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Andres Freund
andres@2ndquadrant.com
In reply to: Tom Lane (#2)
Re: moving from contrib to bin

On 2014-12-08 22:50:30 -0500, Tom Lane wrote:

I'm not exactly convinced that we want to encourage packagers to include
either pg_test_fsync or pg_test_timing in standard packages. They are not
all that useful to ordinary users.

I actually think both are quite useful when setting up new systems to
quickly screen for problems. There still is a fairly large number of
virtualized systems with pretty much broken timing functions; and
checking whether fsync actually takes some time is also good thing to do
in virtualized environments - it's not an infrequent thing to see fsyncs
taking unrealistically low time.

Neither is likely to be harmful. So it doesn't seem harmful to move
them.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4Peter Geoghegan
pg@heroku.com
In reply to: Andres Freund (#3)
Re: moving from contrib to bin

On Mon, Dec 8, 2014 at 9:00 PM, Andres Freund <andres@2ndquadrant.com> wrote:

I actually think both are quite useful when setting up new systems to
quickly screen for problems. There still is a fairly large number of
virtualized systems with pretty much broken timing functions; and
checking whether fsync actually takes some time is also good thing to do
in virtualized environments - it's not an infrequent thing to see fsyncs
taking unrealistically low time.

Neither is likely to be harmful. So it doesn't seem harmful to move
them.

+1

--
Peter Geoghegan

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Josh Berkus
josh@agliodbs.com
In reply to: Peter Eisentraut (#1)
Re: moving from contrib to bin

Here are the contrib programs:

oid2name
pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench
vacuumlo

The proposal would basically be to mv contrib/$x src/bin/$x and also
move the reference pages in the documentation.

+1

Considering that all of the above have been around for a while, it's
kind of silly that they're still in contrib. Mostly that just
guarantees that nobody will use them, even when it's appropriate.

The one exception I might make above is pg_standby. What do we need
this for today, exactly?

--
Josh Berkus
PostgreSQL Experts Inc.
http://pgexperts.com

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#6Robert Haas
robertmhaas@gmail.com
In reply to: Peter Eisentraut (#1)
Re: moving from contrib to bin

On Mon, Dec 8, 2014 at 10:26 PM, Peter Eisentraut <peter_e@gmx.net> wrote:

Let's take another crack at moving stuff out of contrib. Nobody likes
contrib. The task is only finding something that most people like better.

I like contrib fine. It's a great place for things to live that are
not quite baked enough for core, but still worth distributing.

oid2name
pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench
vacuumlo

The proposal would basically be to mv contrib/$x src/bin/$x and also
move the reference pages in the documentation.

I think pg_archivecleanup, pg_upgrade, and possibly pgbench have
enough general utility to justify putting them in src/bin, but not the
rest. oid2name, pg_standby, and vacuumlo are probably closer to being
candidates for removal than promotion in my book.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#7Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Eisentraut (#1)
Re: moving from contrib to bin

Peter Eisentraut wrote:

Here are the contrib programs:

oid2name
pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench
vacuumlo

The proposal would basically be to mv contrib/$x src/bin/$x and also
move the reference pages in the documentation.

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

(For pg_upgrade you also need to do something about pg_upgrade_support,
which is good because that is one very ugly crock.)

I agree that oid2name and vacuumlo need to be in a better state to
deserve their promotion to src/bin, if we keep them at all.

In any case I support the move out of contrib of everything except
vacuumlo and oid2name, for reasons already stated by others in the
thread.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#8Bruce Momjian
bruce@momjian.us
In reply to: Alvaro Herrera (#7)
Re: moving from contrib to bin

On Tue, Dec 9, 2014 at 06:10:02PM -0300, Alvaro Herrera wrote:

(For pg_upgrade you also need to do something about pg_upgrade_support,
which is good because that is one very ugly crock.)

FYI, pg_upgrade_support was segregated from pg_upgrade only because we
wanted separate binary and shared object build/install targets.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#9Peter Eisentraut
peter_e@gmx.net
In reply to: Josh Berkus (#5)
Re: moving from contrib to bin

On 12/9/14 1:18 PM, Josh Berkus wrote:

The one exception I might make above is pg_standby. What do we need
this for today, exactly?

This was discussed recently and people wanted to keep it.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#10Peter Eisentraut
peter_e@gmx.net
In reply to: Alvaro Herrera (#7)
Re: moving from contrib to bin

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#11Heikki Linnakangas
hlinnakangas@vmware.com
In reply to: Peter Eisentraut (#10)
Re: moving from contrib to bin

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

- Heikki

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#12Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#8)
Re: moving from contrib to bin

On 12/9/14 4:32 PM, Bruce Momjian wrote:

On Tue, Dec 9, 2014 at 06:10:02PM -0300, Alvaro Herrera wrote:

(For pg_upgrade you also need to do something about pg_upgrade_support,
which is good because that is one very ugly crock.)

FYI, pg_upgrade_support was segregated from pg_upgrade only because we
wanted separate binary and shared object build/install targets.

I think the actual reason is that the makefile structure won't let you
have them both in the same directory. I don't see why you would need
separate install targets.

How about we move these support functions into the backend? It's not
like we don't already have other pg_upgrade hooks baked in all over the
place.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#13Heikki Linnakangas
hlinnakangas@vmware.com
In reply to: Heikki Linnakangas (#11)
Re: moving from contrib to bin

On 12/12/2014 03:11 PM, Heikki Linnakangas wrote:

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

src/sbin might not be a good name for the directory, though. We're not
going to install the programs in /usr/sbin, are we? Maybe src/server-bin
and src/client-bin.

- Heikki

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#14Andres Freund
andres@2ndquadrant.com
In reply to: Heikki Linnakangas (#11)
Re: moving from contrib to bin

On 2014-12-12 15:11:01 +0200, Heikki Linnakangas wrote:

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs, and
packagers put them in different packages too. This should make packagers'
life a little bit easier in the long run.

Wouldn't a make install-server/client targets or something similar
actually achieve the same thing? Seems simpler to maintain to me.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#15Bruce Momjian
bruce@momjian.us
In reply to: Heikki Linnakangas (#13)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 03:13:44PM +0200, Heikki Linnakangas wrote:

On 12/12/2014 03:11 PM, Heikki Linnakangas wrote:

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

src/sbin might not be a good name for the directory, though. We're
not going to install the programs in /usr/sbin, are we? Maybe
src/server-bin and src/client-bin.

I am confused by the above because you are mixing /src and /bin. If we
install the binaries in new directories, that is going to require
multiple adjustments to $PATH --- that doesn't seem like a win, and we
only have 25 binaries in pgsql/bin now (my Debian /usr/bin has 2306
binaries). I assume I am misunderstanding something.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#16Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#12)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 08:11:31AM -0500, Peter Eisentraut wrote:

On 12/9/14 4:32 PM, Bruce Momjian wrote:

On Tue, Dec 9, 2014 at 06:10:02PM -0300, Alvaro Herrera wrote:

(For pg_upgrade you also need to do something about pg_upgrade_support,
which is good because that is one very ugly crock.)

FYI, pg_upgrade_support was segregated from pg_upgrade only because we
wanted separate binary and shared object build/install targets.

I think the actual reason is that the makefile structure won't let you
have them both in the same directory. I don't see why you would need
separate install targets.

How about we move these support functions into the backend? It's not
like we don't already have other pg_upgrade hooks baked in all over the
place.

Yes, we can easily do that, and it makes sense. The functions are
already protected to not do anything unless the server is in binary
upgrade mode. If we move them into the backend I think we need to add a
super-user check as well. The reason we don't have one now is that they
are installed/uninstalled by the super-user as part of the pg_upgrade
process.

Moving pg_upgrade out of contrib is going to give me additional gloating
opportunities at conferences. :-)

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#17Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#2)
Re: moving from contrib to bin

On 12/8/14 10:50 PM, Tom Lane wrote:

oid2name and vacuumlo, besides being of very dubious general utility,
are fails from a namespacing standpoint. If we were to promote them
into standard install components I think a minimum requirement should be
to rename them to pg_something. (oid2name is an entirely bogus name for
what it does, anyway.) That would also be a good opportunity to revisit
their rather-ad-hoc APIs.

I'm going to leave these two out for now.

I'll start investigating whether they can be removed, or replaced by
something else.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#18Peter Eisentraut
peter_e@gmx.net
In reply to: Andres Freund (#14)
Re: moving from contrib to bin

On 12/12/14 8:13 AM, Andres Freund wrote:

Wouldn't a make install-server/client targets or something similar
actually achieve the same thing? Seems simpler to maintain to me.

Adding non-standard makefile targets comes with its own set of
maintenance issues.

Restructuring the source tree and having the existing makefile structure
just work might end up being simpler.

Just to be clear, I'm far from convinced that any of this is worthwhile;
I'm just keeping the conversation going.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#19Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#15)
Re: moving from contrib to bin

Bruce Momjian wrote:

On Fri, Dec 12, 2014 at 03:13:44PM +0200, Heikki Linnakangas wrote:

On 12/12/2014 03:11 PM, Heikki Linnakangas wrote:

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

src/sbin might not be a good name for the directory, though. We're
not going to install the programs in /usr/sbin, are we? Maybe
src/server-bin and src/client-bin.

I am confused by the above because you are mixing /src and /bin. If we
install the binaries in new directories, that is going to require
multiple adjustments to $PATH --- that doesn't seem like a win, and we
only have 25 binaries in pgsql/bin now (my Debian /usr/bin has 2306
binaries). I assume I am misunderstanding something.

We already have src/bin/; the mixture of "src/" and "bin/" predates us.
Of course, the stuff we keep in there is not binaries but source code
that produces binaries.

As for src/sbin/, we wouldn't install anything to the system's
/usr/sbin/ of course, only /usr/bin/, just like the stuff in src/bin/.
But it would be slightly more clear what we keep in each src/ subdir.

I think our current src/bin/ is a misnomer, but it seems late to fix
that. In a greenfield I think we could have "src/clients/" and
"src/srvtools/" or something like that, and everything would install to
/usr/bin. Then there would be no doubt where to move each program from
contrib.

Maybe there is no point to all of this and we should just move it all to
src/bin/ as originally proposed, which is simpler anyway.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#20Andres Freund
andres@2ndquadrant.com
In reply to: Alvaro Herrera (#19)
Re: moving from contrib to bin

On 2014-12-12 11:27:01 -0300, Alvaro Herrera wrote:

We already have src/bin/; the mixture of "src/" and "bin/" predates us.
Of course, the stuff we keep in there is not binaries but source code
that produces binaries.

As for src/sbin/, we wouldn't install anything to the system's
/usr/sbin/ of course, only /usr/bin/, just like the stuff in src/bin/.
But it would be slightly more clear what we keep in each src/ subdir.

I think sbin is a spectactularly bad name, let's not go there. If
anything, make it srvbin or something like that.

I think our current src/bin/ is a misnomer, but it seems late to fix
that. In a greenfield I think we could have "src/clients/" and
"src/srvtools/" or something like that, and everything would install to
/usr/bin. Then there would be no doubt where to move each program from
contrib.

Maybe. We could just do that now - git's file change tracking is good
enough for that kind of move.

Maybe there is no point to all of this and we should just move it all to
src/bin/ as originally proposed, which is simpler anyway.

+1. Packagers already don't use the current boundaries for packaging...

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#21Tom Lane
tgl@sss.pgh.pa.us
In reply to: Heikki Linnakangas (#11)
Re: moving from contrib to bin

Heikki Linnakangas <hlinnakangas@vmware.com> writes:

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

I'm pretty much -1 on relocating anything that's under src/bin already.
The history mess and back-patching pain would outweigh any notional
cleanliness --- and AFAICS it's entirely notional. As an ex-packager
I can tell you that where stuff sits in the source tree makes precisely
*zero* difference to a packager. She's going to do "make install-world"
and then her package recipe will list out which files in the install tree
go into which sub-package. Perhaps it would get clearer to packagers if
we also installed stuff into $INSTALLDIR/sbin, but I doubt that such a
change is going to fly with anyone else. The bin vs sbin distinction
is not universal.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#22Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#12)
Re: moving from contrib to bin

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/9/14 4:32 PM, Bruce Momjian wrote:

On Tue, Dec 9, 2014 at 06:10:02PM -0300, Alvaro Herrera wrote:

(For pg_upgrade you also need to do something about pg_upgrade_support,
which is good because that is one very ugly crock.)

FYI, pg_upgrade_support was segregated from pg_upgrade only because we
wanted separate binary and shared object build/install targets.

I think the actual reason is that the makefile structure won't let you
have them both in the same directory. I don't see why you would need
separate install targets.

How about we move these support functions into the backend? It's not
like we don't already have other pg_upgrade hooks baked in all over the
place.

I don't particularly object to having the C code built into the backend;
there's not that much of it, and if we could static-ize some of the global
variables that are involved presently, it'd be a Good Thing IMO. However,
the current arrangement makes sure that the function are not accessible
except during pg_upgrade, and that seems like a Good Thing as well. So
I think pg_upgrade should continue to have SQL scripts that create and
delete the SQL function definitions for these.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#23Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#18)
Re: moving from contrib to bin

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/12/14 8:13 AM, Andres Freund wrote:

Wouldn't a make install-server/client targets or something similar
actually achieve the same thing? Seems simpler to maintain to me.

Adding non-standard makefile targets comes with its own set of
maintenance issues.

It would be of zero value to packagers anyway; certainly so for those
following the Red Hat tradition, in which you tell the package Makefile
to install everything and then what goes into which subpackage is
sorted out in a separate, subsequent step. Possibly Debian or other
packaging infrastructures do it differently, but I doubt that.

Really, if we want to tell packagers that foo is a client program and
bar is a server-side program, the documentation is where to address it.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#24Andres Freund
andres@2ndquadrant.com
In reply to: Tom Lane (#23)
Re: moving from contrib to bin

On 2014-12-12 10:20:58 -0500, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/12/14 8:13 AM, Andres Freund wrote:

Wouldn't a make install-server/client targets or something similar
actually achieve the same thing? Seems simpler to maintain to me.

Adding non-standard makefile targets comes with its own set of
maintenance issues.

It would be of zero value to packagers anyway; certainly so for those
following the Red Hat tradition, in which you tell the package Makefile
to install everything and then what goes into which subpackage is
sorted out in a separate, subsequent step. Possibly Debian or other
packaging infrastructures do it differently, but I doubt that.

Debian has that step as well - you don't really have to use it, but the
postgres debian packages do so. They already don't adhere to the current
distinction.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#25Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#21)
Re: moving from contrib to bin

Tom Lane wrote:

Heikki Linnakangas <hlinnakangas@vmware.com> writes:

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

I'm pretty much -1 on relocating anything that's under src/bin already.

So let's put the whole bunch under src/bin/ and be done with it.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#26Robert Haas
robertmhaas@gmail.com
In reply to: Alvaro Herrera (#25)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 11:00 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

I'm pretty much -1 on relocating anything that's under src/bin already.

I agree. I can't see packagers putting it anywhere except for
$SOMETHING/bin in the final install, so what do we get out of dividing
it up in some weird way in our tree?

So let's put the whole bunch under src/bin/ and be done with it.

I'm not really convinced this is a very good idea. What do we get out
of moving everything, or even anything, from contrib? It will make
back-patching harder, but more importantly, it will possibly create
the false impression that everything we distribute is on equal
footing. Right now, we've got stuff like vacuumlo in contrib which is
useful but, let's face it, also a cheap hack. If we decide that
executables can no longer live in contrib, then every time somebody
submits something in the future, we've got to decide whether it
deserves parity with psql and pg_dump or whether we shouldn't include
it at all. contrib is a nice middle-ground.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#27Joshua D. Drake
jd@commandprompt.com
In reply to: Tom Lane (#2)
Re: moving from contrib to bin

On 12/08/2014 07:50 PM, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

Last time this was attempted, the discussion got lost in exactly which
extensions are worthy enough to be considered official or something like
that. I want to dodge that here by starting at the opposite end:
1. move programs to src/bin/

Here are the contrib programs:

oid2name
pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench
vacuumlo

The proposal would basically be to mv contrib/$x src/bin/$x and also
move the reference pages in the documentation.

Personally, I'm good with moving pg_archivecleanup, pg_standby,
pg_upgrade, pg_xlogdump, and pgbench this way. (Although wasn't there
just some discussion about pg_standby being obsolete? If so, shouldn't
we remove it instead of promoting it?) As for the others:

Let's not forget pg_upgrade which is arguably the most important of
everything listed.

JD

--
Command Prompt, Inc. - http://www.commandprompt.com/ 503-667-4564
PostgreSQL Support, Training, Professional Services and Development
High Availability, Oracle Conversion, @cmdpromptinc
"If we send our children to Caesar for their education, we should
not be surprised when they come back as Romans."

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#28Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#26)
Re: moving from contrib to bin

Robert Haas <robertmhaas@gmail.com> writes:

I'm not really convinced this is a very good idea. What do we get out
of moving everything, or even anything, from contrib? It will make
back-patching harder, but more importantly, it will possibly create
the false impression that everything we distribute is on equal
footing. Right now, we've got stuff like vacuumlo in contrib which is
useful but, let's face it, also a cheap hack. If we decide that
executables can no longer live in contrib, then every time somebody
submits something in the future, we've got to decide whether it
deserves parity with psql and pg_dump or whether we shouldn't include
it at all. contrib is a nice middle-ground.

Yeah, that's a good point. I think part of the motivation here is the
thought that some of these programs, like pg_upgrade, *should* now be
considered on par with pg_dump et al. But it does not follow that
everything in contrib is, or should be, on that level.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#29Andres Freund
andres@2ndquadrant.com
In reply to: Robert Haas (#26)
Re: moving from contrib to bin

On 2014-12-12 11:14:56 -0500, Robert Haas wrote:

I'm not really convinced this is a very good idea. What do we get out
of moving everything, or even anything, from contrib?

The benefit of moving relevant stuff is that it'll actually be installed
by default when installing postgres on many platforms. That's currently
often not the case. The contrib umbrella, as used by many other
projects, actually justifies not doing so.

I don't think that's a good argument for moving everything, rather the
contrary, but relevant stuff that we properly support should imo be
moved.

It will make back-patching harder

I think the amount of effort a simple renamed directory which wholly
contains a binary creates is acceptable. Just use patch -p4 instead of
patch -p1...

Right now, we've got stuff like vacuumlo in contrib which is
useful but, let's face it, also a cheap hack.

On the other hand, we really don't provide any other solution. Since
large objects are part of core we really ought to provide at least some
support for cleanup.

If we decide that executables can no longer live in contrib, then
every time somebody submits something in the future, we've got to
decide whether it deserves parity with psql and pg_dump or whether we
shouldn't include it at all. contrib is a nice middle-ground.

I think it makes sense to still have it as a middleground for future
things.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#30Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#28)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 11:26 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Robert Haas <robertmhaas@gmail.com> writes:

I'm not really convinced this is a very good idea. What do we get out
of moving everything, or even anything, from contrib? It will make
back-patching harder, but more importantly, it will possibly create
the false impression that everything we distribute is on equal
footing. Right now, we've got stuff like vacuumlo in contrib which is
useful but, let's face it, also a cheap hack. If we decide that
executables can no longer live in contrib, then every time somebody
submits something in the future, we've got to decide whether it
deserves parity with psql and pg_dump or whether we shouldn't include
it at all. contrib is a nice middle-ground.

Yeah, that's a good point. I think part of the motivation here is the
thought that some of these programs, like pg_upgrade, *should* now be
considered on par with pg_dump et al. But it does not follow that
everything in contrib is, or should be, on that level.

Yeah. We have put enough effort collectively into pg_upgrade that I
think it's fair to say that it is on a part with pg_dump. I still
think the architecture there is awfully fragile and we should try to
improve it, but it's very widely-used and people rely on it to work,
which it generally does. And certainly we have put a lot of sweat
into making it work.

I would also say that pg_archivecleanup is a fundamental server tool
and that it belongs in src/bin.

But after that, I get fuzzy. For me, the next tier of things would
consist of pgbench, pg_test_fsync, pg_test_timing, and pg_xlogdump.
Those are all useful, but I would also classify them as optional. If
you are running a PostgreSQL installation, you definitely need initdb
and postgres and pg_dump and pg_dumpall and psql, but you don't
definitely need these. I think they are all robust enough to go in
src/bin, but they are not as necessary as much of the stuff that is in
that directory today, so it's unclear to me whether we want to put
them there.

Finally, there is the stuff that is either hacky or deprecated:
oid2name, pg_standby, vacuumlo. Putting that stuff in src/bin clearly
makes no sense IMV. But I wouldn't necessarily want to remove it all
either.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#31Robert Haas
robertmhaas@gmail.com
In reply to: Andres Freund (#29)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 11:40 AM, Andres Freund <andres@2ndquadrant.com> wrote:

The benefit of moving relevant stuff is that it'll actually be installed
by default when installing postgres on many platforms. That's currently
often not the case. The contrib umbrella, as used by many other
projects, actually justifies not doing so.

Agreed. See my other response for my thoughts on that topic.

It will make back-patching harder

I think the amount of effort a simple renamed directory which wholly
contains a binary creates is acceptable. Just use patch -p4 instead of
patch -p1...

That is fine if you are manually applying a patch that touches only
that directory, but if the patch also touches other stuff then it's
not as simple. And I don't know how well git cherry-pick will follow
the moves.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#32Andres Freund
andres@2ndquadrant.com
In reply to: Robert Haas (#31)
Re: moving from contrib to bin

On 2014-12-12 11:42:57 -0500, Robert Haas wrote:

I think the amount of effort a simple renamed directory which wholly
contains a binary creates is acceptable. Just use patch -p4 instead of
patch -p1...

That is fine if you are manually applying a patch that touches only
that directory, but if the patch also touches other stuff then it's
not as simple.

I think backpatchable commits that touch individual binaries and other
code at the same time are (and ought to be!) pretty rare.

And I don't know how well git cherry-pick will follow
the moves.

Not well if the patch is done in master first.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#33Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#32)
Re: moving from contrib to bin

Andres Freund <andres@2ndquadrant.com> writes:

On 2014-12-12 11:42:57 -0500, Robert Haas wrote:

And I don't know how well git cherry-pick will follow
the moves.

Not well if the patch is done in master first.

FWIW, I always patch master first, and have zero intention of changing
that workflow. (I have given reasons for that in the past, and don't
feel like repeating them right now.) So I'm really not on board with
moving code around without *very* good reasons. This thread hasn't
done very well at coming up with good reasons to move stuff out of
contrib.

In the particular case of pg_upgrade, while it may be now on par
usefulness-wise with src/bin stuff, I think it is and always will
be a special case anyway so far as packagers are concerned; the
reason being that it needs to ride along with back-branch executables.
So I'm not sure that we're making their lives easier by moving it.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#34Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#22)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 10:16:05AM -0500, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/9/14 4:32 PM, Bruce Momjian wrote:

On Tue, Dec 9, 2014 at 06:10:02PM -0300, Alvaro Herrera wrote:

(For pg_upgrade you also need to do something about pg_upgrade_support,
which is good because that is one very ugly crock.)

FYI, pg_upgrade_support was segregated from pg_upgrade only because we
wanted separate binary and shared object build/install targets.

I think the actual reason is that the makefile structure won't let you
have them both in the same directory. I don't see why you would need
separate install targets.

How about we move these support functions into the backend? It's not
like we don't already have other pg_upgrade hooks baked in all over the
place.

I don't particularly object to having the C code built into the backend;
there's not that much of it, and if we could static-ize some of the global
variables that are involved presently, it'd be a Good Thing IMO. However,
the current arrangement makes sure that the function are not accessible
except during pg_upgrade, and that seems like a Good Thing as well. So
I think pg_upgrade should continue to have SQL scripts that create and
delete the SQL function definitions for these.

Oh, hmmm, would pg_upgrade_support still be a separate shared object
file, or would we just link to functions that already exist in the
backend binary, i.e. it is just the SQL-callabiity you want pg_upgrade
to do?

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#35Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Robert Haas (#26)
Re: moving from contrib to bin

Robert Haas wrote:

On Fri, Dec 12, 2014 at 11:00 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

So let's put the whole bunch under src/bin/ and be done with it.

I'm not really convinced this is a very good idea. What do we get out
of moving everything, or even anything, from contrib?

We show that it's no longer "contrib" (== possibly low quality) stuff
anymore. At the beginning of pg_upgrade, for example, we didn't want it
in src/bin because it wasn't stable enough, it was full of bugs, there
were always going to be scenarios it wouldn't handle. Now that is all
gone, so we promote it to the next status level.

It will make back-patching harder,

Yes. We can deal with that. It's not that hard anyway.

but more importantly, it will possibly create the false impression
that everything we distribute is on equal footing.

Stuff in contrib is of lower quality. Some items have improved enough
that we can let them out of that sack now. What we're doing is create
the correct impression that stuff that's no longer in contrib is of
better quality than what remains in contrib.

Right now, we've got stuff like vacuumlo in contrib which is
useful but, let's face it, also a cheap hack.

Then we don't move vacuumlo. I agree we shouldn't move it. (And
neither oid2names.)

If we decide that executables can no longer live in contrib,

Nobody is saying that.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

In reply to: Andres Freund (#24)
Re: moving from contrib to bin

Re: Andres Freund 2014-12-12 <20141212152723.GO31413@awork2.anarazel.de>

On 2014-12-12 10:20:58 -0500, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/12/14 8:13 AM, Andres Freund wrote:

Wouldn't a make install-server/client targets or something similar
actually achieve the same thing? Seems simpler to maintain to me.

Ack. The default install location would still be .../bin, but invoked
from different targets.

Adding non-standard makefile targets comes with its own set of
maintenance issues.

It would be of zero value to packagers anyway; certainly so for those
following the Red Hat tradition, in which you tell the package Makefile
to install everything and then what goes into which subpackage is
sorted out in a separate, subsequent step. Possibly Debian or other
packaging infrastructures do it differently, but I doubt that.

Debian has that step as well - you don't really have to use it, but the
postgres debian packages do so. They already don't adhere to the current
distinction.

The standard Debian package installs into debian/tmp/ and then picks
files from there into individual packages.

However, for PostgreSQL this means lengthy debian/*.install files
(the equivalent of %files in rpm spec speak):

$ wc -l debian/*.install
2 debian/libecpg6.install
1 debian/libecpg-compat3.install
17 debian/libecpg-dev.install
1 debian/libpgtypes3.install
2 debian/libpq5.install
14 debian/libpq-dev.install
39 debian/postgresql-9.4.install
40 debian/postgresql-client-9.4.install
65 debian/postgresql-contrib-9.4.install
2 debian/postgresql-doc-9.4.install
3 debian/postgresql-plperl-9.4.install
2 debian/postgresql-plpython3-9.4.install
3 debian/postgresql-plpython-9.4.install
5 debian/postgresql-pltcl-9.4.install
3 debian/postgresql-server-dev-9.4.install
199 total

If there were separate "install-client", "install-server", and
"install-contrib" targets, that would probably shorten those files
quite a bit. Especially messy is the part where *.so needs to be
sorted into server/contrib, along with an similar large bunch of
binaries.

Of course that would only solve part of the problem (I'm not going to
suggest creating 15 targets for the 15 binary packages we are
building), but it would solve the uglier part.

Christoph
--
cb@df7cb.de | http://www.df7cb.de/

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#37Tom Lane
tgl@sss.pgh.pa.us
In reply to: Christoph Berg (#36)
Re: moving from contrib to bin

Christoph Berg <cb@df7cb.de> writes:

However, for PostgreSQL this means lengthy debian/*.install files
(the equivalent of %files in rpm spec speak):

Right ...

If there were separate "install-client", "install-server", and
"install-contrib" targets, that would probably shorten those files
quite a bit. Especially messy is the part where *.so needs to be
sorted into server/contrib, along with an similar large bunch of
binaries.

Pardon me for not knowing much about Debian packages, but how would
that work exactly? Is it possible to do make install-client, then
package the installed files, then rm -rf the install tree, then
repeat for install-server and install-contrib? In the RPM world
this would never work because the build/install step happens in
toto before the packaging step. Even without that, it seems like
it'd be hard to make it entirely automatic since some files would
be installed in multiple cases (and directories even more so).

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#38Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#37)
Re: moving from contrib to bin

Tom Lane wrote:

Christoph Berg <cb@df7cb.de> writes:

However, for PostgreSQL this means lengthy debian/*.install files
(the equivalent of %files in rpm spec speak):

Right ...

If there were separate "install-client", "install-server", and
"install-contrib" targets, that would probably shorten those files
quite a bit. Especially messy is the part where *.so needs to be
sorted into server/contrib, along with an similar large bunch of
binaries.

Pardon me for not knowing much about Debian packages, but how would
that work exactly? Is it possible to do make install-client, then
package the installed files, then rm -rf the install tree, then
repeat for install-server and install-contrib? In the RPM world
this would never work because the build/install step happens in
toto before the packaging step.

Uh, couldn't you just run "make install-client DESTDIR=.../client" for
client-only files, and so on? You would end up with separate
directories containing files for each subpackage.

Even without that, it seems like it'd be hard to make it entirely
automatic since some files would be installed in multiple cases (and
directories even more so).

Yeah, you would need to fix that somehow.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#39Robert Haas
robertmhaas@gmail.com
In reply to: Alvaro Herrera (#35)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 12:19 PM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

If we decide that executables can no longer live in contrib,

Nobody is saying that.

The reason I though that might be on the table is that the first post
on this thread, at least as I understood it, proposed to move every
executable out of contrib, which would seem to also imply that we
wouldn't put any new ones there. I agree that course of action
doesn't seem to be garnering many votes, but I think it does seem to
have been proposed, unless I am confused.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#40Michael Paquier
michael.paquier@gmail.com
In reply to: Alvaro Herrera (#25)
Re: moving from contrib to bin

On Sat, Dec 13, 2014 at 1:00 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

Tom Lane wrote:

Heikki Linnakangas <hlinnakangas@vmware.com> writes:

On 12/12/2014 03:07 PM, Peter Eisentraut wrote:

On 12/9/14 4:10 PM, Alvaro Herrera wrote:

Maybe it makes sense to have a distinction between client programs and
server programs. Can we have src/sbin/ and move stuff that involves the
server side in there? I think that'd be pg_xlogdump, pg_archivecleanup,
pg_upgrade, pg_test_timing, pg_test_fsync. (If we were feeling bold we
could also move pg_resetxlog, pg_controldata and initdb there.)

I was thinking about that. What do others think?

Sounds good. We already separate server and client programs in the docs,
and packagers put them in different packages too. This should make
packagers' life a little bit easier in the long run.

I'm pretty much -1 on relocating anything that's under src/bin already.

So let's put the whole bunch under src/bin/ and be done with it.

When doing so let's be careful with the MSVC specs, this will need a
set of definitions with AddSimpleFrontend. This should ensure as well
that versioning work that has been done on Windows for this release
cycle is not broken for all the things moved. I don't mind
double-checking that..
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#41Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#22)
Re: moving from contrib to bin

On 12/12/14 10:16 AM, Tom Lane wrote:

I don't particularly object to having the C code built into the backend;
there's not that much of it, and if we could static-ize some of the global
variables that are involved presently, it'd be a Good Thing IMO. However,
the current arrangement makes sure that the function are not accessible
except during pg_upgrade, and that seems like a Good Thing as well. So
I think pg_upgrade should continue to have SQL scripts that create and
delete the SQL function definitions for these.

That won't actually work very easily. LANGUAGE internal functions need
to be in fmgr_builtins, and the only way to get them there is by listing
them in pg_proc.h. (We could drop the functions in initdb, but seems
kind of silly.)

The functions do already check themselves that they are called in binary
upgrade mode, so exposing them in pg_proc doesn't seem risky.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#42Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#37)
Re: moving from contrib to bin

On 12/12/14 3:20 PM, Tom Lane wrote:

Pardon me for not knowing much about Debian packages, but how would
that work exactly? Is it possible to do make install-client, then
package the installed files, then rm -rf the install tree, then
repeat for install-server and install-contrib? In the RPM world
this would never work because the build/install step happens in
toto before the packaging step.

I don't know exactly what Christoph had in mind, but the short answer to
your question is: Yes, that is possible. Almost anything is possible.
There are many tools available at various levels of abstraction that
facility common patterns, but you can also do everything by hand, as
long as you produce the right *.deb files at the right location at the
end. The only thing stopping you is your sanity.

However, other packaging systems clearly don't work that way, and so
designing something that would only work for one packaging system
doesn't seem worthwhile. And we don't even know whether and how it
would work anyway.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#43Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#41)
Re: moving from contrib to bin

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/12/14 10:16 AM, Tom Lane wrote:

I think pg_upgrade should continue to have SQL scripts that create and
delete the SQL function definitions for these.

That won't actually work very easily. LANGUAGE internal functions need
to be in fmgr_builtins, and the only way to get them there is by listing
them in pg_proc.h. (We could drop the functions in initdb, but seems
kind of silly.)

Oh, good point.

The functions do already check themselves that they are called in binary
upgrade mode, so exposing them in pg_proc doesn't seem risky.

Fair enough ... binary upgrade mode is not readily accessible, right?

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#44Peter Eisentraut
peter_e@gmx.net
In reply to: Andres Freund (#32)
Re: moving from contrib to bin

On 12/12/14 11:45 AM, Andres Freund wrote:

On 2014-12-12 11:42:57 -0500, Robert Haas wrote:

I think the amount of effort a simple renamed directory which wholly
contains a binary creates is acceptable. Just use patch -p4 instead of
patch -p1...

That is fine if you are manually applying a patch that touches only
that directory, but if the patch also touches other stuff then it's
not as simple.

I think backpatchable commits that touch individual binaries and other
code at the same time are (and ought to be!) pretty rare.

And I don't know how well git cherry-pick will follow
the moves.

Not well if the patch is done in master first.

It does work. I have tried it with the changes I'm working on.

There might very well be limits to the cleverness of these tools, but if
you know of a fundamental reason why this would be a problem, let's
please hear it.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#45Peter Eisentraut
peter_e@gmx.net
In reply to: Robert Haas (#26)
Re: moving from contrib to bin

On 12/12/14 11:14 AM, Robert Haas wrote:

contrib is a nice middle-ground.

I respect that view. But if we consider contrib a place where things
can try to mature, then there must be a way to move things out of there
once they have matured. If it turns out that moving things out of
contrib causes major problems, then we must reconsider that system and
find a different process for maturing things (e.g., a makefile flag,
just a random idea). Therefore, I think it's worth trying this. We can
do it piece by piece.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#46Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#43)
Re: moving from contrib to bin

On Fri, Dec 12, 2014 at 08:57:55PM -0500, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

On 12/12/14 10:16 AM, Tom Lane wrote:

I think pg_upgrade should continue to have SQL scripts that create and
delete the SQL function definitions for these.

That won't actually work very easily. LANGUAGE internal functions need
to be in fmgr_builtins, and the only way to get them there is by listing
them in pg_proc.h. (We could drop the functions in initdb, but seems
kind of silly.)

Oh, good point.

The functions do already check themselves that they are called in binary
upgrade mode, so exposing them in pg_proc doesn't seem risky.

Fair enough ... binary upgrade mode is not readily accessible, right?

Well, the postmaster allows anyone to use the flag, while the backends
have:

case 'b':
/* Undocumented flag used for binary upgrades */
if (secure)
IsBinaryUpgrade = true;
break;

which means it can only be passed in from the postmaster. I think only
the super-user can set postmaster options.

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

In reply to: Alvaro Herrera (#38)
Re: moving from contrib to bin

Re: Alvaro Herrera 2014-12-12 <20141212203700.GB1768@alvh.no-ip.org>

Pardon me for not knowing much about Debian packages, but how would
that work exactly? Is it possible to do make install-client, then
package the installed files, then rm -rf the install tree, then
repeat for install-server and install-contrib? In the RPM world
this would never work because the build/install step happens in
toto before the packaging step.

Uh, couldn't you just run "make install-client DESTDIR=.../client" for
client-only files, and so on? You would end up with separate
directories containing files for each subpackage.

Exactly. You don't need to use DESTDIR=debian/tmp, you can "make
install-client DESTDIR=$(CURDIR)/debian/postgresql-client-9.4" and
skip the intermediate location for some of the files.

Even without that, it seems like it'd be hard to make it entirely
automatic since some files would be installed in multiple cases (and
directories even more so).

Yeah, you would need to fix that somehow.

Directories shipped in multiple packages are not a problem for dpkg
(/usr/bin!). Files must not be installed twice, but if that happened,
I'd deem that a bug in the Makefile.

The src/contrib/doc (and config) directories already have separate
install targets. These do exactly what we need for server/contrib/doc
installation, so I'll likely move to using these to remove some
complexity from debian/*.install.

On top of that, a separate "install-client" or "make -C client
install" target would be very nice, as currently not only the client
binaries have to be picked from the server tree, but also the manpages
and locale files.

The same would be nice for end-users who just want a client install
when building from source. At the moment they need to install the full
server.

Christoph
--
cb@df7cb.de | http://www.df7cb.de/

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#48Peter Eisentraut
peter_e@gmx.net
In reply to: Peter Eisentraut (#1)
9 attachment(s)
Re: moving from contrib to bin

Here is a patch series to move

pg_archivecleanup
pg_standby
pg_test_fsync
pg_test_timing
pg_upgrade
pg_xlogdump
pgbench

from contrib/ to src/bin/.

Move people didn't like moving oid2name and vacuumlo, which I
understand. So I'll leave those for now.

I have also included a patch to move pg_upgrade_support into the
backend, as discussed.

Open issues/discussion points:

- no Windows build system support yet

- I didn't move the source of the man pages to .../sgml/ref. This could
be done.

- I didn't rename to the SGML ids of the man pages to git the patter of
the other applications, because that would change the name of the HTML
pages.

- We have traditionally kept an individual author acknowledgement in the
man pages for contrib items. Should those be removed now?

Attachments:

0001-Sort-SUBDIRS-variable-in-src-bin-Makefile.patchapplication/x-patch; name=0001-Sort-SUBDIRS-variable-in-src-bin-Makefile.patchDownload
From 0a4b9a4eaf930b8e14b4b3e2077ca7706a65ab6a Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:58 -0500
Subject: [PATCH 1/9] Sort SUBDIRS variable in src/bin/Makefile

The previous order appears to have been historically grown randomness.
---
 src/bin/Makefile | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/bin/Makefile b/src/bin/Makefile
index f03cc42..f0589f3 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -13,8 +13,16 @@ subdir = src/bin
 top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
-SUBDIRS = initdb pg_ctl pg_dump \
-	psql scripts pg_config pg_controldata pg_resetxlog pg_basebackup
+SUBDIRS = \
+	initdb \
+	pg_basebackup \
+	pg_config \
+	pg_controldata \
+	pg_ctl \
+	pg_dump \
+	pg_resetxlog \
+	psql \
+	scripts
 
 ifeq ($(PORTNAME), win32)
 SUBDIRS += pgevent
-- 
2.2.0

0002-Move-pg_archivecleanup-from-contrib-to-src-bin.patchapplication/x-patch; name=0002-Move-pg_archivecleanup-from-contrib-to-src-bin.patchDownload
From 403955c76136960d7d444e946ba2c20110d7e263 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:58 -0500
Subject: [PATCH 2/9] Move pg_archivecleanup from contrib/ to src/bin/

---
 contrib/Makefile                                       |  1 -
 contrib/pg_archivecleanup/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                              |  1 -
 doc/src/sgml/reference.sgml                            |  1 +
 src/bin/Makefile                                       |  1 +
 {contrib => src/bin}/pg_archivecleanup/.gitignore      |  0
 src/bin/pg_archivecleanup/Makefile                     | 14 ++++++++++++++
 .../bin}/pg_archivecleanup/pg_archivecleanup.c         |  2 +-
 8 files changed, 17 insertions(+), 21 deletions(-)
 delete mode 100644 contrib/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/.gitignore (100%)
 create mode 100644 src/bin/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/pg_archivecleanup.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 195d447..c56050e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -28,7 +28,6 @@ SUBDIRS = \
 		oid2name	\
 		pageinspect	\
 		passwordcheck	\
-		pg_archivecleanup \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
diff --git a/contrib/pg_archivecleanup/Makefile b/contrib/pg_archivecleanup/Makefile
deleted file mode 100644
index ab52390..0000000
--- a/contrib/pg_archivecleanup/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_archivecleanup/Makefile
-
-PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
-PGAPPICON = win32
-
-PROGRAM = pg_archivecleanup
-OBJS	= pg_archivecleanup.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_archivecleanup
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index a698d0f..f21fa14 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ <title>Server Applications</title>
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgarchivecleanup;
  &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 10c9a6d..62267db 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -257,6 +257,7 @@ <title>PostgreSQL Server Applications</title>
   </partintro>
 
    &initdb;
+   &pgarchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index f0589f3..0e7b183 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
 	initdb \
+	pg_archivecleanup \
 	pg_basebackup \
 	pg_config \
 	pg_controldata \
diff --git a/contrib/pg_archivecleanup/.gitignore b/src/bin/pg_archivecleanup/.gitignore
similarity index 100%
rename from contrib/pg_archivecleanup/.gitignore
rename to src/bin/pg_archivecleanup/.gitignore
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
new file mode 100644
index 0000000..5df86eb
--- /dev/null
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_archivecleanup/Makefile
+
+PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
+PGAPPICON = win32
+
+subdir = src/bin/pg_archivecleanup
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_archivecleanup
+OBJS	= pg_archivecleanup.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c
similarity index 99%
rename from contrib/pg_archivecleanup/pg_archivecleanup.c
rename to src/bin/pg_archivecleanup/pg_archivecleanup.c
index 97225a8..2ff2a27 100644
--- a/contrib/pg_archivecleanup/pg_archivecleanup.c
+++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_archivecleanup/pg_archivecleanup.c
+ * src/bin/pg_archivecleanup/pg_archivecleanup.c
  *
  * pg_archivecleanup.c
  *
-- 
2.2.0

0003-Move-pg_standby-from-contrib-to-src-bin.patchapplication/x-patch; name=0003-Move-pg_standby-from-contrib-to-src-bin.patchDownload
From 770112a5ee2c5e6df04fc540b93bbc596de98a4e Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:58 -0500
Subject: [PATCH 3/9] Move pg_standby from contrib/ to src/bin/

---
 contrib/Makefile                             |  1 -
 contrib/pg_standby/Makefile                  | 18 ------------------
 doc/src/sgml/contrib.sgml                    |  1 -
 doc/src/sgml/reference.sgml                  |  1 +
 src/bin/Makefile                             |  1 +
 {contrib => src/bin}/pg_standby/.gitignore   |  0
 src/bin/pg_standby/Makefile                  | 14 ++++++++++++++
 {contrib => src/bin}/pg_standby/pg_standby.c |  2 +-
 8 files changed, 17 insertions(+), 21 deletions(-)
 delete mode 100644 contrib/pg_standby/Makefile
 rename {contrib => src/bin}/pg_standby/.gitignore (100%)
 create mode 100644 src/bin/pg_standby/Makefile
 rename {contrib => src/bin}/pg_standby/pg_standby.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c56050e..1732443 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -31,7 +31,6 @@ SUBDIRS = \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
-		pg_standby	\
 		pg_stat_statements \
 		pg_test_fsync	\
 		pg_test_timing	\
diff --git a/contrib/pg_standby/Makefile b/contrib/pg_standby/Makefile
deleted file mode 100644
index 0bca2f8..0000000
--- a/contrib/pg_standby/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_standby/Makefile
-
-PGFILEDESC = "pg_standby - supports creation of a warm standby"
-PGAPPICON = win32
-
-PROGRAM = pg_standby
-OBJS	= pg_standby.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_standby
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index f21fa14..087cd9f 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ <title>Server Applications</title>
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 62267db..d47272a 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -261,6 +261,7 @@ <title>PostgreSQL Server Applications</title>
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgstandby;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 0e7b183..6026b83 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_standby \
 	psql \
 	scripts
 
diff --git a/contrib/pg_standby/.gitignore b/src/bin/pg_standby/.gitignore
similarity index 100%
rename from contrib/pg_standby/.gitignore
rename to src/bin/pg_standby/.gitignore
diff --git a/src/bin/pg_standby/Makefile b/src/bin/pg_standby/Makefile
new file mode 100644
index 0000000..d45a47d
--- /dev/null
+++ b/src/bin/pg_standby/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_standby/Makefile
+
+PGFILEDESC = "pg_standby - supports creation of a warm standby"
+PGAPPICON = win32
+
+subdir = src/bin/pg_standby
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_standby
+OBJS	= pg_standby.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_standby/pg_standby.c b/src/bin/pg_standby/pg_standby.c
similarity index 99%
rename from contrib/pg_standby/pg_standby.c
rename to src/bin/pg_standby/pg_standby.c
index d6b1692..1d45cbf 100644
--- a/contrib/pg_standby/pg_standby.c
+++ b/src/bin/pg_standby/pg_standby.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_standby/pg_standby.c
+ * src/bin/pg_standby/pg_standby.c
  *
  *
  * pg_standby.c
-- 
2.2.0

0004-Move-pg_xlogdump-from-contrib-to-src-bin.patchapplication/x-patch; name=0004-Move-pg_xlogdump-from-contrib-to-src-bin.patchDownload
From 1209761baff42f462907b25b0a9c64c04399bc32 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:58 -0500
Subject: [PATCH 4/9] Move pg_xlogdump from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_xlogdump/.gitignore    |  0
 {contrib => src/bin}/pg_xlogdump/Makefile      | 19 ++++++++-----------
 {contrib => src/bin}/pg_xlogdump/compat.c      |  2 +-
 {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.c    |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.h    |  2 +-
 10 files changed, 14 insertions(+), 17 deletions(-)
 rename {contrib => src/bin}/pg_xlogdump/.gitignore (100%)
 rename {contrib => src/bin}/pg_xlogdump/Makefile (76%)
 rename {contrib => src/bin}/pg_xlogdump/compat.c (98%)
 rename {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c (99%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.c (96%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.h (91%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 1732443..8f0d926 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -41,7 +41,6 @@ SUBDIRS = \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
-		pg_xlogdump	\
 		postgres_fdw	\
 		seg		\
 		spi		\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 087cd9f..dbe9d0a 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -205,6 +205,5 @@ <title>Server Applications</title>
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
- &pgxlogdump;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index d47272a..de2cdff 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -262,6 +262,7 @@ <title>PostgreSQL Server Applications</title>
    &pgCtl;
    &pgResetxlog;
    &pgstandby;
+   &pgxlogdump;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 6026b83..87f5c70 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_standby \
+	pg_xlogdump \
 	psql \
 	scripts
 
diff --git a/contrib/pg_xlogdump/.gitignore b/src/bin/pg_xlogdump/.gitignore
similarity index 100%
rename from contrib/pg_xlogdump/.gitignore
rename to src/bin/pg_xlogdump/.gitignore
diff --git a/contrib/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
similarity index 76%
rename from contrib/pg_xlogdump/Makefile
rename to src/bin/pg_xlogdump/Makefile
index 30a8706..ab8597b 100644
--- a/contrib/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,28 +1,25 @@
-# contrib/pg_xlogdump/Makefile
+# src/bin/pg_xlogdump/Makefile
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
 PGAPPICON=win32
 
+subdir = src/bin/pg_xlogdump
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
+override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
 EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
 
-ifdef USE_PGXS
-$(error "pg_xlogdump cannot be built with PGXS")
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
-subdir = contrib/pg_xlogdump
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-
-
-override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
diff --git a/contrib/pg_xlogdump/compat.c b/src/bin/pg_xlogdump/compat.c
similarity index 98%
rename from contrib/pg_xlogdump/compat.c
rename to src/bin/pg_xlogdump/compat.c
index 6ca7012..5c07e1e 100644
--- a/contrib/pg_xlogdump/compat.c
+++ b/src/bin/pg_xlogdump/compat.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2013-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		contrib/pg_xlogdump/compat.c
+ *		src/bin/pg_xlogdump/compat.c
  *
  * This file contains client-side implementations for various backend
  * functions that the rm_desc functions in *desc.c files rely on.
diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
similarity index 99%
rename from contrib/pg_xlogdump/pg_xlogdump.c
rename to src/bin/pg_xlogdump/pg_xlogdump.c
index 9f05e25..f767a97 100644
--- a/contrib/pg_xlogdump/pg_xlogdump.c
+++ b/src/bin/pg_xlogdump/pg_xlogdump.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2013-2014, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		  contrib/pg_xlogdump/pg_xlogdump.c
+ *		  src/bin/pg_xlogdump/pg_xlogdump.c
  *-------------------------------------------------------------------------
  */
 
diff --git a/contrib/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c
similarity index 96%
rename from contrib/pg_xlogdump/rmgrdesc.c
rename to src/bin/pg_xlogdump/rmgrdesc.c
index 180818d..4fb0a00 100644
--- a/contrib/pg_xlogdump/rmgrdesc.c
+++ b/src/bin/pg_xlogdump/rmgrdesc.c
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers definition
  *
- * contrib/pg_xlogdump/rmgrdesc.c
+ * src/bin/pg_xlogdump/rmgrdesc.c
  */
 #define FRONTEND 1
 #include "postgres.h"
diff --git a/contrib/pg_xlogdump/rmgrdesc.h b/src/bin/pg_xlogdump/rmgrdesc.h
similarity index 91%
rename from contrib/pg_xlogdump/rmgrdesc.h
rename to src/bin/pg_xlogdump/rmgrdesc.h
index aec4418..5440f94 100644
--- a/contrib/pg_xlogdump/rmgrdesc.h
+++ b/src/bin/pg_xlogdump/rmgrdesc.h
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers declaration
  *
- * contrib/pg_xlogdump/rmgrdesc.h
+ * src/bin/pg_xlogdump/rmgrdesc.h
  */
 #ifndef RMGRDESC_H
 #define RMGRDESC_H
-- 
2.2.0

0005-Move-pgbench-from-contrib-to-src-bin.patchapplication/x-patch; name=0005-Move-pgbench-from-contrib-to-src-bin.patchDownload
From 0bec76a953bded9e61dd31cbf7ec9cc96a0493f6 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:58 -0500
Subject: [PATCH 5/9] Move pgbench from contrib/ to src/bin/

---
 contrib/Makefile                        |  1 -
 doc/src/sgml/contrib.sgml               |  1 -
 doc/src/sgml/reference.sgml             |  1 +
 src/bin/Makefile                        |  1 +
 {contrib => src/bin}/pgbench/.gitignore |  0
 {contrib => src/bin}/pgbench/Makefile   | 18 +++++++-----------
 {contrib => src/bin}/pgbench/pgbench.c  |  2 +-
 7 files changed, 10 insertions(+), 14 deletions(-)
 rename {contrib => src/bin}/pgbench/.gitignore (100%)
 rename {contrib => src/bin}/pgbench/Makefile (59%)
 rename {contrib => src/bin}/pgbench/pgbench.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 8f0d926..12c7500 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -37,7 +37,6 @@ SUBDIRS = \
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
-		pgbench		\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index dbe9d0a..60c07ea 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -187,7 +187,6 @@ <title>Client Applications</title>
   </para>
 
  &oid2name;
- &pgbench;
  &vacuumlo;
  </sect1>
 
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index de2cdff..a839af7 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -230,6 +230,7 @@ <title>PostgreSQL Client Applications</title>
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
+   &pgbench;
    &pgConfig;
    &pgDump;
    &pgDumpall;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 87f5c70..39d7e7d 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_standby \
 	pg_xlogdump \
+	pgbench \
 	psql \
 	scripts
 
diff --git a/contrib/pgbench/.gitignore b/src/bin/pgbench/.gitignore
similarity index 100%
rename from contrib/pgbench/.gitignore
rename to src/bin/pgbench/.gitignore
diff --git a/contrib/pgbench/Makefile b/src/bin/pgbench/Makefile
similarity index 59%
rename from contrib/pgbench/Makefile
rename to src/bin/pgbench/Makefile
index b8e2fc8..de4863c 100644
--- a/contrib/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,24 +1,20 @@
-# contrib/pgbench/Makefile
+# src/bin/pgbench/Makefile
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
 
+subdir = src/bin/pgbench
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pgbench
 OBJS	= pgbench.o $(WIN32RES)
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgbench
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
diff --git a/contrib/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
similarity index 99%
rename from contrib/pgbench/pgbench.c
rename to src/bin/pgbench/pgbench.c
index 3453a1f..616c986 100644
--- a/contrib/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * contrib/pgbench/pgbench.c
+ * src/bin/pgbench/pgbench.c
  * Copyright (c) 2000-2014, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
-- 
2.2.0

0006-Move-pg_test_fsync-from-contrib-to-src-bin.patchapplication/x-patch; name=0006-Move-pg_test_fsync-from-contrib-to-src-bin.patchDownload
From 94101dd7ac2c93ea7958b6e6d29c5c039fb63fdb Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:59 -0500
Subject: [PATCH 6/9] Move pg_test_fsync from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_test_fsync/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_test_fsync/.gitignore      |  0
 src/bin/pg_test_fsync/Makefile                     | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c |  0
 8 files changed, 16 insertions(+), 20 deletions(-)
 delete mode 100644 contrib/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/.gitignore (100%)
 create mode 100644 src/bin/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 12c7500..6809ec8 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -32,7 +32,6 @@ SUBDIRS = \
 		pg_freespacemap \
 		pg_prewarm	\
 		pg_stat_statements \
-		pg_test_fsync	\
 		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile
deleted file mode 100644
index 15afba7..0000000
--- a/contrib/pg_test_fsync/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_test_fsync/Makefile
-
-PGFILEDESC = "pg_test_fsync - test various disk sync methods"
-PGAPPICON = win32
-
-PROGRAM  = pg_test_fsync
-OBJS = pg_test_fsync.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_test_fsync
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 60c07ea..57f4bbf 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -201,7 +201,6 @@ <title>Server Applications</title>
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
  </sect1>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index a839af7..c766c7b 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -263,6 +263,7 @@ <title>PostgreSQL Server Applications</title>
    &pgCtl;
    &pgResetxlog;
    &pgstandby;
+   &pgtestfsync;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 39d7e7d..e628a2c 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_standby \
+	pg_test_fsync \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
similarity index 100%
rename from contrib/pg_test_fsync/.gitignore
rename to src/bin/pg_test_fsync/.gitignore
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..e8d1952
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_fsync
+OBJS = pg_test_fsync.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
similarity index 100%
rename from contrib/pg_test_fsync/pg_test_fsync.c
rename to src/bin/pg_test_fsync/pg_test_fsync.c
-- 
2.2.0

0007-Move-pg_test_timing-from-contrib-to-src-bin.patchapplication/x-patch; name=0007-Move-pg_test_timing-from-contrib-to-src-bin.patchDownload
From 01401e07f45dc51762080a0f09e2d6625b59233e Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:59 -0500
Subject: [PATCH 7/9] Move pg_test_timing from contrib/ to src/bin/

---
 contrib/Makefile                                     |  1 -
 contrib/pg_test_timing/Makefile                      | 18 ------------------
 doc/src/sgml/contrib.sgml                            |  1 -
 doc/src/sgml/reference.sgml                          |  1 +
 src/bin/Makefile                                     |  1 +
 {contrib => src/bin}/pg_test_timing/.gitignore       |  0
 src/bin/pg_test_timing/Makefile                      | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_timing/pg_test_timing.c |  0
 8 files changed, 16 insertions(+), 20 deletions(-)
 delete mode 100644 contrib/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/.gitignore (100%)
 create mode 100644 src/bin/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/pg_test_timing.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 6809ec8..6ff409b 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -32,7 +32,6 @@ SUBDIRS = \
 		pg_freespacemap \
 		pg_prewarm	\
 		pg_stat_statements \
-		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
diff --git a/contrib/pg_test_timing/Makefile b/contrib/pg_test_timing/Makefile
deleted file mode 100644
index 8b37aa8..0000000
--- a/contrib/pg_test_timing/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_test_timing/Makefile
-
-PGFILEDESC = "pg_test_timing - test timing overhead"
-PGAPPICON = win32
-
-PROGRAM  = pg_test_timing
-OBJS = pg_test_timing.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_test_timing
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 57f4bbf..aa47634 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -201,7 +201,6 @@ <title>Server Applications</title>
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgtesttiming;
  &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index c766c7b..ac0ee62 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -264,6 +264,7 @@ <title>PostgreSQL Server Applications</title>
    &pgResetxlog;
    &pgstandby;
    &pgtestfsync;
+   &pgtesttiming;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index e628a2c..1e65f2e 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_standby \
 	pg_test_fsync \
+	pg_test_timing \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_timing/.gitignore b/src/bin/pg_test_timing/.gitignore
similarity index 100%
rename from contrib/pg_test_timing/.gitignore
rename to src/bin/pg_test_timing/.gitignore
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
new file mode 100644
index 0000000..f96d2e9
--- /dev/null
+++ b/src/bin/pg_test_timing/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_timing/Makefile
+
+PGFILEDESC = "pg_test_timing - test timing overhead"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_timing
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_timing
+OBJS = pg_test_timing.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c
similarity index 100%
rename from contrib/pg_test_timing/pg_test_timing.c
rename to src/bin/pg_test_timing/pg_test_timing.c
-- 
2.2.0

0008-Integrate-pg_upgrade_support-module-into-backend.patchapplication/x-patch; name=0008-Integrate-pg_upgrade_support-module-into-backend.patchDownload
From 7062fabcb4a8fc4e01460c6377bf14cf45b66db3 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:59 -0500
Subject: [PATCH 8/9] Integrate pg_upgrade_support module into backend

Previously, these functions were created in a schema "binary_upgrade",
which was deleted after pg_upgrade was finished.  Because we don't want
to keep that schema around permanently, move them to pg_catalog but
rename them with a binary_upgrade_... prefix.

The provided functions are only small wrappers around global variables
that were added specifically for pg_upgrade use, so keeping the module
separate does not create any modularity.

The functions still check that they are only called in binary upgrade
mode, so it is not possible to call these during normal operation.
---
 contrib/Makefile                                   |   1 -
 contrib/pg_upgrade/dump.c                          |   2 +-
 contrib/pg_upgrade/function.c                      | 113 ---------------------
 contrib/pg_upgrade/pg_upgrade.c                    |  27 -----
 contrib/pg_upgrade/pg_upgrade.h                    |   2 -
 contrib/pg_upgrade/test.sh                         |   1 -
 contrib/pg_upgrade_support/Makefile                |  16 ---
 doc/src/sgml/pgupgrade.sgml                        |   5 +-
 src/backend/catalog/heap.c                         |   2 +-
 src/backend/catalog/index.c                        |   2 +-
 src/backend/catalog/pg_enum.c                      |   2 +-
 src/backend/catalog/pg_type.c                      |   2 +-
 src/backend/catalog/toasting.c                     |   2 +-
 src/backend/commands/typecmds.c                    |   2 +-
 src/backend/commands/user.c                        |   2 +-
 src/backend/utils/adt/Makefile                     |   2 +-
 .../backend/utils/adt}/pg_upgrade_support.c        |  45 ++++----
 src/bin/pg_dump/pg_dump.c                          |  18 ++--
 src/bin/pg_dump/pg_dumpall.c                       |   2 +-
 src/include/catalog/pg_proc.h                      |  20 ++++
 20 files changed, 60 insertions(+), 208 deletions(-)
 delete mode 100644 contrib/pg_upgrade_support/Makefile
 rename {contrib/pg_upgrade_support => src/backend/utils/adt}/pg_upgrade_support.c (73%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 6ff409b..c20d4fe 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -34,7 +34,6 @@ SUBDIRS = \
 		pg_stat_statements \
 		pg_trgm		\
 		pg_upgrade	\
-		pg_upgrade_support \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/contrib/pg_upgrade/dump.c b/contrib/pg_upgrade/dump.c
index e623a22..0dfce2b 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/contrib/pg_upgrade/dump.c
@@ -121,7 +121,7 @@ optionally_create_toast_tables(void)
 		for (rowno = 0; rowno < ntups; rowno++)
 		{
 			/* enable auto-oid-numbered TOAST creation if needed */
-			PQclear(executeQueryOrDie(conn, "SELECT binary_upgrade.set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
+			PQclear(executeQueryOrDie(conn, "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
 					OPTIONALLY_CREATE_TOAST_OID));
 
 			/* dummy command that also triggers check for required TOAST table */
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index a4dec6e..091119b 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,112 +13,6 @@
 
 #include "access/transam.h"
 
-#define PG_UPGRADE_SUPPORT	"$libdir/pg_upgrade_support"
-
-/*
- * install_support_functions_in_new_db()
- *
- * pg_upgrade requires some support functions that enable it to modify
- * backend behavior.
- */
-void
-install_support_functions_in_new_db(const char *db_name)
-{
-	PGconn	   *conn = connectToServer(&new_cluster, db_name);
-
-	/* suppress NOTICE of dropped objects */
-	PQclear(executeQueryOrDie(conn,
-							  "SET client_min_messages = warning;"));
-	PQclear(executeQueryOrDie(conn,
-						   "DROP SCHEMA IF EXISTS binary_upgrade CASCADE;"));
-	PQclear(executeQueryOrDie(conn,
-							  "RESET client_min_messages;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE SCHEMA binary_upgrade;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_array_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_toast_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_heap_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_index_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_toast_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_enum_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_authid_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.create_empty_extension(text, text, bool, text, oid[], text[], text[]) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C;"));
-	PQfinish(conn);
-}
-
-
-void
-uninstall_support_functions_from_new_cluster(void)
-{
-	int			dbnum;
-
-	prep_status("Removing support functions from new cluster");
-
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-		PGconn	   *conn = connectToServer(&new_cluster, new_db->db_name);
-
-		/* suppress NOTICE of dropped objects */
-		PQclear(executeQueryOrDie(conn,
-								  "SET client_min_messages = warning;"));
-		PQclear(executeQueryOrDie(conn,
-								  "DROP SCHEMA binary_upgrade CASCADE;"));
-		PQclear(executeQueryOrDie(conn,
-								  "RESET client_min_messages;"));
-		PQfinish(conn);
-	}
-	check_ok();
-}
-
 
 /*
  * get_loadable_libraries()
@@ -218,8 +112,6 @@ get_loadable_libraries(void)
 	if (found_public_plpython_handler)
 		pg_fatal("Remove the problem functions from the old cluster to continue.\n");
 
-	totaltups++;				/* reserve for pg_upgrade_support */
-
 	/* Allocate what's certainly enough space */
 	os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
 
@@ -228,7 +120,6 @@ get_loadable_libraries(void)
 	 * there probably aren't enough entries to matter.
 	 */
 	totaltups = 0;
-	os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
 	{
@@ -321,10 +212,6 @@ check_loadable_libraries(void)
 		{
 			found = true;
 
-			/* exit and report missing support library with special message */
-			if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
-				pg_fatal("The pg_upgrade_support module must be created and installed in the new cluster.\n");
-
 			if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
 				pg_fatal("Could not open file \"%s\": %s\n",
 						 output_path, getErrorText(errno));
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index dd1113e..17c988e 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -276,14 +276,6 @@ prepare_new_databases(void)
 	prep_status("Restoring global objects in the new cluster");
 
 	/*
-	 * Install support functions in the global-object restore database to
-	 * preserve pg_authid.oid.  pg_dumpall uses 'template0' as its template
-	 * database so objects we add into 'template1' are not propogated.  They
-	 * are removed on pg_upgrade exit.
-	 */
-	install_support_functions_in_new_db("template1");
-
-	/*
 	 * We have to create the databases first so we can install support
 	 * functions in all the other databases.  Ideally we could create the
 	 * support functions in template1 but pg_dumpall creates database using
@@ -305,23 +297,6 @@ create_new_objects(void)
 {
 	int			dbnum;
 
-	prep_status("Adding support functions to new cluster");
-
-	/*
-	 * Technically, we only need to install these support functions in new
-	 * databases that also exist in the old cluster, but for completeness we
-	 * process all new databases.
-	 */
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-
-		/* skip db we already installed */
-		if (strcmp(new_db->db_name, "template1") != 0)
-			install_support_functions_in_new_db(new_db->db_name);
-	}
-	check_ok();
-
 	prep_status("Restoring database schemas in the new cluster\n");
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
@@ -365,8 +340,6 @@ create_new_objects(void)
 
 	/* regenerate now that we have objects in the databases */
 	get_db_and_rel_infos(&new_cluster);
-
-	uninstall_support_functions_from_new_cluster();
 }
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index c3b81e4..d20c1ef 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -406,8 +406,6 @@ FILE	   *fopen_priv(const char *path, const char *mode);
 
 /* function.c */
 
-void		install_support_functions_in_new_db(const char *db_name);
-void		uninstall_support_functions_from_new_cluster(void);
 void		get_loadable_libraries(void);
 void		check_loadable_libraries(void);
 
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh
index 7bbd2c7..81aae74 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/contrib/pg_upgrade/test.sh
@@ -63,7 +63,6 @@ if [ "$1" = '--install' ]; then
 	libdir=$temp_install/$libdir
 
 	"$MAKE" -s -C ../.. install DESTDIR="$temp_install"
-	"$MAKE" -s -C ../pg_upgrade_support install DESTDIR="$temp_install"
 	"$MAKE" -s -C . install DESTDIR="$temp_install"
 
 	# platform-specific magic to find the shared libraries; see pg_regress.c
diff --git a/contrib/pg_upgrade_support/Makefile b/contrib/pg_upgrade_support/Makefile
deleted file mode 100644
index f7def16..0000000
--- a/contrib/pg_upgrade_support/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# contrib/pg_upgrade_support/Makefile
-
-PGFILEDESC = "pg_upgrade_support - server-side functions for pg_upgrade"
-
-MODULES = pg_upgrade_support
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade_support
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index e1cd260..8d70727 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -253,11 +253,10 @@ <title>Install the new PostgreSQL binaries</title>
    </step>
 
    <step>
-    <title>Install pg_upgrade and pg_upgrade_support</title>
+    <title>Install pg_upgrade</title>
 
     <para>
-     Install the <application>pg_upgrade</> binary and
-     <application>pg_upgrade_support</> library in the new PostgreSQL
+     Install the <application>pg_upgrade</> binary in the new PostgreSQL
      installation.
     </para>
    </step>
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index e523ee9..c7392e9 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -76,7 +76,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_pg_class_oid = InvalidOid;
 Oid			binary_upgrade_next_toast_pg_class_oid = InvalidOid;
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 844d413..f096fd5 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -69,7 +69,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_pg_class_oid = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index 086e80e..d1209a0 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -31,7 +31,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index f1329f8..1c84a71 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -36,7 +36,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index 5ef6dcc..2532154 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -32,7 +32,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index cbb65f8..c9fd191 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -87,7 +87,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_array_pg_type_oid = InvalidOid;
 
 static void makeRangeConstructors(const char *name, Oid namespace,
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 1a73fd8..3f003d3 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -38,7 +38,7 @@
 #include "utils/timestamp.h"
 #include "utils/tqual.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_authid_oid = InvalidOid;
 
 
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 3ea9bf4..732974b 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,7 +25,7 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
 	jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
 	network.o network_gist.o network_selfuncs.o \
 	numeric.o numutils.o oid.o oracle_compat.o \
-	orderedsetaggs.o pg_lzcompress.o pg_locale.o pg_lsn.o \
+	orderedsetaggs.o pg_lzcompress.o pg_locale.o pg_lsn.o pg_upgrade_support.o \
 	pgstatfuncs.o pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
 	rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
 	regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
diff --git a/contrib/pg_upgrade_support/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
similarity index 73%
rename from contrib/pg_upgrade_support/pg_upgrade_support.c
rename to src/backend/utils/adt/pg_upgrade_support.c
index beaee76..89a104b 100644
--- a/contrib/pg_upgrade_support/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -6,7 +6,7 @@
  *	hacks needed for pg_upgrade.
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade_support/pg_upgrade_support.c
+ *	src/backend/utils/adt/pg_upgrade_support.c
  */
 
 #include "postgres.h"
@@ -19,24 +19,17 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 
-/* THIS IS USED ONLY FOR PG >= 9.0 */
 
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
+Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
-PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_array_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_type_oid);
-
-PG_FUNCTION_INFO_V1(set_next_heap_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_index_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_class_oid);
-
-PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
-PG_FUNCTION_INFO_V1(set_next_pg_authid_oid);
-
-PG_FUNCTION_INFO_V1(create_empty_extension);
 
 #define CHECK_IS_BINARY_UPGRADE 								\
 do { 															\
@@ -47,7 +40,7 @@ do { 															\
 } while (0)
 
 Datum
-set_next_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -58,7 +51,7 @@ set_next_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -69,7 +62,7 @@ set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -80,7 +73,7 @@ set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -91,7 +84,7 @@ set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -102,7 +95,7 @@ set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -113,7 +106,7 @@ set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_enum_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 {
 	Oid			enumoid = PG_GETARG_OID(0);
 
@@ -124,7 +117,7 @@ set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_authid_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 {
 	Oid			authoid = PG_GETARG_OID(0);
 
@@ -134,7 +127,7 @@ set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-create_empty_extension(PG_FUNCTION_ARGS)
+binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)
 {
 	text	   *extName = PG_GETARG_TEXT_PP(0);
 	text	   *schemaName = PG_GETARG_TEXT_PP(1);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 4175ddc..6c5261b 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3014,7 +3014,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 
 	appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
 	appendPQExpBuffer(upgrade_buffer,
-	 "SELECT binary_upgrade.set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+	 "SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 					  pg_type_oid);
 
 	/* we only support old >= 8.3 for binary upgrades */
@@ -3033,7 +3033,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 		appendPQExpBufferStr(upgrade_buffer,
 			   "\n-- For binary upgrade, must preserve pg_type array oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_array_oid);
 	}
 
@@ -3075,7 +3075,7 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
 
 		appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type toast oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_toast_oid);
 
 		toast_set = true;
@@ -3115,7 +3115,7 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 	if (!is_index)
 	{
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 		/* only tables have toast tables, not indexes */
 		if (OidIsValid(pg_class_reltoastrelid))
@@ -3130,18 +3130,18 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 			 */
 
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_class_reltoastrelid);
 
 			/* every toast table has an index */
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_index_indexrelid);
 		}
 	}
 	else
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 
 	appendPQExpBufferChar(upgrade_buffer, '\n');
@@ -8360,7 +8360,7 @@ dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
 		appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
 
 		appendPQExpBufferStr(q,
-							 "SELECT binary_upgrade.create_empty_extension(");
+							 "SELECT pg_catalog.binary_upgrade_create_empty_extension(");
 		appendStringLiteralAH(q, extinfo->dobj.name, fout);
 		appendPQExpBufferStr(q, ", ");
 		appendStringLiteralAH(q, extinfo->namespace, fout);
@@ -8538,7 +8538,7 @@ dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
 			if (i == 0)
 				appendPQExpBufferStr(q, "\n-- For binary upgrade, must preserve pg_enum oids\n");
 			appendPQExpBuffer(q,
-							  "SELECT binary_upgrade.set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
 							  enum_oid);
 			appendPQExpBuffer(q, "ALTER TYPE %s.",
 							  fmtId(tyinfo->dobj.namespace->dobj.name));
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index eb633bc..1955932 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -781,7 +781,7 @@ dumpRoles(PGconn *conn)
 		{
 			appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_authid.oid\n");
 			appendPQExpBuffer(buf,
-							  "SELECT binary_upgrade.set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
 							  auth_oid);
 		}
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index e5912ea..6ab05de 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -5135,6 +5135,26 @@ DESCR("rank of hypothetical row without gaps");
 DATA(insert OID = 3993 ( dense_rank_final	PGNSP PGUID 12 1 0 2276 0 f f f f f f i 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_	hypothetical_dense_rank_final _null_ _null_ _null_ ));
 DESCR("aggregate final function");
 
+/* pg_upgrade support */
+DATA(insert OID = 3584 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3585 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3586 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3587 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3588 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3589 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3591 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3788 ( binary_upgrade_create_empty_extension PGNSP PGUID  12 1 0 0 0 f f f f t f v 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+
 
 /*
  * Symbolic values for provolatile column: these indicate whether the result
-- 
2.2.0

0009-Move-pg_upgrade-from-contrib-to-src-bin.patchapplication/x-patch; name=0009-Move-pg_upgrade-from-contrib-to-src-bin.patchDownload
From 86310e6cbc986a5f13e60fba129c10edd648d099 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sun, 14 Dec 2014 20:41:59 -0500
Subject: [PATCH 9/9] Move pg_upgrade from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/pgupgrade.sgml                    | 12 ++----------
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_upgrade/.gitignore     |  0
 {contrib => src/bin}/pg_upgrade/IMPLEMENTATION |  2 --
 {contrib => src/bin}/pg_upgrade/Makefile       | 18 +++++++-----------
 {contrib => src/bin}/pg_upgrade/TESTING        |  2 --
 {contrib => src/bin}/pg_upgrade/check.c        |  2 +-
 {contrib => src/bin}/pg_upgrade/controldata.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/dump.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/exec.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/file.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/function.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/info.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/option.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/page.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/parallel.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.h   |  2 +-
 {contrib => src/bin}/pg_upgrade/relfilenode.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/server.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/tablespace.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/test.sh        |  6 +++---
 {contrib => src/bin}/pg_upgrade/util.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/version.c      |  2 +-
 27 files changed, 31 insertions(+), 47 deletions(-)
 rename {contrib => src/bin}/pg_upgrade/.gitignore (100%)
 rename {contrib => src/bin}/pg_upgrade/IMPLEMENTATION (99%)
 rename {contrib => src/bin}/pg_upgrade/Makefile (79%)
 rename {contrib => src/bin}/pg_upgrade/TESTING (99%)
 rename {contrib => src/bin}/pg_upgrade/check.c (99%)
 rename {contrib => src/bin}/pg_upgrade/controldata.c (99%)
 rename {contrib => src/bin}/pg_upgrade/dump.c (99%)
 rename {contrib => src/bin}/pg_upgrade/exec.c (99%)
 rename {contrib => src/bin}/pg_upgrade/file.c (99%)
 rename {contrib => src/bin}/pg_upgrade/function.c (99%)
 rename {contrib => src/bin}/pg_upgrade/info.c (99%)
 rename {contrib => src/bin}/pg_upgrade/option.c (99%)
 rename {contrib => src/bin}/pg_upgrade/page.c (99%)
 rename {contrib => src/bin}/pg_upgrade/parallel.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.h (99%)
 rename {contrib => src/bin}/pg_upgrade/relfilenode.c (99%)
 rename {contrib => src/bin}/pg_upgrade/server.c (99%)
 rename {contrib => src/bin}/pg_upgrade/tablespace.c (98%)
 rename {contrib => src/bin}/pg_upgrade/test.sh (98%)
 rename {contrib => src/bin}/pg_upgrade/util.c (99%)
 rename {contrib => src/bin}/pg_upgrade/version.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c20d4fe..a30eb5a 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_stat_statements \
 		pg_trgm		\
-		pg_upgrade	\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index aa47634..a8982db 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -201,6 +201,5 @@ <title>Server Applications</title>
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index 8d70727..bee62c4 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -240,7 +240,8 @@ <title>For source installs, build the new version</title>
     <title>Install the new PostgreSQL binaries</title>
 
     <para>
-     Install the new server's binaries and support files.
+     Install the new server's binaries and support
+     files.  <application>pg_upgrade</> is included in a default installation.
     </para>
 
     <para>
@@ -253,15 +254,6 @@ <title>Install the new PostgreSQL binaries</title>
    </step>
 
    <step>
-    <title>Install pg_upgrade</title>
-
-    <para>
-     Install the <application>pg_upgrade</> binary in the new PostgreSQL
-     installation.
-    </para>
-   </step>
-
-   <step>
     <title>Initialize the new PostgreSQL cluster</title>
 
     <para>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index ac0ee62..a26ec9f 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -265,6 +265,7 @@ <title>PostgreSQL Server Applications</title>
    &pgstandby;
    &pgtestfsync;
    &pgtesttiming;
+   &pgupgrade;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 1e65f2e..1572521 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -25,6 +25,7 @@ SUBDIRS = \
 	pg_standby \
 	pg_test_fsync \
 	pg_test_timing \
+	pg_upgrade \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
similarity index 100%
rename from contrib/pg_upgrade/.gitignore
rename to src/bin/pg_upgrade/.gitignore
diff --git a/contrib/pg_upgrade/IMPLEMENTATION b/src/bin/pg_upgrade/IMPLEMENTATION
similarity index 99%
rename from contrib/pg_upgrade/IMPLEMENTATION
rename to src/bin/pg_upgrade/IMPLEMENTATION
index a0cfcf1..9b5ff72 100644
--- a/contrib/pg_upgrade/IMPLEMENTATION
+++ b/src/bin/pg_upgrade/IMPLEMENTATION
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/IMPLEMENTATION
-
 ------------------------------------------------------------------------------
 PG_UPGRADE: IN-PLACE UPGRADES FOR POSTGRESQL
 ------------------------------------------------------------------------------
diff --git a/contrib/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
similarity index 79%
rename from contrib/pg_upgrade/Makefile
rename to src/bin/pg_upgrade/Makefile
index 87da4b8..c22daa5 100644
--- a/contrib/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,8 +1,12 @@
-# contrib/pg_upgrade/Makefile
+# src/bin/pg_upgrade/Makefile
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
 
+subdir = src/bin/pg_upgrade
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
@@ -15,16 +19,8 @@ EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
               pg_upgrade_dump_globals.sql \
               pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/contrib/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
similarity index 99%
rename from contrib/pg_upgrade/TESTING
rename to src/bin/pg_upgrade/TESTING
index 359688c..4ecfc57 100644
--- a/contrib/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/TESTING
-
 The most effective way to test pg_upgrade, aside from testing on user
 data, is by upgrading the PostgreSQL regression database.
 
diff --git a/contrib/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
similarity index 99%
rename from contrib/pg_upgrade/check.c
rename to src/bin/pg_upgrade/check.c
index 56db0dd..7dfa364 100644
--- a/contrib/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -4,7 +4,7 @@
  *	server checks and output routines
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/check.c
+ *	src/bin/pg_upgrade/check.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
similarity index 99%
rename from contrib/pg_upgrade/controldata.c
rename to src/bin/pg_upgrade/controldata.c
index 4e9d594..f7a87a3 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -4,7 +4,7 @@
  *	controldata functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/controldata.c
+ *	src/bin/pg_upgrade/controldata.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c
similarity index 99%
rename from contrib/pg_upgrade/dump.c
rename to src/bin/pg_upgrade/dump.c
index 0dfce2b..35954cc 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/src/bin/pg_upgrade/dump.c
@@ -4,7 +4,7 @@
  *	dump functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/dump.c
+ *	src/bin/pg_upgrade/dump.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
similarity index 99%
rename from contrib/pg_upgrade/exec.c
rename to src/bin/pg_upgrade/exec.c
index c177288..fbc538a 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -4,7 +4,7 @@
  *	execution functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/exec.c
+ *	src/bin/pg_upgrade/exec.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c
similarity index 99%
rename from contrib/pg_upgrade/file.c
rename to src/bin/pg_upgrade/file.c
index ab9d1ed..a966506 100644
--- a/contrib/pg_upgrade/file.c
+++ b/src/bin/pg_upgrade/file.c
@@ -4,7 +4,7 @@
  *	file system operations
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/file.c
+ *	src/bin/pg_upgrade/file.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/function.c b/src/bin/pg_upgrade/function.c
similarity index 99%
rename from contrib/pg_upgrade/function.c
rename to src/bin/pg_upgrade/function.c
index 091119b..8789baf 100644
--- a/contrib/pg_upgrade/function.c
+++ b/src/bin/pg_upgrade/function.c
@@ -4,7 +4,7 @@
  *	server-side function support
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/function.c
+ *	src/bin/pg_upgrade/function.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
similarity index 99%
rename from contrib/pg_upgrade/info.c
rename to src/bin/pg_upgrade/info.c
index c347dfc..22cb3af 100644
--- a/contrib/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -4,7 +4,7 @@
  *	information support functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/info.c
+ *	src/bin/pg_upgrade/info.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c
similarity index 99%
rename from contrib/pg_upgrade/option.c
rename to src/bin/pg_upgrade/option.c
index cfc88ec..4e22ef1 100644
--- a/contrib/pg_upgrade/option.c
+++ b/src/bin/pg_upgrade/option.c
@@ -4,7 +4,7 @@
  *	options functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/option.c
+ *	src/bin/pg_upgrade/option.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/page.c b/src/bin/pg_upgrade/page.c
similarity index 99%
rename from contrib/pg_upgrade/page.c
rename to src/bin/pg_upgrade/page.c
index 6354cec..9a486c5 100644
--- a/contrib/pg_upgrade/page.c
+++ b/src/bin/pg_upgrade/page.c
@@ -4,7 +4,7 @@
  *	per-page conversion operations
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/page.c
+ *	src/bin/pg_upgrade/page.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c
similarity index 99%
rename from contrib/pg_upgrade/parallel.c
rename to src/bin/pg_upgrade/parallel.c
index 5d2565d..55f73cd 100644
--- a/contrib/pg_upgrade/parallel.c
+++ b/src/bin/pg_upgrade/parallel.c
@@ -4,7 +4,7 @@
  *	multi-process support
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/parallel.c
+ *	src/bin/pg_upgrade/parallel.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.c
rename to src/bin/pg_upgrade/pg_upgrade.c
index 17c988e..bbc72c2 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -4,7 +4,7 @@
  *	main source file
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.c
+ *	src/bin/pg_upgrade/pg_upgrade.c
  */
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.h
rename to src/bin/pg_upgrade/pg_upgrade.h
index d20c1ef..0c473b3 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -2,7 +2,7 @@
  *	pg_upgrade.h
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.h
+ *	src/bin/pg_upgrade/pg_upgrade.h
  */
 
 #include <unistd.h>
diff --git a/contrib/pg_upgrade/relfilenode.c b/src/bin/pg_upgrade/relfilenode.c
similarity index 99%
rename from contrib/pg_upgrade/relfilenode.c
rename to src/bin/pg_upgrade/relfilenode.c
index aa6aafd..0ac6185 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/src/bin/pg_upgrade/relfilenode.c
@@ -4,7 +4,7 @@
  *	relfilenode functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/relfilenode.c
+ *	src/bin/pg_upgrade/relfilenode.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
similarity index 99%
rename from contrib/pg_upgrade/server.c
rename to src/bin/pg_upgrade/server.c
index fc0d22e..6353ee1 100644
--- a/contrib/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -4,7 +4,7 @@
  *	database server functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/server.c
+ *	src/bin/pg_upgrade/server.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c
similarity index 98%
rename from contrib/pg_upgrade/tablespace.c
rename to src/bin/pg_upgrade/tablespace.c
index 68e9cb2..f335b84 100644
--- a/contrib/pg_upgrade/tablespace.c
+++ b/src/bin/pg_upgrade/tablespace.c
@@ -4,7 +4,7 @@
  *	tablespace functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/tablespace.c
+ *	src/bin/pg_upgrade/tablespace.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
similarity index 98%
rename from contrib/pg_upgrade/test.sh
rename to src/bin/pg_upgrade/test.sh
index 81aae74..d6c5f97 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# contrib/pg_upgrade/test.sh
+# src/bin/pg_upgrade/test.sh
 #
 # Test driver for pg_upgrade.  Initializes a new database cluster,
 # runs the regression tests (to put in some data), runs pg_dumpall,
@@ -85,9 +85,9 @@ fi
 
 : ${oldbindir=$bindir}
 
-: ${oldsrc=../..}
+: ${oldsrc=../../..}
 oldsrc=`cd "$oldsrc" && pwd`
-newsrc=`cd ../.. && pwd`
+newsrc=`cd ../../.. && pwd`
 
 PATH=$bindir:$PATH
 export PATH
diff --git a/contrib/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
similarity index 99%
rename from contrib/pg_upgrade/util.c
rename to src/bin/pg_upgrade/util.c
index 79da8d7..4b710fd 100644
--- a/contrib/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -4,7 +4,7 @@
  *	utility functions
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/util.c
+ *	src/bin/pg_upgrade/util.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c
similarity index 99%
rename from contrib/pg_upgrade/version.c
rename to src/bin/pg_upgrade/version.c
index 0f9dc07..e1bebaa 100644
--- a/contrib/pg_upgrade/version.c
+++ b/src/bin/pg_upgrade/version.c
@@ -4,7 +4,7 @@
  *	Postgres-version-specific routines
  *
  *	Copyright (c) 2010-2014, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/version.c
+ *	src/bin/pg_upgrade/version.c
  */
 
 #include "postgres_fe.h"
-- 
2.2.0

#49Michael Paquier
michael.paquier@gmail.com
In reply to: Peter Eisentraut (#48)
Re: moving from contrib to bin

On Mon, Dec 15, 2014 at 10:59 AM, Peter Eisentraut <peter_e@gmx.net> wrote:

- no Windows build system support yet

Do you need some help here? I am getting worried about potential
breakage with the version information built with MSVC and MinGW..

- We have traditionally kept an individual author acknowledgement in the
man pages for contrib items. Should those be removed now?

+1.
-- 
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#50Peter Eisentraut
peter_e@gmx.net
In reply to: Michael Paquier (#49)
Re: moving from contrib to bin

On 12/14/14 9:08 PM, Michael Paquier wrote:

- no Windows build system support yet

Do you need some help here?

Sure.

I am getting worried about potential
breakage with the version information built with MSVC and MinGW..

I don't know what that is.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#51Michael Paquier
michael.paquier@gmail.com
In reply to: Peter Eisentraut (#50)
Re: moving from contrib to bin

On Mon, Dec 15, 2014 at 11:45 AM, Peter Eisentraut <peter_e@gmx.net> wrote:

On 12/14/14 9:08 PM, Michael Paquier wrote:

- no Windows build system support yet

Do you need some help here?

Sure.

I am getting worried about potential
breakage with the version information built with MSVC and MinGW..

I don't know what that is.

File version information for all the binaries and libraries produced
by compilation, per se for example ee9569e.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#52Michael Paquier
michael.paquier@gmail.com
In reply to: Michael Paquier (#51)
1 attachment(s)
Re: moving from contrib to bin

On Mon, Dec 15, 2014 at 11:53 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:

On Mon, Dec 15, 2014 at 11:45 AM, Peter Eisentraut <peter_e@gmx.net> wrote:

On 12/14/14 9:08 PM, Michael Paquier wrote:

- no Windows build system support yet

Do you need some help here?

Sure.

Peter,

Attached is a patch that can be applied on your existing set to
complete support on Windows for the move to src/bin. For MinGW there
was nothing to do, but on MSVC we have to declare frontend utilities
in the build scripts, which is roughly what this patch does. There are
as well some updates needed for clean.bat and the regression test
script. I did the following checks btw:
- Checked the builds worked correctly
- Checked that file version information was generated when building
with either MinGW or MSVC
- Checked that clean.bat ran correctly
- Checked that vcregress upgradecheck was working correctly
- Checked as well the other regression tests, but that's minor here...
I also noticed when looking at your patches that we actually forgot to
ignore the *.bat scripts generated by regressions of pg_upgrade when
running vcregress upgradecheck with MSVC stuff, but that's a different
issue that I reported on a new thread. It is included in my patch btw
for completeness.
Regards,
--
Michael

Attachments:

20141216_srcbin_win.patchapplication/octet-stream; name=20141216_srcbin_win.patchDownload
From a92aef5432edda3f00d7d334a51c90de3a7f79a7 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Mon, 15 Dec 2014 22:16:36 -0800
Subject: [PATCH] Add MSVC support for new modules in src/bin

---
 src/bin/pg_upgrade/.gitignore |  6 +++--
 src/tools/msvc/Mkvcbuild.pm   | 61 +++++++++++++++++++++----------------------
 src/tools/msvc/clean.bat      |  4 +--
 src/tools/msvc/vcregress.pl   |  6 ++---
 4 files changed, 39 insertions(+), 38 deletions(-)

diff --git a/src/bin/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
index 9555f54..d24ec60 100644
--- a/src/bin/pg_upgrade/.gitignore
+++ b/src/bin/pg_upgrade/.gitignore
@@ -1,6 +1,8 @@
 /pg_upgrade
 # Generated by test suite
-analyze_new_cluster.sh
-delete_old_cluster.sh
+/analyze_new_cluster.sh
+/delete_old_cluster.sh
+/analyze_new_cluster.bat
+/delete_old_cluster.bat
 /log/
 /tmp_check/
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 004942c..083c6d2 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -30,21 +30,10 @@ my $postgres;
 my $libpq;
 
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
-my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
-my @contrib_uselibpgport = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
-my @contrib_uselibpgcommon = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
-my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
+my @contrib_uselibpq = ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
+my @contrib_uselibpgport = ('oid2name', 'vacuumlo');
+my @contrib_uselibpgcommon = ('oid2name', 'vacuumlo');
+my $contrib_extralibs;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
 my $contrib_extrasource = {
@@ -444,6 +433,8 @@ sub mkvcbuild
 	$pgdumpall->AddFile('src\backend\parser\kwlookup.c');
 	$pgdumpall->AddLibrary('ws2_32.lib');
 
+	my $pgarchivecleanup = AddSimpleFrontend('pg_archivecleanup');
+
 	my $pgrestore = AddSimpleFrontend('pg_dump', 1);
 	$pgrestore->{name} = 'pg_restore';
 	$pgrestore->AddIncludeDir('src\backend');
@@ -452,6 +443,30 @@ sub mkvcbuild
 	$pgrestore->AddFile('src\backend\parser\kwlookup.c');
 	$pgrestore->AddLibrary('ws2_32.lib');
 
+	my $pgstandby = AddSimpleFrontend('pg_standby');
+
+	my $pgtestfsync = AddSimpleFrontend('pg_test_fsync');
+
+	my $pgtesttiming = AddSimpleFrontend('pg_test_timing');
+
+	my $pgbench = AddSimpleFrontend('pgbench', 1);
+	$pgbench->AddLibrary('ws2_32.lib');
+
+	my $pgupgrade = AddSimpleFrontend('pg_upgrade', 1);
+
+	# Get necessary files for pg_xlogdump as files symlinked
+	# on Linux are copied on Windows.
+	my $pgxlogdump = AddSimpleFrontend('pg_xlogdump');
+	$pgxlogdump->AddDefine('FRONTEND');
+	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
+	{
+		my $bf = basename $xf;
+		copy($xf, "src/bin/pg_xlogdump/$bf");
+		$pgxlogdump->AddFile("src\\bin\\pg_xlogdump\\$bf");
+	}
+	copy('src/backend/access/transam/xlogreader.c',
+		 'src/bin/pg_xlogdump/xlogreader.c');
+
 	my $zic = $solution->AddProject('zic', 'exe', 'utils');
 	$zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c',
 		'localtime.c');
@@ -608,22 +623,6 @@ sub mkvcbuild
 	$pgregress->AddDirResourceFile('src\test\regress');
 	$pgregress->AddReference($libpgcommon, $libpgport);
 
-	# fix up pg_xlogdump once it's been set up
-	# files symlinked on Unix are copied on windows
-	my $pg_xlogdump =
-	  (grep { $_->{name} eq 'pg_xlogdump' }
-		  @{ $solution->{projects}->{contrib} })[0];
-	$pg_xlogdump->AddDefine('FRONTEND');
-	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
-	{
-		my $bf = basename $xf;
-		copy($xf, "contrib/pg_xlogdump/$bf");
-		$pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf");
-	}
-	copy(
-		'src/backend/access/transam/xlogreader.c',
-		'contrib/pg_xlogdump/xlogreader.c');
-
 	$solution->Save();
 	return $solution->{vcver};
 }
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index b84f70d..bd12362 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -259,7 +259,7 @@ sub upgradecheck
 	# what pg_upgrade's "make check" does.
 
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -272,7 +272,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	system("initdb") == 0 or exit 1;
@@ -282,7 +282,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
1.9.2.msysgit.0

#53Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Michael Paquier (#52)
Re: moving from contrib to bin

I know this is how it currently works, but it looks way too messy to me:

+	my $pgarchivecleanup = AddSimpleFrontend('pg_archivecleanup');
+	my $pgstandby = AddSimpleFrontend('pg_standby');
+	my $pgtestfsync = AddSimpleFrontend('pg_test_fsync');
+	my $pgtesttiming = AddSimpleFrontend('pg_test_timing');
+	my $pgbench = AddSimpleFrontend('pgbench', 1);

ISTM we should be something like

for each $elem in src/bin/Makefile:$(SUBDIRS)
AddSimpleFrontend($elem)

and avoid having to list the modules one by one.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#54Michael Paquier
michael.paquier@gmail.com
In reply to: Alvaro Herrera (#53)
Re: moving from contrib to bin

On Thu, Dec 18, 2014 at 4:02 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

I know this is how it currently works, but it looks way too messy to me:

+       my $pgarchivecleanup = AddSimpleFrontend('pg_archivecleanup');
+       my $pgstandby = AddSimpleFrontend('pg_standby');
+       my $pgtestfsync = AddSimpleFrontend('pg_test_fsync');
+       my $pgtesttiming = AddSimpleFrontend('pg_test_timing');
+       my $pgbench = AddSimpleFrontend('pgbench', 1);

ISTM we should be something like

for each $elem in src/bin/Makefile:$(SUBDIRS)
AddSimpleFrontend($elem)

and avoid having to list the modules one by one.

If we take this road, I'd like to avoid a huge if/elseif scanning the
names of the submodules to do the necessary adjustments (Some need
FRONTEND defined, others ws2_32, etc.). Also, there is the case of
pg_basebackup where multiple binaries are included with pg_basebackup,
pg_recvlogical and pg_receivexlog. So I think that we'd need something
similar to what contrib does, aka:
my @frontend_excludes = ('pg_basebackup', 'pg_dump', 'pg_dumpall',
'pg_xlogdump', 'initdb' ...);
my frontend_extralibs = ('pgbench' => 'ws2_32.lib');
my @frontend_uselibpq = ('pgbench', 'pg_ctl', 'pg_upgrade');
And for each frontend name excluded we have an individual project
declaration with its own exceptions. With this way of doing when a new
frontend is added by default in src/bin it will be automatically
compiled. How does that sound?
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#55Michael Paquier
michael.paquier@gmail.com
In reply to: Michael Paquier (#54)
1 attachment(s)
Re: moving from contrib to bin

On Thu, Dec 18, 2014 at 10:37 AM, Michael Paquier
<michael.paquier@gmail.com> wrote:

On Thu, Dec 18, 2014 at 4:02 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

I know this is how it currently works, but it looks way too messy to me:

+       my $pgarchivecleanup = AddSimpleFrontend('pg_archivecleanup');
+       my $pgstandby = AddSimpleFrontend('pg_standby');
+       my $pgtestfsync = AddSimpleFrontend('pg_test_fsync');
+       my $pgtesttiming = AddSimpleFrontend('pg_test_timing');
+       my $pgbench = AddSimpleFrontend('pgbench', 1);

ISTM we should be something like

for each $elem in src/bin/Makefile:$(SUBDIRS)
AddSimpleFrontend($elem)

and avoid having to list the modules one by one.

If we take this road, I'd like to avoid a huge if/elseif scanning the
names of the submodules to do the necessary adjustments (Some need
FRONTEND defined, others ws2_32, etc.). Also, there is the case of
pg_basebackup where multiple binaries are included with pg_basebackup,
pg_recvlogical and pg_receivexlog. So I think that we'd need something
similar to what contrib does, aka:
my @frontend_excludes = ('pg_basebackup', 'pg_dump', 'pg_dumpall',
'pg_xlogdump', 'initdb' ...);
my frontend_extralibs = ('pgbench' => 'ws2_32.lib');
my @frontend_uselibpq = ('pgbench', 'pg_ctl', 'pg_upgrade');
And for each frontend name excluded we have an individual project
declaration with its own exceptions. With this way of doing when a new
frontend is added by default in src/bin it will be automatically
compiled. How does that sound?

And here is an updated patch following those lines. Similarly to the
things in contrib/, a set of variables are used to define for each
module what are the extra libraries, include dirs, etc. This refactors
quite a bit of code, even if there are a couple of exceptions like
pg_xlogdump/ or pg_basebackup/.
--
Michael

Attachments:

20141222_srcbin_win_v2.patchtext/x-diff; charset=US-ASCII; name=20141222_srcbin_win_v2.patchDownload
From 894ed2d918b142727661055d1ef60dd3ba9f6022 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Mon, 15 Dec 2014 22:16:36 -0800
Subject: [PATCH] Add MSVC support for new modules in src/bin

---
 src/tools/msvc/Mkvcbuild.pm | 158 +++++++++++++++++++++++++-------------------
 src/tools/msvc/clean.bat    |   4 +-
 src/tools/msvc/vcregress.pl |   6 +-
 3 files changed, 96 insertions(+), 72 deletions(-)

diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 004942c..d4fd03f 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -29,29 +29,37 @@ my $libpgcommon;
 my $postgres;
 my $libpq;
 
+# Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
-my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
-my @contrib_uselibpgport = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
-my @contrib_uselibpgcommon = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
-my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
+my @contrib_uselibpq = ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
+my @contrib_uselibpgport = ('oid2name', 'vacuumlo');
+my @contrib_uselibpgcommon = ('oid2name', 'vacuumlo');
+my $contrib_extralibs = {};
 my $contrib_extraincludes =
-  { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
-my $contrib_extrasource = {
-	'cube' => [ 'cubescan.l', 'cubeparse.y' ],
-	'seg'  => [ 'segscan.l',  'segparse.y' ], };
+  { 'tsearch2' => ['contrib\tsearch2'], 'dblink' => ['src\backend'] };
+my $contrib_extrafiles = {
+	'cube' => [ 'contrib\cube\cubescan.l', 'contrib\cube\cubeparse.y' ],
+	'seg'  => [ 'contrib\seg\segscan.l',  'contrib\seg\segparse.y' ], };
 my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
+# Set of variables for frontend modules
+my $frontend_defines = { 'initdb' => 'FRONTEND' };
+my @frontend_uselibpq = ('pg_ctl', 'pg_upgrade', 'pgbench', 'psql');
+my @frontend_uselibpgport = ('pg_ctl', 'pg_upgrade', 'psql');
+my @frontend_uselibpgcommon = ('pg_ctl', 'psql');
+my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
+						  'pg_dump' => ['ws2_32.lib'],
+						  'pg_restore' => ['ws2_32.lib'],
+						  'pgbench' => ['ws2_32.lib'],
+						  'psql' => ['ws2_32.lib'] };
+my $frontend_extraincludes = {
+   'initdb' => ['src\timezone'],
+   'psql' => ['src\bin\pg_dump', 'src\backend'] };
+my $frontend_extrafiles = {
+	'psql' => [ 'src\bin\psql\psqlscan.l' ] };
+my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump', 'pg_dumpall',
+						 'pg_restore', 'pg_xlogdump', 'pgevent', 'scripts');
+
 sub mkvcbuild
 {
 	our $config = shift;
@@ -376,11 +384,15 @@ sub mkvcbuild
 	$pgregress_isolation->AddReference($libpgcommon, $libpgport);
 
 	# src/bin
-	my $initdb = AddSimpleFrontend('initdb');
-	$initdb->AddIncludeDir('src\interfaces\libpq');
-	$initdb->AddIncludeDir('src\timezone');
-	$initdb->AddDefine('FRONTEND');
-	$initdb->AddLibrary('ws2_32.lib');
+	my $D;
+	opendir($D, 'src/bin') || croak "Could not opendir on src/bin!\n";
+	while (my $d = readdir($D))
+	{
+		next if ($d =~ /^\./);
+		next unless (-f "src/bin/$d/Makefile");
+		next if (grep { /^$d$/ } @frontend_excludes);
+		AddSimpleFrontend($d);
+	}
 
 	my $pgbasebackup = AddSimpleFrontend('pg_basebackup', 1);
 	$pgbasebackup->AddFile('src\bin\pg_basebackup\pg_basebackup.c');
@@ -396,14 +408,6 @@ sub mkvcbuild
 	$pgrecvlogical->AddFile('src\bin\pg_basebackup\pg_recvlogical.c');
 	$pgrecvlogical->AddLibrary('ws2_32.lib');
 
-	my $pgconfig = AddSimpleFrontend('pg_config');
-
-	my $pgcontrol = AddSimpleFrontend('pg_controldata');
-
-	my $pgctl = AddSimpleFrontend('pg_ctl', 1);
-
-	my $pgreset = AddSimpleFrontend('pg_resetxlog');
-
 	my $pgevent = $solution->AddProject('pgevent', 'dll', 'bin');
 	$pgevent->AddFiles('src\bin\pgevent', 'pgevent.c', 'pgmsgevent.rc');
 	$pgevent->AddResourceFile('src\bin\pgevent', 'Eventlog message formatter',
@@ -412,12 +416,6 @@ sub mkvcbuild
 	$pgevent->UseDef('src\bin\pgevent\pgevent.def');
 	$pgevent->DisableLinkerWarnings('4104');
 
-	my $psql = AddSimpleFrontend('psql', 1);
-	$psql->AddIncludeDir('src\bin\pg_dump');
-	$psql->AddIncludeDir('src\backend');
-	$psql->AddFile('src\bin\psql\psqlscan.l');
-	$psql->AddLibrary('ws2_32.lib');
-
 	my $pgdump = AddSimpleFrontend('pg_dump', 1);
 	$pgdump->AddIncludeDir('src\backend');
 	$pgdump->AddFile('src\bin\pg_dump\pg_dump.c');
@@ -452,6 +450,19 @@ sub mkvcbuild
 	$pgrestore->AddFile('src\backend\parser\kwlookup.c');
 	$pgrestore->AddLibrary('ws2_32.lib');
 
+	# Get necessary files for pg_xlogdump as files symlinked
+	# on Linux are copied on Windows.
+	my $pgxlogdump = AddSimpleFrontend('pg_xlogdump');
+	$pgxlogdump->AddDefine('FRONTEND');
+	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
+	{
+		my $bf = basename $xf;
+		copy($xf, "src/bin/pg_xlogdump/$bf");
+		$pgxlogdump->AddFile("src\\bin\\pg_xlogdump\\$bf");
+	}
+	copy('src/backend/access/transam/xlogreader.c',
+		 'src/bin/pg_xlogdump/xlogreader.c');
+
 	my $zic = $solution->AddProject('zic', 'exe', 'utils');
 	$zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c',
 		'localtime.c');
@@ -528,7 +539,6 @@ sub mkvcbuild
 	my $mf = Project::read_file('contrib/pgcrypto/Makefile');
 	GenerateContribSqlFiles('pgcrypto', $mf);
 
-	my $D;
 	opendir($D, 'contrib') || croak "Could not opendir on contrib!\n";
 	while (my $d = readdir($D))
 	{
@@ -608,22 +618,6 @@ sub mkvcbuild
 	$pgregress->AddDirResourceFile('src\test\regress');
 	$pgregress->AddReference($libpgcommon, $libpgport);
 
-	# fix up pg_xlogdump once it's been set up
-	# files symlinked on Unix are copied on windows
-	my $pg_xlogdump =
-	  (grep { $_->{name} eq 'pg_xlogdump' }
-		  @{ $solution->{projects}->{contrib} })[0];
-	$pg_xlogdump->AddDefine('FRONTEND');
-	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
-	{
-		my $bf = basename $xf;
-		copy($xf, "contrib/pg_xlogdump/$bf");
-		$pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf");
-	}
-	copy(
-		'src/backend/access/transam/xlogreader.c',
-		'contrib/pg_xlogdump/xlogreader.c');
-
 	$solution->Save();
 	return $solution->{vcver};
 }
@@ -646,6 +640,10 @@ sub AddSimpleFrontend
 		$p->AddIncludeDir('src\interfaces\libpq');
 		$p->AddReference($libpq);
 	}
+
+	# Adjust module definition using frontent variables
+	AdjustFrontendProj($p);
+
 	return $p;
 }
 
@@ -738,45 +736,71 @@ sub GenerateContribSqlFiles
 sub AdjustContribProj
 {
 	my $proj = shift;
-	my $n    = $proj->{name};
+	AdjustModule($proj, $contrib_defines, \@contrib_uselibpq,
+		\@contrib_uselibpgport, \@contrib_uselibpgcommon, $contrib_extralibs,
+		$contrib_extrafiles, $contrib_extraincludes);
+}
+
+sub AdjustFrontendProj
+{
+	my $proj = shift;
+	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq,
+		\@frontend_uselibpgport, \@frontend_uselibpgcommon, $frontend_extralibs,
+		$frontend_extrafiles, $frontend_extraincludes);
+}
 
-	if ($contrib_defines->{$n})
+sub AdjustModule
+{
+	my $proj                  = shift;
+	my $module_defines        = shift;
+	my $module_uselibpq       = shift;
+	my $module_uselibpgport   = shift;
+	my $module_uselibpgcommon = shift;
+	my $module_extralibs      = shift;
+	my $module_extrafiles     = shift;
+	my $module_extraincludes  = shift;
+	my $n                     = $proj->{name};
+
+	if ($module_defines->{$n})
 	{
-		foreach my $d ($contrib_defines->{$n})
+		foreach my $d ($module_defines->{$n})
 		{
 			$proj->AddDefine($d);
 		}
 	}
-	if (grep { /^$n$/ } @contrib_uselibpq)
+	if (grep { /^$n$/ } @{ $module_uselibpq })
 	{
 		$proj->AddIncludeDir('src\interfaces\libpq');
 		$proj->AddReference($libpq);
 	}
-	if (grep { /^$n$/ } @contrib_uselibpgport)
+	if (grep { /^$n$/ } @{ $module_uselibpgport })
 	{
 		$proj->AddReference($libpgport);
 	}
-	if (grep { /^$n$/ } @contrib_uselibpgcommon)
+	if (grep { /^$n$/ } @{ $module_uselibpgcommon })
 	{
 		$proj->AddReference($libpgcommon);
 	}
-	if ($contrib_extralibs->{$n})
+	if ($module_extralibs->{$n})
 	{
-		foreach my $l (@{ $contrib_extralibs->{$n} })
+		foreach my $l (@{ $module_extralibs->{$n} })
 		{
 			$proj->AddLibrary($l);
 		}
 	}
-	if ($contrib_extraincludes->{$n})
+	if ($module_extraincludes->{$n})
 	{
-		foreach my $i (@{ $contrib_extraincludes->{$n} })
+		foreach my $i (@{ $module_extraincludes->{$n} })
 		{
 			$proj->AddIncludeDir($i);
 		}
 	}
-	if ($contrib_extrasource->{$n})
+	if ($module_extrafiles->{$n})
 	{
-		$proj->AddFiles('contrib\\' . $n, @{ $contrib_extrasource->{$n} });
+		foreach my $i (@{ $module_extrafiles->{$n} })
+		{
+			$proj->AddFile($i);
+		}
 	}
 }
 
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index 699c286..36689ad 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -259,7 +259,7 @@ sub upgradecheck
 	# what pg_upgrade's "make check" does.
 
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -272,7 +272,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	system("initdb") == 0 or exit 1;
@@ -282,7 +282,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
1.9.2.msysgit.0

#56Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Michael Paquier (#55)
Re: moving from contrib to bin

Michael Paquier wrote:

And here is an updated patch following those lines. Similarly to the
things in contrib/, a set of variables are used to define for each
module what are the extra libraries, include dirs, etc. This refactors
quite a bit of code, even if there are a couple of exceptions like
pg_xlogdump/ or pg_basebackup/.

In a broad look, this looks a lot better. I think we should press
forward with this whole set of patches and see what the buildfarm
thinks.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#57Michael Paquier
michael.paquier@gmail.com
In reply to: Alvaro Herrera (#56)
1 attachment(s)
Re: moving from contrib to bin

On Mon, Dec 22, 2014 at 11:30 PM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

Michael Paquier wrote:

And here is an updated patch following those lines. Similarly to the
things in contrib/, a set of variables are used to define for each
module what are the extra libraries, include dirs, etc. This refactors
quite a bit of code, even if there are a couple of exceptions like
pg_xlogdump/ or pg_basebackup/.

In a broad look, this looks a lot better. I think we should press
forward with this whole set of patches and see what the buildfarm
thinks.

Here is a new series of patches for all those things, with the
following additions:
- Some cleanup for MSVC scripts compared to last patch
- Moved documentation to ref/
- Removed mention to the authors of the utilities moved (?)
This set of patches is basically made of the former set, with 2
additional patches for MSVC stuff and documentation pages moved to
ref/.
Regards,
--
Michael

Attachments:

20141223_contrib_to_bin.tar.gzapplication/x-gzip; name=20141223_contrib_to_bin.tar.gzDownload
�8
�T���cG�/~~����7��H�$?��]�	�����C��#idk�4�f�q�����������x7�3���������4j��z���l��x�k5����
��c�?�ZmwW��=�]k��o�#�����Fm�'j�]��?��:��3�bM�������A�nwJ9�����F��C���pW������������V?����h��@��[�S���������yu@Y{;;��_��7���vE��������� �����jDm�������'�'��������z#���l����;������x�U0�}Q���EFp�9o{�[?����I/��~��0��aXm���/�88���,��e�����}��sX�^�I��q5i�#h��������A&l��r��)G��PGn!�*�����
�h|���H������8���@��`(n{Q�{m���7��n(����AU7*��F�t�'0������������]Q0�{�0*z%������+���N����M/�V��V��Fo�	��nm���iT�������6���[�Q�4/����MT�������=�������3��
 ������~_�nU���v�	��E�{����������P��������f;����d0�nT
��������(��{8��n�_�8�w����q��~H�Z~�����h�3����dM���N����']�z
��F���zz���?d�����
~������g�oO`��z��FiC���|�1���hT�����f�O������sP�^���m�s���p2�ta�Wd�J�� w�.����;�������#��?$�w��`��]�5�}��I�Iw���v�����������~P�����i�����H��H�)$Gn�xW�n���������?������*�������q�P���![�@T��K���!���������M29���d�U|��k'�8��`��2r6/c����V�Eh<5[�w�g�'������<��e�I=��o?�uW~~
� �U�W��xm��z�_,[%�7���(a��[0�i�B��Z�jW)�J���U��nggg�Zm�F�[\�*�����k���}����\���(�^�1�A��F�ML3��^D�(�������R!-�8%�7�.L����]w��o�$u�� Q&q�N��\�6��:�[�'�{P��<�U�r�� �����[����p����
�E�������������3���v����a�D���.��e��^��\�~u������`��4�T�	�^���&hA��z���b�y���F��Q�E(�6�������gP,)�T��������YzM������W��/�v?��m7.O�JXL��	����I����+��	�:}������_��g�;�
�}���`�G7_"(��N0=��PFonr��Q���T��$CJ��TJ3��>A������j�"5�m��~��h���spVY�LK����7*������\��]�����<[>�����?AO�������2#��`�}�JstG�f%V3�����}���L�:��'��E��4~?X$�����s0��Y���0�o����z#�5��[>����~_���6
W������DBD�����������a�5e|1�������_y���fd����� jv���&�A��i;�����;�b(>�2���������0�'���S/!�p]N�n�7��X�
�$�Q����qx��~���H�w@����~Qg[a�/:Akr#��A

�����.��}�W;��~<f�cJ����tL�[��\6���cD�����K���{���;�C���q0�
�_pBb���va��oB�GX
�$4J����m��5�c���?�y��!�d�$���[��a���2���_W��\�������/^������+]���""��C���|������]�E��4�K�P
����`HB�C�i�6H�y��5m���@�A�w:���@zZ��69���e Q/R�	P'�=����e�!�/�!�pR	~�DQ���
�|_�]qN4E����s�<��T@4~�#)}�m�N8��������8)�2q|q��
p-���$1�������,��@Jb�TU�/�z���a8��L�aM��	�������&��_����@��MI����p|Ce�@�i����c�����Uq}F�.z������|�A����Q+��|�aAA5�U){A��x�r��7���/������������Ph�_^�����%�n����`L2�E�.,�Q3��E�T���0�7e`�����h%tU��6O��b�A����o3YV�?���������/"��D����|���w�I���'�h(@��RTm�Qy�4w���2���)�O��6�G���Zc����vU�.V���a��Q1�+���@(l;��kB*��V	Q�SK�! R�b�}�������uE/~	3���`�'��B�����
W�\E|SLT]U�������?�D���U��
v�E���������b�+y!�;�x�cj��U�~���n�N}�1(R�(�u�Yf	���r�&�#L��b����Q��]q�=�
�JX��]-�e����h4T��DG�)�'I(�D.-����8�'c�
��
G<�?Lzjh���ZS2�S����x��#�&%�P�<]8��FMQi?X)?B��~�=:���\$/��p,����W������Q/����,yd���7z�zS��;�����]��"��7(�$�������@����5!c�,���Q�2�L7'g�YGk�5hUfn�<���HNC��y��������}��+MaW�4�%��.���,qW�x:8�=� �qR%��I�C����Q�T��r>���
���aA�]�El�od����(I]H���N��\S��L��:�[��G�h?���4(HQ�����G��k�d�^������4&(��7�l�[��o2�����t�v$��������p�(����/���j�)��7l!>�W����i�J�/�0�8�M��vCR2Z�Kp�zU�����!�U!Mb�wT�pw�Q��P]�X�Qt]~�Z�lBX�k�fo�c�%4t��^��Q���!| ��P)E�?��c�<�YC��,���
������T��<�����w��x+,�-B������(� G���B�����J[��z^�H�J&	��s<|��	$�F�o���������'�?�xy�js�"P�"@�sI�_K���R�	�dx'�T�w $���h��������f�a�nnc���}�F@����]���(��������]��-�M��Y�1K��j�� R�4�L)����F���LEM���pNa�W��sH1
F����sv��T��� �<7�>���3��(oB��1�a��i�:���M�f@-2
j�b���C��$�6����RKB��@I�0�0�-&iN�y�-iQ"�`�%Wg���z�I ��:c�'SS��n�S{n��b���z2�����:l$�N)2�=2[sryy~y(���9v������@z<��Y�4�Z�V|2�R�J��6H�Sf#����<
8��\�7����v���4O�(��i�W��� w/`Z���|�X�
_�>Q\����p,�u���~�"H�"�� �^L�2���OA0���W�r��P����@>Tk�� �W�m����"����'����^�>��Q��^��+�yx��� $`���l�Iz�����p���+�*�����P�S;��
���/\TB�)����9��CuQ���q(�uX4.@����zM^=4j�Q��nLJ��lz7m) ���P$�&�5H�+%zS�J	��yzH9c<Xl>�-\`�Z1g���3�M�e��7�4���F��{P[]��q�]�|u�~�%
�\�&,�����l��'KU������t�����BU�/�`d(W�L�X����"��h:�Ms��9���=����I^�Z�
�v-�9y�`��H.Qr���}'{1�x�7u��1"�7��t%y%�$s_��I`�J�6��@I�c2����x�AR��QT��:�����d��p����*�J��L"��9�3���[]?����x�j����%�����{��w����S|8��>=?�X�V����O�~����1��o^�\]�trq�����I~
��-XF-��cwu��J^)����B}�
3
:��6A�>X�6������[Qbkm��d�/g��Q� �lqh��7d��R�������|�+��%&�kiF{W�G�(��e9U�(�E����4�W�����MP��(��p��4,�!
�*�7�%s�z��*U��L<JzL��������Mu����x6f��-�i�����<"��m���}m�\��iM��=���6_#�;�	CLO��	�K��2���=&��O���k�?(�zh ��QE��r�V'�����s���O��� n�G\=?�}����8�\��Z�j��P��GX<x"���7"������6��,Z�N�V��Y��*�S~j]O��"*f�9��.�\�n����
�?�Y� �C�b�	��"�-�r���v��.����[��Y��s�G�G�����$ni^��e��<wO���:���r9&JP�
��������l����@'�w�\�s~QP�0�����{D�QV�=�������8u��T����^�&�M������i����k��H}-�����2��h<U����e.���`��:�� �UrNP�� n�*�i��}�8jbT�e�D3n�d9�8g��V%OI�h.O��&�N����{^��!_��v�f��s��v;��c����:�~�o�����!����
��R�On���/h(�aN�����=u�/��$��Io�9���!@���7[.TSx&
-Pg�������jO�
l^u���[f1�����,v��>p�����(����$y��t$���c��!�;.�|�c�N�����$�2��%u�2��5��wni�SV�{O:�n��m��>:�6�����?�;Y��d����M���n%���62��[�"A�}����^t����	�
,���{�������U|� ��;	��L��~�����2M�j���5��������{�ju�������P6�?���D��} ������XQ$W<�$H����y��	�M!z���}�wq_�}��=��w�%�j��������b��_����	��76��$�1+�Y������o������]�����U����hjl�]RN���v�^9���I2�����������N�`/h-�7�q�ger�����|�mx����K{�@eI�����\3�;�[d*`��x�xsz�@1g������&(�l�@6 �B�������=������n�o�/�`Y�Y���4��~�����\��-�����������Z����7����������Y��������e;yxN^�������9���<�K����l����-�������[���g�����^'o-N��N^��)���Nc�Ar�z.����u�P�z��������������-�������[���[�����7���[���[���[���7���S����<�����c`_�z)'� �}}N�,'��9�'�-���Mw��
����<��F]�#L�O����
�+��6�t�����<<��C*���3N�*����w�P������r����'�&�����<�l'o�����"N���p��
��g��N���<d	�8yx�/�����u��D[��C�����,e5'����<d�:y�b�N��j��N6�Wp���9�*N��e�<l�_���V���<T�8y`^BjB-����.���Jp�<��-���o��Fh��K���^H�h�����X��C�^��Ce������I�[7I�����b��������q��A�_��������7�rN������<�X��cj�\8�4�P�R�J�YN^^#t��������q���I�9y,����GA�^`A'�����6|5��iNj��'o^'����'��s�<��p�������<��9yx�:yx�9yL��w�K;yxks������<�������;y�6�N^����������m'������K9y�mc�H�}�JNZ���<l-wI'^��2�:yL;����#+���U�g8�<:�������������A|�N^����F'/���[������<��8yx�s���v�����8yx����s='��h��G&�t��k��r��Vq�P�r%'�<�iN�	p�W��Nj�1NJ-X��C�������\������Z��#�Y� /����<����5����(���K�ig8yp	��Gv��A_�v�H���8y$��<�����5G7q�4C�vO+:y����q����������3N��)a�/�|���g�98��j�BN�R����9�<V��'�Y��u���
V�{'����G��%�<T���<���./'��/���7�s8y$�����������(���A��z����GD��g
�����;�����Om�S}��o�?2������?�S~���n��[���~4�:�'������v�`�s�n���t����i���������?I�\�)�I���MK�.��2�?	\�`{���l4�����Fl�[�B���)�$q��'yi6���N��`�`!�t_��1/�RV�gae�j���+e�jY<%	�T����A�o/���]G�J�7Oi9�
=�N�LdT��l\���G��(�+������1iZ�������[�i(-e�P�yf�#2)�f3�Pk��Fw�>,����������&#<�xrH'_ ��#��`�-�#5��m��t���2��L>s��^����{Os��Sj�����c�Y��c���R�z���D�d�/~F��R#���~������p��!-�����t�	��r��W�^4���9qveN�����_p���O����p���m���W^�p�j_���h[Z����F���-�������DC;Pq���Em`�Ux ��\����Z��TuJGg����
��?�Nl��%� �LK�q��
l}�	a_x�����z����#�$��t���!�G�{� `"`���4���G����^,���� ��}4p�6f�����+�0�G-	�
8�*v��J�9�*�1�;f:L���W�<�aM�J�"��A��hb�yTY�����Y�4d�d��Ll'KQ���vTW�K�j��Wn�N�l�lWI}o�2^~U�:��WPZT���}��s�w��q
���`�:Vh���R�.�- ��M0��2�[:�LBL���u�fg���7!
"�	�����X{�:�����-���\ks%5�����%[�&�1����NAP�����E�%!�=�����W�K\��

R�,-�~����RC�b��I�S�����L�,���P�����V�yg�7����<E���d�Ba��l�Q+6�5����y�h1������T���������>���x��F�f�j������E��1&�]k={m|�2�&�g���\��h�1�DZc�G���D�� ����{0I�yEU��$.�y%���h(���VK	��^t+Kb3����G��K��e�� K��t�
X�,s��7��fY��<�mB��� ����P�ZNC��e���8���������V:�d�C�B��?�Cq����>b.��������Kh����Ze�$�Dv�c":z
�WX�~W�A?��,���'t������5��������O:<��u��%%�\d��W��B�f^_a{�����
���7����2�J@�{dc�������6o�������Z��7�g?��Z�]x
S�)\�����%��x�%�_��(po�8yS
U���j�:�n&�Zl:d�Q�%����Mw.� ��T�Y�k�)�����?`���� �����D�\���}���#2���2��v��y����SY�-=dN��m���1���/e\i���~�vJ���?�r-���gr&`�_�On@�����W��O_�'x
������[G�$�,��aw�D�����m&������k�fV��U�D���I�H�_q{�T�6����F\�x�������?�������V�D��]��j[���&�����*q<���y��P�il��EXa8�S�ol��0s��XN�����qX������OA���~F�����b(��7
����p>T����ROg\)�U�6�v�H��&c��[��|��#
�u�����T�
��m��3)C8���A�~��,���zY�[V�y��JJ�\4vx��K��u���r"��y�V��M�U���h��_%c�'Ti�,�x�T�T���)���Of������	�w�_'�JwQ�pAu�r)�G�@
���]�@OE+�wZ�G�5U���].�8c��������O���
�"����0g���F�Z?�q+����#
U��vNnn��?#���+�����[P���__�h���g�~�[�Gth�e��AA��\�L���^4�,�������
>�k������
:a�����~�!���U�$F�J��D	�y��9�\��	L�R�*7t�%��/�m�
PL!SNJ�?��IIu�������_�d���`,�eQ�/����r{&JiLfK\��g�(�������@'�����q(CTg�J���	\/�������vX��Vx���?i'k<W��T�CE|@���O����v\�:�@����u����#�G�r�QD?i^K���p	
����D�x3�=�@r$��b���=������]!H�.��p������P�]B2\�qzL��x=���"����cVx�+���%����=/
JL���K��gz��m�`3\K'rb���WVJ��j	�f�|����kN�(��6�ILd�������g�X��Rc1jXl�:�
���.��������@�Yu/���(����+Ww����
�w���c���-�r�%W��kC�]��jq��"����5����7��`gc���2x���O����I�_aR6IZ�h`���'�#����tBTV��e8��u���<���M���c��D�T��iO"4P�\��@4�D��$YNt���[4�x{����[�]STJ�8�@W���+�R�'6Er?�_4nM��la77����=��2�K���"Q&}���H��1����P"ElF|���X|h����������x0-����\����U5����t���V��*7X�z�f�eT�	���Z)���?��d[0��&d��ALTh������2���/��lv���=
��cU����`�l:�q��A	��+<�b{d�H��?"�NZ@��@K���,�E��/ nqx|r�Gh��f������@It�k�J��1@,U�<!�"*����f[����a�A�t2�r��Mq����7a���n��%��*	���~��Q�����Q�v\t8\Dr�i�,�H����{�-KX_����Fa��i�c :�����)��n��<��A�m,h�rm�{x<��};r�"��Z�p����)�$+��b����U�8��4�R����m�`�|��%��#���8�����H����
m{k?�n��T+x�����d������QU��,���\�2���.�EW�R�H9���
?�x���^�q9Q$����[���J���F�j'y�m���1���s��N���h�>�pR3����y$�2�y�����eh���f_=�||yvz�:�[�R��270���c��V
:����
N�%M���5��&���.� t�W4����@Qo�$.�����c�t#����o'������i��f��.����}M7yqrmS������N���T�\����|X��Z�@��U�9�����OY���b<�Kl"RGY�LF��yiG���v��5s�G��yv����8�k�]�|����JmPY	��VDa{����������%����Aa�����nv��+�a�`M��pL��sk������j�G�~Di��Lq20�5#%\H��3�oG5��t�w���*�>���
c�{�}V*f��i�[�9/����n-�*�\\�>x���s��@�=F�0����������R|gQ7�Iu�gO|����?G���AOX� ����1�G,�W���9�3����������B���W� �$���f�-|�/����5'�E��W�IO��OM521*e�I��N�C����@:��OvY�~g��b����:9�����V����Wv��N�0{��H�"f��7�F>�-�Tu����mz��x��m����]Le�7�+�������+.���w��G:��d��@�d�W�a���Sr��mgu)Wo����oOd�(�]K���������Y�Ey�W+�j�j�nVb������5���hf�u�0S��-�?�uJ������ZG(I"�.Ss��gC�m%C�ZV+���D��AG+N<MI����5�b���R��=tF,���}*17=�h����7Zg�0���(�N���/�S�|�8�B�n���!
�	�rA�����.#~F�d<�����������5Y2����F�S(
����]��7���0e,���/��z�~�&�G�N�T�>2�o�q������Q�}�������>�T(}TY��}T+;:�(Pj�x���%���KGUl<-�hV{������V=)#V�U'�V%����9t�`�F���lX�(o.�Q�>b)���}����d>y�s8�[d�������!N��:i����	�-��R�����B��QzI�/�;�z�����NS�����D��,���G����B�����b��f�n��w�J.�;A�4�(���N�A�>��s�����C�T�Yc��@��%���2�Q��d�t����b����rT�-������;�����0>�;����+ ^WO<�m�V�q1�?)���%m�ug�����ed05r/%v#�f�����K"��v�����#��g�.��l����KyP�M�}��*�(krcT��C�&/)�|�](8�mo�K7 +2��ExU��������\����b����.�W����`W��d�Z2:Pnm:/�u���f�F�VEcW��d�Q����[�:������������G�n�dcE�K��W��V�u+���>�	�6����E������I#�&�S���7���|��L���?��f;�z�H�b��k{o�:g���c��x�J|�8�r#{��N4���	;�ZH�x
�-|o%]���\+��B�=&���
��t������4��sND�&hm��;$���W�2����������cua����!a���z�m"��}O3���R��f<Y��1��vKY&��/nI"���Y��+v�m>������Px��B�g�s��<9k����G������-��sQD������f���D�o���C�]:�3U��x�F�N�#F}�N�o����'�3M�e>������/	�i��u���S,��=�����r���X^]�e��f���1A��KM���e�P����kS�Y�"��~_���#'�}K�����p=u �f�����z���T��5X�E�UQ��k��O�}�@_��Qj�46�bLR&�"+U�O�L�����?T�j�	ex5�|��i?-R~e�q�������)���v�B�7Kt�����o8|N�,�S.�Tzc�,�EHd��
E>b����2�m$��{`<Z��=X�#�$��	���9��26�f�)���3����.Q����`~��z�iQ�
������H2R���2~�8�Q��'�O���x��k0y�:���;yn������O7}������8�B@7J�1C1�pcCYce���*��<bP>�z�@�V��T�:����G)1�*�t'{���������������}V�AC�]���Q��V�����%��{���hI�v�+�Epx������*Cp�L$VC<6����
��],}H����B�HA+�������4���������Ba���q���D�14�=�$�UG�Ew�pto�<��[h�NM�DL3)��fR�'�?��11���1a��P�HG����U�dZk���#-��N��9�x�P$4�5��k(�C��{Z����G{����#��-�#[�0{�0V�����0XW9�a�P��-��U]V�3Z�E�\9���&Z��d��n����;�j�`��y�u#��������1�v��@�E(#��*���5]==qPm�i=7G�O���x��UL883�����|ClT������;�O���+�`=s��b2���X�O�$Gk�WI��Fco���V;;����?����DM� ��!�����1�9�:���1(��~��� ��w<G������v�z�+9x�(E�J�R��~�~�]���{���D*�?��:��>7��	<	����t�/��>��B����o�)j�{�8��f&�t��ap����?��� r���.�KG�`X{�����AL�x��C}��wvv������w�[_��P�2���V����X?����oxYp���-���M���fN@��sB�@'�d�
���*�-��@��Y,��k��&3+���������o��5C?&��Y9!��Od}X��[����jP�Y��[�������4T�77T��jI�o.�U�RP
�P
�Y���Y�T����eC5xP
^T��
��9����K6Tab�B5x��j����1�
T���oP
�!KC5x�A5x�B5X�	�b#���[���G>�u�C5x+A5x+B5xk�j�������[T��T����4zf_�.�"T�Y.������[T��&�omP
��P
ZXT�[��P
�RP
�?k�j��	����A�W�P
^T�����Ek
T�g��@5�~�P
^>T�Ux����j��B5x9P
VMsB5xk�j *gA5�Z�� Mr�B5�i���V�j�V�j�V�j���j�������-
��)�uT��T��T��6�����A��
P
�*P
<4���7����v �d�P
�TX��*�S`P�\��3��y�0j�g���V9T�S�W�����|D��ae�fC5��{N���j[����jH�\���b�[T��:T��T�G���"P
��%T���7�,�M����p���s@58R�"]x�
��&�t�I:b��@5xC5x9�sA5�X
��[T���P
^��9T�WH�����[���t5*�t%��5�Y�jP
��U�d�C5x����_�%`:TC��'��P
�I4�A3�e����%��,S� �@5HV���[X����MQ
�@5��T���P
��5�A�\�������UV�j����-��r�"P
�g��j�x[��U�TKA5���C5���j�y��jPE,
� ��#�$T�*a~�M���T	+@5Xl�� S���T_a���[�T��xS�������;T���Rca���v�sA5���L���_�1��E��e��P
2�9h����%��![�X��K6v��'�:���)�:��%���T����a�V��;��]�Q�,��������S���}u�o^�������bSP
4����t�v/�A����<�O*�YP
�#�����@5�bV�jP������bP
�&�"���j�R{��z@P
r,W�j����z�T�WX�A-	I�k�`C5X�e~�k��5�T�Y)SP
n[\�z��j����/��;�e�_����k��44�!y�"T��6�o������P
$�P
����P
����P
o������`��,�����6	������[T��6�omP
�:��W;P
r�����x?S5Lf-{sC5�]=�	�@yF�Z='T����]�|�����.��<�)S��3��mNB5���:�zs�9�q>������������
��*��P
Z�\�����,N��d�4�'�����h������A5�l%���=�,���v���5���N�h��j�;��gB5���B5x	�o��7��_s��2���jP���P
��n�3TC����E�P
������j��	P
^.T����[@5x���[��[3T��M��v*	��}��iMHB5x��j����}C�o%���j�V�j�#�>���j��	���� m>r�q!��j�!��/#��jHU�
���O>T����9V�+B5����7
��������jP*��jP*+C5heGC5��������@5���j�jO;ZZ��P
��m
P
����P
������u@5xk�j���L���jP��|P
���j�,%���gX�A]�=��@5��e�/ad0���P
����(m>T���0P
�m��T�aY���T2��9�e��
T�*c��w��vK[i������l�4���(��=�I��9�}n��E�=����r�t7fC5�����Z.TC��9�!��|�5��P
���P
sh!���H�x
�-������i.���������j����0T��t����<T��>�o-P
N)+@5�C��5/�eT�g���li}�?�A5d�<���#����V�����e$�
��2}���/��P
i:���P
�u��9oG���U��P
�E����}�����A5�z�,���zfA5$5����j\�!��|�/+�v�5�"P
�4��\��)W|J;XT����Hf*T��T��6����^D3��9��'���/t�:
�a������'���i�m��T�7�!y0��j���7/��nsA5L'�����������9�!�P
�(����4�����P
��U�dT��P
��%����^�kvK��^.��j��_���1�^��[O0ujZ/
����	��lMA5`�����,��[�a��f1�f�a�$J���lMb*T��������P
����cQF.W���hT���������w���vSB-4������cv*o���*���v��'����h��@�*h����:j�[����]�]k�3�Q�����zcgg���vE���_�������y~&(��)���Q~:H��N)�g�������B��]��;�}�I�m��>�?�o5��^g������[k5{����W����E�vH�����s(����~�>����O��oa����b?�x	�����Z��/��@���������jOj���I�A����/~���z��@�G����[t)��o`��
�IC�~�����Jjo�3p�FnR�H�
Is��[�W�:��'d������	�����.o<�w����cK�s[���*4���0)�N�>��z"��3XV�Y���45X�����,��K�5X�\?��e
����`A����l�Mx����jO���������	8BoT��6���h�1I���q8���a��8���P{�,�
���2�Q��b6gC�93$6g.�`�f��paER���z%1B����/lW��Z�Ic�Jeb���k	�A�#o��pR.(����(�i�����H=�Y<�xQ!�[uR��p�;~7����e G��f$�`���!�������'���XI�+�P$��_A���(X^�o����6*�-�d�Vf���������u���R!wk��#�l���@Kq�_t9E?�X�nz�'��[?�5�?��/~�������?�F�o�o���02��&f�9n��Q[?:u}�;��m��q&d��L�0c��k��~mo��w�Mr������t�^���0���V���C!��Q����M�$q��1��cnC�#�]5R����s(��	N����o__b���������W��._�`�aC����z�N�w2����*�z����v�T.46��`����.?��e�6Y}��t�����������K&_A6�ywuB�O������?���:�);���J5��F����J�T��U%�J�������*�?<�����Wo�__��g����������K(L} ��9��������2���t�������o���6OE�N���h�Z�L!�u�l!���Bb������y��.2KH������S�(��lT�c�O��+0�2�a�J��c�c �����N���P��\����������%��nWpOZ�=�^s����������8��ti�/O��O_��>�l*�T�k}H��#��TP�H"�7<NJt���4����&����7RiL	������������XLn���^fl��%w��LR
��fq!��YAU�><U�U���I��G[Pt��7��}������,p������O��^��W�������f��x��^�.b�:�3���I���S��]��4�������JJ���3�D1[(�_\5/N.����(V��W��a�j�\������/��O`�}wv��~U�HG�������p�/�8��u�����������'.�yy�F��k�+Co9ft�A�	0�$e���v�s8�	����F7!��gU�:^6[���~c
���������K$"@(��0sh�VC����I��Rq8���RI������x�H��~�&�=�H^���v��l]�
����_C�9)�cEE&�Hrd�0�q�h�j�{HNJbj�$�(�"��A�>��:��K�K�����D�q��>��������|�nn�Rh��r���pfYGM3I����G^�	�����Q����ZY_������rZuDm�@��@��}isJ��w�!�VbmH���h�'C7�Q	�$~�<T����o\m�E_CT�|�v�(���g��H^Hp��Q�Am�P�Z��G�=��+��&��&���{]ST�oEXPEt�a8F�9�(�SI�qD�G^"� g0�=^� `	�S��eYf�����H6�Ag���;��?�B�:�����#��f�� .W�U����f6�hRy�X�+�;EsX$��������h,�[�	U�3� �Q������'[��%��A�	�W��LW��og�����\�L��=U�Vr�����nm7h������f����V�u���u����>+�8j�&J��J��G�^N�xZ��-��It�E�;���0���Me�#/�[��9��&��Vq�_���&o��R�	�
�Qc�U@.O��%�����C����5�
���eA�~������7D�L|��/��E<.�P���k�%�����pC�l��f����J���3 ����1������b����%�,n����)�7��)�:v.�b�	�������.�����Pl1��2�}i���8�X��A�;���K�c5�~
+�y9�dBe��
[���{;�W�Q�/��M�Bg^uG=��+qdONP�������:o^�rqr%�{SFqZ����$�~�|��P����D�t���|t�b�n��W���79�O�j�l�1��I4��"��/^7/.A�z�<���<����I!���\Ra���Ah:�����h��9%E��r���[6g��64G�0F%��K�3�������C!\�|�%Y�T������_��P��.�2t:yz�|u|�����V?��Se4Y��2Ju�gTOv
M1{,H��R
X9��%<{d)�A7:�!_B�/A�^�����X��_]%�m���Ub�RO�E�?������q0�U�-���;l(HQh�#���0���k�d,��9�B������Ey&���~+���(\X���JvT=2Vc��J2hm���W����Q��E������'��(RA�D$���LNV��vY����>y�"����-�L�V��X���#��a�M~Mlu��B��x�91i�y���"��`
�5�7��I���5
Fz���5��54�=4��i9���&9n���\���G%]��J��D�pG.CN
�K��.G�'�������U��m�U�>F)���rr=��S$���l�;�Jy���n��(�X���dE�����1��+�
K>(h�|p��!9��U��M;��e����5�)Hx��g�}�t�|'��:�*D�&����V��r$��t'��~������f������I�V���9$����XpI�����/���l�.����o����E���;~8=;��c���S�?t��x�,M��O��a�B�II�����\d�j%�vL����3p��<d	yV*��9;7���H��'wM��#?���M��M�z����4��Kh�0���E�����3�� ��!X�b�$shV ��5!�Y�,�X���I�[r.����qf��y�e�>�MD�>�X�I.#������3�!�RPa7=��v�eu���L~����0>&�&]���R]D��(�m^d�%j��[r����=�na��1"Mm����+M�y�0�3�)����P�<�<�������5�:FY�(�j��������,�8L�E�)��>�+,�#>I�m }��YpC������N��O�}H
(�*!�v�9��!�Q}�po@x��:�m��<P=C��T��I:<�����t:��E�[6�(Y�X��8�p�&��7'gr�f����WKC�L��7��$�����������(��KI�m���hRe�`[�������z�%Q�m��no�7M(`R�&�^�$9�"�����CJ�3���'%.����*�w�-C����Ih�]��,����Tr��''?5�N�K���]�!4ZG�>�#�r���-7Fy�U}�k�^�^�����<b���dWD�� �3!��b������=/��p������h�L����S�5�(���N�B����3BEr7�<"�
�h�@������Q�z�8/1�9�L�Z$�q.�Q��`�z{�w��x�X�^g��w���))9�Cx �t��������$�^q��RI[L����������U������\`�DS���1u�l/��(�1�
U9~{����Z�5+5���	R�Z��'c��~s*���q<��������E�s��j�B=~�����2�C������Q��rds�b������S���"�'�����KL���Y^��w���0�C]w�@ui=Un5,�k�M��.e��K����Xf�Y7;���������J�X��X!%����#^�5Zy'6M�|�u]R��{EH���=3�z��\��X<�=���_��rv@��<������W�ZCrq������H��s"�j!�A-R�C�^�%�(�I����&�K�*�j*�.�]���-��p���'}.j@�v���S�	��BD{q�����\L�Y�����t�N8��&��nJ�\�L��l���������~)�������z�$��)+��j�Zb��f���_�bX�=�,�X���(���)e��������~z�L���|�i��)���rL~��0���3�P�y����k�$qEW����r|�Z�8����`z�Y����Z�b����1s�(n��K�^j�?fjX|i75)0Z 7��#B�)�d

�s1�p�R��iOb9����h�8D=��5�X����a����e��d�NHX�E����TQ�K����
^ �!�i�~p)\{I�O��D'5��?;��pn$�����Q�M;}�r�e��k2E�����f���I��|>������qKc~�n�^��/�e=���lK���A�V��%�Ck��p���"��<�4��-Mb~
��S��WKqX��'N2�!G�����^X��*d!�N����E��
D��i��T�2RFt���~:;��L|)m�)N�x(���o.�t�����'Y���st�J��h������]�&[�h_��^�����|�����\@��k�B�.��._��oe��u;�[*�{3��c���(*i�,&5[�z��l����Q���,?�h(boqs������E�38��1L4| sb��?�{���$��f����I�q����������1d����c��W#�]�#Q�n����J�^e���:��.�>^����� @�P'Z3�����Ie-��4�������[�����&c�7_�_�t����S�!�	H#��'��/����<�pt!�4w������T�Q��Z����������5�n:� ���D�F����o�Z����?<�����zkN��Q������M����0�{�I�q����[#i��m��a�i<������"0J��v��P$�D�
����p�Tu�K�;9W�����k�pG�B�;�A@��5S�N���6?h�/��CRJE8�g�L���������-t�M���:���as��_��������RM�)�sF�p'�~��������4�a������FmS��������NO.�����j��-�*.��|����*��3K�
J�h�G��)N�&��?��7{�Uo��\�|a��O����-t��X{�{��(u�2�/����d�:2>&���G��U+�������n���x�I�'�<��'�!S
vx;	
,>&��0N��A
^��%�J�dN]I�f��t�SD�)�w��R�\����F�<��/t�"T�����XZ.����������g[���{����2;���Lcn�
E�=�N��S�{�����n����B�������������M5��������v`��B��Z�Z�=(�?�&�+�@F�?��@�,%Q��$�&�@�n��)>�=���<;~����^��:(	IU��(�/�����~2�f'4��e��\�Xp[�SKK9c�����_Y��z7����/����5����3�:g���4_�
�YN3��PH-���5k2������E^xK�eKXs�������Z���G+��DN�}�S�39e�S9-���hm��f�Hv��[��_K�]i���%��e�������3dpCV�'2�"+�����d|���d�~�����pH_�N����!Z�+C
�,��L#�[QG����%�Qko��Y������,��bG��Y�Z�Y�ZV�>5SLVi`�8�����K����
sh�I���\.����SrqX������Bn+=���1�Q{��v@�G2q��"[�SPn�����E�i������YH�fl�/�3���an|�@D��V�dW����4���M�@��T7�)���1��5(�		"�X}���;9*����������f��U���l�=i��m��#fF~x�{�>n&y�U;mFv��g�B�+](��2C!�E6�������fd{�:���QS����|��,A�e�g�,��J>���V�:y->�����?�$FI%U�.��B����QE�)shK����,0�+u.x3�
��`�yvy����R�D�K�B��8��o������(��e��n~T�Q��0�M{*|��]t��(o�����3S��tV�m�4������xF ����J#"AA)7��"����Q����<�K-c�p}~��Tf�!�b�-��M���GQ�������w��a`yY'��1�wD�Ez�t���Y�a��@�fR~An��0e	����)�^��#C�aX�$�cRl� C���_M���J�_[�nl��/X��^�����Vi�q����'��.�t�g���������
�b&���c�g���Tn�A����B�D�f1OVv�`��2Z�,s���`��3u�m�aH�T"�pn����#����v�\�����NO\>����37��d'9�n�i�t��Z�g�z�����s�6TlZ��4�M��U|I����k����%� �I�tJ��9vu2���N�W��d��z�:-���IG:)���I�:)���i#�V����c�f���_tJ���M�����q(��K��]�����P�������a.��y�p*��b&�8��(�����:e����aC_�^b����rS��`Fb�g%c.�U�Z�L�����=Dd����Y�\�,SP�1�A61���u�o}W_��+�s&���a���e:�[��p�Q$�w�N��:KL^r�"�_(�r�[g}.�4��SB���9��<��Y���M��^��|Gz�����U������n��G����/��o�{}[���C5����������A'����s�4�3c��jr*'��Dm��@�H��[�a�z��2H�k��y�Mn�
0��Q@�����k�u�[����C����!�w��)X��h��fO�vC�)��<�&�5��F���L��Tm6�,���xqruU�+`8u$p9x�;�i<�������T�F�_jx�r���w�H1VE��9�=��8���v�t�'��t�ZSHF���7�lR(�W��-����F�f��rEtOw�����|:�Y�=N������1'�]�Gv+��rYK�>��������c�,K�XR����KRZ^�h�[���k�2�����h��Jb=��~ryuz~��T�2�nK*;��������|�����34�i����QiiV��z���luB�3��#������R�����*�w4<�� s�&C��f����6
���$
���8u����������@�i4�l���^�a�>�mF����5�r�Mpz�d�������k����H[��J-H��z���Q0��������HWn��W|&5�T���=��Q�t��'�/|��%,����G��l���B�Z}U!9�&n(t���u��)J����"+N�������J���D:��1�k1��B_�(� &-����W~��b�a��2��(ub���I/ft��f��`���z8I�+H`D1!N��Y��55��T�����������^�\\���E,��xJG�W4��X���H�
�������s���9_���#�TF����N�dZ��3��`A������B���EfK�k9 ���IJ��N'����+�����+=��RADK�h�J �)� ��5Kd���$��i�(=��E,�I�5��|���*�����g�H!(�DX���$�<c|f�
��,�r���M�]O���^nJ����z�Y����NQ/���1�rD8m$x���v�f�����T<7+���n�tv�`����"�����}!�;/����C��	����3,KJq�JF��s�4�L��,!��������)�d+gH4�S���k+0���Ew0�C4r�4�E>����6��������+G7�
�"�W;4�`j�0�&Gj�s�7�Ao
��o�_��H�!�;I,Py���)fi9qSN�H^Hj�T|u����q��AT�#�3�w�������� 0#���1�&�d��k�
�+��b~�S6��<-W:'���f���D���j2�!���$im+|�b��
��y��!����h����� �������U�8.*ffb2��hWo�V�Ga*���
nzC
Cv�,��To��xd��l4��q�O�w�R�G#M:'���MWV�VcQ���+���"<z���`Z�	�8o����)��m������4����GG��8�P�d���7������I%}��'��H������|�2�����-��&����,��6�A�<��4'Q?F���?oJG���Rj���e�\0���$����)�<��13r�����v�P�
���BD���������R\����fO���I����~�;� D��vf��^^%xe���%�
��
1��#�Ey �gpfW���o���|j}��;�7��.%+�lt�	�~��$	�1%{0����t�M��?���6�����?��xT����,���	[�������AA��|�F/R�&�7� 
.���2$3M����g�6�z5�T�n+�L�>����T�ky�#-�~�$M�b�[Fx��]��)8����r�F0���gA9���y���B3�|�".n!��RWh!
���B���TV�zT0:�M�g������t3N�����}�������=��%�G�`Js�1��?[1L��oH��/���T�[�4�6J��f���guH^$D[���3/E�6�py�c\����J� ���U
�;���@�{$��^�n�t1�����������S��������p2*���{���hW�hV��wG��_[(�?r�������v����%m����S?XH��f�7��������������V��^]���jn�hF�~7$6�hdm:�������K=CF��������ya���R��J��8*��W�I���P�������[P�e���u�6aZG7����*>��~�<U;�ow�t��N+x��������s#WM+��Q�-�	��	�U7�x8���`�����#��0
��dt3�)�>)n��OA^����
��Q
{_�O���f�I���Jgg�����*A���������A�D
��^�(��q�=��E�?R_Qc��)M�6<~�i�/�:m=�c�o�:��j�whp��"�5�Z����~w��_s�����O��oS�������/O/�@���!p�I2F�=V=W/d���+�2�>G��������HU�$�&Z3l��<q,�p�Z�kw�w�U��u��S<��2�����)7���+�|mcbg��Cn����I��y u+����9��+j+��)���~����@5����A�0[z0*F�oe������������"��?���>�5�~�`��~k��wf�������
�����7'���q����H71��������gw��v��&-���p��]qk��w8M��E����R�}�NR�~�fVo��Z{y����-[������+�]5�h�U;�-<h�!���}Q��XF	�����v�������)�/R^\\�zs��J>��zC�}Q}(a�TIW��.a�

��8c����;�Y��
8������n��[��K%S��������A�]~P
��#��������q�����3��L$6�g�������zrt�6��D0�_���������q8��/u���x *]���������&��SQ���m��M��5������9�P}�k���k�A=�{������	�5��z�o{�����2�
F��Zd���+>��^8�4�����R.�1'_	�X��,��M%��x�.�4 ���~*��i�oxL��c�5��T��O����V���b��p�������i:���O(�eI�E�P�A�H�s���%��q*�e��x���hC����K��F>��iL��������`�&�kl�_5cX1����f���k���w����u7�Z���G��.��~<��I�c"\��=��>~{�R������,���(�,���������*4O.�_�������'�B�;;}o���|]���_����|����ZpWG��	�&�W&<q�����z����;�]
A��6�9��YC;�y�<U���"��]7E�W%����|�N��(��g�xB+�DGMXD�B����K;Q<\����kt�������#�
c�����/�?-�m�12_+��6C�&x�O��TtgH�Lrd�0�q��C� j�U�!EOQS�%ADt|�Kk���
$N(^����PM:�� ��������,O���Zh(��T����R
������f�.�
��3��oN��`M"��Q����ZY_������r��Q�MtD�x��O�� F���C.�D�v�5^PI��8*�y�/�����x�������6��JPup>l�����������
{B�A�����^����
��A"t@�s�DZ�$]Tu�k������n?�H0��FZl�#*.��g\ }ZZ��&#9�^~�i��.D.&eR$���?��Q�{C(h���;�)D��'.�8��,"|�,$lb������5�V��~����fd7����4^�d�R����4H2��
_`��TuXQ�vF�ML����m��S�����K������O���r�Uw����n����:�7�eE�N�%�7Q �T�vv�Jh^N�x�����'�9tUE�;EQ����\����d�#/�[��9��&X���/�U�p�2h���c�=���D������ls��l`���p �l(���q�%B�
�uN�d�5�-p+	&�g�te'���X��X���LY?�o����lkd�e����
cYOF�h��R:�88X�,�����ev������&%�k0���G�j���q"��+�o39��2E}o�(Nk}C-���}�h'��]ZI>$�����i�����R�W�f����g�f��&�����K��^5���/Oxw}RFK�F����TV~�a�'D���pH���
��qx��P���1n������\��9*G����"U�LC�W���o�p
O�u�d!S��r�)�=��C����J��z8�O��s�<�������r��
����G�6����������2�Z�{��,C�6n����W�OG�����?T�5>�!tLY���Th�Q�d�N�B>�]�)�q�UPH����?��]��{yzYP�y�2��r�}�76aU=�d�������D7���d��>m}r'��!�E1{�%"!����;�xV[�"��B��F���Q}�o?���E��90���Ke�e%P<�����b����R�5,��F8sbZ�<��K�82�a���������(�E�7�������q=}H_:l�������"��h�QIg�Rq�����8�I!��� E�B��>P�
URv#�~�=:��`�x9�����4Eb�\"'f����^��v�n;�f�[����l�LV�
��`���j�%�C>4�Z���N_
��&`�����_��L��S��Lg��[����k����g�k
�����Q���wX����X<��ne&u@�E;���XpI�����/H��H72<��a����y������_��h ������/eQcV4.mxY��8���v/$�l|S�r��\�n%�vL������jw��K���M
-�Ie~�9�v����&i�������&s�&W
=�e_IgY�%4x�gS�"RA�r���Z�^�,A�l�94+�`��B�,]�E2���M�$��%�BN_�g
���^6�N�kgLn�����
��d��+ah�0v�3����O�����^�Hac
_��Ju1PN�|������s����]�"Mcz7w.�x	p��*�(q��x���<
�\���������#�iG[���u
��W��#|F��O�$�3a�YH��g
����{��d�*@+�@�<�Ba�[�,�v�d*#1��d*V�$����S8>���lHQ���\�q��z����-^i���8�^+
C����v������m��gZZ�;��RREs���6�T�n�����������z�%Q�m��>�
��K�A7<�<.�����ZgX�V)Q�x��XZ����J�j��*�w�-1T�ML����/eQ�$x���4<9��yur]2������1��>�#�r���-7Fy�U}�[1���&��	��&���MvE��	�;����������"^7�=�����=�����F	��tzJ&�%��$@L�a��>}4k�I�TMG�(�=}����Q�M	-��8��(w�"���oK����7C+�������H)]=&�#�%�$>�IT��G���-����dM�����Q���%��)�{�!k-��+�15z�a9��
"��j������&HYk����q������;C��t:�PCA��|���}��+*�#T���Dov�2K���0��/W���Txv�����x.f�����2�f��l|�g��,L��".�S���*�����S�]��K����Xf�Y7;����������.3L>��J�V��M�>mo�E�!UOr��c������|I"����K��QYK\k�+s��BdW��A�\"��g����R��0[����{I�GuR�����p�����+�On,���8A`G ����O���#���7��g�&B�nJ�\�L����������6S~)������z�$��*N��(����M
��w0R���R����c��#�5�E����������}m����^��=����I 8v��Sd����I#[�(��M|_���a$�d��s�/���t�tWWWWWW}�=���m�&���J��k������s���+������e��"�m������x��p���jV(���Cs����9�K��89����1�R�MF8y�Y���A��J��L��^��6PAB�*<[��7�4�4���x�S4�qp+����/^���N�+��_��zB���$j��&
g�����*�V8o��e 1�_�D�W�����0On���l�D}�L�bK�����V���\���f��J+�>��"���C�P���AV6�K0�x}��_��8~�8[�Kn��n,JRH]�:�?��\����t��W��V���u}{;E�����9M���|�	����������h�@��������yd����������n��\�_���K����4��`�������U�4J@-N�<�������X:1�j
��7/1"�$�v���eH�T8���3n�Y����R����X80��iPIo�����z���7G��Uf���e���b�<�T�*��U�_��F�C^���[�����q�|�~u~����S���!6�H�-�h�����<pv�@�h��/�������g�+������q�i+��4������>��1v�ez����O���?6O�������9����'Ws���G)�a��g�\�����N�>�m�|�%l0�g������
0Ju�N;bI;S��M�?����������#��0�V������!N�j���Y�}~�_��#RJ2I-<"�4���1�����r�A1i0j�������E�2����Iv*%�wAI'���5O���9e2�n���ZY��U������(a|<|KE�|�bYR^�W�8���8)�
����=�q�S{|B�4ho)z���{�C,���$����[���ZO��+k�(x�9��/�V����bV
�������'���K��;|��V��?�����6�V�LIn]���|i�h����"FLIvg��z���Fy�6@s���1nB�i'����>������U���a��;G������NXi������*�
E�;��G7��|�B�4��	���9^������W���������5����S�����l}�6�x������Z�!����� '�Dy@�kW0�����UY�3����N����h��<: CI�)�Mc�eC���nft�3�?=_�>W�������vD����b���?�_9���4���w/�EJ-Z�}v�
p��y���6��7���������5���t\|Q4�8��u�3�&���Z��4�����o��lMs������n��u	��{a���nY/~|,
�j�9��>���3����L�{�P�
E5<�(`��:k,����!��U�\C)���(�8�^�C3z�^���!��D���;��)c�Ht��53k��j�/6g��}<���������4��s+�V��Q
-5�1�h��%���,"^E���A���;e7����{8���J�<��A�7��]��F?��
�]L�U����0X�X����=#o:u�,FuD�:K�������u	~����N2��N}�>Lc�����h( �v��p��>ft�-|G�4�p�N����|�^�.���y��*HE�����4��1���"����j}��Z��}��ed�Q�z�o4����R�ko�24RQ��S�8"+d�v3u�mS7�vj�T�wa5�uf771����C[/���@��g��O4��9����w�F#xcR���D'��Yh`[����#
�w0���f�����s<C
1�9�r*�.x��j��d��������E���E3�-�dA[}lK����MM����S��.�� ��>�B�7��(����mo�WB��#��h�c#����S����aww�;%y�P���o������a]-��{���"Oie�Io�t:��hMH�v���S���=�C�~��p��_M[�iY��Y��1�L]vI��"Ks�SO����cj�$%nf�|��]!���v��
��	)t��������5�@�?������j��#	��}��>���_���r�N�O5
�GM�J�����p:�-�:��/v�,O<}���[�@PD�j��5Hm��&�����<y��7@���)A�D�a6���@FO Nl�����y��,�r��&�}%c��jt���&�����:=s�����Ku��W{��;��_K�x7��F|�����+��2J�}-�K�G�G�k\�-����3��|���d9^�`��y,)��)D2|�wG�,���E��(%g�Wtb����[65eU�->5�aE�-����QB����Nq*u����C���-}�E'��&�0����&8`!�����''��z'g�a4L�iEs>�7�(�~��W��;_���_��
�:�Zw	/�J�:�5<�8)�-'n�K�r\A5bzuC3x8w��{�{8��g.�"&x?iN����^�~&3\o�)+��|����:>/L��N���{Jy-����j6��	��+�Ey���-�@��1�+&K��dt�b'���?��Lv������v�����]�[���T�r�3���s������cw�;X�w����v�5#��Ey�������-�����S�$��W�Sb�n�Kpa��b��3�4+d!�J|��>�y/n`4w&zN����=�����A���9	�q�u\�T�6R��D���6�C��=�f��������$p����JA��|�4�dee\�k��,���m[*���KE;;N���������Y�N�S�$,G�n�2@����JYK{_�b��X������
�~`E�����b�����\���)W~6re6M+|�����F��|t�:>?{�T�4�n3G*{���NP������B�������Q�4��b=M�(��Ht$/FWrs�=�CNol�W�Q<�iV�eD�l���h�1Is��b&1���)N-M��������\���IV^�s�4�i�pL�d������2'E�
f�����N��n�"�D�Z���|����(X��g���9 �t���F�R��A_��k�g'"d��T���f\/�_4�&�:c��)o6��7w���b�J
��)�0qGa�Um@#��LF�
������HJ��"*�7�D?l�{I9����I������n�EX��<�LN�4�U3\�%�Q�<���f�P������E'Y��l ��8���Hk���T��5��}�(�<f���S}^I��q�9S|R�xg.�L���1<tN��W	��|�d�)HX��H��������h�,���e�g���^"5w�`>��h
R���i%A�S��*j-�2���v��VI�+o�<Jd����z3)U���w�8��cc;����P+��]Wa�����<b�T�� �,�r������/�����%�[�K,��j��������`2��).�N��	07�������1�/����h�>�	lQ8�,,6S���9����az�8(k���")�V����-�B#�eT`	MM��&�3���2Mz�@��H�5M2k�0���Ew��tr�0J�B>E�\
2���{�\q�N����S��|.!�|]���Q$.Gz��5�n0������Y(	I�c��N*�	#!fi-sSN��^H��T|�?@l�id�As�
��U.�5��]��+b
A<Z'0q�'�����T	L�����A3����+���k�m��t���ON�)99��%�O��3s6�h�hD�
�.z��V>��1N0>��������]H�	��qSSf&&3��	�&o�A���i�Nt��.�s[��5n�x����&��
��O�W{�����'��}�����jb����|�5K.L�`�$�]����e�,P��F���p�.�\����������eK�,8}#X1J�zd��D/(������=�|�s�w�������3r_/9�9��1t�f|����(c��sR��An�R�������~�g���)�<�H�X����BYb�}1Tt��!��p0p�lXK����N7{������O�6�;(���]�
��W���������� �����gOY�ss��������6|�	�JQm�t�d��XQ�D#L/%#XtU�8�@s��/�%t���������0��Z�Ji\�����-�����?(���b�
�����S��![i^-�
�U����$�r_�q�\�>�pu14��T�+1��g��5��	S�q�+���/J�����4-e��l��R=�w�����S9�;y��h�"wR������;�&R�M����)5��z���3�t��P&��4�\G^�T�"Eo&��
K`���7Q8�s�;D�"L�\�z���(~�t-~����%I�J�5/}Q%Gr��H�0�E�K�t���?�J���3�_�~�;Y:s%�lG���Jsig�rP��=��N�	/^�������K��D����i�S�����D�h6�Rv��$r��*��=��iC/����7��@���I�d~�}���]$
n�K���V����4�^��f���]Z�t�$\^������Jhj���v��g�f2�����O�10��f�l�N�<��.����4Jm(�U�$�m�8R��.�6znD0����l9�"Q@���A"���6�����������t����w0�&�)p���)�����H��:�|�R�>M�0�u(������ol[��o�?��n5�7�y����O�������[����V��7�|�?��?{�E��P�@W�d0
��rP�����������?h��inowz������0�>����7�>�~���<�������^���Vp���V4����C��[[����Np�B��E��c������L�n�4`{y�
��W3��'�a����Ov�=���.��������yiw�7�W?[�6�AD#G��l���$�-2�*��U��T2�������������.WsJ�mb����R�_�9������I���.���f8������W��8q9)��j�3�N�9�((��Fa�jl,��*l�r?L5�A+����n�5=�<���*={
�� �G��*����9��Tq�R����A��)]N�����,Q���Wcr+��{$Z�����w����v��
Hk�YP9��#ZJ�1�%O��}l����b��__�@{��Qj:�������f;t�w;��)=���:>���Z���x���IrG�����O��Bj�������
�2��������N4��
D�Y���
�9���Za~�f4�9���6j���.��7��^�@<����|5�W��_��������N�_�����p�8�3��S�a8�L�t��a3���g��]<z���/�__���4��~���V��F�[�o�gO��G�*w�}pq��d�5�f���*���m���4lT���%��W���*������h��
Pk����u��x�K�[??{u��������i;�bz�����b
V1��S
����o����WOgN1���jm_�Y<���Fc��p�q�WiG��i�P��la!�a��tc�a��i�i������=���L( �ib��x]0��&���C<~V���r��a��ne�~�=�n���p�����w7�V�����U�=�W�����������ND��M��4a<�U8MgIp���1]5E#��l,��#N��L���v���i�������vr\�����b:����p�|�"����nAo����i|_�������K�WI���w�</�iJ-��CfF��g���`<��l�}���E��>
	CM�MP{�:��t0h�&$������a���!�(���H��c�������������K���5��,�x����3O�g��yp����U���z��Q�}���e�;<nq��s�?_'��/O����`����������W�����GW5hS�j]�����:�C� nZG?]c����p�t��Q�J�\����N�[WH�W�W�n���o�������D�y�
Z�����	]?;�w������H5ep�j�����	��>n�����[����'�0fx��������i{�5N����''�7'���-"$t�r�T�iJ��St�?=��]���+��'���V�N�]�?����X�#@���V�
��������epq}	�:j��!#��g����������������
���Y����k����1�|b�����g�/O�_�l�`LT�!�^����\_�$����W�Gg?�+�����p
����&�����Z����CL��:��#�����1H<�`����5�k�{���]��W���T�����U�{���^��Q�_�R�ml2
;� ��ob\���~\�v�������0��f������x�nr�/��������P'�~�?f+����}����!�������(_]-�'�
��p�����J�=������y�B�0��l}����O�������m	O�O�������g�~��wO�O�}���,;�)���A8�K�`<��Kz�c�.���!��H���>F���@��0��c$�m������-�S�������MG��o�W1����Z�~��[#4N�}�-�������Z�C"�>�>�G���w�����|����
07/C�U@�N�E�������UCG��z/�\��%@�
��v��Ja_�g��h��U���+�#7�K��l�Y]L(R!�Q�R=��S�8s� �F����)�Y�R��p���lEC'��0��Ex��b�,_�'�/���eq����;�aK$��\�b��O��d	�z�������
#u7�������1�b
�	Q������������h�a�T����_�,����;z�S�`������"�����wP��A�������8����������U�����
'��`�`��:r�������k����H�~<?9\Yi6���0�����hz�z����T��i�zy��$u�([����s���/��:vY�P~q���-f�E���y���?��M��%!Qlqr�!�!�sT@#T>�];�
�8]�6d��l�����8{
?n_@����D�B�@��xxC���,;he��A�����t��Kl�[��`tn����J(&����/�&!E�%���/��[�*m�"��U�l�w�g������/��	����E8������R��:���-z*8�]J~�U������v��:����pF��3��$�N�0m��a]R�j|D�S���C�pxO��� `���kA���oi5]i8��������fg�E ���6}&K�+w���1j��xzJ�M��*��*
��/�(; OE��$B�����{��x�����pe�+����
"&����,�rVug4Y��� �
�$�7������'J�)�8�/
��
y�q?ui�2{
�3��VF��6�>C;���:���\���9e4V��$CR���������/X��������D�6JW�Y��Rn:P���px�A����p�� 8�_h]�.�"���|0�����<T���-�4���+M�Q�P8��D��r������1Xb�BH�a�:B��OI������O�,��9��}�9���nE�L����<���"
�&I�N�
�WL��Q�����Y�d1#����br�f���o�Ka�;_V^T"��A�~�|y|e�P�
���$D8��xz#�#�<�����x�$�.^�N�6��m������#a�Z+���E���o��ItN#��=��fh"v���m�d�D�V�_��j^��a�����.�����e���c��j�E��|��a��
����Y�S���@��4D)��8�
���0y�p��k��5wJ��x~���p�����qO�M9����j
,�IF�����I��6IQZ���z������1*������]�u�$�1��Z�D�=a��>u����W�ub��"cJ��2����IL���J��W�����.ROV$^0��H�H9�f8J,�9�Y��z���/m��j��l7��yp�hU��e��$T\�xtr����gph��J����#u!�LUd(�GR��Ua"�l�YJ��3�C������L��v���9��9A�t��	(@B��T�5�����gTG1�cV�@w��O�+��l	����@��H��Er�K�����9���P�6�3�2�*O#�E
���ks;�$n2\9^�����*����Pkp^W�EQEe5fI�[dC8��6�U���#[�����i�N1�dj-8�K��H_�iA��Hi\-���9q�����vX>�h��j���I����V�Uh����;(G�"����^^#�u���+~���j%�jFP�3��;�.�|��'A1:)�m�����$�h�Y:07@M�L,�OP��zo��y��r���`��F�//1�k0q��������������D���DPI��w��=�L�O�r���TAx��]���	��
�y35��xi��j�����d����
�Vw��,T�N/	��,Y�d��'��Ff#����(�$�K/r���'�v�Z�O6�v���U���2�������]�2�>��,���,�aW����d� �{FEO����;}U�H6�]�f�)���69�����I��tM=�����&�j�*�����{�������X�WV*�0Y�P����aD��m�h����0�D����y�C�%�WB��%�WL��"�8������OF3��|��������_�F�h�%c��E�m���$�O�G�}�����&���O�M����~����C-���#Ts%5�UII�mPaj7�g��mj����	g�����Cn�\N�w8��*��e��^��b��$���[��[��V'�����@#�R(f�h��?��X�����i��0�����/�up�c_�B���QPq���]�p)�tsam����|��p�����p�3V>�s�v��U������;4
�"*szD�=�P=-1f�Z�,�y�U�aj��o��Ot���e-���-�U��0V��~W���(~3�)~2����l������w�����f5����u����Tb�cP��|-����\�n����;qS-��_��)�9����N���U�~���]�NE���6l����	��9~XTK��av]����rmP&�Z��u��#�Z��.�'q���rh:��;U_Y{�=2�-1X�����j��1 ;d��~���	s5�yyEs����/�������n;�xA���Q�J�nA�^4��A�Z�_R������]��n3����Uv�z�����7�7t����;�m�Bl�W������jg��S�����LKz3�����n�;��NI�n�c<>k]^�c��i6��La���
�_�R-�����]������b;TnG
\_^�]���O�ZW��U�*���gQ���Y@���E��s{6������X��.��kx�U��tk��+c��I\�G�i��j6��,	�d�~F����dH	e�R�q a>�]�F���/�KN����X��E-���Ofl��k�k$%w5w�
|�����j��r_\����H/w�!����-6�{�s>3T�@�����A>k��Kt���y;:F�_8���.��Tf�����'��6X,}L>����i�^Q1�c�'%���3�K?�dr������;��������d6��sp
�0���aDh�Wl�o���K�
�����&�?�#�TY�� x$��_�.~u����,p�P�9�4I����T��B�������|�?�aj��BT�����r[�������Kca[f��!�f�&�4�$�q�Kw��n'�-����'�Qw6�t����A!�W�N��#P�|����^�a8���<��Cl�M!{?�_�b��=Bf!�7�bB1�}�^\w�����I����J7���XV�NO&h���~��cS��N�/��K�r�(/`r��fD����0��\P�
���G_���x��A��	���`����J�	�����R���M{�
��F���B������u`,�_5�Yj�w2$]^��W=���m����}��N�u�ia���Y~�g�x���~�B(�0wG���q��"��&9	#�[;F��C��2^��]���l>�5��d�Y<��c+���=Zn���?���
s&B���C�\�T9e�hB���t�+�c~+���y-�*�2����$�o�nU]Qr�Y3$3�������c�}�H��a����#J�M�2�D7�9\7�*u��Q7�c�t$��R����a�3�JY��xb�����6�����������T�����v��X@�����8�k�R�FP�~<o]Y�n����%'�-I�z)*�����
��q>��fZ#�ff���`?�����5��K���N&0�*Vp��8q���;�'�����N�����1�M������A�O�0�u�H&7/�L��)�Y����1M�B��T��a�"#����?�;q6�
����$(����![c8B��J�vu�&����&�4���&�jt�K���?�_���{U�"�+�5�^=�<'EGs�����r��oT��C�Y����������R�V}W'�����N#N�C
���4����[�U��|�^_Q�8Z�qOp%i�b��|s�55N�e�bngq�Ud��� t��+��44��������Q�V�-S��.c�	A�t��+�0$�����7(��������:}�J#��e�}9k3�nh���d�P�v�/|�C��ev�)e2��0�h�}�l>y�Ms���o�=���g�n}�I����1����������d����o�?	����ob�]�����S-|b2o<*�I�I���0e,Rj�N�WqJO�Lw�0f�RX)(����4�Ds&v���EQ5=R?<a	�-�[�|��`O�8����
nic��h��|�S�`�M���+U��w�>����!����l\j��&����`������u�������9��&�Y�2��e
��1����� Y
HC{�v���W�a'i�O�zA��T��1;A�(�L���O����n�V<�`���tB3orc���[>�mK1�1/�o���3�����?�O"�UN�����'NLi��n�]
d��z86�D7$�"������Nd�X'"9LZ/�������Gn�!�q�4�iG�����Q0v��~$�z���6cP��:~�Sn��`�����1
nq�� �#�%h!j�?!mTz�8A���g��S� ���1cD�
F@��-�%m8"7p[�����g���Ai�*$s]�R��&B��#Q5�~��lB  Ghk[��������koJN^@��F��%�;�����=�>�M
��A��O�J�4]-VT���l�/��m�	��������:U��V#����O1��b����tP�T�]�e�F���f���iU��;u���'6��|���:�3�
��oKH\��W�~���Z�����������V+^FJ�`?�3~��)�XGW���|uW�d�j��q5@Wt��r�tA�lt)QJ��q8�C���4�g���������D�W�T���O������`�~���U-ob���V5Y{��y%�#9�������S�1��$$�����B�������<���,;
h;�P�+pe�F�����`�E0A���?~�7?��t��39���4��`�b$����,
�olB��q\3A�����u���<hn�.A|��k�0�)x���Z�����d���6�	���3<i���4��O����KT4�+'��aw�5���'�p��K*{V�!`/�O������Ar�D�]��s����9=�����+�*i4�N�;����q�i,��!��7��&t�=�T���,������[����LX�L5&�!����������`fQ�RU��U���=[�x���	��U��=&�!D�=%� ����<��e��)q���7CX(������xw�S�r��(�6���R0��S���'5�a<%8G��V�9�
������.� ��Xv���jN�h_���zyL-��A��
��g~���	����|�K+g�A���V{J�&��:0��Z�HqG���	�u��N���:���r(35T�IICsv3n5s2@���Xi�,�M����dF�M�Q� NE`W�Rh���\�H�Q��������TE�{��Q������*��U��\������p���
a�a�*N���$�zH��eOn��r��(:�������%����S����2V��C��O\�3K+tbe����Q������&
�~�YZ���S�����L��nW��s��&��@�M0�8���S���.}��p�\o?�m����j0E�'���F��Ewm|�kc-2����5��U'V��:a���y
d/�L�C�o��f�r���F���s@�7�Q���!�'��7���v�eY������-�L_��5jD*�c����>�gy���<>��7�<*�^yzL�~�'��P��B���_�)��u�*���&^����j�ay���11F���s�PY'��i��;�����+w���:�#Z��]����m�&�C�S�8?L5r,���y��&s7#v>�<QO�6��(��V���g����R�}4������R���!&��&���gQ�K/d�����Qs�]��Q��-W�����6L�p<��i�;Z��@����C�u.�����9Z��l����(���J$GV�1�1�:{��B/"X�p]fw��(5h��a�@V�\@��\v�=�*�1
��Q@�����h���}��n8A�'.^��y��|��'!��@�����$@��fW�7e<w��S�n;V9��!zvhn*wb�v�q[�[���N�@'����T2a��A����_pP�� (,��R���'�M�W\�F~O5�GZ
E2�`b���#��C")��d���������h�1hi�	A0*{�pt:��Xc<��U��I�:��L�*7���.����6`����l>�������%}����2;�F5��~��$<�.X�0�Wv�F��2��]%d8�ty�~8��p,��	�;�P|P�dO��B]e��'�M8�NSFbw�w�B��y>(
bL����7�;��
��
{��g�:��b�����m���*J��|�"�7���.w��`��'��k����:(`���x!+��\�������_�����a��uE8�41�[[(I���s�mVy;q�$�sdH���R���O�"���Q(�����<���m��
�h=}D�{��F9��0��ySTU����x8x"�� �V��u%�Gb�N���d��|p(�+��J�+��.��d^�Z������m�Q�a[���K<+7��n�n���?��i����!�J����?[�'VqQa��:�g���
�a�jA�����1��3*F����X�P���P���@���,��
��<F_���C�3����Q�b��R�m�%�!�RH�#G���]c|�]�5X.����0v����_c���>F�z�[�FdO��x��(������o�a�� =g��
�hL�A4*�����d0b�)(�M<KT.��129!g�~M#{)�>���L#�%�A�Y��/B��~fC(��
�Q���?dy��l��7��!��
�6��}@��8�����|s(����[�2)�+8��Y�=�[�����J����E?&[?�:a���g�{;��k���G�����`�"d7=�+{Kr�)�i��������-����������Q9�������=@���F����y/���V�W�M�_4_7�Hi�4�U�`zv"���;>t����WM8����j"��t���y�b������FR]9
��>������{����>]���%�Y�S�b�4�L:E�$��������
�VC`�G��L���������=�����&�qHw
)���<�!������n-�B�?6;
���<���z8��m������Nr5����$���xc}�d����!=�7��>��S�$�&�d����DNLF��k^�u���h�|��z�EvPyr�x�f/x�I����vl{��o�4�mx�9Wc��)�50�
�>3�;��~e�
x���\B`��� 5\E���*i�����am��-l��)����[n0�X�T����t��o���3������w��g��U$��)�����G���������@�w�~�$�*����K�hbsz5���A�U�hWT���ET�FMF��������3N����q��<69K����$P80��R������e�)��������>.%�����p�2y�0���v%��`�G|�'�L�tC�E�X��B�?d�g8v�a�P��F<N@zT���6Y��������x�}X}t�hbhu��q��0�{����{�����;H�h2���y�.C �����>��}`���4��������g��;���r���I�5o�xRu�X�W�r����^�oV���,���2����p�N�U�p-/����j�/��t$��s��:�k1����+����~h:�j�U���j�7M.������Wm�?s����~v
9��x���f�(:��k�q�����u�)��j\�*L�\g��#�5js��0
�+�TF�%�.�{m��7>����%��������|��eU&.�Q��Sbx��z|�Xe�����[q�=����,�R8��SQ�	"��q��z�
������B�h)#�AF���^�tm4U��9p`�Tc���n
f��#�S���0i��}Y ����A��>�`x�cp�?��1-\�*7����:�p ��p /,X��w1k	W������Pa�o0Y��o����{R�5`����t9�|���$�������������
3�����pj��0%^7�Mf�:���)�G�����>�\����W�@Q\v/��]�C7<�s7=�c���/�
d�����h��;%1�@g�I��S�����5M��F��tG`����9������K��`$�d��0L����y�:��l����Z�8L)����L�p� ��MN&L�]�XL�
q�V��@���O�4G	���;^5Q
nh
���G�5�G��[����.�+@b6�M�����S�k	JPE'~�����m`��g��;��Be7����v��d+�mA�r'��#�����;D�AJ?B��=��r[�t6N%��.�0O�%,apO��W��+���l�sc���3r�2�Mz�8mJCK�nf�H����r��4�K���"�#�]&1��*K#N���`��d�(X�qBT�����8.�>C�l��T��?��P�,�1�
�=��{h��^PV�\�84B.���1��LZWJLC��[�g�4Q2�$�(��n%���'�@��N��3��5�s����1R��(H��`2�H\��)~�:��Q!�KE�-���=��
�=����<h��>�*8R��e����32E��T��h���������ut���G)|Hc� ?
5v�jgp��e����6�
��)���h���, �/����l^��"60������%U�+��������[V����TFQr��d��_���W����W�s�:n��9 ����~�'�+���X�+D���K�{2�"�]�u���\}�'�,���0�+���j�M�����Z�n.��{����dO�!��`�f�|f���D�~�f���X�p��Yv�1�EP��n���WW<|��`A1�EX�>p�������E�x<�Gf>���D��V�@!D\��"�<9��s��#mU�"�4�w�m����s��3�Fg��[k�E�����	C�����Mt����T,������G)y51
�&�B�u��t ���J����I���{�0<����*�����Dn�9s�(�]g��f�?���Yz��?������H~�����d`k���?g�]~�8F�� �j^/����G��@<=H�W�`D&O
���|N�Y&@ ������}������������N����������Wf/w�l�����\�hk�>j�i�k���\]���Dyr�N�9je����T�yk��m.�4��_�vB�|R���3:��������J><)�u�|�^36L'���y���]A�X��-��.�2Z%���Kp���t'e���v�[8m����tj��������G�yc2����8�\���D���|���@��������?W���MQ��Q�l<{nZ�Mfx��
7���1�@������c�?N���N���A�O����2zb�/n^+mftE�!�ZRz�$���#�+tH����diX� {����~�E��%��q<Rt%I�h]�U��\c��d|�}9���9���/���c��"��H���*��Me�H���YC,�=�V<#���^C�RjS�|��c�^IAi���y��nF��{;�wW�'��j�4��*��_
_(j�z���kv?���0�������x�����EI�KpM�&!{�h�9(��(���+ec����V���t����*�5��.hk)��.&�p9A,D	Z�jG���Y&�����!�����V@3KT1��#�A��L�1���E��.M�=W�3j����<g��%���;<^�`�S8�Gy�@B�����T�;�
>RP�h2�����C2R�����6m�r�������$�;?��XCo�"#�6Bf<�����c`�9ajb��o��h�M�P��Ql������\�\dm��Ub\"�s���S��N%J��)eZ��qq�-?8��CP��3���Wf������"���QD#i�Xwou��nG�������wq���SCJ�a�2�[��.���r�6���f.I"�}���������7Qq�<���T�L��?���X�8�0��)�$�&c�X������h�D�|�*��5r\���xN��9
��w�����R���&�C�w�%�3J���6�=]ie�Mh7�������N���1���������|n:��L�r�k;���Z�'Vi�!:%MV��r�	���:�N'���m�X��������9�]�������|���,i�J����8��O@'`p��b1��V��!�t��w�,���	t)�G�X����������;'��x�;�����+�d�n�U���{�����5����Z���V1�kk�uJzMIl�XL�[Oo��C����)������YG�����n�^<�ME�+��"����^W�W�S��J&>b�f����8��r-x�q�,(u��;���f;e|��O�/X��u������_��2G���4T<��
�9 -�
Dq�2�'�_7Z4���_�����W�Y��L�aD� �h	�Y��31HB��#�WPv�e��������\�x'�m6=`NC�N��������!{�HW�-"u���P��n�3��G����%g
KW����[ZSJU��&�c� ���d~�D)�
�4�� �4�I�-�`Y3	��r��N���X��1��%�����Hn���	2L�Ia���"�H��(����fQ����PH���uv_���[����{N���g�2�$_����E>;�j_��
������[	��a���)���=���3cy��Q���?sf��|��=�'N��/�:��^n��E�����B�}��9B�������N\AJ�L���f|�2�����hBHJjHg�)fS�6pHj�"z=���8Q���@X�rsZj����]��F
�`��;t�D�D��W)�1�sfax4����?n��b�#���^�gvs�jZ�N2u]�dD�I
�E�%�~R]�������dv��:A���7�)0�$,Z��'=��Zf�~
�B��?��������i����1�f�&/��-37��gh�(�Y�����e_1#�DZ�v��@���'��)sr��������Vg}S��4���'��������s�F���D3E�V��i��-�*90���9y����/���]$��KlS�6dU���$�3+�Dw��V���$�{8�x$e�/�%��5-����<]]���������V�x��}�#��~<?9\����6H����KY����Ake|8������l=���bsa��+�AK�A_��Q0�/
�\�`����M���tJ���q���?z�_a���!�i�����w���8���a(�
��w�7���p!�#���
��1o������B��
@.V�����m!�!cX�gM�sN�8�&��U�G����&�~�K��w�\q����g��C��|�|2�v<�B��������+�oe�/�4����[Z	���'a0����IA(����,��W��+�%���}���_�,�ky��g�^�1N%�!���C��ac�������'��%BZ!��?�^�_a7A�%������|L�+���h��'n!�_������D����-�|��6^�1
����2L3����x�z������ym�f
��������@^�������?�%1�E��9d{B��Yh0���d������7��CRp1�{f#��9"Z�������h�����(X��b%�s��2R~��N��m������yw�@��<��������LBg�-��#�A�[�����dp\4�w�(i��(���M���O���������i�r�C��������vb�k'�5zZ�%����D�{���6Y�9����)��u@nv��SA��ciR"�8db��T����x��c�CC-�����?�;��}w�@��.rR�[�>�����vJF���p���+��D�R�b�)���M��������9�h���Y���
� ����s���g�q���x�$���2�;�,4��D����'FU���4&�����/����Ci�B��.�g3�ona��GrK4����)M�H��s�MF:C#�5�+m���^:�7&`+�"��Q-j���n�s2�{�:#�|���x_�a���,��4z�3	�a�����~c�1g�7>o��\��xQ�s[��k����;����#�W�~R(��bWvI��o����K;d0� �)#%�AI�$�]��G������k�.e��:��2  �������A��1Ix
�!�
��aS0�v��aU���H]�D�|�����a�&?��b���$��j6:NCf�_[y��kl�3���H���a2�`��h�qVt���x��.���c�?:o%��6��>��.��P��."v�+�3���x6�V�=2Q}UW*!���@���J�,���9�m���������5g�yR8���)����Xoe��9���-�Pfy)V����M����
��8'��Q�%�\Z8��M<C=�K`o�2ec1=��}������S\�����/�������T��7��I�`)/[�
&5�/&������K�G�P���3��J*�1����x��P�F��$��
g-v�MF����9LbXI����P�D9f�s�P�CU��c��� �
(,[�ZX��KtEe���_�KB��Q [�w���x�|�{:f����=��_N��`k9�?��s�-$��Z���lvk���D%;��V��m������m�|?1�I�q3��.�G�K�shQco�w
t��:�!��W3�}��
���%X�`�){Pm9=3In��jJ��8m�����;�
ydb��@=���Gw� �nv��d����'�z'�*`/GY����K��@j)��h���8���S,���)Yq����nX?���<������������M���@�u��4�A������=#tb=N#G�~8������'y��jfR������Q�I��������xf��d��x1�,��i��}������8���Q��;�&�g�h�K�*���J��P0*�M�W�5h��I�p��\�p�(��F[f ��[1JmC�|���`6�HhR��3e�>{�}>�0^?;U��%�h0�#q�j]���4\l���7���j��A�Q����v
�2�����)��!xD���V\����]���qS���}�QB�dQa'�0@8�	-�����'1�<%^��q
�\���!z�"�x�Y��*�T��3<%�H:�R�&v"������qq!�H'�
?���C�C=�z�x�7)��p,�����g��x!sC���
 v�p,g�O�H����N|��,n��S������wX"���]�	��c�������
��f����&���\k�#�����7�����-	�(�5�M�l�5^4�J�Y��P�K�"�������B�4�M��E�7�vBX�]��G�}���U�.�����%i�C���d����e�Ed:������o������s�l�\�����g�G�D7����J� ;r��4'���T�w�����L�z����v��b�eF����/��;"�LfT �������������M���6=���&��&�J�	]EPpT��'��]-�	g�:L��|���%�G�s��jd��}N��8����`�#De1��f���eO�%!p����u�6����i�-w��Q8SXs���'�������n�!�Wp��dhZI���M�q>�i�����}M{_��u7�YY���lk	A�Q��/FH�t����8 iF�A���[�7I��d����C��)�&�*9�����P���d;v�]��a&X��c��{D�-'k��]�����@R���r����W���~����R�p%M�b[�[GY8�2}a��R�}��������5�����)s/(������&�-��H�`�-���9�����:-���$�SY���X�S�������V
~`3�����
L�Bf[�s�zZYO��,���D��@�cy��\3%-�c,�1��P��E�/�/.�F��k%Bedv��|x��
,*=�Y�E�9{e�;geR!�q���P�Ir[�uF��������mU
�b�~�x�
}��x���sZ8L�4���|
YG�PF��i7m�4�n���x�f\�p ��%G~�Z���C���J�A�+q|��xkXo!{���>��nV������a����!�
tV?�������g�R�1,,~���Ia�`Y��Ro�����?0>��
T�����0��x����|���f����d�	
�3���L��4�3]���Z���}
������~���?�g8Y&��`��0D=�O�NF�������pD&���$���t9��.��!�x�7��������6AHY~c,�������,����>XGQ'z��W������[�/�.��������ki�!�YO��
��E������z�s��_��Nv�2�Z������������z�zQPQ�~���i�Q��I����*]&���"+-��'�
}����=U���=
�tXm���a�?u����6�x�A����xJ�����#lc�3
������k63���D=�"��V���WUd}^^��������5P�������u�uutT;8?;l��,���'1+����G/FrJM
f@]2G^�P7�~sv��X&k^���_{��T����#�+���t�l��` T*���uSnA�Kj]��Y���2�je���V�*S�`��u������*���K�z*�C+����T���M���)^>9�FG3�kgj������vg\�f�F����u��$v��/<�g?Xz�����y4��oN��h�@X��b��K�=`��s�����)�(y����T|�L�z��mh���&_<��+0��B����}�8 �nL�E8�+\tB$8�p:vJ���FSp>I:����	��Z�e�D ..�(3�3GgH�*����wg��cF�����Zs l�vR�(����
�k�c8y��t��������N:��b�k�=���L��&c!{x�r������E�}c'	�J�E�7$EF�1���,.�)#����M�?A)<�z�j�
k���NCy�wML�(k�F����\gG����k:W!���MY���������[3I�)�O�-������"a�P��vM�i�����Fm�A����R���u�Y�Y�2���&U�u`V�J/�C��Z�����N���q��`3�����={���\��B�kj��+�St���t��~���4I�Ew�AY$jg1AXNoG�������t��3
����o���vjKCS��-M&>fU|�Y�6%a#�;�(V���<��fV���$b��H�d ���0bo�A�u`���'� �T����l�j��=`����L��9����a�*
�a��Ud��w��:�0hny"9(W�����c64�xex��R:s�A�����"m��m�R��M�^���)k����T����
 ?-]���J�U�l�>�y����#TA��JY�oi�0�2��E�@_�e�t(���5�m�5b�!v��4{�L��6���T�_������&�����1�h3�C��(8f7��(7o\Ou�<nsr\ac�6Z�hB�"����O(����9�}fz������-�@b�;�2^x�6��,GX����Q��AH�X&�������;[���~7	w���/�����G8�l']T�R����|"[�jm��4���~�t�Z!����D�N��Y ��.C�/ �\�������r���e����@�����-������I�<[��%p�8L�����Z��o{��r�E��9�>���8+e3��W����l���R�.���=�L��	��;O�=L��h�5����t�I0�&��k����l���@�;n������p�$F|�B��Hi���z�.���&�C	���|sEDG�<h}�?��3I��Q���7��}?���[���6����� "[�U��`���}���sX6�'��v���Qg��"�.Uo�����rPA�*@��<ZO!���B�RXC�m���^^B4�k9�����l+�����`�l(������d�?�/��fY���e\
r��E�a'��^HjN�?�5�c�=7k���,��w�+-J���3�M���}��|v�,����:��c#���|�O
Z@�Uc��M]��������{���X��&��
��<����!��Ym_G��l|�?�������{"G�p��(B�^8��+|P�
'�� ��-���|=�����&I2�����f�VW�����:����}�Oq�-�+�[���1�����W����	����������e�W�lml@h7���Y�����L�]�Uc������p�j��L^�>��Fr���*;�����F�Qm���	#�`Rn�OH-
�FC��c5`��~�����7����&Bi�`�������|����r�/hk�/���uIK6UZ�P�;G���3�2>N��	
B>Yo�s)�4wA�t�������)����.�t"m�M���.���*���Y���b*6�S��TjU�9��5��s��OJ�D��a�"?[���������i���6c"�5��� ������i��~OA[��{�T�r��
�����y��{�{�2�kS�V<	���4E��{��MW`����v=+�33����4]���S��,zk���{1�q
�B��	0�[u���:S
�z�um]��WV���D.���NL!�L+��"�9�HV������Eo���\0��ta���
S���t��2���;�-���O��Ux���v��`yf��iV2l��oO_�7V�wIJ���������fm�%�_���Ww��6���3�@`�%���!E
��Jfo-�����]tV���o���}�;wt��z��-����e=ol@ix��'����������27�K����V��k�-������9�*r�o+����x�4��2�f�2�3����FS��6����2��4�Bs���y����;��]��&9o�{�%��~yEA���gm��PR���"E+X+��Dv0I���mA<��t�<�>�O���Q��kiC��|���I
6�A-,���x�W���,B�t#3OU�`���:��T�,�:�ka��*i2��W�<��Th�
��w�n�s5,��mk��N����)l^r�����~��H\�Il�(-�BT���-9zS\����c�[� }��n����}z~x��X�yu�
���75���+).Sa�������f�Byb��Q�����$�]�0������m|6D�G�|����d.�D��2����}�d�4�7�! ����6��>{��`+.�(���0�O����;�����tdA�:�!�������Z�������=��`�"��T�O���z�|�<��[����� ���w>q���q�������v����FM,;^���w��il��}#7v���73����v(L���A��V���87����t�1�`��8��%�}�Yd��!�p���6aR{�4n
N�w���k����f���Ne����qF�������=��n����L��_'�
������D������@��3md��5��=,e�0��~��N?L�%�2w�4h�a��[O^MF��&�)f�0CqwE����������=�z"Ai'Ny���M��j��E�IC�S���G��v�h�Q_��r@���=���)I��RV��n9����oz����$N�d��CE���s���C�z��<Q�N����2�Z�43U��B��:�h��1j4�h�:_�Xd;��=�Hj�����%V�kIK�"�JC]OjV&��+N��p�ZW�^>�[�Y/z�@�[V�6=���z�q���D��x#�`�x����8����Pu')����a�2H��h�%��]s`O���k�����\������7V��]6S�;��T������MN���z��80�#�kR���:|��[${d^�U�����s]&������R�n8��Dz~L	D��e�e����+|�eok��^���3�n��:�D���D�op~�5yntW�T��\I��-:K�l�6�����������s"��M�� ��
�6C-]4o��}�?������(>�W��w����:��d��{��\�Q�%9���CPd�1of����;�Sy��B�Xf4%�jh��I]u��m�w����;��z)�Y^u	����T<D%�r�\/��nJJ��Rh����CS���}��`�����T�M���5E�G}��bS�}�I����$e��2���a�%%G�$�as?<�EE��[��->M��`n�SS�"�K���)5�M�n���
S�s����^~���R�n���SK�D�32��������>�#W��sx�[ej��N8�E;���)��Q��~I�?JQ���P���V*H�`���}���m�4z����w���'�,Ko�J�|&�����;MUTG�w���j
������=3����G�v��1�N���:'Z�o��-�[\������0g]qc�I!�Y{���N����(	s�k	�V�z<m�i�F�8�H���L
bnk�
F9gH'��;B��n�zZ�B��j�}����9
M����A�l	2p�N��i]��q��al�������DWE|�����3��]������H�o���x����5�����Cl�vJ����44�B���P��j�tF�e�7%d"��������N&��e
�������e6.�D�|�E��/Q��!E����sO�[1�d^�g��Wx.�[��b�����9�MIN������^��_���	��?��~�!���?�������M/�j�0�M4m�O�3���$.f;&oS�nS:��m4P�z	����!��I�x*�����Z�!����������iE1w��h��[�~:�k�����G�������|v�M2X0���	���Q�vgL���)���4?�;����@�����S9L~/0o<-�Ge�������5�\BW�X�+�.||�*1T�I/n���r����b��8���[G��Z��=���X�G����#�+�Z��@��dB����������rA*�Q_�����"��}��~m�uw��L����������s��j�t�b�r����s�(*�y�u��������C�:�:�k��,W���G�_���r���%�)����������{�Kw�g��'��O���n��Z�tkt���;�6��C�u����;j� �IDFB-���0��:���]��P��f��
��JAD�V$��g���<%���6fM)'�W�K���7��W�>&M�����6�@����C����h�o��U���������5_��Q{1_�CXDX�+6�����	������Y]4�Of�����X���#q�DR�C���+!���\���A����P�,A^���C�S�����e��U"0/�T�tF������r�3C>�)�����v�K�\c�-�0���laj����a����.�l�����M��kd�[ �&m����5�j��1���(z�d����B����=}Y\���;L�#��AS�0(q���UB�����U�F���d�`%{�9���3�cm����9K���������EmS���9��e(�:�-M�k����K�l���b����W���1`dZex�����WU5��1��Q�b�hG�j�\P{\�xn�q����(6���G�����g�*��hK<�Z�h���� O��oi0P	��}ok��r�5p2tS����5K	{����&����������(Q����3��Zy�@���U��������[�<|A����[��l����{�p�85,�d�	d�iUS�w"N����qF,���6�NbL�P�����u�qhe����=p�i�x�:�,.�c]R�)t��v�-���{�G�������r3{���5|�LlJ,���Bkb,6U��R�����q��:�#^O�s#��E���
M8�7wr��p�"��aA!�KyJ�`���7�{�=�����dq����?ay�j�� S�����L��%#H��
���6�'���g�+�Yq3���h�N��$�C�i�<�
�L���,�a�0�-��V<�W�R������<[B���M��M�Hs��H+��r�(�4�^�����_5�o��.������A�5__�IUxY���~7{e������������V�����v�5m?N!�l��p����X�H,������|"��=L�>���x}�^�_���%*�d��� ���rl�G0�t��_�#�Rd�O�h�%��W��N��M�Iee��!���"sW��>�E�7���h�)�5��5��L��k�!u����@��
!L����?�M��o�+��?�����x�:0fo
���H����������
�����K��W�/�[G�.��'���^X����l�T�w����tYwv�N��-���X��
I���Q�`��/�@����+�MFC)��4<0{���'`��	���d~�-+���������U������N�H,:b
��q
�d�p"����?o�1�2�s����|����"��������V�
���4��E�^9X���gM�9( X���Ji��]	X[}`)�o1��}�KN�����m2Q"�
���h�����A5(�uQ>���S<��-g���-����Y�t��1$v���Tq)<��<�4����t�mW�R1�3��n�
'�����~�fo�U���T��)�R�#��2H��\���.�Y���E��r�>}�������X����2��tH�B�nQ�|V������'��#�|[�
J�o?�(��	\=x���g���V�K�A�$�.E��[�sng��G�Bi����

�^���<%3�v��F<�>I�Ap<�����?����nn		���������o	�OG0�bg&)�����8���l�zu���%%����=�8�Q�H3���S���H[�&u�u0��p�j�J�P�G�G���<9��������������C����~��^���	����L�||��m�"���}�d�;�H�Q)"�b��F��h�F}3H:�����L���Pn�y�a�B#O
��'���h�'��gE�����v<+�O������������S���@�w�;e��='%�:XP�~��W���{����Q$�<��w���j�������&��d�y��A4�Y	3��[�|�V��H'5u�/�G�"c|��s�L��1yJH[��7��aAb*z�f���7G���<����M�~��
-@�0��#�_F4K��5�q� �Fj����I(%W������Cxp/������W�4�GY��\2�]�1�(K+�Y�����a���������������r�u`zA��&K��r�n+.E�P��U,�+����� �;`�1I|����5���-t�������B6;�\H��A$�W�E]�x�a����_[�~�����s��y�������|�����|����$���w���������k�f�#�����s��*���`/��:�{��O���ROU[�E���Z�oz������ ��|_(;���1��.D�����0��� nP��m���l�gu$�0��r[�D��T���l:�nz2h����#��|&�)������l���*j]��-����2��le��!�������\�j��:��H��J������2<TH��R45�(����ZH�X���D��Z���;I��5aP.�����N>(�d.7��+2?P������\����|J�P�,i�X���]�H��|~�4��]R���J�</��E
K����Oz}.���������z��E�<U?�|��-(�s�fs�:�8w�!��r0��.� ���T��w��������M'�6G�-��w�`n>���1[�I:�����*W����+{@r��9!f��\�sQbE=P0��s��gz���b���� ~��i���^A����m�!�]-/��\�fi�Eg�`q�Y!���#O����������q#��S���]��E�f;�H���$;:+K�.���>|ZdSj�"6)E;�������P����g���I�n

�B��W� �G������p��F����3E�s�/Cd��	��(�Z0��IYc��k!9L!�!��R$�2@��C�(��|�� U�*h��tp����
K�2���^8��x|�Z�}W.�h�M���&+
3��G�3E����J^
���t�i��3
J�{0a>�=���Bs���!�������,���8,��L���Ul[z$�Ba}T��>�����LrQ'9�����2W�|�r}*r�m�ND�00B�C��0��0�:�n�p�5��5�G��s��l
sm7ou��y+�p��!j��1v)�Xe[.f�<;�p_�9����c����	�^�������"����mI5��N� j~m
�P���\9��l��?��>Mq���`fN$�#�K�s�9t�<j0V�g�s� �v�H�Zw�L��m����lm��p��/�`�.u��%������Q��M�����)�5�����J}�$���C����5M7��.��l�v8��i�B�x:a%!�����GpvB���CW��i�{g��3$��
�t��x���>|�>����zc�Y���[Z �N����n�����1��-��(M1]�� ���&��n/�1��:���
�E:�|��nq_��{0��[J�,�1$�u���M(W���q�.��;8�,�4��X�����ho�$wQ7�{.t�������{�C���J[�������-��rG��[������h���s�r�[�%U@�.�n�r����{ak!����5G��f�Ms�x��O���a��tsB��H�<G�A��[������.�HxI�������^���?��Cn������V2�wd�z��L7i
!�������p	M��<��%(�tQ��
�����@����\u�����_r��&M!�i��*K�q�9�?Sd��W���*��}��G�������^l_^��3rq��b�#�Q�wA���U*�8���x��L�=:�u�^^�k��	&�F)�:78�(�DE�GW	�������0�R���=���L����@���V�6�N���xi8��-�����^�F�#�(�'��o���kFe�S��@��,�u�Ub�%���2��+��w�z�#��$��UN�*.\��OF�����W,)������3&�o4(��-�qY/�s*���
�kF���������x�b]��]r	�����"�p��d�������CJ�=H*����YX�kt��x���nprw�z�aQ\rQRw�����F.���+���=Cv�!m?�V8k��p��Q(�,�32��u�\o�OP,�(M��A��>��U�q��n�AEk�,�;�d&*{�72�9�8��W'��*�S���M;��~�e�O�c[����FX��j3
BM�]�#�|�fve�_�I	����%���gZ��[-A
��$� ��*j�;�_8n�a<y�P�i�D����r+z�w��i+g.K>�<��O�Q�AND{�a�:���>i]�f�: +����j�"$cZIU�Uni"���.�P�t�y6����}�8�a��&���"��8�>X��3����N���mX������'>z�����q����R��J;$�!x�����2h�����!$"�+��+���e�2����/`�lD����Q�0�",�q��pI71B�H %���D���u����1�����;�������������U�j)����?���x*��G�x�&�����#V8�ZvZzN2�T��3��f�B���|����*u�������"n'�
�>A@+��7���*r�]@�Y6���9.|�lTr���n���o�hC������3d�4�U�����Z���SiC�@k5q6R�o���p������S�PL{S�����^v�p��/�t����v�m�y~��2:Ok&�1]v�n}��6���G�:	�#�5�s�����[~/On�<���{�KNsE�����k1����5���|�����Q�����<3�m������'��r
�E��G��	f��n��,^��`���p����x	�\0:��N\h\g��������8Cw�J�c�����������r���������L
4�
=�Kn�\��us�������@�f�_��{����c�5xst����w����+�������`p@��o����Q����^WU�����%
����������7�q/�N���^l�P�����S_����Ce���U���2j�`H��2�QX�m��xZ�1LJ!�J1��G�8��R�����'���-~�������$�� ���2q�����C+w��h�/g�������u����6����vOJ/d3k���B\���U�R�1V�>J
��R����+R���e�R���N������Q\�#�4#��������@�a�;�R�����V`f#N��5������+�c��c�R�~z�c���1yL`;.�Q�����!4)������Dy���f�\ar?�<��Ph�fo
/l�{aPx�-{������Kn�����z��mY�*�`	�X���rQi��[�^/9����eV�����0�V�����R7��*w�BX������y?$G~�cK�����?;����n��w�B[!���lz�6=�]~fc�Ob����-x���?��y<H���U�E�Ve����;e�����b9��j���t<w�_u(++.w�U����N���PH	��_���Y�G�l��x���9�������*������-�^�?����JS��D��n* xO���4����t�^���s6d8Y��V��10Pd���B�
�#�f�^����t����A{����xj�>�`���^�C}�1�@:"��~�P����o��kF�/]��V���F�p�s�z�K�&A������_����5��'5��&[���:Z��l�MC�\����D��\�a}OP�����Kv��?����p:������5r��[��~G`=����r�4�B�(�W�d4�#Y`�l�b��W��"���UC�1<��7U��f��R��}��{N75����e�\�
�LM�aE
x�M^�n<�����(2E��������6�o���
BD���P����.��)R���q*��dh�;p��~�+��oIn��p���o�|��V��U�����P�R�`���/�b�������r�M!����o��D����S���~y�_�����J��c���t���]�q�M���]����&m�7
j��5����4a�����&'GY��
���mT�����3Xrr�jhS�,<����n��}p�z{��Z����{P���J�c*����:����>::��>��������o0�������}���|~�&|���u���9�7�
��D�y�&�D@�A������1���?F����W��;����~�G^L*���^�����n��i���9{��N���F�f�%�����Av�mZ����Y{�����3\E�5��F�n����pgo����(JUv*P�DkrA��H\�H	rj�
�Ct�Y�R�]������u�����������n��Hv�|�������s��^v[�cK?d��=8w�K��Fd~|���X.��j5Z$mP�!N��2�
S_c��-�Q�����1s�����)��?��Vw9n���
p�8�>����DY�{�<�jRHA���*�<\����o�g��&�y#����b$���S������'���-5���7���g{��u����_{;gm������:��o��A�M����1KY-l������wy7��o��)Ook�p�$<�E��%���Jw�Y�������
����e�]T�[ ��{����//��Y�6�Q����B��������������`�����������K����|��:~���'�(��i���3�&�`p��|�[�d
�T�}�`Q+}�V���w����r������og�?W���H����0�%���@|��;�1i�&���I��_���q��f;m.,�#G��3��K�swz=
~�`���]�H+���	9C_	A������������t�M���)Tb*��_��_��������'��.>,D5�]�7��� X��;����0��T����.��O�I�%�3Rge3���i��� ����$"�f����|��w����5V����`����P�4�c��
ky`I���w�\�_���n���o�w��s0����:w�_���KK�o1�nw�tf��na�+)al���9�m�D|�+��f���������!Cq'����E7���\�&���t����
�oa)t�S����m��W����������'���&M�VqZs����I������s|��`�-�tk�_���b�k��_������b���V�4�����o��k��K���k�z$�-[���u�� �5�C�G'g�����E@�\k�{��e�����f2���S�4��\���vV���s��o������}����G���=�V��f��'���G�41��C��$�%�Y<���h?�JS�:NW',���H���d8�]M�]=|�3��)`��iD�@��������S��1aw���?��%zj���
�����N#������v7�����u��f���I��M�����qt���-���7�����2q�-��6
�M8��t�8�M�����^�p�� v$�a4t����;���YL����������w�P��DEO�cOy�Ao�&FW�8��!B7�����,�G�$S�"�Gib�i�0:<��~�;<�ND����m���xt��v�O�N�_�����z/:�G�stvm�-:�>9�[�������
�JT8��������|�������U�l�{?��x�n��~�wJ��w��RsG�g��7�g�n�d��DG�g����������9���	t�p7�
�����w�U��j�(��7�F��ca�Pn{�����]����������}3<>=��Q���i����5���-�o�f�`{��)�~�
�*��%�T�):�(�-t���I_�w|��}U�����8[�ms?y�@G���{��8W p��w��O����b@���@��a�v��N��w�N�}&*lJ�����)<X�^o�����'f
�G(|v��`�-��)������m���n�����oF����g�{�?�+��Sb�wG�DKj��w� ����t���N��c$�����EE� `��?���.S�|�yv��=��}J6��K���K���w&�<��ohGlI��x_���������~�A����+��:�\��MS��]����r����;B���|���*�[.+�@>:?��+V���~��!�>?����Jw\.8���{T��P���W��M�O���w��}����/��X{���o^>��_����������V����������U���#p�:)&���g2����q�3g_��%�4Z�6Ict6�����r���)c��,���6�M$x��hj���������B���`�O���d�0K9������%������F'���M3~a���N����O;�Y����W>��b���+::��w�OSX������e�Y�,�WX�`'g����J�.�?�c��0�c���M&�C"y���4s7	������h�a��f�C���[%�qwD�98z�>=�;��@����^��W ��6\�k��E�	�B[��j6&���������s���I��xt�[��/�R@W:H���$F��a��J<��!���NI��LE������I����5�p�/�V�>��/S���(���W�?%��~�xrE���O��D�`x�{Y61�ks��>�o��A���H���2�� AG+��P��@I0���;L���JGh�
�|h
}�|�,P�KF�:C�T�S��S�pf��VmJJr���(4Eei�\��|�bJ�:��R>7FF���&���Rxv�D<w��:/�i������?I7�x��w��/�M�����g�4��`s��Xt��tZ$H��U��+
g�:����> ��� )�y[���ec������b|�t]��4h���x��G�>��)�c8�O; ���@����2��

�n��e"&���#���v��0I��p"���k��s��=���z�A/�@�+�f@����$�����\�����NC���K���+4��$��q��0S�0��,�g�������X��}1S,�,d���{����;�ka�����0��x����^�}�<T�Xcj9T�o$�{#��\$wC4��>_�����%n�1e�$��sj!b1�5��,��t�Q�0�dC3[0����o_4����:Ix��
�4�R���M�������q��k{18�C+��7_V^T"��l��|�����C�7H��������dD�g�&�+-�'��3u���Dj��.+�p@����`���D������y��Mo��m��Q����lR��~-*j>H�.��gv���'j5\��p��
��5���B�*�K�W�5�����d�ED�]Yx�h��D|#�9�Z��T"w/)�m���i�4���������k��(�$�������9kQ8r�|�*�`;MdK"�f�G=���������B�	��f2�������.�-���bxTZX�;���"����p��H�H9�v����D�sc3���i���i����]�V8?��c=	?�h0{O����D����)��"CeW	Y��=BU���+��EtA�&eT;~��K�?����]d��k&��F+Ra������"Q
~8�L�N������#�@�K�+n�,>X)Rf��X��k���@���U���$lQq}xm���$7Y.���G�D�y}{�[��J8n<���ZUTVc��Tn��9�6�U��W�g�aZ�Zp>G�Q_iL�ih�.�#O"��e���0�8'1,d��lr=��M����vPF�"�	y^nd��ZX>�u�ZI������ig��*T�1��N��l�8�N��V�B��������1��I���97Q.1@IpR�����5�
$k�l�"��K���;�Md�5�q@%�X�R�q��i4|j��.u9�bU��>���b��a�\�������p��W*��{���!�.
�K���P�I�M
��F�k� B��!�?n���l���q�:���2quSb���t8�V0��r#,�Fy}��"�`lbNEG	8�w"����r[`���ZanyP���Z���� ����0o�*������a��juo�l`C��h��^�*0��������y�A�9�WA����z1����Y�s��e~r�	�8F�1�;��P#����=X/�O���#��������@�yw|���A�'x����R{������j9`o���K��o�T����~sQx��M��;��C��.[;�{�m���Vd��M�V)v-��L2_��b��v���-~��bD���G0��7E<\�d���C�@��
�AkF��V4�|�
j%��:��)�\����M0�a��d�����EX����D�n�+S}$	a�G���:�nW
ZE[Y���Pju
rBeN��������l�5���U\���?
2-�j�Zn�[(�6O����b�_A���`\��7W�<���A+�[C�M���7�nKAw���^�J|����z}�Y��e�W�6s'.���<s��D��n�r��g���T�P�����+-�[���j��U�����Wh��&�k������ju�:p��C��!���H���zd8[b���F�������{��7����`�T;a��<���nY�5]
�����0
u-�p�K�\HEI�������&�I�^�5�%E^���?���6S�@:�;����O�>���K�7�Wt���lE�m�B|�7'G���W��uG�{3���T���mL*�s��
^�/*��/|����{'g�Xr����	������ft���@u;�;��Tj��mP�
)(Q�7z�����_���"�P�:�:��.� U��,������/�V��OI���W�z������X����y���n�e�A$L�c�tz�/]�ufQ�"�����4#k$o�0�H���e����&�������S:��G���n�c�N'Zl,�_�0`����x��m�Q
�?:FW����������f����0p)e,LG��J��J�>������>��O�i��`��`NJ�r!>�K?��5Xc0lI�c�OwHw������9���!a���_���
�	/��hk/6��t��$��h=�A�H��NK� Z������B=t��8�$�Z�Ry���N��w���+��S���5���������s�����m�������<����H����)��N[D��'�Ag:&D
��E�
��@9Z�1�������J������&�����	.�-�#d�Ys*&g������������B?����L�P����-��X#��L���E����>
/�pY�\�V���m��c��-��&J/(�����/��o|�s4B}!�x�,y.��b�@Y?�?O�Vg��bU�w5�������������B�U��&'G����fY�����Cy����	��:-�W|�/L��;.�I4���-����0�]�t��"��&��$my;F��c��2^1���O�f�9i�%�����[gD��|�t����4<�NF�I��)�C�\�T9e�����l��V&��}-���2����$JEi�j���3j�e�d����4��ao�)f��@�?����7��#
����1����sTi��������0����Z�m����X�R�x"�����2z��^{���ah������%��&'P����c8�k^aM���������v��Q�qDN([8Q7'��wa?F�R�a�0��Lo�5�if���sl���sb��L�%�Ac�V���,��L���m���G�&PzT$(�b���+a�~ �$�QN������������D����4���.�_�-��oa�ky8�|E���:�4�_x@�:bL�t!���(��9�o^��G�h�{� Aa�HW���T����T�.��^�L'i?[���,��Q/5oN����^��U<�3M��3�`����59���Mo�FeX=�1����w�.zLP�}o��R��q��c��(��=qtI./�pPpK�
��O�Z�g+�)�������j�b�p.��'@WzY���Yc��h�,�KK:�������'�mmEO[O���s�x�2���O'Er&��4���?\���K����H��pL�<���k��}�w�F�	�����P���?����8��\fkL)M�1t�G��w,�e}���o�W�����~��������_��T���	o��`���)@�E0�{�/��������e�w��/�/����'.��#������\�)�Op�	�
�l�O��4�'3���gc8�J��n0��9��!�&5GM��H��x��wO��z�{=���
S�>#*���>�Os6I,�\�>����G��a�������E���t�8&b�N���[��a�� $������
�9��&��Y�2��e0^GC���"H����~X}�����I�S�^t�ubeD��~��I��s��	q�P�M����t��N�b��������b����b�2n,�u�8�7�����?��D���>���}W���!{��w)�>|��(���7��#�%��;V\��]$$�I��8<��x�}�*�f1��F��{�77
� ��,�%��T��M�&R��S��t�����p5�e?�����p��!D@S����J���#��8���I�[� ���1c���h�z��>c�Dn��v��3�i)� y}�:�����O�!MN�:5��G%k�&r@pu����{$���r���������B�A��-�3z���������A6������rM7�`�=���yy��e���p�<�N5u�5�h(��3������B��$T@t����,�h��������p
��:>��a����[����Y�)������%$�N����i/
��h�B��r�'��s/��2t�Ti�����	�OS�����W7uO&��iYW����r�rA��lt.QJ��)H�?"K�J#�����X�W�T��|�Z%��*���`�~���U=ob�E���������gZ�W"�1�S
�h���Rg�cIHZ����BS����U:���~Yv�6�!J�Z���:�����h�U4��+���{k�K����=)�;����|���Al$����4�����~�X`Z_�'�[Y���7�]_ly����p�b����p�^�r��$��t�x�)Y����b�q��O�a��R���������N^N��2�i5�>����7^R��"�x=���n��=6u�"�~;�
��������E�O�q�o�,�N&����d�|��i,��1��W��
t�}Mh���,�����������LXK���&��M<n#oRr
bQNg��z��.iW�x���	���z#L�����'���a�3KZ�� E#�q=v�EB?q�������PbX�l��QZj	�%}*K����D
}O	����+�"G�p��w�.��t�!~������4e��}����#�c�h�x�O/�z�
���
��9�����*���2�m����M�u`�#�F��F����C8�s;��'��*�����P�&%
��������;R�ce�Y".��l�HQ	����r���.�8���J�J<�� M+i9��r��T���NUt���;�������Xeu���QU9:�	wY8���I7p�p�N�I�CbaI��SuU�s�Eg5����~Cc������:�;��Se��)������)A�c�R���������w�����1f��12�_��WD&:�l�(�?�1kL�1Bo������N���q._C%b�p���
���W�(�2r"v1�k3Hn��2��N9�$H��E�:����	�4P�S {��(gbJq�wh6�'��N�3�7��7
;���;��~_(�q3_��JyI,��ZE��E�QX�F�"=�p�����GcP~��s�9[~���R���`��5�*�J���^P��Z��:�����/�FO��� u��3�.4BeM|�i�������}����\����-O�������zS6�&%��GX�Xh�9�����f������nX�B�nU��Q}��=���Z���h��9:<��A�������j��	:p�$��X�M*J1������Q�
���rq��I�M�����4[�,Dh�g�����%5Gxu���� ���J$#�nG����x���[��#X�p�g7>P�$��	d��%4������UI�QH���2|4D�	:���i��0�Y<F�'.^��y������IH�0Pa8����in�%�T�5���.���n;V~	�N�d����������n��{]:����1^�����}Z�Z����yv����������8inZ�n=�=��i)M�����K
K��|��POP�C������Q
�G!&6Fe�
Gc"sk�'u�*
9	�@G�)�~+R�	�P����V,z��ds�c���}8(�)|�)����e~��j�}dd�c�,C�+?r���q!�W�?�<�<Q?���b8���
i�p(>(C�g�vU�����f�e��N��.r
SH�>�����e���JD������}�T��Ej�Zi���C��P���-,�������9�-`���u�[%L�[�de<���a�Y|?��+9_�;�W���K�X��B�H�7o��ko����C�����19^:?H�~�F�>q����F�LZ\
���T���F��}!6����S��s�6(hE���ZLQCu�G~�)�$����Z������P9e����`�|&��@�+�\�L2/<�����}��x��b�-v���'���A^���e�O�k6������_L_��_<��XTo.��������z��Z����xXO1�bdi��)��N	��/��Q�`��f���k�,=�3���;�:���99U,�I�*U�_�-��'9r����5�k�Z��"a���]'���]���l3��qB�y+��x��=������t��OWF�q2��CAz��S�����dP�1M�I��SP2�x��\���d*r0B�{���'��``����i���;("�^�%h���,	�j��5O�C��l�`c���\��sm�l3�D��y�p&�#�C!��E������H�\��
��k�E����<��W
�v,���i�	��G<���q}���n<�D��f(�E�nz�V�$���^�\��|_h�l�~��j#^��G���A�`cb�cY�����?e�K:��U�vS
��F)
����L�NDb;���C�	mAl!Eu��s�x�&����S�1�����j�]S5��HF��@A[�d�������t�~��k��}zN�^F#E��m0����n'^��K�6 �Z]�IAk2�s�>0���S���d����7�0��C��5����fd���>�O��`
-����4x���������#�o���[�+�Z������a�������)��M��])Bz o4w}� �(��I�������&rbrZ�X��nQ�`F���H�C.����)h���)�~*%7��������R�����,����S���.}f��h�}��
�yK,�v�����(;_T%�l�k�+i��fi��L��d���s���j>�h�������	���������v�90��
 a�Lq���^<��1��s����V	L �;��~2��t ~l��8�����<tsi���������+:��������C�����gL����q��<6�9K����$P80��R������ew����TH����G[N�N<@�����j�k[�)�B����=� �fQ:R8�������X�d��p#
Az����8^��������x�=X}t��bhumF�Q��0�{���{&�G�,�;�������@T�+��S�S�	}`���4��������g��;��np�I�I��7P�i%V������(���U@r�&��4G�\���x=�&��a\G��<>E���K�1�g�\�����P�����q�X��M�b3�j��(������������g�p����o��!��`Y���eG{��&gm���0�M�4k|�s`�0)s�^!�Q�S�Id�`2��\<~�m�������:��g�ZS�V�����/�r���b��p?%�GMh���U��J
�����7W�d����m|���LQ~�S��C�l�����u����8�c�z
X�:���D!�f���%S�k�6,�C?1Fn"��a�a����@�����W�Y��e�`�?�1-�S�
�v����L����9@�YK��e����5�
�}����>|~��?��2R��g?���������	A������w��_���q6�����saJ�nv5������w�|�t�G��p��f��X��^YE��^y%[�C7<�s7=�c���/�d�qv�0������^�3��a��Q�����5�������$�;�g��(�T/Eo]0��E9&��a".f������%e�������a2H	^�/��4g%�����)����sq�@���K�!���}���i""��(��-G��WM�B�ZD�-�w�d��~;~�����:���i��h�k���%��g�G����C�����/�"��^��}Rb�-��-�(������ 6G*TS5]��)�Anw�C��m]��8�xG�@2`��Kx�H�t�_4�G8l����wc���3r�*�Mz��8mJCs�n��H�������4�K���!�#�]&1��;*K#�vVg�`3�4
y��<��6�K���1�:���	G���a�0�S!��v��<���*��C#���.�2 ~��u��4�l���;F��J&��e0���5���H���i}F��.sNz}�^�)GQ�L}pr$.s�?���i��u��"���4H�c�<g �S���
Fj��z�!'��L<3+5m������99:��1E��Q��G�X+*�B����9dwY(���MFSc�0eQ����Q�"��vg��^����]M�_�-�J]���&��6^nyqg�!�����-*��|Q������>��������@8\c�W�^;NBW.�W8�W���!�8��������������-aX��rs�0�x$rCjF��(F������<j�{����dO�!��`�f�|fF\��>g?E�C��<T8��-���"(Yv�������
�*r����"�z��
|�-hn�{d�3
	QOtP��$J�A4��p%g)��q�I�����Uu�T(�@>B�1J~k������f��Zk�E�����	C�����M�����T,�������y51
n�C��/����@|�VN(���SP�}��g�Y�������_�����
P [g�/n��?���iv�d8���1������{�W��3��9���St����t7���yA�TLan;N)��t���j#r�x����sB�r�����
�q��#��VT�~�����M�����w���7o�^n�l���}\�hk�>j�i6h���\]���Dr�O�;j9e�<�,�n��,]��\!h:����
���%kgt���������J><��u�|�^3{6��N.��+��������M[B�]^e�J~���ho��N���!��bWp�P�=8�4]�C1jq�K��H��d��;�q����D�k�|���@�������,<W���MQ��A�������p����_q�	{�R?��tpv�����CN�����O�A�O����2zb�/n^+��tE�!b-)=C������F�:��D���,{� ����~�U��%l���]I�!Z�l����gk1K&���S���an/�b��%w��K"E����J�7�MT,�k"g
��ves�	xF>����T/K�Qd�1��]�@i�\����nF��{�wg�����v4��*���;�P�@)�0�/<�~P�
a*n�E�����X���M����MB�j1�sP~_Qvc�W���L��W�'� ��aU:k:E]��Rv�]N&>�r�X����������L��K9GY����f��bz�Gj�tW�
c�+��#$]��{��3j�JO�6����a�<��W,��P�+�gv��4�����G
�M�4�W�sHFj=�����
T��7���O2�3����M�F*3�i#d���j���1����&�<��xpJ&��5}�Z(�����e�@��^%�%"<���(8U���T�$
�R�����h������J���&�2\<��+���E2�f�5q{�C�t?�/�E�n/����2"O
)Y��q��oE���z��������$I����#{<s+a�D���$��S2�S���+g�/�8�8��H1$�d8���������
�����7=�qIBO�9�WPL?�4����-��R���&�CVp�%�3���>�=]i��Mh7������N���1�	������Q�|a:�e&c�������z-��4���&��[������]���$�����<}|@��H�I������X�����D8udN�U��,����i}:�#=�����e[����������&�R$�z�w��,��o�wN��F7�����3������,�������M���^����V1�kk�wJzMIl�X\��@o��C����)��?���[G�>���f�I<�]e����"����IW���)�V��G�|��+�c�����'s������snb�%��w�����2_���i������_��<G�/�4T>������[��x`�������-`�Wn:g���<����>bd-a5+x&I��:?`�������js�����[u��Mp�Xc��4���Aq!�����r��t!�"RW����NE���!13��B{�V�)<]}>�hM)UCb�8���8��/��%�P(�X0����'ED�p�e�%[,����Y��#6�c*?KF����Hn���	rL�Ia�?�E����Q����e�~w�C �����{������Jn�d���|��I�����E><:k����:ra��5|��b���SUw��^��+&���^��sS������?p�������|S�/j>�g

}O��w��(���&��t�JbP�f�dw�&0�����H��D�BR
PC6��`6m���v)�����:�ce�	�5/�!)�u�&NS�7�M"����W��{��������*�F`�,�������
0[zD������Y���f���b8�.~2"cR�d�x���T�2��t��"�a�N��h2Mi��4	���	EO�������������D�up���.�8�g?s��-���Hp��
�k�%�4Jv���hu�W�Hs���q�f���D+y��\|A�!�"����Y�4� 
�au����=-�"���F���G�e�1�L��h0EZ�t�J�� �Y^�����I�������
y�@7�2���K��]"�Ux*	�.�%<IY/��jI?|MO�yg�HW���n���v���t��}�#��~<:������7H����Ky��0h.:�6�>�pBW�?x�8���fa��+�AK�A_��Q4�/J�L�`�����}(�:�S��h���?�����C��&����o���8���a,�
��w�7���p!�#�����Oc��?8pe����B�d(�5�1�B��B����7I�8�>�:%��?���:j���=������
��^6�a��a������+��_�v�K�_�p �U��D�(7����Q9O�`����a��P�]��[~�����WZs~�����9��R���$��f�nz�f���eb��l��1�c.p�=�'��$BZ!��?�^��n�>6s�'��)�����V+���jY�n!k_������D�����2��W�z�%����r��}��z����wU#��p��%(D������yY/E��J�����������1�������u�o���)�������Sq4��k�$�hC��E3���DA�_�9������H�ut�;!��#��K"��JM��`��7�_�2	�u�T�G��	�<����?��X4����4�QK�#��&Aj��q�w�B8�71CC�>��C.x(��>��N�q�d�FO+�$���HB�7~�&k=g���}�m@
���f��:��<s�&r���3�A&.?N�J>��7q�=~>4t��Im~q��Bg���.0_B�&&��7����`8��O	��8��W�m���mK�+�)��������~�Z�	Fc�'�E��yaU��{�f<��1z`�,Ea���J�L���v�}I|aZL��:Ei\��A�'_�+����F�w]���6�����&G�%�K�����)M�H��s�M�
�������}D/
�������qT���JZ��9��D���J>[�B�/�v� ��<�^j&!"P_��/]?f�2$�����eE<���`���o�����:
�B��%����HB%~�u�^�1�AD���2Rr�TO��5�{D�Y�g����K���������)�%�Yt���$���������)z;E���B�p��^"s�zWG��0���Bw1���K�K#��!��/>y���������"�H>������b���Y����U�9��*�q����X|�^�X�P�����JCK���qV�����t��?�0x���V*!���@��l�n������o��;����� �g�,��C
�V�;��@�������4��ze�!�YQ��|���z�<���|���	u�(�
��.-�d�QO��[S�jc,�g�}HT���7����_!�f�BU�In*
����I�`� [�
��_���0���/i-C�_�0R*�8��6v"���B����L�7������rh%r���������r�9�J�:��<:�M���(�
(,[�ZX��stEe����p���G�H���(����xx�vt�����;�������| 	g�[J����j�����Q��*v\���a�>,/+OM�����ab:���rr��#��,��������)���&B��W3�dC���C�,}4��=�6������0VB5%�F����M��N�ydb��@=�Z�Gw� ��\$w�AWB^���.���r�����K;��D��2��������k<�b�p������l������c��4�O���k/�}A�~��VX��nI��3H�y��������E����Q��9{!y'�I�~Y�L
�{��}��~��z��{�po���p�l�x1�,��i��}������8���I���O��g�����*���J��X0*�M�W�5h��I�p��\�p�$]�F[f ��[1�|G�b�:����"�I
F}P�[������	���S%�["��<w.,)��E�+��!3��l����c`�2ATc�t��B�L/�Mz��w��<����
+.P���mr�l���)��P�>�(!H���"��0@8�	-������)�<%^��q������b��E4��8��v��R�2�����K����.�g*�`�����#�U|�R�91�P����A��l��X4j1�9�xw	B��a�2.(�\H�!�M��I<_�@*d%�\������|��6�������>K$��>�3},u��{�����{q��+��w';��$�H�I�B���nK��r���M�m�M^4���zcV[@��i� k�4K�
���7)�9�}|r�2���>���|����ZeU��W<I�����'�W���(/���9*[���G*������.�%�
|����Kb�y1�OT�F����=H��x|�n�Qz'-�(�T�7�]�m'��1V�gd������e{�@�	��
�p6B tV���=�����isR�f �d\��[�2�
�
3�D���0��V����_~c�A��������0��``�(9�'�=��QYL����)�w��h@4z��N����p����;
g
o.u��dQ�>Au�z�[~D���C5J24���I��&�8�yZ��=�?�COh�KmA]w}��5:I��6$�1JuA��	�M2��8$�!>H�skt���04��9���`����JNo�"r��*-���`�i`�	�p<��v�h�j�I�%~��9$�	+GK��	5����
��r���(ibu���c������+����Qc��:�3�(i��j�,��pb~��EWd8.�����
�I�`�/���9L�h���o��w����^QB,���x��Q�UvkD?0���m�OQ[&�^f{����Y�q���e�t�@/ 2���b��E���+�c�����������2��b�tO�X!Tn����P������W��P���Wn�sQ&�Q��aa+����>
9p�w��
G���-�B_|)�*����S>��/*�NC��F8���bv������0�<�,:5�ea�����7G��;0��qE��J���������YUD��C��y�BZV����9�+��6�Y��0�k��JHU����~?'�=�eO�CS>��|���N*PN�:*������%�9�L��.9���8�g�]��x�I!g���a����OM���
�����Mp*�L>��zq�O���NF�y�����x@&���d8��#�r��.��k��o�������m�����Y�������4M���)z,��&z��W�����l���g'�;�������Z�b�4����:�(�Y��kE�0����J��v�3�����5���,?n�Q/����?^^�EY�(����lrSU.wCH����������m%}O�Nw���(��AW���O(���S�8i`�qa��t/0�C�Z|�w�m�w���8��f����L�
/��lUG
�
E����	�Q������r���EGo��g{�@����������#���_���l&������R�%3�.�#/w����z8�
�<���W3'�?| U�z'�Ap�>^�Tn���?��B]���������ZW��g���Q�Z�j����UU���b�����h����j#��������ju�Yq�C~:�B�Y�b��O��h4��v���Z[B�
iGp��l�z`4&��c���+��%����y?���S�`������w:G�-Z����L_���s�s�d����p��E_T�R�
sM��:�����YM&�|jW`.�\�
n;���q@�lL�q<�+\tB$8��q:6J���GSp>I:O���^���$B���@\",�(3�1G�H�*������WG���o���>�@����>jR]�����M<~��n��������N:��b�k�-��O\��&c!x�r�����Ge�}#�����H����(>�������;e����q�O�A
���p���q����P��]�6����3��1����r$|B�J $���)����7�];h�u���2�$A�����QV$�+:���1��w�����
2���i&u��fQ�5���)�Q[q�|Re]n���I?������C������7�L�A5zv}���W��
-$��&Ce��"8����Fk>M���-iP��,&���� ��j��jN�OQ8S?���*��l�f�44eVle2���#���"	�q@�"l�@���p��~O�	��n@��$9�l�{#Ro���X=a����o�1g�D����;^�W��.�����9(��cl�.;���������A�D��B)��	�������f�KM������
J��]��YJ�>a{Y�FS��'�)|�h��KK@~Z��5�#�*�D��������1 TAU�J��o��0����� .������P`������k�pC����i�q��ul���4�_���ba��}�b��R��m�!uJ����M�4������:U
�rr\ic/6Zt���D���q�P>��e3�}�zW����Ci���2�6;�*^��~������/�����!%`�
V�����l����8�0�/_�e�)��f�	�8������X�%�|"_��m��4��~�t�f)����DE����q�pz1���@3�S�B�����{Q�W����Y�����/����F�r�W���p=�>���(gp��ZK�����9�>���8+U3�����y:��O-�JT�`3�&��ne<��u�%�����k�#F�d��qk{��<����qs��L�H�`�W�,T<���0��[t����)J@�.��+#:B~�A�Q�P��$�F�z�������Q��n�
��h'����lQG%�=������������?/���q:��Lu!<��\�����V�*�SH>#�������5,����a����K����@A�=�o!�*�v�On0_7���cm�qH�?2�����BX�,��k��r.������I���������fL�g�6I*��N'������+);���dH���g���G��k���FNH�+�|2L
ZB�g�M]�d�yV�D�=�nS��T�s��[X�v���,��Ym_{Go||�?�������{Gs�� A�^<��+|P���	�� ��-�n���6y

�5v!L���^��-[m\9�;[������8|���3hQO����=��x��>s��3���������V�����}E����v��H��
�0Y��:�$~���.8C_��]����5a���y�4������T�x�ncvK =G���
T&���I�B>�#�4�:���:Q��������{iK_�o"�
�[
M���(��J�*7���f��{}���dS��E����(?#q^$��d��� �����9�IsdN������M!�<�tI���l%^�vQ��I������&S���24�R���)���������RJ$�e
��y��>88�i�����������M��.��{]o1�y���'��-��=}*Y�y��O����y��{w)e*��D�x`e�4E�z��]W`����v+�33����5����S��<zk����)�q8
�N�{C`F[u��:�S
�z�u}]��W�����\@����B<�^B�E sz���S�9��Eo���\0�t�0�<�������n/�.���|���h��ToAP����'���g�����c#�=�^��:P��fD\�h���}�����[���Pzu��o3n��Y2��3�H������R��O\���@g�����[��g1���s������?����l����y��XN.��[[P@2
�n�X����9��,=Z���Ec��T����	63�q�������m�0�����9D��2���<��p�qJj��U�wZ���]r�f��K<������U%�������W	D�Vv�V�������Ag��x$��(+y��FO]D��m�������|���$E+�mP�������[r���2��yjP�u��M�����E3�g�10d��h����p>�Rp'�VW���k��������v��KN��\�/4����f���)D�����7��mhJ<�����v��DG�wG�{��U�cPG������f�}]|�e*|q��M�����B(O��1J�XQL���
�������gC�z�-�nY)K��K4�� �1��,$I�H�}�qo
A�i���s������R�
�������LAv$��z�+�������0�<��E��{F/��$O����^��q��R�j��U�L{VY��R�����F�<x\��^%����������w��w�������������onf���P���.P���\�����]
o����d�O���F��nr���`kC�:"h��5���i�L�7me��- �����T�:g��������'t���Y��>�u<�s�Z
�o'���(�4���iGG�)�z`)'�6��:9�0���e&��k���s��"����M�S����bwE����������=�z"Ai'�x���M��j��E�IC�S��e�#�z{��h�R_�����]�{�MoE�(����-]q��Z��E�_���i�
f*�m������C�z]�<Q�N����2�Z�F���fi!T[�$:}e��c
4@��R<��	]��=�HjEFw��+���$���~����'5/���f^R����C�+y�� �Eo��E�������������$���}i��#
V�a�mB�MR������e�����%��Mw`����������\������n�5%p���.p*�r�x�4}���S�w���%,��yM*{�R�O�}�d�L����
�::u��@R��b_�R*�
oK����@XY�_�jY�[�S.{[s���'R���;8��m���t�D���Dl��8?���0��0��)W�:z���>_���w���x�|�p��9J��
K�u&�&H�_��������q��z��8E�G��W�.�r���j5�/��)�h�jI��b����7������)����`!S
,��H5�Zw�����}�w����;v�z)�Y^�v�
����T<D
��v\�nr1��(�5���9����0
��E{��`�����U�f�)p��z���������E6��O�hXE��+3�8������=l��G��(�3����ag��Y��+N��������r{NE���@���]�|�/?[dJ)o����SK�DZS2�T������>�#g��9���2qU@'���Y��g�h�Q���7R��A,�D ����
%��(�|kOl�a3Z�K������������e����$�R$�)t-�ldz���Z�������2��4�|V�����i���_�|Lj�6>��������bU��n������"��+n�7)d)k/]��)��%aF}-aj�����6�}��D�?�j�s_c0�`��s�\$=�uG���e�BW�{HR����}5��Iw�7�.G�����;�U��E��M03p/�`��
��O���q�Fv�k6h����$`�2�!��lv���|�?�NAhg����KsA7+t//
�w�Ig�MV~3B&2�^PA���x<��<�h�M��Uv��-�Q9&b���9C�,D��lte:x��=eo���{e�����\�:����c��s3�MIN����������?[p��c>��6=R��CP/)�p������O/�j�0�e2i�O�3h�~����)l�(o�*��G��A�J�Pt��|<u��j�^+>$��3��s�[��$�+�nT?
v����bt���������aEg��i����o�v'v���S+<_xHX�7��y��.��/�~#�Tf��������/�����l�;���9�yd��G��C5������N�h�*�!���o��t����`oO�19%�� 7�e��J�V�k�`]2!���l_f�{�t�� ��/��p�|L�^mnF�_O;�6v���d�l�|�����x��n�x�d����9
t�<��_
�o������B�[��Z�/�)�������a%~�\u`��6��/�h��\]i��'�1w���{x�������
}MKVn�&;p���|s����67Wu��Q
��Dd$���s^����������}1����y�[���ATlE������Q�a�`o�`��rb��4}�y3�e`M�c����(;�hc�
�~}����,//�n��U���������u_��Q1_�CXFX�+6���jw�c�o?�K�z��9��p�)�\���} ��H�;(�7�|%�~�x��s���]X�s(K���s�����\@�L��2o�*�~*j:���N��jJ���P��n�
k���
�4��bs-L>�Z�Z��9b���o�KD%���� q�������b��6k��Y
g�px�1UE�����!4��%f~jOF�����S���]����&�*���I�PG��j�u�h���pr�J"��sRs��7������9s������������XI����<��C%�CsS�\��:��*[�A��@��b|����i�3�V�tv���U�A
�5��*�P���&qq$�f����g%��.�;��b����x�O�jyv�X�\m�G���n=�1���?�-
*��s�m��T��N�n�R�c��B��)�����eS�i��tb��(7E�2�l���k�����WU/~��CSW6�<|E����_�	�|��������85�+��*��w
M]�p*�^��3b�5���3N1�C��������C+������������y�qA�uI���U���r���7_m��wbs��Z.�����f�9�U2�+q��Zc����X��q����������;7�?_5�������ps'��
G)�����	M�y������z�D_!�sM~O�	�W�������`2	�KF�"����sXm�O��s�9B����J���Y:���L��}�I���<�d9��Qm�5T<_-�\�	B{���
q4'rg�vn�D��^FZ�\����bM#��w�����~�mt�^�oH
����|M���������+��~���<^<D���u������i�1����6�<ay�#�\��"f����7�0��r�p�Q��V�x��"��������l:B������%�Z����"3|���W�bA��;��7%'����C���}���C�|o���3�S&�k������Y����:�6#��+�01��A�M��o�+��?�����l�;0�o
���H��8��]��r�����K��g���O���`����*a��^[�=)�N�\��E������N'�����X��
I���Q�`�Q(�@�J�+�LFC)��4<0���'`��
	��o	2��������f����}�����)N�@,:b
���w�X6K����_��8{Y�9���f�����"��Q����^�����$��E�^9X8���M�( X��Ji��]	X[��)n1��}�%�zph�	6�(����U2��Fy�[�U�������l��=�`x5k�A�s�jp���D�3
\
O}�;�%�r5
�����������Z������Y�����M��u��*�Y [�Y02�W���$M���lu��~�-�_9y��=y�����3�b����e"�!ie�E��YX�(sg��>����*mP�|�1D�+M���sE,�80G����^��T�������Q��
eI���K(tw�d08���@�zq5���I:�E�l���{�>�����!av:�x����-���&T��JJ{��U<�(�=[�����n��v�R���D�H�(B�3OG�S���D��[��h������ ?@���w���`���n��O�����m�������zUT��tGNs�3-��S,�
9L���+��DR��9�4B-�D�4����X�}�)LI�
���@�0)4���P
?���Hs>�.?�4�������?���������S���@�w:���'%�:XR���W���;��n�F�Q$�<�5t���jk������.��d�y�q�h����/W�R������`_�������G�
2�LG�)!m����������JoJl�L'9�w�}���_Z�"�a�?�_F4K��5�q�(�F��B��I(%Wl����!@xp/��a���+t	�,�[M!�����^T���g�SLY������������a���n���q� �{
�%Xv�a�K�?�3u���<<����Gl3&����f.1P���B7L� /��,-������$�D��c�@�-����~�*����g����?G�>�07���[��q���V0~�D�j��N<<��b���c��,�t$��Q�]1G.����<	�-���K:���N+�LE�G\4N-��~���S��)�o3���#�\�#��B�1���S�	L	���E(�nqVGrcQ+�JA��j:���Mg��'�6K�Z9�������.{���V�p�
��U�|���.����Qe\���2j[m������V;,�� �E�p4^bF�������R�.�ES����K�{���2����Ss�y'��&\��9~U����,�rE��II��G��z��,�Du����e���u������JZ�%UP�^����r�{�����}����;'G�mj���IB�	�T�8�B<�i[����F�;�0�u�q2��/�P�����[�Ajum�Vy�n�	�m���6����6_�����b'c��K:�9�����g���g��d��!��l.�����(��c����D�Yl���:�TR:(���V�
5������+�^Y���3W�<���D������������(P�z�b��R��(���#�C_|��(y��e��L�9��"�Xf�9)kl�~-$�)d`9��[�R�1qh%����*�@
5����up���aIP�\�����Qk�����
��r��d�a�`���������P������3��t�Ai!y&�'����XYhn����� ��t������ 0�����@�t���cK�$^(��j�������b\��	C.�$G1�Q���[�����T�OE�������F�r=F�t�B��m���Q�f��TznZ�Ma����n�0o�4D�#�>�.%�Lb��L�g'�=��X�v5�6a�K���^yX�B�4p�m!	����� D����B��`�B��+;��"?�����)n�U����|�wI}n<���G
���,u���.�U�n���
����
y�N������0���7`"�;�	�5�6%��W9��X�/��$p;x���}������%��M�N��;5mA[hO'�$������Nh��o�j6-t���q�D������B/zU��o�����@V�a�6�39~K��I�C���������>���e��)�k!rB$�t�����E2&��A����!�H�]�O��-���yrKI��0�����	�
a=�4.����`����~K�x!4������.�&x���������uop���BYiK��>;���E�Q�H�wr�5���Ct�Zq+��
��E��Zr��}"l-D��������L�I`n/��	��1�W�.bNHP�����<��s`KV�����e�/	P��V���S����y�
�@x20�J��\O������&M!DV�����.�I���������.�6\a������h8���nu#���KnT��)�9m|![e�9�:��g���������CE��<�HX��X28��������~F.�Y�C�{d J�.����J��"S�O3�)�G�����+qM�>�D�(eQ���%��H��*Ay<�>fYJ�?���W��)7�c�����`�����"�	�/
�����S ��+��s���d�^��x5{��l�b����%���J�#����U��r��b�����BO{>�d��IR�����_��(�\y����%�]�:C�Tr�d��e54��e2.��}N�}x[as������b���oS�+W��Kn"A3�;!0U���,���4��rHI�I�Y\�?�}�N��V\b�
N��_�2,�K.J��~�p���� Vuw���g���:����
g��R.U5
%�%rF���n@"��m�	����p1�z�^�
<n��
:�h
`��v���D�`�FF1'��G`7�a���_\�w��8�i'�O��)|l��s4��z`\mFA���k}�O���,�<)��p;�Dz6�LK;�%�a��Dd�XE�~G��-?�'Oj0
���Q�VnE����5m�������q$�W���8� .���+KX��,i��I�$���1��:���[������a�dgs6�����VWWWU�%s[���d��M$
tB�����7w�~�4U����K�V(�!�JV����6�H�L��P�r�<B��X}88������x:\lS8�QI�G��������D��'>����O������=�B-��tBb����?�O����}�������u0i�Tty���*� \�<�Q���^�&V�
2���
b#��Tr����(��Y�.[zHA�W�`"�|`�.T�sc`F@�B:�Z�5��C�w0�
Z��b�NC�I�lK���Z_Mt��1�@����!�6�-��*P(��3�?��3����z����?N�a���P
?�������C��mLp���a�j�Q�����Li��cu3�2 ����p2R0�����Lkb�C{K(K�Tr�M����HQ~C��/��O�B1�%�zN}I���K���%�\d:�J��m���$O�L�3����R���h�M������x����	��Fo��6�����-���f��"V�I�(����V3&ST������Z�P�S��4J$9D%�H��m�|!����O1
�����G��9f��3t�U(���`��|q����q	E.��|{:4����n%�����c��D?�m���?��]+���
|\�>�a,h�SK��>�f�pN4����E��J�h�M�f�o;�C���������Y��n����}4���������`  �����V��l�"BG�������
)��v�~f��faNMv��7�^d9�d=�LC%�~��8�5��+�=T}������]F!T����6��c�%�b(&e!�b���r*FFK����5~J0�_��i13b�� ��Ag�(�C�Y�����a��y�rmz��\g���rxv���I����Z%�.��������1V�1���R�X�Q;R&kp�r��$�Z�.�1����Y\Egpe��ji���Z �i�;[+�T���V`f#N�T�QZ���8W�|L�T��a�C'���fd1���LkI3@��}Y�
%����_Z��g�KiF�+��O?��`H4`fo�^>��o�cE� "{�������a���9_j��8/,,6V�]:�rQ���������XE��o�r�yp�'@�����Px�=�RO��[��a�>������%��L�����	����?��K���Z����:��@�v��)>��W�-��[���PU�x$��z����^D����<��c#��N��rl,����1���~�Pf+.�����S������P���f���fG��0*~��p��m����k��+T�_��W*gh��c?��#*iL��a'������_��i�pv���[����u|����Aj����gL�Pd��s
�@3]u������t����9���Z��t����P6��Y "����L���?����x�����N��@h�����^�2`�j��5�p��]Y^�u4���A��C�K�c���
f�gF��2f��~����N1���sd��7��_��\������9�����+���C�q��v8���|�_#k�g�P2�5�#X������J_M��Lz��eIu�I��L����Q��}�=����C�un��fZ���HCt� �U���������cC���&�Q��1���e��x�:GT�E��r)�[��%5����&��l$7���9���G�����������N������i�U D,B�4��+�P���a��?�.h5��-��e�KD�w�����4%�[�"����t�'�~�<���T��R�clh�%�c�P{��-7�������M��%�n���D��"��$�	GV�2<-N��Y%�7�HGis����*@N,_
J�.K������8�?9y��m����`]>��$�U*�S������7������*.����;����`�1�7���������m���w5��a��|��	(�?����������a�G����������?�QH&U ���T:���sXFr)EZ��o�f�W�o%���Q'��N	��%���
|+��j~w�m�>xw������7�����g���`�����(��uIrM��@�_�H\�H���v�����2�9EK�$���{i�n�����vdr����8 ��+�8���GJ =��<�P����V���y��08w�I�s#i����j������$`����ei��!?0�kL��B�(D����c�	�SYt�����>�t���bW�����Q���h�@<V6)
A>��,N,X������3���������K�bD���p�c���o��[���������m:���$g���}p�
Y���n�)�P:��'n0o��C9�YM�e�a���746c�	)oS��O�jU��f�Q,���k��f������������h�4z�����U�1dw��U4����z/���P�6u���������
���[��Yo�oz���!����f}�^���vs��QOi�Q��Ka(#<w��rPl8�h�'#����5^��a�m5��v��w�����3��z�V������j�4��xG��7�mQ����Y�7����x;�_��X���Fh&�����s�������x�b��K`D�%��@��������p���z�bA�sO�x�y�F�����b��`$��I�\���_G.�W���[��GV������
a�t�^��9�T�����xc'�x�W����-Q]�W����
�n������O.R|�a�\t��U��NQC2���y@�Z�����v�9K�����l�2BfE��C*�f�uQr��h}�<~R-���"'��m��PI�~�*1U�����Y�R8��U�#,��4�����������"e��3��
D���S���;�W���v�������Qm5+������x����s�OEA�L�t�Tp�����w�]A�F��������b���s�E��#�w��fW7�k1��[���I�R��E��Iva3VKBu��m�����\�8S�E������U���J Z�F����e�So�|����n��OYb�������
[-V���s��}q��=��E#���@F�{�.Q���kX}������j��S������[���U�L/�Ok���D,_�}Q��l�����=?��;�B����*Lj8����_��P;���c����p���47����7���'��j��
F3�)���l��i
�T��^������t>)��8�q�0���?��r���{��r�]�IC�8[�������V�]o���t����M�*�)����>� �F�*P*+d����Sp]����J�C�v�y�<������_�SP��c���d���t�C����i �6����t ���!���x*Ov2dvw[n�ah�;*���Q���1��S^���	Jp���?�tq����m�j�e1��&�rv�}ur�����~[(?I���(��O�_�O��}�����'�Vi�*v�����4#���/�����SX;�����Z}�s����������@��BV�*:�%��q�3�Cc���G�nR��>9��f� ��t��C����~��.G;xh|�+��;UN��ie���%�-�.��2��!������������X����}���l�V���Jw.7��h�*�8���Kc8����{�
R�J=�Z�P�G?�i����
�uD]���]�W������J��AG�-��J_J�>��D��&���BB�f��GZ�(2*[Iw�
�[z��I�]8z�-_|�5=3��n0�X�F��"�1|��1��g�86;:
G��G��m����k�\A8�^��F��(I	���3�c�uX���c��c0���W���*�[
�U����Qx�l/^z����.��H �H};��Fx����8�I�����]Q� {8����7�UE���Z��;����E�� kQ`����F�WdG����~�s�TS�������^���b���bjvC������W����]���}��s���M�Q���u	sN�A�
i]���O���[��mr0�"���sQe\Eo�4\-V%�������g�
�
#�U0Q�����%����x�P�hV=�x9�S��T��j�"��
�#�MF�\��j%Y(�HK�n�k"�
�yw��?�������/�E����%t�=��a�F2
������{�a��LV�5��1��o>�nX���@�!S�0�8?
��O1�Y������Q".��#?+��?b<R,Y�uM�`�B�e�������S�����
�c�J1�`V�uU'�9��Ox��|�R�G%�3(��1��r�� aY�o�O4���Q<|��K��LO�(#G��12@��Rd�3,r$vN��(��5��D'�J��s&PZ��C�N���W �����;�������h�j�V�uI��G��a1�y� �e�b�b���9[�NnM����v����4eH���F�$��	r���8�{��s|�n"_E|���<������\��'>��F
&����K��Q7Pu��V4}h���]��-����C��0 ��	zK�M	���95���\dU)�R����6
0+=�c2�Q9�`%����pD�oL���������e'��b���F'��Y����>�${9��<��6��FL�#1�A�i����x(��!I��x�L�zI�#l���$}O��L��������O��G���
9�Q����)�k#�#���h@�V�T	�(�;�h��LY\�p�����T(T�R�]1����f��YM��Pp�59_�Q�.b�d�;�w���q�d+0P�E���8�v������A��>x����|���o*��PyA�H3�zR��b��l��0.�5��aH+DK�J�D��Ot����@�r,L��(�9W�`4���%d����wK�!�[�>�~�+�l��Oy��SZ��
�k�"6YXn~���@��	Xt1MO$�M��jW�K���&�5��a�TkK>c�>����#B�������B��[�h7HkX5����n	�[y
*������o�2�"F@FNF�������QYRc�W%b:��+�|��E�����Td,�
@0�x!�lwv�>�b�fV�����|3h6e�
w���"h�#�]w����[D��V�1tb\)BZ��#�TO�TU~E|�\�-��BHEBr K6�N�_V�y��6���h��EO���F�l��O��g�-��b'^l1bG���*S�0�y1��
sb_������@�j�[}��=i��Y�UP��Q�R&>%��!���x����5�G>���R��/�<��"�2�����T�{t1��x�k"M�#<���(���z��0�{����
G���������'�����#���W�/eQ�#�mJ�6�DBc/���

����[��N/~���]����
)�>��J����k=��:WW��U�B�M������}Q�/�����<���vM�2PA8c��
, �� <��i���\5w�~&!�}�o�e����l���Z�(��$Cb^������J��6D9}�
�b��-UZ��'�q�>��qe��>yn
��3��u4�7���8$I�e�:c��k�nP����9�[4�D�&T;�*�b�^e�l��l���`���J�Z���U�*
�����!��&H������	aR��|���=�� ���h���e�@�usr�2Fr;ln�a#i������t3�L�E�u{��)�x�R~#���8O��
�^�/�����E��2S���p���G�E�����|TU��u����{0��w��P�X�&�P.*�&��M���A ����s���vpJ\J�8��O�IUb��2��y� �}�I�<.�e�J��gD0�>uV���y�l�a�5�v�/�h��N2��W���"p�s�~p?�`8�A���42� �gmvZ���"l�G�'�_ {T��"�+vY��5zuC���Dp~<�F���	��
�����li]��P�R�(�4p�����*
�%��i���F$����=�'		�An�������@���o�k���^'��@�������s���[+��)�m��q���b\
��*�k�:�C_=t�f��?q�ako���,n$
��+�&�0���X �AM�#�(2���Kn��d
Mq�AVAa��a�-����)1���$��&r�jJ�����h��i8jJI��Q�Q�o�\���1�5[,�^w_�;9���a���?���BE(���;�����������������0���4'���O�h����/l
�i��n�&N>�i,�����t�	�UY,��M��,�iZ$JQ�e����nBu�
<9�d��n$
5����C�8.c��4	�B;�<3E��C��MVD�kED613���X�[[3�&�RI
Wc�x�kl���9�G
�;��"���>M�A�
;X�����b��������0$C��0o�-yG�����K�C�����r[�~}�sk����F�7�����f�����7��7��?��w�^!g��U�G%��#~K?�����eh��|�|���������=`�������
W���3x)���| =}��st��7^f�2����z+����v��v������o�2��o�h��t��t�c��0��������������VN��gEG���	��-n���tH4~�� ���E���Q�K<�pi����A��m5w�f?
�D%F�1A����������P�g
���t��������M�:�{��X�d�}��R���w���*�Wk5�$N�
=S� J�A���N����
_"�3�:y�������%��<�Jc�&��ea���0�p'��1�������c��F�kg�k{�����������9�i��V^�����9XGWs����I��|�'� ���^I��������l6����u�����m��"n���m�I�m;6�m���H�m��t�v��������n�������|�m�t���������m��r����u���}�;8;�}��rpvR�����������<����f� �m'�m�)p��u�v"n��m�i�j��p�!��m�������hw�����m���n���L�m�p�v��m;Q����6��Tn��l���	��n��������v�m�m;Y"�m��U�m;�L��d�,��d4�<n�������wQ.��0u`��D�%n����m;���m�0�"}f�m;,��6�Lu��!���m;9���<n�qD�������m;Yn�N�m�X���)�����"L/u�vbn���in�f�f|���~�����n��0���:�R���M���m�Y�m�����cu�v�m������m;+�m�X������an�:z�������#-c�?��v8���mC�d��������p�V��cn�z��6�|��m;���c�
T�l��du��m�6����H�x�3�zz���=p<7��m�`�m���������������cu��y<�m�[�n���K������{��vy~-u�vVp�v��������-S��m�n�<9�'���S��<���������m;t�vR������m�I7qRlG���A����m'Xn~_��T��N���c6���<���SP�c�m;$���m��en�j��t�v�4�lgq�^a.s��'[���cu��<r�������Mw�(hu�!�Hse�'�x��o���o+>�4r�6C��M9�x���&<�m����a^��m�������1Z�~�h�:��{��������Rv��D�2�)�NA%�����L��=��G���,|�������r�I�m/'<���(��r�m��(�z�����������}��^s�_�#�Z:>��m[������}O�m]?���^���y���vo�m�Y�m;L�hW�D�������
�����L���]H�mK�en��*���-U��m'�,u��$*�����?+r�m#����-�{�T����Zv�|�#&�m;��Iq�f�ks���R������� ������<����xn�N������n��q�xn�N�����������mg�6S�����G��#
���/�=��o����(n�N���h>�3B�J�d����q�v��m�������x������?��o�$*���1��O�L���)���v&���[��mB�������cs�v��m;���s������Wc��3��
)I6�����m�>n��g��m;����4'�����-����m���m�Y�m�������m�uWs����bl���m����P���m;Yn�jC?�������1���v�#��m�4�����b����(6k�Z�X����{��l���u�;�������b��j4}q��WU���_
f�*T�M�y���c�����s{k�>An��z�o7E������o������nmm�E�?g�{����C������b�aF;<�?� �a9Es������oo�7���N������������F��U�m���-�O���^���DHR��oAu��8wY���>���R����#/���������f��@�����^�.��n�^�X�����{������7����h�,#E#b�N=�����,��fQ���b����$�/���s�����bU�?)�}c��d�Ez��IfEHVp�"�h�	F�B>0�W��qC8Nz�0:K��@��*������
h��7�k��S�G���?��j���"����h�Z��|�:q��f�]�F��
G��Nb���������[;�]��S�m
���X��D%��N<F��VC���[���|5��`���w�Ng�-����s��c�qJ���.;�]��/$���������'wY2�yr��d3n���6����'��d27��G������p��vz�m���9���s�Q�����=\-V�!�y&CB�_�5{
k�A`S�
��X����!0�*�|��S���}�>>��0���
!�^@�����S,��a��2flU!�<<���T�
;p�U[�
����*����C��ri�0Qe�;�%��T�K��%X�ml�7[�9�0��
t��f�D�jsBaCb����2��_�����Q4��+�)�l������C�������h�+%RE�],xD��l��Fc�w��f]�S��Zzo�h�����nX�g�`Y���^@��
a�D�E�Q��d����G;����"f G�B�l4S��`9�8���<z��P�p=
�>7?��??[!W�B6E�h{p��Iz
�D`/K��!�{��U#�t��W����w�������?y��M�;{��������q:�g������8���d��d7���d�2i�w��I���K���A����p�X�P1	�(p�pvs����Rxt,)�L�3�$�|��H��y��;���G�CT2��~��\l�Y�
�f�p��7�8�����WY�B�'���9WL������O���C�B������D��Q��]��>�,��`d��Q���=>��]�b�Cr�sC��d�;��1�5<2����"x��G�#����;�q��!�����/zn�=�������T���t:n��u�l��|�����a�!�B�����tw��W�.�.���O9����T�\���QFP�he4lD�C.�N�f����Z���8���Mt1������z��{OFu6�@l�gj���A�m���W���^����a|�-]�OYH�6S9��(�~	$W+wTg�0f�������Zs(&���4	����W'�pH�W�]��`�����h*g�C�#��q?vK@�h�
8R��A&�����x!�K�Q���|��\��9����j5
�7��!�)lJ��z�`��F=�hk�=�t��	5�d�|U�24���H<!�x��y�z������$�Q���m�
�[��~h}�x�������,
G��^&r�dD�v�>}/W"U+�F���<P�����0�vc,�?#^5x]���r�%��,"{��|�8�2<r����[��?~���q��A��||� �262�_�����I�� �� ���E"0�*9�����,C$�j
oks��+����+9#>�H�Gvbz�G	�lS�/��4����b�&{H��lS�/�9K�o������A��]e>+ENN���B'/Q��1Y�s�LV]����������ws��k�B{$I�c"���-tr�����c�q9#r�{�x�v=�Cb�f����zl�:������������f��A%s����M��;%���v��f�����&�C�m����%��@��c;�*�����G@�=v���!z�d�����29��L�|K=�����OQk�T=��<��a=����N������P�MN���cc�<zlg=�A�2���|0��NL��0J�zlg�����v�zl�����v�z��������O����'=����NL���a��C��*������������vV�c+��\�/�D�m�f]Y���_�m��9������/\R��H=�
����vV�c;=�	�<zl��zl�o�[���[���������N~=�s?=�<c�#���������#k�a��I;���?X�=4;��xnAJq�����nmmG�Z����?��������Fok��km7�������������p�1hl����������o��������Ha��g��a�#�EL����w�o�0��:�)���?�����+�`��;��k��
�2�u�2:��[�7�	����p��W!��u'�"�='�.L�&O��r��J*i!a�7x���g��b^�qzKa \o�V�Q�����j>P	7!�Y6��7-�~F��p�5����FK���,��_-�@��m���u���Q���:�����y�d������G���[O���w��U�GX8�MZ7R���Y�X��i���+n�IJ����5a��dq��+Kj���6�XVs����UM��Z�`{��;Nf��D�+Ah1��uw��T�jZ�J�l���\�"wH�gA@��j5��;�kG� �R�UF�o�>f*Pg�f#�����{����+y��m�U��V!�{.�"������j�~�>�zp�� ��4��o\�\5����gw���j��[T��7�2_L��L��O�\����#Zn�Y�����Lq5L���,���w�d�������E���]�Q�9��U1����� ����b��O_*p����S����*P��,�<���d4$}�P`Xx�&W��b��Y����s��ovw6;���/�'s5���o��x�r
���� �B���OO��BF�Fi��z6oF�Ct�������h�������x�g��]A(h�"��[���1&�H2b)����4�%�v������*����oy����F#�)��B*�ec[�F�t�E��H�;�������nQ�����G�w�G��CT����u.k_�Gh�a!mk�0��eH�a���UW�������;���X�J<��| 8hEJB���M�X���
��w��$�:�^M���=h�1�W��^�n�\��Q�2������t�_x����5�`E���P��-)v;����g��m�o
f�t�I�H���K���|����G@��70�h�����?[+��c�6ark���sqq���v_����/./b�B�_V��<��N�lk��x���F���:��>?��ez�����X3��N���B���i_���^�}y�!�������'��G�����@\\v�.���&�:Mw6s��[&�O����� =}�����N����Z��?�|��c�Q�WL�������T�t��L�w]��7AK�����	����w��?����s%���i�e�����$��XY]�����X�=@h�A�MIN_���w�S~�$�L��6X6���X&�����m����6����:�O�>���?C3_'+C�������*'�MW_F9�UX����S�R�&[��L���2v��DErn&Q���/)��D7X2���E�.l��;yHk�,�����(����R
+��
����t�����xz7��']6���U�&��%sD����6o�X����@a2g��G��2���M�P��8h�!�D.�-�*
� ���x��)��O��fsw4���IY�(�Ve��_�3S�~S�n0���/����5�P%��d�;�W���,G��1�\���<�����P+�A���^�J8�p0�;1�
����2uR# 5,i��*�� %��Q���M�Z�� �z2�/�S��@��GT����t�8
�:r{w|?L����{��02���>���a���u�����T����O���t!�V��4]����4�u�#�oL�2��>��p�;u���z��Ac�2���D�B�"��eU�R�l+�H���mfz	�k�t��,rAhUa�%��l0h4-�Vkl�wwvR��im�*�"�h#no�����j)X�9�������38��3D3�6��PrQ���A���cF��-�r�Un���e��`�s;SE�4G�����eY�)Z�a���S�*����	���|=�[O�����O)�b��W�����������h;e7�}�MkT�c�,W���n��r�	�wh�����nhnz�d�G���=���Q#��[:q(K�n	�v<�P�OM��	{�v�����f��p� �9�af�X��4[�����02#������	b�Iq&q0���3������_OF��uW�)�x���S`d�
����(N����+,7��
	�}�������`�8�pu4:���bM����m�1F��3H|GC�.1����2�H9���]N�|��+��d�b#]��z��O�����dk����1�y:I!��'��[>FgC4#�y)����7&f'��W��$����w���V���N�����z��
W9��sx���-\��u@�^�y����>�����<���������g�7��n_��V��aD\5������M���UV&HV���rm[����[������p��tmU��eUpE��(Jl�}t�G��Uc
�����{*~~�{e��/�B��������v��Wo��m��j ��x���a������b-R$�Z�xY+�����:������G}���_8���R��y�W��<�����Z��f/y�x��6I+�e�|�����s4�ek���������"��W�*���U������
�t)�����I[:����=�&����6��a&�Ym�� `�s=o{��bE���-�m��4(���xs}�/�������jJ����6X*���g����}�����|��P�)(��(j�����ltu=�~����g�"Bbq�#<�>xc�������R�6=zo"t����i��Q|U!<qI���^n��*CI����}wp3�?��rx�l}�[m�]N
���7��Zq(�NO~��:��H�|!vku
"(@��t��]1k!�����k��������%��>2$�ew�Kk$.�������]�K��3��"U��J]�-� rk�������+[��7��o���W������N(e�O�*l�_���1	b=^�y��-R�X�Xjw:g�J��C�W�
88;lw�O/�o�O�����S�<����-WT��n�����k�� ���,,��&�Z�
	���P*$�ke�{�I>	��W���� ����g3P1A��9���Lg�
��������
�8n/J7
�1��x������q�Q����x��#O��|��':��$��$_p���9���H�$��}�I$:�����&a1����H�~�iX�9��4���s��F������%�/4)_y���E�����>��p���>��"e�h:A� �<��M��/��_v��e<w]�����9v/�k0J"�G��:;;)5�����8������Ibp��	��g��M��'��V�m�`��H�#8��[��F����g���SfG���P��7�Z���3:��|��K�h��������|��M^7(|z|�L�J��l���|��K8]��f�;��~�������AE2P���
�
��dL�'2<oa���o�]�}���*({r*��x:zj��:�W���Z��#�jH*n����t�q.�Q��x=
�v�C�r�����3m��1@+F5��dI?��h��nSoa�A�!9[e.c_�1Go�z���p�a��cr���.���F9�4�T<��C�8N@��4�xK!1)�I���#|h��FM����x��]�S�8#�����<{Yo�'S�?hn�k���v}���7V�7V�.�7�9D8��:�1+�k���E0[G�b���q
/����"�>_��C�/�Q����|��T����/�Z�J���\�b������G��CS��
u�����>�G�4��T��C�K)���1.�B��y���-�w���C3��
�'�����{/����;�Zms�����Y�	��qC��>b��#�d����g������ -��m>�v���ehm
� j�W_VM0U�+qO>��������V�8Rw�*�l;��[�1occ��h�j����p��|U��eT%p�vq��?�:Ze��b��%��R:R��kd��b|1~/=�Q=��J�f�������h�;[�N����f}��/_��������;9�����Jn�e4��v<��m�������U�&*�
�p�a�	Q|�?��&&0������������j�wj�Fg��n�Z_�B���2l_A��Fu�q���?������\xC����21/���t���e���pk���m����X��F��m����?��6�e�v?@+�����T�X�e�JK���XF��������!�e%�O�������;4v�6��
��[J���l�����_��K�l:����zD��]i�>cor5��"�|vJ��l�?�� ^b��Lk�	^��g���b��g�
J:9r���,�� �-b�P������x�V�H��n
�"�a���r�������r*��g��5wo�V�`p�qkW~��9}�,�yzK
(�-���
7j�m8��72d$K���b����l�f��(�����oP�~to}��N����z�c��;�'��x�c�������?&n/���>!�la��1N&>�o�+`���� ���������
���
:�;��x]��u�T�Z�g�i(�^]aQX���b���������`B5�{��T�2/
R5�i�->R����>gH/�����6c<5c>�����������)��(�|uU�����q,����-�N��Ri�i5@��hdg�m�7z��F�u�5�����	~y?�!����efCj�2�9��bz��D��t�!K������a1�,�rR,��T����b���1��l(�&����9L����"`i9.�����><�d�H�]p��Y��i����>c��ot������FGN���s�#�s9����tE�^����/��p�����
6H�P����/�G���6�,���)���g�S������`��S���=��e���9��_�l���_z��]f�i���Ye[7���n���Y7=l&��N�\����7����s�m�Ds�m���d����}rV�}r,�O������}�^!��$l��\�O:%�R�'kG�fG�l��}e�>qJ�4�''��I�Y���I�}r�O�a�D�L2m����O�D������IgZ���Y��������{��S$E���O
��'���O�����z�i��
�O�G��)��b��z�����"����J�����`���������M�j��Hc{���?����Sh���������)����y�\M�����8}����|VR-��IE��4������*����}��I:�'��7����s6���O�h�?MdB�Ub5�nVH���8I�~OB]`��/�N�E��(��^�W���U����b!�"�$0���kI��\�\K*�la�"������c�W�B�	�k����>�pW���&/��f����
){��lB>��%��G_��H,��j���\E�b3��$�W����$�j�\�1��I@,�	��:0Am�V

C����xF����Ba�N*�	A8���_xZ�������	���+�V���>��{�W�C��������Xe���+VY)s��P5�x< *�b��an{^-�V�
.�����ZpqU�W�
9i:X.{�M~/p|~h$����;Y(qd=�i���dv��EQ]�'<B�V���=*���TZR�)<�e1��\h�Z�/�/�D��)f=7�<	h��OKg���/F��`�NF%��TM_��V��.H&:���;����p�������a�r���f%��ph<���d���T��._O,�K9��+I��HF�$L�A~vU����b�
��T�>6���vH��piSk�'���@�
�-Rx3���@#Zr�w"2ff��T)�^+���V��1������j����LI�����Y���������8�3�p6��Z��R���pa��,��VW�9Cy���^�����q���r-=�Z/���&���
�1p��h�Z|	�[�$���f�����lR�1�)����{�:�������H����&��i@k|��_��o������(�Pr��
u��q�����\���R
@zQ���|���D_��Z����kb�W�Q������>�h���s��x������8��WW3c�
����9h"�B�:Z���9l�lr�_�	���9�����dk�>����TP8����[O:��s���k���K�8��c�{+c��;�/5�d��=���y'������=?��w2�m�Z�R�t��3����_~���y�p�f�q}Q�����������q��gk�������g�0�s���|7��������v�����2���Hrqw����U���:�?��U4������dO�"3��5<2�F/x`��9p����5k�b�/��Z�7��VW����.Jlu���[��W
W��q��*�����^����;�_��Q������I��&������m@����f}�^����f}�/��%��;������
��A��0�vK������l
6v<���l����b�Y��vz���`���l���`�/�������$��G��To��=�v��v��8wY�`�=�����n��k}��e�v���\�`�l�C���	��������N}�^/^,(�����|�������7?�HS���=�M��/�����gQ��N�t�(6�^1yt5�L��NJ����'�����}�5�y�:��0���a��
�R��}qy|zd�y�%���P�aJ��` @���'[�cw�z��B�[�fJ{�b	�4�]�^SSE���wE��(Tr�bs�.��	��:��P>�H?��MD���-X���������Ul���
�Ya�V��p���m��#3�/{����
\s����
�(�t��[k�O�	����������\�@��P��@�f85k� ������	}`�*U��q�("�du���oY������;^x�
��7�'
C���)����e�Y{�$��P���mD�.R
��lC�5m'�N�?{{V"�Bv"�^�Ndstd'�K�X�lv;��;��[�Nd3+��l���Dv�e�����DvY-;�]����f����.�Dv���DV���`����7���]h��t�2-9������Q�&zT-��d81g3�ykD�`�Z:@����-.	b��&��[I���,�.oi&k�Kk���������[�	V���Z��a��{���['B��VR)oy���# �,��(oiM��*��Y!�g�[#N3��
iF���f�+�iF��Q������J+�����9K4#_
E3��iF���f�-���5"4c�:�y��hF�J!��W>J3r�Q4#_qE3��i�=��%gX,�P�Yl�Z�m����k��1�xLf��+���p�^w0��O2��t���������p�C���|vu#s��3U������W�f�-
�olm��R���f�3$Nk�;��.�d5hnx}��,����c�[�cd�
kaB�#��r��$�Q"X�0����cf&Dl�����f�Lzn��s���mq�c~3��^_
���np�0Zd�����@��k4*e5��7Q-�^���D��uO�V�O��B>���Sg�G�6Fl~����w4SL�����tfV���X	����=�-�	�"��=�@��>N���������f4��=�iPw��j���X�����x�.�CF<��+����[=X;�Z�d�^d��J�i����v��
gY���*Ar�L1\�b�)9���-��~4���������4a�Ks����b��x���pL�c�!��p�Y�������t4������������5-�������-��7���xoq	����c�X��=*G����\\]��k
��q�� y6�"�2���H����X�9�w08��7X�9!6[�Qs�Q�^���>�U^�I�zWC�����:'�z>������7����"X�q������u
or���8k(hT����d��x��1�77LS&��a�y�*:��4=Ny��{����}R����Kq|)���c��3� ��y�So��K�Iu:��Qea��nS~��x��$+Ba&UZ����D�g�1��{��7�r�z?�z����K%�b������z�����Ai��2�P]v47W����C�l"`�(s�3T�ZJ2�9�c��F�<JQ?�����8��8�f7�IY+�Vc 6C=4�&��
DT���AP�YF����D�N�y���i�|���~d���bU�&�4�)�`��o=/L�.�U�j�:�&��H|qp���#�$	q�7$q�#���J2�B�-N�y=��ZH���aP����R�D���f�;yi�[�j���X�g!7o��Cj��Y���Bn.}2�1Vo�������Ic��(<�<u���EU���\\�y�������tW��:��?��{v\��5�\T�x�"����D����pbhh��W���*�a�����!�l��9o�)F1�k�4�o�}�m�`��p2�������.�M��8��90f&.�@���$uZR�&T���#k�����a>xP�C�}-q[2��S�
AbR_����^��b)
 f���w���u-$�0H"�H�����(X����D�>J�07��\L:���
H<+����0Cw:�A���]�v�~�a����
d��eH�7�
�e�����%�>���@�Pq�P0rN�d1��_L�u���L����&�����w��M�,��e������^U2�,�B)�A�!Q�d�����5]c���S�D��<�C&~��D���������7�c'���V�ip7�m{�@�0t@�{�\p��G�`=���H��6/�3e
��H.�����S��$p9����S��,�#b �[��C�
�d+RL�:���>���
��(ru��������,;�����]���`#�"��G'iClv��A�C�������1@�S!�� �����K�8���l�nWAnP���5{�yW(����J������$�����sq�8$�x�2;g�_�v��9�%�.L���g�UFu]���x��<%p��q&�{�!l��Ho^��S����G�f���8��Sj�A�=��,�%������K�+����+������K2~�v@��O�qJ��I�M,�r?O0�|���������I��:���������@,��a���G���[���O�W�>�0�4� @z��+a\�j}�!���"���C�~����1N��^�.`v�x��N����a���l�;���M��H�v(�6�aDQA����jI�:�v��D��=p7z;9T��y\	��u����'}����6���b�X�jD\�E������n
������B������F;gG������f����t�r"�>9��|" �Aw_�v?��t[EQ������o��C^!�a�k�=Y�e\�HC���O3�u����J������EY�x?8?}�t�������^�O�������������W%������U
f}�0��}<�M��'����+�z5���E�����wN��b�V^Xu�x���P�nLY��p"z����A-�e���7�>�$�x�M
��Q������E�{~���������D������/���*��_�tA�p��2RD���o��e�����#B%P7����\�V[������e2FT���P����w��T��� ������'��f�����~�U	?����5��_��������u��QU�=;��xX�|Z^�^�i����W�h*�ew�` v���]�G��<)�����@aY1:xx�����,%��,�J7�}���������� ��A�Y+��FU�Z��B�D��$�� V�3�S8���1��3W�J�
���;�"W����<��I0QJA���#U6�$Q���!Y$d������m�F"�B\��_��II�����Q��I��:�b��a�SR#�j�7ZaI\1�2��yb�7
�����4�B���(�.P���[����K�� *\������ ��RrYs��`�� ��X���6a��/T�A�<t�Hk\Cs]����@7�Ge���D�ft3�_���dA���Qr�
����A����N�4��<��B�siY����:O�v�:�������\J���v�P��� ��H8
�M��������C`��A���*2+�������tAH�~����9��&)��#�������P�z�Q�
�����`�2��a�2��7R����;4�e��I�m0�
)l�hY�d�#!gF��[�W������#:m�>�?=z��F�����j��7����R���p�~��\z/�2n��
���;�zn�A�4��b�Z/�M��I�p�����V��r�|A�������9�������hx���w���u��~@UmU����'kH9I�%sR`�~��� #UN�I���VZ��U��7�g ��#���_�[��b�2�4����=��uiu{�� �R�{,.�����4��.�mV���T;���{��S����&��{(N����O0
��3:a����I�J~�	�P4u4���l��V���'�0Q�������c���L<lh�_$s�\sL��]m�1#e3���9r4#{�X0�*e�-&�u���c9;�Z�LKSoCS��".=w�3�,o%�Q��s=H?Nb��+)���\�F��%3��+,$�������A^�������9$����`){��`J��/�D	*GUo��x�V��T
������=��������
t�"wv� �8�%�Ji��iEP�j\��B�_��0�<6���� �RZ>���HHcH#�=��6�(B�ND�u/L��R��j���
�=#��_��y�W���B������D�����@_�;�'mx��?��	�H���*d��s����q:f�+���j%�f���y��hsk��9�#����
����7� �T�N���&o�HIJ�b1�O�w�K>({u�>�*����<��R.��;#$���%�dn��-F���1���Q<���4SO�����c�Y�k����L5�w#U8Id��L��H(�8�"l�A�"�O��g��y<J� xeS%��Q.��V��S$��������U�(��
<	{M�Kh�K�G��s	VlcL,0���SN��7��ntVlZ�'E��[�\���nwc���bYWR�euxI��I��B�I�@=���c(TBc��(�uQ�����D�o������}�o��s?����������(v����x0�ugp@�]8��0A<����"\�OD�d��@2��/6E���B%e��trt��u�>�I��s�gX�W��\�����4��F��y?�xf>���5��|6XLK� ���$}��D
@5����O���D3�T9*<�������R?=U���(��J��
vI�Y+�	�!VBT�����;�`<J������i�{��t������h������h�2k��u.+bM����,�#��I������8���gtpp�L{[���`���������|�]��g�#Y"%���OY��o�Cg'���'���.B�.����I�k��
���x�1��Y�5.H"�dq@���^dhc:�XZ��@�!S��MS!�]N`������\�2r�����E���V)Vv���0-.^�
���&�0�
����Q���GlFF���*Q��}�}��?g����r]2�H�SG	�n}�.��Y.������x.�����U��Y�����y_�'B��c��@�3�z~$vk�["��S?��&��zZ��h�V��s�p�����mu�Ac�KW'6�:�|��1@�V���m�����N}����n��U�l���w�U�
�[[���HC��1�T�mi�|z&������;2��������4��kMo'�G�s�ft%����!�S�N���I�T,5�j���X���QXv���3����J�b�'Q@�.�h�!/;������[L{r|������ ���v� Yis� Z�*�r�^�:H� �lA#�����������o��
[
�?���	����������Z�����l�x	�GC �B���7��V�{��g4c��-tY6�,pW�)E�
$b�u���}���yK�"l���t��t�����?���jg�i�*�)���X��g����]�Or���+#V�u�y!'L���T��D��� e���$k����bg"�!��/C��@I%��D����c�g�7nE.f�~V�������\���]�Y�\W�����{f]��=	8��H+-�d�W�
���0��&'*������"��D;q�@������"ie��c��o����]��MO��9 �rR�J�gOS�5�RQ���������r���������a��v7`����Rn*M������Nr��bRY<	�l�\Z#!WJ�pUc-d��G�v!��2YH%2�'?c$�J�3o�r�o%y�k�������>n(���K��GM4H�2�^��= �����x�{5&
����F��|��N����$������p�W���3&�h�W��O��v�Ot��7����D54�������������
�a�����7~��R����:C�O�r���GY�mzK;U�����[2]Xc3�O���u>�t��n��2��)���D�uC�	��J�;��H�z6<q������?�����A��f�������&�q��m��6;#Qh�����4]
��`�#��	��`vc�q�=3�8��Q�&�,E7�#�EC�>��>�H������Qf��+����cH	9����=����f������C��(t-Z��g��)l�uZ����k�7���}��-�K�aQ�9��	�L�:+H�U�����,2��^����=&��z����I���F��P�\A�)J��^n���&]�������c�7�Q��^:K;�2��$�����c�L�!@Ct@�����n�aQR��������;d1c�#{��b�\2~"i�A�i��@.W��6����Nh�N�Lr�����!m��FL�L1�=�d���v�xTy��~[[V��R}M�2\���dA����������%vfR��o�C%����tMd��T�i��1k5��~Z�g
�����'���	��
M��\R8C	�����(�)*��-g��CcM���t�NN�/�cL}�����(~Z����������odKf��#-�=�>���4�_fv�1�})wer~�n|���?nv~Y�NxS�FY7u����S�Y���b�Q�?��Qkl$��0��\�=����z;M��\�i�7;�S���t�UnR�i
��xvI�XZr*��
a�v7��)�7�C#���w���#oLCq�$�K�Q>��w��h�Ec�	��b�,S�R���_���a/z��n���a������^T<;����W�Ah���
�:\$�h��!-o��U�h�'�O�lM�s;zz�\q���U@���H�0pWWw6<���*6*��uv����x�2�+�PeB	�M��b"������e���=~�#��������YQX�;�^v�������1L�G����+��f��Y�[������W�����E��T�+�=�	�dE%0��KO��K/2��KO��������g�L4��Z���q��QMZu���Vtf�������p���}4�_e��o�h�����#,����f�����l?CW���s��B�#�?�����#B�_'���~��~��r<"��c���Y��r��g�z������T����������e��'���)���%-n7X"�v�#w�smL�D�Di��F�+^�,��<�G2��Ox��l2�$O`���d���'X[�5��s�p�X}l
���6����}��`�O*F�A�'Yp������MHt�'�p�'�%�aA��#�����
�U��Q�W:��"����Z��Y�2`���C���+Y��:�[�z���q�"�
�!�#O����z??��=�8yf�/�i!���%�H����B��=���P��|u��$kE���S�b8`����O���d�b�!�}����e��K;d.'��T�8 $�wC/�����D�������^��5���%9�"��/�d���6ey? {����7�U�v;
�3����Z���] &����S'i�I`s������A����{�i�>���~���4�R��So��.>�������Z������;l���y�{�-a!�Z9�6�]z�%o6��e��F��a��4��K����q�=��C	'n����R����nV��	*�r,�S�r#
s�����m�_��3�-)W�dY*�$��_����>����q�����;r��7g��;C�=�N[>����p�`
O����Z�\�c�L~��P�����#��R�c��}�Pe�`Dg�Jd��������h�<F�%
�6P��������N�O�U��)c3����k:��N�2�^���0��A;�������bl�
�������-���a��,��a�w���;����	�k�U��X�[�nd�����	���p,��(P�&}���lK���{X�h���y���_,n=8���*:�=	�m�-�'v�5�*"y�U��X+
�2V��k0b>I(������G��4���M�i�����4�g��
��N�@b<�����T�<�!~c��x�	;����_U��k.�����g�6�97��xD������R,�6q��"����]�2�u�WBH�5�/�������GnNe��������D��,��{J�B2�y?��^�����������/�HA3���m	b������J��!���+��������V�� ���:��0M����6��q,M�XZ�I����!g��>���IT���w�$�*�KL�L��U������,�0)@)�W�et���������*e(���u:���L,Z6�b������e�4��rIRF��(@�w����i�a���*��M�����H����{C����@z��0��>����������:Eh���Bj�*�����!�K�5�xm�$�:��e3:�b��>.��$��>V2����N������bMN��Z[J��rhb����T���i�5E�u��5�h��6�:R�aOE�XDh�v'[!���F$�%��;�^W[[^d�2�o�4
���h��T�������Sn*���B����:��:%{���H���f��mx�Mf��.R��E�|��y�)������)uM��m&�?�?|��W,���N�
Rs�l�Y�~����q���=:�-�}p&"���bwW�H>0��=O����T#h���'F����,�n���
��[�P+���6�E�XZM��8>����)d��BB�+_(�]�m&Q���rJ����WdTc�O|�������\1:X08?�Q
8��3z��'���/�u�y��CI��������{dh:M���?�9{�*���q��c�h��mXi����c�%����^(��������G^	��k�������cj
�����9{+��V8��P�6�|���ic�a��9��|������&�����EK���h�L���Emq����!�j0�
���������_�����v ���p4�tE��!~�
�����]���D�L��(S�Wgg���������v��E�s|��Q��^R�mZ�%�����{�����V����w���o�����-�M��)U���VZ�� D6����0z�������6G���O����>�L���e(N�2kV�%R�������5���#O�l�!y%  �%��`���D��r���������!��h�B��Qq�n�jfz��T���{2:��FW2�|�_1�����2�gk����,��
�� {��9��|�]��#��7�������v�{����T~|��'b�
���X	�"}Q���a�c�Nx������G�����J�NNhD1��W�m8o�������������v����������BJ������Y�����e�D�����*JL�m��e����oBQ��������������P��XN��s���<�n��K�����5c�bh�D�H�#������`"��|����#��|!�$����S�����I�rnh�n h�jrIA^�KdcQ����=�o'��{�Uvx��������
�`.��������xC��47�����O1{/
�&
��>�P��&����#���NB#�iMN� �L�q*����)V��!c`��'�r�YtW\������x�X���1�q�O2����(���U�J����1G�&����j�����,����@����>�c�3b+�(����'E��.!�d��F6`RM{E-��f�)R��_����%Tm���W=�`t�`�� ��
<��P�=�W�+B�syiA��e�����8����,�_"'5"T�=+�-��N��h�c&��������THX#5�T[�b ��'Q�p�c{�lb��%�}��OEt)�j>���C�����4�-��:B�N8����dAv����}����u��5�L����Sv<*�
+��
�g4���9�U��6t��F�H��������YW�����,QVH���@TE��{T�H�V�F��|B�`>����R��s�����1���,j�CI�)^/$�;t5�L�=+?��6cF*�
4"�*����Y�T�����e	���C#AH�z�94�c�\�"(�h��JD���oV�2�����)u�����|:g=���"��]�H�T���O
l���A�sk��&)d�R�� �2[6������s�����pk���C"4���;�.�U_��F����������g����8�~��������8�MLH~���X.q��s����-������u�����8�gs6��	����WWUW}+&B�q�~���)>�\�
�P������
oWM�`������y��WC��)	����U�����d`�����v��A�KZe��z��YV��H�3|~i$'�{P�z}:���m��Fd���^�y�,�}��
�Uaj_m&���������K���������Y.)o�����4�������]P&��Q���(������b���}7'K"�f���E��w,JUvl2�����`hU&D�]B����p�������-�0���"b���OBi��������;$��0���v��-�S��#��GZ����@Z�J�LH{&*>@	7����A�����v8��QcV.�\L7I�����IV�[�xg�?b�������w��|�/'g�^�P*>w
��`D�L.H��H����d �-�K��H�{F�E;�|�9=;�?|�s ���M'�����gB���gA6�N&����x6x[KZ�W���+�N�/Q�C������������%G^����������-u���I���+8�R�*c2V&���ru]KNdN�>�Y��������Q�L�V��V��5�ie)I��9B��2(X{�4O�������\�K&��{V���C�0���H1N�8���5��u�
��������WHOJ�S%t���;��� �i�W�X���J��v$�1J����!�xD�XPL��`���^�"��oHKgv2ia�{�ey���r�p>A��"'4�c���#A��r�g�5��6e}������^��i@��H`�t}J7B���
���N+n�a����b�r��>B���*��-����u���E�a�f�\�y�5:66M ����D�%vQ�0�qC�\���?��B������i����KcR�<KN�g�e�S���#�|����y\-.qE6W[�����g_�����er�dc�]�\VN�|8�S����t-���]K�Y��o	�}�m��Zl�����9L@��ug�A��l��|�n|�;$M�H��~���9�K�e�����k���L�"ue$�n1�G�rh|�}�K���J�������Ks�"��|
������>��w���>�,L�Rz����z<����`O�I��H����K������H��1��"�L���:�E�i'o���?�!��M"��9�(�5#�Z�u8��Z��&��,�t~3�q~���W�d��fRx���Y�!��n���	7�a�n�%���q��"I���$T��#�'�h<�"/Yoh%��A�����h1v�5r����Y��
DJx��}�J@�Bt|vuHP�J1�����c����^�A�[BXw���i�����~`��/�U/F ��P#��b2��W�p.�+���|uv�����*�r6���x5������]����#���
<Z�����Z��N�x��^T��� jFK�%��*
���+H��j���>����3��4=�7�@���V��q3�w+�b���+���x>���89dY��r�N���9��g�VV`��^�aM��<�E���J�nz�������
���������&22�������a�]
��5�DS�(X��F������0,	xX6z_�yH����z95Z~3B�)��8!)!���p�l�����Y+Qb������{'�;��_[Qj�|����k�EY�Q2R�Dc���������>=�~�g>�E'!e#��>8�����������)P?5s�wJ|��N���]\XF)-�S��-��:��h�*���4�A�x1��
>���%�Y���l\��A����"W$IR�B��b�hz+{�SW=Z:���S�~�2�=�E���}��<5iK�c�f/-����f��G%���^��Yo�V6�$������0$(z�EPS����9���������;?�EZ�*�U�4<�q�$�U������o��������
kZ�d�����b���u�:[lI�u��~y;m�n�����.�j��\���N����W�fm9M������1����ZU'�d���� �%cyV|�	��F�j�q�yxV{��f��t�{���>���M����@�b���c��)����� �:b���jlv���_00V;=�������!I���zI�'p�@h#��]��V�4��]"���1[2���Ln�����������|r1}����7�}��_������_�������Z�#��������r�HME�}��A2��	����
�]f|����Po�Ug��&F�=�B1�T�;���H�vw��o�sUQ*n����qZ~���*����V�{��AJ�%It)��'g��������;R����d�f�����8~��������,������un��w�Uum�^]�P��>��U-��?��W���c��k���vg��?�8�u<:���7�%��y4����_���e�F|��yty�o-h��<�v'�<��=��u��?�%Q5^����>���������lBWXdK���������}�Q{A��S
��	��a�6�����b������j�v���nt���}��-�4�%��&��8f�|V�}US=��W�k���5���M�?���S@t�����y��-��l��FN|&�#'/0r��8������4d>z�;u*��B��=�����)-�I�#]����`�e�'�ek�>@^���+IF��_~��@���,�V_s��C~{�0y:%03s�	dl���]{�����3�0���h*���T(�il*���d������_ue%w]��������"���\�N$ ��O��s�����:�U��x�9����)�xq-����Y�:�xw�I�-*�J�e�k��e�=�;��BEy��c;H��8&��0��v������{�����;��wK���u��f��0�&�)�m�������o�����K��cbtAg.����Skd�=���S��$vtu�z�l��r�n'8{-�N�/K��}�x"�2��D�2#�`����
R����k���;�:��:�<I�]�������K�g_����W?��\4s2�1���� `7���v�@�N&��(���O?&;F���b���U��`�����r~�M���-���?���'O�y��������������;g��G'���v�������>��j8��1
&����4l3����d���Z�R�[�+��
�sQ��=�{��0���r;"���pH�_��`������������^��p�����;*�e-mG�������:���_�$E`�A����N�_�}���"=w�w@c�|�YF��'����H~�������x!�A�v�i�i���?5s����7P�K�h�K�p�����>�������\]�P�Lg���P+�W���&���J V���P���$FD8�2�t�^8��~Y{��*������U�<�&qW3��.1���(��(1d�K�il�bbd���&��K56����wx�.s2��&�Oe����� ����S��������P���v�d��������C�[��1����(C�T�����.���Wo\S�qF��1���9����Gc3�|J��T]~��UD3��a���=�3���$�a�>Us����K",E\��H��J��(���
Q�y?�I�[�8�J�Q�(<�d+�O�I�����W����������J	B!^P|9��c����i��31gpN�B5cC����c�v��5}a;g9�R�����������m��m�4Y�m�����9������]������TK�4<��2��5
��&G����'�C�'WO���c�8��k�K'����<�F�������_#�s�-���b��m�?�����8�d�l�w�}�����0�Z���DS���s�}��*����@�,����P!z<d���kVY�jW���(�+C�UM�#�k����������P�r�Y�r����'�l$���v3bP.tx�w����2�a��z���������ol����������+
CKV}2�k�y���^�X���%VEsAq�Q�:n�l�{="�R2������� �+��Y����m��V4(�m�L!L�l�"MGST��D��t����3|O)�M��X����;���c
SLp�\W����B�?6OEh��'��_&��yr���=N<���UM.��H���'����`yHC
�[�|N�E7iN�D���,O/3E/��Kv� �)F�_d�H�a[Q��u7@f)�Bf�wwA2��.����% ��^�i���KXLR\a�(��?}���q`��[Pd�����D�i�.��|���G�����e����qv:3f��a����`nO3�)A%&xU'|~�F:@, ��X
��R�������1-�U��l�`������W��8�&�'����B
����W)�lQF�V���x���}��~%�r�Z-nMK9!��C�����(a���p�:��,�?1{G�1�%	�m�Ip�Q�a�����]-��^l�vv�_S���k�������#��O�YBS*yA
ZU��`Lv-Dr�=d�l�m�_P��<G��54��e�1x���G��7��
����G�/�����M��%T����?��L��p����J��d�?�+���>���rYlU��.qg�!�e����%M���K1��N�����������������3�|�;�����<x
����;��O��E�R
:��O
U�����{��[6�x~P����3��@�o�e�@��Zl���L�����[�A=��@"f���Y/Lfl��"j:�����z <`
��Co��]	�����xFx���'���z49$���2�
������%9�4���g�u��Qf�b������@�g7(�T$7��t�\��u{CA�{��'$��z�4��+��k���d�p��D>���g����5�]��d��b������4��9M�Jl��L$n����:�����&��1��d|����!U�>|�B�B������c]�?
���|).IR�5gKW��@���$�5��hG~^�����e6�|�0*aR��'�5�+|G���3�;W4ER��e(��!����Sr7�:{'���Y��i�Y�n�D�a>�j�����i.�����~j� v���K�y����!��|A(�(����C�}p�w��m�8�Sh�t>U]9��q"��p"R�%;��OH�R�CB��D=�����d���c������-w�`zWB�V��S��fN)�A��r���+��X�0�#�!���G�)E~�ln��!T�la
S�pXU�0�9����J�q�D������a<[L��"���L.����f}�X7�.3���	N��������v!��(G�g�G������m��u������{���/��P�X�x���{Z��*�>�������#9�;�;K��.S{:�MwH~�x��~gJ���?�$�g�(H^w�mp���6��.�Mw�Oz��WK�m�^�l����f)���WJ�O����?����;�
B�M������t2��"Q���N��3\��$����/����;v6��u��;�����/
B�P����?��YG�.�����)��	:�d�g�a����k|
N���E.`D�����t(�����H}�#�bMn�>�L�$K�l��t����r��{����u`�rx%C�$�Pp��C�Ng�XjFFi�C���>���R�J)�g�yM��/n�v I:'����h!0?	�"A��5����s�,&Y�P/Q����+���}���6�i�GQ4M�A}�>�>�Je]W=��-"{(��<��`z'o��>��0���M��!z9�4+��(��wn.'����lfJ�8SE^�%~��u�	4x����C��a�?�q��?����v;��EZ<E~�[e��x�I&���?���=��t�Y��
h�\*���V���i���J:������o�Nv	����j_����ZhJ���M^:2�#���n
C�z�S��U6�����2
"7�]a��I3�a��P�|����������j�am��8OI�13@j��/���EGT����F�������2-�O�T��%�~+����O6(�������R��d��x�Ecl��H��:����������5�������a/����h�4_c&fY+/���Q�����\p�M������TW�� J�Z0���|��
� �&LO�x�9��BAl�QZ�(w�p&$��;>�4	������*�����dd���4
H�r��0��@@�����Y(i��~7��M`]Q��HSc�3�@?���$����'�M�5�Y�4@����8@�+��yk-����@.Y(a��I�!&5�Y��	Jg6��5A�S�J!�F/�X �
S�������F�N��)#|�B����!������5�M5���l�9������9a/�2T�5����q�=�^(O"��R������s�`)���n@rG+z����b����^A�)�f����&��i�$|�^z*
�k��46836`���z�]��Y-��L�En���n�������m��:��({|^S����|W}�U��KAB>oX��{����^�VX��Z�h��j����$EApC��'ZX3�l���=���0�L�����'�O�DWIG�&�5�������+�W	�WM;�9$Oa�{��u3X�����UO�f4V��_ �o��(	[N)n������-V����0�SSk������4{�f�"�yx���|����ITs.J
�$��^�S�Z��p��n�����<)n�%��8^�z���p"���>������l3Y���k�(F�`�'�g@A��O�G����Gj����<
����N@3@tQ�8����r�E��%['m�90��=p����&K���^�T��0���v^����@���<�������������YM!�RN�+��x�4J��T@|~&�,�/��������MY8h���Oh���,��?�
��z�yW�,�>GZ�.�@��}�=bZ�A��� aj�w|��Wy&�c�|1Q>���*����(����RZ��#��s)"�e���8'���y0�Z�g��K�<i���Q�d�����M��
��wxt���A�I��D��$�SZ����(:|��#|(��	@h��%+�i;ZJ�ZL�-f��B��da�l>@h9��KbA��s��]�Hw�T8��c�����\H�5&����C�����I���a��
�/��Fk�y�:�M��cRedW'V���'�0C��~3�v�Y������i�^k�
:��9����������	ZH_�j>V��O=&�&�J���G�7JuM���j{�>�
.(�_��+�vD��e��������T&j�s���iHKN:�2r4���L���n�W�m����(��>�|�������|=�M���
���=�w��||9k�Y����cm�������q����Y������o���_�?~�u;�'�4�����e@��D����'^!mG6%Ld:4E������:$�\��Uj�*��4���O���,��������C�%Qp��oa8m�������RG|c�$����v�{yv�����Y`Z�m�G�@]�Jb������J�6��$7��Y�W]�!��i���>��������*F����������&�����vA�dOf���^�@Df,�EU����:�����5jz�b<!��
��9e��[f�����BN�%n���m��O�N������dM.�������w3���l�ze|J���~������B7Y�/;��$�M|��/�&��vg��4���/?g�|��7��5������~5�-�G.�R�}��K���d���O�?���|�������	���_����A�xWP���'��A���5Ez�LJ8-�F�^3�:�R���]���R������q-puL���mj������#)+���)��I��p���@z���B�2`e��:q�.mi������y��e�kUCEc�Q]���7a {aZ���8�q�O��#���m���{mx�L%_��@�n4��H��\�]��^�3K��.k�.	��QF+���.��~��KJ�*W���������7�bs��DM���(M���evX�]��I���Y%����}��M9���0*��v��H��i2����4H�!��s j`
����Bw ���-���;v��.t_������UV���iD�,��&mh���C�������Hq��l)����{����jB)F���;�P���$��U���8n�S�/��;*��W���F��!7Z����m���|�N��X)p(�����oJ�K������9�{���!�Y�B�:�ZhD!�):>0(c�*C�����pbg|G:��Q
\2����q�!����J��c�<Q=��n1M�rh�&(.��	��:�g�Ft��l~�����k��j�����H���s������^|���zKx.
�����/�K��R\e.N G�C��N���y���c;/:��(����pLw��4�^T�����u�r3#�uX�*�\�G=R�-�|�
���Y�k!�m{�;'[�Klc��i�.���@(�a�o' }��G������W�D�Z�Z�j����� �-����m����gm��W�Dt�~g��l[��+�k�����Hak�m�?T���u�m�L��~��PE��1�$�l�r���.��~ o�z��T�;Zr?4��M��p��c�� ��g?\r�3��d��;�������>��������j��E����O3wi�q�M����������?2Q������D�v��*huM�����86E��[�	_���xt(�n=��6���]	��V+R���������B�%g�?��!E�H�n�l��	|�Xd����;>�o��Y�Q6�����rC*����x�'K���������6E�2�G�r'�1I;�Q- M�V�4E{)������b�����L����i���+� ��3��	P�H��1h(�E!O���	�2_~������%���/\�W�"p�\@#�Y���,�<�a���m��
��_��A��������������#jU��
�;\T���p���os�}9��� Bd�s�p��J\1�����u+�M���8o����:
0����8o��{��,]����:��0
��=�����
1S��U�Q���0�P�<�X�
�b�&$�����I���d�
^��~IB
�����:�j��\�\��Cy
~��P)$���KK'�������%�
��j��}r�[��a����.�p	�z�`��WY�����-���d�7����st����������A�x����V������<�����7]���*(D`�G��/�U�.���rui�{�>�����6������px�X��AKD	H?�Y�)��:
n�]��<��������;&�_{����l����pxJUC�E��6x��W��n=X�D9��	?�����f�M�'d�g��0�m�kFtD��K���V���g:u|�E��-D	{��Z��BA\);���r*���
f:t4���y0�i�a���W�D���,����^8�K8�Y�����o���G��;����}2�I��Y�XL�L��<��|]��j~d��f�s{��G8��2��+a��,��Z�?/��9;q@��O��b9fV���s��v�i�l_!"{����\V�� ��I��]�:&ZU�P+�5��������^���3CKz/1��P���d7+"��e��|p��{�G��������k���!]|��3���JU{2�����(6����g�1Y6��K/�����}��W_��8m�EC<���Pm]�����[[1����si������
��
-�k�m|��A��r��
�8�l��h��a,��-F��1�����8oY����v�����d9��4������H�_oll|�R��51�O�6�n���
�w�/������|Sr�/ ���&:�BQ�+t���Zy~�+/3��"�qF����+N��i�"�vZ������F<w�?W��VHH�!T1�=_���OZ�nszt���N�{	}6��PSbD�����5�����`r;��:,���z����Q�����g�������17vm�yp����d49b���)'�cHJ������W��sr�R�<��"Dg�..�iB\6��O��/,0b�����K�<�JM�5:�)a
�	<#z/p��
�&���g�[�9p����{c�06�Cy��|d-�FN�L����%�Lw	,�l:�����d���+��E���g���E�x?��a�e�����P��g��M+"�{��JD��\A2��J�=��#������o_Lt~�|Z��a)��S����B8L��\�jo��|�xZ���9����Rc����A�)�f���}���~|C5��P��[=�[���hs������0
�����x�xc����qO����
M�1����R�����j<���2W�����k��S|fB�k�h^�Yo��=����z��/���r}������/��~��?=�����|���E
�����A,"o�y���=�^�1
��on���Q����H�W������>t.�WJ�"��l�KO���Z�X�!�|��at�2��(�Ka�����7F�U���:�?LH1�V[Y9:�u`��la��b	o���Fw�ji��<��*o�H����2 �?�0iM�#���`2�<�&:�+K�-���?�B��p}�cA�l����P����������m-:�����CX��,��0������#O���B��>���[g�$�������t�2�.��L=��~����o{���v|~}��Z�������
�gZ����������M���
�`(��H�j�"�6B�����i�/�1���m������y��	�\�z,<=$WE� �1"��/��_0
4��'G���s�=���P#�Zo,�R�rK�T�
z��w~��������������RSJ�@��������G����h��+��4�	XC��Xp���(�
�?��Vn6�����v�)U.�m/�;�{��x���<b�/��� ���2)�yP��U�!��l6����]^�D�Zu���.��m���}��;��A���h3���#=�}�V��p��@�H�!S����{�[��,�9"EF\����0L�QzW\�U`�F0@T2�������r{N���pR�4��:�i�s�Z����6��Uq��G1�\�>��g�r�E��h�<V�0����Y���`��.�r���e'����bo��_�_��8{�����D�)_w�����]f��G`N3(9���+�Q�=|���b�5�����d
�2��
�2����!���6$�������j2b�w���|%�a+�s����'���\���}y����|%>7����j�>��f�+o/���$�
�}1g������_XV4�����M�����|��x�{C�=1�����A��fr�Z�gj^%�����^��	��e��g�����Fvwk(�_�AW�
�R~;��o^��E
B9t=
Z������d�B��y�k�9C��(��`��lx��B�
�M�1i6:X�`+_?���� �*� �t0��mL�c��,�u1���m��7t�&]���g
|��!���$��?IyB�/�PCH4�Go�r-E����A�����..��z����w��U+*�5s\�a�;�T��8uUl/9s���-�A]��WEv=�K�w�Iv
���j�� -3���C��fBM���NkSIc�^u��,�u�?B�}yS�2K���������������jcd�e�r^�sYy43i��p�l���o�n��-�K�"TG)�4�ZM�P^�a��T���m<�f
j���?aD���=�r��EI1�J�c�9�md��4k4FN�	@.����U5�D2�u,5A��X����}��:��K�!���WMC��V�v���~AyB�P�6��ImH�����wp�t����r�6sj���������;Q~w'�g���w�]�>T���B�����]�W	��HJ�5~��P����4@���������
J�$����?��l�����N�����4��~�O����''��-���s�
��g�a�����I�t����S��@58\�g8�y���=E�x7-����*�������~����y�KE[�IH����4�Hb���A�b5p�;�.�GH���`p-��&��}8(1�|�$U���H���d��0����9��>�*������D�H;a�r*��$F[����R�
����
V	%&�U\��5�.?�?(`sc����-��������z�>�������C���2����'Q���K�+*H/�����V)���4�(�5���}L=������T�e	o��m���#�/V�}��.�
tmEP����h�o��b�B!��_��{L*���`p��b�W�k��"����������'rv�)V�#��y
�8n���H���bn������DS����V5 �,>�5��%����5U�Wv��kQK_���'�"7��E�dP�{�rBo���)|��8���:<�w��#Y���a>S��$�b����2�n$�o�JZ3����O�1�B2����U�e�fX�lG~�q!�II�P)�j�h��������Pv9��h_1h��� d�Mq���t��M������#�w(B�e���*cu~6�
�h:�%�0R�5����.=�!#�6]z�ZT�l�w}���%%�����Dd�3����l��;b�y
����U�m���+4��gjzA�{E�)���7.���n�p�������{�������U��:o��V3�
��;��m}�Rv��[��g]���X,�B�>�DI��<>|��_�wp�N�C�{�u���S�z�R���(]W�O�C������R���A%��x��T�������b����V���at��.}�r��K����� b��m�/2�9N����7#��	'����#�O��N6���#s��9��W~j�i��;G��L�u���=lO������P3�tL�r�s��J�I����t�r4[�
d(g+\�$ ]j'�(����'�:;�"�8
/~�-%�:��.����"�x>4%����e�i���xE��AU�����cB�g^���_G�Lk�|Hv�[yn��
��J�~��o������IRY���o�F��'��,�#���"(nt��v)o_�D@�&���U����Y���}��Y��~[fW��	S����B�����L
������fB�����-�v����n.N"�7����'9��.%��N���bBPW�.�� �d�A�O��YQD�]:�=�`i�Y����r������3�Gw�`W����~�'7���q���,��)X,Cw
B�#8����Phsf�^v������|���Y:��~1L��Jhp�[l����r��6]�uPDG|��JG�����a�V��,��D�&
$'���4��g\@������W��{����=86�.���j��&p&�d�rx��ex�K��]cl���
I��l�#��H_��Y�
OK���%���7���K��fr�����#�6�a{���u�����[U\�lK���F;G�f=��4�6h����u(��*#=�t8�@_]i�#�M�s���zkX/^�p2�n:�;7������g�-����3Ge�*�Kv�&�G���P
��0��x2�� �\�sL��@ � ���T+lQ(���B\	���,����o���@����@�y�<�#�x<2� �����>Kt�4a��c���_0D>qE	AD��u�?��8��'�|��
�e��'ly��n�e��X���*���6E��U��%���Vj���R�t^�,I��\��
���+������<�v#,�^�!\	oV�U�I��a�K|�����w�p�����=�f����+����XDUq1�v1��@]�q�c����U��d>`WP��m��.�Q�����e]�*���~NE?N�5���!t�K|�>��a}<��p��Q�v�pw< ��3������wz��I~�����_;�G;��*�\���d�v��{m2����d����k���K�A=�>ML��\�������R�������
 �b�0���st�m	����i�h*�H7�"���G/�WB��D,�v�1F�����B|��"���B�_�5yF���h���N����#�u�Z��]�ui�������Y��%����h�:
MC]�$����"lU����\������'>���#�����)��MYyq�����YQ_iQ;1��vxe�=����J��k���_5P�EJ�a��������������~�?������G�����@^�b���!S�=����tV�2��/ �%�i��_�i����B������c���2�S��TC���~�m0k��{����"��Vb��������w�#?&@��\2�����L*7J��Htv������SS��|�$E:k��>������;�"�[2$\$��hQ�#&o������76bi&�&E${��^)��\.��@���#�W������b�Up��[�~��u��J�;T�B	�����h�@2^�i>3��T���u�+����w:��$��j�����zW�(��	lN�r@���[����X��EXe�1��,��x�C�:����}0�a��0���{T�����}��1Ks�z<��C������ko'Gt
{�KDx���q�6	&�l�y�B�>��R��1��O]���f��{}��7u�D�.�_mE$���k+i�o��1��/����+��������X����~�&��6���)�$��aR Y_��6��!����:]m��hgVxZp|=�9���.qn�.#g�1�2t���8@�-�)��$i,�A?��1����{H}��\���G���0��?������S��|M��	�(�g��@�AIR���r�|�����R3��
A>)8&�Q(����;F�$����]R�<nm��!�X�����j\����#�v���a����#H��Rz�[�����uv��"4Q������������� �j=*���I��I7mg2����8o$�F�YX�o<c�J]���O!/>������w#`!3�_��/o
v�&�{�}�yVx���9xJa�p��
W�5(7r�|�~�?��c[�y �dj��fRFT;&���D��������y�.�n�[)���Cf�������7L����L�����)�����!���>�����H(~��J�?w��-
�+������g��X�r����gp��kzN�������ZR��e�Z�~����:y��n��L�H��\r����������|������x�5�����Th���$R�o��FI��3im(�JD�c���>�f)I���
�\��^%���Z����|��9[�jd�*�&Zm���W�^�iC=�:�-b�����f��`�+�[j��4i���j9���YK��ZK��HQ,$o��WA���)h�\#���� �L�O��[��x�O�w�@:,�b�������j��~���X���V����
�����������+�GZ!t���^�T��R�����^��:[4b�3��2��zg�i���9��fn"����W�yW)
a;O���0/�;���d�*�����y�5I���w�[�`_x�D�������n0e��4��t�N�%cF���j��6���
�\	���,�R�E�<-hv�����|��(cp��K���n	��Fb;k��o��&!O/t
(����L�<�R��$��~��Y�\�8�mR��
�Lq���|��O�{U����e�����7U�%o�B��������P��q���R6�E(�uhj�*�P��W��D�����b�F5
������i�1���^���$�&R����]�Xd$e��f����l�i�F�kl(��T�}���#D{��:WO�����xF�����ml���b+�����S;>��P$�/�r���l���2?q�D�5�����������L��z���i@ao�Y
>h����s�(������G���)���s�����_�,20���m��%��c���������|�e�z	�Q*�dZT��>U
������"�|}{'4�e����e�!�(8��W%p��`C���?	�5�~��~�M{������ ��^��'+��?�()����kx���s�*������Ia�	��^��P
�Q���K�P��@RD�o\��G,����W������
{�M��?��&,G�Cn��2"�i����?vv�^n��uN��w;�X*���*�vZ��Bob:x��E��m���*�1C���
7��I:����(�c|�K�L*��]���n4���?�� ��krs�8���@�d���J��d"$�:/A�p����	����cjZ(���������7�05�����M�b��,������L�?��X��A
���_��*���(���~��Y�����������sG��F�������Uz�
M3���(6u��6�X<VsE�����{-�����:���<?����
$��c�\Y:I��v�����A��C�9#^����0��:X<}��V��)&���G��+�O]!����mb0��k�6�������{'��G�������<�d:�[����:m�uu��3
bBM~I�O�����O��&C~���'d2B��vC�2�&�B�9�����W��ut�[k$���[�U#y����:�g8@A�����7U4�U�&�Pi�d��9_���#>"Y���a��q��1�N�%��K^����i���rA�����{'����I�/UO���NL��3���h��j���r3D^@����X����!B������d#���zA�h�gS[-�+�Xx��X.�]%P���.>�g�u�^Y��,���r]�H���l����I-���*��bS#�����(|:_��>F��x��J=v�C��;m�]��j��b���0*[a��<�@�b�B��������������2+��4��!mp�1>�Dp��J��)��Y��e�FzA�����/��x����w��G�'���O����9
���<Qf�G��.���}�Tk��q������Z���B�=�sh���l�H!�B	YN�B]%�>����{��p�����Yj�_�wc=�����C��[y�P�P��;�W�~��z���jrc%�� ez"S80�q���jF����AE���b1���2EmsUm�xbp
]|zz�$l�
�N�}!�@d����pm�!*�y�1��|\���(^[i�<������H�F(1�x����&�.�����JG�U�S���<�z�����k�#�=,�6�K��)6�v��r�
�%E�j�;�vPGE�����_���������|�1�F�{�"��?v��j@a�fDL>>�7�^��A�"���EQ���YSm�;�Y�����������p�b�|�u�����_l���<��!�f��`q��t<"�A���>E���`���9�5���:�.��f%S/���E����"���m����,�f����fA?fxm�	4r�b1�&�i�Pe�	��8E�8[aA��%�)��*�9w����������R�����������
J�'Je��}�!5::z�
�;�nq�����t������$��T����Q��I�����7����k�HB��%	��#T��F��O�@ w�~}91������//)�:�M��m�a"������c�=t�]L�wF%u�!t��I;�6� �a�e���-�o���Rns���-u�h���U6S����H�)�9�i�*-�O������-/��������hJ1���yb�]�J��u��B��`�/�
-h�=+,���IL������>���������0p��}:������u,�vJ�o1\\��(y�<�!<���w�1J��.o5��F�+��]������@�1!���X��%�������M��3\a������4�S���I��(+�d|x�/~Swoz&�K�\^P�J�a0��34�����7}��KJG�z�����|���R�g@3��?K�����H�A����;���YU�O:�����3��j`3��*��e��8
O\y�,^�-.	Ya�~Z/�b������l�'wc������`Nd��pU�)��#8������#8�~b�s��%�_|��k��E��������"^���/.�-��1�H�_��D��."�E"�#���s!�SXS���4q��\O;&�X[�h�U%Wj��v)�y�*�������#������C�R�Q��j8�!-�G��p�d�!YJ���c����/)���/I�B��Jp��$g����QR��a��������t�b���-Em�mC%n��Y�6������q�����Y1B�Yw�"!�K��s��|��#/(�s�������^n!��]�
�<�dSR�\k+���=�Qu�������35,���Ah�YX����'�������D��b����wMQ�b�3����~�%�_��^p~kM�i���xN,��#�{
L������	n
�
t����8�H�:�����Uf�����~���^co����z�|���G>��x��������#��z�������
���>}[N�s�b�z�"��`�o�T�[/�o�_��+��b.��y�"K��Q���@4|taKa~f����!�1��I�DV���I��2��
����6�O�G���I�[��K�
AL�*t�\�u�����br����&-��W�����o�%����KVw��\��B���p�X�Xv�}�Pj�3�����O�������m+�X�����qFv�9.5�#y�"nS�������AM��>[��NG��&~VD�i����);�;�����r�Re�21�����C��P��"�*.7�:p	�n���;} ��G=���p�$�+��i6x��X����4O4'tqp����>*:�'��q��+�$ ��T�.����1M�A:�������y�GF�p�3����t�^�s�+�Nu�R�s���6q|�U��"gr��X�'�E�7��������N�7���b	'���\����2���t|s ��mart>{��MB��� Wy�+�eW��v�6������k�{h]"�ZC#����!YQ-B��S8y����#a��y,�Iy�P`��}�����x��\��Si�����	,bm���{|% �K�~��+6��G�_�y�CO"���-�x��%�o,?e;�Y$i����&�>�''V�K��0�U�F~Y�����g�����I-B���`U���������*/��'�^bZ��"�JF0�;��4e����X����}����������^z���:�����S'�����8;M��������*��9o"���B��
�kM���M�Mjne���x����Upo�:����<��]����G��������
y=����$2��wh+S��e_8U�#�g _��*����5,���kJ����`�}���R����ra�|_Ffi���I���|��)p^������|�u�=��rx=���%�������-*�J�+��������g.��U�����(s���P����#��t}���B�r���f��}u�2lS�QC��Vy����(���
��m�HP�*���2�5/���{"	b���+Sw�������?�oG���ZyZY
����� 1��eG
�Ia���������mf�b����w��M��&[���Q|���������x� ,�e�V�
bcL��$.��Z?�<������Yp����X��XD��|f��!�:�q�{)y��T�'^���W���'��T}���^��p����?���\	#�f8i�[���+�l\8��s�F;9f�
�?� ������nhN��/���� �<L��<���b}>	���'���J�?�)���������e�:
�V�MT��������5A{�L�)�pB}�%,oZ��s�����+��Q�|=D�qioy�B�T[9V�DT��<��Q��B�����x����/�g����Rxs�"2��P�R���<Xv4V_�{�W~�{-�����/+e��'�'d'f?$����;�pw���MC��7[���C�66�U�?�^��
y�w��)�CBDS7�#eS�S_���0L U:V�^���q�/8M��HOq�N�3���ZC)�5�-gt"W��7T�g��eme����>�_�kE�X�:2���|x�y��4~���F����4��P����-q���L��;�����!��(�S�nRr
���L�5	|8P��jh�	�A�J���oiy�+�
����!�]07��t|;�9m�P��Z,_G3d4A����G-���Cb3�d����2����� k�#!!��
SdQ6����9-.E���]����Z;��������/>�.9-�bq�_~^�����:���#<m���$c�����-�Guu<t
�����%���H_���_a`��H9��gX����<
u��s8�6�L��FdB[�Z����3z�3��<�p�XXQ���U_��q�d��J�Z�B��y���s��'���6��d<�0x�3t{I�2~t�������!-^T3PZ���4l���y�tv`���D�5��SYntO���K]�����X����GOd��~��F��<�K��V@+��t��U��c�~�L�k0Z���o;i�f��(����.n����I��^��b���B0�G��(����M�&\|���wSD�<�����7����a��/�v����A>�Y�������x^����
_��'M��������w���c%��(���r.Y�${�[*���-���*����%�*9��������F|��E�7o2�+C1l������Q1����
�����N�6(�2I��*)f�(\C��6�!+��������[��h+�q���:_�o��Nlv��:i|��o��,
������"��=v��#�$��N��3B5vN�6�<m�=�>b|�f�=�8%"����3��*��#���y��]���"�u�vT���K�Od�|P��
�C->
�b�*S���N���%�
 ��A-����D�I�yb\����
�(}�q!��*�fr�9�%�}L��|S�I���4\�
�����j'����U�~��t4��<����PZ���s���E�?(���=Xuj���:5�A��%C��c��J4RI�N��82�_L1�.a�P�#[By��Y���q���)�#hx"�p��1�UA}���l�a���<c��=HT
L2&eR��}�+��Tv�����us��^��KR�%��WQ��:]
t�h��\%��zL3��������
E�5p/a��nr�"2����}�6r>��sL�zF2��
�'S��w�D�p�X�����@e+��'])����V�g�������� {���(_�&��|���;��{�g��(����?���GS�������r�Q�!j$�/l!ew�������~?���YOsq���u���\�=BI�������q�e�J��]qm�������|WF��T��y_}����:���v�K����n�F��UU�������p���W:Y(\R!lq���O�u��S~���o��F�tk��6�L��I���12��85lm�>\@
_�9�`�7y�����n�o�|�&/B�g���/'E��[s�"g@��f�g.�����L�x
lpaVXZ-<���u�}vt��>���&"x�V�"Wk�b����	*�e�D��3]�mw[�����A��M��eq�����/��-eqs4cV����S���>QiA�-���p����f�Q�n����+EB����&��oRX�����r�����`N$hP&a{:MoA�� :I�|�p�
Kd��x��n��t��!�2L���>�/2�{�c�
���8�p(s�����Lg����)��e�\�����5�\
�&.O]&����]��	�`���h���o�<������(��;D��W:m;RU:������2*
��n��
���� X������Kh��&J���B���OOp�"C��S�5��O1fM�S@AsD�N'���zC��0�4�$�&���@��b���7G'�++7��g�:�zD+��z� �
��N`�����~��]����C5�+g���$��K�61�Y6��}��E���g��6�(�!c�M�7���t�!��r�8�;����V��N�K>���f08����p�l���9�O;����"��B�H�H���Z&C��{�R�f�D^�~��!t�#�W�L��$��_���=It��P��ocPO�l1"����t�,#N���I�j�OX&�s��=k�T��`�����S�r�9��&���`S]�����|���S��h���;�:��Z2���o��%j.�y�\!?����2���b�M�Zc�%��]�M8	������Sr�b"3e,�/�u�EN����#�'�9�Y�|0�������@Qg����0���O�I�Q�g�EQ���?��\���������8d�(����SP�"g�w1�%��=b
R@2���)�X�"�{��1�{���N�����Dp��j���< ����Y� ������|=HE6�f��m�N���Z>���7�����z�1q[���e���.Z��*��\��r0��
�j�2�#��������`���"w�����y�8YNT����Y��N����i��\q��RY�8*�����FF�Jg3�!�4N���)E�p��dCPbH�G�J:�q���e�rHB�`s�k� ��bNrI�m���T�'u`���=3D���Rjo}���T(��4m��Co��lP������"am������B�.O"y��2a[p�������}R�����{@O��s������}�;�eaR�� 8?R�Cd��Tw/\n��u���s5���'��8�J���#���G�����bf�.�r���_t,���"d
��OJ=z����G���6f���_��c��u��%dk"zq�>G�<��d��\����QE�$.�*�����^�3�@���X�����Mju�~�PU��������Ch��Vb������I�1��n	9��-�N�$e�7�A���#e���+�$�����R�?���8��/��T��o%g�;4��):	�����%2�FMq��A��E�������w���$�V��V{��/����6�B�T��M�L�l��C./�j�+��6S���Hm����BGU��������y�]��6�s{[�PM!*9���4����:D�#Q��'�{�2�i�*w�e�e����^�a�[�X�Y�@g�AiB��Vd|�m|�2' ;��������6qHRB�7
���g2���oEn(����m�'	��[�2(>�n���b�@7��6����f����a��9<�M��O�h�e�1L6
R$������9v��7�/�~�?����4�����`������������Gj��0���:p1B1w0�]�8��$��H%��~~����YqG�Q�p���id��_�����k[9����9��wt~�#y�r{�`o�bl���)�3��M�+�t�������������9��;zW�L<��E��{���`"v����H4��<���o�A2��G�dn%��!X �.��f�I2��w��t���^/h�'���	k)�%��oJ���M��p:��%��\����l8������4���������s �8Dzr�h|���aWY�3���������;��W_�J��3n'g������#kR�&�Q>V���4��u[���I'��B����}�eF����j}�t�9Su �����(���/���HT0���x��f�8QC��EFn�����Pn�6��	����N1U�G��]�G�~��W�2�G�j��������G�#�����)H���������5#���w2P�	�9qv������lJ���m>��
/�S�5G�����'�+
2�s��7�2���C�@9��3.�� ����6��u�PP 5�_�P]���AsF�E-P�'��!:~�I���\�p��RE�l���m`�S1����7��f�;�����t����pp����9BiQQ/�;'��%N����FMA�i&'{���{?6��������D�%�l'���:�\��h*����K�5�!S�.��,EZ P�����6������R��C��J����r�K��	v�!����a��"����Ct����O�@t�hI�<��,����C��2�}�*y�����2���������4�8:�3�f)*Sm�`~���Gs9�������%q���6��H
7�UA�;&J1�Y�����<���Tk*8;ZX8�8��|���+�g kO��FP"gM��!������xU����S�Sl	��#�H����:&���3RP��K��H����3	t\������N|�H�d>��2�3��r���$!P�N�Zjx8?�?�?��}�RN���M^�}d�x��r=�p6
���(��=�0($��#�����%�]/(�s�h-:Wh1�:P)��)�}�z��R*`�Sh�������+
��2d�E:��)���Bc��>�#8�F6��R��im�G&ZrVX����m0����US}�,�G����8\�a����e.$�&�\�SS�4�g�k� ����z;:��
��=r�f�x4%�R�p=�}�,m�� k�n�j
�];���D�C8��u<�qGF��P�T0yCgD�tL��8��I*s�{�kxM7�>�
�gEQ"Fe
�C����Rc0W�)]�%ry���O��������0����fR$Q�	�b�!l����r���T�,%/2�-�G����4-�\��Q��)Dc9D�����(�;T��d�5~a����z��G��pIVL�S�4(L�v��i7����Cw=�.�u nX3@E<=&�a�cQL�&��+"K�*J��mR6F�\3��#����Ni����3�������[h�z�7�F&e��b��9$������2@Q�O|�z��f��aF]���,ff���t�K�.����K������� �8y<DL
�S10����Kj���d4��>��;1��)�n,u�v�-BZ�����{xo9g��d�����y��R9M�r���SR%�0���f�;*��TJDjE���u|M��h��0��z����*�0
l�H7U�5�Nw�E�������A����.�&,���j^�����T���N�,�<��!�� �!z���z�g^����Y�-h!B��[!f1����7��b1�����b�p�"60���?��'W�pL����}��(���u@�}/���?�s
s�ph����]Y��;���m��+M�E����iCK���E�Q�x��{�lq���m����:���-���R���MB��F�XBM4���).���U#b�&���.g�\(��~S��N��Z�@����N6�������+�g�2��������(��H�"2fc�xn`��L��=�j��
��G�����ecv�"h���������d���S��K���g�P���J���d�#��&{�^y2tY�(W��}�_�5�i�����A^�^���M,d�Y�e"�V�q{�p�9x�[��H
�{�;��T�k���AJ���o���.����2M��M��="���PV�m���(�L�!����&��T��)��!����u�R�Y�@���{������El���Xi����Az�MCE�����Q���p^�=�-��u=�h����bFt��sN�,h`l�CX��^="���)3�VK�dt�|6~�v������Oz(�Sgs�oN��S�Cu�Hi��p�t�pa��F�*���J|�=`GT>�����ah��OK���C9O~���I��t�T�\��%#��Q���N@�����'��w�3yK�/N��cKx��&�ey�������P�����Iw[��@��X�y�I0s�-8}����VI�*���8�B��A�_���h�ES�Dz#)\���
�����g�~� �	�P�r��������\��$���������;��t�M5y&���TU}h�[��l���+X-'��p�08�`PUr�p��0VWDM�A#
��3���A�\
�n��oA�-�:�k�(�T�cl"������L4���z�v/���pB���u�S\����_<?���f{�e#�e;�������9>��Ag���i���r#���������������cjT���$����t.u�
[����M�;n1t�v��R{��B����.�I�z����s9�H�!�B6�&�m���$%�b{��z�a$�
��/��G�5~����Q��r��hI��	�����C�<�	Q���H�[�gn0������>m4��~mt^o��9 ����j�A�o���*)*��H����{s
���j�\�����
�sJ�@�������u�'���'���"�a��N��N6����:=���5�8�g
n�`FQ|��>�g�U&>~��~���ea_��(%�{�`(��l9$��`�� �G�D�\����\�'�yX��|�\�]�c#)#�g��eF�Vr���faO�-2C������b7e!!�7����Q�g����d����p:� ���u��U6B�wrid=R�]8y�z�s�e�)��/������������oqp&$�H�!���ts��"���`�,syj�O�N��&��J�BOY�v\I�4}��6��N������Q��*�P���d�f��c�Jf=Y��].�N�l�m����v�f$�
�(M�]�S�r�l���lhn6���������9������G�q��Kli�#�"_w��N.���8�_���y�A���|E���m:lR�"Z�]�t��"	��j>�H��d
��K�6
j|�uj8�
<�w.��J��9�ZD�P�l���*�a�7S~i���3p|�������-���/f��G���w�VZR�����v�y��>|�[�w�b~�&g��4�w4Z�����f�!�)���U�5W����B'�K�����'�c�f�e��cx}~p�����Y������������l�����p�+Q����ze64��p�D��]j��p3?���n�v��X�������f�T�S��7j�����P�����R%9v��1R��>������I�r�Jx�~�h=y��8L>��I�c�n���#0N�\��Uz�a����.��}~z��qEQ�(i7"����� �m��OdH��J����+���u���X/so��e��>�z4���b���l������5�m���=�cz����e���|�:���m�|�e�H4����c�>$���5����c��z�>��}��%���l���:XyC�~0q5]�r�f�2�e�a�#5'Df.K��M���w�]���`�.�CN�u��w�z��5����?[5�*�A
�`���^�3W�As&�f�^��'�J���`����C�'sa+(s��_P���������P����y����v]��7��3�l�;90a���O��):`b  �(H��6���.��zt���V��:�@[�G��~�G���3L2
��.���e�}tN����O�������#�������&$�l�}��F���6zx��O��2���\�0��AZxv9y,��R4
5l4w��P��V��`���3���P��1>P4
���2�m�E#y�.IBi)��UL'�Vh"�46�
�E���t:�m���N�Yh+��$�	6{.�@XvQ�1R1!L@��hw���V�_������h��q�D\Tb�1������h6���}�&D�j�9@!�MG�I��gK|���/3��%J�@!F�tr;K�zg�S���85WT	�{(����m��.���/�N��#�Y��y6�=����z�,������w���H���_�TqI-({�w�T���>����K�k��DQ��6�����G�|���R��>L���qm����L�@pN���������/���������J��n��N�dV����uj�Gy��!��U�]���6���P���D��&��A�����i3�-�Rm}�L\�����}X��+�;���+��R�!�P�`�d�����z��.��R">G�o�O���aGH _���&�Jv�.�a4#U������A}�O����V���lB%oN��s�;�l<M����D��(��N��I���3���hz'�m���$���_l���(�}pp�S����?:<�L��`��2��G�_�qq�:rPO2��y�Y}��2#7���p���/��������������I1h���t�D}2�r�\��
������3Z��<*�����{'{X�;�&���W���du����6
���"6z�Q���-=r~����|�Q�����8�!a�z���&B��W)��NE���*1�{mV���Q���gf|�*om��66*���KN��|��b�� ���q!8���Y���4C�����z�=}J�x,*�s:R�B��(����F�"
�N�����GYw%������W�|����u���?�,�St�W����~/g!7�%w�B�������w�p/���;Q���B�=[�nd��C���}����P���Y`B��\f���1�z�<c�Lk:�$C��U�f.'���P�X�����>�tu:S�,����z�0�������LI�#,�^���dw�e���9����b�s��'����� �Y{���O�N:����:���������+j�����������������;���������r�w�W������4#�W6�{�����:o�w��_Y�r��,{7�o���_�.���]2��|Q#���J��h:�����wN�P)u�^��+�`�JLu�`�0B����G���9L����v��xX���2����[��+@���H�\�E�6|1�>E��HI������J����l!r2�#�7&�Z���Er"�d@��2�� 9%o�U��V�6SL+�&��������4�{"a�M���1�;�����X�69����
��@�0zO��kl:��CF�!"���g��7%�G\NSA�KG[P��U�!�c���W\	
����|#�Cm%5�H4��^Pp�y4|�Q\���ib������;�
�x�Q��7��O���bL^J��`�#�#!�%''���D7Qy2�H�\CI��q<����&nJ�Fg|N	��?s�d*���y<��n&���n��[L.}:As1h,�lp�6��Va��CE��H���E������2W�4q���,�YP���<N���Z9D��v�!�z9_�~k~Qhe����Q)�
q�+���?&������W�)0|/�A�B�y�����?�;��;�{��tp�������'�;;�w��2&���}��"o����=�9�?>������
���/�~D���_�W{;�u�r~�zm�����������7��$����Hk�F2�x�m��b�nv00��{n���$���B��$cv����xefd=$a�{v�N�=cT���������_�FU�1RH��^�Xk&yx��.`}w�����bZ�������~��4(�%X)���D���}y4�Cy	)K(��h��%A�T��u�5����}f�(3���e���",�lgX~R<�`8�+5�zB2�V?���V�������Uxf/77�kVC����uE��uyQ�����n�J����4P��Nvv����i:s�Lx2X����U���Y�>�h�*_�Y���FA6J����h�w'���A/X��>�y�{���p����MRA�2W�H��]{U�YsS��i�Y/~w;��GO{O��?������g7�v7���GOD��%�\i�+��Ya�����W,�����vOw�~8�y������
����o�=�����Y��uk\�:�����{�O?�t�Q��;O<}������T+W��}$�������+z�%�'nF��LTjr�K��l���ARm2PV�����F�{��2��`F;J�"F�/c����}��X08����O!���ho��#I���~�~������(���<| K�p(�+c�i�0�z�t<y��(~�����O�>|������G���������2�<�9�N	�8�@������C�������r�s�_g�G�,O��y�|���Q�
**Th��'��g��L����?�Q��%���z:�-���Hs��;M�&����@%#t�i'��8s�������U��tD�>2��5"�� {^X��K���� 8I��,�Z
K
������[A9yao�>�oU:v�G��� .�Z�����~�[`a�-J��M�}���9��f�h"��
i�������0�#���]���{�H�)x� dG��2�'��������-�6���N{����*T!�aI����I~��=�-����T|���aI�m�!��8-Al�Y#��J����d�
E�����@4����X����x�����*D�E���(���%���&��������x�4��9��c��-G3x��*�&wxI�Fs����Ih#�?�QP�R�@�U��]�����Y��Rs���y^`��>�a�U
O`�"���_��TQHQ"'����a�����D\��|�\��bB]�}�RX��d�E|�rb+���H."W�D�
��E�~�lP9U����:@�XIf��]��)��z����>�-�6��C�s�����#0�)�@��p&��������o���.�?o>�%(����~R��/��_P�L��a�7�t��B_��W��\����V�mT/����HT���A��=�/����h�(R6����]�V�PA�a�?�&O[�����i�j|1�U:���$�v�c�����}X�+�2t}8alV��I3����>!�����������m[|��,��4�Ps�]��W�g��a���&��wN��������a�����9K1-o�Q�@�]������Ruk�N'&F�4(.Zyj*�R�I�+�',���Z��N�k�63���gO^)����G����7�����l�y�5�."FU���U����;������7�vKq=���9$�u#@�o;W]l3�"l7wnM;�n�|2{CIpr|R'G��tl:����w��s����m;�)(5�S09�Sa�T���;���������t�	�����!�`��l�(��	�d4j�����b�UJ�""EG�<����"N��X�
�5������������E�vz�����>!"U�2$�.N������/�����:��U�.�����}�x����B�����]F�y�R�8'�����I����g��"�/M�F�����)�Rk Al�`=t���)�m��-c��ec�}��V�([0�� ����a�Nx��B������/\�X������C�	E����
��0�Q�.Q�(��A�����g��)�"�;]+���g����I�=����hp�y�2��R*��}�YQ4>����)�������
_;��-����O������I�!_p��N�����4�����o�Y!(�"L��)G�0�|bc������9��Ti���"@z�<hY^3���p,R���vuVV�rB-��-YM��\8p�!e���q��� H���=���u<�?��~��Ohu<~������>3�y6�yF����}f"���d@��P]�[�w.���Oc�@
�n2�G����c�q��h�
��w������d}4��%�c\�9�Z����L.������zW�z���-7Z�h��bS @�Ze���NN��_�v��O^�;����u��}\��`��j�_B�n K8��3�l8:s����=>��o�����Qz����}:��*�|��NHh����\y��|h�ylx�N�3�5�p�.����K}{g8����@�	�j6���:l3�[:9"�K�0w�de/�&v��m�7�6��9m�	�rA��R������u�o��n�`jU�a.�xi���XO8���Q�u�zv!f��@�a
��eU�%a�cg���Q�K�Fc����j�f���H����x.�R+�-��3u%��l7����z�$#�+uzFD�������*�P��~�V)%l�����������1s�l������_N����9W7�j/��k��z]��bg�}G��8U��H7�[o.�;�8e�����`�����n�����9��V��1���M-��
�?_��'x��m��@��@-�
�������B*���;s������*�U�PY}K�����x���Af��������~��E
����+�;�{�=�r�e[i�����y.�]6%���w?��nV����rk��]u�V�'e�3	93���TZVh��U���r�I��rLP:�����y�~y�v�/��u$��2F ��8�Y��G��}�X<�%l�b����}q+���Z�f�<�a��j��s-c(��2b��r���%�����>bAl����l'/UQK�,���<��D�x7���P�`������"��1{6�8��Q�+��8G�R2%"����,��t�;���f���k���k:��luH+��
I��&�MGj3�S��/�
X�hzEmo�1�
6��C��(J���s�"����}������gP�4�y�Z��6����U�/�x��+�P&�Uk��R�Y�����x��R�*��`��F6C��y�l���d�l9���A�<��������V��9�[lpa�p���"�&�����������P)�;��<���Q��.xV[y���q.�0�����|�.��o���G�x����8���@}r�w�9ni�1d���0�cU�o�K&�����U��)�����^���muf����0���?�����:�+��AUI[R3�mN��#�8��&{M�P>��'�(�=�F�7)�������>Q�0�/P��
��r�E����:7/����BDGA��Hf]�>8���� ���-�R��U�83���H+��������]�-��\�v����M�^��~B������!2���`X�n���.����4p00���*�n�,��#���u
G��)*-v������$����6�e
.�g�u��m���^3�.�n���;��hP[QP�~!������w�S��T�.�K&�7��/c1<����	��{/�,���RDa�J�)Z�K=7�p,�/���������q�sk,�\c	+aH��3l���A%,����_��-��o�2��Cp-���qK&��#����Ckq.HY|���PHh!�6`-��i]����~a��/�7,��Z�5(�R�[b��Z~�j����
>�j4�[^�����"�D���-k|����h@�@J��	��n�pF1@�R������`�2�V`������ Ib$���uW�7+~�+J���-{l0��-5�/����N���8B���yq��E�eS�H�>%�B9Zj���@U|�7��/�s}9�����1$�eF$`���[n5$��W�-�����69���5�����A�i����QtWFo�84!5g��5�VyI^1y�=PM]��>=���5�\��[�"������������������4M1�(i��C%��a��`m�K�"�B3H7(wq��(iM-7��D���6�[����\��Wn��X��m�����~��t�jS�?-=�[,&��u���R��
�������%@4���s�V9hJ�����W�%]�R�N��.v|��j^����{��<
��0��.���'��2�\�J�����:�!S��x|g��{���Jt�p�z-J2Q������H�	�+��+������{X��V���^�(�{�P
cZ�\,��n[��`�	%i�hl��Ru
������K|���[�������Hn�����x1?�{���j�=��^��#�����M���47;Ju\�f�����4��
�T�����9���;��
x��C���1{.[��bc�������%!����^�}��yB(&�������6p�,|0O�`z�E�����5:h�	 ����K���'�W�fy������E��q�Y@���W����Ym�%�V�E%����4����s�$���r�Y�vBL�y�����h���"��r��d������b0���4h{���?�%cG�k�4�w�8�1+�#G����o".&�!�#+�j�2�c*������.@W�
���q�
����i;��>������>�(�n���Q~n�?4qL�<&)D�!!�e���������n������Z�y��v���S������d{���AA�nRi�&�)������_.��]�eF��������h��cEU�N1�}�q+��� ��"C
��3^
��������u�2�����%���+ ^U-2����x��AfK�K�
�%���~Q���G8f�S�[�{�G�]�F�\c#�I�����iu��2�T;�����GnW���������������?�B��f��gc����>dC� F����t������U{n���8�����:�r�O�q�����U���C���������W�6�&K<��L�1��!�'a�a�Y8�]��nZ��������[���@�3�k��kY��9FE���o��7����i(�R���$c*7��������!�l���@�u��M��<sY0g0=���b6��T:2Y����yVp�Q6]::�������F]sde����t�]v���o�����nM���Wg_C��Y\�tx�����b��D�Y��938��B?�v�C������pap5y/<x���^pX��3l
��������5~Nq������?n����3f��"�q���8M����(�}|~1�FJ�K�R��@$�'n��%�Hv^��?�\�,��"&m����Z�a>$�D]���R�|���y�������i�n\�����_��������:�������]Q��n����'!��e�qkz7�T�0��h���P�t�9a>QH��ix6�o���>u8�U��li��A�!?�������X�(�A7�g�U�c������/[:q�s��y��
:�����o}�5��P)�	��L��t���f�
G�Q��t�o��ot������3�|�.��U5~Z7��'X��)�f�}�lW<?��E8��V��8,�]�o��&�>!L��d3	"4�`%Z�����f��X���e�c�AA������x��[xU$��t�A8�jS&����0C<�)&���LPO�"�B��2�X24�������nU�}4���t��P�9YFh���=��dln��ko�����Fro��%
��~���.�o��
ZD�B5������C4�$���~B����t���
c���=���_��.�kaX���JqW�x�`$�TLT>���~�
��J��&-�:�M�kC=�,J]�Y�l ������%���Hn
�/|�]8�-��x��Y�(���5�
t����j�q��Q�:��o���x�����������	<(�Az��oX�o,�{�2���<�*�P�NUJ�Rs��t��u����9��y������;G{�~���J��B����Bd�����������5��e����k@�Q6�:�W�6.�
�8j@����&�e(��M����S���&�
��!��a*�0��c�'�<
#v�BM��>Pm,�w�+�	�,|�Pr��lp�_�e��,n[�Y�:�|�O�$���I|��n&rO0�:��y�\n�n��=��-�k~�V�V��.e0�?�$f�Je\a���
x�gu@�%YEm��c������K;������?~��6��F��]c�5����l��.C{�&����N>��#���(�;2�
/��f~��.X��0����US����llgS��������@%W�F������0_�K��J_�o��DjR�����������Ck_�:�x[-���%�S�%y!��X+���@M�S����B�b�zA[�[�E�cg�}G���~���~����O����?���-��h�yU&�|�d��D@�:�����D`�l�2a��{=�
� i�%;�O�z+�v��}g{eO���|�A����'���m���ZzdD��~�<�j��R��C����>�	z2"|�TO�.xi�?���!�y������f^�g�j�{[�&���(���
��Jt�u��/|��w���@��b�h�]���T:Z	o������%HY���L���������	�R0JM�H`��:W�@����h�%�Q��{�C��N���
�S+���0��x�\Q����� ������z<�N;q�k��CL��L~��;�+��GU�Y#��4�:��Jm����q���x���tP����h�'��u��?wp"� ��C�T�`LUO��d8�\*"���M�tI�	��T�@BI�`S�A�	G0tJ��u]���}5>������{9>�Q��qM�@R��9�����'t�
n�nL/�t����N.�W�8����������?�^uk"�*x�\c��g�k������o#8����������H*r�QM���E�.�!���a�/4���D���j���R��A��7$�26x�Y��+��e���,���6��pJHvW��6��L��^�8�>'�W�X�i��}B�M(��{hL"}����=��aP��J��[��/��o:���i"JQY��I�OO���J��7.�vU�=�])��p�����K��URb����<��`��k��`�"]�e�z�y{T	����m6�+���q4$	�A�o6��8�m�6��^D�"��ya�]�x7$$���:�;�*D�?�"�A^���S�FL�>�
� a���A�J3a��H�A�yoE��a��.�I0�^�C������DW'J�Tf�
����>��,���D�n�'
!�t�v~�'p�����Z�'������.�"�
'A��j�n�n���j�����
���s�_"��`���z A�y��D/�nD�y�]�]���+�ctAQa�c�������f�c�r�������Pbz�"�b���������T�W;E�i?ty��a"�M�erVd�@Vq�F,~��	��,�2���ecl�g/:��@���>3p����0P�G���:�%��]�(3�:DO'�������&7P���[��[�B��p�����5�J�g�N���;aCLS6���yU��j���A��Il�\���������W\s�|��������i�F��[)$��bk�|����Q��m
d;,�z��z��w���s�
9K��n/)�5�<�@���'.��-�
rv �LQ-}7���N~Mz���d1@Aj(k7����3��&bh�{��X
-5
�HrX\���T��	i�^��W�����Nk���B,���ykI|�8f���{�,hX*�MAx�bS� ����{�2rK0�����l��z���������?Y#��/�e��.@����s�oz�����s�,:B�HI"<40Yx�	o�V
�%�#t��=>1�$_�n������7h%S=�E����S0�$�?
�+�`��zG�*;�*�Y��S�I�*u���2r�2�t����\57^~�o�����r�/��-R��$WC���������E�6�����;��j��2��4�ywC������KBG�F�k�%�����,�:��+�'��!�{L�C�����E�`�O ��.������o��6������7l=��Vj9�C�O	�Q�q�"��G�$��\k��0;	L��3!�bc\�,�/:���#b�N�����c��E�5T�_rK�]u�y������:����Z�\76�\���}�
�}<���&�J/��t
C����,n��*��(=2�.����X�f �YI]@�b��"��h[�|�����Q������r���Cs�UH����w=�?��M&EG�L�b{���QJ
��n
�G����x��nWF�
�^�!���
��++�*�R���~����r��n$�Pil�O��9M�p*�-g�E�5��"�������t�!�)j_���h�o�K�XE96}	dE�������8��C�Jw$��1n*K�R$����L���9�#�?�r�9��}�m��o�u��j%��l�-[��lv�t*�2#�_������g-rT���SJ`�z�J���' �F��i]T��4����6����k�Mz8������
��H�c�����y5���6�	ZJ�����S
h�E��#���\���.)���kf�o�!_�*G�K�n#���zd���7��tk+u	_��5IO��oPM����K�������XUk^�
`ol�N���?��<]j;�);�"
�#��(�:I�.O����!�p��D����%u <m$���$��j�IG`(��v:��.�p���J�9T7�	��������!(�M�\ ����� �0:p1l2�8�/���a}��Q+�X�������M�<(����;g���������	gk��eb��%�
��	�P1_p�Y�����DJLzY�����K4Z�(�P(u��
�HN+�"[[�A�������(m4lFBg�T�o�����~�^�\�qW[#�W��.gw:�~���w/m���>f8���,�x�����3N'Mb���_�;on>����v9oJ��X�����;k�d�E�xffT��@������>i�=�!,g2I�>���7������I��Vh�'�[��L	��������H|h3��z���.`��S"�h,8U�1�h('��=�S���g�osj�U�q_�����$�j:������$"IOL#������x����m����S�f��*4*�P���xc+)��i�7�"�^����N�@��	�"�������rC�Sr�!��
����&AT�@a��������5d.6���M�mcoZ\9�%(M*w7*��8j���_:���Ik~0�����d*���"2�Of?E���\������[^v���������m��)�J��X����/YIz{p����$>����Zha�?;�?�VF<|��m��m��(�����9Y�����yH�3�_�*5��B���w},�p��-�g�N:�����������������UkM���t)���g�8���Xv��M��]1����d~���%���m�Z�^a���'O�����l�4�fmr5R���I?�5���	�_��?�w��P}��B�>[��j����wwO�<z�Vl��{�-t���k�5c�>�/�K�5���{_�!����1����W/fKp��~O������Lc�#V'B��u���y�b6���x`6��^bY-N��~_���+���s`���B��Y�4��si�:��$~�u����	���{8H&3�c&��
��F��(��<����Z�GP�����<^��O�u?i���D��]s a@z�1F�����s���J�y%���/��?��`x�W����_�*%�������"O,I��p�ux��=���z[��n��e<!�{+�%���S�
~fz�T��AX�m��8%���1�OgB�x���u����1D���D�4����*�^<x9���!}�%c#���
�%���qW��Q�v�j1dS�o6�+r���w��I��7pv��.'�0Cu�S4�����Ow�d�U�R7�8-�ca,��+�V*~6�,7P(�~��]S��g�6�mZ#�P~��AI�?*(!G�]�A��oyQ�7 o�	�v�VpG��9�o����=*~�G�+wU)<�i����N<���,7��,J'�[}�o�������x��9'@���X����/��
��;�`5�j����v#�vzY�T�3�������Y)�-���(��:�[���u@+����!�2�r��a������m�LS����P��cS8d��
��+bx�AI$��&H�EI�i���"�K�����Wl�����h��G�i'���-#��H�;,��l�T�����A�����*WF�Q��CD�).������_���9�%m1�K�3S�������s*nKf�aq{]4d��Y���8����v�%�g�*Z���~4���E�������������l����
0>/�
��rUG �S6/�?Mt�����������+�b#����+,���Vj�����b@��g�6U+�"�`T��!�����KE���|Z�[ntQ�'����~e������%��j���Q�w�i��`8��I�7�W�H{�����2������I���@�\�)���)�G��@:��5q�UmK��H,���-v�2D�`�*����A����1mY|���S�'�T�s�,�+k�l�<�/��4�N��y���G�P�:�O����G����H��N�T��~�v��>�h"�����N�!&����[r�-��Au��G�1m��\�c<��#1�����4a�kVn�WV�?��c9��AS�-������^����w'  �q(�m�����4�KX���W��������nVd,+�'�q���y�fG���l
��w���l��������l��N����
� T%���%��-�-?[_�w{I�Is~l����-�{(�����oIGn�>�--1+����tj�B�����^���c�?n�(��1o�tK��%��������,~)�Sl�dZ��Uw����#�B9A6�������B��_�m��r�"��LJ���8nX����S\Z+�������"������;o��M�F<�����?����1�����O��6�W�����L��i����<��9O��4�a8�Y�����v\i�%�3`�K�\+*/��c�����65�2$��*��A|��b��2x�\��_;CH��6�+���k:��CK�Kh2�zJ�.(�!t�3|
����?���������#L2���E�l9ul'�g�>�:F������y�1O�u���'\�H}�y��������c(������7~??d��`�"e2%��Dp���.7���I����D��9����h/Ia/��7J�/��_���T��.r��!LH@~���d
F�p�]��DFh������eA��A��#����K�o�x�W �������}�.�$���#muJ�3\����%�)�n��|
�����1�����Q2�6����(V�*�Te=%�T�
��%�4���mJ��XG�$����o��Q,DG��80sMR�-�0=��{�?�D�	����N76��!�*+"�
���h2�o�n:2���oT���d����&2w��������1��pH+7�^?�%����3����!��*M���Zu�����6���t
~cL�7��w���~���_�H0v�0B�0!?��k�'��_�X%��������������i��~�b]v��E�5�<}(�Gr%kI��l��9����eA�}���X��E"�}[n��|��>=:�z��<AldJM4
�q,
�N��O��Go{5�
w��lIE�<�	a3�1�(�DJ����T3p��(a���#Q)��4@����$�:��F=�n�P�u�H�jr{�o_�Q���s[��,.�&�JE�z��U5�SK=�}��]���,��6���/�z��^�+���:A`N�;m_������������z�r<$~v6��������7^a�0���R Y�N��zWF�����������n���DK*��ph�������mm6$����mt�N,������:R1f�[Ql�kE`�;��8X+�h/�3[f�lb�9dc���0W�^����C����M�����i���hd�X5+�z��L|���0~���sz�w��I[m�1�*}>Q#��I(����y�R��F��6��
y�6���r������|�^x�gfO�������.Yp���F�P�����L���(�2���>���g�^b���N��vK����T��X}i�J|��v��E����+]���B��������G���@Mi��.Z���N."6s��$���Zd������Z�����F+q@
�7Q$���/��,��h�����L�-I�hj�o��S�+��O�s��W��jW[X��e��@0�&�]���I�W�B�6���.qA��T�t������%`~�l~<8BdQ[���N���Ye��nl8p�A�p���qc���{�	�����r"������Z�$��}��=er����A>V���p<���20vd�b�_#�������gh�^��y+I-I9��G�:m"���������X)n�)&F�#��d������C�������*�1���'�Q��VkA:]!��-�C��J�9	�!C��O�H��~���.o����U�x���!0��eh2����>*�,l��{��LS
=�����|��o%>���n;�m����86Pt��W��}D��R�D���0">��W��k��������]�����?�^�M
�
(���W�1��gJ�����U���h(����q"s���<�qQg1���Y�5;�����ml�.Kg��������NU�����."��/�X���m��G��2�{=���{���/b�U�?y����/���v�����SJ(��Z��}]�'����Yk�5�����)�$�M���I��=�;aT��m���Ni�(����^�3����j�����`�/�����WRD���)�<�j��->d.fT��9�|`���[B|g���:�u^;Sf�3K�:}rI�!�C�%U�J��XU��������9��Sy�"T"�]7����6��Qh��F�L�����<�&���5���
���XPR2~nB���y�,�>�9�z��r��5�l���1}
��y��|E�aR���#��L���<�%-��C{�2�
�a�X�&_8�c�g��,���`w��a4�	�+���d�%Q{o}QC���a��/J*�U��U3��8�:������ d�MU>�;8;?8�?���W��@��-o`�)���3I���>{k;��f@����7�G�E�;���4#����,�x�����cS�:���.�9Xs�D����E�nbM^������v��7&�-7���"��qP��xqy7��Tv
v������0�Pl@�$�����4���xd�/g�P��m��/����c��������D���/So��X��|��)��;i&��v6�0G��{�wCk0���Hy{��<k=�����6�v�E	���Xu��i�M�����X�}B��^���+�
@�����G������r�JA�tXA
��"�]�vFP�,��Ji6fG��]�`Z��������)ah\!b�a�������=�.�p����K	j!�C�@������������=��}E��	����2&W�������o��1E`�|�&BT�e��xx����Fg������l�U� �L���_���R�4]�N�%���2�y�]��N �zPn)S����Rj0���Y�
J�c�NsH�?�t~x"[���9H��x8�E��z\`u+Z�A���z2�/HZ�+q���m)��Kk����p�L�=���e�����P8�X��s�������E�g�v��F���|�j$��������3�yQ�|H��h���vZ$9#^%v}�����Uv���7����|Iy#%I\��eq��0���'����ou�-t��ar�Z(KKZzBp��\���49C�?tdfDh<�������_P&����a��[�&�)�~�g(����m3P� 7�NW��`�\���P ������5���Nu�xr�p�7�P8t~������|D ��jT���#z9��2��
�%8t�a�%	�!Ev(:�r�3�E�&$W�DTi
�m5���������CAq��U��6��������4�>y��a�=}�t�t������k����������f�yd��
��
���bD}hM��F�k�9���~JXP�����e��w����e|�����^��+J������)��=�>Y����l��������|_@�L	���������w���M���u�x��>�x
��y1I&������t=��L��$N_�qQ�"�4m����-����i}`r��#�����?�o���Y_0Z^z������H
�@{����)Cq��GF�}�������!0)R/E�kh;GU���{�zA��l�/�G�����B��,�����1N�I8�RSH��&BCu�;!���$�����)_]@V<�v�WW��J��:.+�L�����������`ueJ<~D�	�y��:8!������1:�R O��
��-b�P���Ou4��r��~r,�VH2�.^�V$���{$���?�m�����'��67B��>b���: *0���W{�g�@�_6KtWM��?q�-"G����V�T�������m��K���b�{�&�I.�K�g�_Fn-�
������������=_H����\x	��A�xyU�[^��y����_H�m�^�������������~T^����\��=9��t�Cq����,D�g�G����E	�iA�S��M�[^�������89���7����>>5�� T�y�����M�.%Z}������od�
����6�"W|��R+a0"+PHX�Ck=�c�
+��0�;�����lY��.������0��q<��$H<�R'�W���K#9�_JH����nKa�uq<V��d���g$�AK�*
3
n����6����������Sd�CR<�U] \�9�p��4��"���Wx#5���\�aE���\!�	W��P��=���W�d8����)��`9rE����%�gh.����6N.<�F0Fv!B���U��+����a2"8u�H��:�6��&I	��
n�4�9������\N&��kkW���N�As��]��o
��ad�Ej7G��?!F���m�yI���D
	��3��,�pQ���o��a���������b������%Gt/�G\��J
�w`�0wv��	'�;Sr�f�4hz3�|a���r"���#�!1�M�1?�cJu���aU'����a���u��4����d����1�*� �pVs1����Ij9Z<��=md���+����I��F�"7��	�T�>�F��b;A�i�OBPN&u\�e��Y�N�Zc�$4Y,�W��&gjM,o��t"$s�S��H;,vm6t���p~dJ�~s��V��w!���<��N$wI��Y�������Z�kn�R^NJ!��W5Q�x�U�����A��6?���77�C����'�
��-��N	`E�d��2�����EM�c��A��d��G�4�V��\������~�^*M����Ma;��'����
�����&����1X;�L��d)�������:�vEJ�����>?h���������/y1Yi��j��k�Nv���5UP�������/
`<�Q�Ct/��l�nfP�9����F=���t�d�;M[�A|QT�<�%=�T�q7��L(�C<G�� ����c4���A���F�	w#�����-Cn��B��&7 #� N�
��0�4����j�S1i�.�5Mh�OY�3��Zz
'����@/h��9�����U��h�)�������?56��o 	����D&
��[5��}zE�w�)���W�`<�	��^�?|��o;����"��2ELG+��^������{���]n8Jd����6�T�_�H=��
��C�V
U�=6�u��
�*
����+IZh�mu���u_���E�O�@�n����1����E`Y���R����Y��j�aLu���'<	Ry�����g����������5w�[$xd ��t,v�s�9l������H(��=�F����a��N�#���cU�Y�H.�����p�
l���I���d����y���������Ld�t}�s/J�%������s�b'���^S�����]���qm���U1���8�,DE�[Z�d=��T@fN�B(��aq<�?W����&���Zr��;!�*�A
��w���Un1��
Z����i�Q;,�pB���t���9�1f�v����&-HMM��0������a5��G�s	�]�JtF��Cs*�a�9��X`�.x���������G�s��P(�������h+D�����]��#%L#8*�i��)�"U��������#��:<��JY����������trN7�l"������.R��.79I�������[��|���W���}R�C���)EsH�9�i����T3h�dX`�Gx�K�p���P�����_|T��8�|���g��)�t������=9�,8����������=�s������?m�����5L
|p�
�B�������'T���+$�}5���K
2j�����c	�[1Z�����!�
��/i��&���)|����@&����v������pHY��a�\	��M�S�����Ro���=W�(���*�S3�����������m����Zzu����a��}a?��Oh�d�WF7��h���y�u�����;s���>�	�)=�r!��0��:��,*�l��Rj��j�o��s����x_|�v���R�wI���	s�F� ���DA�Z���p?�*�1�U&Q�E?A]�Y�#����|$��9C�;�I�1���/Ox�`<Z� <<���6��9�m>?8k!������O��`��Ev��z6j��Jq�R�������,��?Q�[;��G��l*�NX�V�J��l�r�^nB/������&�Pa�=m�N�����+.���V��r�zEr������s�S����wbwh�G������O��>y�cy�/�oN�<�G�a�]�!^'�QG�^����R�?:�����������Y�p<��*���������m�6����#^�)�6���"}P��Hf�����X����]�jv�@�^'�(f�z�F�
��vj|��5���e��o���Rov�����W����wN)u�W�jv=�bO�/nP�h'����9�������7�v��#y��}d+����3�
�J����G�HN.�������^������v��`E��:������TH�+:���l�,��}�!��|��q0�<t(P#Fo�=%��=����5�"C5���i+�/���$��4T�q���(=����$-���,���)Bj��Iq�Y���N�ye2]�Jd��;Y��(���,J��5�3�U1mz��(#���
�����Y���3Mj����V�bpwVR���w0GX���h�`�k���H���}��+N:�.��[D�����C��t�q{K��%��XP�����>�|��@08��	M=�m�f�.��$[3�'�}��rk��3H�)�L�{|�=��f���Cp����]������=d���*.��h���3��������~�������8��H&Jc�����������"Z����@���*|<j\��n�������t<Y�m��	����(��E!Yrm-�
�Ya�W��[��S���Pv���TQgP^Y�:	"�(#�-Dj�;���T�ed2>�Q��$s�T���q����s^�=�����;d\|��Uf~����}�c���M�G��_V�B�����O�pk��|�[:�y����I�=x�p����Z�}6�7�O�}���K��M�eo�k1�Nr�����%�
���*��*�F��I��#x'aLX��L�T���"��k����	!=V���3�
��_���E`����UT�i#-��Z��N�Rb�'�A���-��!nU$4�������?�3����P;��gB �TEHL�����i�,�{�.�W��$
�U�Z�%F�r����R��-�H��������4z��t�r��`�Y,�����N��v�Y��-�FD2�r�6f�7<%��G���X� H����/bc^�x`�8�� ~�q�>�����G�/�k�j���iZ��4]q)j,���&��7��>�F��o�I��g��L�H�z�w�`�r�e^�/i�8}�w�������H��P�G����Qx���?p�+2�M�oK?��4����I������G�������L#W��C�~k+�d	B��+���o����l��(��g|GA������X�$��G�y��
��#�[�o��.,������4���.�|b�������4�c���t�q� W\�m=ul]0j���n~q�T>��b�3�Q,�qYY�K�{��p�����:�IX�������~���S��0 
����kZ�� �H�C���5$�mT|R�qs�]�&�m6�F��iQ[���R�aU�e���M�eL�Z���p�����I����z��J�]J��h�mQ�-���f|P�a�(>{��}��f���v���Om����	��S��������J��\�����������W����ow�[�?���o����1[��V�@'��q���3.�n�� |H����h�n=�8�5;�04��|�z>����_���������.m�~$���)i�>���M����]�L���D����
O�XHN�M��<>��'hD�Cr�]��l8���6�|�Uz����,�3��4?C9W�Tj)�K���$0=AC��<?�9:{���������?��u�I���"l,'���6Che>	�+HW���;�������������>���n�tC����r���u��rd\��
��r��f-�R�����^�N��q1���Fw�m-tQ���*dHYADL��`����0n1,����)�.�>���8�����?���^��F8��*����dTv�BX�RY;��l�k���bT�U�9�r�-��$aAO�=8e]���Lgh��(�)�_z��cI�%���hBucr�D�/�V\����s�������y��	>������~��E���F(#+M�(��
��y�����J�*����e�Nh�b�2TN��X��%��V���
�83����h[����f�!���u��{f�����u��
�����.�����w����Y�g,����JW���Nn�K��-�(�2�~Q�jg]��,J�����0�o^��>N�������G~�����2<����Y�C��%]Fkm�\����x_��h(�7�
`3��	i���@>R�i*(N����1~/�3�5�����^���#���!�Kg�c���T��[
��`���Q��d����<C�+�m��D��>�dJ�w��tY���+<	Bc@t<PX����Y���@,�]E�	j���������S}6=��6�����H�})�<X(����4\�Y[ln�
�P��Q@������2]�����L	�������q�����
m�QJ�p��>�/��_���G@6���HI�o2w�b��Y��=������k�������}�D�Q(ZVU�Va��\z]V�6���D���}���-�K0R��7{
A�}�r=�+���.���)c9N��Nvv�{%0f}�������1�7V�[2+�1�*�|�lm;'.��J�v�Mg(�~�g�!c�"
2��-��a�#w�
OP�h�����l}��TH����_�N��C3C?�5�X�*"�':�n{*3"z
��q���o2'�w��U�������=��|V����.��V]���jeGFG���������5��pA�a����[�p��Y��BKK�LK�[� {#�&�H��;D�����c�j�1�%�')w����o�4H�[iI�����6��[h(�nmV��q�m�N���p��{|x��IL}K�!�g�uEy��������oB��z6g��;	��y�T=�I�`|d��}FW�'�.eU���W�����q�����Gd��g����T�_Z�����=�����X����k������-�p[M��pB��J��������p�V9/N+V�����2�:������������K�>u%��^Fy���Pe�`��H'���W��g
K*��Rqo<l�7��@�Q)F���E��vx<;���S��`�L�f�D^���N)�!���'�]�>�CI�����q����MTd.�C�*(�C�kMA���2����M�����������3@T�}w���
!�`M�t���x/f���`�&m��;'�InI�eT��rc������]�>��;�x>��5;���j��W���Yi��{�q���b��*��0\�f����@�7�����������-}i���m_������D��6ThM<�;�v��A,>kF�Jz��@�(w�}B'*p�2x�Z�+����
���\���i�G5fg<F��~>Ex�|}a�)��G�N5
h8���H�����n�����K���&��R$8��Uv��CB@�|	f����������_<"���Wl���b<{0�[�dD���;-�f&�<H��y�|7Z������]��O87l>.DA�[��h�7xg�]:��"� ���^��;I�v�'�p����
�mG�9����m��Q�W9��"��]{�m��Ex8�u"�?�)^�R�����������m��Q{��{n��e+����*`�L�/it�\q����2W�d��K�����]���8Y[�'wO^�����O��fn]&\)>,�W^&�����-��b/K
�t �����|��m*������NQUqM��^��,?L�_�������$8���!�xge��j����g2��crR+I
������NN�_�T�?�:WC)�Q~m����v�f�������3D��N?J������vs��w��s��t�<��K������/�t4"x�1,�\�����5�rz�&vZ-*KE����kV�p8�5�.3�FI��(����q�/�������%_�v:d�UFv�s�rV0�w0�j�bb)����m�dFD@9��D�P�X�^�@�z�K$������,|-�x8-"u�+s��T��������tI�4n,zu���$7'|)2��(��l��!�m�FP�����+��b8��v�u��<�c_|������������W��5I7r��L��GR�������C��I'�Jf��0��_W#�m�d^�u���n6�{i��Ac�R�����v27Y�d\7����|o���/rV2����1�$X���T���PF1��d������,F4��o�������������$.��=��o�#���@S�L� Ug�5g���z��Ez
j���~SeG�s�M�#�H�t>���K��@-���;p���3�Gc����������9�a�r��Y~����m�)�R�5���c�����63�w�SN���~[#cy�xAWvA��Y�7����� ��9����j���9�	��>�'�������uu�G��h���n�y���KLy�H��Ae,����zX�)�g�����wH�_DoE[J�T�r-�Nn����e��,�����/�Q�3��K�1�������Z�^e���jB��:���I���Zu?��9�
$z�������������XllC��fn��K�.Pk���N���������$[��ou�����v�u�T�'�����Dta����}�g*6�bA�i~���Ha�Q��2"����V>IS�_{��%�2���t(*b1���Fj���F��{�������]�r��	��o:�5���-c!Zi/�a={�P���0�W�s���{m�����|��o������M���f����%m�l�d�t������^r�Rf����1h������m�_/�_x;!
b��>��,����D}
��g��%��>8�r�/����Y��Z��M�]���Wv~�(����]+�������|��V�[ml�Ef[��c�~��1n��]���P���|Wv�!m�&,gm��${EF�"(�`(�������Z�������I<^q�$�rQ���4!VK<�����%}\rq0v��z��f:���#�r~L�h"Z������a����}�
��R��1��	��CY�[��<�X�(l���
��l}������}��h5�����)�Sm��F\���S	��]&_��X��r�k���H�������?q� ��j6?�z�l������������������wg��{�E�DxI���������Wo��������k�1���(������%�L�
���-�K��.-��b�����
�*�F.s7/��a�Y�f_"V��wl5���5���3�z���	���%f��A�<Q�����d/���2���$��h� ��g:/D���6���#P]<at�!��g��[�+���_=��|�r�?g�:*|�f���5�Y���=���Gv_I���wg���������@�o�}��D<J:�5(��Jx*�E����.��)��b��u��.���a�^	��LB����������9�9;��{������G�C6J��d�S��4��.q1s�����<�f�D�OOLS���s���2�i>g(+�=#t\n#���!�7����D	�����[���H��Q3E�(k�(�9v��mP���9�(r����O<����T���s�iN>M���N�26t*w,�j2�p^�Kd5��C�~��������������P!�
l|��n��e����[���e���{?e��|M��?�X����xr�N����)�VB���RV
;fT�-e��30��A9���\S\d��Z���^�R,�������b��'����g��+���^�IE�TlI;�|Iy#%��H�I���y��rV����X��Xb���S��6X�y3��jQ��������wdU�x9S�������^Z����s��A��z%Q�n�<�����9�-��&������;�D�[D�M�,x�4
T'��7t��"������:��<`��s\qz��;����5���$��#@H�����(����+m�b����Ux�C�u��0�H����l���D��������/���~<��B��cA�T���I�<���L-T��D���=�~9�*z&��K
e�N�A����.�	|N��h���6I��'��Ar�>��;C��}_g�u��l�"�	/�'�����;\3�L/c��Oc]g  �)W��+�����Q*�����De!�����G�����1Q�E���n��J����n��7d��b�D��l�0�]��\�p��o|�7/�d�L����!��q1����:l��G2��1�Z�%Vb�o.��/�;MK}5����C4���v8� 4
R}J�y5�CZ�6w�E*���9H��xH�9�BTH
5���(�]Q=���������C\
�,������I�Z��&f8�c��p�C�n��l��^�w�����&R��
�*�$�a/����u����M�����v,=��A����AB�P�����BFk��d����%���������3_R����/:�|�C�����2������R�y����T�v����9�S/s����;�
�=��D�_}�Q���0a���?���T�6���u��E{[4aN���
�:�}�H#N��EJ&s4��0���v&����i��������G[���o���)��@
7����A6���#�v8�1�PcQ.�\\�1Zu�����Aco��G�����5������bzf.���B�g�"�����IUu�R��X�����b	��b���R��	�a����Zg��Go~	>~��TBP�Z��D*@,{�����^����5��x�_1��t���I��YT��!�p�j+c%�����H�~4�qyT���! ��SqI|Lz$�_�I�zU��4��'�[�5s*8����������!���A����/�����R�N�K������������.��wvr�/�Xjn��UI�0���H1N�8���U��Ui
����u�j|��$w~*��r�qg�@�(�7���O�r[���#�I1A���*RI;)B���<L���"���P����VI���HK�V2�������� ������Z|���L��Us��"���?��!^�.��3��IDXs���u@�+X�
����n�0M$��v+"7��bX	<�b�r��>B���J�/��H��W����0�	��R�4�]D
�&�)�;�,���D3%*s�1������>Y�y��V<�|����MJ������n)z�0=��'���:7���%.I���,����$z�$z�p>�������f��5(8
�S����s���I]s�Y�����|����C������u��r*���_i��4�^Y����&�H��|�`��t%D���X����5�i�T��t����o0�Kprhx�|����H��j! �i���U����1�.�k%j���>���1AC�2n:&�����6�z��G[�!g�^2=C��6�����-��(A��I*�L������d�bs2xHRUd����f���aZ����������z��I�6���k�2��;�S�>b��� M��iw���,����,�|\��uBTO\U����y�z#+IX,]E#x�p���s+��f�8}��D�1�~J$#�	�t�Y�An)i�uS��_��{kj{
�u�����b8i}J��1,{1mIE����&/y�i{Bq�}����o��VY��]_���Kj�y��j���!�������5<������Z��v���
����-A�,,�E�
v+)P�)]RU�\"_�����O�y �90��wW����7%�����N�[��X�
��K�O����:Y%��S�JI��)������)���~<!&<���v}�<.���Oa3A n�5h&��(���Q�a�#���]�������� AMI�.��*�s�f'I>V+���Jd0�^G-,�UPF>��d��+����=>�?�9���I�Jae��������?=���y�*���/�������aa5R2W���[sk��\���w;o������UH��Q��A0���������~������9�_�Cpw����4S����c��vZK�����	����R��W����>�3�W�d���T�)*r=bL%�:���-
N]9��d�Me7w�Zf�������������JY�=C5{m�E�5-��\8���A~z����N�C���'��v��F� 9��Ym�68=`~���,�57����������]�6����� �l;�����[o8+�@��$�# �(<�G�����1P�F�g�*[kI�ulD�����^����l��iO��\����a�����o����=��BC*_1IhQ����lAK��l��G4�k�{���^��N������[-W�huu���*��Xy��1��)��z�	���6b�SF�]q0�F������������������H"P����I�hNK��;���Q�?dKz@�O�f��������i}�����^Y��|����'O�������]��zc)��Q��R�G��4���!���&HG��0�(�"������y+�:}l�cd��#!b����G��#����8��`���Rv����/�������X�YJ,�:��Z��.I������������_Jo�Fk&*�!��J�����J���I<v.s,������
m�VC�T.�>�V�����5���~+��E��OQgr�����Z�)i_~%-���L����_2�R�n#�{�z����<����b��������Sr5��$�xY�:��|���h��-�f`
]a�-�F17WH3��T{E��;{���0��|�`d�������d�c�����n!������
�3C�C�	��iF��R���hj7���W)gL�%�8��Q�:����9�t�Er��?��g��r��(�b�3�����CG��0�Y��bS������hOi�O��t��������j���yIH ����W�P���6���7�� �+n��������������O �J���v�>���_�XCh�?��(q�RSaAM�����[L����%��n�E���z�Y�Q�"_G -�k�������xHgnt�.[��2W�6�!�zz�v�Q^\3}s�{V���8^;�t�*z%�2�k��e�=�f;�(�LE�d��&�}���}���}�����`�=<���k;�wK�!�<k>��.�x4Ob����zx��WV,��ws\]���9rf��1y��Ms���������.�
�Z���E�������C,L���h��
SE�qn���T���c
�&���\��U�w�u����������e���d���d6�~�1G��������qp"�hB!�\D|�1�1"d�d�
T���I�}��
p�o��/�����Sm���;|nf�~��6o�����{�z}|�v�|�X�����s����^9��$���������'�l��Y������
�s9��|�s��c�R�)(�3Ib���&�;�@��W��d9;��['o@���j����Z��{�}Y�Y���c����
u)&2��&+_�����A���d� ��(��A0?��(F_�pf%����u\\1��kS7a������Z��p��e8�k�2�M/��Y�����[�J����TD
��<n��Y�	$JfTx%�	wIRT�H��x�m��"�f�K����*$�7����\V����U��I�����b|,����6�	12�r��*U6����s<I���D`�)���RfT��R2��>j
�UY���l���U<�jy�*�nQ��8������4�����[�z����3���1f~�1�p���5�
�R�����s18]I0��8O%�	��c�')��i������=R��
�#=+�����Zx:���O/��t�����y|g����$�����3��N�Z�c�S���q�	a�]P}9L>0l|���y�)�,����������;�����������yi;o|E}sW�����oz7Y�oV���%v��K�+wv���c�W�Q-��p������XQ��y�o�.�9�#~I���)�;~�;���[Mqn���N�-O���8����o��p����]J���X������aVX����J����5Q���"\�8��H�9���>�VL&�Gi�PX����P�z|�T����XVeY�_]w�c�\�l:�mNC�z�V"p~C�BH%_��&X]���Jl&��L��Y`P�x�)~�����"�����I������U���o��`�������������d�S�*�y��^�X���!QEsA�p�P�:��lw�]T"�S"���	�q~����Y���ame�V�(�m-_C��Y�E�:-\��AY�����^�{�h]}�t������|����D�CD�{�~����L-[��\l����.=�����pj�#<e��S���E�~�a��o��$;�oVL,gh���W���>'���(�k�zNrzK�^l�+�����%�_���8X6lZD������
�P���BpL={���Y�IjV8L�i&)`!�(������[�6�K�
bQ����D`i��h|���#�pnY�3-�28�8;�	��U�~�U`m�c:
RbJ4J0G�;S� ��t,�F~�)�s�g�������������o���7-���:�%X#�C��j�czv�P��A����O���������V����4l'��g0<X����n��Ak8�������I����6ah#<������u�����W;�g��woOh���k�t�'/C�9>�'��T��*��:����Z�&����w����4mS��4E��%t��e�3x��jG��Wx�5����e�'���l��FiK�	�K�{8�4�\��y���J�c�y�%��lt�L$�>�le��Z��og�!�{����k
�X��.��:-K^��`��Wg�;���l8;W��-vx�U��Oa+�{�Y��v���A�(3�Z��Z���V��Kk��Ec`����� �
	g�	����R��`��vf��l|=����FV��b��������,���^=�F��;�I��S��o[�����@,�l�g�W�[{2O��K���?[���Fx@i�]��c��|V\�`���M'�RB`��kT_J�K�����x���������	�fl=U5��)����� ���.�8�0���`(���:�k:�,zX�����x6=s�O����[#�������S'P}rz�e!;����y:D�5�:}�P�x_�p����Y��Ig"_�;��r�Y���F�m���*|�TH���}Z������e4��yKaDBS�NG�5������g4z�h��U��lB5��8&Wh�b���f�;��4�C��Y�]���0@��UQ"�(���X��$R�[�t��%~?mJw2����B|9(�(������9<�?5�;��-�`4��1]:9�!:@%m8���Z�&����~�!#����V�?��r��TAA\����b���HE����R���)�M:H�����s��:f%J��G�u���T"�{���������������l!���&$v��G��8G�A@�zE#�����o=��{f�p���������fz���U�U��K����P}���)L��AU9Z�����W��;'��t'l��=�����.�
J��B��x�j���u��r1sMpbUO����0�	pNF9<:�;<������}��u������o:?��J���08-bx��
|��hMf�2��p_-�������iR��L�i34�!���e����<w�T�{4�8kG$y�f����2������;���H5�ec�y�m`��j��9���������m.:�i?��D�� -���������s�d����?(��}A�s<���A����A���E��wa�	�"������mi�m���' ���<����e�
7ht��58��.of��	qnR8��@�X�*#���5�5��2)�*��I�������y�{�%��C����Z�����BA��U;�b2�)��13� ��+�V(�X��g4w\���i����42��B0~�Ez�k�/l��X����n��t��6���{\]��C���bh����u��/�0���z��K�/�L��9X��:��� :;�{��a&�����C�r"9hVP�a1����\�'�����`����G|���;L��C�8��
[�	���_���`�l�Z��,���(�3�*�l��L�����y����.�7����z���|s��Z��?�m\�KK��d/��yx�CH��4V{�9��@S��GWm�����i�w[��[�����t�S~��z�(t�t��gtuQO�����A-�h3�d�F�G��j�a]�q���ce�2�Z�_�%���u!���0�l/�'eZt��[K��^�M����S�^_�u�e�����������gu��
Yi����k`CWz�44{��UDG���11�Zyi���W��E����G�3����i#LR]���(�k=���P�YR)��,3-:A������!Fg�����LH����}�i���c[?�JF�k�/@��L����	SS�Rh�@�6�>�%���cz��d|���#��ij�\�c��U�������|�6DEe�&
��cv/���{�ZKkeK��� �0X��d� �5�W��	J�6��A�S�J!�/�X �
R���uy4��(��v9U��\���6�S4�N��q��Fp���Mc0aa!t5��=?'�EY�����j�f�s���H����%d��$F�:1X���@|�F!�W��Tl��)H7�����_�%O����N�6�E���@����Ac#�3c��c��'�E�����Ts3��v��X�����m�b�A�'@����2����s�r7\���-�al����(�����p���z�������9I�����)>4ZS�l���<���0�L�����'�O�DIC�&��������+�Q	�WM;�9$O���{��u3X�����U�f4V��_ �o�W(	[M)^������-N��-1�S3k������${�&��<�@�g>_m\�?������H.�������<��[���;�J��-������V�2"���M��"��|gx0�|��i�m&��x
��hl�$�(h=�Isg�u��J��V�(]����/����4s�C���S�z��)'[���^�s������<�j������P��c��h�elH
{��2_�Hak����1a8��:?'����^�&A���/��gR����N�	x)������\�A�$�����r�{��Pl�W�wUI�r�Uq������b
*��)�I~�ke��3�����)�T�P�]�_�RlN)�S<1���"�\t#g��)�8$���!�j<��_��I��T��;���4�o7@�	��������q2E '����ONh!_����������x&���S���#��Xh!Ij�[L�)
�Q��dnrl>@h9�dKb=��s��]�H�v�T8v�m������\(�&����C�����I���a�v
/��Fk�U�.�Ifc�cRedS'V���� C���n����>3������i�^k�
:n�-���=����?�KU��>��1�|�b��zL2M��h9)�3n���*�����}h�O���36W8�FD��e{3j=H�2YP�3���4�HCZr��u������d�4$t���o�������Ut1_ ;&�-6&_M��W����;l
z��(]L[p�fh�X���'����_�=�8����������b�����4S����NtkLT~h}��vdS�D&�Qt�No\�C�0P�%�Z��,��OS�	z��������=�UN)�1DY�w#\�i���v���:���&9����[�{���ceM+���lk6D��bU�Kn�5�WZ���'��,P�j��Vp�,�t�8�#�5��SNa`Q����@���>c^R\q=�T���q�vdO�bv���Dd��,�J�t����V\�P�����,o����A(�)�"0{�M���Fy����G;�q�79(:D���.8��U1�����4Wp��!��fk���"������0�����siMR����'(�"H��ig*o�M�	���sz����q=_I� <@����z�R'%��w*�D
n$�o~]������#G�	*C�D���]���=A�x7P���'�5����k����pZ��>�f�m����A	�j�
h�8'������j���T�A�����i?RT�I�S�0�J;����@z���B�2 e��:q�.mi��6���-����e�kUC�Ea�Q]���7a{`Z���8�i�G��#���m���{lx�L%���@�n4o�H��\�U���^�3K��.��.���QF+.NJW�����K
��*W�����]�)�#7����c�&�j��&U��3��.��$�����]s��E\����u�z{;�����4}p�V$�
�������9�5��W��@�;����-�>!�(�vo����Uo�����v=���LY� MZ�vk���)�w�����T����w��?�*\��R��Owg0����$�t%���8n�Sz/��;*��W��w���!7Z����m�����N��X�8���Y�w�@��X�|CB�u�w�" g�q���Na�F����J��|Se(�P��N��L�H�{3LA�K�#��4�0�1��W��v���4���L���	�Kv�k���{Y�Q:P�6��tQl������X�o�Z��^�����ZL_>�l���^�B�x->~�f����[�4���P������o��v\t��a��_z�q����d4(zPMGbNG�)�G�L��`��p|	uI��D��!�n>�p+��m
�gd'|�ml�Y -�C�x��E_ ���$����S6D����T+[�N�rt��{|�r~�����`em��W�":��=������6X��{8������_�oQ���6Q&jL�XYW%�,1%�Gx�&��9X��> ��r�FC*h+r74��=�]p��#�d?���?	Dr�/�ad��;���XHd`����	��R\�4���u�?����'��0�X�&b[�>j���lv��h]�`��"K;WT�
����
WbG���
����q����,.�[�s���q��2���b
���:��^h����;��	i�i�]�=�o���p���z�o'���u�r��0������Jq�q9^��Re�xfruj��MQz���#���G3L��sTHS��2
@l+��v���o4��{)����Qb#F|L�}�X�$0A#H�n�����<��n&<�|�)k����t��|�����x�rCPx������Hudm�!��l�u0��}f��z���gd�P��7`iI�����L?�V5�����E�'�����07��:",6:���V����1�V��P/�����M�$�'��T4`�lO��%�aX�`t=G��J������g|-���+�^��hph�����Do������!��<�P�#� 9G7�O���'��h�"��R����'�yV[����\.0����B��[��d2�
�=7FG(9n��V�W����
�+p��7t�K��[[����-�_lq���-�*�;����/��go5�����s�{�
g��\�?��\�����7]@AM�amv.p~�zT1,���������������O[�����?���cQ~Z"J@�i�:O!:��4���Z�J�����/F�����kn�g�1#���)U
	O���h�M
^��:�`x��d�x&������F�57���=�-���7p�U��iPrD_�n,k��|�S�'_�X���#a��?
�\�+eGx�4@Ne^��L��f��7��8�������75�E�Y�����	G.�}�w��m�;����h{�KCD�dp��cR�KV#�=�����o�+[���_�i���^��N<��G�JX��9#�0�@����L=g#9�i�T��������Xv����=-�m�+Da�5�r�%�:�l�rd�_���VU<����T�A�������E��:R1�����H��!Jv�Y%�����Q(��5���	�N��*S���'�tU��:���N�+Um�,��_����"��MFd�7\.���O�>y������O'����cl�Q�uUn�r.on�y�Db�Z�;���6��%W���h9\e�h�OD
B��
XW��A&�@F?c,n>2��O�����y�rED��S)���.�3�A��`��/d4~��������FcO�����c_H��������!���!e�Zr���bF����*����K(�"p�6^�6+����t�M�pP�� ���w"cr�	G>�Q���f���w����.��
"��		7�&�� `�ib�H+�m�B�H�ir/�OG@TQi"�ET0k��Z��~����7�����`R(V��.�������a m���az�3���mA0O�08��&G�1��8��r`I��y�u���PxnA�[�������,��`��d �e����P����!f�y;x�t�����Q�2�������A2���M-^�xo��!l����k�;�
c�8�W��{��,�a���>��[�l��R�&}G��O�{�"�R��wr�w��3 ��@�r�"���J1���-��?���mhZ��n}\��	�Q��b!��~3�?��/���h? �C�=1����(��a)������B8L��\_����A�q<�����g��s`�1��������L3����=���qtM�4��P��[=�[���hr�������
�����h�c����QW������Lu1����R������j���2�q���+��S<fB�k�h^�Io����������g�^^��=�>_�<�y������?����kO�Sx&�E�C�9`yK��������Q�k�
1�&�*��W����x������_��B�|v�D����k�=TRLhYb�30y��n��"h�(�������7F�U���<�;H1�V[Z:<�u`�la�@b	o��/�����6�yd�e�0%e�*�T���a������$D���T����,�>��!?��bCtu�c@�o�������������i��V:�����CX��*��0���>�#O���CA��>���[g�$�������d�2�.��H=�^E���������a�|�~}Z�}�zS�����P�4����������M�����`(��H�5�p\
��?Aq\�������C�O
������l��x�\=��+��]���QQ��F������������{�r��Zo��R�r�TI�����J�7N�=��P��6���[��"�8+W�!���v>�
P�~F�S<�����c&P
�
Pc��
��2,�l�Z��p4������P����������3���I>�)<�AV��eR4��,��C���tz[/�����I����A�%��w���R����|�'Gz���g5���'��H�aR����;CZ�K,�9"Y���&���a���.�&��B�``�d�{;J���D����
h&�u��������y�m����_�b(.�5��=z�K9�"�[4�Q+A���]���p�_.�t����?���XH��r��p����uD��E��H
�����G����3���#/'�����%��;�^�;.��k�1�=���Ze*{�e���[Ch?��K��= -g�d�� dm9v�J�!�T(�)�(c�
Op�6���q/&���\@�^r�5�<
`����������U���<	~�waYQ�O(o�b�6����6y��x�{]�=e*�������k�����'j^%�������	��e��������F6wk(�_�@W�
�R~38��o]��E
B9t;
Z������d�B��y�k�C��(��`
MGlx��A�
�L�1i:
:X�`�*_=��\� �*� ��?}�mL�c��,�s1~��m���6t�&]����g
l��!��� ��?IsB�/�LC(4�Go�r-E��� A�����&.���"U]����+�5s\�a�;�P��8tUl/9s���
�A]���Ev=�{�w�qv���r���+3���Cx�fBM���>kCIc��^v �,�u�;�A�}yS�0K�������������w�jcD�e�r^�sYy43i��p�l���o��c������EP��"u�.��fb�@f�6�b2�����0�X�;��d9���X���u���62���j4FN�	�-&���U5�D2�u(5���X����}��:��K��!����WMC�V�v���xA�A'�}�����6$UE���9\:�LYU9-�9���\o���M�o�}(�[�.��������B���}�����*}�I!��_z	���^���fc�qV<RA������<��SU��Y�_�}����O�)}t}r���7���=����~�����.'��k;��T����z�����
[t��w�69���.��9~���}�t=��c���z�cj#>-i$�h���Se5p�[�.��H�0�`p-��&��}�7(1���$Q���H���d�Z0�����~�6�,�����D�H+b�f*�$[����RR
����
V	%"����5��>�?���1��e���,����j��e�C������Q���p6�U�Z���Z�}���%$a��}k��EJ-�>��
hI��$BS�r:#��(�lU�hv��ux���*�P��������>=
3.�C�}�3�-b�2���Ri�����+��_�UV���
�; �)&�h,���bE5r��W����e���d�|)�&����^��c��X��f���s�P�
Y�H�WOXSzE7��Vj��+;�V�&����it'SL�-��R��"e��%�PRg�v���%C;]8��*,�D]^\�B���	�����g{�dDH���6g�x�V*��h�/;.1)i�%U-
2�O�
>�&'}��+jb[�a�)V�����7�������z�D���Pr�����X���0-&��w��a�6��o�G����M�����]��d4�BAI���#�5.���j��#"*�����F^CwA7�ksj��
�0���]�^���=�j����j<��$�� ��)���(`��')�A�'V�-[��`�^56g��+��]!���j��YW+��>����� QR2���"������Pc��wC�4��������4J���������f4xy�%C|P�_=^�4��9Eh4�F
w1�Ts�Q��8��K�=e��R��2�&�.O��L�����U��f	)f�Iw6!��������
�1��\kj�Cf�����Y���������h��r���I��B��j&���	Rs�W�9���y�nX�"c�^D��$������V"*�rh���|2��(�������R�L!���rM�*B��C�0|�nX���(��G$�Ty��m�0F!������:�$eZ�!�%n��]��|����l��o&/���IRY���g���'��,�#����t��v)n_�@@�&���U����Y���}��Y��~[dW��	S����B�����L"���cWS3!��Q�j��������$�z���=�Ch�R2��m�.u�B@�o���V��E����C
����eh�dx��5�
��]����Mi�������@�����,��)X,CW
B�+8��>�Phsf�nv������|���Y:��~�dy%4x�{l����r��6\�uPDG|��J[��6��*��V�*-X;)�4�|�h�T��q��s:M�-}�,]5�)��}pld]���������M�	������/eT�ve��E��6$mo�	0J��"}��f7<-�{����~�p�>0.������������������w����}oUq��-��}�lQ�,z�YiXm�z_Y�u(�*#=�t8�<]^j�#�M�k�S����X/^�p��N��;��xus������g��Q��J�����I��a�h;�C�s2L�0O��>���Q�!H8X��*�6J�'�)!�e�����4X�Sy�6a^%�g�*���l!H�W&���
<
E���h1VQ�V��!��*
�!b���������8	h�S�T�.�5<a��*p ���X�"���V��J�("\�}�������Bk��R��RdI��i���<����M�M��j������Rx���Z��c]�'�����y7gll��umvh�e�q)�x)��E/����xk6�s��8��*6���
<#M8��v�T����jQ7�J��\������_��9�%�T������o8�F�b�P�3��o�}�����|�Qy�;����$���l��������v�O����,�.Wy�E��nK���cm���v�>H@�['�i�{�A+6�]]W*��}s���D�Y�F|��o�-�p55�,�B���ZVa�����Jh�����^"��u9^�����@Y$���h��_��t:������
���~P:�?t_�X�����6)�(�A���]�w�������4�=hn0�(�^+�VE�;�����W��}������������JJ�+CSV^9Yyi����(������bi;�2���zBn&������_5P�EJ�a������\�������~�����NG�G=v��r �a1�T*�!S������tV�2���!�%�i��_�i����B�����c�%de��|n��l3����`���������;��B��9�JD�U��+�e$<��K���I��r�$�g^�Dg���Ko��?E������&)�Y�VQ���$.�,��%Y������JB�b���e���_�*�xc#�f"a\R�Db��u�+%�2��&T3�D��Fu�w���Xx���V��j�������PB*�G�,4�����|�OMt,7U$ }]�c�@�;�\f}��4hus�m�+g���6']�
 �����+����a�?�0�Dcb�Y�o�V�2t�e}7�l�-��O�9X,l)���Ta���{>�c����x�����9.�
��J�*���������PmL��n���q�}���Ub*���.BS�������Mo�r
�"h]D���H�#��J�Q������~�\1 xvT�wF�����,_<��4����nnO�%Yx�����d��,���s������$�����z��^QY��&0EF��9b�e����q.xD[vS��5�K�<X��^6Ye�X#1���������RA3B!<&�������������&c8P�c=�\���^��&���N��J�P��4�lI����8��B�-���/�vI;�������,cy�l�g�E`
�r��h��+o���r�� ��L)�n����������D�7��c3f�6�
G�������F$5�'m�����������4�f�~�{�x�����
,B^|�-�>���F�Bf���`	^��bM������,����s�������0������
��MK�<6#����@L���
����vL�=��0�-]�_���E;��%�J�,�0��.l?�a2�~��e"�Q5�$�Hq����O�08���q	
?���b�
���w�,��P���K[�zV��P�v
�{gO���$MpyNA���%�]�~�E�6���}�X'_��[�<S4n4�e�a��,( ,"$w�w�+,^l��v,5�zS����,�Q���LZ�
�R�E��������iJ1��B5�t��W	���;�m&/�����F���i���4�
�9m�g{CbC��E��w��}��OX�"s���*MZD���Z�}���%�b���B/R�����*h\P���������5������-��`<�'��]��y�cjt�	�U��G���8�JC�D���!���PU^��6|e��M� �M���;�>�sB���#�S�k^g�F,t���S��T�L��5Yc��5��8ws��;�(�l�	��"�c��t4���T��So4��&����xF���-���a	�`�S� ,I��N���[0f��U3���is�h�p���`����+T{�iA�;o]�����GY�+�^���<�%������-R�1���<��5���e���`z�A�:l%9�{u�r�2��o��.oc�+��3>|"�U�kB�����W���/y+8F�B�r�J���x�q���T4��P�����T������@�Q���b�F4
������\�Jc�
{��y_ILL�!y�p\d(e��f����h�i�F�kl�S)�}���#Dk��:�OI9kE��,)*Ww���a�f���r�&s�O��8k�\�@���iz��n@W���E����w�f�������/0�����Z�����|�`7c;*s�d^��_�e9;
V��s�,��8�y�u��X���;Wki;e-�����g�������-��K��R�%��R����P�do���������`!�f�g���B8�b����"�?��MX�ywC���N�����?�(��b�.�X��AF�X���&_���\����To��M��J0#`�O�R��"��]Rx�X�����%=b��&����~J'l������av8fR�q3���Osf�������f�l��}�����dRIm���h�a5h)����7H�$m��Y�M����N��p#���<�f�Pl���;�W�d������P>��4A����o
R�&7����h�
�If�}��|M&B�������,�_6����0�f:��Z�a�O����f��f��]���_�.^��������~pT�����ss�U,��aP9��+>*����py��g�g�>m1�FKu\)��(���dx�_Ql���ct>������m�OZ����5Jm��+x~6D��H5����t����b
�o�3��y��sF����aa�u�x�PC��!�SLZ3�
��7�V�?u�*�"�W���\���N��N�����`���_6X��dt)v����u��k�"
<b�����l%��I���
��"9O�\��
3��xd�Mv�vs���kGo��p��H~`��W��U<�}����	��h����I��4y�
S&�D�q��t���|]�PL���Gtj,9���&X�r��O���#��X�m=;�=�5��L"}�zJ��ub�4����Fc9W����"���X���}�����x4$�'��.%�ZG�������0����%~(���������"�++����u�T�i^7�MR��X#�%>�ZE{\\*bC_3,#2�M�k���4��K��.s�0B{�eVK��������/�a���u���hY�~-�wp�{|����?|�FfC�������cH��@N������nZ6j��7~������W���8zu�j�������'�� �>��e�lm4������I��7*H���eZ,(�>���)�f�B����T_B���<�g������nYW8Z{N��,5���;e=����������@�<����~������u��o��FJx��tE�p�_����,��7s���}w�����E�����r�0�������I��%>��{}�G�.8D���CT|�C�(�q�����
C����?o��Z�2�Y7�i���;�:0�kt�\5�4(8,����h0���hu��`��M�R�AJ`M+�|j�O��"k5�y:��"�H�dGo������W�|�u��*�F�;���;=v3�b3"&����/���Y%��4�"��\�&�,w^�u+�?��%�9�_t�b�|�uz�,�-�K�h�_�pR3`w��eo2�Q� ��Yw�����������i���K �Y���:�{%���K|,�Z`tE�$���8�s�,���L��S�DNX,��D�1
��9��B�9�V	���<���?AX_"���%�Sx�@U8�``�^*��8UTc}7}���}rT��eB��FGG/Y�s'�-��]���]T�1�$�J~^?
\}1n�T9�;���"r-��H(���#A�~������=���^_@�/�F]��;E`���eV��	\���"�4�C����:z{x�9�N~(�G��QI]`gt���6� {aRV����[^�6W����Z�
*�M����TM��#* �H�=�m����H?(�j�����;@#���F�a`(�O$�sN��9w�+UWX�9�
���*���w���b4�e����������v����>�����w����L�(��cA��CP�?��p1M���=�����<z��9�'�;��<���jv���n6����\^Jb����gS�/�B6	��pL���7�v���N��'
��<�D�������M�����/AByA�*����	}��P,[�������OR:
�k����`�K)O �x4��giU�4%��#(|�q|�r ����I����U�GU
l&�]Ep���G��+������%!+��M��Y���8�+�����%��Aj�
��/�0��F�*��������3����_����jiI��/�r-�r��}��n6�3�����e��KfK3uL�5��9!;���t�����\������DM�1%����-�&2mU��Z��]*��z��������Q�����{�R�a�^j6��,�G��p�d?"YJT�=��q_P�%�^��	�L���HGI��M9������xQ'G����Q������
��M�Lgm��6^W/����:�f������	�X�O�����^yAH�Q�%u���2p�m�jW���8���Z�8Q�E����C� ��N����,�\J�'�Aga�_��������-�L!C���*���X�����.#�)����^s^kM�i���hF,��#{
D������	n
�
t����8�P�:�����Qf����x��?������$j�"����O\j^��hx�`���H�+�D�W��O���Ow�>�PN�sy�:����������SU_y|K�`N��s�9hK���D	��*�ZD�G���e��L!l������&�H��'��d��R��Om��C���I��Q��sQA�7���.����XD�����Q���l����{��n�K\��3����D�*������������R�'�YO��|���+L��}K����,Q�<��6C6��Fp$��m
��Vx��bdBSp������H�a���`�����l���*}�=�\�T�LL*`���~��zS����������\B�S����>��G���@�w�N
�p��4x��X����4O4t<�n��g����(Q��\�[U����h���&�	� ��Wi��[����!#�7�,����t�^s���[�:�r���,x|����*������(���w��l4$�i�����
1r)��X�Ht�!�f|*�C#�6����uq�B���g���ID^;�g�j"ou���/��-�V��l�5�;�.�f�����������!||��)�<�4M��.`�<�d�L(�������\�t4�n��ZX1+��o����������J����_�#��/�<��'A���t<d��7�����,�4O�eM�m�����XQ��R�
��iFqL���
zx��d��aC���IzBZ�|SYj��_[�^70��?������ 4M�����%V�A��w��}rz�w����K�qQg���<��Y��3g�����U���sS�7���M$�]�P��jD�����j�t���V���M�������{�9���@�����'���1X��*�����w�<h|A"!#i���-�_
�`��	�*��������i+1f
K}���� "~�9�+�������4�T.�����,��>�05����U`�\���[���c�(���j["��x�]h��h�P�]Y,����A?s	��@��d+��2
sq�I/?JW��/�U�D8]�m����W�,�6U54j�������k4�l8 �l�C�T���!�y����cI���^���=�����Y�0\6����Rx��-o���%n^fp�p�6F�G�68�� �o3c��l���\-Z����w�bk�p�}��5��a�7(S��maz4'q�eH�z9����������'��z/G"��gS�x�!�����K�[G�;�|4�S���/>������v�g{p�n�m��$�*H�6CI��:��]y���lv�=����=7��TX�8��G�rMs�]&h)���0a����3���E�&\��	3*��8�,��JZ�������.������������5A{�L�!�pB|�%,oZ��s�����+��a�3|=@�qaoytB�T[9V�DT��<��a��D���
��h��l�/�g����Rxs�"2�H�[��(4����N��_�^�X���E�������D�����{���w*Z�P1T}���K?��ac�_5������)z����M�"��A�(�:�r��
��a�*�X�gxq�&��]��4=�:Kz��t<�"���rJ��Ah�XqF'r�|Cux6�.�8h+������v�jV��`-����j�^�X�3���S��UB�����!����Gn���g�6�R��X��
��X���]��*\G���c��p�����"J���o'����~W�������`n����|;�9m�P��Z,_G3d4A����{���6��(���;�X�FV��������<�_4L%�Bp�� �(0���iq)�C@��o��c����i~�P��������g�FMe3��������:�^�#<i���8c������-�C�tu,t
��������(_����bP��H8��gX�G��O<
u��38���'U�2�I�qB��~��~Nb��6
,������'t��f��L�M�
v�y�|�I�9h�c|�H��d2i<��)�<
%T?�Oo@������W����~`.[��f�-��W8�%�r
�`�T�����y�R:G�0~D9��q����Co�O����:O��y����-�;U�������t&B����2���N��Y�/�����2+�7��#r3�W����+����/%
01ki��	�����-�,�A~��{�|zPe��M_|g����6��E4d�����Z�o����{�����.i��K~��U�T�u�/
u��\K��<���J7J���@#�H��n��_���hq�i��~q-��l�"��7����z�L�yZ�t/��x�1�8�/s���
��L����CJ�&�P���Mm���$d("����y���=/�L�8v<1Q��}����M����%������0j��`kZoky/�J��c��?2�3�����:#T[��h�_����#�������S!R:�*�0�z�"n>����~��<�9�c���r�.�>���A��5(.��!hU��-v�G�C�5�d~�,� �M&1#�=�/p~3��c(`���1���b����a�x���1�q�]!��2�nuz4��J(Z������.W
���1H��`[���zRAi�^Q�QT(o��(�A��<����S[�rI�5�A��C���vo�h����q��;�`�\���"G����?����N����SNC��D�3��3b0
��.����9����x&�:VG{��DL2&eR��}G��Tv�����u}��^�}KR�%��}�UQ��:]
p�h���$��zL3��������
Eek�N�������8�08�J�g�)���4�1���+����b��a�ab�S\S����f��'[��
��S�S�Y:���{ci'.��+i=�W���C�O��Q�i��z�;J��o�~~'I�&Z9$�to���8'B��Xn������n��7�^��h��zh�������O��r�J����.��b��w]��$������r���]a2Qu���}�ew���&���]�+m&u���ZU%/I�OJ*�
�MQ_p���Q��
a�S<�lL��~���@~3��0���[k��`�^Ob�?,#c�)���-P��s�����s�}�'et�4"��v����k�"�^p&�+�qR�9�4�(j��K`�x��!�~}�4���G���j���n������q{�hO/����m[��\-�����;&�H�9i��t1��ne��2����6}�������o�t��[�ucq{������
�$� ����0����f�Un���.�*1� ���`���),U||�B9�Q����1��$XP&ak2Io@��w:I;|�p�
Kc��x�o��t��"r2L��E>��3�y�#�=��w8�p s������f����)����\P�����Z
�&.N]&������	�`���h���m�<��������Eg���t����trYY��e4����������� 8������K�$B&ji������	�[��P��)�*b���&��)�`�9�o��6HC�n���LXv�m�r��@�t@�P�������������6�Q
�����g����.�?���W?��.bh��P�������I����MLt��)K'_j"����*{�M8:h��n��5k�9�uH���"�$��a�GG��u�����|�~�)q1�6[��h
��6��,-�d�>����$^��E��{!��=_*L3N"�n?S�:��+o&�J?>�q���$:�H��������w��D�wi49m1�����FU�0���G��q��>��/��X^}�W�8%����F60�����u��O������wu��d�����\�s����:a�^dS�Z��	]i;��|��1g�Z}
��lBnZL��b���%����L����]�q�~�$���!k�b�����~�(��^r��E�a�{�wI8*�L�'
��k�7;�k���k�ki�-Y,J�t������������	�){L�z,}�=��	�T=\��'���A"8�E-�dm��@�A��p�T�w�Re��"��9�W��	��HMA-���w����i�7"nK����zY�AkS��e]@`.����@���y��L>�=�<v�O��1�����& ��5��r�r�o��r��t���L+����]������N�h`�����1+2M�\��������I6��I�hYI�� N�����@NI�l�p�`���P��B�����������,y<�G��6~YJ�+����i��7L�����'(�b�����HX�}Evw������H^9�L�\1�M��k�>�}uus���&i�g�3�<f��XY�T#����GjtH�������M��n�Px���9�Et2���?J����NR��G�I�����]@��`Q��X�	�E����,�z�f)�3�6�3kL�;g?���$��������������@TK���Ns��\�.U$L���i�yz��=	�X�L�s1��
>.m�Y���	��
P�`�5���!��f+��c��o�����2��v	���ZP:��GR�}S6�U�rI��%�
#���������{�Op/_$�P��o$��G4��(�9	�����2�FMk���D{�R��Zi�t�������
�jo������fS(�������}��B;����Am~eV�f
;TR[\���@���_�-*^�x�?D��'_���/�J%��?(
w4}�Q��(
�o��=}��o���]}�p�,�c�Uj��#�p,�Q�FP��)��c�=2' 9�������%m����foD
��}�g2���oIn(&���m�%	��[�2(>�n�NV�G��W�����f�W��k����&{��d8�2�&�)���������9v���{ov�;����4�{A_���'�[�g'�'>�����z�a<%�m�|�bn���qF1I"O�(JM�����'����2��ft���i�����;�1�9X3��r�}k��}��n���G����������������M�J6a��9�3�=_����sw�����]fS�r#���m6����u�S"i`�z������b@��:��J��C�@P]�
$rMG��������|�#���`O�F��R�I����)��_�tB/����;���`��C��i
V��-�����s �8Dzr�pt�B}����g��KuuC�w'�>�����zg�JN�F��+CG���M��|��5i�=���-w��
��q��{��E+����sv�@&5��Q�F��-�"�R	���Rp��Zx
�De�f��Dsr�Z@yee��X`��>�S�wdJ,�yt~���q����G���=z��$�=������& mb��Z����F@9!��� 
m�l(��
C3;���V��|�
^���[��g���5N:�UD�1�+����2��pC�@9��3��`�;����u�L�S�4�_��\F��}As�y-Pd'��t�J�b��� �����.�{�����&b�������w@j�����a�����s���"]�+vL�;�\fI�
����L�w�vvn"��O[�gg�����N��a2�\��h&����K�5�R�(��,EZ P�k����4�����SZ�,-�����)�����B��,���"'��"�Z��Ct��t�O�@t�hI�,�G,����Cw�2�}�*y���w�2���t�C��$�8*�=��)*R-�`���Gp�yD�������/	���)��m���f�Mtbi6e[N�	�����VS��������C����g�t��byr�d��l%r��@��/J�\R�)]F�5��yh�_���9����{�,��	�dE��><�R.
}���L����d����c�;�$iD2�~�����3�6\��
(Y��-5:�������b�-7�C�D�c��b�<�����4���13���fm����%c�^>����y�q=�0�"��\����?��>���1"�� %�P�L���%$�nA�	W�ie���t8�=S(�o5���h�}��Gm��l&!���im�G��:�����)'HU�`������BY^� ������0\�m���\FpM��P�&�c��r��~�T�������*�s8�h���K�0)����Z���d
��XEA�k�<��wG���{>����y?�K����Y�"]����C9��I*r�;�;xM��2�
�dEQ��*����7����(8�C�jJ����m�4���5]Caf	=���H*��:�q��l���	�r���T�,$�3�*�G�@�;��,�\�����iC�������Q`	v���k|"�tK�s2����YtA��)BDS���3���{;,��=��{���PC��`8�H���*�z�����R�v����
����K��Nc���zS�������[h�����F&e���������
R�t��q�(�'>�=��S�Z�<����n�33��S8�%I����%
�y��a���c�r���	
�����v�E�%�s�q<�������2��)�k,t�f��a,����?~yo9O��d������n��r
�y�`y���J�az���0�U�?������+k#�,�|��(�a�-\��?U�a�0�n�zk|�n���=�8-t1�� {��%,��Xj^�����R���N�)�<����Qp�=
���e:�3/ee�B�������
3lBP��k�C�8�x�Q�q>B�pl��^���+8�Ac��)uG�]�8p���������7�;p���n,6��w���G���������g��!����eT�o�@�Z 9|��:K2��%+�|������r�P$�;�P
�Af�Kv=x�HX�	�_��)�
!����;�4����.��
��{S���3/������mb�y���&F8J1������2��}��;��m'�����9�Q*0/fa�X��(3,0�|�0��bj�����A�y�
�����I&%���`2&!��'C%��q	*q�g��������$�%k�%���dB���[���
pmoQ�8_:�h�$�����^P*�5���e`R8�������w���&���Z�T�n'��WMJ�d&��	a��I�dN��Z�o����]���i��,f������vrO�t"�l��Xi����Ay�MCE�����a�W�p^�3��,��u=�h�3��bFt��rN�,(`l�CX��^;"���(3���#������S���.�r6��4O����9I�N-E�-"���d���M����4W)�7V����:J�so���+���|����G-y��j��n�> �K3���d$=�x�Z	�Yc���z�>y*oI��%��rql	C\���,����u�7J��3�6�n������k0O0	f����sO�y�*�\�~� X��|!������2Z�@s�T0���H��������[���o��mD<A��i���7��p������$�t6D�!�c�5���).�j(�L�-m����"� ����9X�W�Z��M�raPF�����0�
a�n���F>��^��p�8����1���[u���QB����D�=�u5J��hHO��:�^\���b������$��7�x~����E����>��Z����v���������'	o��E�n�������O�;g���Q,G�,>$�K���a*`\=�c~6������d�]tl����5:�=g��%������E�
�A49d���.)�[�.�o�{� �TPU�{���_c���$�r$����CK�fM�7��jW�(o�`D
�c"+��8s��\�M����i�����k��n��oYr�T�z�|��P��PI9P�eG�g�d��Q0�Ts����m���}P*��j�NF�|��>1��7���WJ���T	�d��Z(Q���WF�B���WV`FQ|�,>�g�U&>~��~����������;f ��s�DW0A4�#�

"�H.�o��h.���<�Oz>C�z���q�����={������>q�Y�Sk��Pn$�[3��M%a�.y�������jJ��o�����H�3��d�������Hmwt�~1�x��!<�l>;��k���O���3L�������3!1F��FN�����I���%�����>�:5�D��+�=eMJ�q%} 0��i��`�����!%L���U$4?���I�v����6��z�@���M��koZ��/e�+���H0Q�����8�:�f����:�l�;eWtf6����G����<4	�Kla��"_g��_9�q�������$��o�1��(k�d��(E���1���7DL�|���f�*��{�:	j��uj(�<��.��J+�sR���x���U87�zo&������g�������U�[�q_��#�lo�o�����v���
�"Y���n1?�z�����}�&����h�)�V�
��p�� RNV��|�V�d:�\��f�,<A_c6��(���������������O�o��m�nc��n{{��t�^��\���+��q�;&���R�������$`������������7�x��@��N�V3��6�t�
���m�*�����J~������Hz���NQ����[F���{���/�c�x�1@7x���\.in+=�0gT�RT�>?=����R�(i�"����� �m��OdH��J����+���u���X/so��e���>�z8����b���l�����meP������v��3��]�c�-������
��
��"�����������nW1��o�Y�z�8o�!^����;��`�9�����t��]8���]����X����(��o���|7����	���=�4_�;x����\�\�z�e����	�
��e>[%4�bk&�5�x��d��
vj���8�2���2a���+�;�������h���8�<n��}�>�N7���x��8���&bn���k�*Xk������+���w�g�"?C���<����`�Q8w�n5/z���s������>J����,�5�����8��i?�$��2�k�~����A���I�}T�p��&\7H���.&��Pb�P�F��qG�l���?1`U�6]n8sA��.����Q�xU�d8�imC-��8$	��dW1��Z�����0l6�5����@����!y��1m%��d�#�e��K`�.�8F*&��G��`��+����hGedm�C'���=�8r�8g�!7����g�	��="($��b����Xq������z�c������(� ����������������*���"o�d[v��=�;����l��}�Mn';��6�:z'������]�&p�G�6E\R����.o&��g����B�Z#4QD=���~��[w�����Y�������%�#�
����i���}9�����6����aW��[*��[`��0���/8Sn���Q��~w`UyW@k��M��/T��4���IdvP~qH�����X�6�>j&�cz�O�>����,�;���+��R�&,�EpA��eK�D��n��Q�7�#K���&�a��#$���xA�%;K��0����d�X�e�����'����Lp�GIr:��7'��8�{6���^�F"�h]D'���n�`��Z��3}'�m���'���^o���(����S����;<8�L��`��>M�6G�_�pq�:r0O2��y�Y}��"#7���pGl�����Fmz�my����:�tRFF��,7Q��&���^v����p���V�/�H�jy����.�����$���r3Y�?��F4�w:,�F/8*��G�\x@p��1jw��G8$T�ZB�D���*�/�����^%&z��*��6��;���oW��M|oc��Y.�������.�i�Kb�!���A���U�q�O2�
�������������2>�#U�!,��2�H\iD(���D�(��l���uW������Yxu�'�R�zJ�s��?�O�A���U��~E������IT�Wv&25�4���/�	a��V�����:O�}r����,����O+���]@BW�f���)M�Q~1L�5��$C�T���7�\.2E�H���,G���T�M��>\���TcBR|�~2!A�0������7���g6+���S��'�[��7 ��z���Nv��[�v�'{�swii��j���I������������n��mx�t��s���g����w/�_>h��\ZJ���l��m���9�qi���}Y�l��X��?�*.���]���|I#���F��h2�������wQ!ug^�q+�`�
u���0:����?���������Y�,m4��^�2��������,�H�\�El���M	�"��P|���|�)�����`+�W�L�8�����v(v�D�{�%P���6H��{fU��e����
0AI�y9��l�#M��H0�@��0��
�*��+mV�M�s��D�BPF(����2��M���e��4u��3���&�����/zLA�nV�L�Egsl^�$�'��F���(Ji��h�=�� �H�h�(���F%���5Y���w"%���#>%�m;)�R�q�X�����NG>7BK.�����D�Py2�8�\AI���p4������%nJ�FgxN	��7uRd*~�y4��n$����m��[L.�|:FS1h+������+��!�P�\TR��h^i6�����U8=��y9�k�F�$/'H5�V�a���p^���\�5��(����t����B<��� ���
�6�k��g
>�k�*���g^��'��O�%������KK������������L��E����;���rb��l�����w���Z����?�PQ�������?;%��?��uU�����A��M�����;<�����������c������^5X�#Y����U�y:�������1��b(+F�U��OKz �nuu�1H�DS���0�~bl�c�������6
�Z�����u��IR����`�S`�ux���k
�CE`f���n"�u�.Jr�6y�ZK�F����4�N�������0M'��	5��u��j����"�%+�I�/����Q����&��;����hs�7�[omK���>~����O�\���A:�lW�����l=�@��|q��"{�u;��g/.�}��4[�����|����iw}��Z��I�n$�^��V���o��~�;�{�����Q{�x�����7�a��]{�n�����g�|�X^���K�Z�y�v��?yz����/;��4��:�>y�����g���^����P28�s��������9q�`t=�D�!W���6��v��IGYt�QT�#��gW���`dp�t)Z��*���`N������u��G(����s�&F�qF��^�-�w0�O���MH�r��<~$+��Pz7����a�]�|�y����g��O_<{����k/q�<{�,[{�����y��I����ch����"
%�N����/�>6-�����<9<x�kB6���S��M�:���B�8�A>~i�a7�i�8:�3q��_�6'@��I��_�=�3�`�9H
�5Q���=���f)h�Sq�����O����oRF�c���!��)������>_����Ir@x��RXj��sWH}7�r�"!�Y���5i@�)����p k�E�`�]�����oSr'�hz�7�H����Bl�M��Od�����t4�(�[�my�*7�~a��(���d���2gM��������-~~��g���I�B<�����{&�?��=����fU��_�z���P��C�mp:�L��{����H����dP2Eu�3�y�#v���^��4��]q�#��IQ�x/JJR�dV����b?�
C��~�K�v���E��&�F�Z���)������������-��Fn��`
"Q�����3������Y�xR�8�M��.p�n����~��8�G ���3lUdR�����9����Y���k��?$�c%�0x��C����_Nl�q�?|��E�
�rATDpq�7k�
*�����s���G�8�s�W����:�A;��,|����S�J:7�;Xx�� �,�������N'}t�����/��yw�_?�-(�W��~��)_
���(��W��oH��x�~�%���}��A���Q���i�]��Yx�]�'t�<@�jP�l�"���(
������Q:}���l���6���')#Z����s����:��m���".C�GS�e�k�<Z@���'�=�><��Yx�`�X�b��cK�pK� ���������=d��D��~��`����z�"6*�]�2�����	��u�:��(a�,5����4�P<
���v�����$���fi�Q-�E����933��!g/^)���<G���E�����4(>�rc."FUs�Te'��
38a�m��x=R�=��:��n���m���+��(Bvs�Vm�qg���dg$�M��O���5�����u1���z6s[�NhF
�LJ�D�
AD>�^�x���X�}�|:���~}��0�o�bTRp��7*�3�c%_P��F�� D$�����/8Q�	�����$MA>�:��^����v;���V`{���j�Q'\/��:�E�{2SC��
��<=>�MV�G�t���u!F��~��"N��43�����f|E�}����A�������KU��4������/W	����#�����p�$���H4Z:1q����FY��W����r�2��B��������/��T�����C'#���*�j����ui�h��#2"�{;[��Ho�i���V��#>.nI�{����D�
�Q������O)�I����������)��
5J�Un{e];��
�F��O��������C���%6�����hu���2��f����0���N�P�����h��s�)�#Di�2�D���0�e{��n��Q��#l�������d4Y���B�kv�9���s��n�j�-�q�`�8��[�GH����PCk&�SXO���)K7���Pp���<���&�������s�@���d�������8��
z��w����u���p���q������8�D�G��SB���I`���uop�'<)�����M��������j��������@�^g�q����N���NO��^���6��������u���yQ
l��K�A��8���g�@t��Q��"������?�g���	�������2��s���O������}"�a��S�NM)+���M�����k,�{�)��f���[>= wK�0�tdg/P'6��u�7�:��-u��rI��J�2X�(�����~z������B(������N8���1Au�`���u�g?����eQ�%_�}g���Q�K]#1�YC�o��f���X�����R��\8�LK�,8m&�]M���d�x#N���F�����alJ.T�.&���Q9Z2 �U�=��=�L��W��S3`���]�����9��@���m�{O�/P��v��~'�nk����E}G�S�a���

N
�^�v}�q�A��)���������F?����%�}��WcC���D~/���is�Q
�R���I������k���:[��=_GE���U5l��D't��>x�s�����	`NR&�|nl�n
�l(�A8��F"t��h�9��<|���7��8����/����2�����d�T�G���I���R�B���J�Vn3)�UaTN|����m�~y�z��^��!���F�`p"�Y���(d��0��y�2u��YL��A��R��f�DC0����Z��T.d��������H�#��}��X�����N*^�"�������DS���n"�8����?g�����T7�8��q������#V)�
A�7(C�W�c��g��C5�B��)��N�!�(ie����Z���������5�K�@�%0����|Z�c\�����#	���e��'���%�>���P�������vE�������CyT�a�p���'b�C�
�J����;$�9e�#dK�e&�h�_`;(_��4��~!����p�Ukn��;pa����{�M��VlY�gP����P)�	�,t�v���x�h�aX��:|����:��������.��A��v�Q�w�<���av���;�{�1K��;�����n��oK_2���Q�T�J�
�}Z��k��n�y�Z\Y�v����q$�<��]at�H��%�7����qX9��O��Y��dO��I�	�E��\"��g|u�c���O����b`�����c���P%�*������k�����9�_�,�Q#�9W0E�u���T(y<u�1�����2�u>�xX��������C&��]`���^�
W�asj�0�>H��N�+��-��$c��
�m&��
We}�r��nEa(��!E�e.e3^X#�d�����y�����+����d�!��[v�Y����k0���E���&�����K�BW�Rw��Di0�z3}��'�n"�&�����d���VJ)x��
��l#/9�BW��D_Hc���������sj,�Tc	�0���5X����������/�����R��!���z����=��� ��Z�R6�a�����>������%��+���nX�����`��*�A�b�8*�y^�5�|K4����z��,�B����Y\����tH�@N)��0(+�����bp2F��������Q��X���~�i���_�� 8L�`�.�7���+K��j���`4�f�3�Ff,� �q��~�������3�S�m�
��-���H$���6���o�*|��9�n������yK�n��X��
_�jq������`<�y�f��m��E]�3�����CB9��y7�K���"/�j�<���^B/�,�a-����a����s/�_qJ��x{��$����S
�>J�}�i(zuE�+������ �e��(�Lu5i<�B=g�������K���@M�����	\���'O�0�NK�l���K��V���n��-��1�v����z�0���[;!�aK��/��_.�t��N��-vx��{������zjl��dxN3.���'i������Xk��I4�S�(���)�gb�B�
����$%�9����4����{���!�q	A���w��h�A����ra�>�2��rg��E	��P/O��4�,�[Az$<��+�I��
�f3�GM��HN����x|w{����<n�DgJ�x�	<��������O#�i/�����S�_�E�.�N����o�B��O/�h�C8��������������$�U��`��@��P<6l������S�����`>^�=
@�X�$�
���h�	
�U��hJ���'�+A��k_�@���s�������?9�����!)Q��(�����|�k�I�5f���W�"�����������g��E�tU��J^2������r8����3H{��_�?�-dc�k�4~��q�U�KF4N1�w��B<LJ?���L�u�(��1���������\Q
d~
��'�6��g�y��^���GZ��#\����z3��8����}���c�B44��6�;�:��������'���eZ��6�!���1x�9�Z���d�R�d��&�9��n��b�����e��u��}���_i���\xlFU�����>n]�u�/\�K��z���.�����/�����r���Md��� ���k�����Wb<�� :�vz]��v���?���~��a���r�>�9<��d�s+��!A|��X�#����S����6jV����f�	o������S��N��n#X������G�:�����-����u����(��=�����~n�i7�,�7���"����?n��S
{�,1�E����?�����_�@�9�T�������H>_�_�f�%i �DIdBK��wu[����0`HN`` �I�������63�����nLr��������5I�����<9����T�����:�9����~��Ed�;_�6k�zY�q��(+h���f�����i��B��$cVn��&��a�-O�Q��8[(���K���A�p��p���f��;PF�:[E��1T��e������5%:�uV���):c��������5ye�;������p�w�<.:����qA!�/���h�#����u1�o�r_����N����n��sa{w+�\pM�6�)55���q\��1>�i�^����?��)2��/���P�@�K��
D����r��3���k�R��h5O\��!9v��\3,����Y?��6��N|����������Z��B�}�>�it��0������A(���������rC&�b����t�x��@;��p�	�_��>M��1��	��k�M��qmu�\W����c��y���z�A. �s���J��*�-���U�����0"��w�2�%c�a�q,��m��#Kwn�iCT���hBNE	�����]�JJ����nL'�'���^��>.�Q���J�����3(�S�����]7LyF���|������T<>��/��^'�x��^����Gr������L��HI�9������7��a�����t�������dE]�5���33���f��G��-�Lb?���*<�)M��.�� ��E)�.�����0y�E��	���\R�����c�5��!������0��
l99�.��[�-���,<N�A������C��S����u�~s�J�:���?�4��\��c�6 >/U����c�\�j!���Hqfp�tCD�LU=��s2^a����B?�il�r��^��QFQ��_�R
�v|����H��E�(j������N���x��e�h��X��&����a�a����6~�\� ���f��}�V�@�vX>A�#��a{C3�V�e��^��r�����Y�������������/���*��_?z������x?���m���z�E�Y���
M~:����9w������r@��5;$fu�F�8
f����KI*�P�����(�<�+?��7��	Rqy�Ya�����i�8|��jr�?���	e����dQT���'��	�6�H�����J	�l�&��;�1XuY-����$���.&j#']I�Pz,��.��;{�C��n��[�;0M�2�|.�J`d�e�����(.�^�k������Ggw����yQt��E�y�|o�67�Jn,�����f���=���G	��L�G�,��g���[(�]g
�o�2f~��-�F���V!f�5u������
j�8�srA��j�H;����$=����Eb���K�����M*������_����qz	v��Tk+�av��^k�2��v.\A���#6����9:����'�5�U?;����)�����O�|��O��/�����m���QOeb���|�2@�
N�;��MggK������f~�G/�5}f���^o�UwWW�x:���k/�l�8�����.��p��Q6����R��8(5�+�|^8�#K�c��c�z��o�K�����5-��=�����	��yh������p!�����
uoHZ����w����4��E�pl;�r��F��*�2((A��
�;�3N3!ul9�,��R]��?�/.�0� �����h���!CA����mqM.�D`+�V�C���s�E����Z�i��,�����6A���N�j=�{�n��������`�������'%��j4���/a����"�:�T���[��<l�}).�\&#H��-���RA��Q�{�_P1�������U�?$=�@�x���D�L��G����--��x$$���$��u�J�ANx�8N��*>3�($�Ld$v���8�K�����ncW��
pc.��a��
��Nv��"�1g�����{1t�������kB���~�����w�c�,
����V���J�"�D�f�Q.V��]��Z��q�D��7K���%F�(E�����a�U:�����8���R�\���2�	�?t��)g�d�)�u�c����pt.U���i^
c	i��S~��ML���zP&1?�d�@����H�-}�-�
�����[LG��T�H
0k*�\������T�8��*WzG�����H�.Co��4�P��8�2��&hT��u�E�WQ��U��/�z�R%=x �l�+w�?��g	�A�5kP�6C[�d
Q�wR9Xi/,�����b�I�������R��D/��h�S�F�K��r��PX�z�
�Ej�(p�7�L0��&mR���ww-Uk"W%}�toA��tu�"*af���R%�Q7�"X����D�P������{K�������x9N(k$3pE�Wx�_p�][����,(X�\,�W�R~R��
	/4W/�]����{<&<(z	W�Cv�n=�
�cr�a���p/���
3�_UH�����xV@��yH�|
�u[���u�T��$��"9�~�?MyZ�%b��M"m\������A�M9������)�����5�z����0?B|Ft��,�a�c��}`�b�l��D��"_��4��Cx9�F0V�7��8F�[�?����;^?��K����Q�:�����1NE1
��1���9��-�����g��$�K��a�|=�$���f�z��~&�&HGn��V!K�J�>M�J/��E}�9w5�����j��Ie�5�2�C�n�P����]@TRFJ��Dh����3��������
��������X�_U���i4{)C��d��`l>t���@��;�PK��&�x��j4.^s1����y��������,.�K��9�Kz������1���3�Ur���
�v���_*�0��1���}�A-#w+��/����jk��{c��
G�{?��k�i�<\���k����j����xqz�EG�
����aE���x1i3�`��[�1�#�&)������8��{�BYU����8�E&���2���q�JVX%c1����=�W��t~�S�$>H����~��,3=�3�@M���7��u>�Y7�����Nj����
]�+�NZ9m3��������z�IY��4M�vC��x���OZ�DU���#��D��y��>]e<QO
UtX1�.��M�pE$�J����on���|�����4�[�����������dTv\��q���T�^F���7ATr$�6b����Vr�d\���;s1������&���Kb����u0l��k����n���������{b���'F��->�2���Y|��J��b�E����/	�e����6,��N=��s��Y*]�tRHt�4�,�r�<X�Cx�W��4(��Il�\5������A(����!n<�?�7�S�	�T�������Z�-���WG�^�����]��H� ��]0�Xe7��|^X�O�����D-�p!�"Jc��D���cj	�������l�y�'�e������b�eb�,��j�TB�o�;�jD%&���}Rz��m%!�4vT�J����#����r�K&Mb6��E���&X#�?�����}xh�Z��[	Fe�r��m�5l�9>
���$�9���
t~4V��w���
'��H 4}�H��:D]lR�u.?��b-���}�g	�1�#�����i\"\������'H���d�g�*������dh����{o:��"X�3H{�����]�G��1+�n�q^3	�79V\zW�rq����.q����y�q7�$��zM���_���$��.��e�
�4�j`�t�E�������A3�v��HD>G:C��$j��p6�	���-��������O�
��f���YW�3p8-�t\#]��B�Jk0h���b�z9�qv�`���]��5���bw�G.��,�S\0�2t�`p��m��YI0g�1;�W�_��?9}������Ir5��`.��J�*3�a�|�� �K!2C�WN�;}G��;js'�t���\�
W�E��D)Q9/��Q���U��t}�D���E?)�x/��j�~��r.�O��>�����8��|�q`�����lw	�3-&MZb�@(/���h�k%���:t��W���}���%D33������b�7���"�V�C*�l�%}�
�g.��%��T�6U�X���gm���L9�G�;��t��
�d� ���F&��c�&c�M�w��Ky�R����%������H���1^���?��m~f�fN���,a*�NL#�o���<;���C�a���~�0^�M�)Oa����kE*�"��^�+���uN�N���p�8
<=���S���)���#�
��^g�R .O�m����n�c��A�Z2m�oss.��=J�r��b���ln��1��~c�/�����������]Qz�;sR�$�5W��`-���+^dc
����_�,�4��b8����/�Az����?}�����������,������;����{�g@2fu�^�3�i&��z���f��$6jr5�tB��3�0R����d�N�8V�l�u�;���!{�����z3��6��A��&���[�/f��U��}g~~��>o�\4��_��W���w�J"��7��i���d0
(��G���}�(�_]�����~����~������������d��TN��7yz�vd��3��P�}�vaQ�g��{��1��+�aG����ep��O������1�`Tg@����-��jZ�mZ����w�E��H��%�|v���/�������)#�i�����y��;�H�'�Qg��B��c�f�$��&��#�� 
����w�X���Z�I����;��^��N�ky��]�2G���#�$�h;�������p%��R��������a��$��_h�2+~�h��|}Y$�I�#IC=}|�������o�C]��;���dC�/�y�(�W~��W�gi� ��{7����Q��2����IMIE��?<
Y�:6x������:S�m'�b�{G.'�)��;����8����?�.�8nu�<�hOL�[@��4���
����Y������e������V�&zp���W����T��V��U"F���_�����w����]�/���gJ~�����P��f�����vAl����u��Hb��[���$��� ���`�������'�r����B������$��
�����H-WB����~~�K����>��Y����x�;���J��"�j��!�w�0@�k�y:��u/��3���������^�$[=O'��>^�p�t�����8��N�6���e^q�m����~����&6%QclV�]U�/J�8-O��,��Ms����;E�
�*L�����t0���Q�>k�
������?Y��v?���
����m����Q4�k�����S���o&����������oi��wh��L�gO����������whn��uK���#��{����q_�����~2���"�F|L������^�`��oW	��<�0��:v�`��ye�i��7f�,`�;��������_�H���xP��i�m�C8��Ak����������H����?kV4�r����@�3���N-�_�g#����|��G�g�/��O�d�p8�39_f��1U^��o��A7@*���f��EB�eY�o 5p��YRC�����x���:�Yy�XG�1-q�2	��*��Y	��wR�����S�����B�M.��+��������|�.��w�u���V��;Q��K�����{\B�����@�@?w��l�y�	��?mAK���w~o���r����.Uit�W��c��@&	c��WNx����]�����U�w��Y%?7��U'������jc����D O���6�'g�c���B���t�5yp��$}7�0���U�*k\]��s3I��;;��'�y�����<~���������iFS�����
��4�r���6D�|��U�4f�������I�n2J�/���T[�y���v���R�����0��o��$�^0x;��7�1�	�B��J�@��@��re^GsT�R��j�Y��p�hWG3���]U�li.���%������*�"�������5N�i��U��������uwU~����j��k���n���W�����!�)"���-���1����i���w���"�>W��`f���a����J��(U��^��f]+z*?\
����1�!q�������
b2���Kw'^;uH	�������k	8��������Df����v%@gF!�,M����_���<�+�rdD���|�]�h+c�I���E-B[k4�wK�cv:�������9���:�i��'I�n������{x������MT��8�i��x������hR���
��������]���qV�=|cmJ�-�����f��7.fB"!4����	��?�60T���?����AN����Wt�~^2���������O�#3�����F�nj:�d��(/�f=--��u�6������AFt<Y�kJ{l�?1�#p��^P��X�O����@�2����9H�Z���T]
�U|I,L47N
�F�u��������l(�+�AO]�e$m���.�����]��A�,t������&�"��4���p�[��Lr��9��#3��i��%i�u���
)���a�g?��P�7)kb�s�Vn5�d���w�b��7���#��U?I����[��tG��b�������1�������Ez�0q�0
�01>k����O�����B���~�v�)�n���������u���������
�@���.Eu�J�.��3��Ss���`���H�x��oU��ux������."�F��$�()��a�v����m�@���.]�hQ���d4��Le��A���������� �tq��1��+V
bb|&�vI���C<�i���u��	������ 	���1�1okl��nSh�_�����R-����}e�]�T���Qm^�
���� >���8��*�3����������+Y"�
8E���F<�s�C�eg+��#8�[p��U���2�{�����dLL�wd�(��y�`~YAg�fM�9i����6����h;#�5���[����rx��K�k����o~S�[7*��o+�~]!���	�'�r2H�VD�����i#����1r�HXi�Q���Q���?����s�����V�h���k����x���~)�b|?|�����ti���!���;#�b]�������4�~���<��*���w��`�|�5��r��]���|�Yx�g�L����h��Dp��3G*IP�H��\���1k����e���/��Efs�������t[R�N?mp;�C�X}k�����v�����U-W{��b��D���t�K�����4����Z����.
r5K���(g��9�++
��Y��U�h5
��NCZ�6H����+�5_(�/��w�7�����L4�_���
�3h�|#�w����w�i�G��<yK�.��%p�^�t��$�+�C��
�[�L����$���G�!����@��!j����9r��q4pw������X��� �����,��k�!s�:�r�J!rJ�}s9N���H)>K!"�j?px�
���|T����8���J�����'V��	�
���)�xI�s�tm�JfK
��������&�^z%)��K���Iq�(�bF���i>�����h������h�x��t�4)���z�������~�"�t�
�B�P�iPJ��m`�m��Il���o�sD&�����'D��83�dXhmUg��������
��[����:�m�u[�j@�@b���O�o����9��s���X�R1���_��Q=�����G�X�#����8d��k�����V=��K��C(H����G�!vr��.���EpQQ��X�7-��������md�%.�N	����^7�k��������K�
,�	���8A�������R*���I;I��
���������=��.���q>���U3M����8b������(M���\:R�L��I3��M���Cs���BM����W��fg�F�0��������/=�9)����X��v�r�8�.����hQM/,e�+i�E���8�wY��(�����4��
0��$������D�1`���TyU�*�>�B�N27��N�/����Xn��iK�����J8���A���'��pv��)d�F-�%�3�������*6/W��6���Y��V2�����������+��Y}�����K���li�4��;���VQXs�q�����;'L{���u9���9�����q�&nv�F��)!u�k���g�25x1cP;���`���B�M�w�/]�n���?9={��~A3��fb��Ox��-���_*�^���W�i��h�x}������VD`��`O�1�L�W��9��|^cV�w�����:GgN�~��:���h������+�^��4�1gr��	��
*Xr|T'����.���K����W
k�U��D>_J���~��c�|�"��g	z�e��{	�����G��m���?�y�����$��0<_�pJ�a�N�I������@��oC�,����GU]|B��%���|}�9&w�%���q]��m�8"NF�������o�g���������mLR�#�h�F]�S��r8��7\��Vq�]�v����+�����NT�h[(Zk�>����\"4]a�d��o	�[���5�4�RA�Fa=/) $}C,�-	�y���B&,J~����+�g�9[>�)p�s.!�Ds�n���2���\ ��	YBn�_Kuy�����z�e����{�L&V��������6]��n���M���E�]���F��V���f��p~CgU�*l'�����~<9�*������8�Y���QZ��������h�����qz���:��,��@��S�D	6I�,2���xt���(Y%Avs��v�|��f�� e��V�)���yRLj�����<7k����/�'N J5HV�������HN�=5<���|�=85-��kiq��R�hK&|d�\����j�S�\)�SI�C`)F�W$�T��}��T���C�_LSjR{��,�1�!����/l�;���n�O!S#*|ra��S�7�1�~��0�`~���?A�#���<��oF���
j����d�lz/?8�u��5���`6�pI��%�:��kA���X����$��YND;A��fCn9	z����M��sl�U�j�`��Mh�����a�m�I�O�"���0���v�u��������v{����d����������k<;����z� � �iZ4H����5�a�w��9Ba��ol�������.��j�����N���;;{�����]����j��/��%0��T��?I��������q�6���o��;�w��^{�wo�w����nw�����E����I��.Z;�{�Q��tdZ�fk�>�?
3�nc����fI�7/�_���y��|�t��Ir��m�q��y����]�8�BC�c�������{��uok��������/$p<����6[��
a�F�H�6@�#9{�h�o�q���?_l����go�v9<�9��v��Y������GK����h�j��]�;�s�=n�-���jo��6n�TR
��%�g�-����~�j����������s���6�;��~�;�Xr��Xwf��q�}��>0w��6RN���A^d�G�������O�O���%��o���r�T�=�^�~����?�*\���UsxdV_�|������[5�>������z�����
C�n����`s�Oo������N:�^�����9#P�K��~��^��K���v�q+�����[�h�E����x���W��i-9�a>�\JJg�&���f���Z{����@�Y8s����;� y���1��Y�.���m�:�?/����l����uc���FY���}n��5�� >'�R����<�eR����Fo��?������$�U�^{��?�C�i'���G9�f��_�d\���U�3og�^�mL����W��7m�^�]��hU
�>�Le��ut<{]ZL�U�����l[z�:^e�Mi�&DUp�_B���f4�EH�$�,������<�M\/�4 ��-uex��1y�XT&���z������Uw�\��I,e
��N2�r������d�\�T�6�E�V��l�Q��?[@P�h��;����S�����x�
_k(�_-��_�p�g�x����hf~�nX	��*��t��t���Z(�$�>�2s��y�@��2	�i��d�;�^�C��������6Z-sw�^k�EzT�}�a��U�Y�� �8"�U���n�r�{���0�\�K"6��Y��<e��w
�5�{�XniC������x���b�b^3�/������1��5�*-�r���#Y��r�������cA!,w�CC��<ycVEj'�?������)���*�es��?8�Z��o��^77E��o�C.����k�_s���,y�gW�������F����i~�AN�P��;��6���K���[[�k�M3z��l����'����jv�	����$�l�n��D��[:2�[�3As�N� 3�(��BL3"���.H�;��M�[�8���o�V������DF>bwY�w�;D����$#:����A��������_���
�{���U*|Oy3�h'�u3��A2!�A����jo���:��������H�TT>c6��.O����~J�P:�I�h�;���O`i��\.�q��]-q��EM�n+5+A�t��@{�%��L��[����h�q����������6���������L���KyX��k����\#��R�J��T�QGl���)���9h^g{�#���(n���6��pC�L���X7eR���l���a�Vh�qfA��
L��3�?���	3�'�������P�L����xp9F`��7�/@�n+��\��@[�lDC����5�c��S�<7���U�����k���A���]7���u&nX$�M����Al�1wuG���	��+�{��M�%�O���n�|(w�M�:����k�}���+�y���-�s�N�w��6������z2�	�:������Fy+�Z��12���!\��G������=��h���=F��'�O,�����Df.Od�����{m��{�y�?������zq@�Z[���Z��m��E�&�A���; ��R�7�t�����8����Z��������8^��y��8j����XP0�RKj���H��� D�+���������������p�E-����E-���Z��[��
��~-�h�\��=(Z���L0p/?M��k�a������t�����;8�w���7�
V���	w���:9��.��/��W�{�{\(]����g���

�t!��J;+��;#%�v�#^����o����5w����-��������W����|&�//��9B�y(���x�f����o7*��
�����[���MsO"*�B�FVnk�b3ua��4UZ����t�z�� �jU��CY
��U�L�d��C�?j�H���I�u����Rdz�ET�����;9M��FNu�D#�*/j���u���m��=��FNVn4���4��E	d�������``���ao����l�������9VTEQQ>����J�TwYe�o/M7m��s��
�������]�I,��LS�c.����F��S��sB$���A��Y��f�h����?a����vw�U��'�sTnR���fQq���e��U��,.��;���	�<guL�JK��R���b��I$j�TV~���`��_V��'^�uY�]�FfC����A��^������&;�f��s������w����;����k�H���]�/���������t���2asl���~k� �n	bh��f^5�U/��W�ly|b��G���!�v���v�
W��u����6Y��6<����Z��`WI��������>�z��:�����v�����k=k�um�gm���_?�z.�F/D
�*�vz�����k������(Q�ZT�Z�+����C�y5?J����<��?$����v��V����D=�C�������D��d��#$�
D0WR��Y��P]��ZlAGskM*U������e$�~�nM-���@%��/X#�+���%���i:��#�?�&�O)����6����Tav|����=�/��?]�3c�hJx����s�������x������������Z;�CZ^�{=|5E��K�VE���������VD�C,yl����P�a�9��EpRN�������r"q�@}��-y7r+���k%Z�c"!\��n��la-�n��0���d�+R�<H��S���o�O����s�[�g�������`D���;��oC�g��L��8��u������GT4���������_����^${���v�b�u��������M�:[���V������n}B���i�a������{�����c�n������i"���� ���U&���}��*%�U\���c��Kk=������L7Z���WO	!����(��PL_g���6��"L���������>`�J]�i��{��l\�;N��o�e�vU'��<�i�v����v�����v���%^�q7������+�mHHu���5�������t��k��}����E��}�6��n���]�6��v�`��z� u�F�r�����i�����k��mm���lw�������#h�[�eO������/}��n��^+������ez�l�2���^�}�����t�.�6��UNg��;,�����r]c�-����{E\�[�Xl�s�t��T��bk���N��v������B���"3�i�����h#;�lq�p�����gO��L7�eJ�k��w�����gf%x��E���:�$�u�)x^�M�s��w�����:����A�������Mh2�����n�nP��<���v>HFa��y]��8�Fm����y]�q~���v���>�����g��V�rA��!��/fu�0����y��!.u�wM'9��N��.�o2���{�����2=��!)(uqn�.1=��e��]���N��j�"��Q���W�\�(FY�8xn;�&l�3��m��z�R�.v�=�{�����U����	��m0��D�h/�]l,��A�H�4����L�������Z��y�k��t��YUyo��� �_~�ib�M7��{��'���'���=LF�~&I���7�^<� ��������p��a?2��.R@��x������3�u���u���xf��m1��	��#��bs5��4���<Sc�����/~=�&i#��(��5���7�rn�#����^�����3�+�k�E��G$A��u=���I�/�>�&���RW�?�Y�C�g]��|4Y9z(������M��vr|P��C����^�~N�h�<�������a����8��W����������������e��x/��8��^b���<�$m����~:~�.)
3H�a��������&�^��^^22�MJ��hf0Eh�v�Pir��������SNuR�L~���^_�V��j]xN���R�c8"����i�D=@�'�_F���;wu��������a���]xx���$WY��������E=C
c�0%XN\�
�7!GS��t��C��u�j?/�����'O��=�
�|�9�QR�/��t��{���X�����	?��h�|�qj����H$K���M��+����f��lfY7Cf�&4��nTNi�L�`���f"�j>#���:nC2�!�w6H����M?��h�7��z�Y�������o>2	�#�0^���h%w�N@��E���7�mq����]���df�����R+i�1
`����������
_H���GZ���P���"��W�"�o�'K���W�"�&�p��~�,D������^�S�+��}?�	��G�)�
�(>�Nt}�B��p��S�^4"�e�� 6�Q�O"������~�h�An��A%U�`d7��
.��ef�G1q5}���C�Z�����u���|Q��6h���\�~@��1�9�h4��oYK�Y���x,K 4��/�������������z~�XK\p`[mEQEts��=��S1�0����e����o>�p��-"uL
#Y)�Q qi�����
(�3
�o�/��E����~�r��m�>
�R\��!���;va��
���0����nI���2�B���R�3������C�{�~�������	���][X�_�F��J�
qzE��;r^�:��j	�vg����[�Y�n���j}�
,C��4�+�6�������_K���C�bJ��q�]������������� ��9�}	�3~�T�O�A��{��I��CY����m,�h���*:u���#P	��.��J{>g��7F\�n�z���$���Yo��=ix1��� ��g@�@CIv0"?%��Km���'��Wi����l�9���
PY|��n�&����]u��4�
*�0��Ec-�|�O�b���<J�|���8^ji��pm��i���\-����s�������kZ�N��
q\�V2�`�i^)��}%���-g�CT��
)����<V�>,8��YL$�=\��\"@�?Hq<���!
GQ{�+�I�a��+���L������������yU�nu>,o���n����V7p��
	�B��2o3llq�Y���V��-~���n�qk����fY�\h�r�4h�th�?�1�<��&�H��Li1�RoO����_�m�>P�����&M�:T��z_�[H�jMkh��"�eI�f*u0I`��5���d�#X9A��k�s��@��x.�O��9�Mn��	�X��m�
"��:4����zs�e�R��3����>�-	L���2�����3��v�]���[	������p������	!�D���\��x��n��nZ���������f����(yW�?G���*.��Gh��\in���r��-�k����5g��-���W~�/?���-�xI7�'�PC��PX��6 t���l��`#�fD�M�AK�h��#����������e=X�5��8�������W+����>L����4���$���E��l�'�U����&���&��1?X���75
b�w�9��2]���Md4�s A_e<1m��h�C$sL���D�(��t0�J@�9+��,2���g_�sx�`"��0�
8���J3x��s�S��z�n2��$2v<;���t]�pq
��;GeD\	y�'Z@�#���,':�v<�j�=_c
*:[6|�V4�P����	��iY8T��n1z8�������*�Ac���z��L��*��W��aA+ 
r�iY�w���{���;	},+�j��|����o�4�A�,wK~l��?i��D�J�=�s�S�����k�2�}#�A7SK$7g
���.����c�p��%���n�S�r�2�^�?����z���dR=u3�`p�9�6�\7�����I���_3s������~��v��%����������Z��z5Q��s�/�����)�_��A<�?����������~����]��Bp��f�*!b���,�/��@�\�c��0�A���/�������{!��z�O��whQ��yG�>�aX���%vC=a^%J�}2��~4�0��6!�sd�{�)bvR�P�����K�1�:{^^uS�����M����wK3X��43�����<4���=��=5�L���X&�]���������$��7c�A�B�����^h���5/����t��y����"{�|v�Z���������g?��g��X����r������^�?W����r?�n�cX���:�avXY�z�#s����@��j%Kbx<HY����`��rV-�k�`�����	x4�4��t������A��� �J�e$^�1��	p�-����g�,b$AE��]Y�/>��;RT�/l~g��|���T
d�W���uG$�l��M��7�N}=6��#��G���*$&��3��\�
W����a<V!S�;*�����-�*0�Yg|��&��8/
���S�3���J��ZC'zA�e�*��E����i/8�%r�39!i� \lrtLi%��x_"Is?���0o@S��:`�S�Q����Y������/���S���3��i��������$�x������4�����7����Oi't���c#\�B%�����E6����v;]`�F�3"�\c`4�V@������ud��������Y���f��������iV�
������~��[�����nX���P�c=/&0���o������8l,a�/Sbh�BT����o
����dRc�L����VP��Xh��uJt�Fc��;%��.#V�!^���DNC�z^S���.�b\j�u3�N��Zs��>�dC-cHt$�1��8�\��MK�R��B�%&���G��
	�/ �glD�����g!'�1�(7��@'u.���Xj�����lI{�'7�z�~�ji��/���6�3�~}a�}�5UG�8C*O{�%���H�Q�&�Al�x��y��k�,��-��_`6[�D����C���2i���<Z�m�=��<�B��RvU�2V�vUh�mu�]u�YD��9v�9�����/�m-�`;\���
=Z���S��j�<���I�Yh��s�v�dB��:'�~���pL�4q��Z�M-��4�,i����S���T��&�t�����3����Z�������B�o�R;�|�j���s T�
���[���������J/���s	�����aP\�����g`��b����W$a��3=N��<����S�����J�� ������|�C� P�3���e9�(xT������("����1<�c��>>d�1GG�!��Zt0H�P�����DR&>N.��V��z���R7~8B]����
 �������M��b
�HCy�N�a7��S�����]'>����I��M�����b�h�{l��i��b &��j���l�X��3�(�wiw�����DM2%��������]��L�����H1������6�����#f��X�g�m_����4X�9]6=��!�Z1~(�^9�b��!�Z2��vR1&��|wX�Kmdh�B!H	���Y�V�W�&������q�$^^�bU�~�!L#|�%��,		qx3j������UL	��������D���AJ��I�s#3��_�h�U�?g1��l��i����!�2����b�d�nZ�3E���I\��+	0$4�0.�!ym��@7�A����>i�f�N7cQ+�xa��B����e��)�oj�~�M.4@�W�^��XG�p����4(��	Q����A�E%���g���5p�5I�$>��P?���/�%n�Eu�)i"h&��!!�2u���^T��sL~�43|V�;����b�O'*����A ��'�����n�u�L���������&H��>xK\��)@	�>�#��)��8��������6@�����3COg���V���2�iNs�6 ��s�jc�cIZ[��MZ���D�����|Y/���l�N����4VJp\tf'"�kF�b����`���e�`�XQ ����b�����~8�z��:�o������
�����A��:MC�*����y�;n���DM�rd ��li��4)�jh�|[:����$�@������\�����������C�����i>`G�u�N�,������N9���j�<&��;`
�A=�������w�
���m�q����8�1r�>7WS��e���R
_��)Je�$�Iq�x���l�s<(J�L�K��k��l�� S�/����U���/[\
M����%h�>�����&�B7���QK�	����qdv >��'���gq�v
i|��#su���d�_� Y���
��e�3��Y��w�l{��y�������.���%��e������������Ol^�Ll`���C��O\7i�>EPd*q�V���y�g'�>e�N5cYK��i�1���%�>�Mu��
	@����{������z���Q\:p'�Y*�rk��<BB�s1kM��;�U��d����3/���C]Y�:�zc}w3|������__���|�~�g�i����2J;�pLg���u|7���:4�����1����f�8�N_���	|b@�x������6���w��G��X+
I)�e�]Y����}d�Uo#����P�r�r{;�v�����e����V�.R�hb^Pf]����T�4�����o��@R�O��/�]G�����
{��G8�����~��_�~"�"����z��cHJ��<����(h�
bW��"t��{��w�i��]�\��0���A�.zl[�|
��������>�0�Ki�����E��G9����6�����B�f��A H�(��78�`TpD(�(�7Z��z�J6���D��.��7���|>(Z^;��[89=;��=��D�K�!Z�����?����^-J��J���%�{��N�����Z.S�#6�������$�M7L�YWfPb~a��r_v��=�g��c��~H$�d����G�-���}���RU�J�R������Ngg��� ��4f]����a*�{F�k5+�)nE2��9��t�L����x�pn�B�\	V5#��u�?G�supK�Tt���d
������l�N�������i���!�3��zi"q"�3��S")��nYS1~C�l��Bt�#���oD�������'<�����%�����2;6��[v�@b��p"�i�l����
4uds�!�N��dJ*s��5�|-�Pt��3� y#�D���M�7�	�!��9fO����j�������*�p3��
�H��T>q�+�q�d
���6����W��)2i���:�.�����W��lc�����KG���-UI�(&R�[8�H4c�
U��qF�T�!�&
�5����(��s9|�f����QW����}._�H������h��vn��z�>����''��b���h�HR073�+�r�=��	���?�V;�:��,��fpDb�M�R4��%D��=>45�.�__rfv��r��[4�
��d(R�:;����?���f�g��w�K�~�OW�n��l8���&D��,B9`UK9��%N�w0L�zpXa�;E
S�F��t�~17����L������W��g�����@��vm��|���.m�e;x���<lN���K�����?���a����d/�tZK�����8��-�b���c��<96hQd��'�d���IQ�Nn�,; j*wk��X���g�K�|��S���lJv����C�pi�HZ�`{��q��e�)�2�������t0�����}�� ]A�Ok�_g6�k+� X��\�v�&������'��������'A�k
N�r2K�a��-�����bqOS3|X�+����~�}�_����gk��y*��}p��MEz�E>���H�] 6��y�~�V
�M82�o����(|!.E�.����Q?���9\��[���������yk��E��O���X$�i|!i�v������|�����y�s�X�"2:=kG[_������]�`aUn�T����i�U9����#w�9�'3 ��9@R\X-p��R��#;����7���o�����-K$$�Kb�N	�����k�0��&������B�~�	4g){w�/l�����]����O{a��f{�y�g���v��|�%x�ocKI����.��kn�O����O�6���=�k�l�������v�w��v�6hK�����n�?988�����bGZp�����V{�����j�d��h��-�\�_!��Br�y�;�X���L�0��`%�u�E`� \9�W�rp+07���x�S�\��Ez��Y���;���pj��C�a�����x�}c����������|nk�3f����*/>�H�d3��2e�	�����UtZ����3~!X��]�;����=�J�$���*��y�/"�W]����M<c?S3_������_���
+��G�N��N����OO�������'���7��W/�����E�����TtXp��Z��vC�<z�����o����Z�@gf6\��T1ySa��������5��A���D�1R�Yz��
�Nws��}O��i]8�
;d6p��/��t��d�5I�e��#W��m����GtrC���u�M�f���y�>����kU��N�2�'��'<@0�FJ'�a��6�����*0c\����^���q�k��"g�P��b���$���
!�����7���\���"�|r1�`<"�x��<=r��*�I�-r%��U�u���AIM~�I�':�4�f6`\/ShY]��	!tx��iJP�����.f��n}PQ�3�e��:��+�6�mY�e��A���0�P.}�	G�Y~��m���������PX
�2�&/^������=������k�F��Nc����M���>�6��#�+�e8��v�y���,I{�yo��>�������v�����[���)K�����r$��Z���n��j8������6v�fp$�
�4GbKEI7,Vk����Ur0����$���NWkk���`n����e�|�P-9+DS�hw�aN���5��%��)LVU�S@���d��.�i�B� �yLh���>���J�`�X�
[L"Q�y�C�9�q .��K5g$�*���Td	�3n�%�-�e��X���ko���K����PX� ��'�!�����?@mq]G���[2e��E_u"���x��SDoA��x����H'�'������'��#�rFes�+$��������O �+��)m��{C�����������	��@�zf���;a�V�`�EG=��!,���H��W��q��&�-����������	G���������I������J��k�Fi�������~�82�x)��i�]I�u�N��s�[���,a�����i�I�
/+����.�u�Z3����R����
rS���=�����M?�<]MK$�:dD
^$.|������t0�}O[�qu����7�?�Ux���tQ��p$p6e���C��jXP�T=��� �0+E�x
�n��H���M����Rp['> w>��������cn�0[~�7?2�L����g��??}j^>3���xl^>9�����x��{�N���w�����m��L8��S���GgQ��>!R��7���]=��T^l5����;�4���zF@u
�����r
����:���������5�)/<#�n/T^8vc�=���������(+�j�VS>S�$<�o;qBE�aX���=(%r�?5eJ��}7�k������$$8qV8;-g�����L���(l��'���
|&�*F9�E�UTd/D`{��wDh2�^���U6��
�7v$��� ����#�ui�Y���|/TxU�8Z�Ys::�D��i$��r�b�^YL:%'�c���� }�[��-����.� #M��/S�5r�q�Vp�r�u+�`�:X�8Z���T�{sy�'��R��-����d�`�|zi�!f��>�2bE�d~�Ka��c�j��K{�	������a�-�7�3��h&:<�����K��Y�(L��l�W��I�K��$����9�h�g�&����t02\�t��"A����p@�V����^+������o:�A]8LX/x��C]RA?��|yI+����^>��
�0s:��h�0ckt'�W�N��;�NRIqhoH5����IQz��GB�'���I-����L���L��,6u�F�2A�MI�V�M��t�>aC��/� Mu~4�k�j�6��%i5M*(>��-E�j� eP^��`v(�����	������
��Y���L�_8�0-l|c)����,�'���]������3�E�	��*�@n{4h4��	#Y�LL|��I9{��T���K�2�����9XI�s�����p�>Y�T������Y�.mz;3bR��\���9��<g�Y���,�+p�&�N0g���J�����J�_�A���?8x6���m:�����\�EL,?���<-���>:��	����q�f�N=e�����A�n��Q�����c~UrG��[-�]��y,���s|�I�1�-��	k3��*�K�r���s�
0s��B"�CF�K�|�j��8c�z���'g���y�$rw>�/�����}��5����|Z�a.�iWBng���-08]_��No�
D#���{����&N���,v.b�����[XC{t�uF���|j�����A�^��V"-x�g�0�����g�h+����`������X-�@��c����T�g"��%��`6;��5q��y����a]R(?��}{�������l}C����B����Wg���uu8����'c��4���'t'O���{t��r�"?2�
��v$�$�X�0�l�����C�H�I1H�'nBO�	��!���L���3n�K����5�>�/�tD��Kg8��oy�v�t��]J�X������7���[m3��6|y���O�u���y�������K���Y7!u�^�n�U��r�8���	���.G�����������>J��|���+�]�����C���W�=��Z�5��9F2NsRi;���W�������/�K��VlM�.q����3�J����;��o��Z��k�x/��{�������^Pe����;D'��&�}��k�4���E�o�F�#�7�A������(� Rl��1�As�������b��xR��v~HQ|��`���z\��"e�W�sV`������6[������c]�P��y�QJ�������[e�qs���~��J,0�h�?5G�8e= h)��$�6XN4=��r���t`@��W�"��S$�Y��y��t�v�lTf}�	l�����B�B�!�6�A��p��D[p��b!A�_c������X��
�H%�4:��t���.W�2�D^NM���h��`��0�dl��x��U�`�;H�s���=Es�Dc��5
@�J�$��U�mF�����N�#�J��Lv���	�	�s�J�S������Mm�BQ��,M8K��TC��_
]���l^�K��k�;��'�_�D�T�b�\B��&��*��^It�8zQ�\>S�I-O��+$uf���L�"�z����=�L�R9�v��=<�R�]]��Ki��f�|���~��������}������U�G|��P#����R������������J�a��8�H@ �QGk�y�������6���YUo.8�x�#��g`���f"�������CT�������<<�?`8=�`�U������o��������-J+�Pd��$��y�I9���
�Z�f7�gY���^Z$tj�.�*([YWX�@vh�Gl�vB�b��"�,���CqN�`E�Hq��#�?"5���e<bz!�q�>�wJ��>*��e#�*����Z^K�iL�����V�S�#�ji:egG#6��
z�Y7���A���F4�q�@�X�JF����A\������X^�xu�9o��$`�'Rx�>��;^�b��j���$�
8v�os{��Zr�SN�z1��DKY�*�}���8%�6�Li��`[�@�9�{A�U��a�g�:/�?����lx�vY�x��;y�D�9Y6��`6��:F-��y���X��Xn1�����q:���T+:"
�������I,�����������_J�:z��������skveZJAu?���G!1���T������+���bUa����.C{p_�tiqv�'5��b
�GU����8�N��v�|������l4[�1�Wz�Y�L�d��O%���`p�3`���%g���y�k�0��Pkq)q��x���H�����F���D����@�����L
���9f�$
!�>�������p�v�/lu;�9�}1���=���A}e�#!i;�6V�U�C�tWB�/a�<{��'�������I��U?����������:������.�8�
L���{n�1��~�m��Y���P����\y���B�v�E�&�!�^
]q����
�����'(�]��b+(p�k������D���Y��|jY�/�P�[l�b��>�:8t�%��zbt�D��u��*����
�h�j� ���.����@�F�z�/�wAm>{
�:z��I�����$��������6�si����#X�J�G����u��n��1B�f��f���Fb��5'�Y2���	� ��Z��k�!��6"OA�A�P����{���J���~����!�kB��<��,u�8"e�f��������x��&�E��R+q�[�;�M�&�S[X��*�`"���fT���Z�	zjG>����0T>�M�8����h���:p�����^u�TJIK�����<_\��>`O�{�E���
������m��N�7C>r���b��%W4�����#�����]�e����SO�R�#�
qF��N��U������o�����%Tx6U���Z�%o�~�����+����A�e���3s!���Hp�rF	?�GiO��@�KA����o�M�}GS8��AsK��pN�X�AE:�J�U��$��3f�������xi����~��W��&5��{�
z5������q�#���am������zI�C��d��|�:�0{,���N[����_�[�j�l��I`��;�q����f$`�?+���/�E{W�����A��4r�RXfN�a�r����t,)�W�^Z��s���W{#�$	���<26ktY�_�\�<u
)�zY��� ���|�W.j���:�T��\Z\_�^�A�,��rzYC^�	�?�����>��m�j�e
J��C���F+I��>��`N�����u��yJ���2Mj�bO-S�I�5�,���j+v]1iu9u�r����9�MZ��|�N�H�	4������������_��g��-d��q�?0�%�%�n�������l08�`m�:��/��oO��5�D-OH�r�~�%�07�����(�0.=��p�	t$
�]R\�U�@'l�R��
=-� �\o@�R1s�0���i�]�����G��K.��v�I���*"��j�
������f���v(��������NV�s���<>���k��������!����5_������y���
�
�+{3��4����P/��-%!Ro���D~4�����J��&�������	���
n���]��������l��R�q	%�1�t*P��i���W��Uq��cZn�P\-5_3��+PFY%�d��RGR�:Gh��>��M2GK�(7|�����O'�9�DQ���T	�
�L��V��9�j�/��-d���H/g:�6_�R��)$J�,N�'���p��Z��u�S�LH:f�~��M+��F(-W�u&R��T����H����d,�e��R��4��'���\�m�)a�T=(��pm�[;�m�>��n�~���l��>O4�_h����e��k9l��+	E�z����r)T'e~F��m�I�1�pdi	���	������r��rl)}0�!!X3�j!f��%b.-��aJ�y���y
X}M+�dp�^�tK�M���~���!�X+���n�3�����&��6j�D��T���N����n��<�5����"	��{�s�Typ<kl�U?,�n���������>#����4;�K�0�yw��C��~I�M��O��I4��9�M�+�,e�2vB�&a��p{��B�K��l���<<�(�m���4&�������o{�0����iU��4v�R0�'}��E���hL+]9��vm�������3�$���L
�3��8�Kpg�\�F������!(&�3�������"�.+�\b��L�d���4'���#�[�s'��b_a��N2N�c����{5���k,���,B���{z���
���vz�$�S8���d|���u��jT��YU�~�����T#4b����s8���� z�y��CIl����[�!��&K)F���2X��1�����LOk�h/���64 ":Ay����@�vK�V�h���|����\���cN(-]�T���YG:3n�#��s��a<�D��i���e-�Jv'��L�_T���I������+��Y����Zx��PHVC}���1���M^X��b�K���^���/��r�E���qoO� �,R�9Z�r>�P��ckM��d6����.��ZZ�t�.5���F��C������4a��u�Tc0��t����U'*���	����]n��,���+n�����I�6���c��{&�k��I%�X��y4�=�[f�2�n�U����t
r��
�G,
�e���S�-��z���'�����w�a����?�9�r��zUx����b{��I'�i�����v6���Z�K�)�*G������a�Q��W��ne?J(����Y|F���8�t^5�a���U�#��UE��@��n1�:����(�3� iv=QUyn�SK�VnW�]6������6�!��`w$Xl���w����I�������7�?"�jC�<��������x���hpS�ZP�W��TK��q�Vz{I�X���]�jQ\?���@����+�Ts\#[/k�=����o0��'������>�aq_&c;a�r��Ox��c(��$�.y�8I�V�O~f��]/c�dVA�5�?S������3���L�t��IR��
�&IJ�.'���J�R+���/�P?��p�_W�j��4���e���>+�����[6�Wv?
}�'���i����Cx��j/��?�3�w�i����'� }�c<����Dj"���W7�!�Z/M� �a�*.���5�p��0Gh�tdWqJb}���������H��!�!�K`��ql��2��G�m:���t0�Hn��];?�p�-�6r���9N��vd����4-I��a�]���;���U�� k_)���,�3������K~���d�����i�+��3��HSj��Y��L�N�~�*��@�����Vh���pM�[}G������D�)���4�E�������[�=�����H�LA�tAB?�8=S_�
�o�(+���,p%��/Q���	WA�����<�/�W���_��?��$x*0Z+������QH���� K�Et�6#�$e�O�y0%�`�4!�Y��E�	�������R��("�
j�d��� ��+}}I<����|������@�x&P��w:�@G7��!��xI����x��
���Y@@�_����
�F��2b!t<����������X C�(p)��C2����6t��I?��P�����gn�#�t'�n^-���oU��)��452�2�P�+R����g�_������U��Y�l�LGz'����sV8��,4����a�e=����.��	�OB"JhIG�����Z\�\*$7�BS�k�+�!6\n�~f��BMU�mqO1AOP����q��O��8&���5gB�E�$�L�=J��r,�2��L��2����/�R��yF�����^�l�>�����R�M�$��.ql�����O��V�^�y��u����	dk2�V�@�������{�.~�z�HU���N3���5z$������y�����'g6�q>b���;�����3�b_�Y|��;�|E;S�	� �U;	2��N��v����.�����m�������2�L�W���.�����;��������������]�������i�����[����V�n-�����_�@U�����[�+��'�����������u�S�r�F[n���2&u�P�P��^�jV?-[P�O+=�t�F��i��K��D�b�����w�_Mk��������z���7w�[�K�����[��hy]u$���6'"�����������N��0m�9�g��p����nk����\�w������]�h��a���]d��K#��u�����t���(_�}$��'���.+6��O��G�������Y"c��0c���K������23��[[�4��5eBb��4����� ^,�$�)��	Wb�b)i�<��s6�0���R�o��(�2�%h�kb��_�3�p�rNh�d:M|Rj�:NL�����S�^�^�~N�h�<�������nMj0`|^��/_6^~���/������������w����Fk������S	��2�������� ��+�:S�'^���@�"A�����J�;������7sY�W.tW�ZV��
.�x�T������H�
l���.b��a^��zW��W�Z�YWm�,�ixJN�Hk~c��y�|:M'��C�4�����D�%�s~y|�K�eG�v}��/=6������`��R���
��Q�@�n�\a(�3&&"-����I���&p����J*p_v�^���Y�~����C����m�����o>�N
�������/��!��f����3�,��>Z��u&���*�t�n���Bg��=/o�r@����#-�CsO(Q�Li.���,�M�r�|j8�R�X�B�?j���!���z�a���{r��O��}	����}is�h��|�W(��`7���A�{]@u1A���w� ��l����RJWL�o��9��(���Bu��*���w=�y�DHS[j�`�Ac7�Pplt��}�X������Rz����]����������%�����b|_�8���t�5����K��
Z!��F����BC9x��\JVGP��4��/^��W��RN��H��_���Z�=��$����d��L������K����0_9�^��Q�V�[y�F���c'��m��oG0Z��dt�e��=�z�����z,i!;�m�k�pIo������M��=|��RZ{K_I�7];��P
>�&e%��;�g�\�)e��`�:"K>!��}mOn�����!~��7�y�>��@Q�K����5m���-�w��^9gY�/sg,�����|���A<����vg���Y_�v���'/]���g�4�fW�������Y���/�5�y���kR������~Y(��!
8bJ�{uo��+������x
����r:�L��eQ�G�k�{�i������ph��s�G����o	���,KP�mY�C uD\����z��=��S�>�������mF��r�g6 z���b�w��Z^�Q�]����<`v��}Z@��0�~.�s�[~>A?r���:3I-s��|�C����(�Ig�@��[d�������%������7��KM�&�qf'9:^�C:�O�3j����oN^8��=���hX~������/4F��Cc
v���ooo
�6�F��>���V�������z,.���kx*�������\�������-RG��z��<GBZ�%o?�V���[�v���y
a���>!4J/����2\K�F���9��5����e���[���H
��"V���y�DA�	y����I���� �R�N
�%y�%Z�$�k�H�&��Z�p���l�?!�\L=��UN�#�����-��&��n&�+�g;���.Gc��J`�
�Xd��Mhn��� &��7@4<1��^j��e��g���E�/�~�p�n�#a�N�K	����y�/�@��D��m��k�����/��C[3dQE����d-�;�3�[ �VF���6����x�y8�<_��z!3���l�/P�c�@�@���s?��Y�����y���:F����"���<�i)� �G��G�j:*�A'�C�p�md�����1S��G0E���7�],�\���M��������������E��0
�����?���K2�j��|
qI��5S�����T���lyE�C������vy�.�;������W���@`Rf/8�vo�����+�]
�X��c9������,�0��M���!����01"���+����pkr5�Wch�qB�����+�C���e�W!?�H+>����B(��V�Bh)n�D?_��m��?�$��,��%�����_�We� �f=�8�hG�Lr�����h�L�E�^Fo������r�E.5�����%�=����z"����$cx_�x:C�8�|jr7	BW���z9� IH�?�
�o��Ru�1g�i�)�cB]���Q�k:�����_�-��:9R�R����:'� PI�}}�J-
~�	��,��B4��;{���VW:�������o�W�D~�E
�{g���nH$����R)`d?���	�����c�#T�����1�����H�#�ty����x%|s��xy��[���0����z�M�J�9Q���6=o��WN�D�\�cg�I���J���������#�?����
��u����E��9�U�4�.������������
mu��|�K��%���907p���?���MT�����|&uXT�Vp������vj�h��=XY�A4���.�UUzU�������("Q�G�i8���i\^���'����2 �fg{?)��������pW��,&Rn}�3r�5T�������_��@'�^>�Y�����0����Wt�N���}
	��aa��A;���E)�J������X�.,%�D��NH���[�g�i��,�_~|�t����n�@}�,8����_���I����7p����
I�:�b��:��k�q�+�Y��O�)�=xJ�9��ha���cfg.�l8�+D�lU�U"yW���E���5��N�����]#w}/d���7?d�x�X�]��A:��AtN~q{a9K�[������2��M d�5�k9�$5x�9;�?dT.7��x��D�E
M��*���]v�S�A�����~�����D��p1��3>Z�E�\bj��y
��������SjX4�4�5Ch�-f��`g=t�i�M#>��J��V���xO�X���N1������
�����4�	�/#�e��&+�C}X�����F��$t�R��K�T�m�Rz�t���z �-��G@k;&��.x�y�Q4��q�p|���P�Y���=/��4�y�e?H���dD������j���6�?�2,��.A)��"��Z��Z���5D@��$�F@;E?y����/�~�����g�Q�9��9����u{����.������%"�{�.���D��MUs����\�7u�D	T�
	��C��ueJ���p����m��yiu�����7�GC� m�w����j��WyT�����r-��h�����T��C��E,)���!ZXV��4�����tRH�Jc���[���7��7���,���0�������Vi"�Ls:�)�X��L���}������##�F����i����`=f����#��h�������=FTA�Oy��E�IC�a
���a)��z��3��f�e������(4�r��f�A~QK����yQ�^�Gt�UNI��r��Om�\	�@8��w�Ums��Xj�{�Q��akA�X&kF���]�����r�0Z ���2@we�!�0'q��a*�
��]%}���[z3��xx�C��!����������n'�*cO�`,��'��������f�����
�(@��#f"a�����0��?%��{�+��/�A���{��]�������tG��c���5E,��/�c��B��.myl	�c���A��h�����
�oe>�&�u��W�s��6���8�_�����`��������A��|�5����dynQjl+J�
5��f��^q|�����A4�:��HR�s��P:k�+E��O�O�tp�� =6s#[����ISa���C�}���9����Ni���m�����5���T�1�+��[�EI��ilh�Gd����~�Zz9�-�K{o�-�%���1����zAv���-��a�X: :`�U���'c�����xc�/p'@;q-�Sr��@&a��0M�B�����3���f�/6H�I�7w�(h@�'_B�g�fF��Z�������hl!�kL��U��M������l�=��2Rk�E�V��E�~pK	�����-}���.F��Rb�Dp�Q0J5JO/�Q�����ZN����?��p2�9of�fy�W�m���������������[mX]O��#;��c�
V`����r
������_���4v�9O	/���2J^V��}��T-�)��i���V\��9�b������;�j���$���b2@@o����S�>��U���^�����*F������JMde��`�HqA���OrWM�)Oi%���~V]�FcDp��c�����{TJ�Z6g�����8���-D�����U���'��Y^�����T����Z�OX�W��S���Y���Go��uix���������e6�5��O������=s���_?uq���~�5v4g����E�����C�]w�sn�����XQ�2��l����h�$������;lq�h���/��SO��0�F��G$o�+���g�����+�
����y������w�z��?��'��(e�
�?�O�Blv���hM���8�i�{<I��|�����4�tn�������}M)]yx�o�����WF�Q����u��
�#YUs�8Y�=F��d�����+��F�F�<JP:��������h&�N�_�=�y�+���V������;���6�$�����+�F�_'S�
$r������ur�q�FA[������<�����E��i>1�b�6�������H\n��ol���38����}�(����
LnL�����,��MX\��)��7W�oVi������u��<���P`�r��t��F"�)z�D)�
����tbm7�_�wn��xg����9��s�}�s[\/R�$���w4_`���0*�n%���7��@c�q�4�����v������o^A��-���������p��1�y�z0e������,������Jv������ ��-�\[��D.S�#
�A=�g���0�	��r�f��NL�P�'����SO�Uc�X������f�_����Dw75Fa���*���NuF�;��;k]��j_�*���.��z�Z#K���(| �7��>s?��*9�i~kUG���
�l�rs/��'��I� �;� �E��?��+9���aZ�Q��Z�#E�,`Zs��4�j��uj��d:���{�e�#8��-["�nRh�j�G��&Y|��Z�(����$�/����4G��?�)�Gp[s�������.[�@^�`@��[��|[��b�}��<�7=�OW��3jT_#}h
���	8��T��&e
~|���&�m�BAd?�ae# a��8��h
T
���\��I.��?�(	Df���������� r ��i9\sX���Z�n�p�p	��gL��ba?�������l��dM��n%9�{�1/n�1I��<EN���,~@��Y^�f��e+�2/������2b����������&��)H�K����}c*�I�_���<(���0#���o���[��:����1�[;"��a�3��:�������m�'8���r��J�O���8�X�Nb6a�T�5��<��f��X��2'����j�<5I��S�
��Q6��{K&�j�
�,�ke7|�hw�b����io�e�i?���5�������P'ksowkukc�*���	�bu�rs��z�&S�gpzO�Z���[69��7is�������t�,��ak�:������C[�:	�/.
����<�YO�+P�=pD*�8����0:���
@�#vs��(����8?DF
���C3G�:��mC��[���%���o_��%:����?����Zj=���h�L_��H����v�� \�#����v�rU5������f��^�V����J:M�j�]U}�����a�Ns6�X����MQ�.Ur�h�	��;���)��p!7��-t���o��6���h����~(��4H�����+-6�\{��4��EbK��g7��d��,���>\����A��$����ERG���G�E��:,���|�?A��u�F
�etR"��ya�yL4����<�L�Q����^U&��)qt��93�%	y��R 
T,���$�����Y����%���u�����iq�p��/<�6��{�Qn^y��'��lGs-Ic�����p`���(*���gPL��d������\���2�]����^����u~g������K?�����2?�'6�	�_������m����X]��#�������}"��GW�=Z�rP�G\E��W�	��j��8Xf�i�K{�k�����rC`�R;���������V���Y�)�C���N=HS��H#�	�9���'r������'���K�3)���x�dVo��W ���������ren�x�Z������,�����I|�0
\�r1~�M��d�Sqh���K)��'Bt�����Z� ���o��U�f?����etx����Q����|���a����wo~��?�)J��������?�<x,�<������,���y��tQ���n�*dobL$�J�"���^�������;� 
Z��UzU
�Whnw;B60\�D�,�F�	��rk��,��c_hg�]��xa.?q��
=���}��]�'�E�W�� ��Z(�#����f����n�����&�CsP*����V��8�m�����T`�kFg�W��x��d���Cq�.g���!��������������D�"T�^�z�gm����'�����k�Ai�[dJ�+y�6�;�7��e�J�2�@�S0h�]��	#4�����F	|�
q�����.��L�LB�4�}p*�[�,����x�Ov�/�c���'H��J�s�����O�U��y�/s���B��o�_]����?x\���t�V:X�N�����>#���#�]�.���zo��U��������kk[[����J���_5:���$�;k�����j��k
�����j[�-�}�����h7��pYONmNJ��/��5��(������5Z~o�u{�;�IOa�����49����r�#h�Hc4we��)bK�n'�+��j*������`�3{�
	�yL$�^8�=�W���w,C[)b�h�\�J[*qF�c����q�p������t6��qf�23#eA����������p\���e�ds��~4���/8�/A�������M)�:�O$�(K��)"�m������GEQ���d��'��E�p-�=o�d��4�_������z`�fSS������*;{[�[�O����E{0��7����M������5s����w�)���H)#�;^���6�Ov}kcmgwgmc������	����s:���#�?�'���F�b���Id���#z�� �W���p]H�&��V�6�86��=F��K/-k_�i�C��":���5�d�+e1��7������=��n,�Gk1���`�Rh��G������Uyo>������V�`��������5U�I�����)�e�9~�j'�����RE����������+��J��pp��^�?��p�������cN6��I��4fc��������~��9������W�+pU����^�����������*J85���������&�==!p�<��v�;[�����X��o�ll��������5�����������������]S�
���y����K�V��X����WW��F��e�^J������Y�v�V��RK� ��)Qp��)qbg��1��f�^�bZ��N�����eb'�]UD�����3�l�;�u�k3�j/�W"&{�����(gMf��
�:��l�Q`�B)I��.���d:�_�6+�l@r���B�Bw�j�@$Z�����0JX��
�.]���u2�%���`�YT�W2��A��5�W����1�����gxJ')!��]�]��`��R)A�sHu���4�r���T��^0���x�P�Z3�)m,��F�1 I����
�X_V�����~�(vI���g��c?��g���`��a[q/�Y�=�&P}� M���~f,O�8��Lk�Sf�G��m.F�_A{I�c<'I���W�{i��F���y�{�5C��E�������'��ON��Y^ )&����a�����4<���E#��f�?��va��UBJ��	�'
L�������<�l����F��>SMS+u�GV����f�Aq�����)���P�K���P��q���8gh3(���W��n� ep^��!u�����x�	�0�t_��QSL�@���LK�[�����B9����C���rF��� �������G�"S,�m�����B#���fB�`5��Be����d�.9��BW��k���s��,��.��}�S)
���T#��E����C*c=���/�/�3��w�h����c�mPvi�8{�$���J���S`�9�i�0����	iO�')4)�2T�<������1C�ft�Q�����A��l��i#?!}���q����S�e���_��l91?��*�����Q1�,@$t��z�R�2��2c1�5������*%��^�����%ep�7��]����F�`S����&�A���i)���k;#A��� ��5�t�(�gq�/�����VY�U$�0������:H�
M�$��v`�o��Pt-Z�
����� 2?�y|�^���?/�B���6"-3�6���"��,��CmO|�|x*���6��l�� ��n�B���s'��f�p~�c���+Q-3�W�K��>��]F��������R����*:^M���o_�\�J��{~1��l?����/�#��br���e�,LT�L�w�l����~��Nw�4;��N�9����e�;��]�e�^���1f���/^=QV^o������/n/=���Rc����b���=�m����w�>k�<�:[����VG^�`��j�/!�?�Zc6������~7�hr��"�y�����T;}���m��~�Hx��8������<[��_��	�t�7�/G�f
�JJ�z�M|�Oq����(�����qn�R&�LGc�\�"N��������I}c��������Xg������\k�Aag�hm�>�~�P{5�����_��a��f{��iP������
��Hj=r���*f4�)@�K�XOEi'�tk�t��>X���;7��Q���U��l��#�2/��J�E�����,�w�Q46��m6�W���%4E�z��?���?�X�pg)���t�K�����/9FH�� �~O��<
�7�Z���-��P���jpfJ��f���{Q�D�U��� �����]Nk�Qeh�n���`�$i�����������������N~`���s��1��1���O�����_�>�F�^�e/�������;��"�H��JW�ca��w���9I��5:�T���WM���Q�� v%N�)�%?�m���k��t�{�-�����=�C��O�\F�/[������VV�p|[~Q31��J�Q����@G-���\�o�{��}���N�l":��^��s"(����B9��Y6)r��u��_�O���������7�_�W��-��p�U3���V
���V�����Uk�BU[�,������Z�,#���Ry��w3���,X�����[NC;��K$�!��=��+��S�����./���.n�-.�'���`wyo~�zo~-���"j3��2H�<E]6R���N�������d����6I���NQ%xE�aWj�ec
-[#LN�R������i�Y�������f1��+�PWY�����2��m~�����������?y��]p-�%/WR��4
�K������%����1���f������}k.���q�����M$����B�a��O��`y����]J��7Z$��[Y$__o��R�N�
&��U4��4v�o�EPfL�rJ�����Be��v7���r$�6b����A�l9s�{>�Xn#PO�+���h|x����������,�e�6�6�B�\3��|��6�n&�_W�t�L��f�/������N�(W��9�G�9q%�	�Z����Qm}-��Lm�������������s��A�$���Ga1$�I*���:�g���pA]a��������5_Z���!5��X�"�
��|k���U7�u�0�\q^����y�����b�i,��	Q�l�S\t�f��q�����q&-��K��m0-'+����~����6�U�"���<��Dh�����g�9FD,
���2����x�?C�E���y�5Q,O)��<_��
s����8;��?���<�����0�R������,��8����v[��(���e����k������H��9�����a�0��h����C�����@H�HM�u���0>��\�BH�\��"M�C�����n�}�`��P��k
]��������M�������a�4�3�[�����R%y�c���w4:8g�w�2�Zh���:��5�*I~?�JJ=�����]����1��l�$Jf_��t*���"{����+�AX~7s����*�+������,5�X<����'�#g�+7=@
/��w�[_�C�n�Q�
7��8���f%�**_,&�Bi��f(Sug��S����:��fz���'���	���H
���^Q�H+�h����_�K����n���-��f%Qb�x0�WE	����P��4���}MaT�6����{S^�+��i�����^"���+
��U���7�E�pQw�re.&R8%��b����{z���9L����$�9��������s��(f���jD�2T���g*�k�uNx����?u�)�5���!��>=����w�[K�'��J|��_�E��e����o=~|A��]m���=��qe�
�ls$��:F>�	��4a�E�h�����ACNW���"�����	�������3
���������H�L�/���e���<���y����a����fP����6��4�#������J�&�����"�."YR�R,��S��e��$3L�/��(]���[�H�lp!���P��2�#X�?E������*�4Qw.�#�{���)�%�$���;�^�dZ�(*�p����{�����k���R���D�FXz�_�\K4t"��$+?�	�(��?���w��QHqw��E}�@�Q({��T�%������?���;��R	��!P�����2�(/n�E��`s3���U���Q+�Kh����.��BBJY�����TU'�t�}d����������6��Qm�f���'���!X�1�����c������K��c�$��d���@q>�����5�l����K�,��Ac�B���F������c�U'4�6�n�����\�;-J�&a,�O�M�	��T�v4W�[��v�������2�KFFQ*�	a{)������|����Nh��x��cM�&<Qdt��	���/�����(�h���/�/��r�p�������=�>}�����D?��|tR��P
7}:OjJ�ON"d��m����E�&���L�+'1�^��Q����=Y	�PSV������T2�m��o�4��?m���r�w�a~�}��)Fg	�	�)��V��7��a���W�nhR��\E(DK��"���9��	�pM��H�]�RJ'�=�]�Y^*W����Z���bZq��5E�k���T�dJO������f]���[�K�$N`�h��9�!Q�e�6s=�~�$��3!�����:g2��U����JZ��3F��R�3�C��U������w9C��FAaF{��1s���R�a���W�Zm�F�Z����������I�`�a~b�y98��@��1i��d��i���� D��7y�3�}��b�Vu}F	m4���������M����\J+����M-5L'�F���Ni@��\�!��"��P��^E  ���Q`�[�����%7��������(�7��C�9\�/Qc���&Q$�E�Z��J�������L��h���U���1X
�<6���7�1�`;�L����a=#\�<����� �U�m�b?�!_�pc�Ig8��r5'��4���js�t��6�k#�l����P?`��+{xU��+�Ocq".��A�m����B���:�����u�JE���I��{�J�����3�V��v-�'�n�/S��'9�LJ��\���l5���O�40���&S<���]pD6|����P����1��U�M��D�3�l���NXhS_�sI2��q{?!����<}���T#@X�lV1I�����k���N>b�X�����#�H7��e��T��Ve���i�����/�x@�P��W�P���@�4g�^��z*����YjY1�`��BM�1�\��9*<<.Pl�
�p�ynxp���m��#
Y����[5LS�;U�BmN��_�-G������H�}'����d�L	��5-����d{C��@�l����7����9#�`�:},������0�$7�
�>/�tN6y�..rSc�I��P�
G�g��Z�����ua���1-�%f-R�9�f9_M�����F�x8�"�)���7i������N8fp��)�Z��1����.Ck��*j��]���O(�7n�=Q$�S~�;zVL���I��6������ ������U����[EEE����-��.miDU2��\��FCu�,@��4��<��b����V�gh.���,��������������"�U��p�(�����OGQ�!�����f6
\+O��9r��=Z[�������&��8
��/t��t46���}�3p���/<Dyb{B�
��	.���������ag�E��z"�ro���;�,��(�lz|�}!�Z�,��`�b���aqD�$�g�0	����%��"����
��x�~mD���yO�dnj��q)��i��55�p���V��cN,���w�������@�H�`��	G]�EX��	��}�����z�S�������y���B3'?~��wE�=��'�L��wIF*��Y��-����^(L33��v+�����kH���./K4�a����J�(�r���K��14��\W�j�4��I�Jb�C���������&��#?��"�J�g���W���9'������k��$�\��k�� C{��������=��\)��b��k5�Kxq(��:8Gd���<�����[�sZ��?��aq��h�{��K�c�=� F�����l:��d:q%7E����
�e���
P��7'ix����i��%�;d��4�4sTPi"x�Z��MY�d������E�}L����<�yZV���h��0����+�GH�	�i�HOsV\����{�5?��ci�A[rG���K����)�����ED[����[�2���^��@���i��~z��PR|���W�m�,��(��2�_/v����hx���.Nz�O�1�T�?O�%���h���>�'�^��,�/yP,A��e��2R'E|J�d|��i������?��l����&�;}?`���2����A����z��w��s����{������w:�Y�q����f��
#xb�'��V��Wd.a ����X�E�D���d�Z�Sar�;;E����y]j>|�
�geGF�
!r��H���q5�n�e��V����]{[���bK��-���zImh<+�c��g���ArT#��J�MfE��N��F�'�T$�	2���#�������qia,������4W�����E�R�,����@�s7"��1\z���J����;[����A
�WK����R�q"�-��5B�3�`Cb��H��r���0����/$W#w{��^r�����7��Wz�VWyA�w�.���6dY�� �o����~7��n$
/���[�e�'�+������=����>P�h��>��'����z����O���4;K�4��c�|��j?����]i��Y5�g��
i����
�o���?aw�#a��������{�T�������*?��T����Ty�r\�2�2?0�=X����<���|�����?��|�����?��|��������d(��x
#58Michael Paquier
michael.paquier@gmail.com
In reply to: Michael Paquier (#57)
Re: moving from contrib to bin

On Tue, Dec 23, 2014 at 3:24 PM, Michael Paquier
<michael.paquier@gmail.com> wrote:

On Mon, Dec 22, 2014 at 11:30 PM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

Michael Paquier wrote:

And here is an updated patch following those lines. Similarly to the
things in contrib/, a set of variables are used to define for each
module what are the extra libraries, include dirs, etc. This refactors
quite a bit of code, even if there are a couple of exceptions like
pg_xlogdump/ or pg_basebackup/.

In a broad look, this looks a lot better. I think we should press
forward with this whole set of patches and see what the buildfarm
thinks.

Here is a new series of patches for all those things, with the
following additions:
- Some cleanup for MSVC scripts compared to last patch
- Moved documentation to ref/
- Removed mention to the authors of the utilities moved (?)
This set of patches is basically made of the former set, with 2
additional patches for MSVC stuff and documentation pages moved to
ref/.

Where are we on this? This patch is waiting for input from author for
the last couple of weeks.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#59Andres Freund
andres@2ndquadrant.com
In reply to: Michael Paquier (#57)
Re: moving from contrib to bin

Hi,

FWIW, I find it rather annoying if people attach patchsets as
tarballs. That makes it impossible to look at them in the mailreader
since I really don't have anything reasonable to go on to teach it to
treat it as a set of patches.

I'd also like to see patches that primarily move code around as git diff
-M -C style diffs (can also be passed to format-patch). That will show
the file move and then additionally the changes that have been made in
addition to the rename. There's no sane way the current diffs can be
reviewed without applying them to a tree.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#60Andres Freund
andres@2ndquadrant.com
In reply to: Andres Freund (#59)
13 attachment(s)
Re: moving from contrib to bin

On 2015-01-17 13:16:18 +0100, Andres Freund wrote:

I'd also like to see patches that primarily move code around as git diff
-M -C style diffs (can also be passed to format-patch). That will show
the file move and then additionally the changes that have been made in
addition to the rename. There's no sane way the current diffs can be
reviewed without applying them to a tree.

Btw, this also avoids many trivial kind of conflicts... Which renames
generally are very prone to.

Rebased (fair amount of trivial conflicts due to the copyright year
bump) and attached as -MC style format-patch. If you look at the content
of the patches you can see that the diff makes more sense now.

Observations:
1) Are we sure it's a good idea to rely on pgxs.mk in src/bin programs?
2) I removed a stray 'port.c' and some whitespace as a fixup commit (git
rebase --autosquash ...) from the pg_upgrade_support commit
3) pg_upgrade tests didn't run due to a /src/ to much in the path to
pg_regress
4) I have doubts that it's ok to integrate the tests in src/bin just the
way they were done in contrib.
5) Doing the msvc support for all intermediate commits in a separate
commit strikes me as a bad idea. Essentially that makes the split
pretty pointless.
6) Similarly I'd much rather see the doc movement in the same commit as
the actually moved utility. Then we can start applying this one by one
on whatever we have agreement.
7) Are we sure that the authors in the affected contrib modules are ok
with their authorship notice being removed? I don't think Ants, Bruce
or Simon have a problem with that, but ...
8) Why did you remove Peter as the git author?

I've also pushed the git tree of these changes to
http://git.postgresql.org/gitweb/?p=users/andresfreund/postgres.git;a=summary
branch move-contrib-bins-to-bin

Greetings,

Andres Freund

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

Attachments:

0001-Sort-SUBDIRS-variable-in-src-bin-Makefile.patchtext/x-patch; charset=us-asciiDownload
>From 5532141d01ff40787c949cc45e3bcd3e5964aa23 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:54:13 +0900
Subject: [PATCH 01/13] Sort SUBDIRS variable in src/bin/Makefile

The previous order appears to have been historically grown randomness.
---
 src/bin/Makefile | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/bin/Makefile b/src/bin/Makefile
index 2b628f3..90ca1a8 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -13,8 +13,16 @@ subdir = src/bin
 top_builddir = ../..
 include $(top_builddir)/src/Makefile.global
 
-SUBDIRS = initdb pg_ctl pg_dump \
-	psql scripts pg_config pg_controldata pg_resetxlog pg_basebackup
+SUBDIRS = \
+	initdb \
+	pg_basebackup \
+	pg_config \
+	pg_controldata \
+	pg_ctl \
+	pg_dump \
+	pg_resetxlog \
+	psql \
+	scripts
 
 ifeq ($(PORTNAME), win32)
 SUBDIRS += pgevent
-- 
2.2.1.212.gc5b9256

0002-Move-pg_archivecleanup-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From abaaaa4b5a71dd34eaf255b523e3d2a12a2b93d3 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:54:42 +0900
Subject: [PATCH 02/13] Move pg_archivecleanup from contrib/ to src/bin/

---
 contrib/Makefile                                       |  1 -
 contrib/pg_archivecleanup/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                              |  1 -
 doc/src/sgml/reference.sgml                            |  1 +
 src/bin/Makefile                                       |  1 +
 {contrib => src/bin}/pg_archivecleanup/.gitignore      |  0
 src/bin/pg_archivecleanup/Makefile                     | 14 ++++++++++++++
 .../bin}/pg_archivecleanup/pg_archivecleanup.c         |  2 +-
 8 files changed, 17 insertions(+), 21 deletions(-)
 delete mode 100644 contrib/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/.gitignore (100%)
 create mode 100644 src/bin/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/pg_archivecleanup.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 195d447..c56050e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -28,7 +28,6 @@ SUBDIRS = \
 		oid2name	\
 		pageinspect	\
 		passwordcheck	\
-		pg_archivecleanup \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
diff --git a/contrib/pg_archivecleanup/Makefile b/contrib/pg_archivecleanup/Makefile
deleted file mode 100644
index ab52390..0000000
--- a/contrib/pg_archivecleanup/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_archivecleanup/Makefile
-
-PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
-PGAPPICON = win32
-
-PROGRAM = pg_archivecleanup
-OBJS	= pg_archivecleanup.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_archivecleanup
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index a698d0f..f21fa14 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgarchivecleanup;
  &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 10c9a6d..62267db 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -257,6 +257,7 @@
   </partintro>
 
    &initdb;
+   &pgarchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 90ca1a8..2347076 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
 	initdb \
+	pg_archivecleanup \
 	pg_basebackup \
 	pg_config \
 	pg_controldata \
diff --git a/contrib/pg_archivecleanup/.gitignore b/src/bin/pg_archivecleanup/.gitignore
similarity index 100%
rename from contrib/pg_archivecleanup/.gitignore
rename to src/bin/pg_archivecleanup/.gitignore
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
new file mode 100644
index 0000000..5df86eb
--- /dev/null
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_archivecleanup/Makefile
+
+PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
+PGAPPICON = win32
+
+subdir = src/bin/pg_archivecleanup
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_archivecleanup
+OBJS	= pg_archivecleanup.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c
similarity index 99%
rename from contrib/pg_archivecleanup/pg_archivecleanup.c
rename to src/bin/pg_archivecleanup/pg_archivecleanup.c
index 97225a8..2ff2a27 100644
--- a/contrib/pg_archivecleanup/pg_archivecleanup.c
+++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_archivecleanup/pg_archivecleanup.c
+ * src/bin/pg_archivecleanup/pg_archivecleanup.c
  *
  * pg_archivecleanup.c
  *
-- 
2.2.1.212.gc5b9256

0003-Move-pg_standby-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From 268fda43924f38c480bbdde0dc79283a89afbfb4 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:55:15 +0900
Subject: [PATCH 03/13] Move pg_standby from contrib/ to src/bin/

---
 contrib/Makefile                             |  1 -
 contrib/pg_standby/Makefile                  | 18 ------------------
 doc/src/sgml/contrib.sgml                    |  1 -
 doc/src/sgml/reference.sgml                  |  1 +
 src/bin/Makefile                             |  1 +
 {contrib => src/bin}/pg_standby/.gitignore   |  0
 src/bin/pg_standby/Makefile                  | 14 ++++++++++++++
 {contrib => src/bin}/pg_standby/pg_standby.c |  2 +-
 8 files changed, 17 insertions(+), 21 deletions(-)
 delete mode 100644 contrib/pg_standby/Makefile
 rename {contrib => src/bin}/pg_standby/.gitignore (100%)
 create mode 100644 src/bin/pg_standby/Makefile
 rename {contrib => src/bin}/pg_standby/pg_standby.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c56050e..1732443 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -31,7 +31,6 @@ SUBDIRS = \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
-		pg_standby	\
 		pg_stat_statements \
 		pg_test_fsync	\
 		pg_test_timing	\
diff --git a/contrib/pg_standby/Makefile b/contrib/pg_standby/Makefile
deleted file mode 100644
index 0bca2f8..0000000
--- a/contrib/pg_standby/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_standby/Makefile
-
-PGFILEDESC = "pg_standby - supports creation of a warm standby"
-PGAPPICON = win32
-
-PROGRAM = pg_standby
-OBJS	= pg_standby.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_standby
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index f21fa14..087cd9f 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 62267db..d47272a 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -261,6 +261,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgstandby;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 2347076..0bdb01c 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_standby \
 	psql \
 	scripts
 
diff --git a/contrib/pg_standby/.gitignore b/src/bin/pg_standby/.gitignore
similarity index 100%
rename from contrib/pg_standby/.gitignore
rename to src/bin/pg_standby/.gitignore
diff --git a/src/bin/pg_standby/Makefile b/src/bin/pg_standby/Makefile
new file mode 100644
index 0000000..d45a47d
--- /dev/null
+++ b/src/bin/pg_standby/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_standby/Makefile
+
+PGFILEDESC = "pg_standby - supports creation of a warm standby"
+PGAPPICON = win32
+
+subdir = src/bin/pg_standby
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_standby
+OBJS	= pg_standby.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_standby/pg_standby.c b/src/bin/pg_standby/pg_standby.c
similarity index 99%
rename from contrib/pg_standby/pg_standby.c
rename to src/bin/pg_standby/pg_standby.c
index 2f9f2b4..7e3430e 100644
--- a/contrib/pg_standby/pg_standby.c
+++ b/src/bin/pg_standby/pg_standby.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_standby/pg_standby.c
+ * src/bin/pg_standby/pg_standby.c
  *
  *
  * pg_standby.c
-- 
2.2.1.212.gc5b9256

0004-Move-pg_xlogdump-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From 248f7fe95e8f9c46bfa4508f6dce51eb8a633b3f Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:55:51 +0900
Subject: [PATCH 04/13] Move pg_xlogdump from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_xlogdump/.gitignore    |  0
 {contrib => src/bin}/pg_xlogdump/Makefile      | 19 ++++++++-----------
 {contrib => src/bin}/pg_xlogdump/compat.c      |  2 +-
 {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.c    |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.h    |  2 +-
 10 files changed, 14 insertions(+), 17 deletions(-)
 rename {contrib => src/bin}/pg_xlogdump/.gitignore (100%)
 rename {contrib => src/bin}/pg_xlogdump/Makefile (76%)
 rename {contrib => src/bin}/pg_xlogdump/compat.c (98%)
 rename {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c (99%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.c (96%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.h (91%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 1732443..8f0d926 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -41,7 +41,6 @@ SUBDIRS = \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
-		pg_xlogdump	\
 		postgres_fdw	\
 		seg		\
 		spi		\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 087cd9f..dbe9d0a 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -205,6 +205,5 @@ pages.
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
- &pgxlogdump;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index d47272a..de2cdff 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -262,6 +262,7 @@
    &pgCtl;
    &pgResetxlog;
    &pgstandby;
+   &pgxlogdump;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 0bdb01c..54c61c9 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_standby \
+	pg_xlogdump \
 	psql \
 	scripts
 
diff --git a/contrib/pg_xlogdump/.gitignore b/src/bin/pg_xlogdump/.gitignore
similarity index 100%
rename from contrib/pg_xlogdump/.gitignore
rename to src/bin/pg_xlogdump/.gitignore
diff --git a/contrib/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
similarity index 76%
rename from contrib/pg_xlogdump/Makefile
rename to src/bin/pg_xlogdump/Makefile
index 30a8706..ab8597b 100644
--- a/contrib/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,28 +1,25 @@
-# contrib/pg_xlogdump/Makefile
+# src/bin/pg_xlogdump/Makefile
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
 PGAPPICON=win32
 
+subdir = src/bin/pg_xlogdump
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
+override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
 EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
 
-ifdef USE_PGXS
-$(error "pg_xlogdump cannot be built with PGXS")
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
-subdir = contrib/pg_xlogdump
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-
-
-override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
diff --git a/contrib/pg_xlogdump/compat.c b/src/bin/pg_xlogdump/compat.c
similarity index 98%
rename from contrib/pg_xlogdump/compat.c
rename to src/bin/pg_xlogdump/compat.c
index 4f5cad6..3d8ce30 100644
--- a/contrib/pg_xlogdump/compat.c
+++ b/src/bin/pg_xlogdump/compat.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		contrib/pg_xlogdump/compat.c
+ *		src/bin/pg_xlogdump/compat.c
  *
  * This file contains client-side implementations for various backend
  * functions that the rm_desc functions in *desc.c files rely on.
diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
similarity index 99%
rename from contrib/pg_xlogdump/pg_xlogdump.c
rename to src/bin/pg_xlogdump/pg_xlogdump.c
index c1bfbc2..67932af 100644
--- a/contrib/pg_xlogdump/pg_xlogdump.c
+++ b/src/bin/pg_xlogdump/pg_xlogdump.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		  contrib/pg_xlogdump/pg_xlogdump.c
+ *		  src/bin/pg_xlogdump/pg_xlogdump.c
  *-------------------------------------------------------------------------
  */
 
diff --git a/contrib/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c
similarity index 96%
rename from contrib/pg_xlogdump/rmgrdesc.c
rename to src/bin/pg_xlogdump/rmgrdesc.c
index 180818d..4fb0a00 100644
--- a/contrib/pg_xlogdump/rmgrdesc.c
+++ b/src/bin/pg_xlogdump/rmgrdesc.c
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers definition
  *
- * contrib/pg_xlogdump/rmgrdesc.c
+ * src/bin/pg_xlogdump/rmgrdesc.c
  */
 #define FRONTEND 1
 #include "postgres.h"
diff --git a/contrib/pg_xlogdump/rmgrdesc.h b/src/bin/pg_xlogdump/rmgrdesc.h
similarity index 91%
rename from contrib/pg_xlogdump/rmgrdesc.h
rename to src/bin/pg_xlogdump/rmgrdesc.h
index aec4418..5440f94 100644
--- a/contrib/pg_xlogdump/rmgrdesc.h
+++ b/src/bin/pg_xlogdump/rmgrdesc.h
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers declaration
  *
- * contrib/pg_xlogdump/rmgrdesc.h
+ * src/bin/pg_xlogdump/rmgrdesc.h
  */
 #ifndef RMGRDESC_H
 #define RMGRDESC_H
-- 
2.2.1.212.gc5b9256

0005-Move-pgbench-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From e642619702bab9d37056486399bd8b7b6adc9abc Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:56:19 +0900
Subject: [PATCH 05/13] Move pgbench from contrib/ to src/bin/

---
 contrib/Makefile                        |  1 -
 doc/src/sgml/contrib.sgml               |  1 -
 doc/src/sgml/reference.sgml             |  1 +
 src/bin/Makefile                        |  1 +
 {contrib => src/bin}/pgbench/.gitignore |  0
 {contrib => src/bin}/pgbench/Makefile   | 18 +++++++-----------
 {contrib => src/bin}/pgbench/pgbench.c  |  2 +-
 7 files changed, 10 insertions(+), 14 deletions(-)
 rename {contrib => src/bin}/pgbench/.gitignore (100%)
 rename {contrib => src/bin}/pgbench/Makefile (59%)
 rename {contrib => src/bin}/pgbench/pgbench.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 8f0d926..12c7500 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -37,7 +37,6 @@ SUBDIRS = \
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
-		pgbench		\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index dbe9d0a..60c07ea 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -187,7 +187,6 @@ pages.
   </para>
 
  &oid2name;
- &pgbench;
  &vacuumlo;
  </sect1>
 
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index de2cdff..a839af7 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -230,6 +230,7 @@
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
+   &pgbench;
    &pgConfig;
    &pgDump;
    &pgDumpall;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 54c61c9..d27096e 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_standby \
 	pg_xlogdump \
+	pgbench \
 	psql \
 	scripts
 
diff --git a/contrib/pgbench/.gitignore b/src/bin/pgbench/.gitignore
similarity index 100%
rename from contrib/pgbench/.gitignore
rename to src/bin/pgbench/.gitignore
diff --git a/contrib/pgbench/Makefile b/src/bin/pgbench/Makefile
similarity index 59%
rename from contrib/pgbench/Makefile
rename to src/bin/pgbench/Makefile
index b8e2fc8..de4863c 100644
--- a/contrib/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,24 +1,20 @@
-# contrib/pgbench/Makefile
+# src/bin/pgbench/Makefile
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
 
+subdir = src/bin/pgbench
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pgbench
 OBJS	= pgbench.o $(WIN32RES)
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgbench
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
diff --git a/contrib/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
similarity index 99%
rename from contrib/pgbench/pgbench.c
rename to src/bin/pgbench/pgbench.c
index 25616ce..1c3b3d6 100644
--- a/contrib/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * contrib/pgbench/pgbench.c
+ * src/bin/pgbench/pgbench.c
  * Copyright (c) 2000-2015, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
-- 
2.2.1.212.gc5b9256

0006-Move-pg_test_fsync-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From a753e5639759920d5fe4981a0e0c5d374af37853 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:56:45 +0900
Subject: [PATCH 06/13] Move pg_test_fsync from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_test_fsync/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_test_fsync/.gitignore      |  0
 src/bin/pg_test_fsync/Makefile                     | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c |  0
 8 files changed, 16 insertions(+), 20 deletions(-)
 delete mode 100644 contrib/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/.gitignore (100%)
 create mode 100644 src/bin/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 12c7500..6809ec8 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -32,7 +32,6 @@ SUBDIRS = \
 		pg_freespacemap \
 		pg_prewarm	\
 		pg_stat_statements \
-		pg_test_fsync	\
 		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile
deleted file mode 100644
index 15afba7..0000000
--- a/contrib/pg_test_fsync/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_test_fsync/Makefile
-
-PGFILEDESC = "pg_test_fsync - test various disk sync methods"
-PGAPPICON = win32
-
-PROGRAM  = pg_test_fsync
-OBJS = pg_test_fsync.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_test_fsync
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 60c07ea..57f4bbf 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -201,7 +201,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
  </sect1>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index a839af7..c766c7b 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -263,6 +263,7 @@
    &pgCtl;
    &pgResetxlog;
    &pgstandby;
+   &pgtestfsync;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index d27096e..dbdf8e4 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_standby \
+	pg_test_fsync \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
similarity index 100%
rename from contrib/pg_test_fsync/.gitignore
rename to src/bin/pg_test_fsync/.gitignore
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..e8d1952
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_fsync
+OBJS = pg_test_fsync.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
similarity index 100%
rename from contrib/pg_test_fsync/pg_test_fsync.c
rename to src/bin/pg_test_fsync/pg_test_fsync.c
-- 
2.2.1.212.gc5b9256

0007-Move-pg_test_timing-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From baa59a0c67d8f553d2997786586ac1b82abb75d1 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:57:10 +0900
Subject: [PATCH 07/13] Move pg_test_timing from contrib/ to src/bin/

---
 contrib/Makefile                                     |  1 -
 contrib/pg_test_timing/Makefile                      | 18 ------------------
 doc/src/sgml/contrib.sgml                            |  1 -
 doc/src/sgml/reference.sgml                          |  1 +
 src/bin/Makefile                                     |  1 +
 {contrib => src/bin}/pg_test_timing/.gitignore       |  0
 src/bin/pg_test_timing/Makefile                      | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_timing/pg_test_timing.c |  0
 8 files changed, 16 insertions(+), 20 deletions(-)
 delete mode 100644 contrib/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/.gitignore (100%)
 create mode 100644 src/bin/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/pg_test_timing.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 6809ec8..6ff409b 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -32,7 +32,6 @@ SUBDIRS = \
 		pg_freespacemap \
 		pg_prewarm	\
 		pg_stat_statements \
-		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
diff --git a/contrib/pg_test_timing/Makefile b/contrib/pg_test_timing/Makefile
deleted file mode 100644
index 8b37aa8..0000000
--- a/contrib/pg_test_timing/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_test_timing/Makefile
-
-PGFILEDESC = "pg_test_timing - test timing overhead"
-PGAPPICON = win32
-
-PROGRAM  = pg_test_timing
-OBJS = pg_test_timing.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_test_timing
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 57f4bbf..aa47634 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -201,7 +201,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgtesttiming;
  &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index c766c7b..ac0ee62 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -264,6 +264,7 @@
    &pgResetxlog;
    &pgstandby;
    &pgtestfsync;
+   &pgtesttiming;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index dbdf8e4..c00647d 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_standby \
 	pg_test_fsync \
+	pg_test_timing \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_timing/.gitignore b/src/bin/pg_test_timing/.gitignore
similarity index 100%
rename from contrib/pg_test_timing/.gitignore
rename to src/bin/pg_test_timing/.gitignore
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
new file mode 100644
index 0000000..f96d2e9
--- /dev/null
+++ b/src/bin/pg_test_timing/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_timing/Makefile
+
+PGFILEDESC = "pg_test_timing - test timing overhead"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_timing
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_timing
+OBJS = pg_test_timing.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c
similarity index 100%
rename from contrib/pg_test_timing/pg_test_timing.c
rename to src/bin/pg_test_timing/pg_test_timing.c
-- 
2.2.1.212.gc5b9256

0008-Integrate-pg_upgrade_support-module-into-backend.patchtext/x-patch; charset=us-asciiDownload
>From 54de0400fb5d81bf3eed803806f58360d4893546 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:58:04 +0900
Subject: [PATCH 08/13] Integrate pg_upgrade_support module into backend

Previously, these functions were created in a schema "binary_upgrade",
which was deleted after pg_upgrade was finished.  Because we don't want
to keep that schema around permanently, move them to pg_catalog but
rename them with a binary_upgrade_... prefix.
---
 contrib/Makefile                                   |   1 -
 contrib/pg_upgrade/dump.c                          |   2 +-
 contrib/pg_upgrade/function.c                      | 113 ---------------------
 contrib/pg_upgrade/pg_upgrade.c                    |  27 -----
 contrib/pg_upgrade/pg_upgrade.h                    |   2 -
 contrib/pg_upgrade/test.sh                         |   1 -
 contrib/pg_upgrade_support/Makefile                |  16 ---
 doc/src/sgml/pgupgrade.sgml                        |   5 +-
 src/backend/catalog/heap.c                         |   2 +-
 src/backend/catalog/index.c                        |   2 +-
 src/backend/catalog/pg_enum.c                      |   2 +-
 src/backend/catalog/pg_type.c                      |   2 +-
 src/backend/catalog/toasting.c                     |   2 +-
 src/backend/commands/typecmds.c                    |   2 +-
 src/backend/commands/user.c                        |   2 +-
 src/backend/utils/adt/Makefile                     |   2 +-
 .../backend/utils/adt}/pg_upgrade_support.c        |  48 ++++-----
 src/bin/pg_dump/pg_dump.c                          |  18 ++--
 src/bin/pg_dump/pg_dumpall.c                       |   2 +-
 src/include/catalog/pg_proc.h                      |  20 ++++
 20 files changed, 62 insertions(+), 209 deletions(-)
 delete mode 100644 contrib/pg_upgrade_support/Makefile
 rename {contrib/pg_upgrade_support => src/backend/utils/adt}/pg_upgrade_support.c (71%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 6ff409b..c20d4fe 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -34,7 +34,6 @@ SUBDIRS = \
 		pg_stat_statements \
 		pg_trgm		\
 		pg_upgrade	\
-		pg_upgrade_support \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/contrib/pg_upgrade/dump.c b/contrib/pg_upgrade/dump.c
index 941c4bb..906e85f 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/contrib/pg_upgrade/dump.c
@@ -121,7 +121,7 @@ optionally_create_toast_tables(void)
 		for (rowno = 0; rowno < ntups; rowno++)
 		{
 			/* enable auto-oid-numbered TOAST creation if needed */
-			PQclear(executeQueryOrDie(conn, "SELECT binary_upgrade.set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
+			PQclear(executeQueryOrDie(conn, "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
 					OPTIONALLY_CREATE_TOAST_OID));
 
 			/* dummy command that also triggers check for required TOAST table */
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index deffe04..d8009d1 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,112 +13,6 @@
 
 #include "access/transam.h"
 
-#define PG_UPGRADE_SUPPORT	"$libdir/pg_upgrade_support"
-
-/*
- * install_support_functions_in_new_db()
- *
- * pg_upgrade requires some support functions that enable it to modify
- * backend behavior.
- */
-void
-install_support_functions_in_new_db(const char *db_name)
-{
-	PGconn	   *conn = connectToServer(&new_cluster, db_name);
-
-	/* suppress NOTICE of dropped objects */
-	PQclear(executeQueryOrDie(conn,
-							  "SET client_min_messages = warning;"));
-	PQclear(executeQueryOrDie(conn,
-						   "DROP SCHEMA IF EXISTS binary_upgrade CASCADE;"));
-	PQclear(executeQueryOrDie(conn,
-							  "RESET client_min_messages;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE SCHEMA binary_upgrade;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_array_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_toast_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_heap_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_index_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_toast_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_enum_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_authid_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.create_empty_extension(text, text, bool, text, oid[], text[], text[]) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C;"));
-	PQfinish(conn);
-}
-
-
-void
-uninstall_support_functions_from_new_cluster(void)
-{
-	int			dbnum;
-
-	prep_status("Removing support functions from new cluster");
-
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-		PGconn	   *conn = connectToServer(&new_cluster, new_db->db_name);
-
-		/* suppress NOTICE of dropped objects */
-		PQclear(executeQueryOrDie(conn,
-								  "SET client_min_messages = warning;"));
-		PQclear(executeQueryOrDie(conn,
-								  "DROP SCHEMA binary_upgrade CASCADE;"));
-		PQclear(executeQueryOrDie(conn,
-								  "RESET client_min_messages;"));
-		PQfinish(conn);
-	}
-	check_ok();
-}
-
 
 /*
  * get_loadable_libraries()
@@ -218,8 +112,6 @@ get_loadable_libraries(void)
 	if (found_public_plpython_handler)
 		pg_fatal("Remove the problem functions from the old cluster to continue.\n");
 
-	totaltups++;				/* reserve for pg_upgrade_support */
-
 	/* Allocate what's certainly enough space */
 	os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
 
@@ -228,7 +120,6 @@ get_loadable_libraries(void)
 	 * there probably aren't enough entries to matter.
 	 */
 	totaltups = 0;
-	os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
 	{
@@ -321,10 +212,6 @@ check_loadable_libraries(void)
 		{
 			found = true;
 
-			/* exit and report missing support library with special message */
-			if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
-				pg_fatal("The pg_upgrade_support module must be created and installed in the new cluster.\n");
-
 			if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
 				pg_fatal("Could not open file \"%s\": %s\n",
 						 output_path, getErrorText(errno));
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index ed7de80..1ff01a7 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -276,14 +276,6 @@ prepare_new_databases(void)
 	prep_status("Restoring global objects in the new cluster");
 
 	/*
-	 * Install support functions in the global-object restore database to
-	 * preserve pg_authid.oid.  pg_dumpall uses 'template0' as its template
-	 * database so objects we add into 'template1' are not propogated.  They
-	 * are removed on pg_upgrade exit.
-	 */
-	install_support_functions_in_new_db("template1");
-
-	/*
 	 * We have to create the databases first so we can install support
 	 * functions in all the other databases.  Ideally we could create the
 	 * support functions in template1 but pg_dumpall creates database using
@@ -305,23 +297,6 @@ create_new_objects(void)
 {
 	int			dbnum;
 
-	prep_status("Adding support functions to new cluster");
-
-	/*
-	 * Technically, we only need to install these support functions in new
-	 * databases that also exist in the old cluster, but for completeness we
-	 * process all new databases.
-	 */
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-
-		/* skip db we already installed */
-		if (strcmp(new_db->db_name, "template1") != 0)
-			install_support_functions_in_new_db(new_db->db_name);
-	}
-	check_ok();
-
 	prep_status("Restoring database schemas in the new cluster\n");
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
@@ -365,8 +340,6 @@ create_new_objects(void)
 
 	/* regenerate now that we have objects in the databases */
 	get_db_and_rel_infos(&new_cluster);
-
-	uninstall_support_functions_from_new_cluster();
 }
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 19d59f5..f9c239d 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -406,8 +406,6 @@ FILE	   *fopen_priv(const char *path, const char *mode);
 
 /* function.c */
 
-void		install_support_functions_in_new_db(const char *db_name);
-void		uninstall_support_functions_from_new_cluster(void);
 void		get_loadable_libraries(void);
 void		check_loadable_libraries(void);
 
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh
index 75b6357..2e9f976 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/contrib/pg_upgrade/test.sh
@@ -70,7 +70,6 @@ if [ "$1" = '--install' ]; then
 	libdir=$temp_install/$libdir
 
 	"$MAKE" -s -C ../.. install DESTDIR="$temp_install"
-	"$MAKE" -s -C ../pg_upgrade_support install DESTDIR="$temp_install"
 	"$MAKE" -s -C . install DESTDIR="$temp_install"
 
 	# platform-specific magic to find the shared libraries; see pg_regress.c
diff --git a/contrib/pg_upgrade_support/Makefile b/contrib/pg_upgrade_support/Makefile
deleted file mode 100644
index f7def16..0000000
--- a/contrib/pg_upgrade_support/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# contrib/pg_upgrade_support/Makefile
-
-PGFILEDESC = "pg_upgrade_support - server-side functions for pg_upgrade"
-
-MODULES = pg_upgrade_support
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade_support
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index e1cd260..8d70727 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -253,11 +253,10 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade and pg_upgrade_support</title>
+    <title>Install pg_upgrade</title>
 
     <para>
-     Install the <application>pg_upgrade</> binary and
-     <application>pg_upgrade_support</> library in the new PostgreSQL
+     Install the <application>pg_upgrade</> binary in the new PostgreSQL
      installation.
     </para>
    </step>
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 17f7266..c3456b6 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -76,7 +76,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_pg_class_oid = InvalidOid;
 Oid			binary_upgrade_next_toast_pg_class_oid = InvalidOid;
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 9bb9deb..79dac05 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -69,7 +69,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_pg_class_oid = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index d87090a..c880486 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -31,7 +31,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index ed8259d..8349926 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -36,7 +36,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index e73252c..2a269b7 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -32,7 +32,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 322a3c7..8f53043 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -87,7 +87,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_array_pg_type_oid = InvalidOid;
 
 static void makeRangeConstructors(const char *name, Oid namespace,
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 2210eed..4ecbc89 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -38,7 +38,7 @@
 #include "utils/timestamp.h"
 #include "utils/tqual.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_authid_oid = InvalidOid;
 
 
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 3ea9bf4..732974b 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,7 +25,7 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
 	jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
 	network.o network_gist.o network_selfuncs.o \
 	numeric.o numutils.o oid.o oracle_compat.o \
-	orderedsetaggs.o pg_lzcompress.o pg_locale.o pg_lsn.o \
+	orderedsetaggs.o pg_lzcompress.o pg_locale.o pg_lsn.o pg_upgrade_support.o \
 	pgstatfuncs.o pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
 	rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
 	regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
diff --git a/contrib/pg_upgrade_support/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
similarity index 71%
rename from contrib/pg_upgrade_support/pg_upgrade_support.c
rename to src/backend/utils/adt/pg_upgrade_support.c
index f477973..e7be910 100644
--- a/contrib/pg_upgrade_support/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -5,8 +5,9 @@
  *	to control oid and relfilenode assignment, and do other special
  *	hacks needed for pg_upgrade.
  *
- *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade_support/pg_upgrade_support.c
+ *	Copyright (c) 2010-201t, PostgreSQL Global Development Group
+ *	src/backend/utils/adt/pg_upgrade_support.c
+port.c
  */
 
 #include "postgres.h"
@@ -19,24 +20,17 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 
-/* THIS IS USED ONLY FOR PG >= 9.0 */
 
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
+Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
-PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_array_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_type_oid);
-
-PG_FUNCTION_INFO_V1(set_next_heap_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_index_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_class_oid);
-
-PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
-PG_FUNCTION_INFO_V1(set_next_pg_authid_oid);
-
-PG_FUNCTION_INFO_V1(create_empty_extension);
 
 #define CHECK_IS_BINARY_UPGRADE 								\
 do { 															\
@@ -47,7 +41,7 @@ do { 															\
 } while (0)
 
 Datum
-set_next_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -58,7 +52,7 @@ set_next_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -69,7 +63,7 @@ set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -80,7 +74,7 @@ set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -91,7 +85,7 @@ set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -102,7 +96,7 @@ set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -113,7 +107,7 @@ set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_enum_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 {
 	Oid			enumoid = PG_GETARG_OID(0);
 
@@ -124,7 +118,7 @@ set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_authid_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 {
 	Oid			authoid = PG_GETARG_OID(0);
 
@@ -134,7 +128,7 @@ set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-create_empty_extension(PG_FUNCTION_ARGS)
+binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)
 {
 	text	   *extName = PG_GETARG_TEXT_PP(0);
 	text	   *schemaName = PG_GETARG_TEXT_PP(1);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index dc062e6..b827894 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3016,7 +3016,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 
 	appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
 	appendPQExpBuffer(upgrade_buffer,
-	 "SELECT binary_upgrade.set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+	 "SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 					  pg_type_oid);
 
 	/* we only support old >= 8.3 for binary upgrades */
@@ -3035,7 +3035,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 		appendPQExpBufferStr(upgrade_buffer,
 			   "\n-- For binary upgrade, must preserve pg_type array oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_array_oid);
 	}
 
@@ -3077,7 +3077,7 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
 
 		appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type toast oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_toast_oid);
 
 		toast_set = true;
@@ -3117,7 +3117,7 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 	if (!is_index)
 	{
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 		/* only tables have toast tables, not indexes */
 		if (OidIsValid(pg_class_reltoastrelid))
@@ -3132,18 +3132,18 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 			 */
 
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_class_reltoastrelid);
 
 			/* every toast table has an index */
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_index_indexrelid);
 		}
 	}
 	else
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 
 	appendPQExpBufferChar(upgrade_buffer, '\n');
@@ -8362,7 +8362,7 @@ dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
 		appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
 
 		appendPQExpBufferStr(q,
-							 "SELECT binary_upgrade.create_empty_extension(");
+							 "SELECT pg_catalog.binary_upgrade_create_empty_extension(");
 		appendStringLiteralAH(q, extinfo->dobj.name, fout);
 		appendPQExpBufferStr(q, ", ");
 		appendStringLiteralAH(q, extinfo->namespace, fout);
@@ -8540,7 +8540,7 @@ dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
 			if (i == 0)
 				appendPQExpBufferStr(q, "\n-- For binary upgrade, must preserve pg_enum oids\n");
 			appendPQExpBuffer(q,
-							  "SELECT binary_upgrade.set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
 							  enum_oid);
 			appendPQExpBuffer(q, "ALTER TYPE %s.",
 							  fmtId(tyinfo->dobj.namespace->dobj.name));
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 3e3b433..ea612d4 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -781,7 +781,7 @@ dumpRoles(PGconn *conn)
 		{
 			appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_authid.oid\n");
 			appendPQExpBuffer(buf,
-							  "SELECT binary_upgrade.set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
 							  auth_oid);
 		}
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 9edfdb8..6388cec 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -5143,6 +5143,26 @@ DESCR("rank of hypothetical row without gaps");
 DATA(insert OID = 3993 ( dense_rank_final	PGNSP PGUID 12 1 0 2276 0 f f f f f f i 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_	hypothetical_dense_rank_final _null_ _null_ _null_ ));
 DESCR("aggregate final function");
 
+/* pg_upgrade support */
+DATA(insert OID = 3584 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3585 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3586 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3587 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3588 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3589 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3591 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3788 ( binary_upgrade_create_empty_extension PGNSP PGUID  12 1 0 0 0 f f f f t f v 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+
 
 /*
  * Symbolic values for provolatile column: these indicate whether the result
-- 
2.2.1.212.gc5b9256

0009-Move-pg_upgrade-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From 0ca047da63b9146fc05a7a4f44c0a843f1145dba Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 13:58:49 +0900
Subject: [PATCH 09/13] Move pg_upgrade from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/pgupgrade.sgml                    | 12 ++----------
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_upgrade/.gitignore     |  0
 {contrib => src/bin}/pg_upgrade/IMPLEMENTATION |  2 --
 {contrib => src/bin}/pg_upgrade/Makefile       | 18 +++++++-----------
 {contrib => src/bin}/pg_upgrade/TESTING        |  2 --
 {contrib => src/bin}/pg_upgrade/check.c        |  2 +-
 {contrib => src/bin}/pg_upgrade/controldata.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/dump.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/exec.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/file.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/function.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/info.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/option.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/page.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/parallel.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.h   |  2 +-
 {contrib => src/bin}/pg_upgrade/relfilenode.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/server.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/tablespace.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/test.sh        |  6 +++---
 {contrib => src/bin}/pg_upgrade/util.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/version.c      |  2 +-
 27 files changed, 31 insertions(+), 47 deletions(-)
 rename {contrib => src/bin}/pg_upgrade/.gitignore (100%)
 rename {contrib => src/bin}/pg_upgrade/IMPLEMENTATION (99%)
 rename {contrib => src/bin}/pg_upgrade/Makefile (79%)
 rename {contrib => src/bin}/pg_upgrade/TESTING (99%)
 rename {contrib => src/bin}/pg_upgrade/check.c (99%)
 rename {contrib => src/bin}/pg_upgrade/controldata.c (99%)
 rename {contrib => src/bin}/pg_upgrade/dump.c (99%)
 rename {contrib => src/bin}/pg_upgrade/exec.c (99%)
 rename {contrib => src/bin}/pg_upgrade/file.c (99%)
 rename {contrib => src/bin}/pg_upgrade/function.c (99%)
 rename {contrib => src/bin}/pg_upgrade/info.c (99%)
 rename {contrib => src/bin}/pg_upgrade/option.c (99%)
 rename {contrib => src/bin}/pg_upgrade/page.c (99%)
 rename {contrib => src/bin}/pg_upgrade/parallel.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.h (99%)
 rename {contrib => src/bin}/pg_upgrade/relfilenode.c (99%)
 rename {contrib => src/bin}/pg_upgrade/server.c (99%)
 rename {contrib => src/bin}/pg_upgrade/tablespace.c (98%)
 rename {contrib => src/bin}/pg_upgrade/test.sh (98%)
 rename {contrib => src/bin}/pg_upgrade/util.c (99%)
 rename {contrib => src/bin}/pg_upgrade/version.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c20d4fe..a30eb5a 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_stat_statements \
 		pg_trgm		\
-		pg_upgrade	\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index aa47634..a8982db 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -201,6 +201,5 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index 8d70727..bee62c4 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -240,7 +240,8 @@ mv /usr/local/pgsql /usr/local/pgsql.old
     <title>Install the new PostgreSQL binaries</title>
 
     <para>
-     Install the new server's binaries and support files.
+     Install the new server's binaries and support
+     files.  <application>pg_upgrade</> is included in a default installation.
     </para>
 
     <para>
@@ -253,15 +254,6 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade</title>
-
-    <para>
-     Install the <application>pg_upgrade</> binary in the new PostgreSQL
-     installation.
-    </para>
-   </step>
-
-   <step>
     <title>Initialize the new PostgreSQL cluster</title>
 
     <para>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index ac0ee62..a26ec9f 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -265,6 +265,7 @@
    &pgstandby;
    &pgtestfsync;
    &pgtesttiming;
+   &pgupgrade;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index c00647d..b01f2c2 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -25,6 +25,7 @@ SUBDIRS = \
 	pg_standby \
 	pg_test_fsync \
 	pg_test_timing \
+	pg_upgrade \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
similarity index 100%
rename from contrib/pg_upgrade/.gitignore
rename to src/bin/pg_upgrade/.gitignore
diff --git a/contrib/pg_upgrade/IMPLEMENTATION b/src/bin/pg_upgrade/IMPLEMENTATION
similarity index 99%
rename from contrib/pg_upgrade/IMPLEMENTATION
rename to src/bin/pg_upgrade/IMPLEMENTATION
index a0cfcf1..9b5ff72 100644
--- a/contrib/pg_upgrade/IMPLEMENTATION
+++ b/src/bin/pg_upgrade/IMPLEMENTATION
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/IMPLEMENTATION
-
 ------------------------------------------------------------------------------
 PG_UPGRADE: IN-PLACE UPGRADES FOR POSTGRESQL
 ------------------------------------------------------------------------------
diff --git a/contrib/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
similarity index 79%
rename from contrib/pg_upgrade/Makefile
rename to src/bin/pg_upgrade/Makefile
index 87da4b8..c22daa5 100644
--- a/contrib/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,8 +1,12 @@
-# contrib/pg_upgrade/Makefile
+# src/bin/pg_upgrade/Makefile
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
 
+subdir = src/bin/pg_upgrade
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
@@ -15,16 +19,8 @@ EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
               pg_upgrade_dump_globals.sql \
               pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/contrib/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
similarity index 99%
rename from contrib/pg_upgrade/TESTING
rename to src/bin/pg_upgrade/TESTING
index 359688c..4ecfc57 100644
--- a/contrib/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/TESTING
-
 The most effective way to test pg_upgrade, aside from testing on user
 data, is by upgrading the PostgreSQL regression database.
 
diff --git a/contrib/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
similarity index 99%
rename from contrib/pg_upgrade/check.c
rename to src/bin/pg_upgrade/check.c
index 87e9031..c50eff2 100644
--- a/contrib/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -4,7 +4,7 @@
  *	server checks and output routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/check.c
+ *	src/bin/pg_upgrade/check.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
similarity index 99%
rename from contrib/pg_upgrade/controldata.c
rename to src/bin/pg_upgrade/controldata.c
index a02a8ec..6818354 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -4,7 +4,7 @@
  *	controldata functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/controldata.c
+ *	src/bin/pg_upgrade/controldata.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c
similarity index 99%
rename from contrib/pg_upgrade/dump.c
rename to src/bin/pg_upgrade/dump.c
index 906e85f..2c20e84 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/src/bin/pg_upgrade/dump.c
@@ -4,7 +4,7 @@
  *	dump functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/dump.c
+ *	src/bin/pg_upgrade/dump.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
similarity index 99%
rename from contrib/pg_upgrade/exec.c
rename to src/bin/pg_upgrade/exec.c
index bf87419..7d31912 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -4,7 +4,7 @@
  *	execution functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/exec.c
+ *	src/bin/pg_upgrade/exec.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c
similarity index 99%
rename from contrib/pg_upgrade/file.c
rename to src/bin/pg_upgrade/file.c
index 5a8d17a..79d9390 100644
--- a/contrib/pg_upgrade/file.c
+++ b/src/bin/pg_upgrade/file.c
@@ -4,7 +4,7 @@
  *	file system operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/file.c
+ *	src/bin/pg_upgrade/file.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/function.c b/src/bin/pg_upgrade/function.c
similarity index 99%
rename from contrib/pg_upgrade/function.c
rename to src/bin/pg_upgrade/function.c
index d8009d1..04492a5 100644
--- a/contrib/pg_upgrade/function.c
+++ b/src/bin/pg_upgrade/function.c
@@ -4,7 +4,7 @@
  *	server-side function support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/function.c
+ *	src/bin/pg_upgrade/function.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
similarity index 99%
rename from contrib/pg_upgrade/info.c
rename to src/bin/pg_upgrade/info.c
index 1254934..c0a5601 100644
--- a/contrib/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -4,7 +4,7 @@
  *	information support functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/info.c
+ *	src/bin/pg_upgrade/info.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c
similarity index 99%
rename from contrib/pg_upgrade/option.c
rename to src/bin/pg_upgrade/option.c
index 9b387be..ce339ce 100644
--- a/contrib/pg_upgrade/option.c
+++ b/src/bin/pg_upgrade/option.c
@@ -4,7 +4,7 @@
  *	options functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/option.c
+ *	src/bin/pg_upgrade/option.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/page.c b/src/bin/pg_upgrade/page.c
similarity index 99%
rename from contrib/pg_upgrade/page.c
rename to src/bin/pg_upgrade/page.c
index 1cfc10f..3f4c697 100644
--- a/contrib/pg_upgrade/page.c
+++ b/src/bin/pg_upgrade/page.c
@@ -4,7 +4,7 @@
  *	per-page conversion operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/page.c
+ *	src/bin/pg_upgrade/page.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c
similarity index 99%
rename from contrib/pg_upgrade/parallel.c
rename to src/bin/pg_upgrade/parallel.c
index 6da9965..c6978b5 100644
--- a/contrib/pg_upgrade/parallel.c
+++ b/src/bin/pg_upgrade/parallel.c
@@ -4,7 +4,7 @@
  *	multi-process support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/parallel.c
+ *	src/bin/pg_upgrade/parallel.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.c
rename to src/bin/pg_upgrade/pg_upgrade.c
index 1ff01a7..0333a91 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -4,7 +4,7 @@
  *	main source file
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.c
+ *	src/bin/pg_upgrade/pg_upgrade.c
  */
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.h
rename to src/bin/pg_upgrade/pg_upgrade.h
index f9c239d..bc81acb 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -2,7 +2,7 @@
  *	pg_upgrade.h
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.h
+ *	src/bin/pg_upgrade/pg_upgrade.h
  */
 
 #include <unistd.h>
diff --git a/contrib/pg_upgrade/relfilenode.c b/src/bin/pg_upgrade/relfilenode.c
similarity index 99%
rename from contrib/pg_upgrade/relfilenode.c
rename to src/bin/pg_upgrade/relfilenode.c
index 423802b..fe05880 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/src/bin/pg_upgrade/relfilenode.c
@@ -4,7 +4,7 @@
  *	relfilenode functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/relfilenode.c
+ *	src/bin/pg_upgrade/relfilenode.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
similarity index 99%
rename from contrib/pg_upgrade/server.c
rename to src/bin/pg_upgrade/server.c
index c5f66f0..8d8e7d7 100644
--- a/contrib/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -4,7 +4,7 @@
  *	database server functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/server.c
+ *	src/bin/pg_upgrade/server.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c
similarity index 98%
rename from contrib/pg_upgrade/tablespace.c
rename to src/bin/pg_upgrade/tablespace.c
index eecdf4b..ce7097e 100644
--- a/contrib/pg_upgrade/tablespace.c
+++ b/src/bin/pg_upgrade/tablespace.c
@@ -4,7 +4,7 @@
  *	tablespace functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/tablespace.c
+ *	src/bin/pg_upgrade/tablespace.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
similarity index 98%
rename from contrib/pg_upgrade/test.sh
rename to src/bin/pg_upgrade/test.sh
index 2e9f976..93bbd97 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# contrib/pg_upgrade/test.sh
+# src/bin/pg_upgrade/test.sh
 #
 # Test driver for pg_upgrade.  Initializes a new database cluster,
 # runs the regression tests (to put in some data), runs pg_dumpall,
@@ -92,9 +92,9 @@ fi
 
 : ${oldbindir=$bindir}
 
-: ${oldsrc=../..}
+: ${oldsrc=../../..}
 oldsrc=`cd "$oldsrc" && pwd`
-newsrc=`cd ../.. && pwd`
+newsrc=`cd ../../.. && pwd`
 
 PATH=$bindir:$PATH
 export PATH
diff --git a/contrib/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
similarity index 99%
rename from contrib/pg_upgrade/util.c
rename to src/bin/pg_upgrade/util.c
index ec18526..6856fc8 100644
--- a/contrib/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -4,7 +4,7 @@
  *	utility functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/util.c
+ *	src/bin/pg_upgrade/util.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c
similarity index 99%
rename from contrib/pg_upgrade/version.c
rename to src/bin/pg_upgrade/version.c
index 4ae9511..e3e7387 100644
--- a/contrib/pg_upgrade/version.c
+++ b/src/bin/pg_upgrade/version.c
@@ -4,7 +4,7 @@
  *	Postgres-version-specific routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/version.c
+ *	src/bin/pg_upgrade/version.c
  */
 
 #include "postgres_fe.h"
-- 
2.2.1.212.gc5b9256

0010-Add-MSVC-support-for-new-modules-in-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From 7aa183b7bdc21364182f5e27d703fcbbec58ed98 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Mon, 15 Dec 2014 22:16:36 -0800
Subject: [PATCH 10/13] Add MSVC support for new modules in src/bin

---
 src/tools/msvc/Mkvcbuild.pm | 154 +++++++++++++++++++++++++-------------------
 src/tools/msvc/clean.bat    |   4 +-
 src/tools/msvc/vcregress.pl |   6 +-
 3 files changed, 92 insertions(+), 72 deletions(-)

diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 4336f2e..254f2e4 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -29,29 +29,34 @@ my $libpgcommon;
 my $postgres;
 my $libpq;
 
+# Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
-my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
-my @contrib_uselibpgport = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
-my @contrib_uselibpgcommon = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
-my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
+my @contrib_uselibpq = ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
+my @contrib_uselibpgport = ('oid2name', 'vacuumlo');
+my @contrib_uselibpgcommon = ('oid2name', 'vacuumlo');
+my $contrib_extralibs = {};
 my $contrib_extraincludes =
-  { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
-my $contrib_extrasource = {
-	'cube' => [ 'cubescan.l', 'cubeparse.y' ],
-	'seg'  => [ 'segscan.l',  'segparse.y' ], };
+  { 'tsearch2' => ['contrib\tsearch2'], 'dblink' => ['src\backend'] };
+my $contrib_extrafiles = {
+	'cube' => [ 'contrib\cube\cubescan.l', 'contrib\cube\cubeparse.y' ],
+	'seg'  => [ 'contrib\seg\segscan.l',  'contrib\seg\segparse.y' ], };
 my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
+# Set of variables for frontend modules
+my $frontend_defines = { 'initdb' => 'FRONTEND' };
+my @frontend_uselibpq = ('pg_ctl', 'pg_upgrade', 'pgbench', 'psql');
+my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
+						  'pg_restore' => ['ws2_32.lib'],
+						  'pgbench' => ['ws2_32.lib'],
+						  'psql' => ['ws2_32.lib'] };
+my $frontend_extraincludes = {
+   'initdb' => ['src\timezone'],
+   'psql' => ['src\bin\pg_dump', 'src\backend'] };
+my $frontend_extrafiles = {
+	'psql' => [ 'src\bin\psql\psqlscan.l' ] };
+my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
+						 'pg_xlogdump', 'scripts');
+
 sub mkvcbuild
 {
 	our $config = shift;
@@ -378,11 +383,15 @@ sub mkvcbuild
 	$pgregress_isolation->AddReference($libpgcommon, $libpgport);
 
 	# src/bin
-	my $initdb = AddSimpleFrontend('initdb');
-	$initdb->AddIncludeDir('src\interfaces\libpq');
-	$initdb->AddIncludeDir('src\timezone');
-	$initdb->AddDefine('FRONTEND');
-	$initdb->AddLibrary('ws2_32.lib');
+	my $D;
+	opendir($D, 'src/bin') || croak "Could not opendir on src/bin!\n";
+	while (my $d = readdir($D))
+	{
+		next if ($d =~ /^\./);
+		next unless (-f "src/bin/$d/Makefile");
+		next if (grep { /^$d$/ } @frontend_excludes);
+		AddSimpleFrontend($d);
+	}
 
 	my $pgbasebackup = AddSimpleFrontend('pg_basebackup', 1);
 	$pgbasebackup->AddFile('src\bin\pg_basebackup\pg_basebackup.c');
@@ -398,14 +407,6 @@ sub mkvcbuild
 	$pgrecvlogical->AddFile('src\bin\pg_basebackup\pg_recvlogical.c');
 	$pgrecvlogical->AddLibrary('ws2_32.lib');
 
-	my $pgconfig = AddSimpleFrontend('pg_config');
-
-	my $pgcontrol = AddSimpleFrontend('pg_controldata');
-
-	my $pgctl = AddSimpleFrontend('pg_ctl', 1);
-
-	my $pgreset = AddSimpleFrontend('pg_resetxlog');
-
 	my $pgevent = $solution->AddProject('pgevent', 'dll', 'bin');
 	$pgevent->AddFiles('src\bin\pgevent', 'pgevent.c', 'pgmsgevent.rc');
 	$pgevent->AddResourceFile('src\bin\pgevent', 'Eventlog message formatter',
@@ -414,12 +415,6 @@ sub mkvcbuild
 	$pgevent->UseDef('src\bin\pgevent\pgevent.def');
 	$pgevent->DisableLinkerWarnings('4104');
 
-	my $psql = AddSimpleFrontend('psql', 1);
-	$psql->AddIncludeDir('src\bin\pg_dump');
-	$psql->AddIncludeDir('src\backend');
-	$psql->AddFile('src\bin\psql\psqlscan.l');
-	$psql->AddLibrary('ws2_32.lib');
-
 	my $pgdump = AddSimpleFrontend('pg_dump', 1);
 	$pgdump->AddIncludeDir('src\backend');
 	$pgdump->AddFile('src\bin\pg_dump\pg_dump.c');
@@ -454,6 +449,19 @@ sub mkvcbuild
 	$pgrestore->AddFile('src\backend\parser\kwlookup.c');
 	$pgrestore->AddLibrary('ws2_32.lib');
 
+	# Get necessary files for pg_xlogdump as files symlinked
+	# on Linux are copied on Windows.
+	my $pgxlogdump = AddSimpleFrontend('pg_xlogdump');
+	$pgxlogdump->AddDefine('FRONTEND');
+	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
+	{
+		my $bf = basename $xf;
+		copy($xf, "src/bin/pg_xlogdump/$bf");
+		$pgxlogdump->AddFile("src\\bin\\pg_xlogdump\\$bf");
+	}
+	copy('src/backend/access/transam/xlogreader.c',
+		 'src/bin/pg_xlogdump/xlogreader.c');
+
 	my $zic = $solution->AddProject('zic', 'exe', 'utils');
 	$zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c',
 		'localtime.c');
@@ -530,7 +538,6 @@ sub mkvcbuild
 	my $mf = Project::read_file('contrib/pgcrypto/Makefile');
 	GenerateContribSqlFiles('pgcrypto', $mf);
 
-	my $D;
 	opendir($D, 'contrib') || croak "Could not opendir on contrib!\n";
 	while (my $d = readdir($D))
 	{
@@ -612,22 +619,6 @@ sub mkvcbuild
 	$pgregress->AddDirResourceFile('src\test\regress');
 	$pgregress->AddReference($libpgcommon, $libpgport);
 
-	# fix up pg_xlogdump once it's been set up
-	# files symlinked on Unix are copied on windows
-	my $pg_xlogdump =
-	  (grep { $_->{name} eq 'pg_xlogdump' }
-		  @{ $solution->{projects}->{contrib} })[0];
-	$pg_xlogdump->AddDefine('FRONTEND');
-	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
-	{
-		my $bf = basename $xf;
-		copy($xf, "contrib/pg_xlogdump/$bf");
-		$pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf");
-	}
-	copy(
-		'src/backend/access/transam/xlogreader.c',
-		'contrib/pg_xlogdump/xlogreader.c');
-
 	$solution->Save();
 	return $solution->{vcver};
 }
@@ -650,6 +641,9 @@ sub AddSimpleFrontend
 		$p->AddIncludeDir('src\interfaces\libpq');
 		$p->AddReference($libpq);
 	}
+	# Adjust module definition using frontent variables
+	AdjustFrontendProj($p);
+
 	return $p;
 }
 
@@ -742,45 +736,71 @@ sub GenerateContribSqlFiles
 sub AdjustContribProj
 {
 	my $proj = shift;
-	my $n    = $proj->{name};
+	AdjustModule($proj, $contrib_defines, \@contrib_uselibpq,
+		\@contrib_uselibpgport, \@contrib_uselibpgcommon, $contrib_extralibs,
+		$contrib_extrafiles, $contrib_extraincludes);
+}
 
-	if ($contrib_defines->{$n})
+sub AdjustFrontendProj
+{
+	my $proj = shift;
+	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq,
+		undef, undef, $frontend_extralibs,
+		$frontend_extrafiles, $frontend_extraincludes);
+}
+
+sub AdjustModule
+{
+	my $proj                  = shift;
+	my $module_defines        = shift;
+	my $module_uselibpq       = shift;
+	my $module_uselibpgport   = shift;
+	my $module_uselibpgcommon = shift;
+	my $module_extralibs      = shift;
+	my $module_extrafiles     = shift;
+	my $module_extraincludes  = shift;
+	my $n                     = $proj->{name};
+
+	if ($module_defines->{$n})
 	{
-		foreach my $d ($contrib_defines->{$n})
+		foreach my $d ($module_defines->{$n})
 		{
 			$proj->AddDefine($d);
 		}
 	}
-	if (grep { /^$n$/ } @contrib_uselibpq)
+	if (grep { /^$n$/ } @{ $module_uselibpq })
 	{
 		$proj->AddIncludeDir('src\interfaces\libpq');
 		$proj->AddReference($libpq);
 	}
-	if (grep { /^$n$/ } @contrib_uselibpgport)
+	if (grep { /^$n$/ } @{ $module_uselibpgport })
 	{
 		$proj->AddReference($libpgport);
 	}
-	if (grep { /^$n$/ } @contrib_uselibpgcommon)
+	if (grep { /^$n$/ } @{ $module_uselibpgcommon })
 	{
 		$proj->AddReference($libpgcommon);
 	}
-	if ($contrib_extralibs->{$n})
+	if ($module_extralibs->{$n})
 	{
-		foreach my $l (@{ $contrib_extralibs->{$n} })
+		foreach my $l (@{ $module_extralibs->{$n} })
 		{
 			$proj->AddLibrary($l);
 		}
 	}
-	if ($contrib_extraincludes->{$n})
+	if ($module_extraincludes->{$n})
 	{
-		foreach my $i (@{ $contrib_extraincludes->{$n} })
+		foreach my $i (@{ $module_extraincludes->{$n} })
 		{
 			$proj->AddIncludeDir($i);
 		}
 	}
-	if ($contrib_extrasource->{$n})
+	if ($module_extrafiles->{$n})
 	{
-		$proj->AddFiles('contrib\\' . $n, @{ $contrib_extrasource->{$n} });
+		foreach my $i (@{ $module_extrafiles->{$n} })
+		{
+			$proj->AddFile($i);
+		}
 	}
 }
 
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index bd3dd2c..4812a03 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -269,7 +269,7 @@ sub upgradecheck
 
 	$ENV{PGHOST} = 'localhost';
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -282,7 +282,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	standard_initdb() or exit 1;
@@ -292,7 +292,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
2.2.1.212.gc5b9256

0011-Move-documentation-of-new-src-bin-utilities-to-ref.patchtext/x-patch; charset=us-asciiDownload
>From d4a3851cefb483541cbf1b897fcd3903d04fc25b Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Tue, 23 Dec 2014 15:12:04 +0900
Subject: [PATCH 11/13] Move documentation of new src/bin utilities to ref/

Their sgml ID is not updated to keep consistent URLs with past versions.
---
 doc/src/sgml/filelist.sgml                   |  6 ------
 doc/src/sgml/ref/allfiles.sgml               |  7 +++++++
 doc/src/sgml/{ => ref}/pg_xlogdump.sgml      |  0
 doc/src/sgml/{ => ref}/pgarchivecleanup.sgml | 13 ++++---------
 doc/src/sgml/{ => ref}/pgstandby.sgml        | 13 ++++---------
 doc/src/sgml/{ => ref}/pgtestfsync.sgml      | 13 ++++---------
 doc/src/sgml/{ => ref}/pgtesttiming.sgml     | 13 ++++---------
 doc/src/sgml/{ => ref}/pgupgrade.sgml        |  5 ++++-
 doc/src/sgml/reference.sgml                  | 12 ++++++------
 9 files changed, 33 insertions(+), 49 deletions(-)
 rename doc/src/sgml/{ => ref}/pg_xlogdump.sgml (100%)
 rename doc/src/sgml/{ => ref}/pgarchivecleanup.sgml (97%)
 rename doc/src/sgml/{ => ref}/pgstandby.sgml (98%)
 rename doc/src/sgml/{ => ref}/pgtestfsync.sgml (95%)
 rename doc/src/sgml/{ => ref}/pgtesttiming.sgml (98%)
 rename doc/src/sgml/{ => ref}/pgupgrade.sgml (99%)

diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index f03b72a..2e3a618 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -125,20 +125,14 @@
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
 <!ENTITY pgbench         SYSTEM "pgbench.sgml">
-<!ENTITY pgarchivecleanup SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
 <!ENTITY pgprewarm       SYSTEM "pgprewarm.sgml">
 <!ENTITY pgrowlocks      SYSTEM "pgrowlocks.sgml">
-<!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtestfsync     SYSTEM "pgtestfsync.sgml">
-<!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
-<!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
-<!ENTITY pgxlogdump      SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 7aa3128..f709d65 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -179,6 +179,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY dropuser           SYSTEM "dropuser.sgml">
 <!ENTITY ecpgRef            SYSTEM "ecpg-ref.sgml">
 <!ENTITY initdb             SYSTEM "initdb.sgml">
+<!ENTITY pgArchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
@@ -190,6 +191,12 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgStandby          SYSTEM "pgstandby.sgml">
+<!ENTITY pgTestfsync        SYSTEM "pgtestfsync.sgml">
+<!ENTITY pgTesttiming       SYSTEM "pgtesttiming.sgml">
+<!ENTITY pgUpgrade          SYSTEM "pgupgrade.sgml">
+<!ENTITY pgXlogdump         SYSTEM "pg_xlogdump.sgml">
+
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
 <!ENTITY psqlRef            SYSTEM "psql-ref.sgml">
diff --git a/doc/src/sgml/pg_xlogdump.sgml b/doc/src/sgml/ref/pg_xlogdump.sgml
similarity index 100%
rename from doc/src/sgml/pg_xlogdump.sgml
rename to doc/src/sgml/ref/pg_xlogdump.sgml
diff --git a/doc/src/sgml/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
similarity index 97%
rename from doc/src/sgml/pgarchivecleanup.sgml
rename to doc/src/sgml/ref/pgarchivecleanup.sgml
index fdf0cbb..2665c53 100644
--- a/doc/src/sgml/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -1,4 +1,7 @@
-<!-- doc/src/sgml/pgarchivecleanup.sgml -->
+<!--
+doc/src/sgml/ref/pgarchivecleanup.sgml
+PostgreSQL documentation
+-->
 
 <refentry id="pgarchivecleanup">
  <indexterm zone="pgarchivecleanup">
@@ -194,14 +197,6 @@ archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>clean
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Simon Riggs <email>simon@2ndquadrant.com</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/pgstandby.sgml b/doc/src/sgml/ref/pgstandby.sgml
similarity index 98%
rename from doc/src/sgml/pgstandby.sgml
rename to doc/src/sgml/ref/pgstandby.sgml
index fb3f32e..87d5043 100644
--- a/doc/src/sgml/pgstandby.sgml
+++ b/doc/src/sgml/ref/pgstandby.sgml
@@ -1,4 +1,7 @@
-<!-- doc/src/sgml/pgstandby.sgml -->
+<!--
+doc/src/sgml/ref/pgstandby.sgml
+PostgreSQL documentation
+-->
 
 <refentry id="pgstandby">
  <indexterm zone="pgstandby">
@@ -377,14 +380,6 @@ recovery_end_command = 'del C:\pgsql.trigger.5442'
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Simon Riggs <email>simon@2ndquadrant.com</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
similarity index 95%
rename from doc/src/sgml/pgtestfsync.sgml
rename to doc/src/sgml/ref/pgtestfsync.sgml
index c4b4014..3f76071 100644
--- a/doc/src/sgml/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -1,4 +1,7 @@
-<!-- doc/src/sgml/pgtestfsync.sgml -->
+<!--
+doc/src/sgml/ref/pgtestfsync.sgml
+PostgreSQL documentation
+-->
 
 <refentry id="pgtestfsync">
  <indexterm zone="pgtestfsync">
@@ -104,14 +107,6 @@
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Bruce Momjian <email>bruce@momjian.us</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml
similarity index 98%
rename from doc/src/sgml/pgtesttiming.sgml
rename to doc/src/sgml/ref/pgtesttiming.sgml
index a6ab9b1..9850538 100644
--- a/doc/src/sgml/pgtesttiming.sgml
+++ b/doc/src/sgml/ref/pgtesttiming.sgml
@@ -1,4 +1,7 @@
-<!-- doc/src/sgml/pgtesttiming.sgml -->
+<!--
+doc/src/sgml/ref/pgtesttiming.sgml
+PostgreSQL documentation
+-->
 
 <refentry id="pgtesttiming">
  <indexterm zone="pgtesttiming">
@@ -291,14 +294,6 @@ Histogram of timing durations:
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Ants Aasma <email>ants.aasma@eesti.ee</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
similarity index 99%
rename from doc/src/sgml/pgupgrade.sgml
rename to doc/src/sgml/ref/pgupgrade.sgml
index bee62c4..c073234 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/ref/pgupgrade.sgml
@@ -1,4 +1,7 @@
-<!-- doc/src/sgml/pgupgrade.sgml -->
+<!--
+doc/src/sgml/ref/pgupgrade.sgml
+PostgreSQL documentation
+-->
 
 <refentry id="pgupgrade">
  <indexterm zone="pgupgrade">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index a26ec9f..8a9c03d 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -258,15 +258,15 @@
   </partintro>
 
    &initdb;
-   &pgarchivecleanup;
+   &pgArchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
-   &pgstandby;
-   &pgtestfsync;
-   &pgtesttiming;
-   &pgupgrade;
-   &pgxlogdump;
+   &pgStandby;
+   &pgTestfsync;
+   &pgTesttiming;
+   &pgUpgrade;
+   &pgXlogdump;
    &postgres;
    &postmaster;
 
-- 
2.2.1.212.gc5b9256

0012-fixup-Integrate-pg_upgrade_support-module-into-backe.patchtext/x-patch; charset=us-asciiDownload
>From 39e4ef56b0c87916afbea8e428d54ac413bef3f6 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sat, 17 Jan 2015 13:31:50 +0100
Subject: [PATCH 12/13] fixup! Integrate pg_upgrade_support module into backend

---
 src/backend/utils/adt/pg_upgrade_support.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/backend/utils/adt/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
index e7be910..aadc50f 100644
--- a/src/backend/utils/adt/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -7,7 +7,6 @@
  *
  *	Copyright (c) 2010-201t, PostgreSQL Global Development Group
  *	src/backend/utils/adt/pg_upgrade_support.c
-port.c
  */
 
 #include "postgres.h"
@@ -21,19 +20,19 @@ port.c
 #include "utils/builtins.h"
 
 
-Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
-Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+extern Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
 
-#define CHECK_IS_BINARY_UPGRADE 								\
-do { 															\
+#define CHECK_IS_BINARY_UPGRADE									\
+do {															\
 	if (!IsBinaryUpgrade)										\
 		ereport(ERROR,											\
 				(errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),	\
-- 
2.2.1.212.gc5b9256

0013-fixup-Move-pg_upgrade-from-contrib-to-src-bin.patchtext/x-patch; charset=us-asciiDownload
>From cf26b6f238ef9ca62a15d8ebe1a950a6b3424672 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Sat, 17 Jan 2015 13:56:08 +0100
Subject: [PATCH 13/13] fixup! Move pg_upgrade from contrib/ to src/bin/

---
 src/bin/pg_upgrade/test.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
index 93bbd97..0903f30 100644
--- a/src/bin/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -21,7 +21,7 @@ unset MAKELEVEL
 # authentication configuration.
 standard_initdb() {
 	"$1" -N
-	../../src/test/regress/pg_regress --config-auth "$PGDATA"
+	../../test/regress/pg_regress --config-auth "$PGDATA"
 }
 
 # Establish how the server will listen for connections
-- 
2.2.1.212.gc5b9256

#61Michael Paquier
michael.paquier@gmail.com
In reply to: Andres Freund (#60)
1 attachment(s)
Re: moving from contrib to bin

On Sat, Jan 17, 2015 at 10:08 PM, Andres Freund <andres@2ndquadrant.com> wrote:

Observations:
1) Are we sure it's a good idea to rely on pgxs.mk in src/bin programs?

Yeah, this seems like a bad dependency, PGXS being made for contrib
modules... So corrected in the patch attached (the headers of the
Makefiles are improved as well to be consistent with the other
utilities, btw there is code duplication in each Makefile if we do not
use PGXS stuff in src/bin).

4) I have doubts that it's ok to integrate the tests in src/bin just the
way they were done in contrib.

Are you referring to the tests of pg_upgrade?

5) Doing the msvc support for all intermediate commits in a separate
commit strikes me as a bad idea. Essentially that makes the split
pretty pointless.
6) Similarly I'd much rather see the doc movement in the same commit as
the actually moved utility. Then we can start applying this one by one
on whatever we have agreement.

Well, sure. The split was done just to facilitate review with stuff to
be applied directly on top of what Peter already did. And note that I
agree as well that everything should be done in a single commit.
Separating things would break build on a platform or another if a
build is done based on an intermediate state of this work, that would
not be nice.

7) Are we sure that the authors in the affected contrib modules are ok
with their authorship notice being removed? I don't think Ants, Bruce
or Simon have a problem with that, but ...

Yeah, agreed that I have really too aggressive with what I did. Let's
CC all the authors on this thread and get directly their permission to
process then. Some people may accept, other no, so let's see.

8) Why did you remove Peter as the git author?

I applied on my local repo this series of patches after some bash-ing
without preserving any meta data, so the author name has just been
changed on the way, and then ran a simple git format to generate the
whole set once again. Well, sorry if this was confusing, but let's be
clear anyway: I have no intention to make mine the work of Peter (or
any other people).

I've also pushed the git tree of these changes to
http://git.postgresql.org/gitweb/?p=users/andresfreund/postgres.git;a=summary
branch move-contrib-bins-to-bin

That's helpful. I just picked it up and built the patch attached that
can be applied on top of it, correcting the Makefiles and the
reference to the authors in the docs.

FWIW, my branch, based on yours is here:
https://github.com/michaelpq/postgres/tree/contrib_to_bin
Regards,
--
Michael

Attachments:

0001-Fix-Makefiles-and-re-add-author-references.patchtext/x-diff; charset=US-ASCII; name=0001-Fix-Makefiles-and-re-add-author-references.patchDownload
From 7b55ad274aa30d43cfdabb822f72257b3cec8336 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Sun, 18 Jan 2015 21:01:02 +0900
Subject: [PATCH] Fix Makefiles and re-add author references

---
 doc/src/sgml/ref/pgarchivecleanup.sgml |  8 ++++++++
 doc/src/sgml/ref/pgstandby.sgml        |  8 ++++++++
 doc/src/sgml/ref/pgtestfsync.sgml      |  8 ++++++++
 doc/src/sgml/ref/pgtesttiming.sgml     |  8 ++++++++
 src/bin/pg_archivecleanup/Makefile     | 30 +++++++++++++++++++++++----
 src/bin/pg_standby/Makefile            | 30 +++++++++++++++++++++++----
 src/bin/pg_test_fsync/Makefile         | 28 ++++++++++++++++++++++---
 src/bin/pg_test_timing/Makefile        | 28 ++++++++++++++++++++++---
 src/bin/pg_upgrade/Makefile            | 37 ++++++++++++++++++++++++++--------
 src/bin/pg_xlogdump/Makefile           | 33 ++++++++++++++++++++++++------
 src/bin/pgbench/Makefile               | 33 ++++++++++++++++++++++++------
 11 files changed, 217 insertions(+), 34 deletions(-)

diff --git a/doc/src/sgml/ref/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
index 2665c53..f9f32e9 100644
--- a/doc/src/sgml/ref/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -197,6 +197,14 @@ archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>clean
  </refsect1>
 
  <refsect1>
+  <title>Author</title>
+
+  <para>
+   Simon Riggs <email>simon@2ndquadrant.com</email>
+  </para>
+ </refsect1>
+
+ <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/ref/pgstandby.sgml b/doc/src/sgml/ref/pgstandby.sgml
index 87d5043..698a6c2 100644
--- a/doc/src/sgml/ref/pgstandby.sgml
+++ b/doc/src/sgml/ref/pgstandby.sgml
@@ -380,6 +380,14 @@ recovery_end_command = 'del C:\pgsql.trigger.5442'
  </refsect1>
 
  <refsect1>
+  <title>Author</title>
+
+  <para>
+   Simon Riggs <email>simon@2ndquadrant.com</email>
+  </para>
+ </refsect1>
+
+ <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/ref/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
index 3f76071..f704ab5 100644
--- a/doc/src/sgml/ref/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -107,6 +107,14 @@ PostgreSQL documentation
  </refsect1>
 
  <refsect1>
+  <title>Author</title>
+
+  <para>
+   Bruce Momjian <email>bruce@momjian.us</email>
+  </para>
+ </refsect1>
+
+ <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/ref/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml
index 9850538..d1279fc 100644
--- a/doc/src/sgml/ref/pgtesttiming.sgml
+++ b/doc/src/sgml/ref/pgtesttiming.sgml
@@ -294,6 +294,14 @@ Histogram of timing durations:
  </refsect1>
 
  <refsect1>
+  <title>Author</title>
+
+  <para>
+   Ants Aasma <email>ants.aasma@eesti.ee</email>
+  </para>
+ </refsect1>
+
+ <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
index 5df86eb..b7d792e 100644
--- a/src/bin/pg_archivecleanup/Makefile
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -1,4 +1,13 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_archivecleanup
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pg_archivecleanup/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
 PGAPPICON = win32
@@ -7,8 +16,21 @@ subdir = src/bin/pg_archivecleanup
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM = pg_archivecleanup
-OBJS	= pg_archivecleanup.o $(WIN32RES)
+OBJS = pg_archivecleanup.o $(WIN32RES)
 
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+all: pg_archivecleanup
+
+pg_archivecleanup: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pg_archivecleanup$(X) '$(DESTDIR)$(bindir)/pg_archivecleanup$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pg_archivecleanup$(X)'
+
+clean distclean maintainer-clean:
+	rm -f pg_archivecleanup$(X) $(OBJS)
diff --git a/src/bin/pg_standby/Makefile b/src/bin/pg_standby/Makefile
index d45a47d..a975eae 100644
--- a/src/bin/pg_standby/Makefile
+++ b/src/bin/pg_standby/Makefile
@@ -1,4 +1,13 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_standby
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pg_standby/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pg_standby - supports creation of a warm standby"
 PGAPPICON = win32
@@ -7,8 +16,21 @@ subdir = src/bin/pg_standby
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM = pg_standby
-OBJS	= pg_standby.o $(WIN32RES)
+OBJS = pg_standby.o $(WIN32RES)
 
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+all: pg_standby
+
+pg_standby: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pg_standby$(X) '$(DESTDIR)$(bindir)/pg_standby$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pg_standby$(X)'
+
+clean distclean maintainer-clean:
+	rm -f pg_standby$(X) $(OBJS)
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
index e8d1952..72cf50b 100644
--- a/src/bin/pg_test_fsync/Makefile
+++ b/src/bin/pg_test_fsync/Makefile
@@ -1,4 +1,13 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_test_fsync
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pg_test_fsync/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pg_test_fsync - test various disk sync methods"
 PGAPPICON = win32
@@ -7,8 +16,21 @@ subdir = src/bin/pg_test_fsync
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM  = pg_test_fsync
 OBJS = pg_test_fsync.o $(WIN32RES)
 
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+all: pg_test_fsync
+
+pg_test_fsync: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pg_test_fsync$(X) '$(DESTDIR)$(bindir)/pg_test_fsync$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pg_test_fsync$(X)'
+
+clean distclean maintainer-clean:
+	rm -f pg_test_fsync$(X) $(OBJS)
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
index f96d2e9..61f0a04 100644
--- a/src/bin/pg_test_timing/Makefile
+++ b/src/bin/pg_test_timing/Makefile
@@ -1,4 +1,13 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_test_timing
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pg_test_timing/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pg_test_timing - test timing overhead"
 PGAPPICON = win32
@@ -7,8 +16,21 @@ subdir = src/bin/pg_test_timing
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM  = pg_test_timing
 OBJS = pg_test_timing.o $(WIN32RES)
 
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+all: pg_test_timing
+
+pg_test_timing: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pg_test_timing$(X) '$(DESTDIR)$(bindir)/pg_test_timing$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pg_test_timing$(X)'
+
+clean distclean maintainer-clean:
+	rm -f pg_test_timing$(X) $(OBJS)
diff --git a/src/bin/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
index c22daa5..0f67a76 100644
--- a/src/bin/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,4 +1,13 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_upgrade
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pg_upgrade/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
@@ -7,20 +16,32 @@ subdir = src/bin/pg_upgrade
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
        tablespace.o util.o version.o $(WIN32RES)
 
-PG_CPPFLAGS  = -DFRONTEND -DDLSUFFIX=\"$(DLSUFFIX)\" -I$(srcdir) -I$(libpq_srcdir)
-PG_LIBS = $(libpq_pgport)
+override CPPFLAGS := -DFRONTEND -DDLSUFFIX=\"$(DLSUFFIX)\" -I$(srcdir) -I$(libpq_srcdir) $(CPPFLAGS)
 
-EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
-              pg_upgrade_dump_globals.sql \
-              pg_upgrade_dump_*.custom pg_upgrade_*.log
+EXTRA_OBJS = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
+	     pg_upgrade_dump_globals.sql \
+	     pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+all: pg_upgrade
+
+pg_upgrade: $(OBJS) | submake-libpq submake-libpgport
+	$(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pg_upgrade$(X) '$(DESTDIR)$(bindir)/pg_upgrade$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pg_upgrade$(X)'
+
+clean distclean maintainer-clean:
+	rm -rf pg_upgrade$(X) $(OBJS) $(EXTRA_OBJS)
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/src/bin/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
index ab8597b..067ed44 100644
--- a/src/bin/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,13 +1,21 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pg_xlogdump
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pg_xlogdump/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
-PGAPPICON=win32
+PGAPPICON = win32
 
 subdir = src/bin/pg_xlogdump
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
 override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
@@ -15,14 +23,27 @@ override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
-EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
-
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+EXTRA_OBJS = $(RMGRDESCSOURCES) xlogreader.c
 
+all: pg_xlogdump
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
 
 $(RMGRDESCSOURCES): % : $(top_srcdir)/src/backend/access/rmgrdesc/%
 	rm -f $@ && $(LN_S) $< .
+
+pg_xlogdump: $(OBJS)
+	$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pg_xlogdump$(X) '$(DESTDIR)$(bindir)/pg_xlogdump$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pg_xlogdump$(X)'
+
+clean distclean maintainer-clean:
+	rm -f pg_xlogdump$(X) $(OBJS) $(EXTRA_OBJS)
diff --git a/src/bin/pgbench/Makefile b/src/bin/pgbench/Makefile
index de4863c..5ac7283 100644
--- a/src/bin/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,4 +1,13 @@
+#-------------------------------------------------------------------------
+#
+# Makefile for src/bin/pgbench
+#
+# Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
 # src/bin/pgbench/Makefile
+#
+#-------------------------------------------------------------------------
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
@@ -7,15 +16,27 @@ subdir = src/bin/pgbench
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAM = pgbench
 OBJS	= pgbench.o $(WIN32RES)
 
-PG_CPPFLAGS = -I$(libpq_srcdir)
-PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
-
-NO_PGXS = 1
-include $(top_srcdir)/src/makefiles/pgxs.mk
+override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
 endif
+
+all: pgbench
+
+pgbench: $(OBJS) | submake-libpq submake-libpgport
+	$(CC) $(CFLAGS) $(OBJS) $(libpq_pgport) $(PTHREAD_LIBS) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
+
+install: all installdirs
+	$(INSTALL_PROGRAM) pgbench$(X) '$(DESTDIR)$(bindir)/pgbench$(X)'
+
+installdirs:
+	$(MKDIR_P) '$(DESTDIR)$(bindir)'
+
+uninstall:
+	rm -f '$(DESTDIR)$(bindir)/pgbench$(X)'
+
+clean distclean maintainer-clean:
+	rm -f pgbench$(X) $(OBJS)
-- 
2.2.2

#62Michael Paquier
michael.paquier@gmail.com
In reply to: Michael Paquier (#61)
Re: moving from contrib to bin

Simon, Bruce, Ants,
(CCing..)

On Sun, Jan 18, 2015 at 9:05 PM, Michael Paquier
<michael.paquier@gmail.com> wrote:

On Sat, Jan 17, 2015 at 10:08 PM, Andres Freund <andres@2ndquadrant.com> wrote:

7) Are we sure that the authors in the affected contrib modules are ok
with their authorship notice being removed? I don't think Ants, Bruce
or Simon have a problem with that, but ...

Yeah, agreed that I have really too aggressive with what I did. Let's
CC all the authors on this thread and get directly their permission to
process then. Some people may accept, other no, so let's see.

Just to give some background if you didn't follow closely this thread:
we are discussing about moving a couple of binary utilities from
contrib/ to src/bin/, utilities whose author is one of you. To make
documentation consistent with all the other bin/ utilities we are
thinking about removing the mention to the authors. Would you agree
with that? Here are the utilities impacted:
- pg_archivecleanup (Simon)
- pg_standby (Simon)
- pg_test_fsync (Bruce)
- pg_test_timing (Ants)
Regards,
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#63Andrew Gierth
andrew@tao11.riddles.org.uk
In reply to: Andres Freund (#59)
Re: moving from contrib to bin

Correct me if I'm wrong, but is it not the case that:

1) pg_standby was intended to be customizable code, even if usable as
distributed, and

2) in any event it is essentially deprecated in favour of standby_mode

and therefore moving it to src/bin seems like a wrong move on two counts?

--
Andrew (irc:RhodiumToad)

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#64Michael Paquier
michael.paquier@gmail.com
In reply to: Andrew Gierth (#63)
Re: moving from contrib to bin

On Sun, Jan 18, 2015 at 9:56 PM, Andrew Gierth
<andrew@tao11.riddles.org.uk> wrote:

Correct me if I'm wrong, but is it not the case that:
1) pg_standby was intended to be customizable code, even if usable as
distributed, and

I am not sure about that.

2) in any event it is essentially deprecated in favour of standby_mode
and therefore moving it to src/bin seems like a wrong move on two counts?

There were some discussions about that a couple of months ago, and the
conclusion was to not remove it. Please see here for more information:
/messages/by-id/545946E9.8060504@gmx.net
Regards,
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#65Andres Freund
andres@2ndquadrant.com
In reply to: Andrew Gierth (#63)
Re: moving from contrib to bin

Hi,

On 2015-01-18 12:56:59 +0000, Andrew Gierth wrote:

Correct me if I'm wrong, but is it not the case that:

1) pg_standby was intended to be customizable code, even if usable as
distributed, and

I don't think that really happened in reality though...

2) in any event it is essentially deprecated in favour of standby_mode

Right.

and therefore moving it to src/bin seems like a wrong move on two counts?

I personally agree that that pg_standby shouldn't be moved. Even if we
could not find agreement to remove it, there's little reason to move it
imo. My reading of the previous discussion was that we're far from alone
with that position. That's why I'd like to have the patchseries in a
way that individual moves can be applied separately.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#66Andres Freund
andres@2ndquadrant.com
In reply to: Michael Paquier (#64)
Re: moving from contrib to bin

On 2015-01-18 22:02:13 +0900, Michael Paquier wrote:

On Sun, Jan 18, 2015 at 9:56 PM, Andrew Gierth

2) in any event it is essentially deprecated in favour of standby_mode
and therefore moving it to src/bin seems like a wrong move on two counts?

There were some discussions about that a couple of months ago, and the
conclusion was to not remove it. Please see here for more information:
/messages/by-id/545946E9.8060504@gmx.net

Sure, but not removing doesn't imply moving it. The other tools don't
have a replacement and are more or less actively maintained. I don't
think that's really the case for pg_standby. We do *not* want to give
it more credence by declaring it to be part of core.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#67Andres Freund
andres@2ndquadrant.com
In reply to: Michael Paquier (#61)
Re: moving from contrib to bin

On 2015-01-18 21:05:29 +0900, Michael Paquier wrote:

On Sat, Jan 17, 2015 at 10:08 PM, Andres Freund <andres@2ndquadrant.com> wrote:

Observations:
1) Are we sure it's a good idea to rely on pgxs.mk in src/bin programs?

Yeah, this seems like a bad dependency, PGXS being made for contrib
modules... So corrected in the patch attached (the headers of the
Makefiles are improved as well to be consistent with the other
utilities, btw there is code duplication in each Makefile if we do not
use PGXS stuff in src/bin).

Yes, there's a fair amount of duplication. I do think there's a good
case for making the Makefiles less redundant, but we should do that in
all src/bin binaries, and in a separate patch.

4) I have doubts that it's ok to integrate the tests in src/bin just the
way they were done in contrib.

Are you referring to the tests of pg_upgrade?

Yes.

5) Doing the msvc support for all intermediate commits in a separate
commit strikes me as a bad idea. Essentially that makes the split
pretty pointless.
6) Similarly I'd much rather see the doc movement in the same commit as
the actually moved utility. Then we can start applying this one by one
on whatever we have agreement.

Well, sure. The split was done just to facilitate review with stuff to
be applied directly on top of what Peter already did. And note that I
agree as well that everything should be done in a single commit.

I don't think all of the moves should be done in one commit. I'd much
rather do e.g. all the pg_upgrade stuff in one, and the rest in another.

Separating things would break build on a platform or another if a
build is done based on an intermediate state of this work, that would
not be nice.

Yes, that's why commits in a series should be standalone. I.e. all
should work on all platforms. Possibly individual ones don't add
features, but they shouldn't break things.

8) Why did you remove Peter as the git author?

I applied on my local repo this series of patches after some bash-ing
without preserving any meta data, so the author name has just been
changed on the way, and then ran a simple git format to generate the
whole set once again. Well, sorry if this was confusing, but let's be
clear anyway: I have no intention to make mine the work of Peter (or
any other people).

You know that you can apply patch series like Peter's (or from your tar
archive) using 'git am'? Which preserves the author, message and such?

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#68Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Andres Freund (#65)
Re: moving from contrib to bin

Andres Freund wrote:

Hi,

On 2015-01-18 12:56:59 +0000, Andrew Gierth wrote:

and therefore moving it to src/bin seems like a wrong move on two counts?

I personally agree that that pg_standby shouldn't be moved. Even if we
could not find agreement to remove it, there's little reason to move it
imo. My reading of the previous discussion was that we're far from alone
with that position.

There was clear agreement on a set of things tomove, and as I recall
pg_standby was not in it. Wasn't this patch series updated to comply
with what was agreed?

That's why I'd like to have the patchseries in a way that individual
moves can be applied separately.

Yeah.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#69Peter Eisentraut
peter_e@gmx.net
In reply to: Andres Freund (#60)
Re: moving from contrib to bin

On 1/17/15 8:08 AM, Andres Freund wrote:

1) Are we sure it's a good idea to rely on pgxs.mk in src/bin programs?

I am. Why not?

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#70Peter Eisentraut
peter_e@gmx.net
In reply to: Andres Freund (#66)
Re: moving from contrib to bin

On 1/18/15 8:16 AM, Andres Freund wrote:

On 2015-01-18 22:02:13 +0900, Michael Paquier wrote:

On Sun, Jan 18, 2015 at 9:56 PM, Andrew Gierth

2) in any event it is essentially deprecated in favour of standby_mode
and therefore moving it to src/bin seems like a wrong move on two counts?

There were some discussions about that a couple of months ago, and the
conclusion was to not remove it. Please see here for more information:
/messages/by-id/545946E9.8060504@gmx.net

Sure, but not removing doesn't imply moving it. The other tools don't
have a replacement and are more or less actively maintained. I don't
think that's really the case for pg_standby. We do *not* want to give
it more credence by declaring it to be part of core.

I don't really care much, but the discussion appeared to indicate that
pg_standby currently does not have a full replacement.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#71Michael Paquier
michael.paquier@gmail.com
In reply to: Andres Freund (#67)
Re: moving from contrib to bin

On Sun, Jan 18, 2015 at 10:21 PM, Andres Freund <andres@2ndquadrant.com> wrote:

On 2015-01-18 21:05:29 +0900, Michael Paquier wrote:

On Sat, Jan 17, 2015 at 10:08 PM, Andres Freund <andres@2ndquadrant.com> wrote:

Observations:
1) Are we sure it's a good idea to rely on pgxs.mk in src/bin programs?

Yeah, this seems like a bad dependency, PGXS being made for contrib
modules... So corrected in the patch attached (the headers of the
Makefiles are improved as well to be consistent with the other
utilities, btw there is code duplication in each Makefile if we do not
use PGXS stuff in src/bin).

Yes, there's a fair amount of duplication. I do think there's a good
case for making the Makefiles less redundant, but we should do that in
all src/bin binaries, and in a separate patch.

Agreed on that. pg_ctl is a good candidate for improvement as well.

4) I have doubts that it's ok to integrate the tests in src/bin just the
way they were done in contrib.

Are you referring to the tests of pg_upgrade?

Yes.

I am not foreseeing any problems with the way they are done now as
long as they continue to use pg_regress to initialize the cluster.
Perhaps you have something on top of your mind?

5) Doing the msvc support for all intermediate commits in a separate
commit strikes me as a bad idea. Essentially that makes the split
pretty pointless.
6) Similarly I'd much rather see the doc movement in the same commit as
the actually moved utility. Then we can start applying this one by one
on whatever we have agreement.

Well, sure. The split was done just to facilitate review with stuff to
be applied directly on top of what Peter already did. And note that I
agree as well that everything should be done in a single commit.

I don't think all of the moves should be done in one commit. I'd much
rather do e.g. all the pg_upgrade stuff in one, and the rest in another.

OK. I am fine with that. pg_upgrade move touches backend code.

Now the remaining point seems to be: do we move pg_standby as well?
Seeing the last emails of this thread the answer would be to let it
end its life happily in contrib/.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#72Bruce Momjian
bruce@momjian.us
In reply to: Andres Freund (#59)
Re: moving from contrib to bin

On Sat, Jan 17, 2015 at 01:16:18PM +0100, Andres Freund wrote:

Hi,

FWIW, I find it rather annoying if people attach patchsets as
tarballs. That makes it impossible to look at them in the mailreader
since I really don't have anything reasonable to go on to teach it to
treat it as a set of patches.

I'd also like to see patches that primarily move code around as git diff
-M -C style diffs (can also be passed to format-patch). That will show
the file move and then additionally the changes that have been made in
addition to the rename. There's no sane way the current diffs can be
reviewed without applying them to a tree.

FYI, the .gitconfig setting is 'renames':

[diff]
renames = copies

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#73Bruce Momjian
bruce@momjian.us
In reply to: Andres Freund (#60)
Re: moving from contrib to bin

On Sat, Jan 17, 2015 at 02:08:34PM +0100, Andres Freund wrote:

7) Are we sure that the authors in the affected contrib modules are ok
with their authorship notice being removed? I don't think Ants, Bruce
or Simon have a problem with that, but ...

I am fine. It means others can be blamed. ;-)

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#74Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Andres Freund (#60)
Re: moving from contrib to bin

Andres Freund wrote:

Rebased (fair amount of trivial conflicts due to the copyright year
bump) and attached as -MC style format-patch. If you look at the content
of the patches you can see that the diff makes more sense now.

Ah --- I just realized that the change Peter is proposing from backslash
to forward slashes in the MSVC build stuff is related to testability of
this patch set in non-Windows environments. Can we get that patch done
please? It seems there's only a small bit missing there.

How do we go about getting these patches pushed?

Note that each utility we move to src/bin will create a new translatable
module for 9.5. It would be better to do it soon rather than waiting at
the very end of the cycle, so that translators have time to work through
the bunch of extra files.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#75Michael Paquier
michael.paquier@gmail.com
In reply to: Alvaro Herrera (#74)
Re: moving from contrib to bin

On Tue, Mar 10, 2015 at 10:48 PM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

Andres Freund wrote:

Rebased (fair amount of trivial conflicts due to the copyright year
bump) and attached as -MC style format-patch. If you look at the content
of the patches you can see that the diff makes more sense now.

Ah --- I just realized that the change Peter is proposing from backslash
to forward slashes in the MSVC build stuff is related to testability of
this patch set in non-Windows environments. Can we get that patch done
please? It seems there's only a small bit missing there.

How do we go about getting these patches pushed?

I think that one of the last point raised (by Andres) was if the
Makefiles in src/bin should depend on pgxs.mk or not. FWIW, I think as
well that it should be a subsequent patch not related to this one as
it is a different debate to have stuff of src/bin depend on contrib
infrastructure.

Now, the pushing plan was to have the stuff of pg_upgrade done in a
separate commit. Note that I am fine helping out wrapping up things
particularly on Windows if that helps.

Note that each utility we move to src/bin will create a new translatable
module for 9.5. It would be better to do it soon rather than waiting at
the very end of the cycle, so that translators have time to work through
the bunch of extra files.

That's a point.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#76Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Michael Paquier (#75)
Re: moving from contrib to bin

Michael Paquier wrote:

On Tue, Mar 10, 2015 at 10:48 PM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

How do we go about getting these patches pushed?

I think that one of the last point raised (by Andres) was if the
Makefiles in src/bin should depend on pgxs.mk or not. FWIW, I think as
well that it should be a subsequent patch not related to this one as
it is a different debate to have stuff of src/bin depend on contrib
infrastructure.

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

Now, the pushing plan was to have the stuff of pg_upgrade done in a
separate commit. Note that I am fine helping out wrapping up things
particularly on Windows if that helps.

I vote for moving one module per commmit. Probably the first commit
will be the hardest one to get right, so let's pick an easy module --
say, pgbench. That way there are less gotchas hopefully. Once we have
that working everywhere we look into moving another one.

Note that each utility we move to src/bin will create a new translatable
module for 9.5. It would be better to do it soon rather than waiting at
the very end of the cycle, so that translators have time to work through
the bunch of extra files.

That's a point.

I'm a translator ;-)

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#77Michael Paquier
michael.paquier@gmail.com
In reply to: Alvaro Herrera (#76)
Re: moving from contrib to bin

On Wed, Mar 11, 2015 at 10:06 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

Michael Paquier wrote:

On Tue, Mar 10, 2015 at 10:48 PM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

How do we go about getting these patches pushed?

I think that one of the last point raised (by Andres) was if the
Makefiles in src/bin should depend on pgxs.mk or not. FWIW, I think as
well that it should be a subsequent patch not related to this one as
it is a different debate to have stuff of src/bin depend on contrib
infrastructure.

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

Now, the pushing plan was to have the stuff of pg_upgrade done in a
separate commit. Note that I am fine helping out wrapping up things
particularly on Windows if that helps.

I vote for moving one module per commmit. Probably the first commit
will be the hardest one to get right, so let's pick an easy module --
say, pgbench. That way there are less gotchas hopefully. Once we have
that working everywhere we look into moving another one.

Fine for me. You want a cross-OS patch?
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#78Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Michael Paquier (#77)
Re: moving from contrib to bin

Michael Paquier wrote:

On Wed, Mar 11, 2015 at 10:06 AM, Alvaro Herrera
<alvherre@2ndquadrant.com> wrote:

Now, the pushing plan was to have the stuff of pg_upgrade done in a
separate commit. Note that I am fine helping out wrapping up things
particularly on Windows if that helps.

I vote for moving one module per commmit. Probably the first commit
will be the hardest one to get right, so let's pick an easy module --
say, pgbench. That way there are less gotchas hopefully. Once we have
that working everywhere we look into moving another one.

Fine for me. You want a cross-OS patch?

Yep, I'm willing to testing and pushing such a patch.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#79Peter Eisentraut
peter_e@gmx.net
In reply to: Alvaro Herrera (#78)
7 attachment(s)
Re: moving from contrib to bin

Here is a rebase of my previous patch set. I have integrated the
various minor fixes from Michael and Andres. I have dropped moving
pg_standby, because no one seemed to like that.

I wasn't able to do anything with Michael's Mkvcbuild.pm patch, since
that appeared to include a significant refactoring along with the actual
move. Maybe the refactoring can be done separately first?

Otherwise, I suggest we start with the first patch, pg_archivecleanup,
fix up the Windows build system for it, and commit it, and repeat.

Attachments:

0001-Move-pg_archivecleanup-from-contrib-to-src-bin.patchapplication/x-patch; name=0001-Move-pg_archivecleanup-from-contrib-to-src-bin.patchDownload
From a4bb7c5276a9db10f06259f11a3a8f8a0dd49645 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:23 -0400
Subject: [PATCH 1/7] Move pg_archivecleanup from contrib/ to src/bin/

---
 contrib/Makefile                                       |  1 -
 contrib/pg_archivecleanup/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                              |  1 -
 doc/src/sgml/filelist.sgml                             |  1 -
 doc/src/sgml/ref/allfiles.sgml                         |  1 +
 doc/src/sgml/{ => ref}/pgarchivecleanup.sgml           | 10 +---------
 doc/src/sgml/reference.sgml                            |  1 +
 src/bin/Makefile                                       |  1 +
 {contrib => src/bin}/pg_archivecleanup/.gitignore      |  0
 src/bin/pg_archivecleanup/Makefile                     | 14 ++++++++++++++
 .../bin}/pg_archivecleanup/pg_archivecleanup.c         |  2 +-
 11 files changed, 19 insertions(+), 31 deletions(-)
 delete mode 100644 contrib/pg_archivecleanup/Makefile
 rename doc/src/sgml/{ => ref}/pgarchivecleanup.sgml (97%)
 rename {contrib => src/bin}/pg_archivecleanup/.gitignore (100%)
 create mode 100644 src/bin/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/pg_archivecleanup.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 195d447..c56050e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -28,7 +28,6 @@ SUBDIRS = \
 		oid2name	\
 		pageinspect	\
 		passwordcheck	\
-		pg_archivecleanup \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
diff --git a/contrib/pg_archivecleanup/Makefile b/contrib/pg_archivecleanup/Makefile
deleted file mode 100644
index ab52390..0000000
--- a/contrib/pg_archivecleanup/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_archivecleanup/Makefile
-
-PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
-PGAPPICON = win32
-
-PROGRAM = pg_archivecleanup
-OBJS	= pg_archivecleanup.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_archivecleanup
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index a698d0f..f21fa14 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ <title>Server Applications</title>
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgarchivecleanup;
  &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index f03b72a..5e3c34b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -125,7 +125,6 @@
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
 <!ENTITY pgbench         SYSTEM "pgbench.sgml">
-<!ENTITY pgarchivecleanup SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 7aa3128..cbe4611 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -179,6 +179,7 @@
 <!ENTITY dropuser           SYSTEM "dropuser.sgml">
 <!ENTITY ecpgRef            SYSTEM "ecpg-ref.sgml">
 <!ENTITY initdb             SYSTEM "initdb.sgml">
+<!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
diff --git a/doc/src/sgml/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
similarity index 97%
rename from doc/src/sgml/pgarchivecleanup.sgml
rename to doc/src/sgml/ref/pgarchivecleanup.sgml
index fdf0cbb..779159d 100644
--- a/doc/src/sgml/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgarchivecleanup.sgml -->
+<!-- doc/src/sgml/ref/pgarchivecleanup.sgml -->
 
 <refentry id="pgarchivecleanup">
  <indexterm zone="pgarchivecleanup">
@@ -194,14 +194,6 @@ <title>Examples</title>
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Simon Riggs <email>simon@2ndquadrant.com</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 10c9a6d..62267db 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -257,6 +257,7 @@ <title>PostgreSQL Server Applications</title>
   </partintro>
 
    &initdb;
+   &pgarchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 90ca1a8..2347076 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
 	initdb \
+	pg_archivecleanup \
 	pg_basebackup \
 	pg_config \
 	pg_controldata \
diff --git a/contrib/pg_archivecleanup/.gitignore b/src/bin/pg_archivecleanup/.gitignore
similarity index 100%
rename from contrib/pg_archivecleanup/.gitignore
rename to src/bin/pg_archivecleanup/.gitignore
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
new file mode 100644
index 0000000..5df86eb
--- /dev/null
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_archivecleanup/Makefile
+
+PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
+PGAPPICON = win32
+
+subdir = src/bin/pg_archivecleanup
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_archivecleanup
+OBJS	= pg_archivecleanup.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c
similarity index 99%
rename from contrib/pg_archivecleanup/pg_archivecleanup.c
rename to src/bin/pg_archivecleanup/pg_archivecleanup.c
index 97225a8..2ff2a27 100644
--- a/contrib/pg_archivecleanup/pg_archivecleanup.c
+++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_archivecleanup/pg_archivecleanup.c
+ * src/bin/pg_archivecleanup/pg_archivecleanup.c
  *
  * pg_archivecleanup.c
  *
-- 
2.3.2

0002-Move-pg_xlogdump-from-contrib-to-src-bin.patchapplication/x-patch; name=0002-Move-pg_xlogdump-from-contrib-to-src-bin.patchDownload
From 38fba4b4202e8ba72eb2575f6c919080a04a61ed Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 2/7] Move pg_xlogdump from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pg_xlogdump.sgml        |  0
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_xlogdump/.gitignore    |  0
 {contrib => src/bin}/pg_xlogdump/Makefile      | 19 ++++++++-----------
 {contrib => src/bin}/pg_xlogdump/compat.c      |  2 +-
 {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.c    |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.h    |  2 +-
 src/tools/msvc/clean.bat                       |  4 ++--
 14 files changed, 17 insertions(+), 20 deletions(-)
 rename doc/src/sgml/{ => ref}/pg_xlogdump.sgml (100%)
 rename {contrib => src/bin}/pg_xlogdump/.gitignore (100%)
 rename {contrib => src/bin}/pg_xlogdump/Makefile (76%)
 rename {contrib => src/bin}/pg_xlogdump/compat.c (98%)
 rename {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c (99%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.c (96%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.h (91%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c56050e..d9557b8 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -42,7 +42,6 @@ SUBDIRS = \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
-		pg_xlogdump	\
 		postgres_fdw	\
 		seg		\
 		spi		\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index f21fa14..d0e1446 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -206,6 +206,5 @@ <title>Server Applications</title>
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
- &pgxlogdump;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5e3c34b..3b26a70 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -137,7 +137,6 @@
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
-<!ENTITY pgxlogdump      SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index cbe4611..17260b9 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -191,6 +191,7 @@
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
 <!ENTITY psqlRef            SYSTEM "psql-ref.sgml">
diff --git a/doc/src/sgml/pg_xlogdump.sgml b/doc/src/sgml/ref/pg_xlogdump.sgml
similarity index 100%
rename from doc/src/sgml/pg_xlogdump.sgml
rename to doc/src/sgml/ref/pg_xlogdump.sgml
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 62267db..07c923b 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -261,6 +261,7 @@ <title>PostgreSQL Server Applications</title>
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgxlogdump;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 2347076..469798e 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_xlogdump \
 	psql \
 	scripts
 
diff --git a/contrib/pg_xlogdump/.gitignore b/src/bin/pg_xlogdump/.gitignore
similarity index 100%
rename from contrib/pg_xlogdump/.gitignore
rename to src/bin/pg_xlogdump/.gitignore
diff --git a/contrib/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
similarity index 76%
rename from contrib/pg_xlogdump/Makefile
rename to src/bin/pg_xlogdump/Makefile
index 30a8706..ab8597b 100644
--- a/contrib/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,28 +1,25 @@
-# contrib/pg_xlogdump/Makefile
+# src/bin/pg_xlogdump/Makefile
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
 PGAPPICON=win32
 
+subdir = src/bin/pg_xlogdump
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
+override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
 EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
 
-ifdef USE_PGXS
-$(error "pg_xlogdump cannot be built with PGXS")
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
-subdir = contrib/pg_xlogdump
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-
-
-override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
diff --git a/contrib/pg_xlogdump/compat.c b/src/bin/pg_xlogdump/compat.c
similarity index 98%
rename from contrib/pg_xlogdump/compat.c
rename to src/bin/pg_xlogdump/compat.c
index 4f5cad6..3d8ce30 100644
--- a/contrib/pg_xlogdump/compat.c
+++ b/src/bin/pg_xlogdump/compat.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		contrib/pg_xlogdump/compat.c
+ *		src/bin/pg_xlogdump/compat.c
  *
  * This file contains client-side implementations for various backend
  * functions that the rm_desc functions in *desc.c files rely on.
diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
similarity index 99%
rename from contrib/pg_xlogdump/pg_xlogdump.c
rename to src/bin/pg_xlogdump/pg_xlogdump.c
index c1bfbc2..67932af 100644
--- a/contrib/pg_xlogdump/pg_xlogdump.c
+++ b/src/bin/pg_xlogdump/pg_xlogdump.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		  contrib/pg_xlogdump/pg_xlogdump.c
+ *		  src/bin/pg_xlogdump/pg_xlogdump.c
  *-------------------------------------------------------------------------
  */
 
diff --git a/contrib/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c
similarity index 96%
rename from contrib/pg_xlogdump/rmgrdesc.c
rename to src/bin/pg_xlogdump/rmgrdesc.c
index bd3344c..2205d6e 100644
--- a/contrib/pg_xlogdump/rmgrdesc.c
+++ b/src/bin/pg_xlogdump/rmgrdesc.c
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers definition
  *
- * contrib/pg_xlogdump/rmgrdesc.c
+ * src/bin/pg_xlogdump/rmgrdesc.c
  */
 #define FRONTEND 1
 #include "postgres.h"
diff --git a/contrib/pg_xlogdump/rmgrdesc.h b/src/bin/pg_xlogdump/rmgrdesc.h
similarity index 91%
rename from contrib/pg_xlogdump/rmgrdesc.h
rename to src/bin/pg_xlogdump/rmgrdesc.h
index aec4418..5440f94 100644
--- a/contrib/pg_xlogdump/rmgrdesc.h
+++ b/src/bin/pg_xlogdump/rmgrdesc.h
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers declaration
  *
- * contrib/pg_xlogdump/rmgrdesc.h
+ * src/bin/pg_xlogdump/rmgrdesc.h
  */
 #ifndef RMGRDESC_H
 #define RMGRDESC_H
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
-- 
2.3.2

0003-Move-pgbench-from-contrib-to-src-bin.patchapplication/x-patch; name=0003-Move-pgbench-from-contrib-to-src-bin.patchDownload
From 963bcab5fcb16e5525885275ebaee55a682636bd Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 3/7] Move pgbench from contrib/ to src/bin/

---
 contrib/Makefile                         |  1 -
 doc/src/sgml/contrib.sgml                |  1 -
 doc/src/sgml/filelist.sgml               |  1 -
 doc/src/sgml/ref/allfiles.sgml           |  1 +
 doc/src/sgml/{ => ref}/pgbench.sgml      |  2 +-
 doc/src/sgml/reference.sgml              |  1 +
 src/bin/Makefile                         |  1 +
 {contrib => src/bin}/pgbench/.gitignore  |  0
 {contrib => src/bin}/pgbench/Makefile    | 18 +++++++-----------
 {contrib => src/bin}/pgbench/exprparse.y |  0
 {contrib => src/bin}/pgbench/exprscan.l  |  0
 {contrib => src/bin}/pgbench/pgbench.c   |  2 +-
 {contrib => src/bin}/pgbench/pgbench.h   |  0
 13 files changed, 12 insertions(+), 16 deletions(-)
 rename doc/src/sgml/{ => ref}/pgbench.sgml (99%)
 rename {contrib => src/bin}/pgbench/.gitignore (100%)
 rename {contrib => src/bin}/pgbench/Makefile (68%)
 rename {contrib => src/bin}/pgbench/exprparse.y (100%)
 rename {contrib => src/bin}/pgbench/exprscan.l (100%)
 rename {contrib => src/bin}/pgbench/pgbench.c (99%)
 rename {contrib => src/bin}/pgbench/pgbench.h (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index d9557b8..bd677d1 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -38,7 +38,6 @@ SUBDIRS = \
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
-		pgbench		\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index d0e1446..577791b 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -187,7 +187,6 @@ <title>Client Applications</title>
   </para>
 
  &oid2name;
- &pgbench;
  &vacuumlo;
  </sect1>
 
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 3b26a70..5bdde7b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -124,7 +124,6 @@
 <!ENTITY oid2name        SYSTEM "oid2name.sgml">
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
-<!ENTITY pgbench         SYSTEM "pgbench.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 17260b9..61462da 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -181,6 +181,7 @@
 <!ENTITY initdb             SYSTEM "initdb.sgml">
 <!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
+<!ENTITY pgbench            SYSTEM "pgbench.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
 <!ENTITY pgCtl              SYSTEM "pg_ctl-ref.sgml">
diff --git a/doc/src/sgml/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
similarity index 99%
rename from doc/src/sgml/pgbench.sgml
rename to doc/src/sgml/ref/pgbench.sgml
index ed12e27..a808546 100644
--- a/doc/src/sgml/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgbench.sgml -->
+<!-- doc/src/sgml/ref/pgbench.sgml -->
 
 <refentry id="pgbench">
  <indexterm zone="pgbench">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 07c923b..d939d01 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -230,6 +230,7 @@ <title>PostgreSQL Client Applications</title>
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
+   &pgbench;
    &pgConfig;
    &pgDump;
    &pgDumpall;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 469798e..3ce7707 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_xlogdump \
+	pgbench \
 	psql \
 	scripts
 
diff --git a/contrib/pgbench/.gitignore b/src/bin/pgbench/.gitignore
similarity index 100%
rename from contrib/pgbench/.gitignore
rename to src/bin/pgbench/.gitignore
diff --git a/contrib/pgbench/Makefile b/src/bin/pgbench/Makefile
similarity index 68%
rename from contrib/pgbench/Makefile
rename to src/bin/pgbench/Makefile
index a18130b..86fd757 100644
--- a/contrib/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,26 +1,22 @@
-# contrib/pgbench/Makefile
+# src/bin/pgbench/Makefile
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
 
+subdir = src/bin/pgbench
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pgbench
 OBJS	= pgbench.o exprparse.o $(WIN32RES)
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgbench
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 distprep: exprparse.c exprscan.c
-endif
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
diff --git a/contrib/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y
similarity index 100%
rename from contrib/pgbench/exprparse.y
rename to src/bin/pgbench/exprparse.y
diff --git a/contrib/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l
similarity index 100%
rename from contrib/pgbench/exprscan.l
rename to src/bin/pgbench/exprscan.l
diff --git a/contrib/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
similarity index 99%
rename from contrib/pgbench/pgbench.c
rename to src/bin/pgbench/pgbench.c
index 706fdf5..43df747 100644
--- a/contrib/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * contrib/pgbench/pgbench.c
+ * src/bin/pgbench/pgbench.c
  * Copyright (c) 2000-2015, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
diff --git a/contrib/pgbench/pgbench.h b/src/bin/pgbench/pgbench.h
similarity index 100%
rename from contrib/pgbench/pgbench.h
rename to src/bin/pgbench/pgbench.h
-- 
2.3.2

0004-Move-pg_test_fsync-from-contrib-to-src-bin.patchapplication/x-patch; name=0004-Move-pg_test_fsync-from-contrib-to-src-bin.patchDownload
From df0c99212e3fb35f2b8f87e0a35b405f227aab86 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 4/7] Move pg_test_fsync from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_test_fsync/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgtestfsync.sgml            | 10 +---------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_test_fsync/.gitignore      |  0
 src/bin/pg_test_fsync/Makefile                     | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c |  0
 11 files changed, 18 insertions(+), 30 deletions(-)
 delete mode 100644 contrib/pg_test_fsync/Makefile
 rename doc/src/sgml/{ => ref}/pgtestfsync.sgml (95%)
 rename {contrib => src/bin}/pg_test_fsync/.gitignore (100%)
 create mode 100644 src/bin/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index bd677d1..ed6ebae 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_fsync	\
 		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile
deleted file mode 100644
index 15afba7..0000000
--- a/contrib/pg_test_fsync/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_test_fsync/Makefile
-
-PGFILEDESC = "pg_test_fsync - test various disk sync methods"
-PGAPPICON = win32
-
-PROGRAM  = pg_test_fsync
-OBJS = pg_test_fsync.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_test_fsync
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 577791b..68cbf78 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ <title>Server Applications</title>
   </para>
 
  &pgstandby;
- &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
  </sect1>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5bdde7b..c14e737 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtestfsync     SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 61462da..572032c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -192,6 +192,7 @@
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
similarity index 95%
rename from doc/src/sgml/pgtestfsync.sgml
rename to doc/src/sgml/ref/pgtestfsync.sgml
index c4b4014..5dcabe4 100644
--- a/doc/src/sgml/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtestfsync.sgml -->
+<!-- doc/src/sgml/ref/pgtestfsync.sgml -->
 
 <refentry id="pgtestfsync">
  <indexterm zone="pgtestfsync">
@@ -104,14 +104,6 @@ <title>Options</title>
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Bruce Momjian <email>bruce@momjian.us</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index d939d01..be7ca70 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -262,6 +262,7 @@ <title>PostgreSQL Server Applications</title>
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgtestfsync;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 3ce7707..497f9ee 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_test_fsync \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
similarity index 100%
rename from contrib/pg_test_fsync/.gitignore
rename to src/bin/pg_test_fsync/.gitignore
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..e8d1952
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_fsync
+OBJS = pg_test_fsync.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
similarity index 100%
rename from contrib/pg_test_fsync/pg_test_fsync.c
rename to src/bin/pg_test_fsync/pg_test_fsync.c
-- 
2.3.2

0005-Move-pg_test_timing-from-contrib-to-src-bin.patchapplication/x-patch; name=0005-Move-pg_test_timing-from-contrib-to-src-bin.patchDownload
From 06b6459a385796a085316144d0baa628ae1ceef5 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 5/7] Move pg_test_timing from contrib/ to src/bin/

---
 contrib/Makefile                                     |  1 -
 contrib/pg_test_timing/Makefile                      | 18 ------------------
 doc/src/sgml/contrib.sgml                            |  1 -
 doc/src/sgml/filelist.sgml                           |  1 -
 doc/src/sgml/ref/allfiles.sgml                       |  1 +
 doc/src/sgml/{ => ref}/pgtesttiming.sgml             | 10 +---------
 doc/src/sgml/reference.sgml                          |  1 +
 src/bin/Makefile                                     |  1 +
 {contrib => src/bin}/pg_test_timing/.gitignore       |  0
 src/bin/pg_test_timing/Makefile                      | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_timing/pg_test_timing.c |  0
 11 files changed, 18 insertions(+), 30 deletions(-)
 delete mode 100644 contrib/pg_test_timing/Makefile
 rename doc/src/sgml/{ => ref}/pgtesttiming.sgml (98%)
 rename {contrib => src/bin}/pg_test_timing/.gitignore (100%)
 create mode 100644 src/bin/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/pg_test_timing.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index ed6ebae..60475c4 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
diff --git a/contrib/pg_test_timing/Makefile b/contrib/pg_test_timing/Makefile
deleted file mode 100644
index 8b37aa8..0000000
--- a/contrib/pg_test_timing/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# contrib/pg_test_timing/Makefile
-
-PGFILEDESC = "pg_test_timing - test timing overhead"
-PGAPPICON = win32
-
-PROGRAM  = pg_test_timing
-OBJS = pg_test_timing.o $(WIN32RES)
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_test_timing
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 68cbf78..885a096 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ <title>Server Applications</title>
   </para>
 
  &pgstandby;
- &pgtesttiming;
  &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index c14e737..d6120e3 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 572032c..39e0244 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -193,6 +193,7 @@
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
+<!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml
similarity index 98%
rename from doc/src/sgml/pgtesttiming.sgml
rename to doc/src/sgml/ref/pgtesttiming.sgml
index a6ab9b1..d5e231f 100644
--- a/doc/src/sgml/pgtesttiming.sgml
+++ b/doc/src/sgml/ref/pgtesttiming.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtesttiming.sgml -->
+<!-- doc/src/sgml/ref/pgtesttiming.sgml -->
 
 <refentry id="pgtesttiming">
  <indexterm zone="pgtesttiming">
@@ -291,14 +291,6 @@ <title>Clock hardware and timing accuracy</title>
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Ants Aasma <email>ants.aasma@eesti.ee</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index be7ca70..99bfcda 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -263,6 +263,7 @@ <title>PostgreSQL Server Applications</title>
    &pgCtl;
    &pgResetxlog;
    &pgtestfsync;
+   &pgtesttiming;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 497f9ee..253119a 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_test_fsync \
+	pg_test_timing \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_timing/.gitignore b/src/bin/pg_test_timing/.gitignore
similarity index 100%
rename from contrib/pg_test_timing/.gitignore
rename to src/bin/pg_test_timing/.gitignore
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
new file mode 100644
index 0000000..f96d2e9
--- /dev/null
+++ b/src/bin/pg_test_timing/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_timing/Makefile
+
+PGFILEDESC = "pg_test_timing - test timing overhead"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_timing
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_timing
+OBJS = pg_test_timing.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c
similarity index 100%
rename from contrib/pg_test_timing/pg_test_timing.c
rename to src/bin/pg_test_timing/pg_test_timing.c
-- 
2.3.2

0006-Integrate-pg_upgrade_support-module-into-backend.patchapplication/x-patch; name=0006-Integrate-pg_upgrade_support-module-into-backend.patchDownload
From 850ddff11204ba0eb04a87d31942dbb8ee064b2b Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 6/7] Integrate pg_upgrade_support module into backend

Previously, these functions were created in a schema "binary_upgrade",
which was deleted after pg_upgrade was finished.  Because we don't want
to keep that schema around permanently, move them to pg_catalog but
rename them with a binary_upgrade_... prefix.

The provided functions are only small wrappers around global variables
that were added specifically for pg_upgrade use, so keeping the module
separate does not create any modularity.

The functions still check that they are only called in binary upgrade
mode, so it is not possible to call these during normal operation.
---
 contrib/Makefile                                   |   1 -
 contrib/pg_upgrade/dump.c                          |   2 +-
 contrib/pg_upgrade/function.c                      | 113 ---------------------
 contrib/pg_upgrade/pg_upgrade.c                    |  27 -----
 contrib/pg_upgrade/pg_upgrade.h                    |   2 -
 contrib/pg_upgrade/test.sh                         |   1 -
 contrib/pg_upgrade_support/Makefile                |  16 ---
 doc/src/sgml/pgupgrade.sgml                        |   5 +-
 src/backend/catalog/heap.c                         |   2 +-
 src/backend/catalog/index.c                        |   2 +-
 src/backend/catalog/pg_enum.c                      |   2 +-
 src/backend/catalog/pg_type.c                      |   2 +-
 src/backend/catalog/toasting.c                     |   2 +-
 src/backend/commands/typecmds.c                    |   2 +-
 src/backend/commands/user.c                        |   2 +-
 src/backend/utils/adt/Makefile                     |   3 +-
 .../backend/utils/adt}/pg_upgrade_support.c        |  45 ++++----
 src/bin/pg_dump/pg_dump.c                          |  18 ++--
 src/bin/pg_dump/pg_dumpall.c                       |   2 +-
 src/include/catalog/pg_proc.h                      |  20 ++++
 20 files changed, 61 insertions(+), 208 deletions(-)
 delete mode 100644 contrib/pg_upgrade_support/Makefile
 rename {contrib/pg_upgrade_support => src/backend/utils/adt}/pg_upgrade_support.c (73%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 60475c4..39e8f1d 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -35,7 +35,6 @@ SUBDIRS = \
 		pg_stat_statements \
 		pg_trgm		\
 		pg_upgrade	\
-		pg_upgrade_support \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/contrib/pg_upgrade/dump.c b/contrib/pg_upgrade/dump.c
index 941c4bb..906e85f 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/contrib/pg_upgrade/dump.c
@@ -121,7 +121,7 @@ optionally_create_toast_tables(void)
 		for (rowno = 0; rowno < ntups; rowno++)
 		{
 			/* enable auto-oid-numbered TOAST creation if needed */
-			PQclear(executeQueryOrDie(conn, "SELECT binary_upgrade.set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
+			PQclear(executeQueryOrDie(conn, "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
 					OPTIONALLY_CREATE_TOAST_OID));
 
 			/* dummy command that also triggers check for required TOAST table */
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index deffe04..d8009d1 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,112 +13,6 @@
 
 #include "access/transam.h"
 
-#define PG_UPGRADE_SUPPORT	"$libdir/pg_upgrade_support"
-
-/*
- * install_support_functions_in_new_db()
- *
- * pg_upgrade requires some support functions that enable it to modify
- * backend behavior.
- */
-void
-install_support_functions_in_new_db(const char *db_name)
-{
-	PGconn	   *conn = connectToServer(&new_cluster, db_name);
-
-	/* suppress NOTICE of dropped objects */
-	PQclear(executeQueryOrDie(conn,
-							  "SET client_min_messages = warning;"));
-	PQclear(executeQueryOrDie(conn,
-						   "DROP SCHEMA IF EXISTS binary_upgrade CASCADE;"));
-	PQclear(executeQueryOrDie(conn,
-							  "RESET client_min_messages;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE SCHEMA binary_upgrade;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_array_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_toast_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_heap_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_index_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_toast_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_enum_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_authid_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.create_empty_extension(text, text, bool, text, oid[], text[], text[]) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C;"));
-	PQfinish(conn);
-}
-
-
-void
-uninstall_support_functions_from_new_cluster(void)
-{
-	int			dbnum;
-
-	prep_status("Removing support functions from new cluster");
-
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-		PGconn	   *conn = connectToServer(&new_cluster, new_db->db_name);
-
-		/* suppress NOTICE of dropped objects */
-		PQclear(executeQueryOrDie(conn,
-								  "SET client_min_messages = warning;"));
-		PQclear(executeQueryOrDie(conn,
-								  "DROP SCHEMA binary_upgrade CASCADE;"));
-		PQclear(executeQueryOrDie(conn,
-								  "RESET client_min_messages;"));
-		PQfinish(conn);
-	}
-	check_ok();
-}
-
 
 /*
  * get_loadable_libraries()
@@ -218,8 +112,6 @@ get_loadable_libraries(void)
 	if (found_public_plpython_handler)
 		pg_fatal("Remove the problem functions from the old cluster to continue.\n");
 
-	totaltups++;				/* reserve for pg_upgrade_support */
-
 	/* Allocate what's certainly enough space */
 	os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
 
@@ -228,7 +120,6 @@ get_loadable_libraries(void)
 	 * there probably aren't enough entries to matter.
 	 */
 	totaltups = 0;
-	os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
 	{
@@ -321,10 +212,6 @@ check_loadable_libraries(void)
 		{
 			found = true;
 
-			/* exit and report missing support library with special message */
-			if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
-				pg_fatal("The pg_upgrade_support module must be created and installed in the new cluster.\n");
-
 			if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
 				pg_fatal("Could not open file \"%s\": %s\n",
 						 output_path, getErrorText(errno));
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index ed7de80..1ff01a7 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -276,14 +276,6 @@ prepare_new_databases(void)
 	prep_status("Restoring global objects in the new cluster");
 
 	/*
-	 * Install support functions in the global-object restore database to
-	 * preserve pg_authid.oid.  pg_dumpall uses 'template0' as its template
-	 * database so objects we add into 'template1' are not propogated.  They
-	 * are removed on pg_upgrade exit.
-	 */
-	install_support_functions_in_new_db("template1");
-
-	/*
 	 * We have to create the databases first so we can install support
 	 * functions in all the other databases.  Ideally we could create the
 	 * support functions in template1 but pg_dumpall creates database using
@@ -305,23 +297,6 @@ create_new_objects(void)
 {
 	int			dbnum;
 
-	prep_status("Adding support functions to new cluster");
-
-	/*
-	 * Technically, we only need to install these support functions in new
-	 * databases that also exist in the old cluster, but for completeness we
-	 * process all new databases.
-	 */
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-
-		/* skip db we already installed */
-		if (strcmp(new_db->db_name, "template1") != 0)
-			install_support_functions_in_new_db(new_db->db_name);
-	}
-	check_ok();
-
 	prep_status("Restoring database schemas in the new cluster\n");
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
@@ -365,8 +340,6 @@ create_new_objects(void)
 
 	/* regenerate now that we have objects in the databases */
 	get_db_and_rel_infos(&new_cluster);
-
-	uninstall_support_functions_from_new_cluster();
 }
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 19d59f5..f9c239d 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -406,8 +406,6 @@ FILE	   *fopen_priv(const char *path, const char *mode);
 
 /* function.c */
 
-void		install_support_functions_in_new_db(const char *db_name);
-void		uninstall_support_functions_from_new_cluster(void);
 void		get_loadable_libraries(void);
 void		check_loadable_libraries(void);
 
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh
index 75b6357..2e9f976 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/contrib/pg_upgrade/test.sh
@@ -70,7 +70,6 @@ if [ "$1" = '--install' ]; then
 	libdir=$temp_install/$libdir
 
 	"$MAKE" -s -C ../.. install DESTDIR="$temp_install"
-	"$MAKE" -s -C ../pg_upgrade_support install DESTDIR="$temp_install"
 	"$MAKE" -s -C . install DESTDIR="$temp_install"
 
 	# platform-specific magic to find the shared libraries; see pg_regress.c
diff --git a/contrib/pg_upgrade_support/Makefile b/contrib/pg_upgrade_support/Makefile
deleted file mode 100644
index f7def16..0000000
--- a/contrib/pg_upgrade_support/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# contrib/pg_upgrade_support/Makefile
-
-PGFILEDESC = "pg_upgrade_support - server-side functions for pg_upgrade"
-
-MODULES = pg_upgrade_support
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade_support
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index e1cd260..8d70727 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -253,11 +253,10 @@ <title>Install the new PostgreSQL binaries</title>
    </step>
 
    <step>
-    <title>Install pg_upgrade and pg_upgrade_support</title>
+    <title>Install pg_upgrade</title>
 
     <para>
-     Install the <application>pg_upgrade</> binary and
-     <application>pg_upgrade_support</> library in the new PostgreSQL
+     Install the <application>pg_upgrade</> binary in the new PostgreSQL
      installation.
     </para>
    </step>
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5ce4395..eb4f37c 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -76,7 +76,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_pg_class_oid = InvalidOid;
 Oid			binary_upgrade_next_toast_pg_class_oid = InvalidOid;
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index f85ed93..197cd52 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -69,7 +69,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_pg_class_oid = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index d87090a..c880486 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -31,7 +31,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index d1ed53f..32453c3 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -36,7 +36,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index d14c33c..c99d353 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -32,7 +32,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 67e2ae2..907ba11 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -80,7 +80,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_array_pg_type_oid = InvalidOid;
 
 static void makeRangeConstructors(const char *name, Oid namespace,
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 75f1b3c..456c27e 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -38,7 +38,7 @@
 #include "utils/timestamp.h"
 #include "utils/tqual.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_authid_oid = InvalidOid;
 
 
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 20e5ff1..1f1bee7 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,7 +25,8 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
 	jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
 	network.o network_gist.o network_selfuncs.o \
 	numeric.o numutils.o oid.o oracle_compat.o \
-	orderedsetaggs.o pg_locale.o pg_lsn.o pgstatfuncs.o \
+	orderedsetaggs.o pg_locale.o pg_lsn.o pg_upgrade_support.o \
+	pgstatfuncs.o \
 	pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
 	rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
 	regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
diff --git a/contrib/pg_upgrade_support/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
similarity index 73%
rename from contrib/pg_upgrade_support/pg_upgrade_support.c
rename to src/backend/utils/adt/pg_upgrade_support.c
index f477973..d69fa53 100644
--- a/contrib/pg_upgrade_support/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -6,7 +6,7 @@
  *	hacks needed for pg_upgrade.
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade_support/pg_upgrade_support.c
+ *	src/backend/utils/adt/pg_upgrade_support.c
  */
 
 #include "postgres.h"
@@ -19,24 +19,17 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 
-/* THIS IS USED ONLY FOR PG >= 9.0 */
 
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
+Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
-PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_array_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_type_oid);
-
-PG_FUNCTION_INFO_V1(set_next_heap_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_index_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_class_oid);
-
-PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
-PG_FUNCTION_INFO_V1(set_next_pg_authid_oid);
-
-PG_FUNCTION_INFO_V1(create_empty_extension);
 
 #define CHECK_IS_BINARY_UPGRADE 								\
 do { 															\
@@ -47,7 +40,7 @@ do { 															\
 } while (0)
 
 Datum
-set_next_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -58,7 +51,7 @@ set_next_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -69,7 +62,7 @@ set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -80,7 +73,7 @@ set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -91,7 +84,7 @@ set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -102,7 +95,7 @@ set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -113,7 +106,7 @@ set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_enum_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 {
 	Oid			enumoid = PG_GETARG_OID(0);
 
@@ -124,7 +117,7 @@ set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_authid_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 {
 	Oid			authoid = PG_GETARG_OID(0);
 
@@ -134,7 +127,7 @@ set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-create_empty_extension(PG_FUNCTION_ARGS)
+binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)
 {
 	text	   *extName = PG_GETARG_TEXT_PP(0);
 	text	   *schemaName = PG_GETARG_TEXT_PP(1);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index fdfb431..41d2eec 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3045,7 +3045,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 
 	appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
 	appendPQExpBuffer(upgrade_buffer,
-	 "SELECT binary_upgrade.set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+	 "SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 					  pg_type_oid);
 
 	/* we only support old >= 8.3 for binary upgrades */
@@ -3064,7 +3064,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 		appendPQExpBufferStr(upgrade_buffer,
 			   "\n-- For binary upgrade, must preserve pg_type array oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_array_oid);
 	}
 
@@ -3106,7 +3106,7 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
 
 		appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type toast oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_toast_oid);
 
 		toast_set = true;
@@ -3146,7 +3146,7 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 	if (!is_index)
 	{
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 		/* only tables have toast tables, not indexes */
 		if (OidIsValid(pg_class_reltoastrelid))
@@ -3161,18 +3161,18 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 			 */
 
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_class_reltoastrelid);
 
 			/* every toast table has an index */
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_index_indexrelid);
 		}
 	}
 	else
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 
 	appendPQExpBufferChar(upgrade_buffer, '\n');
@@ -8352,7 +8352,7 @@ dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
 		appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
 
 		appendPQExpBufferStr(q,
-							 "SELECT binary_upgrade.create_empty_extension(");
+							 "SELECT pg_catalog.binary_upgrade_create_empty_extension(");
 		appendStringLiteralAH(q, extinfo->dobj.name, fout);
 		appendPQExpBufferStr(q, ", ");
 		appendStringLiteralAH(q, extinfo->namespace, fout);
@@ -8530,7 +8530,7 @@ dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
 			if (i == 0)
 				appendPQExpBufferStr(q, "\n-- For binary upgrade, must preserve pg_enum oids\n");
 			appendPQExpBuffer(q,
-							  "SELECT binary_upgrade.set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
 							  enum_oid);
 			appendPQExpBuffer(q, "ALTER TYPE %s.",
 							  fmtId(tyinfo->dobj.namespace->dobj.name));
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 6a7a641..7169ad0 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -781,7 +781,7 @@ dumpRoles(PGconn *conn)
 		{
 			appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_authid.oid\n");
 			appendPQExpBuffer(buf,
-							  "SELECT binary_upgrade.set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
 							  auth_oid);
 		}
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index b8a3660..c7dd22c 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -5149,6 +5149,26 @@ DESCR("rank of hypothetical row without gaps");
 DATA(insert OID = 3993 ( dense_rank_final	PGNSP PGUID 12 1 0 2276 0 f f f f f f i 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_	hypothetical_dense_rank_final _null_ _null_ _null_ ));
 DESCR("aggregate final function");
 
+/* pg_upgrade support */
+DATA(insert OID = 3582 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3584 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3585 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3586 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3587 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3588 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3589 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3591 ( binary_upgrade_create_empty_extension PGNSP PGUID  12 1 0 0 0 f f f f t f v 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+
 
 /*
  * Symbolic values for provolatile column: these indicate whether the result
-- 
2.3.2

0007-Move-pg_upgrade-from-contrib-to-src-bin.patchapplication/x-patch; name=0007-Move-pg_upgrade-from-contrib-to-src-bin.patchDownload
From 09b8dafa5ed8866039b5f57e18969eab800e6518 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 7/7] Move pg_upgrade from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pgupgrade.sgml          | 14 +++-----------
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_upgrade/.gitignore     |  0
 {contrib => src/bin}/pg_upgrade/IMPLEMENTATION |  2 --
 {contrib => src/bin}/pg_upgrade/Makefile       | 18 +++++++-----------
 {contrib => src/bin}/pg_upgrade/TESTING        |  2 --
 {contrib => src/bin}/pg_upgrade/check.c        |  2 +-
 {contrib => src/bin}/pg_upgrade/controldata.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/dump.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/exec.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/file.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/function.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/info.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/option.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/page.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/parallel.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.h   |  2 +-
 {contrib => src/bin}/pg_upgrade/relfilenode.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/server.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/tablespace.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/test.sh        |  8 ++++----
 {contrib => src/bin}/pg_upgrade/util.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/version.c      |  2 +-
 src/tools/msvc/vcregress.pl                    |  6 +++---
 30 files changed, 37 insertions(+), 53 deletions(-)
 rename doc/src/sgml/{ => ref}/pgupgrade.sgml (98%)
 rename {contrib => src/bin}/pg_upgrade/.gitignore (100%)
 rename {contrib => src/bin}/pg_upgrade/IMPLEMENTATION (99%)
 rename {contrib => src/bin}/pg_upgrade/Makefile (79%)
 rename {contrib => src/bin}/pg_upgrade/TESTING (99%)
 rename {contrib => src/bin}/pg_upgrade/check.c (99%)
 rename {contrib => src/bin}/pg_upgrade/controldata.c (99%)
 rename {contrib => src/bin}/pg_upgrade/dump.c (99%)
 rename {contrib => src/bin}/pg_upgrade/exec.c (99%)
 rename {contrib => src/bin}/pg_upgrade/file.c (99%)
 rename {contrib => src/bin}/pg_upgrade/function.c (99%)
 rename {contrib => src/bin}/pg_upgrade/info.c (99%)
 rename {contrib => src/bin}/pg_upgrade/option.c (99%)
 rename {contrib => src/bin}/pg_upgrade/page.c (99%)
 rename {contrib => src/bin}/pg_upgrade/parallel.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.h (99%)
 rename {contrib => src/bin}/pg_upgrade/relfilenode.c (99%)
 rename {contrib => src/bin}/pg_upgrade/server.c (99%)
 rename {contrib => src/bin}/pg_upgrade/tablespace.c (98%)
 rename {contrib => src/bin}/pg_upgrade/test.sh (97%)
 rename {contrib => src/bin}/pg_upgrade/util.c (99%)
 rename {contrib => src/bin}/pg_upgrade/version.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 39e8f1d..e2c4e27 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -34,7 +34,6 @@ SUBDIRS = \
 		pg_standby	\
 		pg_stat_statements \
 		pg_trgm		\
-		pg_upgrade	\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 885a096..49a6ce8 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,6 +202,5 @@ <title>Server Applications</title>
   </para>
 
  &pgstandby;
- &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index d6120e3..a240d7e 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -133,7 +133,6 @@
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
-<!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 39e0244..0a35b4c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -194,6 +194,7 @@
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
+<!ENTITY pgupgrade          SYSTEM "pgupgrade.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
similarity index 98%
rename from doc/src/sgml/pgupgrade.sgml
rename to doc/src/sgml/ref/pgupgrade.sgml
index 8d70727..8b3912d 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/ref/pgupgrade.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgupgrade.sgml -->
+<!-- doc/src/sgml/ref/pgupgrade.sgml -->
 
 <refentry id="pgupgrade">
  <indexterm zone="pgupgrade">
@@ -240,7 +240,8 @@ <title>For source installs, build the new version</title>
     <title>Install the new PostgreSQL binaries</title>
 
     <para>
-     Install the new server's binaries and support files.
+     Install the new server's binaries and support
+     files.  <application>pg_upgrade</> is included in a default installation.
     </para>
 
     <para>
@@ -253,15 +254,6 @@ <title>Install the new PostgreSQL binaries</title>
    </step>
 
    <step>
-    <title>Install pg_upgrade</title>
-
-    <para>
-     Install the <application>pg_upgrade</> binary in the new PostgreSQL
-     installation.
-    </para>
-   </step>
-
-   <step>
     <title>Initialize the new PostgreSQL cluster</title>
 
     <para>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 99bfcda..e1484f4 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -264,6 +264,7 @@ <title>PostgreSQL Server Applications</title>
    &pgResetxlog;
    &pgtestfsync;
    &pgtesttiming;
+   &pgupgrade;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 253119a..47ef00c 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_test_fsync \
 	pg_test_timing \
+	pg_upgrade \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
similarity index 100%
rename from contrib/pg_upgrade/.gitignore
rename to src/bin/pg_upgrade/.gitignore
diff --git a/contrib/pg_upgrade/IMPLEMENTATION b/src/bin/pg_upgrade/IMPLEMENTATION
similarity index 99%
rename from contrib/pg_upgrade/IMPLEMENTATION
rename to src/bin/pg_upgrade/IMPLEMENTATION
index a0cfcf1..9b5ff72 100644
--- a/contrib/pg_upgrade/IMPLEMENTATION
+++ b/src/bin/pg_upgrade/IMPLEMENTATION
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/IMPLEMENTATION
-
 ------------------------------------------------------------------------------
 PG_UPGRADE: IN-PLACE UPGRADES FOR POSTGRESQL
 ------------------------------------------------------------------------------
diff --git a/contrib/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
similarity index 79%
rename from contrib/pg_upgrade/Makefile
rename to src/bin/pg_upgrade/Makefile
index 87da4b8..c22daa5 100644
--- a/contrib/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,8 +1,12 @@
-# contrib/pg_upgrade/Makefile
+# src/bin/pg_upgrade/Makefile
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
 
+subdir = src/bin/pg_upgrade
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
@@ -15,16 +19,8 @@ EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
               pg_upgrade_dump_globals.sql \
               pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/contrib/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
similarity index 99%
rename from contrib/pg_upgrade/TESTING
rename to src/bin/pg_upgrade/TESTING
index 359688c..4ecfc57 100644
--- a/contrib/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/TESTING
-
 The most effective way to test pg_upgrade, aside from testing on user
 data, is by upgrading the PostgreSQL regression database.
 
diff --git a/contrib/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
similarity index 99%
rename from contrib/pg_upgrade/check.c
rename to src/bin/pg_upgrade/check.c
index 6a498c3..647bf34 100644
--- a/contrib/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -4,7 +4,7 @@
  *	server checks and output routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/check.c
+ *	src/bin/pg_upgrade/check.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
similarity index 99%
rename from contrib/pg_upgrade/controldata.c
rename to src/bin/pg_upgrade/controldata.c
index 0e70b6f..bf53db0 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -4,7 +4,7 @@
  *	controldata functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/controldata.c
+ *	src/bin/pg_upgrade/controldata.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c
similarity index 99%
rename from contrib/pg_upgrade/dump.c
rename to src/bin/pg_upgrade/dump.c
index 906e85f..2c20e84 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/src/bin/pg_upgrade/dump.c
@@ -4,7 +4,7 @@
  *	dump functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/dump.c
+ *	src/bin/pg_upgrade/dump.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
similarity index 99%
rename from contrib/pg_upgrade/exec.c
rename to src/bin/pg_upgrade/exec.c
index bf87419..7d31912 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -4,7 +4,7 @@
  *	execution functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/exec.c
+ *	src/bin/pg_upgrade/exec.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c
similarity index 99%
rename from contrib/pg_upgrade/file.c
rename to src/bin/pg_upgrade/file.c
index 5a8d17a..79d9390 100644
--- a/contrib/pg_upgrade/file.c
+++ b/src/bin/pg_upgrade/file.c
@@ -4,7 +4,7 @@
  *	file system operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/file.c
+ *	src/bin/pg_upgrade/file.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/function.c b/src/bin/pg_upgrade/function.c
similarity index 99%
rename from contrib/pg_upgrade/function.c
rename to src/bin/pg_upgrade/function.c
index d8009d1..04492a5 100644
--- a/contrib/pg_upgrade/function.c
+++ b/src/bin/pg_upgrade/function.c
@@ -4,7 +4,7 @@
  *	server-side function support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/function.c
+ *	src/bin/pg_upgrade/function.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
similarity index 99%
rename from contrib/pg_upgrade/info.c
rename to src/bin/pg_upgrade/info.c
index 1254934..c0a5601 100644
--- a/contrib/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -4,7 +4,7 @@
  *	information support functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/info.c
+ *	src/bin/pg_upgrade/info.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c
similarity index 99%
rename from contrib/pg_upgrade/option.c
rename to src/bin/pg_upgrade/option.c
index 9b387be..ce339ce 100644
--- a/contrib/pg_upgrade/option.c
+++ b/src/bin/pg_upgrade/option.c
@@ -4,7 +4,7 @@
  *	options functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/option.c
+ *	src/bin/pg_upgrade/option.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/page.c b/src/bin/pg_upgrade/page.c
similarity index 99%
rename from contrib/pg_upgrade/page.c
rename to src/bin/pg_upgrade/page.c
index 1cfc10f..3f4c697 100644
--- a/contrib/pg_upgrade/page.c
+++ b/src/bin/pg_upgrade/page.c
@@ -4,7 +4,7 @@
  *	per-page conversion operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/page.c
+ *	src/bin/pg_upgrade/page.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c
similarity index 99%
rename from contrib/pg_upgrade/parallel.c
rename to src/bin/pg_upgrade/parallel.c
index 6da9965..c6978b5 100644
--- a/contrib/pg_upgrade/parallel.c
+++ b/src/bin/pg_upgrade/parallel.c
@@ -4,7 +4,7 @@
  *	multi-process support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/parallel.c
+ *	src/bin/pg_upgrade/parallel.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.c
rename to src/bin/pg_upgrade/pg_upgrade.c
index 1ff01a7..0333a91 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -4,7 +4,7 @@
  *	main source file
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.c
+ *	src/bin/pg_upgrade/pg_upgrade.c
  */
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.h
rename to src/bin/pg_upgrade/pg_upgrade.h
index f9c239d..bc81acb 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -2,7 +2,7 @@
  *	pg_upgrade.h
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.h
+ *	src/bin/pg_upgrade/pg_upgrade.h
  */
 
 #include <unistd.h>
diff --git a/contrib/pg_upgrade/relfilenode.c b/src/bin/pg_upgrade/relfilenode.c
similarity index 99%
rename from contrib/pg_upgrade/relfilenode.c
rename to src/bin/pg_upgrade/relfilenode.c
index 423802b..fe05880 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/src/bin/pg_upgrade/relfilenode.c
@@ -4,7 +4,7 @@
  *	relfilenode functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/relfilenode.c
+ *	src/bin/pg_upgrade/relfilenode.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
similarity index 99%
rename from contrib/pg_upgrade/server.c
rename to src/bin/pg_upgrade/server.c
index c5f66f0..8d8e7d7 100644
--- a/contrib/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -4,7 +4,7 @@
  *	database server functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/server.c
+ *	src/bin/pg_upgrade/server.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c
similarity index 98%
rename from contrib/pg_upgrade/tablespace.c
rename to src/bin/pg_upgrade/tablespace.c
index eecdf4b..ce7097e 100644
--- a/contrib/pg_upgrade/tablespace.c
+++ b/src/bin/pg_upgrade/tablespace.c
@@ -4,7 +4,7 @@
  *	tablespace functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/tablespace.c
+ *	src/bin/pg_upgrade/tablespace.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
similarity index 97%
rename from contrib/pg_upgrade/test.sh
rename to src/bin/pg_upgrade/test.sh
index 2e9f976..0903f30 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# contrib/pg_upgrade/test.sh
+# src/bin/pg_upgrade/test.sh
 #
 # Test driver for pg_upgrade.  Initializes a new database cluster,
 # runs the regression tests (to put in some data), runs pg_dumpall,
@@ -21,7 +21,7 @@ unset MAKELEVEL
 # authentication configuration.
 standard_initdb() {
 	"$1" -N
-	../../src/test/regress/pg_regress --config-auth "$PGDATA"
+	../../test/regress/pg_regress --config-auth "$PGDATA"
 }
 
 # Establish how the server will listen for connections
@@ -92,9 +92,9 @@ fi
 
 : ${oldbindir=$bindir}
 
-: ${oldsrc=../..}
+: ${oldsrc=../../..}
 oldsrc=`cd "$oldsrc" && pwd`
-newsrc=`cd ../.. && pwd`
+newsrc=`cd ../../.. && pwd`
 
 PATH=$bindir:$PATH
 export PATH
diff --git a/contrib/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
similarity index 99%
rename from contrib/pg_upgrade/util.c
rename to src/bin/pg_upgrade/util.c
index ec18526..6856fc8 100644
--- a/contrib/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -4,7 +4,7 @@
  *	utility functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/util.c
+ *	src/bin/pg_upgrade/util.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c
similarity index 99%
rename from contrib/pg_upgrade/version.c
rename to src/bin/pg_upgrade/version.c
index 4ae9511..e3e7387 100644
--- a/contrib/pg_upgrade/version.c
+++ b/src/bin/pg_upgrade/version.c
@@ -4,7 +4,7 @@
  *	Postgres-version-specific routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/version.c
+ *	src/bin/pg_upgrade/version.c
  */
 
 #include "postgres_fe.h"
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index bd3dd2c..4812a03 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -269,7 +269,7 @@ sub upgradecheck
 
 	$ENV{PGHOST} = 'localhost';
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -282,7 +282,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	standard_initdb() or exit 1;
@@ -292,7 +292,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
2.3.2

#80Michael Paquier
michael.paquier@gmail.com
In reply to: Peter Eisentraut (#79)
Re: moving from contrib to bin

On Wed, Mar 11, 2015 at 12:00 PM, Peter Eisentraut <peter_e@gmx.net> wrote:

Here is a rebase of my previous patch set. I have integrated the
various minor fixes from Michael and Andres. I have dropped moving
pg_standby, because no one seemed to like that.

I wasn't able to do anything with Michael's Mkvcbuild.pm patch, since
that appeared to include a significant refactoring along with the actual
move. Maybe the refactoring can be done separately first?

Yes. I was just looking at the refactoring part so as it could be
applied before the rest first.

Otherwise, I suggest we start with the first patch, pg_archivecleanup,
fix up the Windows build system for it, and commit it, and repeat.

I'd rather vote for having the Windows-side stuff integrated with each
patch. Mind if I rebase what you just sent with the Windows things
added?
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#81Michael Paquier
michael.paquier@gmail.com
In reply to: Michael Paquier (#80)
8 attachment(s)
Re: moving from contrib to bin

On Tue, Mar 10, 2015 at 8:07 PM, Michael Paquier wrote:

I'd rather vote for having the Windows-side stuff integrated with each
patch. Mind if I rebase what you just sent with the Windows things
added?

And here is the rebased series with the MSVC changes included for each
module in its individual patch. 0001 is the refactoring patch for MSVC
scripts which should be applied before the rest.
--
Michael

Attachments:

0001-Refactor-MSVC-scripts-for-modules-of-src-bin-similar.patchtext/x-diff; charset=US-ASCII; name=0001-Refactor-MSVC-scripts-for-modules-of-src-bin-similar.patchDownload
From 4a15216e282d700a409b7dcad74b553122a534a3 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@otacoo.com>
Date: Mon, 15 Dec 2014 22:16:36 -0800
Subject: [PATCH 1/8] Refactor MSVC scripts for modules of src/bin similarly to
 contrib/

This refactoring is a preparation work for the integration of many contrib/
modules into src/bin, and permits to make any default new binary of src/bin/
to be detected by the build process.
---
 src/tools/msvc/Mkvcbuild.pm | 104 +++++++++++++++++++++++++++++---------------
 1 file changed, 69 insertions(+), 35 deletions(-)

diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 5dc8426..bd63193 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -29,6 +29,7 @@ my $libpgcommon;
 my $postgres;
 my $libpq;
 
+# Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
@@ -48,11 +49,25 @@ my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
 my $contrib_extrasource = {
-	'cube' => [ 'cubescan.l', 'cubeparse.y' ],
-	'pgbench' => [ 'exprscan.l', 'exprparse.y' ],
-	'seg'  => [ 'segscan.l',  'segparse.y' ], };
+	'cube' => [ 'contrib\cube\cubescan.l', 'contrib\cube\cubeparse.y' ],
+	'pgbench' => [ 'contrib\pgbench\exprscan.l', 'contrib\pgbench\exprparse.y' ],
+	'seg'  => [ 'contrib\seg\segscan.l',  'contrib\seg\segparse.y' ], };
 my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
+# Set of variables for frontend modules
+my $frontend_defines = { 'initdb' => 'FRONTEND' };
+my @frontend_uselibpq = ('pg_ctl', 'psql');
+my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
+						  'pg_restore' => ['ws2_32.lib'],
+						  'psql' => ['ws2_32.lib'] };
+my $frontend_extraincludes = {
+   'initdb' => ['src\timezone'],
+   'psql' => ['src\bin\pg_dump', 'src\backend'] };
+my $frontend_extrasource = {
+	'psql' => [ 'src\bin\psql\psqlscan.l' ] };
+my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
+						 'scripts');
+
 sub mkvcbuild
 {
 	our $config = shift;
@@ -380,11 +395,15 @@ sub mkvcbuild
 	$pgregress_isolation->AddReference($libpgcommon, $libpgport);
 
 	# src/bin
-	my $initdb = AddSimpleFrontend('initdb');
-	$initdb->AddIncludeDir('src\interfaces\libpq');
-	$initdb->AddIncludeDir('src\timezone');
-	$initdb->AddDefine('FRONTEND');
-	$initdb->AddLibrary('ws2_32.lib');
+	my $D;
+	opendir($D, 'src/bin') || croak "Could not opendir on src/bin!\n";
+	while (my $d = readdir($D))
+	{
+		next if ($d =~ /^\./);
+		next unless (-f "src/bin/$d/Makefile");
+		next if (grep { /^$d$/ } @frontend_excludes);
+		AddSimpleFrontend($d);
+	}
 
 	my $pgbasebackup = AddSimpleFrontend('pg_basebackup', 1);
 	$pgbasebackup->AddFile('src\bin\pg_basebackup\pg_basebackup.c');
@@ -400,14 +419,6 @@ sub mkvcbuild
 	$pgrecvlogical->AddFile('src\bin\pg_basebackup\pg_recvlogical.c');
 	$pgrecvlogical->AddLibrary('ws2_32.lib');
 
-	my $pgconfig = AddSimpleFrontend('pg_config');
-
-	my $pgcontrol = AddSimpleFrontend('pg_controldata');
-
-	my $pgctl = AddSimpleFrontend('pg_ctl', 1);
-
-	my $pgreset = AddSimpleFrontend('pg_resetxlog');
-
 	my $pgevent = $solution->AddProject('pgevent', 'dll', 'bin');
 	$pgevent->AddFiles('src\bin\pgevent', 'pgevent.c', 'pgmsgevent.rc');
 	$pgevent->AddResourceFile('src\bin\pgevent', 'Eventlog message formatter',
@@ -416,12 +427,6 @@ sub mkvcbuild
 	$pgevent->UseDef('src\bin\pgevent\pgevent.def');
 	$pgevent->DisableLinkerWarnings('4104');
 
-	my $psql = AddSimpleFrontend('psql', 1);
-	$psql->AddIncludeDir('src\bin\pg_dump');
-	$psql->AddIncludeDir('src\backend');
-	$psql->AddFile('src\bin\psql\psqlscan.l');
-	$psql->AddLibrary('ws2_32.lib');
-
 	my $pgdump = AddSimpleFrontend('pg_dump', 1);
 	$pgdump->AddIncludeDir('src\backend');
 	$pgdump->AddFile('src\bin\pg_dump\pg_dump.c');
@@ -532,7 +537,6 @@ sub mkvcbuild
 	my $mf = Project::read_file('contrib/pgcrypto/Makefile');
 	GenerateContribSqlFiles('pgcrypto', $mf);
 
-	my $D;
 	opendir($D, 'contrib') || croak "Could not opendir on contrib!\n";
 	while (my $d = readdir($D))
 	{
@@ -652,6 +656,9 @@ sub AddSimpleFrontend
 		$p->AddIncludeDir('src\interfaces\libpq');
 		$p->AddReference($libpq);
 	}
+	# Adjust module definition using frontent variables
+	AdjustFrontendProj($p);
+
 	return $p;
 }
 
@@ -744,45 +751,72 @@ sub GenerateContribSqlFiles
 sub AdjustContribProj
 {
 	my $proj = shift;
-	my $n    = $proj->{name};
+	AdjustModule($proj, $contrib_defines, \@contrib_uselibpq,
+		\@contrib_uselibpgport, \@contrib_uselibpgcommon, $contrib_extralibs,
+		$contrib_extrasource, $contrib_extraincludes);
+}
+
+sub AdjustFrontendProj
+{
+	my $proj = shift;
+	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq,
+		undef, undef, $frontend_extralibs,
+		$frontend_extrasource, $frontend_extraincludes);
+}
 
-	if ($contrib_defines->{$n})
+sub AdjustModule
+{
+	my $proj                  = shift;
+	my $module_defines        = shift;
+	my $module_uselibpq       = shift;
+	my $module_uselibpgport   = shift;
+	my $module_uselibpgcommon = shift;
+	my $module_extralibs      = shift;
+	my $module_extrasource    = shift;
+	my $module_extraincludes  = shift;
+	my $n                     = $proj->{name};
+
+	if ($module_defines->{$n})
 	{
-		foreach my $d ($contrib_defines->{$n})
+		foreach my $d ($module_defines->{$n})
 		{
 			$proj->AddDefine($d);
 		}
 	}
-	if (grep { /^$n$/ } @contrib_uselibpq)
+	if (grep { /^$n$/ } @{ $module_uselibpq })
 	{
 		$proj->AddIncludeDir('src\interfaces\libpq');
 		$proj->AddReference($libpq);
 	}
-	if (grep { /^$n$/ } @contrib_uselibpgport)
+	if (grep { /^$n$/ } @{ $module_uselibpgport })
 	{
 		$proj->AddReference($libpgport);
 	}
-	if (grep { /^$n$/ } @contrib_uselibpgcommon)
+	if (grep { /^$n$/ } @{ $module_uselibpgcommon })
 	{
 		$proj->AddReference($libpgcommon);
 	}
-	if ($contrib_extralibs->{$n})
+	if ($module_extralibs->{$n})
 	{
-		foreach my $l (@{ $contrib_extralibs->{$n} })
+		foreach my $l (@{ $module_extralibs->{$n} })
 		{
 			$proj->AddLibrary($l);
 		}
 	}
-	if ($contrib_extraincludes->{$n})
+	if ($module_extraincludes->{$n})
 	{
-		foreach my $i (@{ $contrib_extraincludes->{$n} })
+		foreach my $i (@{ $module_extraincludes->{$n} })
 		{
 			$proj->AddIncludeDir($i);
 		}
 	}
-	if ($contrib_extrasource->{$n})
+	if ($module_extrasource->{$n})
 	{
-		$proj->AddFiles('contrib\\' . $n, @{ $contrib_extrasource->{$n} });
+		foreach my $i (@{ $module_extrasource->{$n} })
+		{
+			print "Files $i\n";
+			$proj->AddFile($i);
+		}
 	}
 }
 
-- 
1.9.2.msysgit.0

0002-Move-pg_archivecleanup-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0002-Move-pg_archivecleanup-from-contrib-to-src-bin.patchDownload
From 88e67684c8ce2dc355110bea2dee4fd933f40935 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 20:42:28 -0700
Subject: [PATCH 2/8] Move pg_archivecleanup from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_archivecleanup/Makefile                 | 18 ----------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgarchivecleanup.sgml       | 10 +--------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_archivecleanup/.gitignore  |  0
 src/bin/pg_archivecleanup/Makefile                 | 14 +++++++++++++
 .../bin}/pg_archivecleanup/pg_archivecleanup.c     |  2 +-
 src/tools/msvc/Mkvcbuild.pm                        | 24 +++++++++++-----------
 12 files changed, 31 insertions(+), 43 deletions(-)
 delete mode 100644 contrib/pg_archivecleanup/Makefile
 rename doc/src/sgml/{ => ref}/pgarchivecleanup.sgml (97%)
 rename {contrib => src/bin}/pg_archivecleanup/.gitignore (100%)
 create mode 100644 src/bin/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/pg_archivecleanup.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 195d447..c56050e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -28,7 +28,6 @@ SUBDIRS = \
 		oid2name	\
 		pageinspect	\
 		passwordcheck	\
-		pg_archivecleanup \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
diff --git a/contrib/pg_archivecleanup/Makefile b/contrib/pg_archivecleanup/Makefile
deleted file mode 100644
index ab52390..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index a698d0f..f21fa14 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgarchivecleanup;
  &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index f03b72a..5e3c34b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -125,7 +125,6 @@
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
 <!ENTITY pgbench         SYSTEM "pgbench.sgml">
-<!ENTITY pgarchivecleanup SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 7aa3128..cbe4611 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -179,6 +179,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY dropuser           SYSTEM "dropuser.sgml">
 <!ENTITY ecpgRef            SYSTEM "ecpg-ref.sgml">
 <!ENTITY initdb             SYSTEM "initdb.sgml">
+<!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
diff --git a/doc/src/sgml/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
similarity index 97%
rename from doc/src/sgml/pgarchivecleanup.sgml
rename to doc/src/sgml/ref/pgarchivecleanup.sgml
index fdf0cbb..779159d 100644
--- a/doc/src/sgml/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgarchivecleanup.sgml -->
+<!-- doc/src/sgml/ref/pgarchivecleanup.sgml -->
 
 <refentry id="pgarchivecleanup">
  <indexterm zone="pgarchivecleanup">
@@ -194,14 +194,6 @@ archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>clean
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Simon Riggs <email>simon@2ndquadrant.com</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 10c9a6d..62267db 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -257,6 +257,7 @@
   </partintro>
 
    &initdb;
+   &pgarchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 90ca1a8..2347076 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
 	initdb \
+	pg_archivecleanup \
 	pg_basebackup \
 	pg_config \
 	pg_controldata \
diff --git a/contrib/pg_archivecleanup/.gitignore b/src/bin/pg_archivecleanup/.gitignore
similarity index 100%
rename from contrib/pg_archivecleanup/.gitignore
rename to src/bin/pg_archivecleanup/.gitignore
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
new file mode 100644
index 0000000..5df86eb
--- /dev/null
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_archivecleanup/Makefile
+
+PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
+PGAPPICON = win32
+
+subdir = src/bin/pg_archivecleanup
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_archivecleanup
+OBJS	= pg_archivecleanup.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c
similarity index 99%
rename from contrib/pg_archivecleanup/pg_archivecleanup.c
rename to src/bin/pg_archivecleanup/pg_archivecleanup.c
index 97225a8..2ff2a27 100644
--- a/contrib/pg_archivecleanup/pg_archivecleanup.c
+++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_archivecleanup/pg_archivecleanup.c
+ * src/bin/pg_archivecleanup/pg_archivecleanup.c
  *
  * pg_archivecleanup.c
  *
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index bd63193..2880a81 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,17 +34,15 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
+	'oid2name',       'pgbench',
+	'pg_standby',     'pg_test_fsync',
+	'pg_test_timing', 'pg_upgrade',
+	'pg_xlogdump',    'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
+	'oid2name',       'pgbench',
+	'pg_standby',     'pg_test_fsync',
+	'pg_test_timing', 'pg_upgrade',
+	'pg_xlogdump',    'vacuumlo');
 my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -57,6 +55,8 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'psql');
+my @frontend_uselibpgport = ( 'pg_archivecleanup' );
+my @frontend_uselibpgcommon = ( 'pg_archivecleanup' );
 my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
 						  'pg_restore' => ['ws2_32.lib'],
 						  'psql' => ['ws2_32.lib'] };
@@ -760,8 +760,8 @@ sub AdjustFrontendProj
 {
 	my $proj = shift;
 	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq,
-		undef, undef, $frontend_extralibs,
-		$frontend_extrasource, $frontend_extraincludes);
+		\@frontend_uselibpgport, \@frontend_uselibpgcommon,
+		$frontend_extralibs, $frontend_extrasource, $frontend_extraincludes);
 }
 
 sub AdjustModule
-- 
1.9.2.msysgit.0

0003-Move-pg_xlogdump-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0003-Move-pg_xlogdump-from-contrib-to-src-bin.patchDownload
From 2d6df496633c4d600d8cc763346ef196cb251f6b Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 3/8] Move pg_xlogdump from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pg_xlogdump.sgml        |  0
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_xlogdump/.gitignore    |  0
 {contrib => src/bin}/pg_xlogdump/Makefile      | 19 ++++++--------
 {contrib => src/bin}/pg_xlogdump/compat.c      |  2 +-
 {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.c    |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.h    |  2 +-
 src/tools/msvc/Mkvcbuild.pm                    | 35 ++++++++++++--------------
 src/tools/msvc/clean.bat                       |  4 +--
 15 files changed, 33 insertions(+), 39 deletions(-)
 rename doc/src/sgml/{ => ref}/pg_xlogdump.sgml (100%)
 rename {contrib => src/bin}/pg_xlogdump/.gitignore (100%)
 rename {contrib => src/bin}/pg_xlogdump/Makefile (76%)
 rename {contrib => src/bin}/pg_xlogdump/compat.c (98%)
 rename {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c (99%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.c (96%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.h (91%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c56050e..d9557b8 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -42,7 +42,6 @@ SUBDIRS = \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
-		pg_xlogdump	\
 		postgres_fdw	\
 		seg		\
 		spi		\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index f21fa14..d0e1446 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -206,6 +206,5 @@ pages.
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
- &pgxlogdump;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5e3c34b..3b26a70 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -137,7 +137,6 @@
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
-<!ENTITY pgxlogdump      SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index cbe4611..17260b9 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -191,6 +191,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
 <!ENTITY psqlRef            SYSTEM "psql-ref.sgml">
diff --git a/doc/src/sgml/pg_xlogdump.sgml b/doc/src/sgml/ref/pg_xlogdump.sgml
similarity index 100%
rename from doc/src/sgml/pg_xlogdump.sgml
rename to doc/src/sgml/ref/pg_xlogdump.sgml
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 62267db..07c923b 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -261,6 +261,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgxlogdump;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 2347076..469798e 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_xlogdump \
 	psql \
 	scripts
 
diff --git a/contrib/pg_xlogdump/.gitignore b/src/bin/pg_xlogdump/.gitignore
similarity index 100%
rename from contrib/pg_xlogdump/.gitignore
rename to src/bin/pg_xlogdump/.gitignore
diff --git a/contrib/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
similarity index 76%
rename from contrib/pg_xlogdump/Makefile
rename to src/bin/pg_xlogdump/Makefile
index 30a8706..ab8597b 100644
--- a/contrib/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,28 +1,25 @@
-# contrib/pg_xlogdump/Makefile
+# src/bin/pg_xlogdump/Makefile
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
 PGAPPICON=win32
 
+subdir = src/bin/pg_xlogdump
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
+override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
 EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
 
-ifdef USE_PGXS
-$(error "pg_xlogdump cannot be built with PGXS")
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
-subdir = contrib/pg_xlogdump
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-
-
-override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
diff --git a/contrib/pg_xlogdump/compat.c b/src/bin/pg_xlogdump/compat.c
similarity index 98%
rename from contrib/pg_xlogdump/compat.c
rename to src/bin/pg_xlogdump/compat.c
index 4f5cad6..3d8ce30 100644
--- a/contrib/pg_xlogdump/compat.c
+++ b/src/bin/pg_xlogdump/compat.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		contrib/pg_xlogdump/compat.c
+ *		src/bin/pg_xlogdump/compat.c
  *
  * This file contains client-side implementations for various backend
  * functions that the rm_desc functions in *desc.c files rely on.
diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
similarity index 99%
rename from contrib/pg_xlogdump/pg_xlogdump.c
rename to src/bin/pg_xlogdump/pg_xlogdump.c
index c1bfbc2..67932af 100644
--- a/contrib/pg_xlogdump/pg_xlogdump.c
+++ b/src/bin/pg_xlogdump/pg_xlogdump.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		  contrib/pg_xlogdump/pg_xlogdump.c
+ *		  src/bin/pg_xlogdump/pg_xlogdump.c
  *-------------------------------------------------------------------------
  */
 
diff --git a/contrib/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c
similarity index 96%
rename from contrib/pg_xlogdump/rmgrdesc.c
rename to src/bin/pg_xlogdump/rmgrdesc.c
index bd3344c..2205d6e 100644
--- a/contrib/pg_xlogdump/rmgrdesc.c
+++ b/src/bin/pg_xlogdump/rmgrdesc.c
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers definition
  *
- * contrib/pg_xlogdump/rmgrdesc.c
+ * src/bin/pg_xlogdump/rmgrdesc.c
  */
 #define FRONTEND 1
 #include "postgres.h"
diff --git a/contrib/pg_xlogdump/rmgrdesc.h b/src/bin/pg_xlogdump/rmgrdesc.h
similarity index 91%
rename from contrib/pg_xlogdump/rmgrdesc.h
rename to src/bin/pg_xlogdump/rmgrdesc.h
index aec4418..5440f94 100644
--- a/contrib/pg_xlogdump/rmgrdesc.h
+++ b/src/bin/pg_xlogdump/rmgrdesc.h
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers declaration
  *
- * contrib/pg_xlogdump/rmgrdesc.h
+ * src/bin/pg_xlogdump/rmgrdesc.h
  */
 #ifndef RMGRDESC_H
 #define RMGRDESC_H
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 2880a81..6134d5a 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -37,12 +37,12 @@ my @contrib_uselibpgport = (
 	'oid2name',       'pgbench',
 	'pg_standby',     'pg_test_fsync',
 	'pg_test_timing', 'pg_upgrade',
-	'pg_xlogdump',    'vacuumlo');
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
 	'oid2name',       'pgbench',
 	'pg_standby',     'pg_test_fsync',
 	'pg_test_timing', 'pg_upgrade',
-	'pg_xlogdump',    'vacuumlo');
+	'vacuumlo');
 my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -66,7 +66,7 @@ my $frontend_extraincludes = {
 my $frontend_extrasource = {
 	'psql' => [ 'src\bin\psql\psqlscan.l' ] };
 my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
-						 'scripts');
+						 'pg_xlogdump', 'scripts');
 
 sub mkvcbuild
 {
@@ -461,6 +461,19 @@ sub mkvcbuild
 	$pgrestore->AddFile('src\backend\parser\kwlookup.c');
 	$pgrestore->AddLibrary('ws2_32.lib');
 
+	# Get necessary files for pg_xlogdump as files symlinked
+	# on Linux are copied on Windows.
+	my $pgxlogdump = AddSimpleFrontend('pg_xlogdump');
+	$pgxlogdump->AddDefine('FRONTEND');
+	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
+	{
+		my $bf = basename $xf;
+		copy($xf, "src/bin/pg_xlogdump/$bf");
+		$pgxlogdump->AddFile("src\\bin\\pg_xlogdump\\$bf");
+	}
+	copy('src/backend/access/transam/xlogreader.c',
+		 'src/bin/pg_xlogdump/xlogreader.c');
+
 	my $zic = $solution->AddProject('zic', 'exe', 'utils');
 	$zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c',
 		'localtime.c');
@@ -618,22 +631,6 @@ sub mkvcbuild
 	$pgregress->AddDirResourceFile('src\test\regress');
 	$pgregress->AddReference($libpgcommon, $libpgport);
 
-	# fix up pg_xlogdump once it's been set up
-	# files symlinked on Unix are copied on windows
-	my $pg_xlogdump =
-	  (grep { $_->{name} eq 'pg_xlogdump' }
-		  @{ $solution->{projects}->{contrib} })[0];
-	$pg_xlogdump->AddDefine('FRONTEND');
-	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
-	{
-		my $bf = basename $xf;
-		copy($xf, "contrib/pg_xlogdump/$bf");
-		$pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf");
-	}
-	copy(
-		'src/backend/access/transam/xlogreader.c',
-		'contrib/pg_xlogdump/xlogreader.c');
-
 	$solution->Save();
 	return $solution->{vcver};
 }
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
-- 
1.9.2.msysgit.0

0004-Move-pgbench-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0004-Move-pgbench-from-contrib-to-src-bin.patchDownload
From ccb9b1eb63b4d18f700d40a93fca8f39ed1616f1 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 21:10:50 -0700
Subject: [PATCH 4/8] Move pgbench from contrib/ to src/bin/

---
 contrib/Makefile                         |  1 -
 doc/src/sgml/contrib.sgml                |  1 -
 doc/src/sgml/filelist.sgml               |  1 -
 doc/src/sgml/ref/allfiles.sgml           |  1 +
 doc/src/sgml/{ => ref}/pgbench.sgml      |  2 +-
 doc/src/sgml/reference.sgml              |  1 +
 src/bin/Makefile                         |  1 +
 {contrib => src/bin}/pgbench/.gitignore  |  0
 {contrib => src/bin}/pgbench/Makefile    | 18 +++++++-----------
 {contrib => src/bin}/pgbench/exprparse.y |  0
 {contrib => src/bin}/pgbench/exprscan.l  |  0
 {contrib => src/bin}/pgbench/pgbench.c   |  2 +-
 {contrib => src/bin}/pgbench/pgbench.h   |  0
 src/tools/msvc/Mkvcbuild.pm              | 30 +++++++++++++++---------------
 14 files changed, 27 insertions(+), 31 deletions(-)
 rename doc/src/sgml/{ => ref}/pgbench.sgml (99%)
 rename {contrib => src/bin}/pgbench/.gitignore (100%)
 rename {contrib => src/bin}/pgbench/Makefile (68%)
 rename {contrib => src/bin}/pgbench/exprparse.y (100%)
 rename {contrib => src/bin}/pgbench/exprscan.l (100%)
 rename {contrib => src/bin}/pgbench/pgbench.c (99%)
 rename {contrib => src/bin}/pgbench/pgbench.h (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index d9557b8..bd677d1 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -38,7 +38,6 @@ SUBDIRS = \
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
-		pgbench		\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index d0e1446..577791b 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -187,7 +187,6 @@ pages.
   </para>
 
  &oid2name;
- &pgbench;
  &vacuumlo;
  </sect1>
 
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 3b26a70..5bdde7b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -124,7 +124,6 @@
 <!ENTITY oid2name        SYSTEM "oid2name.sgml">
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
-<!ENTITY pgbench         SYSTEM "pgbench.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 17260b9..61462da 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -181,6 +181,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY initdb             SYSTEM "initdb.sgml">
 <!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
+<!ENTITY pgbench            SYSTEM "pgbench.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
 <!ENTITY pgCtl              SYSTEM "pg_ctl-ref.sgml">
diff --git a/doc/src/sgml/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
similarity index 99%
rename from doc/src/sgml/pgbench.sgml
rename to doc/src/sgml/ref/pgbench.sgml
index ed12e27..a808546 100644
--- a/doc/src/sgml/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgbench.sgml -->
+<!-- doc/src/sgml/ref/pgbench.sgml -->
 
 <refentry id="pgbench">
  <indexterm zone="pgbench">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 07c923b..d939d01 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -230,6 +230,7 @@
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
+   &pgbench;
    &pgConfig;
    &pgDump;
    &pgDumpall;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 469798e..3ce7707 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_xlogdump \
+	pgbench \
 	psql \
 	scripts
 
diff --git a/contrib/pgbench/.gitignore b/src/bin/pgbench/.gitignore
similarity index 100%
rename from contrib/pgbench/.gitignore
rename to src/bin/pgbench/.gitignore
diff --git a/contrib/pgbench/Makefile b/src/bin/pgbench/Makefile
similarity index 68%
rename from contrib/pgbench/Makefile
rename to src/bin/pgbench/Makefile
index a18130b..86fd757 100644
--- a/contrib/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,26 +1,22 @@
-# contrib/pgbench/Makefile
+# src/bin/pgbench/Makefile
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
 
+subdir = src/bin/pgbench
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pgbench
 OBJS	= pgbench.o exprparse.o $(WIN32RES)
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgbench
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 distprep: exprparse.c exprscan.c
-endif
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
diff --git a/contrib/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y
similarity index 100%
rename from contrib/pgbench/exprparse.y
rename to src/bin/pgbench/exprparse.y
diff --git a/contrib/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l
similarity index 100%
rename from contrib/pgbench/exprscan.l
rename to src/bin/pgbench/exprscan.l
diff --git a/contrib/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
similarity index 99%
rename from contrib/pgbench/pgbench.c
rename to src/bin/pgbench/pgbench.c
index 706fdf5..43df747 100644
--- a/contrib/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * contrib/pgbench/pgbench.c
+ * src/bin/pgbench/pgbench.c
  * Copyright (c) 2000-2015, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
diff --git a/contrib/pgbench/pgbench.h b/src/bin/pgbench/pgbench.h
similarity index 100%
rename from contrib/pgbench/pgbench.h
rename to src/bin/pgbench/pgbench.h
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 6134d5a..97626ab 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -32,39 +32,39 @@ my $libpq;
 # Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
+  ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',       'pgbench',
-	'pg_standby',     'pg_test_fsync',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',      'pg_standby',
+	'pg_test_fsync', 'pg_test_timing',
+	'pg_upgrade',    'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',       'pgbench',
-	'pg_standby',     'pg_test_fsync',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
-my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
+	'oid2name',      'pg_standby',
+	'pg_test_fsync', 'pg_test_timing',
+	'pg_upgrade',    'vacuumlo');
+my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
 my $contrib_extrasource = {
 	'cube' => [ 'contrib\cube\cubescan.l', 'contrib\cube\cubeparse.y' ],
-	'pgbench' => [ 'contrib\pgbench\exprscan.l', 'contrib\pgbench\exprparse.y' ],
 	'seg'  => [ 'contrib\seg\segscan.l',  'contrib\seg\segparse.y' ], };
 my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
-my @frontend_uselibpq = ('pg_ctl', 'psql');
-my @frontend_uselibpgport = ( 'pg_archivecleanup' );
-my @frontend_uselibpgcommon = ( 'pg_archivecleanup' );
+my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
+my @frontend_uselibpgport = ( 'pg_archivecleanup', 'pgbench' );
+my @frontend_uselibpgcommon = ( 'pg_archivecleanup', 'pgbench' );
 my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
 						  'pg_restore' => ['ws2_32.lib'],
+						  'pgbench' => ['ws2_32.lib'],
 						  'psql' => ['ws2_32.lib'] };
 my $frontend_extraincludes = {
    'initdb' => ['src\timezone'],
    'psql' => ['src\bin\pg_dump', 'src\backend'] };
 my $frontend_extrasource = {
-	'psql' => [ 'src\bin\psql\psqlscan.l' ] };
+	'pgbench' => [ 'src\bin\pgbench\exprscan.l',
+				   'src\bin\pgbench\exprparse.y' ],
+	'psql' => [ 'src\bin\psql\psqlscan.l' ]};
 my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
 						 'pg_xlogdump', 'scripts');
 
-- 
1.9.2.msysgit.0

0005-Move-pg_test_fsync-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0005-Move-pg_test_fsync-from-contrib-to-src-bin.patchDownload
From 53ba9c6566ccbfb72b62fab53a06f98eadfaebd3 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 21:32:35 -0700
Subject: [PATCH 5/8] Move pg_test_fsync from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_test_fsync/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgtestfsync.sgml            | 10 +---------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_test_fsync/.gitignore      |  0
 src/bin/pg_test_fsync/Makefile                     | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c |  0
 src/tools/msvc/Mkvcbuild.pm                        | 20 ++++++++++++--------
 12 files changed, 30 insertions(+), 38 deletions(-)
 delete mode 100644 contrib/pg_test_fsync/Makefile
 rename doc/src/sgml/{ => ref}/pgtestfsync.sgml (95%)
 rename {contrib => src/bin}/pg_test_fsync/.gitignore (100%)
 create mode 100644 src/bin/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index bd677d1..ed6ebae 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_fsync	\
 		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile
deleted file mode 100644
index 15afba7..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 577791b..68cbf78 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
   </para>
 
  &pgstandby;
- &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
  </sect1>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5bdde7b..c14e737 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtestfsync     SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 61462da..572032c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -192,6 +192,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
similarity index 95%
rename from doc/src/sgml/pgtestfsync.sgml
rename to doc/src/sgml/ref/pgtestfsync.sgml
index c4b4014..5dcabe4 100644
--- a/doc/src/sgml/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtestfsync.sgml -->
+<!-- doc/src/sgml/ref/pgtestfsync.sgml -->
 
 <refentry id="pgtestfsync">
  <indexterm zone="pgtestfsync">
@@ -104,14 +104,6 @@
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Bruce Momjian <email>bruce@momjian.us</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index d939d01..be7ca70 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -262,6 +262,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgtestfsync;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 3ce7707..497f9ee 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_test_fsync \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
similarity index 100%
rename from contrib/pg_test_fsync/.gitignore
rename to src/bin/pg_test_fsync/.gitignore
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..e8d1952
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_fsync
+OBJS = pg_test_fsync.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
similarity index 100%
rename from contrib/pg_test_fsync/pg_test_fsync.c
rename to src/bin/pg_test_fsync/pg_test_fsync.c
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 97626ab..0441814 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,13 +34,13 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',      'pg_standby',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'vacuumlo');
+	'oid2name',       'pg_standby',
+	'pg_test_timing', 'pg_upgrade',
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',      'pg_standby',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'vacuumlo');
+	'oid2name',       'pg_standby',
+	'pg_test_timing', 'pg_upgrade',
+	'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -52,8 +52,12 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
-my @frontend_uselibpgport = ( 'pg_archivecleanup', 'pgbench' );
-my @frontend_uselibpgcommon = ( 'pg_archivecleanup', 'pgbench' );
+my @frontend_uselibpgport = (
+	'pg_archivecleanup', 'pg_test_fsync',
+	'pgbench' );
+my @frontend_uselibpgcommon = (
+	'pg_archivecleanup', 'pg_test_fsync',
+	'pgbench' );
 my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
 						  'pg_restore' => ['ws2_32.lib'],
 						  'pgbench' => ['ws2_32.lib'],
-- 
1.9.2.msysgit.0

0006-Move-pg_test_timing-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0006-Move-pg_test_timing-from-contrib-to-src-bin.patchDownload
From 3d6b2104f219f534431eeba7b0750b4cfc92dd30 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 21:56:39 -0700
Subject: [PATCH 6/8] Move pg_test_timing from contrib/ to src/bin/

---
 contrib/Makefile                                     |  1 -
 contrib/pg_test_timing/Makefile                      | 18 ------------------
 doc/src/sgml/contrib.sgml                            |  1 -
 doc/src/sgml/filelist.sgml                           |  1 -
 doc/src/sgml/ref/allfiles.sgml                       |  1 +
 doc/src/sgml/{ => ref}/pgtesttiming.sgml             | 10 +---------
 doc/src/sgml/reference.sgml                          |  1 +
 src/bin/Makefile                                     |  1 +
 {contrib => src/bin}/pg_test_timing/.gitignore       |  0
 src/bin/pg_test_timing/Makefile                      | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_timing/pg_test_timing.c |  0
 src/tools/msvc/Mkvcbuild.pm                          | 14 ++++++--------
 12 files changed, 24 insertions(+), 38 deletions(-)
 delete mode 100644 contrib/pg_test_timing/Makefile
 rename doc/src/sgml/{ => ref}/pgtesttiming.sgml (98%)
 rename {contrib => src/bin}/pg_test_timing/.gitignore (100%)
 create mode 100644 src/bin/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/pg_test_timing.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index ed6ebae..60475c4 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
diff --git a/contrib/pg_test_timing/Makefile b/contrib/pg_test_timing/Makefile
deleted file mode 100644
index 8b37aa8..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 68cbf78..885a096 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
   </para>
 
  &pgstandby;
- &pgtesttiming;
  &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index c14e737..d6120e3 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 572032c..39e0244 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -193,6 +193,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
+<!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml
similarity index 98%
rename from doc/src/sgml/pgtesttiming.sgml
rename to doc/src/sgml/ref/pgtesttiming.sgml
index a6ab9b1..d5e231f 100644
--- a/doc/src/sgml/pgtesttiming.sgml
+++ b/doc/src/sgml/ref/pgtesttiming.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtesttiming.sgml -->
+<!-- doc/src/sgml/ref/pgtesttiming.sgml -->
 
 <refentry id="pgtesttiming">
  <indexterm zone="pgtesttiming">
@@ -291,14 +291,6 @@ Histogram of timing durations:
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Ants Aasma <email>ants.aasma@eesti.ee</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index be7ca70..99bfcda 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -263,6 +263,7 @@
    &pgCtl;
    &pgResetxlog;
    &pgtestfsync;
+   &pgtesttiming;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 497f9ee..253119a 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_test_fsync \
+	pg_test_timing \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_timing/.gitignore b/src/bin/pg_test_timing/.gitignore
similarity index 100%
rename from contrib/pg_test_timing/.gitignore
rename to src/bin/pg_test_timing/.gitignore
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
new file mode 100644
index 0000000..f96d2e9
--- /dev/null
+++ b/src/bin/pg_test_timing/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_timing/Makefile
+
+PGFILEDESC = "pg_test_timing - test timing overhead"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_timing
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_timing
+OBJS = pg_test_timing.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c
similarity index 100%
rename from contrib/pg_test_timing/pg_test_timing.c
rename to src/bin/pg_test_timing/pg_test_timing.c
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 0441814..ba792b6 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,13 +34,11 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',       'pg_standby',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',   'pg_standby',
+	'pg_upgrade', 'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',       'pg_standby',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',   'pg_standby',
+	'pg_upgrade', 'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -54,10 +52,10 @@ my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
 my @frontend_uselibpgport = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pgbench' );
+	'pg_test_timing', 'pgbench' );
 my @frontend_uselibpgcommon = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pgbench' );
+	'pg_test_timing', 'pgbench' );
 my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
 						  'pg_restore' => ['ws2_32.lib'],
 						  'pgbench' => ['ws2_32.lib'],
-- 
1.9.2.msysgit.0

0007-Integrate-pg_upgrade_support-module-into-backend.patchtext/x-diff; charset=US-ASCII; name=0007-Integrate-pg_upgrade_support-module-into-backend.patchDownload
From 71634404778a121e17aeceb8d1c528e4085397c1 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 7/8] Integrate pg_upgrade_support module into backend

Previously, these functions were created in a schema "binary_upgrade",
which was deleted after pg_upgrade was finished.  Because we don't want
to keep that schema around permanently, move them to pg_catalog but
rename them with a binary_upgrade_... prefix.

The provided functions are only small wrappers around global variables
that were added specifically for pg_upgrade use, so keeping the module
separate does not create any modularity.

The functions still check that they are only called in binary upgrade
mode, so it is not possible to call these during normal operation.
---
 contrib/Makefile                                   |   1 -
 contrib/pg_upgrade/dump.c                          |   2 +-
 contrib/pg_upgrade/function.c                      | 113 ---------------------
 contrib/pg_upgrade/pg_upgrade.c                    |  27 -----
 contrib/pg_upgrade/pg_upgrade.h                    |   2 -
 contrib/pg_upgrade/test.sh                         |   1 -
 contrib/pg_upgrade_support/Makefile                |  16 ---
 doc/src/sgml/pgupgrade.sgml                        |   5 +-
 src/backend/catalog/heap.c                         |   2 +-
 src/backend/catalog/index.c                        |   2 +-
 src/backend/catalog/pg_enum.c                      |   2 +-
 src/backend/catalog/pg_type.c                      |   2 +-
 src/backend/catalog/toasting.c                     |   2 +-
 src/backend/commands/typecmds.c                    |   2 +-
 src/backend/commands/user.c                        |   2 +-
 src/backend/utils/adt/Makefile                     |   3 +-
 .../backend/utils/adt}/pg_upgrade_support.c        |  45 ++++----
 src/bin/pg_dump/pg_dump.c                          |  18 ++--
 src/bin/pg_dump/pg_dumpall.c                       |   2 +-
 src/include/catalog/pg_proc.h                      |  20 ++++
 20 files changed, 61 insertions(+), 208 deletions(-)
 delete mode 100644 contrib/pg_upgrade_support/Makefile
 rename {contrib/pg_upgrade_support => src/backend/utils/adt}/pg_upgrade_support.c (73%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 60475c4..39e8f1d 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -35,7 +35,6 @@ SUBDIRS = \
 		pg_stat_statements \
 		pg_trgm		\
 		pg_upgrade	\
-		pg_upgrade_support \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/contrib/pg_upgrade/dump.c b/contrib/pg_upgrade/dump.c
index 941c4bb..906e85f 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/contrib/pg_upgrade/dump.c
@@ -121,7 +121,7 @@ optionally_create_toast_tables(void)
 		for (rowno = 0; rowno < ntups; rowno++)
 		{
 			/* enable auto-oid-numbered TOAST creation if needed */
-			PQclear(executeQueryOrDie(conn, "SELECT binary_upgrade.set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
+			PQclear(executeQueryOrDie(conn, "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
 					OPTIONALLY_CREATE_TOAST_OID));
 
 			/* dummy command that also triggers check for required TOAST table */
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index deffe04..d8009d1 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,112 +13,6 @@
 
 #include "access/transam.h"
 
-#define PG_UPGRADE_SUPPORT	"$libdir/pg_upgrade_support"
-
-/*
- * install_support_functions_in_new_db()
- *
- * pg_upgrade requires some support functions that enable it to modify
- * backend behavior.
- */
-void
-install_support_functions_in_new_db(const char *db_name)
-{
-	PGconn	   *conn = connectToServer(&new_cluster, db_name);
-
-	/* suppress NOTICE of dropped objects */
-	PQclear(executeQueryOrDie(conn,
-							  "SET client_min_messages = warning;"));
-	PQclear(executeQueryOrDie(conn,
-						   "DROP SCHEMA IF EXISTS binary_upgrade CASCADE;"));
-	PQclear(executeQueryOrDie(conn,
-							  "RESET client_min_messages;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE SCHEMA binary_upgrade;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_array_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_toast_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_heap_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_index_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_toast_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_enum_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_authid_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.create_empty_extension(text, text, bool, text, oid[], text[], text[]) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C;"));
-	PQfinish(conn);
-}
-
-
-void
-uninstall_support_functions_from_new_cluster(void)
-{
-	int			dbnum;
-
-	prep_status("Removing support functions from new cluster");
-
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-		PGconn	   *conn = connectToServer(&new_cluster, new_db->db_name);
-
-		/* suppress NOTICE of dropped objects */
-		PQclear(executeQueryOrDie(conn,
-								  "SET client_min_messages = warning;"));
-		PQclear(executeQueryOrDie(conn,
-								  "DROP SCHEMA binary_upgrade CASCADE;"));
-		PQclear(executeQueryOrDie(conn,
-								  "RESET client_min_messages;"));
-		PQfinish(conn);
-	}
-	check_ok();
-}
-
 
 /*
  * get_loadable_libraries()
@@ -218,8 +112,6 @@ get_loadable_libraries(void)
 	if (found_public_plpython_handler)
 		pg_fatal("Remove the problem functions from the old cluster to continue.\n");
 
-	totaltups++;				/* reserve for pg_upgrade_support */
-
 	/* Allocate what's certainly enough space */
 	os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
 
@@ -228,7 +120,6 @@ get_loadable_libraries(void)
 	 * there probably aren't enough entries to matter.
 	 */
 	totaltups = 0;
-	os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
 	{
@@ -321,10 +212,6 @@ check_loadable_libraries(void)
 		{
 			found = true;
 
-			/* exit and report missing support library with special message */
-			if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
-				pg_fatal("The pg_upgrade_support module must be created and installed in the new cluster.\n");
-
 			if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
 				pg_fatal("Could not open file \"%s\": %s\n",
 						 output_path, getErrorText(errno));
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index ed7de80..1ff01a7 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -276,14 +276,6 @@ prepare_new_databases(void)
 	prep_status("Restoring global objects in the new cluster");
 
 	/*
-	 * Install support functions in the global-object restore database to
-	 * preserve pg_authid.oid.  pg_dumpall uses 'template0' as its template
-	 * database so objects we add into 'template1' are not propogated.  They
-	 * are removed on pg_upgrade exit.
-	 */
-	install_support_functions_in_new_db("template1");
-
-	/*
 	 * We have to create the databases first so we can install support
 	 * functions in all the other databases.  Ideally we could create the
 	 * support functions in template1 but pg_dumpall creates database using
@@ -305,23 +297,6 @@ create_new_objects(void)
 {
 	int			dbnum;
 
-	prep_status("Adding support functions to new cluster");
-
-	/*
-	 * Technically, we only need to install these support functions in new
-	 * databases that also exist in the old cluster, but for completeness we
-	 * process all new databases.
-	 */
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-
-		/* skip db we already installed */
-		if (strcmp(new_db->db_name, "template1") != 0)
-			install_support_functions_in_new_db(new_db->db_name);
-	}
-	check_ok();
-
 	prep_status("Restoring database schemas in the new cluster\n");
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
@@ -365,8 +340,6 @@ create_new_objects(void)
 
 	/* regenerate now that we have objects in the databases */
 	get_db_and_rel_infos(&new_cluster);
-
-	uninstall_support_functions_from_new_cluster();
 }
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 19d59f5..f9c239d 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -406,8 +406,6 @@ FILE	   *fopen_priv(const char *path, const char *mode);
 
 /* function.c */
 
-void		install_support_functions_in_new_db(const char *db_name);
-void		uninstall_support_functions_from_new_cluster(void);
 void		get_loadable_libraries(void);
 void		check_loadable_libraries(void);
 
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh
index 75b6357..2e9f976 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/contrib/pg_upgrade/test.sh
@@ -70,7 +70,6 @@ if [ "$1" = '--install' ]; then
 	libdir=$temp_install/$libdir
 
 	"$MAKE" -s -C ../.. install DESTDIR="$temp_install"
-	"$MAKE" -s -C ../pg_upgrade_support install DESTDIR="$temp_install"
 	"$MAKE" -s -C . install DESTDIR="$temp_install"
 
 	# platform-specific magic to find the shared libraries; see pg_regress.c
diff --git a/contrib/pg_upgrade_support/Makefile b/contrib/pg_upgrade_support/Makefile
deleted file mode 100644
index f7def16..0000000
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index e1cd260..8d70727 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -253,11 +253,10 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade and pg_upgrade_support</title>
+    <title>Install pg_upgrade</title>
 
     <para>
-     Install the <application>pg_upgrade</> binary and
-     <application>pg_upgrade_support</> library in the new PostgreSQL
+     Install the <application>pg_upgrade</> binary in the new PostgreSQL
      installation.
     </para>
    </step>
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5ce4395..eb4f37c 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -76,7 +76,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_pg_class_oid = InvalidOid;
 Oid			binary_upgrade_next_toast_pg_class_oid = InvalidOid;
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index f85ed93..197cd52 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -69,7 +69,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_pg_class_oid = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index d87090a..c880486 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -31,7 +31,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index d1ed53f..32453c3 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -36,7 +36,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index d14c33c..c99d353 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -32,7 +32,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 67e2ae2..907ba11 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -80,7 +80,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_array_pg_type_oid = InvalidOid;
 
 static void makeRangeConstructors(const char *name, Oid namespace,
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 75f1b3c..456c27e 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -38,7 +38,7 @@
 #include "utils/timestamp.h"
 #include "utils/tqual.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_authid_oid = InvalidOid;
 
 
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 20e5ff1..1f1bee7 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,7 +25,8 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
 	jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
 	network.o network_gist.o network_selfuncs.o \
 	numeric.o numutils.o oid.o oracle_compat.o \
-	orderedsetaggs.o pg_locale.o pg_lsn.o pgstatfuncs.o \
+	orderedsetaggs.o pg_locale.o pg_lsn.o pg_upgrade_support.o \
+	pgstatfuncs.o \
 	pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
 	rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
 	regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
diff --git a/contrib/pg_upgrade_support/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
similarity index 73%
rename from contrib/pg_upgrade_support/pg_upgrade_support.c
rename to src/backend/utils/adt/pg_upgrade_support.c
index f477973..d69fa53 100644
--- a/contrib/pg_upgrade_support/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -6,7 +6,7 @@
  *	hacks needed for pg_upgrade.
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade_support/pg_upgrade_support.c
+ *	src/backend/utils/adt/pg_upgrade_support.c
  */
 
 #include "postgres.h"
@@ -19,24 +19,17 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 
-/* THIS IS USED ONLY FOR PG >= 9.0 */
 
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
+Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
-PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_array_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_type_oid);
-
-PG_FUNCTION_INFO_V1(set_next_heap_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_index_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_class_oid);
-
-PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
-PG_FUNCTION_INFO_V1(set_next_pg_authid_oid);
-
-PG_FUNCTION_INFO_V1(create_empty_extension);
 
 #define CHECK_IS_BINARY_UPGRADE 								\
 do { 															\
@@ -47,7 +40,7 @@ do { 															\
 } while (0)
 
 Datum
-set_next_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -58,7 +51,7 @@ set_next_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -69,7 +62,7 @@ set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -80,7 +73,7 @@ set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -91,7 +84,7 @@ set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -102,7 +95,7 @@ set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -113,7 +106,7 @@ set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_enum_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 {
 	Oid			enumoid = PG_GETARG_OID(0);
 
@@ -124,7 +117,7 @@ set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_authid_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 {
 	Oid			authoid = PG_GETARG_OID(0);
 
@@ -134,7 +127,7 @@ set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-create_empty_extension(PG_FUNCTION_ARGS)
+binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)
 {
 	text	   *extName = PG_GETARG_TEXT_PP(0);
 	text	   *schemaName = PG_GETARG_TEXT_PP(1);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index fdfb431..41d2eec 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3045,7 +3045,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 
 	appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
 	appendPQExpBuffer(upgrade_buffer,
-	 "SELECT binary_upgrade.set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+	 "SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 					  pg_type_oid);
 
 	/* we only support old >= 8.3 for binary upgrades */
@@ -3064,7 +3064,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 		appendPQExpBufferStr(upgrade_buffer,
 			   "\n-- For binary upgrade, must preserve pg_type array oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_array_oid);
 	}
 
@@ -3106,7 +3106,7 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
 
 		appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type toast oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_toast_oid);
 
 		toast_set = true;
@@ -3146,7 +3146,7 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 	if (!is_index)
 	{
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 		/* only tables have toast tables, not indexes */
 		if (OidIsValid(pg_class_reltoastrelid))
@@ -3161,18 +3161,18 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 			 */
 
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_class_reltoastrelid);
 
 			/* every toast table has an index */
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_index_indexrelid);
 		}
 	}
 	else
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 
 	appendPQExpBufferChar(upgrade_buffer, '\n');
@@ -8352,7 +8352,7 @@ dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
 		appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
 
 		appendPQExpBufferStr(q,
-							 "SELECT binary_upgrade.create_empty_extension(");
+							 "SELECT pg_catalog.binary_upgrade_create_empty_extension(");
 		appendStringLiteralAH(q, extinfo->dobj.name, fout);
 		appendPQExpBufferStr(q, ", ");
 		appendStringLiteralAH(q, extinfo->namespace, fout);
@@ -8530,7 +8530,7 @@ dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
 			if (i == 0)
 				appendPQExpBufferStr(q, "\n-- For binary upgrade, must preserve pg_enum oids\n");
 			appendPQExpBuffer(q,
-							  "SELECT binary_upgrade.set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
 							  enum_oid);
 			appendPQExpBuffer(q, "ALTER TYPE %s.",
 							  fmtId(tyinfo->dobj.namespace->dobj.name));
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 6a7a641..7169ad0 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -781,7 +781,7 @@ dumpRoles(PGconn *conn)
 		{
 			appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_authid.oid\n");
 			appendPQExpBuffer(buf,
-							  "SELECT binary_upgrade.set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
 							  auth_oid);
 		}
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index b8a3660..c7dd22c 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -5149,6 +5149,26 @@ DESCR("rank of hypothetical row without gaps");
 DATA(insert OID = 3993 ( dense_rank_final	PGNSP PGUID 12 1 0 2276 0 f f f f f f i 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_	hypothetical_dense_rank_final _null_ _null_ _null_ ));
 DESCR("aggregate final function");
 
+/* pg_upgrade support */
+DATA(insert OID = 3582 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3584 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3585 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3586 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3587 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3588 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3589 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3591 ( binary_upgrade_create_empty_extension PGNSP PGUID  12 1 0 0 0 f f f f t f v 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+
 
 /*
  * Symbolic values for provolatile column: these indicate whether the result
-- 
1.9.2.msysgit.0

0008-Move-pg_upgrade-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0008-Move-pg_upgrade-from-contrib-to-src-bin.patchDownload
From b1ecac2c4bbc11417197216125fa984132f6263b Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 8/8] Move pg_upgrade from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pgupgrade.sgml          | 14 +++-----------
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_upgrade/.gitignore     |  0
 {contrib => src/bin}/pg_upgrade/IMPLEMENTATION |  2 --
 {contrib => src/bin}/pg_upgrade/Makefile       | 18 +++++++-----------
 {contrib => src/bin}/pg_upgrade/TESTING        |  2 --
 {contrib => src/bin}/pg_upgrade/check.c        |  2 +-
 {contrib => src/bin}/pg_upgrade/controldata.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/dump.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/exec.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/file.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/function.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/info.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/option.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/page.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/parallel.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.h   |  2 +-
 {contrib => src/bin}/pg_upgrade/relfilenode.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/server.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/tablespace.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/test.sh        |  8 ++++----
 {contrib => src/bin}/pg_upgrade/util.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/version.c      |  2 +-
 src/tools/msvc/Mkvcbuild.pm                    | 14 ++++++++------
 src/tools/msvc/vcregress.pl                    |  6 +++---
 31 files changed, 45 insertions(+), 59 deletions(-)
 rename doc/src/sgml/{ => ref}/pgupgrade.sgml (98%)
 rename {contrib => src/bin}/pg_upgrade/.gitignore (100%)
 rename {contrib => src/bin}/pg_upgrade/IMPLEMENTATION (99%)
 rename {contrib => src/bin}/pg_upgrade/Makefile (79%)
 rename {contrib => src/bin}/pg_upgrade/TESTING (99%)
 rename {contrib => src/bin}/pg_upgrade/check.c (99%)
 rename {contrib => src/bin}/pg_upgrade/controldata.c (99%)
 rename {contrib => src/bin}/pg_upgrade/dump.c (99%)
 rename {contrib => src/bin}/pg_upgrade/exec.c (99%)
 rename {contrib => src/bin}/pg_upgrade/file.c (99%)
 rename {contrib => src/bin}/pg_upgrade/function.c (99%)
 rename {contrib => src/bin}/pg_upgrade/info.c (99%)
 rename {contrib => src/bin}/pg_upgrade/option.c (99%)
 rename {contrib => src/bin}/pg_upgrade/page.c (99%)
 rename {contrib => src/bin}/pg_upgrade/parallel.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.h (99%)
 rename {contrib => src/bin}/pg_upgrade/relfilenode.c (99%)
 rename {contrib => src/bin}/pg_upgrade/server.c (99%)
 rename {contrib => src/bin}/pg_upgrade/tablespace.c (98%)
 rename {contrib => src/bin}/pg_upgrade/test.sh (97%)
 rename {contrib => src/bin}/pg_upgrade/util.c (99%)
 rename {contrib => src/bin}/pg_upgrade/version.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 39e8f1d..e2c4e27 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -34,7 +34,6 @@ SUBDIRS = \
 		pg_standby	\
 		pg_stat_statements \
 		pg_trgm		\
-		pg_upgrade	\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 885a096..49a6ce8 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,6 +202,5 @@ pages.
   </para>
 
  &pgstandby;
- &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index d6120e3..a240d7e 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -133,7 +133,6 @@
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
-<!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 39e0244..0a35b4c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -194,6 +194,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
+<!ENTITY pgupgrade          SYSTEM "pgupgrade.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
similarity index 98%
rename from doc/src/sgml/pgupgrade.sgml
rename to doc/src/sgml/ref/pgupgrade.sgml
index 8d70727..8b3912d 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/ref/pgupgrade.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgupgrade.sgml -->
+<!-- doc/src/sgml/ref/pgupgrade.sgml -->
 
 <refentry id="pgupgrade">
  <indexterm zone="pgupgrade">
@@ -240,7 +240,8 @@ mv /usr/local/pgsql /usr/local/pgsql.old
     <title>Install the new PostgreSQL binaries</title>
 
     <para>
-     Install the new server's binaries and support files.
+     Install the new server's binaries and support
+     files.  <application>pg_upgrade</> is included in a default installation.
     </para>
 
     <para>
@@ -253,15 +254,6 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade</title>
-
-    <para>
-     Install the <application>pg_upgrade</> binary in the new PostgreSQL
-     installation.
-    </para>
-   </step>
-
-   <step>
     <title>Initialize the new PostgreSQL cluster</title>
 
     <para>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 99bfcda..e1484f4 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -264,6 +264,7 @@
    &pgResetxlog;
    &pgtestfsync;
    &pgtesttiming;
+   &pgupgrade;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 253119a..47ef00c 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_test_fsync \
 	pg_test_timing \
+	pg_upgrade \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
similarity index 100%
rename from contrib/pg_upgrade/.gitignore
rename to src/bin/pg_upgrade/.gitignore
diff --git a/contrib/pg_upgrade/IMPLEMENTATION b/src/bin/pg_upgrade/IMPLEMENTATION
similarity index 99%
rename from contrib/pg_upgrade/IMPLEMENTATION
rename to src/bin/pg_upgrade/IMPLEMENTATION
index a0cfcf1..9b5ff72 100644
--- a/contrib/pg_upgrade/IMPLEMENTATION
+++ b/src/bin/pg_upgrade/IMPLEMENTATION
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/IMPLEMENTATION
-
 ------------------------------------------------------------------------------
 PG_UPGRADE: IN-PLACE UPGRADES FOR POSTGRESQL
 ------------------------------------------------------------------------------
diff --git a/contrib/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
similarity index 79%
rename from contrib/pg_upgrade/Makefile
rename to src/bin/pg_upgrade/Makefile
index 87da4b8..c22daa5 100644
--- a/contrib/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,8 +1,12 @@
-# contrib/pg_upgrade/Makefile
+# src/bin/pg_upgrade/Makefile
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
 
+subdir = src/bin/pg_upgrade
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
@@ -15,16 +19,8 @@ EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
               pg_upgrade_dump_globals.sql \
               pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/contrib/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
similarity index 99%
rename from contrib/pg_upgrade/TESTING
rename to src/bin/pg_upgrade/TESTING
index 359688c..4ecfc57 100644
--- a/contrib/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/TESTING
-
 The most effective way to test pg_upgrade, aside from testing on user
 data, is by upgrading the PostgreSQL regression database.
 
diff --git a/contrib/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
similarity index 99%
rename from contrib/pg_upgrade/check.c
rename to src/bin/pg_upgrade/check.c
index 6a498c3..647bf34 100644
--- a/contrib/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -4,7 +4,7 @@
  *	server checks and output routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/check.c
+ *	src/bin/pg_upgrade/check.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
similarity index 99%
rename from contrib/pg_upgrade/controldata.c
rename to src/bin/pg_upgrade/controldata.c
index 0e70b6f..bf53db0 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -4,7 +4,7 @@
  *	controldata functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/controldata.c
+ *	src/bin/pg_upgrade/controldata.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c
similarity index 99%
rename from contrib/pg_upgrade/dump.c
rename to src/bin/pg_upgrade/dump.c
index 906e85f..2c20e84 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/src/bin/pg_upgrade/dump.c
@@ -4,7 +4,7 @@
  *	dump functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/dump.c
+ *	src/bin/pg_upgrade/dump.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
similarity index 99%
rename from contrib/pg_upgrade/exec.c
rename to src/bin/pg_upgrade/exec.c
index bf87419..7d31912 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -4,7 +4,7 @@
  *	execution functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/exec.c
+ *	src/bin/pg_upgrade/exec.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c
similarity index 99%
rename from contrib/pg_upgrade/file.c
rename to src/bin/pg_upgrade/file.c
index 5a8d17a..79d9390 100644
--- a/contrib/pg_upgrade/file.c
+++ b/src/bin/pg_upgrade/file.c
@@ -4,7 +4,7 @@
  *	file system operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/file.c
+ *	src/bin/pg_upgrade/file.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/function.c b/src/bin/pg_upgrade/function.c
similarity index 99%
rename from contrib/pg_upgrade/function.c
rename to src/bin/pg_upgrade/function.c
index d8009d1..04492a5 100644
--- a/contrib/pg_upgrade/function.c
+++ b/src/bin/pg_upgrade/function.c
@@ -4,7 +4,7 @@
  *	server-side function support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/function.c
+ *	src/bin/pg_upgrade/function.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
similarity index 99%
rename from contrib/pg_upgrade/info.c
rename to src/bin/pg_upgrade/info.c
index 1254934..c0a5601 100644
--- a/contrib/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -4,7 +4,7 @@
  *	information support functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/info.c
+ *	src/bin/pg_upgrade/info.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c
similarity index 99%
rename from contrib/pg_upgrade/option.c
rename to src/bin/pg_upgrade/option.c
index 9b387be..ce339ce 100644
--- a/contrib/pg_upgrade/option.c
+++ b/src/bin/pg_upgrade/option.c
@@ -4,7 +4,7 @@
  *	options functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/option.c
+ *	src/bin/pg_upgrade/option.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/page.c b/src/bin/pg_upgrade/page.c
similarity index 99%
rename from contrib/pg_upgrade/page.c
rename to src/bin/pg_upgrade/page.c
index 1cfc10f..3f4c697 100644
--- a/contrib/pg_upgrade/page.c
+++ b/src/bin/pg_upgrade/page.c
@@ -4,7 +4,7 @@
  *	per-page conversion operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/page.c
+ *	src/bin/pg_upgrade/page.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c
similarity index 99%
rename from contrib/pg_upgrade/parallel.c
rename to src/bin/pg_upgrade/parallel.c
index 6da9965..c6978b5 100644
--- a/contrib/pg_upgrade/parallel.c
+++ b/src/bin/pg_upgrade/parallel.c
@@ -4,7 +4,7 @@
  *	multi-process support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/parallel.c
+ *	src/bin/pg_upgrade/parallel.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.c
rename to src/bin/pg_upgrade/pg_upgrade.c
index 1ff01a7..0333a91 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -4,7 +4,7 @@
  *	main source file
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.c
+ *	src/bin/pg_upgrade/pg_upgrade.c
  */
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.h
rename to src/bin/pg_upgrade/pg_upgrade.h
index f9c239d..bc81acb 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -2,7 +2,7 @@
  *	pg_upgrade.h
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.h
+ *	src/bin/pg_upgrade/pg_upgrade.h
  */
 
 #include <unistd.h>
diff --git a/contrib/pg_upgrade/relfilenode.c b/src/bin/pg_upgrade/relfilenode.c
similarity index 99%
rename from contrib/pg_upgrade/relfilenode.c
rename to src/bin/pg_upgrade/relfilenode.c
index 423802b..fe05880 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/src/bin/pg_upgrade/relfilenode.c
@@ -4,7 +4,7 @@
  *	relfilenode functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/relfilenode.c
+ *	src/bin/pg_upgrade/relfilenode.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
similarity index 99%
rename from contrib/pg_upgrade/server.c
rename to src/bin/pg_upgrade/server.c
index c5f66f0..8d8e7d7 100644
--- a/contrib/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -4,7 +4,7 @@
  *	database server functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/server.c
+ *	src/bin/pg_upgrade/server.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c
similarity index 98%
rename from contrib/pg_upgrade/tablespace.c
rename to src/bin/pg_upgrade/tablespace.c
index eecdf4b..ce7097e 100644
--- a/contrib/pg_upgrade/tablespace.c
+++ b/src/bin/pg_upgrade/tablespace.c
@@ -4,7 +4,7 @@
  *	tablespace functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/tablespace.c
+ *	src/bin/pg_upgrade/tablespace.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
similarity index 97%
rename from contrib/pg_upgrade/test.sh
rename to src/bin/pg_upgrade/test.sh
index 2e9f976..0903f30 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# contrib/pg_upgrade/test.sh
+# src/bin/pg_upgrade/test.sh
 #
 # Test driver for pg_upgrade.  Initializes a new database cluster,
 # runs the regression tests (to put in some data), runs pg_dumpall,
@@ -21,7 +21,7 @@ unset MAKELEVEL
 # authentication configuration.
 standard_initdb() {
 	"$1" -N
-	../../src/test/regress/pg_regress --config-auth "$PGDATA"
+	../../test/regress/pg_regress --config-auth "$PGDATA"
 }
 
 # Establish how the server will listen for connections
@@ -92,9 +92,9 @@ fi
 
 : ${oldbindir=$bindir}
 
-: ${oldsrc=../..}
+: ${oldsrc=../../..}
 oldsrc=`cd "$oldsrc" && pwd`
-newsrc=`cd ../.. && pwd`
+newsrc=`cd ../../.. && pwd`
 
 PATH=$bindir:$PATH
 export PATH
diff --git a/contrib/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
similarity index 99%
rename from contrib/pg_upgrade/util.c
rename to src/bin/pg_upgrade/util.c
index ec18526..6856fc8 100644
--- a/contrib/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -4,7 +4,7 @@
  *	utility functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/util.c
+ *	src/bin/pg_upgrade/util.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c
similarity index 99%
rename from contrib/pg_upgrade/version.c
rename to src/bin/pg_upgrade/version.c
index 4ae9511..e3e7387 100644
--- a/contrib/pg_upgrade/version.c
+++ b/src/bin/pg_upgrade/version.c
@@ -4,7 +4,7 @@
  *	Postgres-version-specific routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/version.c
+ *	src/bin/pg_upgrade/version.c
  */
 
 #include "postgres_fe.h"
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index ba792b6..cf4c637 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -32,13 +32,13 @@ my $libpq;
 # Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
+  ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
 	'oid2name',   'pg_standby',
-	'pg_upgrade', 'vacuumlo');
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
 	'oid2name',   'pg_standby',
-	'pg_upgrade', 'vacuumlo');
+	'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -49,13 +49,15 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
-my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
+my @frontend_uselibpq = ('pg_ctl', 'pg_upgrade', 'pgbench', 'psql');
 my @frontend_uselibpgport = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pg_test_timing', 'pgbench' );
+	'pg_test_timing', 'pg_upgrade',
+	'pgbench' );
 my @frontend_uselibpgcommon = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pg_test_timing', 'pgbench' );
+	'pg_test_timing', 'pg_upgrade',
+	'pgbench' );
 my $frontend_extralibs = {'initdb' => ['ws2_32.lib'],
 						  'pg_restore' => ['ws2_32.lib'],
 						  'pgbench' => ['ws2_32.lib'],
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index bd3dd2c..4812a03 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -269,7 +269,7 @@ sub upgradecheck
 
 	$ENV{PGHOST} = 'localhost';
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -282,7 +282,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	standard_initdb() or exit 1;
@@ -292,7 +292,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
1.9.2.msysgit.0

#82Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Michael Paquier (#81)
Re: moving from contrib to bin

Michael Paquier wrote:

On Tue, Mar 10, 2015 at 8:07 PM, Michael Paquier wrote:

I'd rather vote for having the Windows-side stuff integrated with each
patch. Mind if I rebase what you just sent with the Windows things
added?

And here is the rebased series with the MSVC changes included for each
module in its individual patch. 0001 is the refactoring patch for MSVC
scripts which should be applied before the rest.

Thanks. I have pushed 0001; let's see what the buildfarm thinks of it.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#83Andres Freund
andres@2ndquadrant.com
In reply to: Alvaro Herrera (#76)
Re: moving from contrib to bin

On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

I personally find it quite ugly to use pgxs for stuff in
src/bin. pgxs.mk says:
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
# this file, the rest will be done here.

I don't object at all to introducing more generic rules for src/bin, but
that seems like a separate task. And one that should be done right not
just use some convenient hack. And you can't tell me that
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
isn't a hack...

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#84Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#83)
Re: moving from contrib to bin

Andres Freund <andres@2ndquadrant.com> writes:

On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

I personally find it quite ugly to use pgxs for stuff in
src/bin. pgxs.mk says:
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
# this file, the rest will be done here.

I don't object at all to introducing more generic rules for src/bin, but
that seems like a separate task. And one that should be done right not
just use some convenient hack. And you can't tell me that
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
isn't a hack...

I'm with Andres on this. If we can't take the time to make a moved module
look like it actually belongs to src/bin, we shouldn't do it at all.
Code should look like it's always been wherever it is --- obvious evidence
of some nonlinear historical development path just confuses readers.

Less abstractly, this sort of shortcut is likely to be a problem for future
development of pgxs.mk, in that now it will have to support an abuse
it was never intended for; one that works only accidentally (if indeed
it works at all, which I have doubts about for corner cases).

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#85Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Andres Freund (#83)
Re: moving from contrib to bin

Andres Freund wrote:

On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

I personally find it quite ugly to use pgxs for stuff in
src/bin. pgxs.mk says:
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
# this file, the rest will be done here.

I think if you s/extension// in the above paragraph, it makes complete
sense to use it for the new src/bin modules.

I don't object at all to introducing more generic rules for src/bin, but
that seems like a separate task. And one that should be done right not
just use some convenient hack. And you can't tell me that
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
isn't a hack...

Why not? It's the standard procedure for building modules outside the
contrib/ source tree.

I'm okay with reformulating the makefiles after the move, so that these
modules are built in our standard, simpler makefile conventions. Let's
do that in a followup commit -- then each change is simpler. It's hard
enough with all the ugly MSVC stuff.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#86Andres Freund
andres@2ndquadrant.com
In reply to: Alvaro Herrera (#85)
Re: moving from contrib to bin

On 2015-03-11 11:19:24 -0300, Alvaro Herrera wrote:

Andres Freund wrote:

On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

I personally find it quite ugly to use pgxs for stuff in
src/bin. pgxs.mk says:
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
# this file, the rest will be done here.

I think if you s/extension// in the above paragraph, it makes complete
sense to use it for the new src/bin modules.

No. The dependencies here are becoming completely ridiculous:

include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
->
NO_PGXS = 1
include $(top_srcdir)/src/makefiles/pgxs.mk
->
ifndef PGXS
ifndef NO_PGXS
$(error pgxs error: makefile variable PGXS or NO_PGXS must be set)
endif
endif
...
ifdef PGXS
# We assume that we are in src/makefiles/, so top is ...
top_builddir := $(dir $(PGXS))../..
include $(top_builddir)/src/Makefile.global
....

This is just an absurd maze. Not something we should spread even
further. It's bad enough that contrib uses it. But the purportedly
higher quality code (that's why we're moving it, right?) shoulnd't do
these hacks.

I don't object at all to introducing more generic rules for src/bin, but
that seems like a separate task. And one that should be done right not
just use some convenient hack. And you can't tell me that
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
isn't a hack...

Why not? It's the standard procedure for building modules outside the
contrib/ source tree.

NO_PGXS = 1 is? Huh? You probably mean USE_PGXS? That's something
different.

I'm okay with reformulating the makefiles after the move, so that these
modules are built in our standard, simpler makefile conventions. Let's
do that in a followup commit -- then each change is simpler. It's hard
enough with all the ugly MSVC stuff.

-1.

Greetings,

Andres Freund

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#87Peter Eisentraut
peter_e@gmx.net
In reply to: Andres Freund (#83)
Re: moving from contrib to bin

On 3/11/15 10:00 AM, Andres Freund wrote:

On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

I personally find it quite ugly to use pgxs for stuff in
src/bin. pgxs.mk says:
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
# this file, the rest will be done here.

Let's get history straight. pgxs was not initially an external
extension building framework. It was a refactoring of our own internal
makefile rules, because a lot of code under contrib had the same rules
copy-and-pasted. It was only much later that it was rebranded for
external use. It's debatable why it wasn't expanded to also be used in
src/bin/, but I attribute that to a combination of boredom, complicated
special cases under src/bin/, less frequent additions under src/bin/,
and said rebranding -- not because it would have been a bad idea.

You effectively suggest that we are not allowed to use our own code and
propose that we undo that refactoring, and then what? I'll just
resubmit the same patch from 2001 to refactor it again?

I don't object at all to introducing more generic rules for src/bin, but
that seems like a separate task. And one that should be done right not
just use some convenient hack. And you can't tell me that
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
isn't a hack...

Well, that's unfortunate, but I'd rather live with one line of hack for
a while that I can easily fix later, instead of writing completely new
makefiles from scratch. Who is going to want to debug those, by the
way? The turnaround time for makefile changes in this project is one
month per line, because we can't get anything reviewed across all
platforms any faster.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#88Michael Paquier
michael.paquier@gmail.com
In reply to: Peter Eisentraut (#87)
7 attachment(s)
Re: moving from contrib to bin

On Thu, Mar 12, 2015 at 8:50 AM, Peter Eisentraut wrote:

On 3/11/15 10:00 AM, Andres Freund wrote:

On 2015-03-10 22:06:37 -0300, Alvaro Herrera wrote:

I don't think we care one bit whether these modules use pgxs, at least
not currently. If we find any issues later on, it should be an easy fix
anyway.

I personally find it quite ugly to use pgxs for stuff in
src/bin. pgxs.mk says:
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
# this file, the rest will be done here.

Let's get history straight. pgxs was not initially an external
extension building framework. It was a refactoring of our own internal
makefile rules, because a lot of code under contrib had the same rules
copy-and-pasted. It was only much later that it was rebranded for
external use. It's debatable why it wasn't expanded to also be used in
src/bin/, but I attribute that to a combination of boredom, complicated
special cases under src/bin/, less frequent additions under src/bin/,
and said rebranding -- not because it would have been a bad idea.

You effectively suggest that we are not allowed to use our own code and
propose that we undo that refactoring, and then what? I'll just
resubmit the same patch from 2001 to refactor it again?

I don't object at all to introducing more generic rules for src/bin, but
that seems like a separate task. And one that should be done right not
just use some convenient hack. And you can't tell me that
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
isn't a hack...

Well, that's unfortunate, but I'd rather live with one line of hack for
a while that I can easily fix later, instead of writing completely new
makefiles from scratch. Who is going to want to debug those, by the
way? The turnaround time for makefile changes in this project is one
month per line, because we can't get anything reviewed across all
platforms any faster.

Well, TBH, I am on Andres' and Tom's side for this stuff. It feels
that using a PGXS rule like that is a trap for circular dependencies
and I am sure we do not want that. I think as well that we should
involve all the other utilities in src/bin if we do such a
refactoring, so that's definitely a next step, not this one obviously.

Attached is a series of patch rebased on current HEAD, there were some
conflicts after perl-tidying the refactoring patch for MSVC. Note that
this series still uses PGXS in the Makefiles, I am fine to update them
if necessary once this matter is set (already did this stuff upthread
with a previous version).
--
Michael

Attachments:

0001-Move-pg_archivecleanup-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0001-Move-pg_archivecleanup-from-contrib-to-src-bin.patchDownload
From 8c2ff9e47b8047351b503ff82c908199eb31ad6c Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 20:42:28 -0700
Subject: [PATCH 1/7] Move pg_archivecleanup from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_archivecleanup/Makefile                 | 18 ---------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgarchivecleanup.sgml       | 10 +--------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_archivecleanup/.gitignore  |  0
 src/bin/pg_archivecleanup/Makefile                 | 14 ++++++++++++
 .../bin}/pg_archivecleanup/pg_archivecleanup.c     |  2 +-
 src/tools/msvc/Mkvcbuild.pm                        | 26 +++++++++++-----------
 12 files changed, 32 insertions(+), 44 deletions(-)
 delete mode 100644 contrib/pg_archivecleanup/Makefile
 rename doc/src/sgml/{ => ref}/pgarchivecleanup.sgml (97%)
 rename {contrib => src/bin}/pg_archivecleanup/.gitignore (100%)
 create mode 100644 src/bin/pg_archivecleanup/Makefile
 rename {contrib => src/bin}/pg_archivecleanup/pg_archivecleanup.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 195d447..c56050e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -28,7 +28,6 @@ SUBDIRS = \
 		oid2name	\
 		pageinspect	\
 		passwordcheck	\
-		pg_archivecleanup \
 		pg_buffercache	\
 		pg_freespacemap \
 		pg_prewarm	\
diff --git a/contrib/pg_archivecleanup/Makefile b/contrib/pg_archivecleanup/Makefile
deleted file mode 100644
index ab52390..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index a698d0f..f21fa14 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
    part of the core <productname>PostgreSQL</productname> distribution.
   </para>
 
- &pgarchivecleanup;
  &pgstandby;
  &pgtestfsync;
  &pgtesttiming;
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index f03b72a..5e3c34b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -125,7 +125,6 @@
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
 <!ENTITY pgbench         SYSTEM "pgbench.sgml">
-<!ENTITY pgarchivecleanup SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 7aa3128..cbe4611 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -179,6 +179,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY dropuser           SYSTEM "dropuser.sgml">
 <!ENTITY ecpgRef            SYSTEM "ecpg-ref.sgml">
 <!ENTITY initdb             SYSTEM "initdb.sgml">
+<!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
diff --git a/doc/src/sgml/pgarchivecleanup.sgml b/doc/src/sgml/ref/pgarchivecleanup.sgml
similarity index 97%
rename from doc/src/sgml/pgarchivecleanup.sgml
rename to doc/src/sgml/ref/pgarchivecleanup.sgml
index fdf0cbb..779159d 100644
--- a/doc/src/sgml/pgarchivecleanup.sgml
+++ b/doc/src/sgml/ref/pgarchivecleanup.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgarchivecleanup.sgml -->
+<!-- doc/src/sgml/ref/pgarchivecleanup.sgml -->
 
 <refentry id="pgarchivecleanup">
  <indexterm zone="pgarchivecleanup">
@@ -194,14 +194,6 @@ archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>clean
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Simon Riggs <email>simon@2ndquadrant.com</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 10c9a6d..62267db 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -257,6 +257,7 @@
   </partintro>
 
    &initdb;
+   &pgarchivecleanup;
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 90ca1a8..2347076 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,6 +15,7 @@ include $(top_builddir)/src/Makefile.global
 
 SUBDIRS = \
 	initdb \
+	pg_archivecleanup \
 	pg_basebackup \
 	pg_config \
 	pg_controldata \
diff --git a/contrib/pg_archivecleanup/.gitignore b/src/bin/pg_archivecleanup/.gitignore
similarity index 100%
rename from contrib/pg_archivecleanup/.gitignore
rename to src/bin/pg_archivecleanup/.gitignore
diff --git a/src/bin/pg_archivecleanup/Makefile b/src/bin/pg_archivecleanup/Makefile
new file mode 100644
index 0000000..5df86eb
--- /dev/null
+++ b/src/bin/pg_archivecleanup/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_archivecleanup/Makefile
+
+PGFILEDESC = "pg_archivecleanup - cleans archive when used with streaming replication"
+PGAPPICON = win32
+
+subdir = src/bin/pg_archivecleanup
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM = pg_archivecleanup
+OBJS	= pg_archivecleanup.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_archivecleanup/pg_archivecleanup.c b/src/bin/pg_archivecleanup/pg_archivecleanup.c
similarity index 99%
rename from contrib/pg_archivecleanup/pg_archivecleanup.c
rename to src/bin/pg_archivecleanup/pg_archivecleanup.c
index 97225a8..2ff2a27 100644
--- a/contrib/pg_archivecleanup/pg_archivecleanup.c
+++ b/src/bin/pg_archivecleanup/pg_archivecleanup.c
@@ -1,5 +1,5 @@
 /*
- * contrib/pg_archivecleanup/pg_archivecleanup.c
+ * src/bin/pg_archivecleanup/pg_archivecleanup.c
  *
  * pg_archivecleanup.c
  *
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 989a2ec..b00f335 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,17 +34,15 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
+	'oid2name',       'pgbench',
+	'pg_standby',     'pg_test_fsync',
+	'pg_test_timing', 'pg_upgrade',
+	'pg_xlogdump',    'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',      'pgbench',
-	'pg_standby',    'pg_archivecleanup',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'pg_xlogdump',
-	'vacuumlo');
+	'oid2name',       'pgbench',
+	'pg_standby',     'pg_test_fsync',
+	'pg_test_timing', 'pg_upgrade',
+	'pg_xlogdump',    'vacuumlo');
 my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -58,6 +56,8 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'psql');
+my @frontend_uselibpgport = ( 'pg_archivecleanup' );
+my @frontend_uselibpgcommon = ( 'pg_archivecleanup' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
@@ -766,9 +766,9 @@ sub AdjustContribProj
 sub AdjustFrontendProj
 {
 	my $proj = shift;
-	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq, undef,
-		undef, $frontend_extralibs,
-		$frontend_extrasource, $frontend_extraincludes);
+	AdjustModule($proj, $frontend_defines, \@frontend_uselibpq,
+		\@frontend_uselibpgport, \@frontend_uselibpgcommon,
+		$frontend_extralibs, $frontend_extrasource, $frontend_extraincludes);
 }
 
 sub AdjustModule
-- 
2.3.1

0002-Move-pg_xlogdump-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0002-Move-pg_xlogdump-from-contrib-to-src-bin.patchDownload
From 01db6f19c6621c16ca9229dc3c5d1e91446bfa7f Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:24 -0400
Subject: [PATCH 2/7] Move pg_xlogdump from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pg_xlogdump.sgml        |  0
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_xlogdump/.gitignore    |  0
 {contrib => src/bin}/pg_xlogdump/Makefile      | 19 ++++++--------
 {contrib => src/bin}/pg_xlogdump/compat.c      |  2 +-
 {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.c    |  2 +-
 {contrib => src/bin}/pg_xlogdump/rmgrdesc.h    |  2 +-
 src/tools/msvc/Mkvcbuild.pm                    | 36 ++++++++++++--------------
 src/tools/msvc/clean.bat                       |  4 +--
 15 files changed, 34 insertions(+), 39 deletions(-)
 rename doc/src/sgml/{ => ref}/pg_xlogdump.sgml (100%)
 rename {contrib => src/bin}/pg_xlogdump/.gitignore (100%)
 rename {contrib => src/bin}/pg_xlogdump/Makefile (76%)
 rename {contrib => src/bin}/pg_xlogdump/compat.c (98%)
 rename {contrib => src/bin}/pg_xlogdump/pg_xlogdump.c (99%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.c (96%)
 rename {contrib => src/bin}/pg_xlogdump/rmgrdesc.h (91%)

diff --git a/contrib/Makefile b/contrib/Makefile
index c56050e..d9557b8 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -42,7 +42,6 @@ SUBDIRS = \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
-		pg_xlogdump	\
 		postgres_fdw	\
 		seg		\
 		spi		\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index f21fa14..d0e1446 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -206,6 +206,5 @@ pages.
  &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
- &pgxlogdump;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5e3c34b..3b26a70 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -137,7 +137,6 @@
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
-<!ENTITY pgxlogdump      SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index cbe4611..17260b9 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -191,6 +191,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
 <!ENTITY psqlRef            SYSTEM "psql-ref.sgml">
diff --git a/doc/src/sgml/pg_xlogdump.sgml b/doc/src/sgml/ref/pg_xlogdump.sgml
similarity index 100%
rename from doc/src/sgml/pg_xlogdump.sgml
rename to doc/src/sgml/ref/pg_xlogdump.sgml
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 62267db..07c923b 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -261,6 +261,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgxlogdump;
    &postgres;
    &postmaster;
 
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 2347076..469798e 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_xlogdump \
 	psql \
 	scripts
 
diff --git a/contrib/pg_xlogdump/.gitignore b/src/bin/pg_xlogdump/.gitignore
similarity index 100%
rename from contrib/pg_xlogdump/.gitignore
rename to src/bin/pg_xlogdump/.gitignore
diff --git a/contrib/pg_xlogdump/Makefile b/src/bin/pg_xlogdump/Makefile
similarity index 76%
rename from contrib/pg_xlogdump/Makefile
rename to src/bin/pg_xlogdump/Makefile
index 30a8706..ab8597b 100644
--- a/contrib/pg_xlogdump/Makefile
+++ b/src/bin/pg_xlogdump/Makefile
@@ -1,28 +1,25 @@
-# contrib/pg_xlogdump/Makefile
+# src/bin/pg_xlogdump/Makefile
 
 PGFILEDESC = "pg_xlogdump - decode and display WAL"
 PGAPPICON=win32
 
+subdir = src/bin/pg_xlogdump
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pg_xlogdump
 OBJS = pg_xlogdump.o compat.o xlogreader.o rmgrdesc.o \
 	$(RMGRDESCOBJS) $(WIN32RES)
+override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 RMGRDESCSOURCES = $(notdir $(wildcard $(top_srcdir)/src/backend/access/rmgrdesc/*desc.c))
 RMGRDESCOBJS = $(patsubst %.c,%.o,$(RMGRDESCSOURCES))
 
 EXTRA_CLEAN = $(RMGRDESCSOURCES) xlogreader.c
 
-ifdef USE_PGXS
-$(error "pg_xlogdump cannot be built with PGXS")
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
-subdir = contrib/pg_xlogdump
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-
-
-override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
 
 xlogreader.c: % : $(top_srcdir)/src/backend/access/transam/%
 	rm -f $@ && $(LN_S) $< .
diff --git a/contrib/pg_xlogdump/compat.c b/src/bin/pg_xlogdump/compat.c
similarity index 98%
rename from contrib/pg_xlogdump/compat.c
rename to src/bin/pg_xlogdump/compat.c
index 4f5cad6..3d8ce30 100644
--- a/contrib/pg_xlogdump/compat.c
+++ b/src/bin/pg_xlogdump/compat.c
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		contrib/pg_xlogdump/compat.c
+ *		src/bin/pg_xlogdump/compat.c
  *
  * This file contains client-side implementations for various backend
  * functions that the rm_desc functions in *desc.c files rely on.
diff --git a/contrib/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
similarity index 99%
rename from contrib/pg_xlogdump/pg_xlogdump.c
rename to src/bin/pg_xlogdump/pg_xlogdump.c
index 15805be..701ca3b 100644
--- a/contrib/pg_xlogdump/pg_xlogdump.c
+++ b/src/bin/pg_xlogdump/pg_xlogdump.c
@@ -5,7 +5,7 @@
  * Copyright (c) 2013-2015, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *		  contrib/pg_xlogdump/pg_xlogdump.c
+ *		  src/bin/pg_xlogdump/pg_xlogdump.c
  *-------------------------------------------------------------------------
  */
 
diff --git a/contrib/pg_xlogdump/rmgrdesc.c b/src/bin/pg_xlogdump/rmgrdesc.c
similarity index 96%
rename from contrib/pg_xlogdump/rmgrdesc.c
rename to src/bin/pg_xlogdump/rmgrdesc.c
index bd3344c..2205d6e 100644
--- a/contrib/pg_xlogdump/rmgrdesc.c
+++ b/src/bin/pg_xlogdump/rmgrdesc.c
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers definition
  *
- * contrib/pg_xlogdump/rmgrdesc.c
+ * src/bin/pg_xlogdump/rmgrdesc.c
  */
 #define FRONTEND 1
 #include "postgres.h"
diff --git a/contrib/pg_xlogdump/rmgrdesc.h b/src/bin/pg_xlogdump/rmgrdesc.h
similarity index 91%
rename from contrib/pg_xlogdump/rmgrdesc.h
rename to src/bin/pg_xlogdump/rmgrdesc.h
index aec4418..5440f94 100644
--- a/contrib/pg_xlogdump/rmgrdesc.h
+++ b/src/bin/pg_xlogdump/rmgrdesc.h
@@ -3,7 +3,7 @@
  *
  * pg_xlogdump resource managers declaration
  *
- * contrib/pg_xlogdump/rmgrdesc.h
+ * src/bin/pg_xlogdump/rmgrdesc.h
  */
 #ifndef RMGRDESC_H
 #define RMGRDESC_H
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index b00f335..de4c194 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -37,12 +37,12 @@ my @contrib_uselibpgport = (
 	'oid2name',       'pgbench',
 	'pg_standby',     'pg_test_fsync',
 	'pg_test_timing', 'pg_upgrade',
-	'pg_xlogdump',    'vacuumlo');
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
 	'oid2name',       'pgbench',
 	'pg_standby',     'pg_test_fsync',
 	'pg_test_timing', 'pg_upgrade',
-	'pg_xlogdump',    'vacuumlo');
+	'vacuumlo');
 my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -66,7 +66,8 @@ my $frontend_extraincludes = {
 	'initdb' => ['src\timezone'],
 	'psql'   => [ 'src\bin\pg_dump', 'src\backend' ] };
 my $frontend_extrasource = { 'psql' => ['src\bin\psql\psqlscan.l'] };
-my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump', 'scripts');
+my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
+						 'pg_xlogdump','scripts');
 
 sub mkvcbuild
 {
@@ -465,6 +466,19 @@ sub mkvcbuild
 	$pgrestore->AddFile('src\backend\parser\kwlookup.c');
 	$pgrestore->AddLibrary('ws2_32.lib');
 
+	# Get necessary files for pg_xlogdump as files symlinked
+	# on Linux are copied on Windows.
+	my $pgxlogdump = AddSimpleFrontend('pg_xlogdump');
+	$pgxlogdump->AddDefine('FRONTEND');
+	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
+	{
+		my $bf = basename $xf;
+		copy($xf, "src/bin/pg_xlogdump/$bf");
+		$pgxlogdump->AddFile("src\\bin\\pg_xlogdump\\$bf");
+	}
+	copy('src/backend/access/transam/xlogreader.c',
+		 'src/bin/pg_xlogdump/xlogreader.c');
+
 	my $zic = $solution->AddProject('zic', 'exe', 'utils');
 	$zic->AddFiles('src\timezone', 'zic.c', 'ialloc.c', 'scheck.c',
 		'localtime.c');
@@ -622,22 +636,6 @@ sub mkvcbuild
 	$pgregress->AddDirResourceFile('src\test\regress');
 	$pgregress->AddReference($libpgcommon, $libpgport);
 
-	# fix up pg_xlogdump once it's been set up
-	# files symlinked on Unix are copied on windows
-	my $pg_xlogdump =
-	  (grep { $_->{name} eq 'pg_xlogdump' }
-		  @{ $solution->{projects}->{contrib} })[0];
-	$pg_xlogdump->AddDefine('FRONTEND');
-	foreach my $xf (glob('src/backend/access/rmgrdesc/*desc.c'))
-	{
-		my $bf = basename $xf;
-		copy($xf, "contrib/pg_xlogdump/$bf");
-		$pg_xlogdump->AddFile("contrib\\pg_xlogdump\\$bf");
-	}
-	copy(
-		'src/backend/access/transam/xlogreader.c',
-		'contrib/pg_xlogdump/xlogreader.c');
-
 	$solution->Save();
 	return $solution->{vcver};
 }
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index 9c7ea42..c48fb25 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -93,8 +93,8 @@ REM cd contrib
 REM for /r %%f in (*.sql) do if exist %%f.in del %%f
 
 REM clean up files copied into contrib\pg_xlogdump
-if exist contrib\pg_xlogdump\xlogreader.c del /q contrib\pg_xlogdump\xlogreader.c
-for %%f in (contrib\pg_xlogdump\*desc.c) do if not %%f==contrib\pg_xlogdump\rmgrdesc.c del /q %%f
+if exist src\bin\pg_xlogdump\xlogreader.c del /q src\bin\pg_xlogdump\xlogreader.c
+for %%f in (src\bin\pg_xlogdump\*desc.c) do if not %%f==src\bin\pg_xlogdump\rmgrdesc.c del /q %%f
 
 
 cd %D%
-- 
2.3.1

0003-Move-pgbench-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0003-Move-pgbench-from-contrib-to-src-bin.patchDownload
From 9d3085bffe74a0c2f4de1d8d27d383eba20523bf Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 21:10:50 -0700
Subject: [PATCH 3/7] Move pgbench from contrib/ to src/bin/

---
 contrib/Makefile                         |  1 -
 doc/src/sgml/contrib.sgml                |  1 -
 doc/src/sgml/filelist.sgml               |  1 -
 doc/src/sgml/ref/allfiles.sgml           |  1 +
 doc/src/sgml/{ => ref}/pgbench.sgml      |  2 +-
 doc/src/sgml/reference.sgml              |  1 +
 src/bin/Makefile                         |  1 +
 {contrib => src/bin}/pgbench/.gitignore  |  0
 {contrib => src/bin}/pgbench/Makefile    | 18 +++++++-----------
 {contrib => src/bin}/pgbench/exprparse.y |  0
 {contrib => src/bin}/pgbench/exprscan.l  |  0
 {contrib => src/bin}/pgbench/pgbench.c   |  2 +-
 {contrib => src/bin}/pgbench/pgbench.h   |  0
 src/tools/msvc/Mkvcbuild.pm              | 32 ++++++++++++++++----------------
 14 files changed, 28 insertions(+), 32 deletions(-)
 rename doc/src/sgml/{ => ref}/pgbench.sgml (99%)
 rename {contrib => src/bin}/pgbench/.gitignore (100%)
 rename {contrib => src/bin}/pgbench/Makefile (68%)
 rename {contrib => src/bin}/pgbench/exprparse.y (100%)
 rename {contrib => src/bin}/pgbench/exprscan.l (100%)
 rename {contrib => src/bin}/pgbench/pgbench.c (99%)
 rename {contrib => src/bin}/pgbench/pgbench.h (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index d9557b8..bd677d1 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -38,7 +38,6 @@ SUBDIRS = \
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
-		pgbench		\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index d0e1446..577791b 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -187,7 +187,6 @@ pages.
   </para>
 
  &oid2name;
- &pgbench;
  &vacuumlo;
  </sect1>
 
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 3b26a70..5bdde7b 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -124,7 +124,6 @@
 <!ENTITY oid2name        SYSTEM "oid2name.sgml">
 <!ENTITY pageinspect     SYSTEM "pageinspect.sgml">
 <!ENTITY passwordcheck   SYSTEM "passwordcheck.sgml">
-<!ENTITY pgbench         SYSTEM "pgbench.sgml">
 <!ENTITY pgbuffercache   SYSTEM "pgbuffercache.sgml">
 <!ENTITY pgcrypto        SYSTEM "pgcrypto.sgml">
 <!ENTITY pgfreespacemap  SYSTEM "pgfreespacemap.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 17260b9..61462da 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -181,6 +181,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY initdb             SYSTEM "initdb.sgml">
 <!ENTITY pgarchivecleanup   SYSTEM "pgarchivecleanup.sgml">
 <!ENTITY pgBasebackup       SYSTEM "pg_basebackup.sgml">
+<!ENTITY pgbench            SYSTEM "pgbench.sgml">
 <!ENTITY pgConfig           SYSTEM "pg_config-ref.sgml">
 <!ENTITY pgControldata      SYSTEM "pg_controldata.sgml">
 <!ENTITY pgCtl              SYSTEM "pg_ctl-ref.sgml">
diff --git a/doc/src/sgml/pgbench.sgml b/doc/src/sgml/ref/pgbench.sgml
similarity index 99%
rename from doc/src/sgml/pgbench.sgml
rename to doc/src/sgml/ref/pgbench.sgml
index ed12e27..a808546 100644
--- a/doc/src/sgml/pgbench.sgml
+++ b/doc/src/sgml/ref/pgbench.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgbench.sgml -->
+<!-- doc/src/sgml/ref/pgbench.sgml -->
 
 <refentry id="pgbench">
  <indexterm zone="pgbench">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 07c923b..d939d01 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -230,6 +230,7 @@
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
+   &pgbench;
    &pgConfig;
    &pgDump;
    &pgDumpall;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 469798e..3ce7707 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_xlogdump \
+	pgbench \
 	psql \
 	scripts
 
diff --git a/contrib/pgbench/.gitignore b/src/bin/pgbench/.gitignore
similarity index 100%
rename from contrib/pgbench/.gitignore
rename to src/bin/pgbench/.gitignore
diff --git a/contrib/pgbench/Makefile b/src/bin/pgbench/Makefile
similarity index 68%
rename from contrib/pgbench/Makefile
rename to src/bin/pgbench/Makefile
index a18130b..86fd757 100644
--- a/contrib/pgbench/Makefile
+++ b/src/bin/pgbench/Makefile
@@ -1,26 +1,22 @@
-# contrib/pgbench/Makefile
+# src/bin/pgbench/Makefile
 
 PGFILEDESC = "pgbench - a simple program for running benchmark tests"
 PGAPPICON = win32
 
+subdir = src/bin/pgbench
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM = pgbench
 OBJS	= pgbench.o exprparse.o $(WIN32RES)
 
 PG_CPPFLAGS = -I$(libpq_srcdir)
 PG_LIBS = $(libpq_pgport) $(PTHREAD_LIBS)
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pgbench
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 distprep: exprparse.c exprscan.c
-endif
 
 ifneq ($(PORTNAME), win32)
 override CFLAGS += $(PTHREAD_CFLAGS)
diff --git a/contrib/pgbench/exprparse.y b/src/bin/pgbench/exprparse.y
similarity index 100%
rename from contrib/pgbench/exprparse.y
rename to src/bin/pgbench/exprparse.y
diff --git a/contrib/pgbench/exprscan.l b/src/bin/pgbench/exprscan.l
similarity index 100%
rename from contrib/pgbench/exprscan.l
rename to src/bin/pgbench/exprscan.l
diff --git a/contrib/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
similarity index 99%
rename from contrib/pgbench/pgbench.c
rename to src/bin/pgbench/pgbench.c
index 706fdf5..43df747 100644
--- a/contrib/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -4,7 +4,7 @@
  * A simple benchmark program for PostgreSQL
  * Originally written by Tatsuo Ishii and enhanced by many contributors.
  *
- * contrib/pgbench/pgbench.c
+ * src/bin/pgbench/pgbench.c
  * Copyright (c) 2000-2015, PostgreSQL Global Development Group
  * ALL RIGHTS RESERVED;
  *
diff --git a/contrib/pgbench/pgbench.h b/src/bin/pgbench/pgbench.h
similarity index 100%
rename from contrib/pgbench/pgbench.h
rename to src/bin/pgbench/pgbench.h
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index de4c194..0a0469a 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -32,40 +32,40 @@ my $libpq;
 # Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
+  ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',       'pgbench',
-	'pg_standby',     'pg_test_fsync',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',      'pg_standby',
+	'pg_test_fsync', 'pg_test_timing',
+	'pg_upgrade',    'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',       'pgbench',
-	'pg_standby',     'pg_test_fsync',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
-my $contrib_extralibs = { 'pgbench' => ['ws2_32.lib'] };
+	'oid2name',      'pg_standby',
+	'pg_test_fsync', 'pg_test_timing',
+	'pg_upgrade',    'vacuumlo');
+my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
 my $contrib_extrasource = {
 	'cube' => [ 'contrib\cube\cubescan.l', 'contrib\cube\cubeparse.y' ],
-	'pgbench' =>
-	  [ 'contrib\pgbench\exprscan.l', 'contrib\pgbench\exprparse.y' ],
 	'seg' => [ 'contrib\seg\segscan.l', 'contrib\seg\segparse.y' ], };
 my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
-my @frontend_uselibpq = ('pg_ctl', 'psql');
-my @frontend_uselibpgport = ( 'pg_archivecleanup' );
-my @frontend_uselibpgcommon = ( 'pg_archivecleanup' );
+my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
+my @frontend_uselibpgport = ( 'pg_archivecleanup', 'pgbench' );
+my @frontend_uselibpgcommon = ( 'pg_archivecleanup', 'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
+	'pgbench'    => ['ws2_32.lib'],
 	'psql'       => ['ws2_32.lib'] };
 my $frontend_extraincludes = {
 	'initdb' => ['src\timezone'],
 	'psql'   => [ 'src\bin\pg_dump', 'src\backend' ] };
-my $frontend_extrasource = { 'psql' => ['src\bin\psql\psqlscan.l'] };
+my $frontend_extrasource = {
+	'pgbench' => [ 'src\bin\pgbench\exprscan.l',
+				   'src\bin\pgbench\exprparse.y' ],
+	'psql'    => [ 'src\bin\psql\psqlscan.l' ]};
 my @frontend_excludes = ('pgevent', 'pg_basebackup', 'pg_dump',
 						 'pg_xlogdump','scripts');
 
-- 
2.3.1

0004-Move-pg_test_fsync-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0004-Move-pg_test_fsync-from-contrib-to-src-bin.patchDownload
From ad236d6733434ac965b3b792e06f98e9ba90fe19 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 21:32:35 -0700
Subject: [PATCH 4/7] Move pg_test_fsync from contrib/ to src/bin/

---
 contrib/Makefile                                   |  1 -
 contrib/pg_test_fsync/Makefile                     | 18 ------------------
 doc/src/sgml/contrib.sgml                          |  1 -
 doc/src/sgml/filelist.sgml                         |  1 -
 doc/src/sgml/ref/allfiles.sgml                     |  1 +
 doc/src/sgml/{ => ref}/pgtestfsync.sgml            | 10 +---------
 doc/src/sgml/reference.sgml                        |  1 +
 src/bin/Makefile                                   |  1 +
 {contrib => src/bin}/pg_test_fsync/.gitignore      |  0
 src/bin/pg_test_fsync/Makefile                     | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c |  0
 src/tools/msvc/Mkvcbuild.pm                        | 20 ++++++++++++--------
 12 files changed, 30 insertions(+), 38 deletions(-)
 delete mode 100644 contrib/pg_test_fsync/Makefile
 rename doc/src/sgml/{ => ref}/pgtestfsync.sgml (95%)
 rename {contrib => src/bin}/pg_test_fsync/.gitignore (100%)
 create mode 100644 src/bin/pg_test_fsync/Makefile
 rename {contrib => src/bin}/pg_test_fsync/pg_test_fsync.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index bd677d1..ed6ebae 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_fsync	\
 		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile
deleted file mode 100644
index 15afba7..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 577791b..68cbf78 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
   </para>
 
  &pgstandby;
- &pgtestfsync;
  &pgtesttiming;
  &pgupgrade;
  </sect1>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 5bdde7b..c14e737 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtestfsync     SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 61462da..572032c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -192,6 +192,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRecvlogical      SYSTEM "pg_recvlogical.sgml">
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
+<!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/ref/pgtestfsync.sgml
similarity index 95%
rename from doc/src/sgml/pgtestfsync.sgml
rename to doc/src/sgml/ref/pgtestfsync.sgml
index c4b4014..5dcabe4 100644
--- a/doc/src/sgml/pgtestfsync.sgml
+++ b/doc/src/sgml/ref/pgtestfsync.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtestfsync.sgml -->
+<!-- doc/src/sgml/ref/pgtestfsync.sgml -->
 
 <refentry id="pgtestfsync">
  <indexterm zone="pgtestfsync">
@@ -104,14 +104,6 @@
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Bruce Momjian <email>bruce@momjian.us</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index d939d01..be7ca70 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -262,6 +262,7 @@
    &pgControldata;
    &pgCtl;
    &pgResetxlog;
+   &pgtestfsync;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 3ce7707..497f9ee 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -22,6 +22,7 @@ SUBDIRS = \
 	pg_ctl \
 	pg_dump \
 	pg_resetxlog \
+	pg_test_fsync \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_fsync/.gitignore b/src/bin/pg_test_fsync/.gitignore
similarity index 100%
rename from contrib/pg_test_fsync/.gitignore
rename to src/bin/pg_test_fsync/.gitignore
diff --git a/src/bin/pg_test_fsync/Makefile b/src/bin/pg_test_fsync/Makefile
new file mode 100644
index 0000000..e8d1952
--- /dev/null
+++ b/src/bin/pg_test_fsync/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_fsync/Makefile
+
+PGFILEDESC = "pg_test_fsync - test various disk sync methods"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_fsync
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_fsync
+OBJS = pg_test_fsync.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c
similarity index 100%
rename from contrib/pg_test_fsync/pg_test_fsync.c
rename to src/bin/pg_test_fsync/pg_test_fsync.c
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 0a0469a..a915abc 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,13 +34,13 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',      'pg_standby',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'vacuumlo');
+	'oid2name',       'pg_standby',
+	'pg_test_timing', 'pg_upgrade',
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',      'pg_standby',
-	'pg_test_fsync', 'pg_test_timing',
-	'pg_upgrade',    'vacuumlo');
+	'oid2name',       'pg_standby',
+	'pg_test_timing', 'pg_upgrade',
+	'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -52,8 +52,12 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
-my @frontend_uselibpgport = ( 'pg_archivecleanup', 'pgbench' );
-my @frontend_uselibpgcommon = ( 'pg_archivecleanup', 'pgbench' );
+my @frontend_uselibpgport = (
+	'pg_archivecleanup', 'pg_test_fsync',
+	'pgbench' );
+my @frontend_uselibpgcommon = (
+	'pg_archivecleanup', 'pg_test_fsync',
+	'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
-- 
2.3.1

0005-Move-pg_test_timing-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0005-Move-pg_test_timing-from-contrib-to-src-bin.patchDownload
From 6b0cddf42ec8e1a638ccc5c3916991cfe0f65dba Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 21:56:39 -0700
Subject: [PATCH 5/7] Move pg_test_timing from contrib/ to src/bin/

---
 contrib/Makefile                                     |  1 -
 contrib/pg_test_timing/Makefile                      | 18 ------------------
 doc/src/sgml/contrib.sgml                            |  1 -
 doc/src/sgml/filelist.sgml                           |  1 -
 doc/src/sgml/ref/allfiles.sgml                       |  1 +
 doc/src/sgml/{ => ref}/pgtesttiming.sgml             | 10 +---------
 doc/src/sgml/reference.sgml                          |  1 +
 src/bin/Makefile                                     |  1 +
 {contrib => src/bin}/pg_test_timing/.gitignore       |  0
 src/bin/pg_test_timing/Makefile                      | 14 ++++++++++++++
 {contrib => src/bin}/pg_test_timing/pg_test_timing.c |  0
 src/tools/msvc/Mkvcbuild.pm                          | 14 ++++++--------
 12 files changed, 24 insertions(+), 38 deletions(-)
 delete mode 100644 contrib/pg_test_timing/Makefile
 rename doc/src/sgml/{ => ref}/pgtesttiming.sgml (98%)
 rename {contrib => src/bin}/pg_test_timing/.gitignore (100%)
 create mode 100644 src/bin/pg_test_timing/Makefile
 rename {contrib => src/bin}/pg_test_timing/pg_test_timing.c (100%)

diff --git a/contrib/Makefile b/contrib/Makefile
index ed6ebae..60475c4 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -33,7 +33,6 @@ SUBDIRS = \
 		pg_prewarm	\
 		pg_standby	\
 		pg_stat_statements \
-		pg_test_timing	\
 		pg_trgm		\
 		pg_upgrade	\
 		pg_upgrade_support \
diff --git a/contrib/pg_test_timing/Makefile b/contrib/pg_test_timing/Makefile
deleted file mode 100644
index 8b37aa8..0000000
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 68cbf78..885a096 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,7 +202,6 @@ pages.
   </para>
 
  &pgstandby;
- &pgtesttiming;
  &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index c14e737..d6120e3 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -132,7 +132,6 @@
 <!ENTITY pgstandby       SYSTEM "pgstandby.sgml">
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
-<!ENTITY pgtesttiming    SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
 <!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 572032c..39e0244 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -193,6 +193,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgResetxlog        SYSTEM "pg_resetxlog.sgml">
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
+<!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgtesttiming.sgml b/doc/src/sgml/ref/pgtesttiming.sgml
similarity index 98%
rename from doc/src/sgml/pgtesttiming.sgml
rename to doc/src/sgml/ref/pgtesttiming.sgml
index a6ab9b1..d5e231f 100644
--- a/doc/src/sgml/pgtesttiming.sgml
+++ b/doc/src/sgml/ref/pgtesttiming.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgtesttiming.sgml -->
+<!-- doc/src/sgml/ref/pgtesttiming.sgml -->
 
 <refentry id="pgtesttiming">
  <indexterm zone="pgtesttiming">
@@ -291,14 +291,6 @@ Histogram of timing durations:
  </refsect1>
 
  <refsect1>
-  <title>Author</title>
-
-  <para>
-   Ants Aasma <email>ants.aasma@eesti.ee</email>
-  </para>
- </refsect1>
-
- <refsect1>
   <title>See Also</title>
 
   <simplelist type="inline">
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index be7ca70..99bfcda 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -263,6 +263,7 @@
    &pgCtl;
    &pgResetxlog;
    &pgtestfsync;
+   &pgtesttiming;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 497f9ee..253119a 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -23,6 +23,7 @@ SUBDIRS = \
 	pg_dump \
 	pg_resetxlog \
 	pg_test_fsync \
+	pg_test_timing \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_test_timing/.gitignore b/src/bin/pg_test_timing/.gitignore
similarity index 100%
rename from contrib/pg_test_timing/.gitignore
rename to src/bin/pg_test_timing/.gitignore
diff --git a/src/bin/pg_test_timing/Makefile b/src/bin/pg_test_timing/Makefile
new file mode 100644
index 0000000..f96d2e9
--- /dev/null
+++ b/src/bin/pg_test_timing/Makefile
@@ -0,0 +1,14 @@
+# src/bin/pg_test_timing/Makefile
+
+PGFILEDESC = "pg_test_timing - test timing overhead"
+PGAPPICON = win32
+
+subdir = src/bin/pg_test_timing
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
+PROGRAM  = pg_test_timing
+OBJS = pg_test_timing.o $(WIN32RES)
+
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/pg_test_timing/pg_test_timing.c b/src/bin/pg_test_timing/pg_test_timing.c
similarity index 100%
rename from contrib/pg_test_timing/pg_test_timing.c
rename to src/bin/pg_test_timing/pg_test_timing.c
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index a915abc..09ec8b7 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -34,13 +34,11 @@ my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
   ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
-	'oid2name',       'pg_standby',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',   'pg_standby',
+	'pg_upgrade', 'vacuumlo');
 my @contrib_uselibpgcommon = (
-	'oid2name',       'pg_standby',
-	'pg_test_timing', 'pg_upgrade',
-	'vacuumlo');
+	'oid2name',   'pg_standby',
+	'pg_upgrade', 'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -54,10 +52,10 @@ my $frontend_defines = { 'initdb' => 'FRONTEND' };
 my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
 my @frontend_uselibpgport = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pgbench' );
+	'pg_test_timing',    'pgbench' );
 my @frontend_uselibpgcommon = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pgbench' );
+	'pg_test_timing',    'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
-- 
2.3.1

0006-Integrate-pg_upgrade_support-module-into-backend.patchtext/x-diff; charset=US-ASCII; name=0006-Integrate-pg_upgrade_support-module-into-backend.patchDownload
From 23ef0395e1b6efbbb18d7bdbaaee776804bfe584 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 6/7] Integrate pg_upgrade_support module into backend

Previously, these functions were created in a schema "binary_upgrade",
which was deleted after pg_upgrade was finished.  Because we don't want
to keep that schema around permanently, move them to pg_catalog but
rename them with a binary_upgrade_... prefix.

The provided functions are only small wrappers around global variables
that were added specifically for pg_upgrade use, so keeping the module
separate does not create any modularity.

The functions still check that they are only called in binary upgrade
mode, so it is not possible to call these during normal operation.
---
 contrib/Makefile                                   |   1 -
 contrib/pg_upgrade/dump.c                          |   2 +-
 contrib/pg_upgrade/function.c                      | 113 ---------------------
 contrib/pg_upgrade/pg_upgrade.c                    |  27 -----
 contrib/pg_upgrade/pg_upgrade.h                    |   2 -
 contrib/pg_upgrade/test.sh                         |   1 -
 contrib/pg_upgrade_support/Makefile                |  16 ---
 doc/src/sgml/pgupgrade.sgml                        |   5 +-
 src/backend/catalog/heap.c                         |   2 +-
 src/backend/catalog/index.c                        |   2 +-
 src/backend/catalog/pg_enum.c                      |   2 +-
 src/backend/catalog/pg_type.c                      |   2 +-
 src/backend/catalog/toasting.c                     |   2 +-
 src/backend/commands/typecmds.c                    |   2 +-
 src/backend/commands/user.c                        |   2 +-
 src/backend/utils/adt/Makefile                     |   3 +-
 .../backend/utils/adt}/pg_upgrade_support.c        |  45 ++++----
 src/bin/pg_dump/pg_dump.c                          |  18 ++--
 src/bin/pg_dump/pg_dumpall.c                       |   2 +-
 src/include/catalog/pg_proc.h                      |  20 ++++
 20 files changed, 61 insertions(+), 208 deletions(-)
 delete mode 100644 contrib/pg_upgrade_support/Makefile
 rename {contrib/pg_upgrade_support => src/backend/utils/adt}/pg_upgrade_support.c (73%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 60475c4..39e8f1d 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -35,7 +35,6 @@ SUBDIRS = \
 		pg_stat_statements \
 		pg_trgm		\
 		pg_upgrade	\
-		pg_upgrade_support \
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/contrib/pg_upgrade/dump.c b/contrib/pg_upgrade/dump.c
index 941c4bb..906e85f 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/contrib/pg_upgrade/dump.c
@@ -121,7 +121,7 @@ optionally_create_toast_tables(void)
 		for (rowno = 0; rowno < ntups; rowno++)
 		{
 			/* enable auto-oid-numbered TOAST creation if needed */
-			PQclear(executeQueryOrDie(conn, "SELECT binary_upgrade.set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
+			PQclear(executeQueryOrDie(conn, "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%d'::pg_catalog.oid);",
 					OPTIONALLY_CREATE_TOAST_OID));
 
 			/* dummy command that also triggers check for required TOAST table */
diff --git a/contrib/pg_upgrade/function.c b/contrib/pg_upgrade/function.c
index deffe04..d8009d1 100644
--- a/contrib/pg_upgrade/function.c
+++ b/contrib/pg_upgrade/function.c
@@ -13,112 +13,6 @@
 
 #include "access/transam.h"
 
-#define PG_UPGRADE_SUPPORT	"$libdir/pg_upgrade_support"
-
-/*
- * install_support_functions_in_new_db()
- *
- * pg_upgrade requires some support functions that enable it to modify
- * backend behavior.
- */
-void
-install_support_functions_in_new_db(const char *db_name)
-{
-	PGconn	   *conn = connectToServer(&new_cluster, db_name);
-
-	/* suppress NOTICE of dropped objects */
-	PQclear(executeQueryOrDie(conn,
-							  "SET client_min_messages = warning;"));
-	PQclear(executeQueryOrDie(conn,
-						   "DROP SCHEMA IF EXISTS binary_upgrade CASCADE;"));
-	PQclear(executeQueryOrDie(conn,
-							  "RESET client_min_messages;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE SCHEMA binary_upgrade;"));
-
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_array_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_toast_pg_type_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							"binary_upgrade.set_next_heap_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_index_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-						   "binary_upgrade.set_next_toast_pg_class_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_enum_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.set_next_pg_authid_oid(OID) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C STRICT;"));
-	PQclear(executeQueryOrDie(conn,
-							  "CREATE OR REPLACE FUNCTION "
-							  "binary_upgrade.create_empty_extension(text, text, bool, text, oid[], text[], text[]) "
-							  "RETURNS VOID "
-							  "AS '$libdir/pg_upgrade_support' "
-							  "LANGUAGE C;"));
-	PQfinish(conn);
-}
-
-
-void
-uninstall_support_functions_from_new_cluster(void)
-{
-	int			dbnum;
-
-	prep_status("Removing support functions from new cluster");
-
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-		PGconn	   *conn = connectToServer(&new_cluster, new_db->db_name);
-
-		/* suppress NOTICE of dropped objects */
-		PQclear(executeQueryOrDie(conn,
-								  "SET client_min_messages = warning;"));
-		PQclear(executeQueryOrDie(conn,
-								  "DROP SCHEMA binary_upgrade CASCADE;"));
-		PQclear(executeQueryOrDie(conn,
-								  "RESET client_min_messages;"));
-		PQfinish(conn);
-	}
-	check_ok();
-}
-
 
 /*
  * get_loadable_libraries()
@@ -218,8 +112,6 @@ get_loadable_libraries(void)
 	if (found_public_plpython_handler)
 		pg_fatal("Remove the problem functions from the old cluster to continue.\n");
 
-	totaltups++;				/* reserve for pg_upgrade_support */
-
 	/* Allocate what's certainly enough space */
 	os_info.libraries = (char **) pg_malloc(totaltups * sizeof(char *));
 
@@ -228,7 +120,6 @@ get_loadable_libraries(void)
 	 * there probably aren't enough entries to matter.
 	 */
 	totaltups = 0;
-	os_info.libraries[totaltups++] = pg_strdup(PG_UPGRADE_SUPPORT);
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
 	{
@@ -321,10 +212,6 @@ check_loadable_libraries(void)
 		{
 			found = true;
 
-			/* exit and report missing support library with special message */
-			if (strcmp(lib, PG_UPGRADE_SUPPORT) == 0)
-				pg_fatal("The pg_upgrade_support module must be created and installed in the new cluster.\n");
-
 			if (script == NULL && (script = fopen_priv(output_path, "w")) == NULL)
 				pg_fatal("Could not open file \"%s\": %s\n",
 						 output_path, getErrorText(errno));
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c
index ed7de80..1ff01a7 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/contrib/pg_upgrade/pg_upgrade.c
@@ -276,14 +276,6 @@ prepare_new_databases(void)
 	prep_status("Restoring global objects in the new cluster");
 
 	/*
-	 * Install support functions in the global-object restore database to
-	 * preserve pg_authid.oid.  pg_dumpall uses 'template0' as its template
-	 * database so objects we add into 'template1' are not propogated.  They
-	 * are removed on pg_upgrade exit.
-	 */
-	install_support_functions_in_new_db("template1");
-
-	/*
 	 * We have to create the databases first so we can install support
 	 * functions in all the other databases.  Ideally we could create the
 	 * support functions in template1 but pg_dumpall creates database using
@@ -305,23 +297,6 @@ create_new_objects(void)
 {
 	int			dbnum;
 
-	prep_status("Adding support functions to new cluster");
-
-	/*
-	 * Technically, we only need to install these support functions in new
-	 * databases that also exist in the old cluster, but for completeness we
-	 * process all new databases.
-	 */
-	for (dbnum = 0; dbnum < new_cluster.dbarr.ndbs; dbnum++)
-	{
-		DbInfo	   *new_db = &new_cluster.dbarr.dbs[dbnum];
-
-		/* skip db we already installed */
-		if (strcmp(new_db->db_name, "template1") != 0)
-			install_support_functions_in_new_db(new_db->db_name);
-	}
-	check_ok();
-
 	prep_status("Restoring database schemas in the new cluster\n");
 
 	for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
@@ -365,8 +340,6 @@ create_new_objects(void)
 
 	/* regenerate now that we have objects in the databases */
 	get_db_and_rel_infos(&new_cluster);
-
-	uninstall_support_functions_from_new_cluster();
 }
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index 9b873ad..1e88345 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -406,8 +406,6 @@ FILE	   *fopen_priv(const char *path, const char *mode);
 
 /* function.c */
 
-void		install_support_functions_in_new_db(const char *db_name);
-void		uninstall_support_functions_from_new_cluster(void);
 void		get_loadable_libraries(void);
 void		check_loadable_libraries(void);
 
diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh
index 75b6357..2e9f976 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/contrib/pg_upgrade/test.sh
@@ -70,7 +70,6 @@ if [ "$1" = '--install' ]; then
 	libdir=$temp_install/$libdir
 
 	"$MAKE" -s -C ../.. install DESTDIR="$temp_install"
-	"$MAKE" -s -C ../pg_upgrade_support install DESTDIR="$temp_install"
 	"$MAKE" -s -C . install DESTDIR="$temp_install"
 
 	# platform-specific magic to find the shared libraries; see pg_regress.c
diff --git a/contrib/pg_upgrade_support/Makefile b/contrib/pg_upgrade_support/Makefile
deleted file mode 100644
index f7def16..0000000
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/pgupgrade.sgml
index e1cd260..8d70727 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/pgupgrade.sgml
@@ -253,11 +253,10 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade and pg_upgrade_support</title>
+    <title>Install pg_upgrade</title>
 
     <para>
-     Install the <application>pg_upgrade</> binary and
-     <application>pg_upgrade_support</> library in the new PostgreSQL
+     Install the <application>pg_upgrade</> binary in the new PostgreSQL
      installation.
     </para>
    </step>
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5ce4395..eb4f37c 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -76,7 +76,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_heap_pg_class_oid = InvalidOid;
 Oid			binary_upgrade_next_toast_pg_class_oid = InvalidOid;
 
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index f85ed93..197cd52 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -69,7 +69,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_index_pg_class_oid = InvalidOid;
 
 /* state info for validate_index bulkdelete callback */
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index d87090a..c880486 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -31,7 +31,7 @@
 #include "utils/tqual.h"
 
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_enum_oid = InvalidOid;
 
 static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems);
diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c
index d1ed53f..32453c3 100644
--- a/src/backend/catalog/pg_type.c
+++ b/src/backend/catalog/pg_type.c
@@ -36,7 +36,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_type_oid = InvalidOid;
 
 /* ----------------------------------------------------------------
diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c
index d14c33c..c99d353 100644
--- a/src/backend/catalog/toasting.c
+++ b/src/backend/catalog/toasting.c
@@ -32,7 +32,7 @@
 #include "utils/rel.h"
 #include "utils/syscache.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_toast_pg_type_oid = InvalidOid;
 
 static void CheckAndCreateToastTable(Oid relOid, Datum reloptions,
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index 67e2ae2..907ba11 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -80,7 +80,7 @@ typedef struct
 	/* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */
 } RelToCheck;
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_array_pg_type_oid = InvalidOid;
 
 static void makeRangeConstructors(const char *name, Oid namespace,
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 75f1b3c..456c27e 100644
--- a/src/backend/commands/user.c
+++ b/src/backend/commands/user.c
@@ -38,7 +38,7 @@
 #include "utils/timestamp.h"
 #include "utils/tqual.h"
 
-/* Potentially set by contrib/pg_upgrade_support functions */
+/* Potentially set by pg_upgrade_support functions */
 Oid			binary_upgrade_next_pg_authid_oid = InvalidOid;
 
 
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 20e5ff1..1f1bee7 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,7 +25,8 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
 	jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
 	network.o network_gist.o network_selfuncs.o \
 	numeric.o numutils.o oid.o oracle_compat.o \
-	orderedsetaggs.o pg_locale.o pg_lsn.o pgstatfuncs.o \
+	orderedsetaggs.o pg_locale.o pg_lsn.o pg_upgrade_support.o \
+	pgstatfuncs.o \
 	pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
 	rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
 	regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
diff --git a/contrib/pg_upgrade_support/pg_upgrade_support.c b/src/backend/utils/adt/pg_upgrade_support.c
similarity index 73%
rename from contrib/pg_upgrade_support/pg_upgrade_support.c
rename to src/backend/utils/adt/pg_upgrade_support.c
index f477973..d69fa53 100644
--- a/contrib/pg_upgrade_support/pg_upgrade_support.c
+++ b/src/backend/utils/adt/pg_upgrade_support.c
@@ -6,7 +6,7 @@
  *	hacks needed for pg_upgrade.
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade_support/pg_upgrade_support.c
+ *	src/backend/utils/adt/pg_upgrade_support.c
  */
 
 #include "postgres.h"
@@ -19,24 +19,17 @@
 #include "utils/array.h"
 #include "utils/builtins.h"
 
-/* THIS IS USED ONLY FOR PG >= 9.0 */
 
-#ifdef PG_MODULE_MAGIC
-PG_MODULE_MAGIC;
-#endif
+Datum binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS);
+Datum binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS);
 
-PG_FUNCTION_INFO_V1(set_next_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_array_pg_type_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_type_oid);
-
-PG_FUNCTION_INFO_V1(set_next_heap_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_index_pg_class_oid);
-PG_FUNCTION_INFO_V1(set_next_toast_pg_class_oid);
-
-PG_FUNCTION_INFO_V1(set_next_pg_enum_oid);
-PG_FUNCTION_INFO_V1(set_next_pg_authid_oid);
-
-PG_FUNCTION_INFO_V1(create_empty_extension);
 
 #define CHECK_IS_BINARY_UPGRADE 								\
 do { 															\
@@ -47,7 +40,7 @@ do { 															\
 } while (0)
 
 Datum
-set_next_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -58,7 +51,7 @@ set_next_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -69,7 +62,7 @@ set_next_array_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 {
 	Oid			typoid = PG_GETARG_OID(0);
 
@@ -80,7 +73,7 @@ set_next_toast_pg_type_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -91,7 +84,7 @@ set_next_heap_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -102,7 +95,7 @@ set_next_index_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 {
 	Oid			reloid = PG_GETARG_OID(0);
 
@@ -113,7 +106,7 @@ set_next_toast_pg_class_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_enum_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 {
 	Oid			enumoid = PG_GETARG_OID(0);
 
@@ -124,7 +117,7 @@ set_next_pg_enum_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-set_next_pg_authid_oid(PG_FUNCTION_ARGS)
+binary_upgrade_set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 {
 	Oid			authoid = PG_GETARG_OID(0);
 
@@ -134,7 +127,7 @@ set_next_pg_authid_oid(PG_FUNCTION_ARGS)
 }
 
 Datum
-create_empty_extension(PG_FUNCTION_ARGS)
+binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)
 {
 	text	   *extName = PG_GETARG_TEXT_PP(0);
 	text	   *schemaName = PG_GETARG_TEXT_PP(1);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index fdfb431..41d2eec 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3045,7 +3045,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 
 	appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type oid\n");
 	appendPQExpBuffer(upgrade_buffer,
-	 "SELECT binary_upgrade.set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+	 "SELECT pg_catalog.binary_upgrade_set_next_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 					  pg_type_oid);
 
 	/* we only support old >= 8.3 for binary upgrades */
@@ -3064,7 +3064,7 @@ binary_upgrade_set_type_oids_by_type_oid(Archive *fout,
 		appendPQExpBufferStr(upgrade_buffer,
 			   "\n-- For binary upgrade, must preserve pg_type array oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_array_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_array_oid);
 	}
 
@@ -3106,7 +3106,7 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
 
 		appendPQExpBufferStr(upgrade_buffer, "\n-- For binary upgrade, must preserve pg_type toast oid\n");
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_type_oid('%u'::pg_catalog.oid);\n\n",
 						  pg_type_toast_oid);
 
 		toast_set = true;
@@ -3146,7 +3146,7 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 	if (!is_index)
 	{
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 		/* only tables have toast tables, not indexes */
 		if (OidIsValid(pg_class_reltoastrelid))
@@ -3161,18 +3161,18 @@ binary_upgrade_set_pg_class_oids(Archive *fout,
 			 */
 
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_toast_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_class_reltoastrelid);
 
 			/* every toast table has an index */
 			appendPQExpBuffer(upgrade_buffer,
-							  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 							  pg_index_indexrelid);
 		}
 	}
 	else
 		appendPQExpBuffer(upgrade_buffer,
-						  "SELECT binary_upgrade.set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
+						  "SELECT pg_catalog.binary_upgrade_set_next_index_pg_class_oid('%u'::pg_catalog.oid);\n",
 						  pg_class_oid);
 
 	appendPQExpBufferChar(upgrade_buffer, '\n');
@@ -8352,7 +8352,7 @@ dumpExtension(Archive *fout, DumpOptions *dopt, ExtensionInfo *extinfo)
 		appendPQExpBuffer(q, "DROP EXTENSION IF EXISTS %s;\n", qextname);
 
 		appendPQExpBufferStr(q,
-							 "SELECT binary_upgrade.create_empty_extension(");
+							 "SELECT pg_catalog.binary_upgrade_create_empty_extension(");
 		appendStringLiteralAH(q, extinfo->dobj.name, fout);
 		appendPQExpBufferStr(q, ", ");
 		appendStringLiteralAH(q, extinfo->namespace, fout);
@@ -8530,7 +8530,7 @@ dumpEnumType(Archive *fout, DumpOptions *dopt, TypeInfo *tyinfo)
 			if (i == 0)
 				appendPQExpBufferStr(q, "\n-- For binary upgrade, must preserve pg_enum oids\n");
 			appendPQExpBuffer(q,
-							  "SELECT binary_upgrade.set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_enum_oid('%u'::pg_catalog.oid);\n",
 							  enum_oid);
 			appendPQExpBuffer(q, "ALTER TYPE %s.",
 							  fmtId(tyinfo->dobj.namespace->dobj.name));
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 6a7a641..7169ad0 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -781,7 +781,7 @@ dumpRoles(PGconn *conn)
 		{
 			appendPQExpBufferStr(buf, "\n-- For binary upgrade, must preserve pg_authid.oid\n");
 			appendPQExpBuffer(buf,
-							  "SELECT binary_upgrade.set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
+							  "SELECT pg_catalog.binary_upgrade_set_next_pg_authid_oid('%u'::pg_catalog.oid);\n\n",
 							  auth_oid);
 		}
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index b8a3660..c7dd22c 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -5149,6 +5149,26 @@ DESCR("rank of hypothetical row without gaps");
 DATA(insert OID = 3993 ( dense_rank_final	PGNSP PGUID 12 1 0 2276 0 f f f f f f i 2 0 20 "2281 2276" "{2281,2276}" "{i,v}" _null_ _null_	hypothetical_dense_rank_final _null_ _null_ _null_ ));
 DESCR("aggregate final function");
 
+/* pg_upgrade support */
+DATA(insert OID = 3582 ( binary_upgrade_set_next_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3584 ( binary_upgrade_set_next_array_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_array_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3585 ( binary_upgrade_set_next_toast_pg_type_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_type_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3586 ( binary_upgrade_set_next_heap_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_heap_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3587 ( binary_upgrade_set_next_index_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_index_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3588 ( binary_upgrade_set_next_toast_pg_class_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_toast_pg_class_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3589 ( binary_upgrade_set_next_pg_enum_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_enum_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3590 ( binary_upgrade_set_next_pg_authid_oid PGNSP PGUID  12 1 0 0 0 f f f f t f v 1 0 2278 "26" _null_ _null_ _null_ _null_ binary_upgrade_set_next_pg_authid_oid _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+DATA(insert OID = 3591 ( binary_upgrade_create_empty_extension PGNSP PGUID  12 1 0 0 0 f f f f t f v 7 0 2278 "25 25 16 25 1028 1009 1009" _null_ _null_ _null_ _null_ binary_upgrade_create_empty_extension _null_ _null_ _null_ ));
+DESCR("for use by pg_upgrade");
+
 
 /*
  * Symbolic values for provolatile column: these indicate whether the result
-- 
2.3.1

0007-Move-pg_upgrade-from-contrib-to-src-bin.patchtext/x-diff; charset=US-ASCII; name=0007-Move-pg_upgrade-from-contrib-to-src-bin.patchDownload
From b49a6b6799d128981e93f7a6a19ed33d9eec56ca Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 10 Mar 2015 22:33:25 -0400
Subject: [PATCH 7/7] Move pg_upgrade from contrib/ to src/bin/

---
 contrib/Makefile                               |  1 -
 doc/src/sgml/contrib.sgml                      |  1 -
 doc/src/sgml/filelist.sgml                     |  1 -
 doc/src/sgml/ref/allfiles.sgml                 |  1 +
 doc/src/sgml/{ => ref}/pgupgrade.sgml          | 14 +++-----------
 doc/src/sgml/reference.sgml                    |  1 +
 src/bin/Makefile                               |  1 +
 {contrib => src/bin}/pg_upgrade/.gitignore     |  0
 {contrib => src/bin}/pg_upgrade/IMPLEMENTATION |  2 --
 {contrib => src/bin}/pg_upgrade/Makefile       | 18 +++++++-----------
 {contrib => src/bin}/pg_upgrade/TESTING        |  2 --
 {contrib => src/bin}/pg_upgrade/check.c        |  2 +-
 {contrib => src/bin}/pg_upgrade/controldata.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/dump.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/exec.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/file.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/function.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/info.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/option.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/page.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/parallel.c     |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/pg_upgrade.h   |  2 +-
 {contrib => src/bin}/pg_upgrade/relfilenode.c  |  2 +-
 {contrib => src/bin}/pg_upgrade/server.c       |  2 +-
 {contrib => src/bin}/pg_upgrade/tablespace.c   |  2 +-
 {contrib => src/bin}/pg_upgrade/test.sh        |  8 ++++----
 {contrib => src/bin}/pg_upgrade/util.c         |  2 +-
 {contrib => src/bin}/pg_upgrade/version.c      |  2 +-
 src/tools/msvc/Mkvcbuild.pm                    | 14 ++++++++------
 src/tools/msvc/vcregress.pl                    |  6 +++---
 31 files changed, 45 insertions(+), 59 deletions(-)
 rename doc/src/sgml/{ => ref}/pgupgrade.sgml (98%)
 rename {contrib => src/bin}/pg_upgrade/.gitignore (100%)
 rename {contrib => src/bin}/pg_upgrade/IMPLEMENTATION (99%)
 rename {contrib => src/bin}/pg_upgrade/Makefile (79%)
 rename {contrib => src/bin}/pg_upgrade/TESTING (99%)
 rename {contrib => src/bin}/pg_upgrade/check.c (99%)
 rename {contrib => src/bin}/pg_upgrade/controldata.c (99%)
 rename {contrib => src/bin}/pg_upgrade/dump.c (99%)
 rename {contrib => src/bin}/pg_upgrade/exec.c (99%)
 rename {contrib => src/bin}/pg_upgrade/file.c (99%)
 rename {contrib => src/bin}/pg_upgrade/function.c (99%)
 rename {contrib => src/bin}/pg_upgrade/info.c (99%)
 rename {contrib => src/bin}/pg_upgrade/option.c (99%)
 rename {contrib => src/bin}/pg_upgrade/page.c (99%)
 rename {contrib => src/bin}/pg_upgrade/parallel.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.c (99%)
 rename {contrib => src/bin}/pg_upgrade/pg_upgrade.h (99%)
 rename {contrib => src/bin}/pg_upgrade/relfilenode.c (99%)
 rename {contrib => src/bin}/pg_upgrade/server.c (99%)
 rename {contrib => src/bin}/pg_upgrade/tablespace.c (98%)
 rename {contrib => src/bin}/pg_upgrade/test.sh (97%)
 rename {contrib => src/bin}/pg_upgrade/util.c (99%)
 rename {contrib => src/bin}/pg_upgrade/version.c (99%)

diff --git a/contrib/Makefile b/contrib/Makefile
index 39e8f1d..e2c4e27 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -34,7 +34,6 @@ SUBDIRS = \
 		pg_standby	\
 		pg_stat_statements \
 		pg_trgm		\
-		pg_upgrade	\
 		pgcrypto	\
 		pgrowlocks	\
 		pgstattuple	\
diff --git a/doc/src/sgml/contrib.sgml b/doc/src/sgml/contrib.sgml
index 885a096..49a6ce8 100644
--- a/doc/src/sgml/contrib.sgml
+++ b/doc/src/sgml/contrib.sgml
@@ -202,6 +202,5 @@ pages.
   </para>
 
  &pgstandby;
- &pgupgrade;
  </sect1>
 </appendix>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index d6120e3..a240d7e 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -133,7 +133,6 @@
 <!ENTITY pgstatstatements SYSTEM "pgstatstatements.sgml">
 <!ENTITY pgstattuple     SYSTEM "pgstattuple.sgml">
 <!ENTITY pgtrgm          SYSTEM "pgtrgm.sgml">
-<!ENTITY pgupgrade       SYSTEM "pgupgrade.sgml">
 <!ENTITY postgres-fdw    SYSTEM "postgres-fdw.sgml">
 <!ENTITY seg             SYSTEM "seg.sgml">
 <!ENTITY contrib-spi     SYSTEM "contrib-spi.sgml">
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 39e0244..0a35b4c 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -194,6 +194,7 @@ Complete list of usable sgml source files in this directory.
 <!ENTITY pgRestore          SYSTEM "pg_restore.sgml">
 <!ENTITY pgtestfsync        SYSTEM "pgtestfsync.sgml">
 <!ENTITY pgtesttiming       SYSTEM "pgtesttiming.sgml">
+<!ENTITY pgupgrade          SYSTEM "pgupgrade.sgml">
 <!ENTITY pgxlogdump         SYSTEM "pg_xlogdump.sgml">
 <!ENTITY postgres           SYSTEM "postgres-ref.sgml">
 <!ENTITY postmaster         SYSTEM "postmaster.sgml">
diff --git a/doc/src/sgml/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml
similarity index 98%
rename from doc/src/sgml/pgupgrade.sgml
rename to doc/src/sgml/ref/pgupgrade.sgml
index 8d70727..8b3912d 100644
--- a/doc/src/sgml/pgupgrade.sgml
+++ b/doc/src/sgml/ref/pgupgrade.sgml
@@ -1,4 +1,4 @@
-<!-- doc/src/sgml/pgupgrade.sgml -->
+<!-- doc/src/sgml/ref/pgupgrade.sgml -->
 
 <refentry id="pgupgrade">
  <indexterm zone="pgupgrade">
@@ -240,7 +240,8 @@ mv /usr/local/pgsql /usr/local/pgsql.old
     <title>Install the new PostgreSQL binaries</title>
 
     <para>
-     Install the new server's binaries and support files.
+     Install the new server's binaries and support
+     files.  <application>pg_upgrade</> is included in a default installation.
     </para>
 
     <para>
@@ -253,15 +254,6 @@ make prefix=/usr/local/pgsql.new install
    </step>
 
    <step>
-    <title>Install pg_upgrade</title>
-
-    <para>
-     Install the <application>pg_upgrade</> binary in the new PostgreSQL
-     installation.
-    </para>
-   </step>
-
-   <step>
     <title>Initialize the new PostgreSQL cluster</title>
 
     <para>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 99bfcda..e1484f4 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -264,6 +264,7 @@
    &pgResetxlog;
    &pgtestfsync;
    &pgtesttiming;
+   &pgupgrade;
    &pgxlogdump;
    &postgres;
    &postmaster;
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 253119a..47ef00c 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -24,6 +24,7 @@ SUBDIRS = \
 	pg_resetxlog \
 	pg_test_fsync \
 	pg_test_timing \
+	pg_upgrade \
 	pg_xlogdump \
 	pgbench \
 	psql \
diff --git a/contrib/pg_upgrade/.gitignore b/src/bin/pg_upgrade/.gitignore
similarity index 100%
rename from contrib/pg_upgrade/.gitignore
rename to src/bin/pg_upgrade/.gitignore
diff --git a/contrib/pg_upgrade/IMPLEMENTATION b/src/bin/pg_upgrade/IMPLEMENTATION
similarity index 99%
rename from contrib/pg_upgrade/IMPLEMENTATION
rename to src/bin/pg_upgrade/IMPLEMENTATION
index a0cfcf1..9b5ff72 100644
--- a/contrib/pg_upgrade/IMPLEMENTATION
+++ b/src/bin/pg_upgrade/IMPLEMENTATION
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/IMPLEMENTATION
-
 ------------------------------------------------------------------------------
 PG_UPGRADE: IN-PLACE UPGRADES FOR POSTGRESQL
 ------------------------------------------------------------------------------
diff --git a/contrib/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile
similarity index 79%
rename from contrib/pg_upgrade/Makefile
rename to src/bin/pg_upgrade/Makefile
index 87da4b8..c22daa5 100644
--- a/contrib/pg_upgrade/Makefile
+++ b/src/bin/pg_upgrade/Makefile
@@ -1,8 +1,12 @@
-# contrib/pg_upgrade/Makefile
+# src/bin/pg_upgrade/Makefile
 
 PGFILEDESC = "pg_upgrade - an in-place binary upgrade utility"
 PGAPPICON = win32
 
+subdir = src/bin/pg_upgrade
+top_builddir = ../../..
+include $(top_builddir)/src/Makefile.global
+
 PROGRAM  = pg_upgrade
 OBJS = check.o controldata.o dump.o exec.o file.o function.o info.o \
        option.o page.o parallel.o pg_upgrade.o relfilenode.o server.o \
@@ -15,16 +19,8 @@ EXTRA_CLEAN = analyze_new_cluster.sh delete_old_cluster.sh log/ tmp_check/ \
               pg_upgrade_dump_globals.sql \
               pg_upgrade_dump_*.custom pg_upgrade_*.log
 
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/pg_upgrade
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
+NO_PGXS = 1
+include $(top_srcdir)/src/makefiles/pgxs.mk
 
 check: test.sh all
 	MAKE=$(MAKE) bindir=$(bindir) libdir=$(libdir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< --install
diff --git a/contrib/pg_upgrade/TESTING b/src/bin/pg_upgrade/TESTING
similarity index 99%
rename from contrib/pg_upgrade/TESTING
rename to src/bin/pg_upgrade/TESTING
index 359688c..4ecfc57 100644
--- a/contrib/pg_upgrade/TESTING
+++ b/src/bin/pg_upgrade/TESTING
@@ -1,5 +1,3 @@
-contrib/pg_upgrade/TESTING
-
 The most effective way to test pg_upgrade, aside from testing on user
 data, is by upgrading the PostgreSQL regression database.
 
diff --git a/contrib/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
similarity index 99%
rename from contrib/pg_upgrade/check.c
rename to src/bin/pg_upgrade/check.c
index 6a498c3..647bf34 100644
--- a/contrib/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -4,7 +4,7 @@
  *	server checks and output routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/check.c
+ *	src/bin/pg_upgrade/check.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/controldata.c b/src/bin/pg_upgrade/controldata.c
similarity index 99%
rename from contrib/pg_upgrade/controldata.c
rename to src/bin/pg_upgrade/controldata.c
index 0e70b6f..bf53db0 100644
--- a/contrib/pg_upgrade/controldata.c
+++ b/src/bin/pg_upgrade/controldata.c
@@ -4,7 +4,7 @@
  *	controldata functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/controldata.c
+ *	src/bin/pg_upgrade/controldata.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/dump.c b/src/bin/pg_upgrade/dump.c
similarity index 99%
rename from contrib/pg_upgrade/dump.c
rename to src/bin/pg_upgrade/dump.c
index 906e85f..2c20e84 100644
--- a/contrib/pg_upgrade/dump.c
+++ b/src/bin/pg_upgrade/dump.c
@@ -4,7 +4,7 @@
  *	dump functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/dump.c
+ *	src/bin/pg_upgrade/dump.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
similarity index 99%
rename from contrib/pg_upgrade/exec.c
rename to src/bin/pg_upgrade/exec.c
index bf87419..7d31912 100644
--- a/contrib/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -4,7 +4,7 @@
  *	execution functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/exec.c
+ *	src/bin/pg_upgrade/exec.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/file.c b/src/bin/pg_upgrade/file.c
similarity index 99%
rename from contrib/pg_upgrade/file.c
rename to src/bin/pg_upgrade/file.c
index 5a8d17a..79d9390 100644
--- a/contrib/pg_upgrade/file.c
+++ b/src/bin/pg_upgrade/file.c
@@ -4,7 +4,7 @@
  *	file system operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/file.c
+ *	src/bin/pg_upgrade/file.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/function.c b/src/bin/pg_upgrade/function.c
similarity index 99%
rename from contrib/pg_upgrade/function.c
rename to src/bin/pg_upgrade/function.c
index d8009d1..04492a5 100644
--- a/contrib/pg_upgrade/function.c
+++ b/src/bin/pg_upgrade/function.c
@@ -4,7 +4,7 @@
  *	server-side function support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/function.c
+ *	src/bin/pg_upgrade/function.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/info.c b/src/bin/pg_upgrade/info.c
similarity index 99%
rename from contrib/pg_upgrade/info.c
rename to src/bin/pg_upgrade/info.c
index 1254934..c0a5601 100644
--- a/contrib/pg_upgrade/info.c
+++ b/src/bin/pg_upgrade/info.c
@@ -4,7 +4,7 @@
  *	information support functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/info.c
+ *	src/bin/pg_upgrade/info.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/option.c b/src/bin/pg_upgrade/option.c
similarity index 99%
rename from contrib/pg_upgrade/option.c
rename to src/bin/pg_upgrade/option.c
index 9b387be..ce339ce 100644
--- a/contrib/pg_upgrade/option.c
+++ b/src/bin/pg_upgrade/option.c
@@ -4,7 +4,7 @@
  *	options functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/option.c
+ *	src/bin/pg_upgrade/option.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/page.c b/src/bin/pg_upgrade/page.c
similarity index 99%
rename from contrib/pg_upgrade/page.c
rename to src/bin/pg_upgrade/page.c
index 1cfc10f..3f4c697 100644
--- a/contrib/pg_upgrade/page.c
+++ b/src/bin/pg_upgrade/page.c
@@ -4,7 +4,7 @@
  *	per-page conversion operations
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/page.c
+ *	src/bin/pg_upgrade/page.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/parallel.c b/src/bin/pg_upgrade/parallel.c
similarity index 99%
rename from contrib/pg_upgrade/parallel.c
rename to src/bin/pg_upgrade/parallel.c
index 6da9965..c6978b5 100644
--- a/contrib/pg_upgrade/parallel.c
+++ b/src/bin/pg_upgrade/parallel.c
@@ -4,7 +4,7 @@
  *	multi-process support
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/parallel.c
+ *	src/bin/pg_upgrade/parallel.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.c
rename to src/bin/pg_upgrade/pg_upgrade.c
index 1ff01a7..0333a91 100644
--- a/contrib/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -4,7 +4,7 @@
  *	main source file
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.c
+ *	src/bin/pg_upgrade/pg_upgrade.c
  */
 
 /*
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h
similarity index 99%
rename from contrib/pg_upgrade/pg_upgrade.h
rename to src/bin/pg_upgrade/pg_upgrade.h
index 1e88345..fbc9aa1 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/src/bin/pg_upgrade/pg_upgrade.h
@@ -2,7 +2,7 @@
  *	pg_upgrade.h
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/pg_upgrade.h
+ *	src/bin/pg_upgrade/pg_upgrade.h
  */
 
 #include <unistd.h>
diff --git a/contrib/pg_upgrade/relfilenode.c b/src/bin/pg_upgrade/relfilenode.c
similarity index 99%
rename from contrib/pg_upgrade/relfilenode.c
rename to src/bin/pg_upgrade/relfilenode.c
index 423802b..fe05880 100644
--- a/contrib/pg_upgrade/relfilenode.c
+++ b/src/bin/pg_upgrade/relfilenode.c
@@ -4,7 +4,7 @@
  *	relfilenode functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/relfilenode.c
+ *	src/bin/pg_upgrade/relfilenode.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
similarity index 99%
rename from contrib/pg_upgrade/server.c
rename to src/bin/pg_upgrade/server.c
index c5f66f0..8d8e7d7 100644
--- a/contrib/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -4,7 +4,7 @@
  *	database server functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/server.c
+ *	src/bin/pg_upgrade/server.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/tablespace.c b/src/bin/pg_upgrade/tablespace.c
similarity index 98%
rename from contrib/pg_upgrade/tablespace.c
rename to src/bin/pg_upgrade/tablespace.c
index eecdf4b..ce7097e 100644
--- a/contrib/pg_upgrade/tablespace.c
+++ b/src/bin/pg_upgrade/tablespace.c
@@ -4,7 +4,7 @@
  *	tablespace functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/tablespace.c
+ *	src/bin/pg_upgrade/tablespace.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh
similarity index 97%
rename from contrib/pg_upgrade/test.sh
rename to src/bin/pg_upgrade/test.sh
index 2e9f976..0903f30 100644
--- a/contrib/pg_upgrade/test.sh
+++ b/src/bin/pg_upgrade/test.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# contrib/pg_upgrade/test.sh
+# src/bin/pg_upgrade/test.sh
 #
 # Test driver for pg_upgrade.  Initializes a new database cluster,
 # runs the regression tests (to put in some data), runs pg_dumpall,
@@ -21,7 +21,7 @@ unset MAKELEVEL
 # authentication configuration.
 standard_initdb() {
 	"$1" -N
-	../../src/test/regress/pg_regress --config-auth "$PGDATA"
+	../../test/regress/pg_regress --config-auth "$PGDATA"
 }
 
 # Establish how the server will listen for connections
@@ -92,9 +92,9 @@ fi
 
 : ${oldbindir=$bindir}
 
-: ${oldsrc=../..}
+: ${oldsrc=../../..}
 oldsrc=`cd "$oldsrc" && pwd`
-newsrc=`cd ../.. && pwd`
+newsrc=`cd ../../.. && pwd`
 
 PATH=$bindir:$PATH
 export PATH
diff --git a/contrib/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
similarity index 99%
rename from contrib/pg_upgrade/util.c
rename to src/bin/pg_upgrade/util.c
index ce17aa0..2743bc0 100644
--- a/contrib/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -4,7 +4,7 @@
  *	utility functions
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/util.c
+ *	src/bin/pg_upgrade/util.c
  */
 
 #include "postgres_fe.h"
diff --git a/contrib/pg_upgrade/version.c b/src/bin/pg_upgrade/version.c
similarity index 99%
rename from contrib/pg_upgrade/version.c
rename to src/bin/pg_upgrade/version.c
index 4ae9511..e3e7387 100644
--- a/contrib/pg_upgrade/version.c
+++ b/src/bin/pg_upgrade/version.c
@@ -4,7 +4,7 @@
  *	Postgres-version-specific routines
  *
  *	Copyright (c) 2010-2015, PostgreSQL Global Development Group
- *	contrib/pg_upgrade/version.c
+ *	src/bin/pg_upgrade/version.c
  */
 
 #include "postgres_fe.h"
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 09ec8b7..38ea0f3 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -32,13 +32,13 @@ my $libpq;
 # Set of variables for contrib modules
 my $contrib_defines = { 'refint' => 'REFINT_VERBOSE' };
 my @contrib_uselibpq =
-  ('dblink', 'oid2name', 'pg_upgrade', 'postgres_fdw', 'vacuumlo');
+  ('dblink', 'oid2name', 'postgres_fdw', 'vacuumlo');
 my @contrib_uselibpgport = (
 	'oid2name',   'pg_standby',
-	'pg_upgrade', 'vacuumlo');
+	'vacuumlo');
 my @contrib_uselibpgcommon = (
 	'oid2name',   'pg_standby',
-	'pg_upgrade', 'vacuumlo');
+	'vacuumlo');
 my $contrib_extralibs = undef;
 my $contrib_extraincludes =
   { 'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend'] };
@@ -49,13 +49,15 @@ my @contrib_excludes = ('pgcrypto', 'intagg', 'sepgsql');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
-my @frontend_uselibpq = ('pg_ctl', 'pgbench', 'psql');
+my @frontend_uselibpq = ('pg_ctl', 'pg_upgrade', 'pgbench', 'psql');
 my @frontend_uselibpgport = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pg_test_timing',    'pgbench' );
+	'pg_test_timing',    'pg_upgrade',
+	'pgbench' );
 my @frontend_uselibpgcommon = (
 	'pg_archivecleanup', 'pg_test_fsync',
-	'pg_test_timing',    'pgbench' );
+	'pg_test_timing',    'pg_upgrade',
+	'pgbench' );
 my $frontend_extralibs = {
 	'initdb'     => ['ws2_32.lib'],
 	'pg_restore' => ['ws2_32.lib'],
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index bd3dd2c..4812a03 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -269,7 +269,7 @@ sub upgradecheck
 
 	$ENV{PGHOST} = 'localhost';
 	$ENV{PGPORT} ||= 50432;
-	my $tmp_root = "$topdir/contrib/pg_upgrade/tmp_check";
+	my $tmp_root = "$topdir/src/bin/pg_upgrade/tmp_check";
 	(mkdir $tmp_root || die $!) unless -d $tmp_root;
 	my $tmp_install = "$tmp_root/install";
 	print "Setting up temp install\n\n";
@@ -282,7 +282,7 @@ sub upgradecheck
 	$ENV{PATH} = "$bindir;$ENV{PATH}";
 	my $data = "$tmp_root/data";
 	$ENV{PGDATA} = "$data.old";
-	my $logdir = "$topdir/contrib/pg_upgrade/log";
+	my $logdir = "$topdir/src/bin/pg_upgrade/log";
 	(mkdir $logdir || die $!) unless -d $logdir;
 	print "\nRunning initdb on old cluster\n\n";
 	standard_initdb() or exit 1;
@@ -292,7 +292,7 @@ sub upgradecheck
 	installcheck();
 
 	# now we can chdir into the source dir
-	chdir "$topdir/contrib/pg_upgrade";
+	chdir "$topdir/src/bin/pg_upgrade";
 	print "\nDumping old cluster\n\n";
 	system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
 	print "\nStopping old cluster\n\n";
-- 
2.3.1

#89Peter Eisentraut
peter_e@gmx.net
In reply to: Michael Paquier (#88)
Re: moving from contrib to bin

On 3/11/15 8:21 PM, Michael Paquier wrote:

Attached is a series of patch rebased on current HEAD, there were some
conflicts after perl-tidying the refactoring patch for MSVC. Note that
this series still uses PGXS in the Makefiles, I am fine to update them
if necessary once this matter is set (already did this stuff upthread
with a previous version).

OK, here we go. I have committed the pg_archivecleanup move, with a
complete makefile and your Windows help. Let's see how it builds.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#90Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Eisentraut (#89)
Re: moving from contrib to bin

Peter Eisentraut wrote:

On 3/11/15 8:21 PM, Michael Paquier wrote:

Attached is a series of patch rebased on current HEAD, there were some
conflicts after perl-tidying the refactoring patch for MSVC. Note that
this series still uses PGXS in the Makefiles, I am fine to update them
if necessary once this matter is set (already did this stuff upthread
with a previous version).

OK, here we go. I have committed the pg_archivecleanup move, with a
complete makefile and your Windows help. Let's see how it builds.

Hmm, should it appear automatically in babel.pg.org? I don't see it
there yet.

--
�lvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#91Peter Eisentraut
peter_e@gmx.net
In reply to: Alvaro Herrera (#90)
Re: moving from contrib to bin

On 4/12/15 8:00 PM, Alvaro Herrera wrote:

Peter Eisentraut wrote:

On 3/11/15 8:21 PM, Michael Paquier wrote:

Attached is a series of patch rebased on current HEAD, there were some
conflicts after perl-tidying the refactoring patch for MSVC. Note that
this series still uses PGXS in the Makefiles, I am fine to update them
if necessary once this matter is set (already did this stuff upthread
with a previous version).

OK, here we go. I have committed the pg_archivecleanup move, with a
complete makefile and your Windows help. Let's see how it builds.

Hmm, should it appear automatically in babel.pg.org? I don't see it
there yet.

It needs an nls.mk file first. Feel free to add them.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#92Michael Paquier
michael.paquier@gmail.com
In reply to: Peter Eisentraut (#89)
Re: moving from contrib to bin

On Sun, Apr 12, 2015 at 12:36 PM, Peter Eisentraut <peter_e@gmx.net> wrote:

On 3/11/15 8:21 PM, Michael Paquier wrote:

Attached is a series of patch rebased on current HEAD, there were some
conflicts after perl-tidying the refactoring patch for MSVC. Note that
this series still uses PGXS in the Makefiles, I am fine to update them
if necessary once this matter is set (already did this stuff upthread
with a previous version).

OK, here we go. I have committed the pg_archivecleanup move, with a
complete makefile and your Windows help. Let's see how it builds.

All the patches have been committed, finishing the work on this thread.
--
Michael

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#93Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#92)
Re: moving from contrib to bin

Peter, Michael,

On 2015-04-22 16:13:15 +0900, Michael Paquier wrote:

All the patches have been committed, finishing the work on this thread.

Many thanks for that effort!

Andres

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#94Bruce Momjian
bruce@momjian.us
In reply to: Andres Freund (#93)
Re: moving from contrib to bin

On Wed, Apr 22, 2015 at 09:18:40AM +0200, Andres Freund wrote:

Peter, Michael,

On 2015-04-22 16:13:15 +0900, Michael Paquier wrote:

All the patches have been committed, finishing the work on this thread.

Many thanks for that effort!

And pg_upgrade thanks you. ;-)

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers