[PATCH openbmc] Squashed 'yocto-poky/' changes from 7b86c77..c8a4ed9

OpenBMC Patches openbmc-patches at stwcx.xyz
Fri Apr 1 08:20:35 AEDT 2016


From: Patrick Williams <patrick at stwcx.xyz>

b1f23d1 build-appliance-image: Update to jethro head revision
7fe17a2 qemu: Security fix CVE-2016-2198
50700a7 qemu: Security fix CVE-2016-2197
1f0e615 libgcrypt: Security fix CVE-2015-7511
dc5f155 uclibc: Security fix CVE-2016-2225
ef13511 uclibc: Security fix CVE-2016-2224
ae57ea0 libbsd: Security fix CVE-2016-2090
eb9666a glibc: Security fix CVE-2015-7547
5b12268 build-appliance-image: Update to jethro head revision
a3a374a curl: Secuirty fix CVE-2016-0755
f4341a9 curl: Security fix CVE-2016-0754
35f4306 nettle: Security fix CVE-2015-8804
3e8a07b nettle: Security fix CVE-2015-8803 and CVE-2015-8805
5ffc326 socat: Security fix CVE-2016-2217
5cc5f99 libpng: Security fix CVE-2015-8472
21a816c libpng: Security fix CVE-2015-8126
6a0fbfa foomatic-filters: Security fixes CVE-2015-8327
d57aaf7 foomatic-filters: Security fix CVE-2015-8560
941874a build-appliance-image: Update to jethro head revision
d74a3cb cross-localedef-native: add ABI breaking glibc patch
12fae23 build-appliance-image: Update to jethro head revision
67ac9d6 e2fsprogs: Ensure we use the right mke2fs.conf when restoring from sstate
5812fc9 build-appliance-image: Update to jethro head revision
3de2492 ref-manual: Updated host package install requirements CentOS
79de8cf toaster-manual: Updated the "Installation" to have TOASTER_DIR information
a23d262 toaster-manual: Updated instructions for production setup.
b6def81 linux-yocto: Update SRCREV for genericx86* for 4.1, fixes CVE-2016-0728
db0f8ac linux-yocto: Update SRCREV for genericx86* for 3.19, fixes CVE-2016-0728
c8122a0 linux-yocto: Update SRCREV for genericx86* for 3.14, fixes CVE-2016-0728
cdeb241 meta-yocto-bsp: Remove uvesafb (v86d) from generic x86 features
52cd219 yocto-bsp: Set SRCREV meta/machine revisions to AUTOREV
a88d6cb yocto-bsp: Set KTYPE to user selected base branch
4e74b36 yocto-bsp: Avoid duplication of user patches ({{=machine}}-user-patches.scc)
6680773 yocto-bsp: Default kernel version to 4.1 on x86_64
4c075e7 piglit: don't use /tmp to write generated sources to
ee52ac6 gen-lockedsig-cache: fix bad destination path joining
e9f95df linux-yocto: Update SRCREV for qemux86* for 4.1, fixes CVE-2016-0728
e63bab1 linux-yocto: Update SRCREV for qemux86* for 3.19, fixes CVE-2016-0728
64a4920 linux-yocto: Update SRCREV for qemux86* for 3.14, fixes CVE-2016-0728
5b043da libpng12: update URL that no longer exists
655c8a5 libpng: update URL that no longer exists
96fda8c busybox: fix build of last applet
ae037d9 ghostscript: add dependency for pnglibconf.h
26eb877 gcr: Require x11 DISTRO_FEATURE
e632cdb uClibc: enable utmp for shadow compatibility
e8c9613 git: Security fix CVE-2015-7545
108ea6d glibc-locale: fix QA warning
9a88c1d grub: Security fix CVE-2015-8370
443b09a gdk-pixbuf: Security fix CVE-2015-7674
6c91068 librsvg: Security fix CVE-2015-7558
9fd2349 bind: Security fix CVE-2015-8461
5a40d9f bind: Security fix CVE-2015-8000
1bbf183 libxml2: Security fix CVE-2015-8710
2ec6d1d libxml2: Security fix CVE-2015-8241
55aafb5 dpkg: Security fix CVE-2015-0860
029948b tzdata: update to 2016a
2bcf141 tzcode: update to 2016a
cc3a391 kernel-yocto: fix checkout bare-cloned kernel repositories
049be17 libpcre: bug fixes include security
5e94ac7 qemu: Security fix CVE-2015-7295
7ee1828 qemu: Security fix CVE-2016-1568
ca6ec2e qemu: Security fix CVE-2015-8345
b55a677 qemu: Security fix CVE-2015-7512
4922f47 qemu: Security fix CVE-2015-7504
3ec0e95 qemu: Security fix CVE-2015-8504
942ce53 openssl: Security fix CVE-2016-0701
ce8ae1c openssl: Security fix CVE-2015-3197
080e027 tiff: Security fix CVE-2015-8784
c6ae9c1 tiff: Security fix CVE-2015-8781
049b7db bind: CVE-2015-8704 and CVE-2015-8705
d632a92 rpmresolve.c: Fix unfreed pointers that keep DB opened
5b993ed openssh: CVE-2016-1907
27ee5b4 glibc: CVE-2015-8776
a4134af glibc: CVE-2015-9761
e10ec6f glibc: CVE-2015-8779
a5a965d glibc: CVE-2015-8777.patch
2fb7ee2 bitbake: toaster: make runbuilds loop
b9ad87b nativesdk-buildtools-perl-dummy: Bump PR
0a1c63a nativesdk-buildtools-perl-dummy: properly set PACKAGE_ARCH
d4b400e nativesdk-buildtools-perl-dummy: fix rebuilding when SDKMACHINE changes
8c8c4ed Revert "gstreamer1.0-plugins-good.inc: add gudev back to PACKAGECONFIG"
b832202 Revert "gstreamer: Deal with merge conflict which breaks systemd builds"
dd0ba9e build-appliance-image: Update to jethro head revision
325d205 gstreamer: Deal with merge conflict which breaks systemd builds
53b114b build-appliance-image: Update to jethro head revision
02be35d poky.conf: Bump version for 2.0.1 jethro release
f5551f8 ref-manual: Updated the list of supported image types.
aa179ae dev-manual: Added three new wic option descriptions.
20007c8 dev-manual: Added the --overhead-factor wic option description.
2dd7f46 dev-manual: Added the --extra-space wic option description.
81cc737 dev-manual: Added wic --notable option description.
2b1dce5 dev-manual:
a6f5293 kernel/kernel-arch: Explicitly mapping between i386/x86_64 and x86 for kernel ARCH
e79a538 openssh: update to 7.1p2
b171076 devtool: reset: do clean for multiple recipes at once with -a
255115f devtool: sdk-update: fix error checking
3f69105 devtool: sdk-update: fix metadata update step
5ba94af devtool: sdk-update: fix not using updateserver config file option
d03d145 classes/populate_sdk_ext: disable signature warnings
00ff950 classes/populate_sdk_ext: fix cascading from preparation failure
22446c6 scripts/oe-publish-sdk: add missing call to git update-server-info
8597a61 devtool: use cp instead of shutil.copytree
95cc641 buildhistory: fix not recording SDK information
84d48ac recipetool: create: fix error when extracting source to a specified directory
4369329 recipetool: create: detect when specified URL returns a web page
4c3191f recipetool: create: prevent attempting to unpack entire DL_DIR
caca77e recipetool: create: fix do_install handling for makefile-only software
383159e recipetool: create: avoid traceback on fetch error
be40baa recipetool: create: handle https://....git URLs
a897bfd devtool: sdk-update: fix traceback without update server set
9c4b61e classes/populate_sdk_ext: error out of install if buildtools install fails
4c07dd2 gstreamer1.0-plugins-good.inc: add gudev back to PACKAGECONFIG
83b72d8 linux-yocto: Update Genericx86* BSP to 4.1.15 kernel
44639bd libaio: don't disable linking to the system libraries
a0be9bd linux-yocto/4.1: update to v4.1.15
53f0290 libxml2: security fix CVE-2015-5312
f4b0c49 libxml2: security fix CVE-2015-8242
fb409c9 libxml2: security fix CVE-2015-7500
55d097a libxml2: security fix CVE-2015-7499
8e6b2d6 libxml2: security fix CVE-2015-7497
332eb1d libxml2: security fix CVE-2015-7498
cbc4e83 libxml2: security fix CVE-2015-8035
c4b71e1 libxml2: security fix CVE-2015-7942
fdea03d libxml2: security fix CVE-2015-8317
6fc1109 libxml2: security fix CVE-2015-7941
9eb4ce0 openssl: fix for CVE-2015-3195
6880f82 openssl: fix for CVE-2015-3194
7dcaa84 openssl: fix for CVE-2015-3193
435139b logrotate: do not move binary logrotate to /usr/bin
5f49c0a cairo: fix license for cairo-script-interpreter
a29ec81 glibc: Fix ld.so / prelink interface for ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA
b1e980f gcc: Update default Power GCC settings to use secure-plt
ed82690 prelink: Fix various prelink issues on IA32, ARM, and MIPS.
9a620da autotools: Allow recipe-individual configure scripts
f828071 toolchain-scripts.bbclass: unset command_not_found_handle
49858bd devtool: upgrade: fetch remote repository before checking out new revision
d213452 devtool: upgrade: remove erroneous error when not renaming recipe
fec97f6 devtool: upgrade: fix updating PV and SRCREV
3b4f659 devtool: upgrade: fix removing other recipes from workspace on reset
61a7de0 devtool: include do_patch in SRCTREECOVEREDTASKS
82c0072 toolchain-shar-extract.sh: do not allow $ in paths for ext SDK
f181e72 scripts/gen-lockedsig-cache: improve output
4b5d4ca toolchain-shar-extract.sh: proper fix for additional env setup scripts
d2ea8f1 toolchain-shar-relocate: don't assume last state of env_setup_script is good
02ef437 populate_sdk_ext.bbclass: Be more permissive on the name of the buildtools
3653b17 classes/populate_sdk_ext: fail if SDK_ARCH != BUILD_ARCH
8879571 classes/populate_sdk_ext: tweak reporting of workspace exclusion
eeda3c6 classes/populate_sdk_ext: make it clear when SDK installation has failed
dee9fbe classes/populate_sdk_ext: tidy up preparation log file writing
d001d46 classes/license: fix intermittent license collection warning
777451c classes/metadata_scm: fix git errors showing up on non-git repositories
cb0ca72 oeqa/selftest/layerappend: fix test if build directory is not inside COREBASE
8970ad6 oeqa/selftest/devtool: fix test if build directory is not inside COREBASE
4f7fdd0 classes/distrodata: split SRC_URI properly before determining type
3b7df55 uninative.bbclass: Choose the correct loader based on BUILD_ARCH
f3d7c3f openssl: sanity check that the bignum module is present
96b1b5c glibc: Backported a patch to fix glibc's bug(18589)
7aecb57 directfb.inc: force bfd linker for armv7a
75ca2c8 texinfo: don't create dependency on INHERIT variable
02c7b3f package_manager.py: define info_dir and status_file when OPKGLIBDIR isn't the default
003c94f libsdl2: require GLES when building Wayland support
ad6db01 gst-plugins-bad: add PACKAGECONFIGs for voamrwbenc, voaacenc, resindvd
f0d87fe gstreamer1.0-plugins-good: fix PACKAGECONFIG for gudev and add one for v4l2 and libv4l2
35f34a6 gstreamer1.0-plugins-bad: fix dependencies for uvch264 PACKAGECONFIG
3b77e20 gstreamer1.0-plugins-{base,good}: update PACKAGECONFIGs
e2d4412 libunwind: fix build for qemuarm
ef69078 guile, mailx, gcc, opensp, gstreamer1.0-libav, libunwind: disable thumb where it fails for qemuarm
4700e40 icu: force arm mode
743ee04 libxcb: Add a workaround for gcc5 bug on mips
8a3deca bitbake: fetch: use orig localpath when calling orig method
0073b23 yocto-bsp: Typo on the file extension
71dbbcd bsp-guide: Updated the license statement.
41f1026 dev-manual: Correction to the KVM stuff in the runqemu commands.
38e3c6e mega-manual: Added four new figures for GUI example.
b99ec28 poky.ent: Fixed POKYVERSION variable.
c670dc7 yocto-project-qs, ref-manual, poky.ent: CentOS Package updates
b968190 dev-manual: Updated runqemu command options list
1278753 toaster-manual: Removed SDKMACHINE from the json file example.
7b25b70 ref-manual: Updated list of supported distros.
d9423fb ref-manual: Updated the GCC 5 migration section for 2.0
347347a bitbake: lib/bb/utils: improve edit_bblayers_conf() handling of bblayers.conf formatting
5935783 bitbake: lib/bb/utils: fix error in edit_metadata() when deleting first line
7fdad70 rpcbind: Security Advisory - rpcbind - CVE-2015-7236
0cb2fa5 subversion: fix CVE-2015-3187
5b52e9b subversion: fix CVE-2015-3184
59bdde4 linux-firmware: rtl8192cx: Add latest available firmware
8ad2bcc init-install-efi: fix script for gummiboot loader
c3087bd init-install-efi: fix script for eMMC installation
d2bf9fb pulseaudio: Fix HDMI profile selection
0556c58 allarch: Force TARGET_*FLAGS variable values
e683dac libsndfile: fix CVE-2014-9756
092757e libxslt: CVE-2015-7995
dab5555 unzip: rename patch to reflect CVE fix
1753d4a readline: rename patch to contain CVE reference
9dd3422 libarchive: rename patch to reflect CVE
1401976 binutils: Fix octeon3 disassembly patch
a54a0db opkg: add cache filename length fixes
fc45dea build-appliance-image: Update to jethro head revision
e14498b meta-yocto/distro: Updated SANITY_TESTED_DISTROS.
01bba74 meta-yocto/distro: Updated SANITY_TESTED_DISTROS.
e1aa897 build-appliance-image: Update to jethro head revision
96cab33 unzip: CVE-2015-7696, CVE-2015-7697
1b2a942 vte: fix DoS from malicious escape sequence (CVE-2012-2738)
370a291 build-appliance-image: Update to jethro head revision
00911c9 linux-yocto_4.1: Update SRCREV for genericx86*
c86957a glibc: Allow 64 bit atomics for x86
b02c5f6 local.conf.sample: Disable image-prelink by default
1630dbb ref-manual: Applied a correction to the GCC 5 migration 2.0 section.
37677d6 ref-manual: Updated ADT Installer Extras
a79e303 kernel-dev: Added cross-reference to .config information
e03b19b ref-manual: Applied review updates to 2.0 migration section.
a0791c1 bitbake: toasterui: Create per-build logs
290534d bitbake: build/utils: Add BB_TASK_IONICE_LEVEL support
3ebf761 bitbake: cooker: Ensure BB_CONSOLE remains correct over server resets
5b19b71 bitbake: bb/ui: Use getSetVariable command for BB_CONSOLELOG
acc7b4d bitbake: command: Add getSetVariable command
c8051c5 bitbake: bitbake-user-manual: Added new description for BB_TASK_IONICE_LEVEL
183290a bitbake: bitbake-user-manual: Added BBTARGETS variable description.
66d3c35 bitbake: toaster: templates Add meaningful title tags
5724b2a perl: Remove errornous extra path-specs for Module::Build based modules
884cf7a perl: Correct path for vendorlib, vendorarch, sitelib and sitearch
2d0c499 perl: fix Perl5 module builds
24cfcc4 runqemu-export-rootfs: update location of unfsd binary
da386d3 gtk-icon-cache: pass the native libdir to the intercept
63a0311 connman: Move wired-setup to ${datadir}
1c3c76d useradd-staticids.bbclass: Do not require trailing colons
8a0d8ee toaster manual: Updated the set up and use chapter
f19b52c ref-manual: Updates to the 1.8 to 2.0 Migration section.
b73da6b toaster-manual: Added new Toaster functionality descriptions.
947e156 ref-manual: Updated the rootfs*.bbclass description.
62e200e bitbake: toaster: orm Fix restrictive LogMessage message length
78f935d bitbake: toaster: Remove all navigation when not in build mode
c5f147b bitbake: toaster: Run tests in build mode
1d17109 bitbake: toaster: Hide builds for non-cli projects in analysis mode
a580479 bitbake: toaster: Hide top bar buttons in analysis mode
1ec2ec3 bitbake: toaster: Show mode-appropriate landing page
bbac0f0 bitbake: toaster: Add BUILD_MODE flag to context
851f0d8 bitbake: toaster: add get_or_create_targets API
dcd9cd0 bitbake: fetcher: svn: Add support for checkout to a custom path
4ab7202 bitbake: cooker: preserve pre and post configs
fdfdfc8 oeqa/utils/decorators: fix missing keyword arguments on decorators
a2d5b7a classes/gtk-icon-cache: don't pass STAGING_LIBDIR_NATIVE to intercepts
5171329 intercepts/update_icon_cache: use STAGING_DIR_NATIVE from environment
d18d902 lib/oe/rootfs: tell intercepts where the native sysroot is
9336e1f subversion: add explicit dependency on file-replacement-native for native builds
19358d0 rpm: add explicit dependency on file-replacement-native for native builds
698c3de file: don't replace host file when built natively
83a2bde sanity: check that the host has file installed
43c46e9 bitbake: add file-native to ASSUME_PROVIDED
2925cd9 Revert "runqemu-export-rootfs: update location of unfsd binary"
d023d99 populate_sdk_base: Ensure PKGDATA_DIR exists
9b956c4 Perl: Use CC version not $Config(gccversion)
0f75740 wic/utils/oe/misc.py: Preserve PATH when running native tools
273bcb4 mtools_4.0.18.bb: Use create_wrapper() for mcopy
031d464 scripts/oe-pkgdata-util: Fix variable name in error handling
d8d4ce7 Add 850 codepage to uninative-tarball
c1d5e89 e2fsprogs: backport a patch to fix filetype for hardlink
426a9b7 oeqa/selftest: Added testcase decorators.
835525c runqemu-ifup: Check if the tap interface is set up correctly
b13c0be qemurunner: Show the output of runqemu script
9846275 runqemu-internal: Enable support for use virtio devices.
304c956 linux-yocto{, -rt}: Enable support for virtio drivers in qemu machines.
eebcbe1 runqemu: Enable support for kvm without vhost in x86 and x86_64
135d094 prserv.bbclass: remove it since it is null
c509c78 initscripts/sysfs.sh: Mount devtmpfs on /dev/ if needed
022f8cc image-mklibs.bbclass: update i586 TARGET_ARCH test to i*86
d492a70 base.bbclass: considering multilib when setting LICENSE_EXCLUSION
54b7471 gcc-target.inc: Add support for executable thats may have a suffix
0d69a171 cairo: backport fix for compatibility with OpenGL ES 2.0
64b5e3e mesa-demos: fix deadlock in sharedtex_mt
dc8495f bzip2: fix bunzip2 -qt returns 0 for corrupt archives
5bf1430 gnome-desktop: add xkeyboard-config dependency
48443cc gtk+3: Do not try to initialize GL without libgl
59fdbae classes/insane: rename invalid-pkgconfig QA check to invalid-packageconfig
73e1d33 uclibc: Implement syncfs and AT_EMPTY_PATH for all and O_PATH for arm
2e4575d systemd: Fix build with uclibc
40911f4 libtirpc: Fix a bug exposed by uclibc
d90d3e8 libpam: Fix build with uclibc
32c8625 coreutils: Do not use host paths in getloadavg.m4
20b7d87 coreutils-6.9: Add missing dependency on virtual/libiconv
8bb6436 uclibc: Fix build with gcc5
e5e8fce libtirpc: Refresh uclibc patches
fd66dd1 rpcbind: Fix build with uclibc
369c536 scripts/oe-publish-sdk: create directory before making git repo
8a555fe rootfs.py: add more info to the warning message
787253f package signing: automatically export public keys
579e254 package_manager: fail if signed feeds are enabled for ipk or dpkg
835e755 Add new bbclass for package feed signing
822844d sign_rpm.bbclass: make RPM_GPG_NAME a mandatory setting
48d60fc sign_rpm.bbclass: be more verbose in case of error
dbb9af6 package_manager: support GPG_PATH variable
b682fca sign_rpm.bbclass: introduce GPG_PATH variable
8ccbc26 apr: remove conflict with ccache
5e42593 linux-yocto: nf_tables: Add nf_tables feature
1c2fdd9 linux-yocto/3.19: fix ARM boot with gcc5.x
3bab714 linux-yocto: skip kernel meta data branches when finding machine branch
1561d0d kern-tools: avoid duplicate .scc file processing
47dcee2 linux-yocto/4.1: drm/i915: Fix the VBT child device parsing for BSW
380f2c6 linux-yocto: axxia configuration updates
505a826 build-appliance-image: Update to jethro head revision
7d30d67 ref-manual: Updated the allarch class description.
a8674ae ref-manual: Updated the MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS variable
e7c8c79 ref-manual: Added the 1.8 to 2.0 migration section.
cd48ccc dev-manual: Added notes to clarify use of pkg-config
dc9e4cb ref-manual: Added correct class name as part of pkgconfig description
5bc8fa6 ref-manual: Fixed typo in 1.6 migration section for BitBake
2fe3809 ref-manual, dev-manual: Applied feedback to edit several classes
359b7fb ref-manual: Added three PACKAGE_FEED_* variable descriptions
2f4e90c toaster-manual: Updated the json file example bits to be current
66653cb ref-manual: Updated the image-swab.bbclass description
d66cf20 toaster-manual: New section on PREFERRED_VERSION
4b9daa8 ref-manual: Added many new class descriptions.
ae0d508 toaster-manual: Added note for creating virtual environment
98d7d24 toaster-manual: Updates to example toasterconf.json file
b263a3e dev-manual: Added CentOS packages to enable runtime tests on QEMU
9abc72c adt-manual: Fixed PMS typo
2e7d650 ref-manual: Updates to clarify Fetcher URL directory parameters
7facee6 toaster-manual: Updated the section for setting up virtual env.
10970a6 dev-manual: Added package requirements for runtime QEMU testing
acacf6b ref-manual: Added linuxloader.bbclass reference description.
8fc90a7 Makefile: Updated the make file to not create toaster-manual pdf
0889848 dev-manual: Updated devtool build --help example
1944d28 documentation: Updated files to support 2.0 release.
8d2a6f0 toaster-manual: Removed "dizzy" and replaced with "jethro"
3bff581 ref-manual: Added descriptions for 5 new variables and 2 tasks.
a87268e dev-manual: Updated the Marking Packages information.
1c7f462 ref-manual: Added oe-seltest package requirements sections.
3d82046 adt-manual: Updated the build toolchain section with more detail.
54b4aff adt-manual: Updated some hard-coded distro values
196210f dev-manual: Updated the multilib example.
3930f04 ref-manual: Updated the EXCLUDE_FROM_SHLIBS description
0d1c86b ref-manual: Updated EXCLUDE_FROM_SHLIBS description.
eea7521 ref-manual: Updated distrodata.bbclass example
2eaf843 ref-manual: Added new description for PACKAGE_EXCLUDE_COMPLEMENTARY
97298fb dev-manual: Fixed typo in path for wic plugins
05d8101 ref-manual: Added new EXCLUDE_FROM_SHLIB variable
316d432 ref-manual: Added new variable description for SKIP_FILEDEPS
a1b25e6 yocto-project-qs, ref-manual: Replaced "yum" with "dnf"
d284fba ref-manual: Added cross-reference phrase to some variables
5a226f7 dev-manual: Changed multilib example
6ca549f dev-manual: Added note about building out Autotools projects
92b26ad archiver.bbclass: Fixes and improves archiver class for kernel and gcc packages
2d00803 oeqa/selftest: improve config writing and cleanup
1881564 oeqa/selftest/wic: remove numbers from test names
2ac34d2 oeqa/selftest: clean up selftest.inc in teardown
a66ed33 oeqa/selftest/wic: fix cleaning
b67b1a4 oeqa/selftest/wic: corrected testcase decorator for test18_iso_image
e191120 oeqa/selftest: verify that devtool can use plugins in other layers
b8a9728 oeqa/selftest/buildoptions: Use the correct script for cleaning the workdir
94decbc oeqa/selftest/bbtests: Updated bitbake TCs
322c324 oeqa/selftest/bbtests: clean up local DL_DIR/SSTATE_DIR safely
cf311a7 oeqa/utils/ftools: From functions that expect data, check if None
900639c oeqa/utils/ftools: Ignore the exception if file does not exist
2e91cbd oeqa/selftest/manifest.py: Test support for manifests
c9bef34 useradd_base.bbclass: Do not warn without a reason
accb59e qemu: disable Valgrind
ac1bc7d i2c-tools: fix inverted RDEPENDS
35c043b rpm: remove spurious build dependencies
41cbfd7 gcc-5.2: Fix various _FOR_BUILD and related variables
a27da70 sudo: fix file permission for /etc/pam.d/sudo
abeaed9 openssh: fix file permission for /etc/pam.d/sshd
96a5cfd sanity.bbclass: expand warning when chmod fails
409e6e0 populate SDK: prepare calling of bb.utils for exceptions
db55d31 devtool: handle virtual providers
8578bc1 libc-package: Fix localedef multilib dependency issues
0942aff toolchain-shar-extract.sh: print full-length title underline
9630fc1 classes/populate_sdk_ext: detect and warn if running in OE environment
254ff38 classes/populate_sdk_ext: add note to env setup script
9a81ba7 classes/populate_sdk_ext: prevent image construction from executing on install
ec5ec35 classes/populate_sdk_ext: consistent indentation
b8f7042 oeqa/runtime: Fix setUp and tearDown methods
3327401 oetest: Add tearDownLocal class
3b7853a test-empty-image: rename from core-image-empty
5febb1d scripts/gen-lockedsig-cache: fix race with temp file creation
3b5d6ff image-live: make SYSLINUX_ROOT changable in image recipes
5009966 toolchain-shar-extract.sh: provide proper path for env_setup_script
ae7703f classes/base: provide hints on PACKAGECONFIG error
5a02ec2 devtool: extract: fix error handling
3aac110 metadata_scm: rewrite git hash logic
59668f2 linux-yocto-custom: fix typo in Upstream-Status tag
c52dcb0 grub-efi, gummiboot: Emit correct path in startup.nsh
f9d29ab coreutils: fix for native and nativesdk
b1a7405 gcc-4.x: fix wrong warning when using the universal zero initializer {0}
402723e tzdata: reinstate changes reverted in 2014c upgrade
3770461 build-compare: drop PATCHTOOL setting
4846260 common-licenses: use correct GFDL-1.1 license text
a9053ac bitbake: toaster: Add tests for error message display on the build dashboard
2517987 bitbake: toaster: Modify "New build" button behaviour for cli builds project
56d4c84 bitbake: toaster: Clean up template code
d96cedf bitbake: toaster: More linting of tests
7c8877e bitbake: toaster: Show tooltip next to cli builds project name in all builds
7670234 bitbake: toaster: Hide tabs and add info popups for command line builds
da4c614 bitbake: toaster: Make the builds view the project page for "command line builds"
ef6fc2b bitbake: toaster: Replace "Run again" button with help text for cli builds
7467b68 bitbake: toaster: Exclude "command line builds" project from projects typeahead
b5624c7 bitbake: toaster: Show 'not applicable' for default project machine and release
3c4c984 bitbake: toaster: Reorganise and lint tests
3ba43f2 bitbake: fetch2/hg: Include missing errno import
6fa3fec bitbake: cooker: normalize build targets
5effe8f bitbake: toaster: Allow any text input to machine configuration variable
320d05e bitbake: toaster: exit or return depending on the mode
2e2e40c bitbake: toaster: set TOASTER_MANAGED variable
a73895e bitbake: toaster: get rid of SRCFILE
779539c bitbake: toaster: use path to the script to guess config path
eb8b2b9 bitbake: toaster: Guard against builds with no targets
65e8bde bitbake: toaster: Remove Toaster exceptions section of build dashboard
93f0b61 bitbake: toaster: Record critical errors
069a611 bitbake: toaster: Test that exception isn't thrown by project page
026e981 bitbake: toaster: Check whether buildrequest exists before using it
1feeb8e bitbake: toaster: Always run bldcontrol migrations
ae82d77 bitbake: toaster: buildinfohelper Detect command line builds
596c219 bitbake: toaster: Disable add layer button when input is empty
24e5a17 bitbake: toaster: Have 'Version' next to recipe name
c895838 bitbake: toaster: Improve directory structure layout
2f52ef4 bitbake: toaster: importlayer Update property names for importlayer api calls
556c0ea lib/oe/image.py: Fix dependency handling for compressed types
d302c98 bitbake: toaster: Fix missing tooltips from layers on project configuration page
7e5464b bitbake: toaster: Fix broken test case
2e375e6 bitbake: toaster: exclude recipes with empty names
fa3e82d bitbake: toaster: delete recipe if it can't be saved
82675fc bitbake: toaster: Remove project name from latest project builds
6aeaca1 bitbake: toaster: test get_alldeps API
0fb6be0 bitbake: toaster: fix orm tests
dea679a bitbake: toaster: fix NameError
6e0c0fd bitbake: toaster: use get_alldeps in layerdetails renderer
bd2ec77 bitbake: toaster: implement API to get full list of deps
05594f8 bash: Disable custom memory allocator
adbbab7 icu: fix install race
b1d0aab webkitgtk, gcr, libsecret: force ARM mode
67d6500 gtk+3: gtk3-demo needs libgl
f385ed1 lib/oe/distro_check: Remove '_proxy' on dict values used by urllib.open
4bf7b7d cups: fix non-deterministic xinetd behaviour
32dbf71 cronie: clean up bugtracker info
6396d6a irda-utils: clean up bugtracker info
8d5878b screen: fix CVE-2015-6806
acdc2db kbd: provide a workaround for build failures
67959b9 machine/qemu: Fix OpenGL/GLX support with xserver-xorg.
fedff4f busybox.inc: remove redundant @DATADIR@ replacement
78b9d2d insane.bbclass: remove misleading path in warning
8995a30 iptables: only check libnetfilter-conntrack when libnfnetlink is enabled
e35c404 bitbake: toaster: Don't descend into directories for cached_layers
d9528d9 toasterconf: update meta-yocto to jethro and drop dizzy
2d6701f bitbake: toaster: Update JS unit tests
ab896df bitbake: toaster: Fix stale layer state buttons
41a5f82 bitbake: toaster: tables Add the recipe filter back into the Recipe table
2bebcd4 bitbake: toaster: Fix typo in returning pk list of layer versions in current project
d6d680d bitbake: toaster: layerdetails update build recipe button class name
7794b57 bitbake: toaster: Hide "Download build log" button if log doesn't exist
8c69539 bitbake: toaster: fix naming for clone directory
41286f4 bitbake: toaster: buildinfohelper Skip packages we have no build info about
97d0006 bitbake: toaster: buildinfohelper associate build data with built_recipe
0dcc963 bitbake: toaster: remove bashisms so script works in dash as well
8068aa3 bitbake: toaster: get rid of interactivity in bldcontrol
7d7823e bitbake: toaster: check for configuration file and exit if not found
315989c bitbake: toaster: remove layer and build dir interactive questions
489d5ff bitbake: toaster: removed superuser question from startup
c7d1dab bitbake: toaster: orm Machines filter don't pass self in as parameter
dd957fe bitbake: toaster: Rationalise mimetype guessing to fix artifact downloads
ce9011a bitbake: toaster: Use Python's mimetypes module
466bbec bitbake: toaster: display warnings for bad "IMAGE_FSTYPES" values
8b7d846 bitbake: toaster: Set default columns in recipes tables
9daf6ef bitbake: toaster: Comment out broken sorting and filters
b661f53 bitbake: toaster: Don't HTTP cache ToasterTable responses
a3742a0 bitbake: toaster: Don't add new history entries when table data loads
fa68ae0 bitbake: toaster: use meaningful logging levels
bd8b27b bitbake: toaster: ignore ReachableStamps event
ceeb52a linux-yocto: Update SRCREV for genericx86* BSPs
7766265 os-release: fix do_compile() when RPM signing is enabled
9a02df0 readline: actually apply readline63-003 (aka CVE-2014-2524)
a856580 rpm: fix return without value in patch
49bf4b1 Revert "qemu-native: Enable temporary debug info as default."
ad8c021 linux-yocto/4.1: drm/i915 backports
48e5579 oeqa/utils/qemurunner: Add support for Unicode from qemu
1f99452 report-error.bbclass: Support Unicode reports
b25af33 udev: add PROVIDES = "libgudev"
a0d9d2d lib/oe/image.py: Add image generation for companion debug filesystem
8ee9a93 package_manager.py: sort output of OpkgPkgsList().list
37c54af ThunderX: Add initial tune file
a0e7311 tzdata: update to 2015g
931dda4 tzcode: update to 2015g
8cacd22 recipetool: create: fix change in path structure if --extract-to path exists
e961688 devtool: update-recipe: avoid updating patches that have not changed
07fc8c2 oe-selftest: wic: fix LocalSetup
eac61f3 build-appliance-image: Update to jethro head revision
c9bdcf5 oeqa/runexported: Replaced optionparser with argparse.
038ae3f systemd: remove glib-2.0 build dependency
0516cd2 webkitgtk: Add some PACKAGECONFIG options.
dff30d2 fontcache: allow to pass extra parameters and environment to fc-cache
d5ce2f5 webkitgtk: Use ON/OFF for cmake switches.
ebd5035 testimage: Added IO commands to dumps
b73a35e distro-alias.inc: Updated for jethro 2.0 release
b7f9cde build-appliance-image: Update to jethro head revision
cf8ad8d toaster: Special case the openembedded-core layer to avoid duplicates
20b888b build-appliance-image: Update to jethro head revision
8fb5a5a bitbake: bitbake/lib: Update version to 1.28.0
0eca7ff build-appliance-image: Update to jethro head revision
34fede6 poky.conf: Bump version for 2.0 jethro release
a7329e1 Revert "oeqa/runtime: Added one runtime testcase in connman."
c2e78e3 qemu: Drop BROKEN usage
e788961 smart:cache.py: getPackages() matches name + arch
f3e57ba devtool: modify: use correct local files directory name
7cb0765 xuser-account: Take over xuser specific D-Bus policy
cdaa8fd bluez5: Use upstream D-Bus policy
e4a4961 ptest: run-ptest not required to run do_install_ptest
12cd705 distrodata: Take account proxies on distrodata tasks
f047ee8 devtool: update-recipe: enable var history tracking
979de77 lib/oeqa/selftest/yoctobsp: Basic tests for yocto-bsp script
e20d8b8 scripts/lib/bsp/engine: Indent the karch properties when stored into a file
f2933cc yocto-bsp: Update templates to 4.1 kernel
8283a57 scrips/lib/bsp/engine: List properties to stdout when output parameter is omitted
b355a5e scripts/yocto-bsp: Exit successfully when asking for help
ad9ee3d meta-yocto-bsp: bump to linux-yocto 4.1 for the non-x86 BSPs
cdc57f6 bitbake: siggen: Make it clear why nostamp tasks signatures don't match
1630f0a bitbake: runqueue: Add handling of virtual/xxx provider mappings
0b96e6f bitbake: taskdata: Add a function to return the virtual/ mapping data
40fae32 bitbake: cookerdata: Rename BBPKGS -> BBTARGETS
1e467b3 bitbake: bitbake-worker: Guard against multiprocessing corruption of event data
e5b9c2a oeqa/selftest/wic: Use SetupLocal instead of Setup
4266cc9 kernel.bbclass: fix the bug of checking the existing sections in do_strip()
ec1146e linux-yocto_{3.14,3.19,4.1}: qemuarm enable virtio drivers
2ea0e4c runqemu-internal: qemuarm enable usage of virtio devices
a23239a gnome-doc-utils: xslt - don't install Makefiles
f671163 apr-utils: cleanup buildpaths for target stuffs
f68d739 apr: cleanup buildpaths from target stuffs
a7ac905 curl: cleanup buildpaths from curl-config
833bfd3 dropbear: fix key generation when systemd is in use and rootfs is readonly
d592abd image.bbclass: tweak the key location for dropbear when rootfs is readonly
299806d openssh: fix sshd key generation when systemd is in use and rootfs is readonly
006497e image.bbclass: when building a readonly rootfs, tweak ssh settings regardless of init system in use
f1e2515 lttng-tools: Drop KERNELDIR reference
381a7bd meta-ide-support: No need to mark as nostamp anymore
ab9d2bb adt-installer: No need to mark as nostamp
d8ab563 distutils3: Avoid MACHINE specific checksums
a0d6322 gstreamer-omx: Improve variable expansion of ${S}
c71bd57 bitbake.conf: Exclude sstate-outputdirs flag from checksums
f02cbc6 deploy: Mark deploy tasks as MACHINE specific
a0435bf layer.conf: Add SIGGEN exclusion for oprofile kernel dependency
f4a8917 layer.conf: Improve siggen exclusion to handle virtual/libc
6fe4fd2 multilib_global: Add handling of SIGGEN variables for multilib
2c19695 lib/oe/sstate: Add tasks_resolved handler for virtual/xxx mappings
ff17f14 oeqa/selftest/sstatetests: Add test that MACHINE doesn't change target sigs
d822764 meta-selftest: Add qemux86copy machine
6cfc7c0 oeqa/selftest/sstatetests: Add check for same sigs for SDKMACHINE
5dbd061 multilib.conf: Ensure MACHINE doesn't change target sigs
71fdb36 gcc-multilib-config: Ensure SDK_ARCH doesn't change target sigs
c9ea0c6 lib/oe/package_manager: Handle empty package list in opkg case
ec504e0 oeqa/utils/decorators: Append the testname without the full path
8fe5b48 kern-tools: fix multi-layer patch application
b054506 linux-yocto/4.1: braswell bug fixes
c6c093b linux-yocto/4.1: update to 4.1.8 -stable
a502a2d linux-yocto-rt/4.1: integrate axxia BSP
38f0ffa meta: fix build with gettext 0.16.1
56c0fdf hostap-utils: Use C99 stddefs in defining local typedefs
34707c2 linux-yocto-custom: Update for newer kernel
df09a6f oetest: Change logic of a failed test
7a6cb2e cwautomacros: cleanup buildpath in autogen.sh
1222eb1 oeqa/runexported: Fix a problem with ssh_target_log existing in folder.
cb93670 qemurunner: Sanitize output from qemu and qemu pid
ba0f6ca oeqa/testimage: Add ability to run single test from suite.
3e40688 recipes-extended: remove duplicate recipe and .wks
6f2047a runqemu-internal: Make sure two serial ports always exist
385a5e8 cross-canadian.bbclass: big-endian ARM is also gnueabi.
7c96fcf openssl: fix ptest failures
d9ce095 python-async: inherit setuptools
adb6987 util-linux: add runuser PAM config files to fix runuser error
9549f57 oeqa/decorators: Fixed a problem with decorator logs link.
790b6c7 oeqa/selftest/wic: Added testcase decorator to all testcases + fixed minor typos.
ffd4bd6 toolchain-shar-extract: Correct environment-setup script names for multilib
249b810 lsb: add lsbinitscripts and util-linux rdepends
c7548b5 systemd: add PACKAGECONFIG for qrencode
3b04553 opkg: create opkg.lock in /run instead of /var/run
c275627 toolchain-shar-relocate.sh: make it faster
434665d populate_sdk_base: Simplify postprocess commands
5bfcd13 classes/meta: Add DISTRO_FEATURES check for gtk+/gtk3+
5b629a9 devtool: modify: make bitbake use local files from srctree
e9bae50 devtool: better support for local source files
a74fa38 devtool: file mover function that creates target dir
109c09b devtool: update_recipe: refactor patch generation
c976028 devtool: update-recipe: add new patches in correct order
2f8440b oe-selftest: devtool: add method for checking repo status
0a9f59e oe-selftest: devtool: add method for checking srctree repo
afb0142 oe-selftest: devtool: add setup() method
31c3078 oe.patch.GitApplyTree: add paths argument to extractPatches
d5e2dd4 recipeutils: implement get_recipe_local_files()
4bc3f09 bitbake: toaster: move clones into subdirectory
9e1516d bitbake: toaster: make clone directory name unique
552fd83 bitbake: toaster: fix reimporting module
55dc927 bitbake: toaster: fix bug in resetting git repository
6939340 bitbake: toaster: use git reset --hard instead of rebase
3d73dfa bitbake: toaster: don't use --single-branch when cloning
226e7da bitbake: utils: only add layer once in edit_bblayers_conf()
d48b7ef bitbake: toaster: display most recent builds for projects
f902dc6 bitbake: toaster: orm remove the complicated querying on the ORM
fe29297 bitbake: Revert "bitbake: toaster: don't re-create Target objects"
e6d967d bitbake: toaster: buildinfohelper Create a copy of the built layer and recipe
17fe16b bitbake: toaster: tables show all recipes in the layerdetails even duplicates
aed6d2e bitbake: toaster: Prioroitise the layer more generic vcs reference over the sha
922503f bitbake: toaster: Create a relationship between build information and toaster layers
0bc0a44 bitbake: toaster: Special case the openembedded-core layer to avoid duplicates
e68f63a bitbake: toaster: Add test cases for new Image customisation features
d98c771 bitbake: toaster: Add Image customisation frontend feature
37948cc bitbake: toaster: Add ToasterTables for Image customisation feature
a3ff4b2 bitbake: toaster: Add new ReST API for Image Customisation feature
28153ac bitbake: toaster: Fix indentation of jsunittests view
60f3ddb bitbake: toaster: implement decorator for REST responses
a7f43bd bitbake: toaster: add toggle for enabling image customisation feeature
3ff6401 bitbake: toaster: Add CustomImageRecipe model
8948d04 bitbake: toaster: ToasterTable remove unused class definition
c1157cf bitbake: toaster: add nocache option to the ToasterTable widget
1cafc39 bitbake: toaster: widgets ToasterTable Add more info to search field exception
c71bbad bitbake: toaster: widgets ToasterTable add logger to notify when cache hit
934f8d7 bitbake: toaster: create custom layer and recipes for Image customisation
340b398 bitbake: toaster: tables Move the title and name into the widget
e1851fe bitbake: toaster: make a workaround for old style index
f78f902 bitbake: prserv/serv.py: Better messaging when starting/stopping the server with port=0
134b267 bitbake: prserv/serv: Close the DB connection out of class destructor
caf422c multilib: Add TARGET_VENDOR to saved variables list
3af9f06 oeqa/sdk/gcc: Fix makefile test
00f0d2b gdk-pixbuf: Only apply native cleaning in normal task, not setscene
452237b runqemu-export-rootfs: update location of unfsd binary
aa1253f runqemu: don't complain about conflicting machines if they are equal
994915b oeqa/testimage: Remove absolute path to oeqa from json
f8da3b6 iproute2: fix the configure process
218d9f4 gcc-multilib-config: Expand ccargs variable
be13cdb Empty image: core-image-empty recipe
2bbec56 Empty image:rootfs.py:handle empty PACKAGE_INSTALL
4562f3f gstreamer1.0-plugins-bad: change glimagesink rank to marginal
677a463 linux-yocto/4.1: rt update to 4.1.x-rt8
cdd9c4c linux-yocto/4.1: common-pc-drivers: add CONFIG_PATA_SCH
9028d93 ltp: replace 'inline' with 'static inline' for gcc 5.x
5942dfe waffle: Fix build with musl
cfa3ed0 cups: fix pam configuration file's permission
8227d49 busybox: Use CC instead of bare LD to be the Linker
a3c4817 busybox: Use UTMPX instead of legacy UTMP
ea031f0 distrodata: handle recipes with empty or absent SRC_URI in checkpkg()
5cc44fe recipeutils.py: don't hardcode the upstream version as 1.0 when SRC_URI is empty or absent
320500e oeqa/parselogs: Updated log parser whitelist.
adeba9a connman: Don't use a blanket "allow" D-Bus policy
907c8a7 connman: Depend on xuser-account unconditionally
1b146c5 byacc: add missing patch header
5fd3089 sstate: run recipe-provided hooks outside of ${B}
3fb464f oeqa/decorators: Add timestamp to decorator logs.
5f371e5 image types: add hdddirect
ca52ca0 packagegroup-core-standalone-sdk-target: ensure libatomic is in SDK
6d68ba9 glibc/mmc-utils: Rename 'BRANCH' variable to 'SRCBRANCH' for clearness
c5aab3f sanity.bbclass: show warning when chmod fails
5702a19 systemd: apply persistent storage udev rules also for /dev/hd*
cb24cbb rpm: search for gpg if gpg2 is not found
217cccd openssl: Add mapping for nios2
3408d0d qemurunner: Handle qemu start failure correctly
79e3418 gcc-runtime: Add multilib C++ header mapping
09af262 oeqa/oetest: Fix SDK command execution
5d4f39f mulitlib: Ensure SDKTARGETSYSROOT is set correctly
c356961 gtk-icon-cache/pixbufcache: don't set GDK_PIXBUF_MODULEDIR
4a36842 librsvg: tell configure where gdk-pixbuf-query-loaders is
8a12632 gdk-pixbuf: move gdk-pixbuf-query-loaders to $libdir for multilib safety
b070778 gdk-pixbuf: move gdk-pixbuf-pixdata to gdk-pixbuf-dev
7fb583a multilib: Drop populate_sdk variable manipulation
eb7b1a5 package_manager.py: make rpm install mutilib pkgs corectly
5a51fb2 bitbake: prserv/serv: Start/Stop daemon using ip instead of host
2687b24 gdk-pixbuf: Avoid rebuild failures
94184a0 systemd: fix tmpfiles location when multilib in use
179ee77 p11-kit: configure without trust-paths
c7624b4 oe-pkgdata-util: avoid returning skipped packages
dd11f5c toolchain-shar-extract.sh: remove checkbashism
99fc786 archiver: stamp-base is dead, remove it
ce7bc12 gcc-shared-source: Set empty SRC_URI
47ef201 libgcc.inc: package baremetal multilib libraries
aff7e72 meta-selftest: add error recipe and error-image
261e68c libksba: fix pkgconfig patch
3235a64 systemd: disable problematic GCC 5.2 optimizations
6e7ed5e Revert "systemd: disable problematic GCC 5.2 optimizations"
9673278 oeqa/selftest/archiver: Test that archiver filters on recipe name
6807327 oeqa/utils/dump: Add default commands and directory
5d31e94 webkitgtk: add REQUIRED_DISTRO_FEATURES
8733b53 oeqa/runexported: Removed DEPLOY_DIR as mandatory.
f1e7fb0 oeqa/oetest: Remove bb as requirement for oetest.
d70c5cb gcc-5.2: disable isl
66dca4b kmod: Change SRCREV to fix return code in error path
61e77c7 oeqa/runtime/parselogs.py: Fix dmesg log retrieve in sato
dd26efb insane.bbclass: make package_qa_clean_path return a relative path
bdbd8b4 devtool: upgrade: use shutil.move instead of os.rename
346784b devtool: runqemu: avoid recipe parse
85d8b4a devtool: second fix for running from a different directory
6363a95 guile: cleanup buildpaths and add RDEPENDS on pkgconfig
6d1447b gmp: Use __gnu_inline__ attribute in 4.2.1
42dc902 pseudo_1.7.4.bb: fix f*open()
9f66aa1 bitbake: toaster: start script warning text formatting small improvement
c6eaef0 bitbake: tinfoil: remove logging handler at shutdown
fb26ea3 bitbake: toaster: remove time from builds in progress
15b482b bitbake: toaster: Add fake entry to Target_File for filesystem root
767fe69 bitbake: toaster: layerdetails Fix back button tab behaviour
4c0320f bitbake: toaster: UI test improvements
4c5af77 bitbake: toaster: support selenium testing from mac OS X
e6c4970 bitbake: toaster: add 2 UI tests
f6a70ad bitbake: toaster: change UI to show tasks
08000eb bitbake: toaster: don't re-create Target objects
ea37358 bitbake: toaster: store task name in Target objects
524ddd8 oeqa/utils/qemurunner.py: Remove duplicate message on LoggingThread start
376ce71 oeqa/utils/qemurunner.py: Fix HIGH CPU usage on LoggingThread
6c0066c devtool: add search command
0613301 devtool: add basic means of running runqemu within the extensible SDK
c4181c6 devtool / recipetool: add handling for binary-only packages
76084cd devtool: build-image: delete bbappend at end of build
ef197f9 devtool: build-image: improve image recipe handling
8f67bb7 devtool: build-image: tell user where to find output files
afb9340 devtool: build-image: fix recipe/package terminology
d736518 devtool: add: move important "recipe created" message to the end
3bd0f33 devtool: add: set up fetched source as a git repository by default
e759b0b devtool: better handling for recipes that don't unpack source
a34f733 devtool: fix extracting source for work-shared recipes
5bc437b devtool: show proper error when extracting source for recipes with disabled unpack task
210d959 recipetool: create: fix handling of URIs containing #
a35ad72 recipetool: create: fix creating empty shell functions
30c7e7a devtool: add: properly handle separate build directory
99fc284 devtool / lib/oe/recipeutils: ensure we can parse without bbappends
5d1a117 devtool: add: ensure --color=never turns off recipetool colour output
ae788fb devtool: check that source tree still exists
99cd79d scripts/contrib: add devtool stress tester
e0b9a96 lib/oe/patch: fix for git am not cleaning up after itself
8fb70c6 classes/externalsrc: fix setting of deps varflag as a string
586291f classes/externalsrc: scale back warning to a plain note
72810f9 toolchain-shar-extract.sh: show progress when extracting SDK
0dc9299 classes/populate_sdk_ext: drop work-config.inc
3a08728 classes/populate_sdk_ext: allow custom configuration for extensible SDK
b853dde classes/populate_sdk_ext: fix missing environment settings if running installer with sh
374e1fe lib/oe/recipeutils: properly split unexpanded variable values
7fb3fb9 linux-yocto/4.1: hid, bluetooth, aufs and yaffs2 updates
9241ec5 image_types.bbclass: Don't try to create ubi symlink twice
266e417 oeqa/selftest: buildoptions.py Removed unused imports
329d09f systemd: disable problematic GCC 5.2 optimizations
554c817 libgpg-error: Add support for nios2
84e1100 pixman: Fix missing FE_DIVBYZERO on nios2
9baffc1 libtool: Fix nios2 support
ba1e0ee linux-yocto: depend on libgcc for nios2
8efff24 kernel-arch: Add nios2 to valid archs
4d9af35 siteinfo: Add nios2-linux
76a8c74 insane: Add nios2 support
6adffd0 autotools: fix traversal bug in aclocal copying
6a02bbd python3-debugger: Adds pkgutils dependency to pdb
a7dd758 python3-debugger: fix importlib dependency
0e5a911 libsdl: depends on libglu when both x11 and opengl
d762ea1 lttng-tools: sessiond: disable: match app event by name
c8a7d76 testimage.bbclass: Fix break introduced with SIGTERM handling
7d166a6 sysstat: Include needed headers explicitly
d36384e connman: Fix build with musl
0df9b98 quota: Replace using -I= with STAGING_INCDIR
433a7a0 opkg: Include stdio.h for FILE definition
5aadabf syslinux: Dont bypass gcc driver for dependency generation options
05b9a0c gnu-efi, syslinux: Support gcc < 4.7
cdfd96e gummiboot: Fix build warnings seen with gcc5
0141652 qt4: Fix kmap2qmap build with clang
6b73a05 xz: Correctly specify GPL-3.0 with autoconf exception
a96069d insane.bbclass: drop extra line-feed in pkgname check
10fb575 insane.bbclass: show PN and relative path in package_qa_check_host_user
5624889 package.bbclass: add summary line to installed-vs-shipped QA check
d6e40e8 initramfs-framework: better error reporting for invalid root boot parameter
288a9ff initramfs-framework: fix "support dropping into shell on failure"
5ff7e8d qt4: remove already merged patch
9578b09 gdk-pixbuf: remove redundant libx11 DEPENDS line
fe70aa4 runqemu-internal: For qemumicroblaze use the QEMU provided device tree
9aaf7e3 runqemu-internal: Fix qemu networking for qemuzynq an qemumicroblaze
be493ba libpcre: Allow building 16 and 32bit libpcre versions
f32a6e1 oe-git-proxy: Allow socks4 as protocol in $ALL_PROXY
18309f0 oe-git-proxy: Correct the parsing of a port in $ALL_PROXY
c035f35 oe-git-proxy: Allow explicit IP addresses in $NO_PROXY
bbe06b4 oeqa/testimage: Enhance -v switch in testimage
e0b38f2 wic-image-minimal: add dependency to .wks
dd7726f wic: fix partition size calculation
219d73a wic: use ext4 in wic-image-minimal.wks
ce2cb45 wic: add dependencies to wic-image-minimal recipe
a66f586 testimage.bbclass: Don't require an image manifest
39c11d8 gstreamer1.0: Fix basesink drop buffer error
5f13793 grep: fix install if bindir == base_bindir
b17c02f gzip: fix install if bindir == base_bindir
b6f8ea1 cpio: fix install if bindir == base_bindir
fe0cdab tar: fix install if bindir == base_bindir
c6b52f3 bind: fix too long error from gen
81d65df ccache: fix file name too long
cdbe5c9 bitbake.conf: update APACHE_MIRROR
12772c8 linux-yocto/4.1: hid-core: Avoid uninitialized buffer access
88b11e6 kern-tools: optimize patching peformance
0864782 linux-yocto/4.1: aufs, yaffs2 and driver fixes

git-subtree-dir: yocto-poky
git-subtree-split: c8a4ed9a63de6124c8a3cceb80c7db48f12f7aea
---
 bitbake/bin/bitbake                                |    2 +-
 bitbake/bin/bitbake-worker                         |    9 +
 bitbake/bin/toaster                                |  102 +-
 .../bitbake-user-manual-ref-variables.xml          |   59 +
 bitbake/lib/bb/__init__.py                         |    2 +-
 bitbake/lib/bb/build.py                            |    7 +
 bitbake/lib/bb/command.py                          |   10 +
 bitbake/lib/bb/cooker.py                           |   32 +-
 bitbake/lib/bb/cookerdata.py                       |    6 +-
 bitbake/lib/bb/fetch2/__init__.py                  |    2 +-
 bitbake/lib/bb/fetch2/hg.py                        |    1 +
 bitbake/lib/bb/fetch2/svn.py                       |    9 +-
 bitbake/lib/bb/main.py                             |    7 +
 bitbake/lib/bb/runqueue.py                         |    9 +
 bitbake/lib/bb/siggen.py                           |   10 +-
 bitbake/lib/bb/taskdata.py                         |   12 +
 bitbake/lib/bb/tests/utils.py                      |  203 ++
 bitbake/lib/bb/tinfoil.py                          |    9 +-
 bitbake/lib/bb/ui/buildinfohelper.py               |  229 ++-
 bitbake/lib/bb/ui/knotty.py                        |    2 +-
 bitbake/lib/bb/ui/toasterui.py                     |  127 +-
 bitbake/lib/bb/utils.py                            |  105 +-
 bitbake/lib/prserv/db.py                           |    2 +-
 bitbake/lib/prserv/serv.py                         |   38 +-
 .../toaster/bldcontrol/localhostbecontroller.py    |   97 +-
 .../management/commands/checksettings.py           |  138 +-
 .../bldcontrol/management/commands/runbuilds.py    |   15 +-
 .../0009_auto__add_field_brlayer_layer_version.py  |  180 ++
 bitbake/lib/toaster/bldcontrol/models.py           |   37 +-
 .../tts/toasteruitest/toaster_automation_test.py   |  275 ++-
 .../contrib/tts/toasteruitest/toaster_test.cfg     |    6 +-
 ...e__add_unique_customimagerecipe_name_project.py |  375 ++++
 .../0028_auto__chg_field_logmessage_message.py     |  345 ++++
 bitbake/lib/toaster/orm/models.py                  |  155 +-
 bitbake/lib/toaster/orm/tests.py                   |   53 +-
 .../lib/toaster/toastergui/static/css/default.css  |    9 +
 bitbake/lib/toaster/toastergui/static/js/base.js   |   18 +-
 .../toaster/toastergui/static/js/customrecipe.js   |   50 +
 .../toaster/toastergui/static/js/importlayer.js    |   13 +-
 .../toastergui/static/js/jquery.treetable.js       |    2 +-
 .../lib/toaster/toastergui/static/js/layerBtn.js   |   18 +-
 .../toaster/toastergui/static/js/layerdetails.js   |   32 +-
 .../toaster/toastergui/static/js/newcustomimage.js |   49 +
 .../toaster/toastergui/static/js/projectpage.js    |   31 +-
 bitbake/lib/toaster/toastergui/static/js/table.js  |   16 +-
 .../lib/toaster/toastergui/static/js/tests/test.js |   34 +-
 bitbake/lib/toaster/toastergui/tables.py           |  247 ++-
 bitbake/lib/toaster/toastergui/templates/base.html |  118 +-
 .../toastergui/templates/baseprojectpage.html      |   10 +-
 .../lib/toaster/toastergui/templates/bpackage.html |    1 +
 .../toastergui/templates/builddashboard.html       |   52 +-
 .../lib/toaster/toastergui/templates/builds.html   |   32 +-
 .../toastergui/templates/configuration.html        |    1 +
 .../toaster/toastergui/templates/configvars.html   |    1 +
 .../toastergui/templates/customise_btn.html        |    9 +
 .../toaster/toastergui/templates/customrecipe.html |  142 ++
 .../lib/toaster/toastergui/templates/dirinfo.html  |   19 +-
 .../toaster/toastergui/templates/importlayer.html  |    1 +
 .../toastergui/templates/js-unit-tests.html        |   16 +-
 .../lib/toaster/toastergui/templates/landing.html  |  104 +-
 .../toastergui/templates/landing_not_managed.html  |    2 +
 .../toaster/toastergui/templates/layer_btn.html    |   12 +-
 .../toaster/toastergui/templates/layerdetails.html |    1 +
 .../toaster/toastergui/templates/mrb_section.html  |  105 +-
 .../toastergui/templates/newcustomimage.html       |   54 +
 .../toaster/toastergui/templates/newproject.html   |    3 +
 .../toastergui/templates/package_detail_base.html  |   11 +-
 .../templates/package_included_dependencies.html   |    4 +-
 .../templates/package_included_detail.html         |    4 +-
 .../package_included_reverse_dependencies.html     |    4 +-
 .../toastergui/templates/pkg_add_rm_btn.html       |   16 +
 .../lib/toaster/toastergui/templates/project.html  |    3 +-
 .../toastergui/templates/projectbuilds.html        |   24 +-
 .../toaster/toastergui/templates/projectconf.html  |   23 +-
 .../lib/toaster/toastergui/templates/projects.html |   25 +-
 .../toastergui/templates/projecttopbar.html        |   75 +-
 .../lib/toaster/toastergui/templates/recipe.html   |    1 +
 .../toaster/toastergui/templates/recipe_btn.html   |   12 +-
 .../lib/toaster/toastergui/templates/recipes.html  |    1 +
 .../lib/toaster/toastergui/templates/target.html   |    1 +
 bitbake/lib/toaster/toastergui/templates/task.html |    1 +
 .../lib/toaster/toastergui/templates/tasks.html    |   15 +-
 .../toaster/toastergui/templates/toastertable.html |    1 -
 .../toastergui/templates/unavailable_artifact.html |    2 +
 .../toastergui/templatetags/project_url_tag.py     |   34 +
 bitbake/lib/toaster/toastergui/tests.py            |  614 +++++-
 bitbake/lib/toaster/toastergui/typeaheads.py       |    9 +-
 bitbake/lib/toaster/toastergui/urls.py             |   49 +-
 bitbake/lib/toaster/toastergui/views.py            |  327 ++-
 bitbake/lib/toaster/toastergui/widgets.py          |   56 +-
 bitbake/lib/toaster/toastermain/settings.py        |   11 +-
 bitbake/lib/toaster/toastermain/urls.py            |    2 +-
 bitbake/toaster-requirements.txt                   |    1 -
 documentation/Makefile                             |    2 +-
 documentation/adt-manual/adt-manual.xml            |    4 +-
 documentation/adt-manual/adt-package.xml           |    2 +-
 documentation/adt-manual/adt-prepare.xml           |   15 +
 documentation/bsp-guide/bsp-guide.xml              |    6 +-
 .../dev-manual/dev-manual-common-tasks.xml         |  139 +-
 documentation/dev-manual/dev-manual-model.xml      |   44 +-
 documentation/dev-manual/dev-manual-qemu.xml       |   24 +-
 documentation/dev-manual/dev-manual.xml            |    6 +-
 documentation/kernel-dev/kernel-dev-common.xml     |    4 +
 documentation/kernel-dev/kernel-dev.xml            |    4 +-
 documentation/mega-manual/figures/add-variable.png |  Bin 0 -> 110712 bytes
 documentation/mega-manual/figures/bash-oecore.png  |  Bin 0 -> 138198 bytes
 documentation/mega-manual/figures/set-variable.png |  Bin 0 -> 111430 bytes
 .../mega-manual/figures/variable-added.png         |  Bin 0 -> 112163 bytes
 documentation/mega-manual/mega-manual.xml          |    6 +-
 documentation/poky.ent                             |   11 +-
 documentation/profile-manual/profile-manual.xml    |    4 +-
 documentation/ref-manual/closer-look.xml           |    2 +-
 documentation/ref-manual/introduction.xml          |   71 +-
 documentation/ref-manual/migration.xml             |  435 +++-
 documentation/ref-manual/ref-classes.xml           |  378 +++-
 documentation/ref-manual/ref-manual.xml            |    4 +-
 documentation/ref-manual/ref-tasks.xml             |   17 +
 documentation/ref-manual/ref-variables.xml         |  429 +++-
 .../toaster-manual/figures/add-variable.png        |  Bin 0 -> 110712 bytes
 .../toaster-manual/figures/bash-oecore.png         |  Bin 0 -> 138198 bytes
 .../toaster-manual/figures/set-variable.png        |  Bin 0 -> 111430 bytes
 .../toaster-manual/figures/variable-added.png      |  Bin 0 -> 112163 bytes
 .../toaster-manual/toaster-manual-intro.xml        |    4 +-
 .../toaster-manual/toaster-manual-reference.xml    |  211 +-
 .../toaster-manual-setup-and-use.xml               |  649 +++++-
 .../toaster-manual/toaster-manual-start.xml        |   36 +-
 documentation/toaster-manual/toaster-manual.xml    |    6 +-
 documentation/tools/mega-manual.sed                |   40 +-
 .../yocto-project-qs/yocto-project-qs.xml          |    2 +-
 meta-selftest/conf/machine/qemux86copy.conf        |    3 +
 meta-selftest/lib/devtool/__init__.py              |    0
 meta-selftest/lib/devtool/test.py                  |   11 +
 meta-selftest/recipes-test/error/error.bb          |   11 +
 meta-selftest/recipes-test/images/error-image.bb   |    8 +
 .../recipes-test/images/test-empty-image.bb        |    6 +
 .../recipes-test/images/wic-image-minimal.bb       |    4 +
 .../recipes-test/images/wic-image-minimal.wks      |    6 +-
 .../recipes-kernel/linux/linux-yocto-custom.bb     |   15 +-
 .../0001-linux-version-tweak.patch                 |   21 +-
 meta-yocto-bsp/conf/machine/beaglebone.conf        |    2 +-
 meta-yocto-bsp/conf/machine/edgerouter.conf        |    2 +-
 .../conf/machine/include/genericx86-common.inc     |    2 +-
 meta-yocto-bsp/conf/machine/mpc8315e-rdb.conf      |    2 +-
 meta-yocto-bsp/lib/oeqa/yoctobsp.py                |   39 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    4 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   16 +-
 meta-yocto/conf/distro/poky.conf                   |    7 +-
 meta-yocto/conf/local.conf.sample                  |    4 +-
 meta-yocto/conf/local.conf.sample.extended         |    9 +
 meta-yocto/conf/toasterconf.json                   |   32 +-
 meta/classes/allarch.bbclass                       |    4 +
 meta/classes/archiver.bbclass                      |   62 +-
 meta/classes/autotools.bbclass                     |   45 +-
 meta/classes/base.bbclass                          |    6 +-
 meta/classes/buildhistory.bbclass                  |    2 +-
 meta/classes/cpan-base.bbclass                     |    4 +
 meta/classes/cpan.bbclass                          |    2 +-
 meta/classes/cpan_build.bbclass                    |   23 +-
 meta/classes/cross-canadian.bbclass                |    2 +-
 meta/classes/deploy.bbclass                        |    1 +
 meta/classes/distrodata.bbclass                    |   20 +-
 meta/classes/distutils3.bbclass                    |    4 +
 meta/classes/externalsrc.bbclass                   |    5 +-
 meta/classes/fontcache.bbclass                     |   19 +-
 meta/classes/grub-efi.bbclass                      |    3 +-
 meta/classes/gtk-icon-cache.bbclass                |   12 +-
 meta/classes/gummiboot.bbclass                     |    3 +-
 meta/classes/image-live.bbclass                    |    2 +-
 meta/classes/image-mklibs.bbclass                  |    2 +-
 meta/classes/image-vm.bbclass                      |    3 +-
 meta/classes/image.bbclass                         |   37 +-
 meta/classes/image_types.bbclass                   |   27 +-
 meta/classes/insane.bbclass                        |   17 +-
 meta/classes/kernel-arch.bbclass                   |    7 +-
 meta/classes/kernel-yocto.bbclass                  |   17 +-
 meta/classes/kernel.bbclass                        |   17 +-
 meta/classes/libc-package.bbclass                  |    4 +-
 meta/classes/license.bbclass                       |    1 +
 meta/classes/metadata_scm.bbclass                  |   23 +-
 meta/classes/multilib.bbclass                      |    5 +-
 meta/classes/multilib_global.bbclass               |   28 +-
 meta/classes/package.bbclass                       |    4 +-
 meta/classes/pixbufcache.bbclass                   |    4 +-
 meta/classes/populate_sdk_base.bbclass             |   12 +-
 meta/classes/populate_sdk_ext.bbclass              |   54 +-
 meta/classes/prserv.bbclass                        |    2 -
 meta/classes/ptest.bbclass                         |   10 +-
 meta/classes/report-error.bbclass                  |   11 +-
 meta/classes/sanity.bbclass                        |   11 +-
 meta/classes/sign_package_feed.bbclass             |   31 +
 meta/classes/sign_rpm.bbclass                      |   48 +-
 meta/classes/sstate.bbclass                        |   30 +-
 meta/classes/testimage.bbclass                     |   56 +-
 meta/classes/toolchain-scripts.bbclass             |    1 +
 meta/classes/uninative.bbclass                     |    2 +-
 meta/classes/useradd-staticids.bbclass             |   16 +-
 meta/classes/useradd_base.bbclass                  |    6 +-
 meta/conf/bitbake.conf                             |    5 +-
 meta/conf/distro/include/default-distrovars.inc    |    3 +
 meta/conf/distro/include/distro_alias.inc          |   10 +
 meta/conf/documentation.conf                       |    2 +
 meta/conf/layer.conf                               |    5 +-
 meta/conf/machine/include/qemu.inc                 |    2 +-
 meta/conf/machine/include/tune-thunderx.inc        |   19 +
 meta/conf/machine/qemux86-64.conf                  |    2 +-
 meta/conf/machine/qemux86.conf                     |    2 +-
 meta/conf/multilib.conf                            |    3 +-
 meta/files/common-licenses/GFDL-1.1                |  206 +-
 meta/files/ext-sdk-prepare.sh                      |   20 +
 meta/files/toolchain-shar-extract.sh               |   30 +-
 meta/files/toolchain-shar-relocate.sh              |   24 +-
 meta/lib/oe/copy_buildsystem.py                    |    5 +-
 meta/lib/oe/distro_check.py                        |  108 +-
 meta/lib/oe/image.py                               |   62 +-
 meta/lib/oe/package_manager.py                     |  137 +-
 meta/lib/oe/patch.py                               |   12 +-
 meta/lib/oe/recipeutils.py                         |   94 +-
 meta/lib/oe/rootfs.py                              |    8 +-
 meta/lib/oe/sdk.py                                 |   76 +-
 meta/lib/oe/sstatesig.py                           |   20 +
 meta/lib/oeqa/oetest.py                            |   70 +-
 meta/lib/oeqa/runexported.py                       |   42 +-
 meta/lib/oeqa/runtime/_ptest.py                    |    2 +-
 meta/lib/oeqa/runtime/connman.py                   |   23 -
 meta/lib/oeqa/runtime/date.py                      |    4 +-
 meta/lib/oeqa/runtime/files/testsdkmakefile        |    5 +
 meta/lib/oeqa/runtime/kernelmodule.py              |    4 +-
 meta/lib/oeqa/runtime/parselogs.py                 |   13 +-
 meta/lib/oeqa/runtime/scanelf.py                   |    2 +-
 meta/lib/oeqa/sdk/gcc.py                           |    6 +-
 meta/lib/oeqa/selftest/archiver.py                 |   50 +
 meta/lib/oeqa/selftest/base.py                     |    2 +-
 meta/lib/oeqa/selftest/bbtests.py                  |   60 +-
 meta/lib/oeqa/selftest/buildoptions.py             |   11 +-
 meta/lib/oeqa/selftest/devtool.py                  |  405 ++--
 meta/lib/oeqa/selftest/imagefeatures.py            |   16 +-
 meta/lib/oeqa/selftest/layerappend.py              |    9 +-
 meta/lib/oeqa/selftest/manifest.py                 |  165 ++
 meta/lib/oeqa/selftest/recipetool.py               |   11 +
 meta/lib/oeqa/selftest/sstatetests.py              |   73 +-
 meta/lib/oeqa/selftest/wic.py                      |   94 +-
 meta/lib/oeqa/utils/decorators.py                  |   35 +-
 meta/lib/oeqa/utils/dump.py                        |   15 +-
 meta/lib/oeqa/utils/ftools.py                      |   20 +-
 meta/lib/oeqa/utils/qemurunner.py                  |   28 +-
 .../gnu-efi/gnu-efi/gcc46-compatibility.patch      |   21 +
 meta/recipes-bsp/gnu-efi/gnu-efi_3.0.3.bb          |    1 +
 meta/recipes-bsp/grub/files/CVE-2015-8370.patch    |   59 +
 meta/recipes-bsp/grub/grub2.inc                    |    1 +
 ...-C-syntax-errors-for-function-declaration.patch |   74 +
 meta/recipes-bsp/gummiboot/gummiboot_git.bb        |    3 +
 ...-__s32-__u16-__s16-__u8-in-terms-of-c99-t.patch |   36 +
 meta/recipes-bsp/hostap/hostap-utils.inc           |    4 +-
 meta/recipes-connectivity/avahi/avahi-ui_0.6.31.bb |    3 +-
 .../0001-lib-dns-gen.c-fix-too-long-error.patch    |   34 +
 .../bind/bind/CVE-2015-8000.patch                  |  278 +++
 .../bind/bind/CVE-2015-8461.patch                  |   44 +
 .../bind/bind/CVE-2015-8704.patch                  |   28 +
 .../bind/bind/CVE-2015-8705.patch                  |   44 +
 meta/recipes-connectivity/bind/bind_9.10.2-P4.bb   |    5 +
 meta/recipes-connectivity/bluez5/bluez5.inc        |    5 +-
 .../bluez5/bluez5/bluetooth.conf                   |   17 -
 meta/recipes-connectivity/connman/connman-conf.bb  |    6 +-
 .../connman/connman-gnome_0.7.bb                   |    5 +-
 meta/recipes-connectivity/connman/connman.inc      |   12 +-
 ...acktrace-API-availability-before-using-it.patch |   55 +
 ...resolve-musl-does-not-implement-res_ninit.patch |   77 +
 .../0003-Fix-header-inclusions-for-musl.patch      |   85 +
 .../connman/add_xuser_dbus_permission.patch        |   21 -
 meta/recipes-connectivity/connman/connman/connman  |    4 +-
 meta/recipes-connectivity/connman/connman_1.30.bb  |    4 +-
 meta/recipes-connectivity/iproute2/iproute2.inc    |    6 +
 .../irda-utils/irda-utils_0.9.18.bb                |    2 +-
 .../openssh/openssh/CVE-2016-1907_2.patch          |   65 +
 .../openssh/openssh/CVE-2016-1907_3.patch          |  329 +++
 .../openssh/CVE-2016-1907_upstream_commit.patch    |   33 +
 .../openssh/openssh/sshd at .service                  |    4 +-
 .../openssh/openssh/sshdgenkeys.service            |   21 +-
 meta/recipes-connectivity/openssh/openssh_7.1p1.bb |  154 --
 meta/recipes-connectivity/openssh/openssh_7.1p2.bb |  157 ++
 meta/recipes-connectivity/openssl/openssl.inc      |    2 +-
 .../openssl/0001-Add-test-for-CVE-2015-3194.patch  |   66 +
 ...64-mont5.pl-fix-carry-propagating-bug-CVE.patch |  101 +
 .../CVE-2015-3194-1-Add-PSS-parameter-check.patch  |   45 +
 ...CVE-2015-3195-Fix-leak-with-ASN.1-combine.patch |   66 +
 .../openssl/openssl/CVE-2015-3197.patch            |   63 +
 .../openssl/openssl/CVE-2016-0701_1.patch          |  102 +
 .../openssl/openssl/CVE-2016-0701_2.patch          |  156 ++
 .../openssl/openssl/ptest_makefile_deps.patch      |  248 +++
 .../recipes-connectivity/openssl/openssl_1.0.2d.bb |   18 +
 .../socat/socat/CVE-2016-2217.patch                |  372 ++++
 meta/recipes-connectivity/socat/socat_1.7.3.0.bb   |    1 +
 meta/recipes-core/busybox/busybox.inc              |    3 +-
 .../busybox/0001-Switch-to-POSIX-utmpx-API.patch   |  388 ++++
 ...-linking-instead-of-LD-and-use-CFLAGS-and.patch |  114 ++
 .../busybox/busybox/0001-randconfig-fix.patch      |   33 +
 .../busybox/0002-Passthrough-r-to-linker.patch     |   32 +
 meta/recipes-core/busybox/busybox_1.23.2.bb        |    4 +
 .../coreutils/coreutils-6.9/loadavg.patch          |   18 +
 meta/recipes-core/coreutils/coreutils_6.9.bb       |    2 +
 meta/recipes-core/coreutils/coreutils_8.24.bb      |    2 +-
 .../dropbear/dropbear/dropbear at .service            |    3 +-
 .../dropbear/dropbear/dropbearkey.service          |    9 +-
 .../glibc/cross-localedef-native_2.22.bb           |    5 +-
 meta/recipes-core/glibc/glibc-locale.inc           |    2 +-
 ...TYPE_CLASS_EXTERN_PROTECTED_DATA-for-prel.patch |   84 +
 meta/recipes-core/glibc/glibc/CVE-2015-7547.patch  |  642 ++++++
 meta/recipes-core/glibc/glibc/CVE-2015-8776.patch  |  155 ++
 meta/recipes-core/glibc/glibc/CVE-2015-8777.patch  |  123 ++
 meta/recipes-core/glibc/glibc/CVE-2015-8779.patch  |  262 +++
 .../recipes-core/glibc/glibc/CVE-2015-9761_1.patch | 1039 ++++++++++
 .../recipes-core/glibc/glibc/CVE-2015-9761_2.patch |  385 ++++
 ...ove-incorrect-STRDIFF-based-optimization-.patch |  323 +++
 .../glibc/glibc/use_64bit_atomics.patch            |   24 +
 meta/recipes-core/glibc/glibc_2.22.bb              |   13 +-
 .../images/build-appliance-image_12.0.1.bb         |    4 +-
 .../initrdscripts/files/init-install-efi.sh        |    9 +-
 .../initrdscripts/initramfs-framework/finish       |    2 +-
 .../initrdscripts/initramfs-framework/init         |    2 +-
 .../initscripts/initscripts-1.0/sysfs.sh           |    4 +
 meta/recipes-core/kbd/kbd_2.0.2.bb                 |    1 +
 meta/recipes-core/libxml/libxml2.inc               |   16 +
 ...-2015-5312-Another-entity-expansion-issue.patch |   39 +
 ...97-Avoid-an-heap-buffer-overflow-in-xmlDi.patch |   40 +
 ...00-Fix-memory-access-error-due-to-incorre.patch |  131 ++
 ...2015-8035-Fix-XZ-compression-support-loop.patch |   38 +
 ...42-Buffer-overead-with-HTML-parser-in-pus.patch |   49 +
 ...n-name-parsing-at-the-end-of-current-inpu.patch |  138 ++
 ...ssing-entities-after-encoding-conversion-.patch |   89 +
 ...99-1-Add-xmlHaltParser-to-stop-the-parser.patch |   88 +
 ...VE-2015-7499-2-Detect-incoherency-on-GROW.patch |   43 +
 ...top-parsing-on-entities-boundaries-errors.patch |   39 +
 ...leanup-conditional-section-error-handling.patch |   56 +
 ...ror-in-previous-Conditional-section-patch.patch |   35 +
 ...iation-of-overflow-in-Conditional-section.patch |   39 +
 .../libxml/libxml2/CVE-2015-8241.patch             |   40 +
 ...ng-early-on-if-encoding-conversion-failed.patch |   42 +
 .../libxml/libxml2/CVE-2015-8710.patch             |   71 +
 meta/recipes-core/meta/meta-ide-support.bb         |    1 -
 .../meta/nativesdk-buildtools-perl-dummy.bb        |   13 +-
 meta/recipes-core/meta/signing-keys.bb             |   45 +
 meta/recipes-core/meta/uninative-tarball.bb        |    1 +
 meta/recipes-core/os-release/os-release.bb         |    5 +-
 .../packagegroup-core-standalone-sdk-target.bb     |    2 +
 .../readline-6.3/readline-cve-2014-2524.patch      |   43 +
 .../readline/readline-6.3/readline63-003           |   43 -
 meta/recipes-core/readline/readline_6.3.bb         |    2 +-
 .../systemd/0001-fix-build-on-uClibc-exp10.patch   |   22 +
 ...nv-when-secure-versions-are-not-available.patch |   39 +
 .../systemd/rules-whitelist-hd-devices.patch       |   32 +
 meta/recipes-core/systemd/systemd_225.bb           |   13 +-
 meta/recipes-core/uclibc/uclibc-git.inc            |    5 +
 ...-AT_EMPTY_PATH-for-all-and-O_PATH-for-arm.patch |   42 +
 ...zes-away-the-write-only-static-functions-.patch |   51 +
 .../uclibc/uclibc-git/0001-wire-in-syncfs.patch    |   49 +
 .../uclibc/uclibc-git/CVE-2016-2224.patch          |   49 +
 .../uclibc/uclibc-git/CVE-2016-2225.patch          |   32 +
 meta/recipes-core/uclibc/uclibc-git/uClibc.distro  |    2 +
 meta/recipes-core/udev/udev.inc                    |    2 +
 meta/recipes-core/util-linux/util-linux.inc        |    6 +
 .../util-linux/util-linux/runuser-l.pamd           |    3 +
 .../util-linux/util-linux/runuser.pamd             |    4 +
 meta/recipes-core/util-linux/util-linux_2.26.2.bb  |    2 +
 .../binutils/binutils/binutils-octeon3.patch       |    2 +-
 .../build-compare/build-compare_git.bb             |    1 -
 meta/recipes-devtools/ccache/ccache_3.2.3.bb       |    4 +-
 .../0002-dev.mk.in-fix-file-name-too-long.patch    |   32 +
 .../recipes-devtools/dpkg/dpkg/CVE-2015-0860.patch |   52 +
 meta/recipes-devtools/dpkg/dpkg_1.18.2.bb          |    1 +
 ...ate-hardlinks-with-the-correct-directory-.patch |   81 +
 .../recipes-devtools/e2fsprogs/e2fsprogs_1.42.9.bb |   16 +
 meta/recipes-devtools/file/file/host-file.patch    |   32 +
 meta/recipes-devtools/file/file_5.24.bb            |   10 +-
 meta/recipes-devtools/gcc/gcc-4.8.inc              |    1 +
 ...-gcc-483-universal-initializer-no-warning.patch |  107 +
 meta/recipes-devtools/gcc/gcc-4.9.inc              |    1 +
 ...-gcc-483-universal-initializer-no-warning.patch |  107 +
 meta/recipes-devtools/gcc/gcc-5.2.inc              |    3 +
 .../gcc/gcc-5.2/0042-cxxflags-for-build.patch      |  123 ++
 meta/recipes-devtools/gcc/gcc-common.inc           |    5 +
 meta/recipes-devtools/gcc/gcc-configure-common.inc |    1 +
 meta/recipes-devtools/gcc/gcc-cross-initial.inc    |    1 +
 meta/recipes-devtools/gcc/gcc-multilib-config.inc  |    3 +-
 meta/recipes-devtools/gcc/gcc-runtime.inc          |    3 +
 meta/recipes-devtools/gcc/gcc-shared-source.inc    |    2 +
 meta/recipes-devtools/gcc/gcc-target.inc           |   12 +-
 meta/recipes-devtools/gcc/gcc_4.9.bb               |    5 +-
 meta/recipes-devtools/gcc/libgcc.inc               |    9 +-
 .../git/git-2.5.0/0008-CVE-2015-7545-1.patch       |  446 +++++
 .../git/git-2.5.0/0009-CVE-2015-7545-2.patch       |  112 ++
 .../git/git-2.5.0/0010-CVE-2015-7545-3.patch       |  112 ++
 .../git/git-2.5.0/0011-CVE-2015-7545-4.patch       |  150 ++
 .../git/git-2.5.0/0012-CVE-2015-7545-5.patch       |   69 +
 meta/recipes-devtools/git/git_2.5.0.bb             |    8 +
 meta/recipes-devtools/guile/guile_2.0.11.bb        |   16 +-
 meta/recipes-devtools/i2c-tools/i2c-tools_3.1.2.bb |    3 +-
 .../installer/adt-installer_1.0.bb                 |    1 -
 meta/recipes-devtools/libtool/libtool-2.4.6.inc    |    1 +
 ...1-libtool-Fix-support-for-NIOS2-processor.patch |   68 +
 meta/recipes-devtools/mmc/mmc-utils_git.bb         |    4 +-
 meta/recipes-devtools/mtools/mtools_4.0.18.bb      |    5 +
 meta/recipes-devtools/opensp/opensp_1.5.2.bb       |    4 +
 ...-include-stdio.h-for-getting-FILE-defined.patch |   45 +
 ...reate-opkg.lock-in-run-instead-of-var-run.patch |   34 +
 ...ng_util-New-file-with-bin_to_hex-function.patch |  122 ++
 .../opkg/0002-md5-Add-md5_to_string-function.patch |  110 +
 ...0003-sha256-Add-sha256_to_string-function.patch |  110 +
 ...4-opkg_download-Use-short-cache-file-name.patch |   85 +
 meta/recipes-devtools/opkg/opkg_0.3.0.bb           |    6 +
 meta/recipes-devtools/perl/perl-native_5.22.0.bb   |   16 +-
 .../perl/perl/perl-errno-generation-gcc5.patch     |   23 +
 meta/recipes-devtools/perl/perl_5.22.0.bb          |    3 +-
 meta/recipes-devtools/prelink/prelink_git.bb       |    4 +-
 meta/recipes-devtools/pseudo/pseudo_1.7.3.bb       |   19 -
 meta/recipes-devtools/pseudo/pseudo_1.7.4.bb       |   19 +
 meta/recipes-devtools/pseudo/pseudo_git.bb         |    4 +-
 .../python/python-3.4-manifest.inc                 |    2 +-
 meta/recipes-devtools/python/python-async_0.6.2.bb |    2 +-
 .../recipes-devtools/python/python-pygtk_2.24.0.bb |    4 +-
 ...cache.py-getPackages-matches-name-version.patch |   43 +
 meta/recipes-devtools/python/python-smartpm_git.bb |    1 +
 meta/recipes-devtools/qemu/qemu.inc                |    8 -
 .../qemu/qemu/CVE-2015-7295_1.patch                |   63 +
 .../qemu/qemu/CVE-2015-7295_2.patch                |   58 +
 .../qemu/qemu/CVE-2015-7295_3.patch                |   52 +
 .../recipes-devtools/qemu/qemu/CVE-2015-7504.patch |   56 +
 .../recipes-devtools/qemu/qemu/CVE-2015-7512.patch |   44 +
 .../recipes-devtools/qemu/qemu/CVE-2015-8345.patch |   73 +
 .../recipes-devtools/qemu/qemu/CVE-2015-8504.patch |   51 +
 .../recipes-devtools/qemu/qemu/CVE-2016-1568.patch |   46 +
 .../recipes-devtools/qemu/qemu/CVE-2016-2197.patch |   59 +
 .../recipes-devtools/qemu/qemu/CVE-2016-2198.patch |   45 +
 meta/recipes-devtools/qemu/qemu/no-valgrind.patch  |   19 +
 meta/recipes-devtools/qemu/qemu_2.4.0.bb           |   11 +
 .../configure.ac-check-for-both-gpg2-and-gpg.patch |   29 +
 .../rpm/rpm-check-rootpath-reasonableness.patch    |    2 +-
 meta/recipes-devtools/rpm/rpm_4.11.2.bb            |    3 +-
 meta/recipes-devtools/rpm/rpm_5.4+cvs.bb           |    1 +
 meta/recipes-devtools/rpm/rpm_5.4.14.bb            |    2 +
 meta/recipes-devtools/rpm/rpmresolve/rpmresolve.c  |   10 +-
 .../subversion-CVE-2015-3184.patch                 | 2094 ++++++++++++++++++++
 .../subversion-CVE-2015-3187.patch                 |  346 ++++
 .../subversion/subversion_1.8.13.bb                |    3 +
 .../syslinux/0010-gcc46-compatibility.patch        |   37 +
 .../0011-mk-MMD-does-not-take-any-arguments.patch  |   33 +
 meta/recipes-devtools/syslinux/syslinux_6.03.bb    |    2 +
 meta/recipes-devtools/unfs3/unfs3_0.9.22.r490.bb   |    1 +
 meta/recipes-extended/bash/bash.inc                |    2 +-
 meta/recipes-extended/byacc/byacc/byacc-open.patch |   12 +
 ...bunzip2-qt-returns-0-for-corrupt-archives.patch |   55 +
 meta/recipes-extended/bzip2/bzip2_1.0.6.bb         |    1 +
 meta/recipes-extended/cpio/cpio_v2.inc             |    8 +-
 meta/recipes-extended/cronie/cronie_1.5.0.bb       |    2 +-
 meta/recipes-extended/cups/cups.inc                |    6 +
 .../cwautomacros/cwautomacros_20110201.bb          |    3 +
 .../foomatic-filters-4.0.17/CVE-2015-8327.patch    |   23 +
 .../foomatic-filters-4.0.17/CVE-2015-8560.patch    |   23 +
 .../foomatic/foomatic-filters_4.0.17.bb            |    4 +
 .../ghostscript/ghostscript/png_mak.patch          |   21 +
 .../ghostscript/ghostscript_9.16.bb                |    1 +
 meta/recipes-extended/grep/grep_2.21.bb            |   12 +-
 meta/recipes-extended/gzip/gzip.inc                |   14 +-
 meta/recipes-extended/images/wic-image-minimal.bb  |   14 -
 meta/recipes-extended/images/wic-image-minimal.wks |   10 -
 ...check-conntrack-when-libnfnetlink-enabled.patch |   34 +
 meta/recipes-extended/iptables/iptables_1.4.21.bb  |    3 +-
 .../libaio/libaio/system-linkage.patch             |   37 +
 meta/recipes-extended/libaio/libaio_0.3.110.bb     |    9 +-
 ...IVE_EXTRACT_SECURE_NOABSOLUTEPATHS-option.patch |  151 --
 .../libarchive/libarchive-CVE-2015-2304.patch      |  151 ++
 .../libarchive/libarchive_3.1.2.bb                 |    2 +-
 .../libtirpc/libtirpc/remove-des-uclibc.patch      |   22 +-
 .../libtirpc/libtirpc/va_list.patch                |   18 +
 meta/recipes-extended/libtirpc/libtirpc_0.2.5.bb   |    4 +-
 meta/recipes-extended/logrotate/logrotate_3.9.1.bb |    2 +-
 meta/recipes-extended/lsb/lsb_4.1.bb               |    4 +-
 meta/recipes-extended/lsb/lsbinitscripts_9.64.bb   |    2 +
 ...ace-inline-with-static-inline-for-gcc-5.x.patch |   69 +
 meta/recipes-extended/ltp/ltp_20150420.bb          |    1 +
 meta/recipes-extended/mailx/mailx_12.5-5.bb        |    5 +
 meta/recipes-extended/pam/libpam/use-utmpx.patch   |  233 +++
 meta/recipes-extended/pam/libpam_1.2.1.bb          |    4 +-
 .../quota/quota/remove_non_posix_types.patch       |   13 +
 meta/recipes-extended/quota/quota_4.02.bb          |    2 +-
 .../rpcbind/rpcbind/0001-uclibc-nss.patch          |   30 -
 .../rpcbind/rpcbind/cve-2015-7236.patch            |   83 +
 meta/recipes-extended/rpcbind/rpcbind_0.2.3.bb     |    3 +-
 ...-stack-overflow-due-to-too-deep-recursion.patch |   57 +
 meta/recipes-extended/screen/screen_4.3.1.bb       |    1 +
 meta/recipes-extended/sudo/sudo_1.8.14p3.bb        |    2 +-
 .../0001-Include-needed-headers-explicitly.patch   |   62 +
 meta/recipes-extended/sysstat/sysstat_11.1.5.bb    |    2 +
 meta/recipes-extended/tar/tar.inc                  |   10 +-
 meta/recipes-extended/texinfo/texinfo_6.0.bb       |    2 +-
 .../recipes-extended/tzcode/tzcode-native_2015f.bb |   25 -
 .../recipes-extended/tzcode/tzcode-native_2016a.bb |   25 +
 meta/recipes-extended/tzdata/tzdata_2015f.bb       |  207 --
 meta/recipes-extended/tzdata/tzdata_2016a.bb       |  208 ++
 .../unzip/unzip/CVE-2015-7696.patch                |   38 +
 .../unzip/unzip/CVE-2015-7697.patch                |   31 +
 .../unzip/unzip/cve-2014-9636.patch                |   45 +
 .../unzip/unzip/unzip-6.0_overflow3.diff           |   45 -
 meta/recipes-extended/unzip/unzip_6.0.bb           |    4 +-
 meta/recipes-extended/xz/xz_5.2.1.bb               |    2 +-
 meta/recipes-gnome/epiphany/epiphany_3.16.3.bb     |    5 +-
 meta/recipes-gnome/gcr/gcr_3.16.0.bb               |    7 +-
 .../gdk-pixbuf/gdk-pixbuf/CVE-2015-7674.patch      |   39 +
 meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf_2.30.8.bb |   26 +-
 .../gnome-desktop/gnome-desktop3_3.16.2.bb         |    5 +-
 meta/recipes-gnome/gnome/gnome-doc-utils.inc       |    3 -
 meta/recipes-gnome/gtk+/gtk+.inc                   |    2 +-
 meta/recipes-gnome/gtk+/gtk+3.inc                  |    5 +-
 ...Do-not-try-to-initialize-GL-without-libGL.patch |   60 +
 meta/recipes-gnome/gtk+/gtk+3_3.16.6.bb            |    1 +
 .../gtk-engines/gtk-engines_2.20.2.bb              |    5 +-
 .../gtk-theme-torturer/gtk-theme-torturer_git.bb   |    3 +
 meta/recipes-gnome/libglade/libglade_2.6.4.bb      |    3 +-
 .../librsvg/librsvg/CVE-2015-7558_1.patch          |  139 ++
 .../librsvg/librsvg/CVE-2015-7558_2.patch          |  230 +++
 .../librsvg/librsvg/CVE-2015-7558_3.patch          |  223 +++
 meta/recipes-gnome/librsvg/librsvg_2.40.10.bb      |    8 +-
 meta/recipes-gnome/libsecret/libsecret_0.18.2.bb   |    5 +-
 meta/recipes-gnome/libwnck/libwnck3_3.14.0.bb      |    5 +
 meta/recipes-graphics/cairo/cairo.inc              |    3 +
 ...anspose-the-matrix-in-_cairo_gl_shader_bi.patch |   49 +
 meta/recipes-graphics/cairo/cairo_1.14.2.bb        |    1 +
 meta/recipes-graphics/directfb/directfb.inc        |    3 +
 meta/recipes-graphics/libsdl/libsdl_1.2.15.bb      |    3 +-
 meta/recipes-graphics/libsdl2/libsdl2_2.0.3.bb     |    2 +-
 ...10-sharedtex_mt-fix-rendering-thread-hang.patch |   43 +
 meta/recipes-graphics/mesa/mesa-demos_8.2.0.bb     |    1 +
 meta/recipes-graphics/piglit/piglit_git.bb         |    6 +
 ...-threads-Use-PTHREAD_MUTEX_RECURSIVE-by-d.patch |   54 +
 meta/recipes-graphics/waffle/waffle_1.5.1.bb       |    4 +-
 meta/recipes-graphics/xorg-app/xwininfo_1.1.3.bb   |    2 +-
 meta/recipes-graphics/xorg-lib/libxcb.inc          |    4 +-
 .../libxcb/gcc-mips-pr68302-mips-workaround.patch  |   22 +
 ...0001-v3-test-add-a-check-for-FE_DIVBYZERO.patch |   65 +
 meta/recipes-graphics/xorg-lib/pixman_0.32.6.bb    |    1 +
 .../recipes-graphics/xorg-xserver/xserver-xorg.inc |    3 +
 .../kern-tools/kern-tools-native_git.bb            |    2 +-
 meta/recipes-kernel/kmod/kmod.inc                  |    2 +-
 .../linux-firmware/linux-firmware_git.bb           |    4 +-
 meta/recipes-kernel/linux/linux-yocto-rt_3.14.bb   |    3 +-
 meta/recipes-kernel/linux/linux-yocto-rt_4.1.bb    |    9 +-
 meta/recipes-kernel/linux/linux-yocto-tiny_3.14.bb |    2 +-
 meta/recipes-kernel/linux/linux-yocto-tiny_4.1.bb  |    6 +-
 meta/recipes-kernel/linux/linux-yocto.inc          |    4 +
 meta/recipes-kernel/linux/linux-yocto_3.14.bb      |    9 +-
 meta/recipes-kernel/linux/linux-yocto_3.19.bb      |    9 +-
 meta/recipes-kernel/linux/linux-yocto_4.1.bb       |   23 +-
 ...-sessiond-disable-match-app-event-by-name.patch |   58 +
 meta/recipes-kernel/lttng/lttng-tools_2.6.0.bb     |    3 +-
 .../oprofile/oprofileui-server_git.bb              |    2 +-
 meta/recipes-kernel/oprofile/oprofileui_git.bb     |    5 +-
 meta/recipes-kernel/sysprof/sysprof_git.bb         |    3 +-
 meta/recipes-kernel/trace-cmd/kernelshark_git.bb   |    3 +
 meta/recipes-lsb4/libpng/libpng12_1.2.53.bb        |    2 +-
 .../recipes-multimedia/gstreamer/gst-player_git.bb |    4 +-
 .../gstreamer/gstreamer1.0-libav_1.4.5.bb          |    3 +
 .../gstreamer/gstreamer1.0-omx.inc                 |    3 +-
 .../gstreamer/gstreamer1.0-plugins-bad.inc         |   15 +-
 .../0001-glimagesink-Downrank-to-marginal.patch    |   32 +
 .../gstreamer/gstreamer1.0-plugins-bad_1.4.5.bb    |    4 +-
 .../gstreamer/gstreamer1.0-plugins-base.inc        |    7 +-
 .../gstreamer/gstreamer1.0-plugins-good.inc        |   14 +-
 ...ink-Shouldn-t-drop-buffer-when-sync-false.patch |   30 +
 .../gstreamer/gstreamer1.0_1.4.5.bb                |    1 +
 .../libpng/libpng-1.6.17/CVE-2015-8126_1.patch     |   91 +
 .../libpng/libpng-1.6.17/CVE-2015-8126_2.patch     |  134 ++
 .../libpng/libpng-1.6.17/CVE-2015-8126_3.patch     |   79 +
 .../libpng/libpng-1.6.17/CVE-2015-8126_4.patch     |   48 +
 .../libpng/libpng-1.6.17/CVE-2015-8472.patch       |   29 +
 meta/recipes-multimedia/libpng/libpng_1.6.17.bb    |   10 +-
 .../files/libsndfile-fix-CVE-2014-9756.patch       |   24 +
 .../libsndfile/libsndfile1_1.0.25.bb               |    1 +
 .../libtiff/files/CVE-2015-8781.patch              |  196 ++
 .../libtiff/files/CVE-2015-8784.patch              |   73 +
 meta/recipes-multimedia/libtiff/tiff_4.0.4.bb      |    2 +
 .../0001-card-add-pa_card_profile.ports.patch      |  245 +++
 ...oth-fail-if-user-requested-profile-doesn-.patch |   60 +
 ...-move-profile-selection-after-pa_card_new.patch |  363 ++++
 ...vailability-for-some-unavailable-profiles.patch |   75 +
 .../pulseaudio/pulseaudio_6.0.bb                   |    4 +
 meta/recipes-qt/qt4/qt4-4.8.7.inc                  |    2 +-
 .../0028-Don-t-crash-on-broken-GIF-images.patch    |   47 -
 .../0034-Fix-kmap2qmap-build-with-clang.patch      |   34 +
 meta/recipes-sato/gtk-engines/gtk-sato-engine.inc  |    3 +
 meta/recipes-sato/leafpad/leafpad_0.8.18.1.bb      |    2 +-
 .../matchbox-terminal/matchbox-terminal_git.bb     |    4 +-
 meta/recipes-sato/pcmanfm/pcmanfm_1.2.3.bb         |    2 +-
 meta/recipes-sato/puzzles/oh-puzzles_git.bb        |    2 +-
 meta/recipes-sato/webkit/webkitgtk_2.8.5.bb        |   40 +-
 meta/recipes-support/apr/apr-util_1.5.4.bb         |    6 +
 meta/recipes-support/apr/apr_1.5.2.bb              |   14 +-
 meta/recipes-support/atk/at-spi2-core_2.16.0.bb    |    2 +-
 meta/recipes-support/curl/curl/CVE-2016-0754.patch |  417 ++++
 meta/recipes-support/curl/curl/CVE-2016-0755.patch |  138 ++
 meta/recipes-support/curl/curl_7.44.0.bb           |    9 +-
 .../gmp-4.2.1/Use-__gnu_inline__-attribute.patch   |   36 +
 .../gmp/gmp-4.2.1/disable-stdc.patch               |   39 -
 meta/recipes-support/gmp/gmp_4.2.1.bb              |    2 +-
 .../recipes-support/icu/icu/fix-install-manx.patch |   48 +
 meta/recipes-support/icu/icu_55.1.bb               |    5 +
 .../libbsd/files/CVE-2016-2090.patch               |   50 +
 meta/recipes-support/libbsd/libbsd_0.7.0.bb        |    4 +-
 meta/recipes-support/libfm/libfm-extra_1.2.3.bb    |    2 +-
 meta/recipes-support/libfm/libfm_1.2.3.bb          |    5 +-
 .../libgcrypt/files/CVE-2015-7511_1.patch          |  245 +++
 .../libgcrypt/files/CVE-2015-7511_2.patch          |   55 +
 meta/recipes-support/libgcrypt/libgcrypt_1.6.3.bb  |    4 +
 .../0001-libgpg-error-Add-nios2-support.patch      |   46 +
 .../libgpg-error/libgpg-error_1.19.bb              |    4 +-
 .../libksba/ksba-add-pkgconfig-support.patch       |    2 +-
 meta/recipes-support/libpcre/libpcre_8.37.bb       |   73 -
 meta/recipes-support/libpcre/libpcre_8.38.bb       |   78 +
 ...Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch |   61 +
 meta/recipes-support/libunwind/libunwind_1.1.bb    |    5 +
 .../libxslt/libxslt/CVE-2015-7995.patch            |   33 +
 meta/recipes-support/libxslt/libxslt_1.1.28.bb     |    3 +-
 .../nettle/nettle-3.1.1/CVE-2015-8803_8805.patch   |   71 +
 .../nettle/nettle-3.1.1/CVE-2015-8804.patch        |  281 +++
 meta/recipes-support/nettle/nettle_3.1.1.bb        |    5 +
 meta/recipes-support/p11-kit/p11-kit_0.22.1.bb     |    2 +
 meta/recipes-support/pinentry/pinentry_0.9.2.bb    |    2 +
 .../user-creation/files/system-xuser.conf          |   11 +
 .../user-creation/xuser-account_0.1.bb             |    6 +-
 .../vte/vte-0.28.2/cve-2012-2738.patch             |  135 ++
 meta/recipes-support/vte/vte.inc                   |    3 +-
 meta/recipes-support/vte/vte_0.28.2.bb             |    3 +-
 meta/site/nios2-linux                              |  395 ++++
 scripts/contrib/devtool-stress.py                  |  241 +++
 scripts/contrib/python/generate-manifest-3.4.py    |    2 +-
 scripts/devtool                                    |    5 +-
 scripts/gen-lockedsig-cache                        |   19 +-
 scripts/lib/bsp/engine.py                          |    6 +-
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../arm/recipes-kernel/linux/kernel-list.noinstall |    4 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   33 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   32 +
 .../target/arch/i386/conf/machine/machine.conf     |    4 +-
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../recipes-kernel/linux/kernel-list.noinstall     |    4 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   33 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   32 +
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../recipes-kernel/linux/kernel-list.noinstall     |    4 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   33 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   32 +
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../recipes-kernel/linux/kernel-list.noinstall     |    4 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   33 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    5 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   32 +
 .../target/arch/powerpc/conf/machine/machine.conf  |    2 +-
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../recipes-kernel/linux/kernel-list.noinstall     |    4 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   33 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   32 +
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../recipes-kernel/linux/kernel-list.noinstall     |    4 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   62 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   61 +
 .../linux/files/machine-preempt-rt.scc             |    3 +-
 .../linux/files/machine-standard.scc               |    3 +-
 .../recipes-kernel/linux/files/machine-tiny.scc    |    3 +-
 .../recipes-kernel/linux/kernel-list.noinstall     |    2 +-
 .../recipes-kernel/linux/linux-yocto-dev.bbappend  |    1 -
 .../linux/linux-yocto-rt_3.14.bbappend             |    6 +-
 .../linux/linux-yocto-tiny_3.14.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_3.19.bbappend           |    6 +-
 .../linux/linux-yocto-tiny_4.1.bbappend            |   33 +
 .../recipes-kernel/linux/linux-yocto_3.14.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_3.19.bbappend |    7 +-
 .../recipes-kernel/linux/linux-yocto_4.1.bbappend  |   32 +
 scripts/lib/devtool/__init__.py                    |   65 +-
 scripts/lib/devtool/build-image.py                 |   94 +-
 scripts/lib/devtool/build.py                       |    6 +-
 scripts/lib/devtool/deploy.py                      |    9 +-
 scripts/lib/devtool/package.py                     |    8 +-
 scripts/lib/devtool/runqemu.py                     |   64 +
 scripts/lib/devtool/sdk.py                         |   56 +-
 scripts/lib/devtool/search.py                      |   80 +
 scripts/lib/devtool/standard.py                    |  590 ++++--
 scripts/lib/devtool/upgrade.py                     |   70 +-
 scripts/lib/recipetool/create.py                   |   74 +-
 scripts/lib/recipetool/create_buildsys.py          |    2 +-
 scripts/lib/scriptutils.py                         |    4 +
 scripts/lib/wic/imager/direct.py                   |    3 +-
 scripts/lib/wic/utils/oe/misc.py                   |   20 +-
 scripts/oe-git-proxy                               |   12 +-
 scripts/oe-pkgdata-util                            |    7 +-
 scripts/oe-publish-sdk                             |    4 +-
 scripts/postinst-intercepts/update_font_cache      |    4 +-
 scripts/postinst-intercepts/update_icon_cache      |    3 +-
 scripts/postinst-intercepts/update_pixbuf_cache    |    4 +-
 scripts/runqemu                                    |   33 +-
 scripts/runqemu-export-rootfs                      |    8 +-
 scripts/runqemu-ifup                               |   15 +
 scripts/runqemu-internal                           |   89 +-
 scripts/yocto-bsp                                  |    2 +-
 749 files changed, 29611 insertions(+), 4083 deletions(-)
 create mode 100644 bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py
 create mode 100644 bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py
 create mode 100644 bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py
 create mode 100644 bitbake/lib/toaster/toastergui/static/js/customrecipe.js
 create mode 100644 bitbake/lib/toaster/toastergui/static/js/newcustomimage.js
 create mode 100644 bitbake/lib/toaster/toastergui/templates/customise_btn.html
 create mode 100644 bitbake/lib/toaster/toastergui/templates/customrecipe.html
 create mode 100644 bitbake/lib/toaster/toastergui/templates/newcustomimage.html
 create mode 100644 bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html
 create mode 100644 bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py
 create mode 100644 documentation/mega-manual/figures/add-variable.png
 create mode 100644 documentation/mega-manual/figures/bash-oecore.png
 create mode 100644 documentation/mega-manual/figures/set-variable.png
 create mode 100644 documentation/mega-manual/figures/variable-added.png
 create mode 100644 documentation/toaster-manual/figures/add-variable.png
 create mode 100644 documentation/toaster-manual/figures/bash-oecore.png
 create mode 100644 documentation/toaster-manual/figures/set-variable.png
 create mode 100644 documentation/toaster-manual/figures/variable-added.png
 create mode 100644 meta-selftest/conf/machine/qemux86copy.conf
 create mode 100644 meta-selftest/lib/devtool/__init__.py
 create mode 100644 meta-selftest/lib/devtool/test.py
 create mode 100644 meta-selftest/recipes-test/error/error.bb
 create mode 100644 meta-selftest/recipes-test/images/error-image.bb
 create mode 100644 meta-selftest/recipes-test/images/test-empty-image.bb
 create mode 100644 meta-yocto-bsp/lib/oeqa/yoctobsp.py
 delete mode 100644 meta/classes/prserv.bbclass
 create mode 100644 meta/classes/sign_package_feed.bbclass
 create mode 100644 meta/conf/machine/include/tune-thunderx.inc
 create mode 100644 meta/files/ext-sdk-prepare.sh
 create mode 100644 meta/lib/oeqa/runtime/files/testsdkmakefile
 create mode 100644 meta/lib/oeqa/selftest/archiver.py
 create mode 100644 meta/lib/oeqa/selftest/manifest.py
 create mode 100644 meta/recipes-bsp/gnu-efi/gnu-efi/gcc46-compatibility.patch
 create mode 100644 meta/recipes-bsp/grub/files/CVE-2015-8370.patch
 create mode 100644 meta/recipes-bsp/gummiboot/gummiboot/0001-console-Fix-C-syntax-errors-for-function-declaration.patch
 create mode 100644 meta/recipes-bsp/hostap/hostap-utils-0.4.7/0001-Define-_u32-__s32-__u16-__s16-__u8-in-terms-of-c99-t.patch
 create mode 100644 meta/recipes-connectivity/bind/bind/0001-lib-dns-gen.c-fix-too-long-error.patch
 create mode 100644 meta/recipes-connectivity/bind/bind/CVE-2015-8000.patch
 create mode 100644 meta/recipes-connectivity/bind/bind/CVE-2015-8461.patch
 create mode 100644 meta/recipes-connectivity/bind/bind/CVE-2015-8704.patch
 create mode 100644 meta/recipes-connectivity/bind/bind/CVE-2015-8705.patch
 delete mode 100644 meta/recipes-connectivity/bluez5/bluez5/bluetooth.conf
 create mode 100644 meta/recipes-connectivity/connman/connman/0001-Detect-backtrace-API-availability-before-using-it.patch
 create mode 100644 meta/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch
 create mode 100644 meta/recipes-connectivity/connman/connman/0003-Fix-header-inclusions-for-musl.patch
 delete mode 100644 meta/recipes-connectivity/connman/connman/add_xuser_dbus_permission.patch
 create mode 100644 meta/recipes-connectivity/openssh/openssh/CVE-2016-1907_2.patch
 create mode 100644 meta/recipes-connectivity/openssh/openssh/CVE-2016-1907_3.patch
 create mode 100644 meta/recipes-connectivity/openssh/openssh/CVE-2016-1907_upstream_commit.patch
 delete mode 100644 meta/recipes-connectivity/openssh/openssh_7.1p1.bb
 create mode 100644 meta/recipes-connectivity/openssh/openssh_7.1p2.bb
 create mode 100644 meta/recipes-connectivity/openssl/openssl/0001-Add-test-for-CVE-2015-3194.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/CVE-2015-3193-bn-asm-x86_64-mont5.pl-fix-carry-propagating-bug-CVE.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/CVE-2015-3194-1-Add-PSS-parameter-check.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/CVE-2015-3195-Fix-leak-with-ASN.1-combine.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/CVE-2015-3197.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/CVE-2016-0701_1.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/CVE-2016-0701_2.patch
 create mode 100644 meta/recipes-connectivity/openssl/openssl/ptest_makefile_deps.patch
 create mode 100644 meta/recipes-connectivity/socat/socat/CVE-2016-2217.patch
 create mode 100644 meta/recipes-core/busybox/busybox/0001-Switch-to-POSIX-utmpx-API.patch
 create mode 100644 meta/recipes-core/busybox/busybox/0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch
 create mode 100644 meta/recipes-core/busybox/busybox/0001-randconfig-fix.patch
 create mode 100644 meta/recipes-core/busybox/busybox/0002-Passthrough-r-to-linker.patch
 create mode 100644 meta/recipes-core/coreutils/coreutils-6.9/loadavg.patch
 create mode 100644 meta/recipes-core/glibc/glibc/0028-Clear-ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA-for-prel.patch
 create mode 100644 meta/recipes-core/glibc/glibc/CVE-2015-7547.patch
 create mode 100644 meta/recipes-core/glibc/glibc/CVE-2015-8776.patch
 create mode 100644 meta/recipes-core/glibc/glibc/CVE-2015-8777.patch
 create mode 100644 meta/recipes-core/glibc/glibc/CVE-2015-8779.patch
 create mode 100644 meta/recipes-core/glibc/glibc/CVE-2015-9761_1.patch
 create mode 100644 meta/recipes-core/glibc/glibc/CVE-2015-9761_2.patch
 create mode 100644 meta/recipes-core/glibc/glibc/strcoll-Remove-incorrect-STRDIFF-based-optimization-.patch
 create mode 100644 meta/recipes-core/glibc/glibc/use_64bit_atomics.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/0001-CVE-2015-5312-Another-entity-expansion-issue.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/0001-CVE-2015-7497-Avoid-an-heap-buffer-overflow-in-xmlDi.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/0001-CVE-2015-7500-Fix-memory-access-error-due-to-incorre.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/0001-CVE-2015-8035-Fix-XZ-compression-support-loop.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/0001-CVE-2015-8242-Buffer-overead-with-HTML-parser-in-pus.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/0001-Fix-a-bug-on-name-parsing-at-the-end-of-current-inpu.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7498-Avoid-processing-entities-after-encoding-conversion-.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7499-1-Add-xmlHaltParser-to-stop-the-parser.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7499-2-Detect-incoherency-on-GROW.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7941-1-Stop-parsing-on-entities-boundaries-errors.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7941-2-Cleanup-conditional-section-error-handling.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7942-2-Fix-an-error-in-previous-Conditional-section-patch.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-7942-Another-variation-of-overflow-in-Conditional-section.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-8241.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-8317-Fail-parsing-early-on-if-encoding-conversion-failed.patch
 create mode 100644 meta/recipes-core/libxml/libxml2/CVE-2015-8710.patch
 create mode 100644 meta/recipes-core/meta/signing-keys.bb
 create mode 100644 meta/recipes-core/readline/readline-6.3/readline-cve-2014-2524.patch
 delete mode 100644 meta/recipes-core/readline/readline-6.3/readline63-003
 create mode 100644 meta/recipes-core/systemd/systemd/0001-fix-build-on-uClibc-exp10.patch
 create mode 100644 meta/recipes-core/systemd/systemd/0022-Use-getenv-when-secure-versions-are-not-available.patch
 create mode 100644 meta/recipes-core/systemd/systemd/rules-whitelist-hd-devices.patch
 create mode 100644 meta/recipes-core/uclibc/uclibc-git/0001-fcntl-Add-AT_EMPTY_PATH-for-all-and-O_PATH-for-arm.patch
 create mode 100644 meta/recipes-core/uclibc/uclibc-git/0001-gcc5-optimizes-away-the-write-only-static-functions-.patch
 create mode 100644 meta/recipes-core/uclibc/uclibc-git/0001-wire-in-syncfs.patch
 create mode 100644 meta/recipes-core/uclibc/uclibc-git/CVE-2016-2224.patch
 create mode 100644 meta/recipes-core/uclibc/uclibc-git/CVE-2016-2225.patch
 create mode 100644 meta/recipes-core/util-linux/util-linux/runuser-l.pamd
 create mode 100644 meta/recipes-core/util-linux/util-linux/runuser.pamd
 create mode 100644 meta/recipes-devtools/ccache/files/0002-dev.mk.in-fix-file-name-too-long.patch
 create mode 100644 meta/recipes-devtools/dpkg/dpkg/CVE-2015-0860.patch
 create mode 100644 meta/recipes-devtools/e2fsprogs/e2fsprogs/copy-in-create-hardlinks-with-the-correct-directory-.patch
 create mode 100644 meta/recipes-devtools/file/file/host-file.patch
 create mode 100644 meta/recipes-devtools/gcc/gcc-4.8/0051-gcc-483-universal-initializer-no-warning.patch
 create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0065-gcc-483-universal-initializer-no-warning.patch
 create mode 100644 meta/recipes-devtools/gcc/gcc-5.2/0042-cxxflags-for-build.patch
 create mode 100644 meta/recipes-devtools/git/git-2.5.0/0008-CVE-2015-7545-1.patch
 create mode 100644 meta/recipes-devtools/git/git-2.5.0/0009-CVE-2015-7545-2.patch
 create mode 100644 meta/recipes-devtools/git/git-2.5.0/0010-CVE-2015-7545-3.patch
 create mode 100644 meta/recipes-devtools/git/git-2.5.0/0011-CVE-2015-7545-4.patch
 create mode 100644 meta/recipes-devtools/git/git-2.5.0/0012-CVE-2015-7545-5.patch
 create mode 100644 meta/recipes-devtools/libtool/libtool/0001-libtool-Fix-support-for-NIOS2-processor.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0001-libopkg-include-stdio.h-for-getting-FILE-defined.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0001-opkg_conf-create-opkg.lock-in-run-instead-of-var-run.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0001-string_util-New-file-with-bin_to_hex-function.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0002-md5-Add-md5_to_string-function.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0003-sha256-Add-sha256_to_string-function.patch
 create mode 100644 meta/recipes-devtools/opkg/opkg/0004-opkg_download-Use-short-cache-file-name.patch
 create mode 100644 meta/recipes-devtools/perl/perl/perl-errno-generation-gcc5.patch
 delete mode 100644 meta/recipes-devtools/pseudo/pseudo_1.7.3.bb
 create mode 100644 meta/recipes-devtools/pseudo/pseudo_1.7.4.bb
 create mode 100644 meta/recipes-devtools/python/python-smartpm/smart-cache.py-getPackages-matches-name-version.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-7295_1.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-7295_2.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-7295_3.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-7504.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-7512.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-8345.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2015-8504.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2016-1568.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2016-2197.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/CVE-2016-2198.patch
 create mode 100644 meta/recipes-devtools/qemu/qemu/no-valgrind.patch
 create mode 100644 meta/recipes-devtools/rpm/rpm/configure.ac-check-for-both-gpg2-and-gpg.patch
 create mode 100644 meta/recipes-devtools/subversion/subversion-1.8.13/subversion-CVE-2015-3184.patch
 create mode 100644 meta/recipes-devtools/subversion/subversion-1.8.13/subversion-CVE-2015-3187.patch
 create mode 100644 meta/recipes-devtools/syslinux/syslinux/0010-gcc46-compatibility.patch
 create mode 100644 meta/recipes-devtools/syslinux/syslinux/0011-mk-MMD-does-not-take-any-arguments.patch
 create mode 100644 meta/recipes-extended/bzip2/bzip2-1.0.6/fix-bunzip2-qt-returns-0-for-corrupt-archives.patch
 create mode 100644 meta/recipes-extended/foomatic/foomatic-filters-4.0.17/CVE-2015-8327.patch
 create mode 100644 meta/recipes-extended/foomatic/foomatic-filters-4.0.17/CVE-2015-8560.patch
 create mode 100644 meta/recipes-extended/ghostscript/ghostscript/png_mak.patch
 delete mode 100644 meta/recipes-extended/images/wic-image-minimal.bb
 delete mode 100644 meta/recipes-extended/images/wic-image-minimal.wks
 create mode 100644 meta/recipes-extended/iptables/iptables/0002-configure.ac-only-check-conntrack-when-libnfnetlink-enabled.patch
 create mode 100644 meta/recipes-extended/libaio/libaio/system-linkage.patch
 delete mode 100644 meta/recipes-extended/libarchive/libarchive/0001-Add-ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS-option.patch
 create mode 100644 meta/recipes-extended/libarchive/libarchive/libarchive-CVE-2015-2304.patch
 create mode 100644 meta/recipes-extended/libtirpc/libtirpc/va_list.patch
 create mode 100644 meta/recipes-extended/ltp/ltp/0001-replace-inline-with-static-inline-for-gcc-5.x.patch
 create mode 100644 meta/recipes-extended/pam/libpam/use-utmpx.patch
 delete mode 100644 meta/recipes-extended/rpcbind/rpcbind/0001-uclibc-nss.patch
 create mode 100644 meta/recipes-extended/rpcbind/rpcbind/cve-2015-7236.patch
 create mode 100644 meta/recipes-extended/screen/screen/0001-Fix-stack-overflow-due-to-too-deep-recursion.patch
 create mode 100644 meta/recipes-extended/sysstat/sysstat/0001-Include-needed-headers-explicitly.patch
 delete mode 100644 meta/recipes-extended/tzcode/tzcode-native_2015f.bb
 create mode 100644 meta/recipes-extended/tzcode/tzcode-native_2016a.bb
 delete mode 100644 meta/recipes-extended/tzdata/tzdata_2015f.bb
 create mode 100644 meta/recipes-extended/tzdata/tzdata_2016a.bb
 create mode 100644 meta/recipes-extended/unzip/unzip/CVE-2015-7696.patch
 create mode 100644 meta/recipes-extended/unzip/unzip/CVE-2015-7697.patch
 create mode 100644 meta/recipes-extended/unzip/unzip/cve-2014-9636.patch
 delete mode 100644 meta/recipes-extended/unzip/unzip/unzip-6.0_overflow3.diff
 create mode 100644 meta/recipes-gnome/gdk-pixbuf/gdk-pixbuf/CVE-2015-7674.patch
 create mode 100644 meta/recipes-gnome/gtk+/gtk+3/Do-not-try-to-initialize-GL-without-libGL.patch
 create mode 100644 meta/recipes-gnome/librsvg/librsvg/CVE-2015-7558_1.patch
 create mode 100644 meta/recipes-gnome/librsvg/librsvg/CVE-2015-7558_2.patch
 create mode 100644 meta/recipes-gnome/librsvg/librsvg/CVE-2015-7558_3.patch
 create mode 100644 meta/recipes-graphics/cairo/cairo/Manually-transpose-the-matrix-in-_cairo_gl_shader_bi.patch
 create mode 100644 meta/recipes-graphics/mesa/mesa-demos/0010-sharedtex_mt-fix-rendering-thread-hang.patch
 create mode 100644 meta/recipes-graphics/waffle/waffle/0001-third_party-threads-Use-PTHREAD_MUTEX_RECURSIVE-by-d.patch
 create mode 100644 meta/recipes-graphics/xorg-lib/libxcb/gcc-mips-pr68302-mips-workaround.patch
 create mode 100644 meta/recipes-graphics/xorg-lib/pixman/0001-v3-test-add-a-check-for-FE_DIVBYZERO.patch
 create mode 100644 meta/recipes-kernel/lttng/lttng-tools/0001-Fix-sessiond-disable-match-app-event-by-name.patch
 create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch
 create mode 100755 meta/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch
 create mode 100644 meta/recipes-multimedia/libpng/libpng-1.6.17/CVE-2015-8126_1.patch
 create mode 100644 meta/recipes-multimedia/libpng/libpng-1.6.17/CVE-2015-8126_2.patch
 create mode 100644 meta/recipes-multimedia/libpng/libpng-1.6.17/CVE-2015-8126_3.patch
 create mode 100644 meta/recipes-multimedia/libpng/libpng-1.6.17/CVE-2015-8126_4.patch
 create mode 100644 meta/recipes-multimedia/libpng/libpng-1.6.17/CVE-2015-8472.patch
 create mode 100644 meta/recipes-multimedia/libsndfile/files/libsndfile-fix-CVE-2014-9756.patch
 create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2015-8781.patch
 create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2015-8784.patch
 create mode 100644 meta/recipes-multimedia/pulseaudio/pulseaudio/0001-card-add-pa_card_profile.ports.patch
 create mode 100644 meta/recipes-multimedia/pulseaudio/pulseaudio/0002-alsa-bluetooth-fail-if-user-requested-profile-doesn-.patch
 create mode 100644 meta/recipes-multimedia/pulseaudio/pulseaudio/0003-card-move-profile-selection-after-pa_card_new.patch
 create mode 100644 meta/recipes-multimedia/pulseaudio/pulseaudio/0004-alsa-set-availability-for-some-unavailable-profiles.patch
 delete mode 100644 meta/recipes-qt/qt4/qt4-4.8.7/0028-Don-t-crash-on-broken-GIF-images.patch
 create mode 100644 meta/recipes-qt/qt4/qt4-4.8.7/0034-Fix-kmap2qmap-build-with-clang.patch
 create mode 100644 meta/recipes-support/curl/curl/CVE-2016-0754.patch
 create mode 100644 meta/recipes-support/curl/curl/CVE-2016-0755.patch
 create mode 100644 meta/recipes-support/gmp/gmp-4.2.1/Use-__gnu_inline__-attribute.patch
 delete mode 100644 meta/recipes-support/gmp/gmp-4.2.1/disable-stdc.patch
 create mode 100644 meta/recipes-support/icu/icu/fix-install-manx.patch
 create mode 100644 meta/recipes-support/libbsd/files/CVE-2016-2090.patch
 create mode 100644 meta/recipes-support/libgcrypt/files/CVE-2015-7511_1.patch
 create mode 100644 meta/recipes-support/libgcrypt/files/CVE-2015-7511_2.patch
 create mode 100644 meta/recipes-support/libgpg-error/libgpg-error/0001-libgpg-error-Add-nios2-support.patch
 delete mode 100644 meta/recipes-support/libpcre/libpcre_8.37.bb
 create mode 100644 meta/recipes-support/libpcre/libpcre_8.38.bb
 create mode 100644 meta/recipes-support/libunwind/libunwind-1.1/Add-AO_REQUIRE_CAS-to-fix-build-on-ARM-v6.patch
 create mode 100644 meta/recipes-support/libxslt/libxslt/CVE-2015-7995.patch
 create mode 100644 meta/recipes-support/nettle/nettle-3.1.1/CVE-2015-8803_8805.patch
 create mode 100644 meta/recipes-support/nettle/nettle-3.1.1/CVE-2015-8804.patch
 create mode 100644 meta/recipes-support/user-creation/files/system-xuser.conf
 create mode 100644 meta/recipes-support/vte/vte-0.28.2/cve-2012-2738.patch
 create mode 100644 meta/site/nios2-linux
 create mode 100755 scripts/contrib/devtool-stress.py
 create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/arm/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/i386/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/mips/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/mips64/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/powerpc/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/qemu/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto-tiny_4.1.bbappend
 create mode 100644 scripts/lib/bsp/substrate/target/arch/x86_64/recipes-kernel/linux/linux-yocto_4.1.bbappend
 create mode 100644 scripts/lib/devtool/runqemu.py
 create mode 100644 scripts/lib/devtool/search.py

diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake
index e3d138b..981b2c0 100755
--- a/bitbake/bin/bitbake
+++ b/bitbake/bin/bitbake
@@ -35,7 +35,7 @@ except RuntimeError as exc:
 from bb import cookerdata
 from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException
 
-__version__ = "1.27.1"
+__version__ = "1.28.0"
 
 if __name__ == "__main__":
     if __version__ != bb.__version__:
diff --git a/bitbake/bin/bitbake-worker b/bitbake/bin/bitbake-worker
index af17b87..3390f63 100755
--- a/bitbake/bin/bitbake-worker
+++ b/bitbake/bin/bitbake-worker
@@ -10,6 +10,7 @@ import bb
 import select
 import errno
 import signal
+from multiprocessing import Lock
 
 # Users shouldn't be running this code directly
 if len(sys.argv) != 2 or not sys.argv[1].startswith("decafbad"):
@@ -44,6 +45,9 @@ except ImportError:
 
 worker_pipe = sys.stdout.fileno()
 bb.utils.nonblockingfd(worker_pipe)
+# Need to guard against multiprocessing being used in child processes
+# and multiple processes trying to write to the parent at the same time
+worker_pipe_lock = None
 
 handler = bb.event.LogHandler()
 logger.addHandler(handler)
@@ -85,10 +89,13 @@ def worker_flush():
 
 def worker_child_fire(event, d):
     global worker_pipe
+    global worker_pipe_lock
 
     data = "<event>" + pickle.dumps(event) + "</event>"
     try:
+        worker_pipe_lock.acquire()
         worker_pipe.write(data)
+        worker_pipe_lock.release()
     except IOError:
         sigterm_handler(None, None)
         raise
@@ -157,6 +164,7 @@ def fork_off_task(cfg, data, workerdata, fn, task, taskname, appends, taskdepdat
     if pid == 0:
         def child():
             global worker_pipe
+            global worker_pipe_lock
             pipein.close()
 
             signal.signal(signal.SIGTERM, sigterm_handler)
@@ -169,6 +177,7 @@ def fork_off_task(cfg, data, workerdata, fn, task, taskname, appends, taskdepdat
             bb.event.worker_pid = os.getpid()
             bb.event.worker_fire = worker_child_fire
             worker_pipe = pipeout
+            worker_pipe_lock = Lock()
 
             # Make the child the process group leader and ensure no
             # child process will be controlled by the current terminal
diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster
index 411ce2c..2c3432c 100755
--- a/bitbake/bin/toaster
+++ b/bitbake/bin/toaster
@@ -54,35 +54,55 @@ webserverStartAll()
     fi
 
     retval=0
-    if [ "$TOASTER_MANAGED" '=' '1' ]; then
-        python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1
-    else
-        python $BBBASEDIR/lib/toaster/manage.py syncdb --noinput || retval=1
-    fi
+    # you can always add a superuser later via
+    # python bitbake/lib/toaster/manage.py python manage.py createsuperuser --username=<ME>
+    python $BBBASEDIR/lib/toaster/manage.py syncdb --noinput || retval=1
+
     python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2
+
     if [ $retval -eq 1 ]; then
-        echo "Failed db sync, stopping system start" 1>&2
-    elif [ $retval -eq 2 ]; then
-        printf "\nError on migration, trying to recover... \n"
+        echo "Failed db sync, aborting system start" 1>&2
+        return $retval
+    fi
+
+    python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
+
+    if [ $retval -eq 1 ]; then
+        printf "\nError on orm migration, rolling back...\n"
         python $BBBASEDIR/lib/toaster/manage.py migrate orm 0001_initial --fake
-        retval=0
-        python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
+        return $retval
     fi
+
+    python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
+
+    if [ $retval -eq 1 ]; then
+        printf "\nError on bldcontrol migration, rolling back...\n"
+        python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol 0001_initial --fake
+        return $retval
+    fi
+
     if [ "$TOASTER_MANAGED" = '1' ]; then
-        python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
-        python $BBBASEDIR/lib/toaster/manage.py checksettings  --traceback || retval=1
+        python $BBBASEDIR/lib/toaster/manage.py checksettings --traceback || retval=1
     fi
-    if [ $retval -eq 0 ]; then
-        echo "Starting webserver..."
-        python $BBBASEDIR/lib/toaster/manage.py runserver "0.0.0.0:$WEB_PORT" </dev/null >>${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
-        sleep 1
-        if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then
-            retval=1
-            rm "${BUILDDIR}/.toastermain.pid"
-        else
-            echo "Webserver address:  http://0.0.0.0:$WEB_PORT/"
-        fi
+
+    if [ $retval -eq 1 ]; then
+        printf "\nError while checking settings; aborting\n"
+        return $retval
+    fi
+
+    echo "Starting webserver..."
+
+    python $BBBASEDIR/lib/toaster/manage.py runserver "0.0.0.0:$WEB_PORT" </dev/null >>${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid
+
+    sleep 1
+
+    if ! cat "${BUILDDIR}/.toastermain.pid" | xargs -I{} kill -0 {} ; then
+        retval=1
+        rm "${BUILDDIR}/.toastermain.pid"
+    else
+        echo "Webserver address:  http://0.0.0.0:$WEB_PORT/"
     fi
+
     return $retval
 }
 
@@ -156,6 +176,8 @@ else
     TOASTER=$0
 fi
 
+[ `basename \"$0\"` = `basename \"${TOASTER}\"` ] && TOASTER_MANAGED=1
+
 BBBASEDIR=`dirname $TOASTER`/..
 
 RUNNING=0
@@ -163,7 +185,34 @@ RUNNING=0
 NOTOASTERUI=0
 WEBSERVER=1
 TOASTER_BRBE=""
-WEB_PORT="8000"
+if [ "$WEB_PORT" = "" ]; then
+    WEB_PORT="8000"
+fi
+# this is the configuraton file we are using for toaster
+# note default is assuming yocto. Override this if you are
+# running in a pure OE environment and use the toasterconf.json
+# in meta/conf/toasterconf.json
+# note: for future there are a number of relative path assumptions
+# in the local layers that currently prevent using an arbitrary
+# toasterconf.json
+if [ "$TOASTER_CONF" = "" ]; then
+    TOASTER_CONF="$(dirname $TOASTER)/../../meta-yocto/conf/toasterconf.json"
+    export TOASTER_CONF=$(python -c "import os; print os.path.realpath('$TOASTER_CONF')")
+fi
+if [ ! -f $TOASTER_CONF ]; then
+    echo "$TOASTER_CONF configuration file not found. set TOASTER_CONF to specify a path"
+    [ "$TOASTER_MANAGED" = '1' ] && exit 1 || return 1
+fi
+# this defines the dir toaster will use for
+# 1) clones of layers (in _toaster_clones )
+# 2) the build dir (in build)
+# 3) the sqlite db if that is being used.
+# 4) pid's we need to clean up on exit/shutdown
+# note: for future. in order to make this an arbitrary directory, we need to
+# make sure that the toaster.sqlite file doesn't default to `pwd` like it currently does.
+export TOASTER_DIR=`pwd`
+
+
 NOBROWSER=0
 
 for param in $*; do
@@ -185,9 +234,7 @@ for param in $*; do
     esac
 done
 
-[ -n "${BASH_SOURCE}" ] && SRCFILE=${BASH_SOURCE} || SRCFILE=$_
-
-if [ `basename \"$0\"` = `basename \"${SRCFILE}\"` ]; then
+if [ "$TOASTER_MANAGED" = '1' ]; then
     # We are called as standalone. We refuse to run in a build environment - we need the interactive mode for that.
     # Start just the web server, point the web browser to the interface, and start any Django services.
 
@@ -197,7 +244,7 @@ if [ `basename \"$0\"` = `basename \"${SRCFILE}\"` ]; then
     fi
 
     if [ -n "$BUILDDIR" ]; then
-        printf "Error: It looks like you sourced oe-init-build-env. Toaster cannot start in build mode from an oe-core build environment.\n You should be starting Toaster from a new terminal window." 1>&2
+        printf "Error: It looks like you sourced oe-init-build-env. Toaster cannot start in build mode from an oe-core build environment.\n You should be starting Toaster from a new terminal window.\n" 1>&2
         exit 1
     fi
 
@@ -234,7 +281,6 @@ if [ `basename \"$0\"` = `basename \"${SRCFILE}\"` ]; then
             do_cleanup
         fi
     }
-    TOASTER_MANAGED=1
     export TOASTER_MANAGED=1
     if [ $WEBSERVER -gt 0 ] && ! webserverStartAll; then
         echo "Failed to start the web server, stopping" 1>&2
diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml
index 05e1b95..e5aeffc 100644
--- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml
+++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml
@@ -856,6 +856,56 @@
             </glossdef>
         </glossentry>
 
+        <glossentry id='var-BB_TASK_IONICE_LEVEL'><glossterm>BB_TASK_IONICE_LEVEL</glossterm>
+            <glossdef>
+                <para>
+                    Allows adjustment of a task's Input/Output priority.
+                    During Autobuilder testing, random failures can occur
+                    for tasks due to I/O starvation.
+                    These failures occur during various QEMU runtime timeouts.
+                    You can use the <filename>BB_TASK_IONICE_LEVEL</filename>
+                    variable to adjust the I/O priority of these tasks.
+                    <note>
+                        This variable works similarly to the
+                        <link linkend='var-BB_TASK_NICE_LEVEL'><filename>BB_TASK_NICE_LEVEL</filename></link>
+                        variable except with a task's I/O priorities.
+                    </note>
+                </para>
+
+                <para>
+                    Set the variable as follows:
+                    <literallayout class='monospaced'>
+     BB_TASK_IONICE_LEVEL = "<replaceable>class</replaceable>.<replaceable>prio</replaceable>"
+                    </literallayout>
+                    For <replaceable>class</replaceable>, the default value is
+                    "2", which is a best effort.
+                    You can use "1" for realtime and "3" for idle.
+                    If you want to use realtime, you must have superuser
+                    privileges.
+                </para>
+
+                <para>
+                    For <replaceable>prio</replaceable>, you can use any
+                    value from "0", which is the highest priority, to "7",
+                    which is the lowest.
+                    The default value is "4".
+                    You do not need any special privileges to use this range
+                    of priority values.
+                    <note>
+                        In order for your I/O priority settings to take effect,
+                        you need the Completely Fair Queuing (CFQ) Scheduler
+                        selected for the backing block device.
+                        To select the scheduler, use the following command form
+                        where <replaceable>device</replaceable> is the device
+                        (e.g. sda, sdb, and so forth):
+                        <literallayout class='monospaced'>
+      $ sudo sh -c “echo cfq > /sys/block/<replaceable>device</replaceable>/queu/scheduler
+                        </literallayout>
+                    </note>
+                </para>
+            </glossdef>
+        </glossentry>
+
         <glossentry id='var-BB_TASK_NICE_LEVEL'><glossterm>BB_TASK_NICE_LEVEL</glossterm>
             <glossdef>
                 <para>
@@ -1173,6 +1223,15 @@
             </glossdef>
         </glossentry>
 
+        <glossentry id='var-BBTARGETS'><glossterm>BBTARGETS</glossterm>
+            <glossdef>
+                <para>
+                    Allows you to use a configuration file to add to the list
+                    of command-line target recipes you want to build.
+                </para>
+            </glossdef>
+        </glossentry>
+
         <glossentry id='var-BBVERSIONS'><glossterm>BBVERSIONS</glossterm>
             <glossdef>
                 <para>
diff --git a/bitbake/lib/bb/__init__.py b/bitbake/lib/bb/__init__.py
index 1f7946e..ac62d26 100644
--- a/bitbake/lib/bb/__init__.py
+++ b/bitbake/lib/bb/__init__.py
@@ -21,7 +21,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-__version__ = "1.27.1"
+__version__ = "1.28.0"
 
 import sys
 if sys.version_info < (2, 7, 3):
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py
index 948c395..22428a6 100644
--- a/bitbake/lib/bb/build.py
+++ b/bitbake/lib/bb/build.py
@@ -413,6 +413,13 @@ def _exec_task(fn, task, d, quieterr):
         nice = int(nice) - curnice
         newnice = os.nice(nice)
         logger.debug(1, "Renice to %s " % newnice)
+    ionice = localdata.getVar("BB_TASK_IONICE_LEVEL", True)
+    if ionice:
+        try:
+            cls, prio = ionice.split(".", 1)
+            bb.utils.ioprio_set(os.getpid(), int(cls), int(prio))
+        except:
+            bb.warn("Invalid ionice level %s" % ionice)
 
     bb.utils.mkdirhier(tempdir)
 
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
index 398c1d6..74106d1 100644
--- a/bitbake/lib/bb/command.py
+++ b/bitbake/lib/bb/command.py
@@ -181,6 +181,16 @@ class CommandsSync:
         value = str(params[1])
         command.cooker.data.setVar(varname, value)
 
+    def getSetVariable(self, command, params):
+        """
+        Read the value of a variable from data and set it into the datastore
+        which effectively expands and locks the value.
+        """
+        varname = params[0]
+        result = self.getVariable(command, params)
+        command.cooker.data.setVar(varname, result)
+        return result
+
     def setConfig(self, command, params):
         """
         Set the value of variable in configuration
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index a0d7d59..4df8881 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -255,6 +255,11 @@ class BBCooker:
         self.state = state.initial
         self.caches_array = []
 
+        # Need to preserve BB_CONSOLELOG over resets
+        consolelog = None
+        if hasattr(self, "data"):
+            consolelog = self.data.getVar("BB_CONSOLELOG", True)
+
         if CookerFeatures.BASEDATASTORE_TRACKING in self.featureset:
             self.enableDataTracking()
 
@@ -281,6 +286,8 @@ class BBCooker:
         self.data = self.databuilder.data
         self.data_hash = self.databuilder.data_hash
 
+        if consolelog:
+            self.data.setVar("BB_CONSOLELOG", consolelog)
 
         # we log all events to a file if so directed
         if self.configuration.writeeventlog:
@@ -531,6 +538,11 @@ class BBCooker:
         for o in options:
             if o in ['prefile', 'postfile']:
                 clean = False
+                server_val = getattr(self.configuration, "%s_server" % o)
+                if not options[o] and server_val:
+                    # restore value provided on server start
+                    setattr(self.configuration, o, server_val)
+                    continue
             setattr(self.configuration, o, options[o])
         for k in bb.utils.approved_variables():
             if k in environment and k not in self.configuration.env:
@@ -1391,10 +1403,28 @@ class BBCooker:
         build.reset_cache()
         self.buildSetVars()
 
+        # If we are told to do the None task then query the default task
+        if (task == None):
+            task = self.configuration.cmd
+
+        if not task.startswith("do_"):
+            task = "do_%s" % task
+
         taskdata, runlist, fulltargetlist = self.buildTaskData(targets, task, self.configuration.abort)
 
         buildname = self.data.getVar("BUILDNAME", False)
-        bb.event.fire(bb.event.BuildStarted(buildname, fulltargetlist), self.data)
+
+        # make targets to always look as <target>:do_<task>
+        ntargets = []
+        for target in fulltargetlist:
+            if ":" in target:
+                if ":do_" not in target:
+                    target = "%s:do_%s" % tuple(target.split(":", 1))
+            else:
+                target = "%s:%s" % (target, task)
+            ntargets.append(target)
+
+        bb.event.fire(bb.event.BuildStarted(buildname, ntargets), self.data)
 
         rq = bb.runqueue.RunQueue(self, self.data, self.recipecache, taskdata, runlist)
         if 'universe' in targets:
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
index f19c283..671c0cb 100644
--- a/bitbake/lib/bb/cookerdata.py
+++ b/bitbake/lib/bb/cookerdata.py
@@ -63,9 +63,9 @@ class ConfigParameters(object):
             raise Exception("Unable to set configuration option 'cmd' on the server: %s" % error)
 
         if not self.options.pkgs_to_build:
-            bbpkgs, error = server.runCommand(["getVariable", "BBPKGS"])
+            bbpkgs, error = server.runCommand(["getVariable", "BBTARGETS"])
             if error:
-                raise Exception("Unable to get the value of BBPKGS from the server: %s" % error)
+                raise Exception("Unable to get the value of BBTARGETS from the server: %s" % error)
             if bbpkgs:
                 self.options.pkgs_to_build.extend(bbpkgs.split())
 
@@ -129,6 +129,8 @@ class CookerConfiguration(object):
         self.extra_assume_provided = []
         self.prefile = []
         self.postfile = []
+        self.prefile_server = []
+        self.postfile_server = []
         self.debug = 0
         self.cmd = None
         self.abort = True
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index 288a1c8..a9c044b 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -955,7 +955,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
                 origud.method.download(origud, ld)
                 if hasattr(origud.method,"build_mirror_data"):
                     origud.method.build_mirror_data(origud, ld)
-            return ud.localpath
+            return origud.localpath
         # Otherwise the result is a local file:// and we symlink to it
         if not os.path.exists(origud.localpath):
             if os.path.islink(origud.localpath):
diff --git a/bitbake/lib/bb/fetch2/hg.py b/bitbake/lib/bb/fetch2/hg.py
index bbb4ed9..3b743ff 100644
--- a/bitbake/lib/bb/fetch2/hg.py
+++ b/bitbake/lib/bb/fetch2/hg.py
@@ -28,6 +28,7 @@ import os
 import sys
 import logging
 import bb
+import errno
 from bb import data
 from bb.fetch2 import FetchMethod
 from bb.fetch2 import FetchError
diff --git a/bitbake/lib/bb/fetch2/svn.py b/bitbake/lib/bb/fetch2/svn.py
index 1733c2b..8a29193 100644
--- a/bitbake/lib/bb/fetch2/svn.py
+++ b/bitbake/lib/bb/fetch2/svn.py
@@ -54,6 +54,11 @@ class Svn(FetchMethod):
 
         ud.module = ud.parm["module"]
 
+        if not "path_spec" in ud.parm:
+            ud.path_spec = ud.module
+        else:
+            ud.path_spec = ud.parm["path_spec"]
+
         # Create paths to svn checkouts
         relpath = self._strip_leading_slashes(ud.path)
         ud.pkgdir = os.path.join(data.expand('${SVNDIR}', d), ud.host, relpath)
@@ -102,7 +107,7 @@ class Svn(FetchMethod):
 
             if command == "fetch":
                 transportuser = ud.parm.get("transportuser", "")
-                svncmd = "%s co %s %s://%s%s/%s%s %s" % (ud.basecmd, " ".join(options), proto, transportuser, svnroot, ud.module, suffix, ud.module)
+                svncmd = "%s co %s %s://%s%s/%s%s %s" % (ud.basecmd, " ".join(options), proto, transportuser, svnroot, ud.module, suffix, ud.path_spec)
             elif command == "update":
                 svncmd = "%s update %s" % (ud.basecmd, " ".join(options))
             else:
@@ -149,7 +154,7 @@ class Svn(FetchMethod):
 
         os.chdir(ud.pkgdir)
         # tar them up to a defined filename
-        runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.module), d, cleanup = [ud.localpath])
+        runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.path_spec), d, cleanup = [ud.localpath])
 
     def clean(self, ud, d):
         """ Clean SVN specific files and dirs """
diff --git a/bitbake/lib/bb/main.py b/bitbake/lib/bb/main.py
index 8762f72..c8530fc 100755
--- a/bitbake/lib/bb/main.py
+++ b/bitbake/lib/bb/main.py
@@ -383,6 +383,13 @@ def bitbake_main(configParams, configuration):
         # Collect the feature set for the UI
         featureset = getattr(ui_module, "featureSet", [])
 
+    if configParams.server_only:
+        for param in ('prefile', 'postfile'):
+            value = getattr(configParams, param)
+            if value:
+                setattr(configuration, "%s_server" % param, value)
+                param = "%s_server" % param
+
     if not configParams.remote_server:
         # we start a server with a given configuration
         server = start_server(servermodule, configParams, configuration, featureset)
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 2b71eed..878028a 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -797,6 +797,15 @@ class RunQueueData:
                         st = "do_%s" % st
                     invalidate_task(fn, st, True)
 
+        # Create and print to the logs a virtual/xxxx -> PN (fn) table
+        virtmap = taskData.get_providermap()
+        virtpnmap = {}
+        for v in virtmap:
+            virtpnmap[v] = self.dataCache.pkg_fn[virtmap[v]]
+            bb.debug(2, "%s resolved to: %s (%s)" % (v, virtpnmap[v], virtmap[v]))
+        if hasattr(bb.parse.siggen, "tasks_resolved"):
+            bb.parse.siggen.tasks_resolved(virtmap, virtpnmap, self.dataCache)
+
         # Iterate over the task list and call into the siggen code
         dealtwith = set()
         todeal = set(range(len(self.runq_fnid)))
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py
index 2985272..0352e45 100644
--- a/bitbake/lib/bb/siggen.py
+++ b/bitbake/lib/bb/siggen.py
@@ -80,6 +80,7 @@ class SignatureGeneratorBasic(SignatureGenerator):
         self.taskdeps = {}
         self.runtaskdeps = {}
         self.file_checksum_values = {}
+        self.taints = {}
         self.gendeps = {}
         self.lookupcache = {}
         self.pkgnameextract = re.compile("(?P<fn>.*)\..*")
@@ -199,11 +200,14 @@ class SignatureGeneratorBasic(SignatureGenerator):
         if 'nostamp' in taskdep and task in taskdep['nostamp']:
             # Nostamp tasks need an implicit taint so that they force any dependent tasks to run
             import uuid
-            data = data + str(uuid.uuid4())
+            taint = str(uuid.uuid4())
+            data = data + taint
+            self.taints[k] = "nostamp:" + taint
 
         taint = self.read_taint(fn, task, dataCache.stamp[fn])
         if taint:
             data = data + taint
+            self.taints[k] = taint
             logger.warn("%s is tainted from a forced run" % k)
 
         h = hashlib.md5(data).hexdigest()
@@ -247,6 +251,10 @@ class SignatureGeneratorBasic(SignatureGenerator):
         if taint:
             data['taint'] = taint
 
+        if runtime and k in self.taints:
+            if 'nostamp:' in self.taints[k]:
+                data['taint'] = self.taints[k]
+
         fd, tmpfile = tempfile.mkstemp(dir=os.path.dirname(sigfile), prefix="sigtask.")
         try:
             with os.fdopen(fd, "wb") as stream:
diff --git a/bitbake/lib/bb/taskdata.py b/bitbake/lib/bb/taskdata.py
index 5fab704..4d12b33 100644
--- a/bitbake/lib/bb/taskdata.py
+++ b/bitbake/lib/bb/taskdata.py
@@ -612,6 +612,18 @@ class TaskData:
                 break
         # self.dump_data()
 
+    def get_providermap(self):
+        virts = []
+        virtmap = {}
+
+        for name in self.build_names_index:
+            if name.startswith("virtual/"):
+                virts.append(name)
+        for v in virts:
+            if self.have_build_target(v):
+                virtmap[v] = self.fn_index[self.get_provider(v)[0]]
+        return virtmap
+
     def dump_data(self):
         """
         Dump some debug information on the internal data structures
diff --git a/bitbake/lib/bb/tests/utils.py b/bitbake/lib/bb/tests/utils.py
index 9171509..a035ccf 100644
--- a/bitbake/lib/bb/tests/utils.py
+++ b/bitbake/lib/bb/tests/utils.py
@@ -376,3 +376,206 @@ do_functionname() {
         (updated, newlines) = bb.utils.edit_metadata(self._origfile.splitlines(True), varlist, handle_var)
         self.assertTrue(updated, 'List should be updated but isn\'t')
         self.assertEqual(newlines, newfile5.splitlines(True))
+
+
+class EditBbLayersConf(unittest.TestCase):
+
+    def _test_bblayers_edit(self, before, after, add, remove, notadded, notremoved):
+        with tempfile.NamedTemporaryFile('w', delete=False) as tf:
+            tf.write(before)
+            tf.close()
+            try:
+                actual_notadded, actual_notremoved = bb.utils.edit_bblayers_conf(tf.name, add, remove)
+                with open(tf.name) as f:
+                    actual_after = f.readlines()
+                self.assertEqual(after.splitlines(True), actual_after)
+                self.assertEqual(notadded, actual_notadded)
+                self.assertEqual(notremoved, actual_notremoved)
+            finally:
+                os.remove(tf.name)
+
+
+    def test_bblayers_remove(self):
+        before = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  /home/user/path/subpath/layer3 \
+  /home/user/path/layer4 \
+  "
+"""
+        after = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  /home/user/path/layer1 \
+  /home/user/path/subpath/layer3 \
+  /home/user/path/layer4 \
+  "
+"""
+        self._test_bblayers_edit(before, after,
+                                 None,
+                                 '/home/user/path/layer2',
+                                 [],
+                                 [])
+
+
+    def test_bblayers_add(self):
+        before = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  /home/user/path/subpath/layer3 \
+  /home/user/path/layer4 \
+  "
+"""
+        after = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  /home/user/path/subpath/layer3 \
+  /home/user/path/layer4 \
+  /other/path/to/layer5 \
+  "
+"""
+        self._test_bblayers_edit(before, after,
+                                 '/other/path/to/layer5/',
+                                 None,
+                                 [],
+                                 [])
+
+
+    def test_bblayers_add_remove(self):
+        before = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  /home/user/path/subpath/layer3 \
+  /home/user/path/layer4 \
+  "
+"""
+        after = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  /home/user/path/layer4 \
+  /other/path/to/layer5 \
+  "
+"""
+        self._test_bblayers_edit(before, after,
+                                 ['/other/path/to/layer5', '/home/user/path/layer2/'], '/home/user/path/subpath/layer3/',
+                                 ['/home/user/path/layer2'],
+                                 [])
+
+
+    def test_bblayers_add_remove_home(self):
+        before = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  ~/path/layer1 \
+  ~/path/layer2 \
+  ~/otherpath/layer3 \
+  ~/path/layer4 \
+  "
+"""
+        after = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS = " \
+  ~/path/layer2 \
+  ~/path/layer4 \
+  ~/path2/layer5 \
+  "
+"""
+        self._test_bblayers_edit(before, after,
+                                 [os.environ['HOME'] + '/path/layer4', '~/path2/layer5'],
+                                 [os.environ['HOME'] + '/otherpath/layer3', '~/path/layer1', '~/path/notinlist'],
+                                 [os.environ['HOME'] + '/path/layer4'],
+                                 ['~/path/notinlist'])
+
+
+    def test_bblayers_add_remove_plusequals(self):
+        before = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS += " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  "
+"""
+        after = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS += " \
+  /home/user/path/layer2 \
+  /home/user/path/layer3 \
+  "
+"""
+        self._test_bblayers_edit(before, after,
+                                 '/home/user/path/layer3',
+                                 '/home/user/path/layer1',
+                                 [],
+                                 [])
+
+
+    def test_bblayers_add_remove_plusequals2(self):
+        before = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS += " \
+  /home/user/path/layer1 \
+  /home/user/path/layer2 \
+  /home/user/path/layer3 \
+  "
+BBLAYERS += "/home/user/path/layer4"
+BBLAYERS += "/home/user/path/layer5"
+"""
+        after = r"""
+# A comment
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+BBLAYERS += " \
+  /home/user/path/layer2 \
+  /home/user/path/layer3 \
+  "
+BBLAYERS += "/home/user/path/layer5"
+BBLAYERS += "/home/user/otherpath/layer6"
+"""
+        self._test_bblayers_edit(before, after,
+                                 ['/home/user/otherpath/layer6', '/home/user/path/layer3'], ['/home/user/path/layer1', '/home/user/path/layer4', '/home/user/path/layer7'],
+                                 ['/home/user/path/layer3'],
+                                 ['/home/user/path/layer7'])
diff --git a/bitbake/lib/bb/tinfoil.py b/bitbake/lib/bb/tinfoil.py
index 1ea46d8..7aa653f 100644
--- a/bitbake/lib/bb/tinfoil.py
+++ b/bitbake/lib/bb/tinfoil.py
@@ -36,13 +36,13 @@ class Tinfoil:
 
         # Set up logging
         self.logger = logging.getLogger('BitBake')
-        console = logging.StreamHandler(output)
-        bb.msg.addDefaultlogFilter(console)
+        self._log_hdlr = logging.StreamHandler(output)
+        bb.msg.addDefaultlogFilter(self._log_hdlr)
         format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s")
         if output.isatty():
             format.enable_color()
-        console.setFormatter(format)
-        self.logger.addHandler(console)
+        self._log_hdlr.setFormatter(format)
+        self.logger.addHandler(self._log_hdlr)
 
         self.config = CookerConfiguration()
         configparams = TinfoilConfigParameters(parse_only=True)
@@ -88,6 +88,7 @@ class Tinfoil:
         self.cooker.shutdown(force=True)
         self.cooker.post_serve()
         self.cooker.unlockBitbake()
+        self.logger.removeHandler(self._log_hdlr)
 
 class TinfoilConfigParameters(ConfigParameters):
 
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index 6e313fe..78f1e92 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -66,6 +66,7 @@ class ORMWrapper(object):
 
     def __init__(self):
         self.layer_version_objects = []
+        self.layer_version_built = []
         self.task_objects = {}
         self.recipe_objects = {}
 
@@ -94,8 +95,8 @@ class ORMWrapper(object):
 
         created = False
         if not key in vars(self)[dictname].keys():
-            vars(self)[dictname][key] = clazz.objects.create(**kwargs)
-            created = True
+            vars(self)[dictname][key], created = \
+                clazz.objects.get_or_create(**kwargs)
 
         return (vars(self)[dictname][key], created)
 
@@ -161,8 +162,6 @@ class ORMWrapper(object):
             build.bitbake_version=build_info['bitbake_version']
             build.save()
 
-            Target.objects.filter(build = build).delete()
-
         else:
             build = Build.objects.create(
                                     project = prj,
@@ -183,18 +182,26 @@ class ORMWrapper(object):
 
         return build
 
-    def create_target_objects(self, target_info):
-        assert 'build' in target_info
-        assert 'targets' in target_info
-
-        targets = []
-        for tgt_name in target_info['targets']:
-            tgt_object = Target.objects.create( build = target_info['build'],
-                                    target = tgt_name,
-                                    is_image = False,
-                                    )
-            targets.append(tgt_object)
-        return targets
+    @staticmethod
+    def get_or_create_targets(target_info):
+        result = []
+        for target in target_info['targets']:
+            task = ''
+            if ':' in target:
+                target, task = target.split(':', 1)
+            if task.startswith('do_'):
+                task = task[3:]
+            if task == 'build':
+                task = ''
+            obj, created = Target.objects.get_or_create(build=target_info['build'],
+                                                        target=target)
+            if created:
+                obj.is_image = False
+                if task:
+                    obj.task = task
+                obj.save()
+            result.append(obj)
+        return result
 
     def update_build_object(self, build, errors, warnings, taskfailures):
         assert isinstance(build,Build)
@@ -269,23 +276,66 @@ class ORMWrapper(object):
 
         assert not recipe_information['file_path'].startswith("/")      # we should have layer-relative paths at all times
 
-        recipe_object, created = self._cached_get_or_create(Recipe, layer_version=recipe_information['layer_version'],
+
+        def update_recipe_obj(recipe_object):
+            object_changed = False
+            for v in vars(recipe_object):
+                if v in recipe_information.keys():
+                    object_changed = True
+                    vars(recipe_object)[v] = recipe_information[v]
+
+            if object_changed:
+                recipe_object.save()
+
+        recipe, created = self._cached_get_or_create(Recipe, layer_version=recipe_information['layer_version'],
                                      file_path=recipe_information['file_path'], pathflags = recipe_information['pathflags'])
-        if created and must_exist:
-            raise NotExisting("Recipe object created when expected to exist", recipe_information)
 
-        object_changed = False
-        for v in vars(recipe_object):
-            if v in recipe_information.keys():
-                object_changed = True
-                vars(recipe_object)[v] = recipe_information[v]
+        update_recipe_obj(recipe)
 
-        if object_changed:
-            recipe_object.save()
+        built_recipe = None
+        # Create a copy of the recipe for historical puposes and update it
+        for built_layer in self.layer_version_built:
+            if built_layer.layer == recipe_information['layer_version'].layer:
+                built_recipe, c = self._cached_get_or_create(Recipe,
+                        layer_version=built_layer,
+                        file_path=recipe_information['file_path'],
+                        pathflags = recipe_information['pathflags'])
+                update_recipe_obj(built_recipe)
+                break
 
-        return recipe_object
+
+        # If we're in analysis mode then we are wholly responsible for the data
+        # and therefore we return the 'real' recipe rather than the build
+        # history copy of the recipe.
+        if  recipe_information['layer_version'].build is not None and \
+            recipe_information['layer_version'].build.project == \
+                Project.objects.get_default_project():
+            return recipe
+
+        return built_recipe
 
     def get_update_layer_version_object(self, build_obj, layer_obj, layer_version_information):
+        if isinstance(layer_obj, Layer_Version):
+            # We already found our layer version for this build so just
+            # update it with the new build information
+            logger.debug("We found our layer from toaster")
+            layer_obj.local_path = layer_version_information['local_path']
+            layer_obj.save()
+            self.layer_version_objects.append(layer_obj)
+
+            # create a new copy of this layer version as a snapshot for
+            # historical purposes
+            layer_copy, c = Layer_Version.objects.get_or_create(build=build_obj,
+                            layer=layer_obj.layer,
+                            commit=layer_version_information['commit'],
+                            local_path = layer_version_information['local_path'],
+                            )
+            logger.info("created new historical layer version %d", layer_copy.pk)
+
+            self.layer_version_built.append(layer_copy)
+
+            return layer_obj
+
         assert isinstance(build_obj, Build)
         assert isinstance(layer_obj, Layer)
         assert 'branch' in layer_version_information
@@ -293,14 +343,20 @@ class ORMWrapper(object):
         assert 'priority' in layer_version_information
         assert 'local_path' in layer_version_information
 
+        # If we're doing a command line build then associate this new layer with the
+        # project to avoid it 'contaminating' toaster data
+        project = None
+        if build_obj.project == Project.objects.get_default_project():
+            project = build_obj.project
+
         layer_version_object, _ = Layer_Version.objects.get_or_create(
-                                    build = build_obj,
-                                    layer = layer_obj,
-                                    branch = layer_version_information['branch'],
-                                    commit = layer_version_information['commit'],
-                                    priority = layer_version_information['priority'],
-                                    local_path = layer_version_information['local_path'],
-                                    )
+                                  build = build_obj,
+                                  layer = layer_obj,
+                                  branch = layer_version_information['branch'],
+                                  commit = layer_version_information['commit'],
+                                  priority = layer_version_information['priority'],
+                                  local_path = layer_version_information['local_path'],
+                                  project=project)
 
         self.layer_version_objects.append(layer_version_object)
 
@@ -335,8 +391,15 @@ class ORMWrapper(object):
                     localdirname = os.path.join(bc.be.sourcedir, localdirname)
                 #logger.debug(1, "Localdirname %s lcal_path %s" % (localdirname, layer_information['local_path']))
                 if localdirname.startswith(layer_information['local_path']):
+                  # If the build request came from toaster this field
+                  # should contain the information from the layer_version
+                  # That created this build request.
+                    if brl.layer_version:
+                        return brl.layer_version
+
                     # we matched the BRLayer, but we need the layer_version that generated this BR; reverse of the Project.schedule_build()
                     #logger.debug(1, "Matched %s to BRlayer %s" % (pformat(layer_information["local_path"]), localdirname))
+
                     for pl in buildrequest.project.projectlayer_set.filter(layercommit__layer__name = brl.name):
                         if pl.layercommit.layer.vcs_url == brl.giturl :
                             layer = pl.layercommit.layer
@@ -353,26 +416,29 @@ class ORMWrapper(object):
         files = filedata['files']
         syms = filedata['syms']
 
-        # we insert directories, ordered by name depth
+        # always create the root directory as a special case;
+        # note that this is never displayed, so the owner, group,
+        # size, permission are irrelevant
+        tf_obj = Target_File.objects.create(target = target_obj,
+                                            path = '/',
+                                            size = 0,
+                                            owner = '',
+                                            group = '',
+                                            permission = '',
+                                            inodetype = Target_File.ITYPE_DIRECTORY)
+        tf_obj.save()
+
+        # insert directories, ordered by name depth
         for d in sorted(dirs, key=lambda x:len(x[-1].split("/"))):
             (user, group, size) = d[1:4]
             permission = d[0][1:]
             path = d[4].lstrip(".")
+
+            # we already created the root directory, so ignore any
+            # entry for it
             if len(path) == 0:
-                # we create the root directory as a special case
-                path = "/"
-                tf_obj = Target_File.objects.create(
-                        target = target_obj,
-                        path = path,
-                        size = size,
-                        inodetype = Target_File.ITYPE_DIRECTORY,
-                        permission = permission,
-                        owner = user,
-                        group = group,
-                        )
-                tf_obj.directory = tf_obj
-                tf_obj.save()
                 continue
+
             parent_path = "/".join(path.split("/")[:len(path.split("/")) - 1])
             if len(parent_path) == 0:
                 parent_path = "/"
@@ -461,6 +527,12 @@ class ORMWrapper(object):
         errormsg = ""
         for p in packagedict:
             searchname = p
+            if p not in pkgpnmap:
+                logger.warning("Image packages list contains %p, but is"
+                               " missing from all packages list where the"
+                               " metadata comes from. Skipping...", p)
+                continue
+
             if 'OPKGN' in pkgpnmap[p].keys():
                 searchname = pkgpnmap[p]['OPKGN']
 
@@ -504,13 +576,20 @@ class ORMWrapper(object):
                 elif deptype == 'recommends':
                     tdeptype = Package_Dependency.TYPE_TRECOMMENDS
 
-                packagedeps_objs.append(Package_Dependency( package = packagedict[p]['object'],
-                                        depends_on = packagedict[px]['object'],
-                                        dep_type = tdeptype,
-                                        target = target_obj))
+                try:
+                    packagedeps_objs.append(Package_Dependency(
+                        package = packagedict[p]['object'],
+                        depends_on = packagedict[px]['object'],
+                        dep_type = tdeptype,
+                        target = target_obj))
+                except KeyError as e:
+                    logger.warn("Could not add dependency to the package %s "
+                                "because %s is an unknown package", p, px)
 
         if len(packagedeps_objs) > 0:
             Package_Dependency.objects.bulk_create(packagedeps_objs)
+        else:
+            logger.info("No package dependencies created")
 
         if len(errormsg) > 0:
             logger.warn("buildinfohelper: target_package_info could not identify recipes: \n%s", errormsg)
@@ -686,6 +765,7 @@ class BuildInfoHelper(object):
     def __init__(self, server, has_build_history = False):
         self.internal_state = {}
         self.internal_state['taskdata'] = {}
+        self.internal_state['targets'] = []
         self.task_order = 0
         self.autocommit_step = 1
         self.server = server
@@ -704,7 +784,7 @@ class BuildInfoHelper(object):
     ## methods to convert event/external info into objects that the ORM layer uses
 
 
-    def _get_build_information(self, consolelogfile):
+    def _get_build_information(self, build_log_path):
         build_info = {}
         # Generate an identifier for each new build
 
@@ -713,7 +793,7 @@ class BuildInfoHelper(object):
         build_info['distro_version'] = self.server.runCommand(["getVariable", "DISTRO_VERSION"])[0]
         build_info['started_on'] = timezone.now()
         build_info['completed_on'] = timezone.now()
-        build_info['cooker_log_path'] = consolelogfile
+        build_info['cooker_log_path'] = build_log_path
         build_info['build_name'] = self.server.runCommand(["getVariable", "BUILDNAME"])[0]
         build_info['bitbake_version'] = self.server.runCommand(["getVariable", "BB_VERSION"])[0]
 
@@ -764,8 +844,15 @@ class BuildInfoHelper(object):
                 if not localdirname.startswith("/"):
                     localdirname = os.path.join(bc.be.sourcedir, localdirname)
                 if path.startswith(localdirname):
+                    # If the build request came from toaster this field
+                    # should contain the information from the layer_version
+                    # That created this build request.
+                    if brl.layer_version:
+                        return brl.layer_version
+
                     #logger.warn("-- managed: matched path %s with layer %s " % (path, localdirname))
                     # we matched the BRLayer, but we need the layer_version that generated this br
+
                     for lvo in self.orm_wrapper.layer_version_objects:
                         if brl.name == lvo.layer.name:
                             return lvo
@@ -774,7 +861,7 @@ class BuildInfoHelper(object):
         logger.warn("Could not match layer version for recipe path %s : %s", path, self.orm_wrapper.layer_version_objects)
 
         #mockup the new layer
-        unknown_layer, _ = Layer.objects.get_or_create(name="__FIXME__unidentified_layer", layer_index_url="")
+        unknown_layer, _ = Layer.objects.get_or_create(name="Unidentified layer", layer_index_url="")
         unknown_layer_version_obj, _ = Layer_Version.objects.get_or_create(layer = unknown_layer, build = self.internal_state['build'])
 
         # append it so we don't run into this error again and again
@@ -847,9 +934,9 @@ class BuildInfoHelper(object):
                 logger.warn("buildinfohelper: cannot identify layer exception:%s ", nee)
 
 
-    def store_started_build(self, event, consolelogfile):
+    def store_started_build(self, event, build_log_path):
         assert '_pkgs' in vars(event)
-        build_information = self._get_build_information(consolelogfile)
+        build_information = self._get_build_information(build_log_path)
 
         build_obj = self.orm_wrapper.create_build_object(build_information, self.brbe, self.project)
 
@@ -869,7 +956,7 @@ class BuildInfoHelper(object):
         target_information['targets'] = event._pkgs
         target_information['build'] = build_obj
 
-        self.internal_state['targets'] = self.orm_wrapper.create_target_objects(target_information)
+        self.internal_state['targets'] = self.orm_wrapper.get_or_create_targets(target_information)
 
         # Save build configuration
         data = self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]
@@ -996,7 +1083,7 @@ class BuildInfoHelper(object):
             task_information['disk_io'] = taskstats['disk_io']
             if 'elapsed_time' in taskstats:
                 task_information['elapsed_time'] = taskstats['elapsed_time']
-            self.orm_wrapper.get_update_task_object(task_information, True)  # must exist
+            self.orm_wrapper.get_update_task_object(task_information)
 
     def update_and_store_task(self, event):
         assert 'taskfile' in vars(event)
@@ -1097,15 +1184,22 @@ class BuildInfoHelper(object):
         # for all image targets
         for target in self.internal_state['targets']:
             if target.is_image:
+                pkgdata = BuildInfoHelper._get_data_from_event(event)['pkgdata']
+                imgdata = BuildInfoHelper._get_data_from_event(event)['imgdata'][target.target]
+                filedata = BuildInfoHelper._get_data_from_event(event)['filedata'][target.target]
+
                 try:
-                    pkgdata = BuildInfoHelper._get_data_from_event(event)['pkgdata']
-                    imgdata = BuildInfoHelper._get_data_from_event(event)['imgdata'][target.target]
                     self.orm_wrapper.save_target_package_information(self.internal_state['build'], target, imgdata, pkgdata, self.internal_state['recipes'])
-                    filedata = BuildInfoHelper._get_data_from_event(event)['filedata'][target.target]
+                except KeyError as e:
+                    logger.warn("KeyError in save_target_package_information"
+                                "%s ", e)
+
+                try:
                     self.orm_wrapper.save_target_file_information(self.internal_state['build'], target, filedata)
-                except KeyError:
-                    # we must have not got the data for this image, nothing to save
-                    pass
+                except KeyError as e:
+                    logger.warn("KeyError in save_target_file_information"
+                                "%s ", e)
+
 
 
 
@@ -1306,7 +1400,9 @@ class BuildInfoHelper(object):
 
         log_information = {}
         log_information['build'] = self.internal_state['build']
-        if event.levelno == formatter.ERROR:
+        if event.levelno == formatter.CRITICAL:
+            log_information['level'] = LogMessage.CRITICAL
+        elif event.levelno == formatter.ERROR:
             log_information['level'] = LogMessage.ERROR
         elif event.levelno == formatter.WARNING:
             log_information['level'] = LogMessage.WARNING
@@ -1319,6 +1415,7 @@ class BuildInfoHelper(object):
         log_information['pathname'] = event.pathname
         log_information['lineno'] = event.lineno
         logger.info("Logging error 2: %s", log_information)
+
         self.orm_wrapper.create_logmessage(log_information)
 
     def close(self, errorcode):
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index 2bee242..90c3183 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -230,7 +230,7 @@ def _log_settings_from_server(server):
     if error:
         logger.error("Unable to get the value of BBINCLUDELOGS_LINES variable: %s" % error)
         raise BaseException(error)
-    consolelogfile, error = server.runCommand(["getVariable", "BB_CONSOLELOG"])
+    consolelogfile, error = server.runCommand(["getSetVariable", "BB_CONSOLELOG"])
     if error:
         logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error)
         raise BaseException(error)
diff --git a/bitbake/lib/bb/ui/toasterui.py b/bitbake/lib/bb/ui/toasterui.py
index e0c278b..3d26150 100644
--- a/bitbake/lib/bb/ui/toasterui.py
+++ b/bitbake/lib/bb/ui/toasterui.py
@@ -21,6 +21,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from __future__ import division
+import time
 import sys
 try:
     import bb
@@ -43,8 +44,6 @@ featureSet = [bb.cooker.CookerFeatures.HOB_EXTRA_CACHES, bb.cooker.CookerFeature
 logger = logging.getLogger("ToasterLogger")
 interactive = sys.stdout.isatty()
 
-
-
 def _log_settings_from_server(server):
     # Get values of variables which control our output
     includelogs, error = server.runCommand(["getVariable", "BBINCLUDELOGS"])
@@ -59,12 +58,56 @@ def _log_settings_from_server(server):
     if error:
         logger.error("Unable to get the value of BB_CONSOLELOG variable: %s", error)
         raise BaseException(error)
-    return includelogs, loglines, consolelogfile
+    return consolelogfile
+
+# create a log file for a single build and direct the logger at it;
+# log file name is timestamped to the millisecond (depending
+# on system clock accuracy) to ensure it doesn't overlap with
+# other log file names
+#
+# returns (log file, path to log file) for a build
+def _open_build_log(log_dir):
+    format_str = "%(levelname)s: %(message)s"
+
+    now = time.time()
+    now_ms = int((now - int(now)) * 1000)
+    time_str = time.strftime('build_%Y%m%d_%H%M%S', time.localtime(now))
+    log_file_name = time_str + ('.%d.log' % now_ms)
+    build_log_file_path = os.path.join(log_dir, log_file_name)
+
+    build_log = logging.FileHandler(build_log_file_path)
+
+    logformat = bb.msg.BBLogFormatter(format_str)
+    build_log.setFormatter(logformat)
 
+    bb.msg.addDefaultlogFilter(build_log)
+    logger.addHandler(build_log)
+
+    return (build_log, build_log_file_path)
+
+# stop logging to the build log if it exists
+def _close_build_log(build_log):
+    if build_log:
+        build_log.flush()
+        build_log.close()
+        logger.removeHandler(build_log)
+
+def main(server, eventHandler, params):
+    # set to a logging.FileHandler instance when a build starts;
+    # see _open_build_log()
+    build_log = None
+
+    # set to the log path when a build starts
+    build_log_file_path = None
 
-def main(server, eventHandler, params ):
     helper = uihelper.BBUIHelper()
 
+    # TODO don't use log output to determine when bitbake has started
+    #
+    # WARNING: this log handler cannot be removed, as localhostbecontroller
+    # relies on output in the toaster_ui.log file to determine whether
+    # the bitbake server has started, which only happens if
+    # this logger is setup here (see the TODO in the loop below)
     console = logging.StreamHandler(sys.stdout)
     format_str = "%(levelname)s: %(message)s"
     formatter = bb.msg.BBLogFormatter(format_str)
@@ -73,8 +116,6 @@ def main(server, eventHandler, params ):
     logger.addHandler(console)
     logger.setLevel(logging.INFO)
 
-    _, _, consolelogfile = _log_settings_from_server(server)
-
     # verify and warn
     build_history_enabled = True
     inheritlist, _ = server.runCommand(["getVariable", "INHERIT"])
@@ -87,8 +128,9 @@ def main(server, eventHandler, params ):
         logger.error("ToasterUI can only work in observer mode")
         return 1
 
-
+    # set to 1 when toasterui needs to shut down
     main.shutdown = 0
+
     interrupted = False
     return_value = 0
     errors = 0
@@ -98,25 +140,31 @@ def main(server, eventHandler, params ):
 
     buildinfohelper = BuildInfoHelper(server, build_history_enabled)
 
-    if buildinfohelper.brbe is not None and consolelogfile:
-        # if we are under managed mode we have no other UI and we need to write our own file
-        bb.utils.mkdirhier(os.path.dirname(consolelogfile))
-        conlogformat = bb.msg.BBLogFormatter(format_str)
-        consolelog = logging.FileHandler(consolelogfile)
-        bb.msg.addDefaultlogFilter(consolelog)
-        consolelog.setFormatter(conlogformat)
-        logger.addHandler(consolelog)
-
+    # write our own log files into bitbake's log directory;
+    # we're only interested in the path to the parent directory of
+    # this file, as we're writing our own logs into the same directory
+    consolelogfile = _log_settings_from_server(server)
+    log_dir = os.path.dirname(consolelogfile)
+    bb.utils.mkdirhier(log_dir)
 
     while True:
         try:
             event = eventHandler.waitEvent(0.25)
             if first:
                 first = False
+
+                # TODO don't use log output to determine when bitbake has started
+                #
+                # this is the line localhostbecontroller needs to
+                # see in toaster_ui.log which it uses to decide whether
+                # the bitbake server has started...
                 logger.info("ToasterUI waiting for events")
 
             if event is None:
                 if main.shutdown > 0:
+                    # if shutting down, close any open build log first
+                    _close_build_log(build_log)
+
                     break
                 continue
 
@@ -125,19 +173,32 @@ def main(server, eventHandler, params ):
             # pylint: disable=protected-access
             # the code will look into the protected variables of the event; no easy way around this
 
+            # we treat ParseStarted as the first event of toaster-triggered
+            # builds; that way we get the Build Configuration included in the log
+            # and any errors that occur before BuildStarted is fired
+            if isinstance(event, bb.event.ParseStarted):
+                if not (build_log and build_log_file_path):
+                    build_log, build_log_file_path = _open_build_log(log_dir)
+                continue
+
             if isinstance(event, bb.event.BuildStarted):
-                buildinfohelper.store_started_build(event, consolelogfile)
+                # command-line builds don't fire a ParseStarted event,
+                # so we have to start the log file for those on BuildStarted instead
+                if not (build_log and build_log_file_path):
+                    build_log, build_log_file_path = _open_build_log(log_dir)
+
+                buildinfohelper.store_started_build(event, build_log_file_path)
 
             if isinstance(event, (bb.build.TaskStarted, bb.build.TaskSucceeded, bb.build.TaskFailedSilent)):
                 buildinfohelper.update_and_store_task(event)
-                logger.warn("Logfile for task %s", event.logfile)
+                logger.info("Logfile for task %s", event.logfile)
                 continue
 
             if isinstance(event, bb.build.TaskBase):
                 logger.info(event._message)
 
             if isinstance(event, bb.event.LogExecTTY):
-                logger.warn(event.msg)
+                logger.info(event.msg)
                 continue
 
             if isinstance(event, logging.LogRecord):
@@ -145,10 +206,12 @@ def main(server, eventHandler, params ):
                     event.levelno = formatter.ERROR
 
                 buildinfohelper.store_log_event(event)
+
                 if event.levelno >= formatter.ERROR:
                     errors = errors + 1
                 elif event.levelno == formatter.WARNING:
                     warnings = warnings + 1
+
                 # For "normal" logging conditions, don't show note logs from tasks
                 # but do show them if the user has changed the default log level to
                 # include verbose/debug messages
@@ -169,8 +232,6 @@ def main(server, eventHandler, params ):
             # timing and error informations from the parsing phase in Toaster
             if isinstance(event, (bb.event.SanityCheckPassed, bb.event.SanityCheck)):
                 continue
-            if isinstance(event, bb.event.ParseStarted):
-                continue
             if isinstance(event, bb.event.ParseProgress):
                 continue
             if isinstance(event, bb.event.ParseCompleted):
@@ -246,6 +307,12 @@ def main(server, eventHandler, params ):
                     errorcode = 1
                     logger.error("Command execution failed: %s", event.error)
 
+                # turn off logging to the current build log
+                _close_build_log(build_log)
+
+                # reset ready for next BuildStarted
+                build_log = None
+
                 # update the build info helper on BuildCompleted, not on CommandXXX
                 buildinfohelper.update_build_information(event, errors, warnings, taskfailures)
                 buildinfohelper.close(errorcode)
@@ -254,7 +321,6 @@ def main(server, eventHandler, params ):
 
                 # we start a new build info
                 if buildinfohelper.brbe is not None:
-
                     logger.debug("ToasterUI under BuildEnvironment management - exiting after the build")
                     server.terminateServer()
                 else:
@@ -296,8 +362,9 @@ def main(server, eventHandler, params ):
                 continue
 
             if isinstance(event, bb.cooker.CookerExit):
-                # exit when the server exits
-                break
+                # shutdown when bitbake server shuts down
+                main.shutdown = 1
+                continue
 
             # ignore
             if isinstance(event, (bb.event.BuildBase,
@@ -308,14 +375,15 @@ def main(server, eventHandler, params ):
                                   bb.event.OperationProgress,
                                   bb.command.CommandFailed,
                                   bb.command.CommandExit,
-                                  bb.command.CommandCompleted)):
+                                  bb.command.CommandCompleted,
+                                  bb.event.ReachableStamps)):
                 continue
 
             if isinstance(event, bb.event.DepTreeGenerated):
                 buildinfohelper.store_dependency_information(event)
                 continue
 
-            logger.error("Unknown event: %s", event)
+            logger.warn("Unknown event: %s", event)
             return_value += 1
 
         except EnvironmentError as ioerror:
@@ -335,7 +403,7 @@ def main(server, eventHandler, params ):
             if tb is not None:
                 curr = tb
                 while curr is not None:
-                    logger.warn("Error data dump %s\n%s\n" , traceback.format_tb(curr,1), pformat(curr.tb_frame.f_locals))
+                    logger.error("Error data dump %s\n%s\n" , traceback.format_tb(curr,1), pformat(curr.tb_frame.f_locals))
                     curr = curr.tb_next
 
             # save them to database, if possible; if it fails, we already logged to console.
@@ -347,9 +415,8 @@ def main(server, eventHandler, params ):
             # make sure we return with an error
             return_value += 1
 
-    if interrupted:
-        if return_value == 0:
-            return_value += 1
+    if interrupted and return_value == 0:
+        return_value += 1
 
     logger.warn("Return value is %d", return_value)
     return return_value
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index 91faa49..31ec2b7 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -1177,7 +1177,7 @@ def edit_metadata(meta_lines, variables, varfunc, match_overrides=False):
             if not skip:
                 if checkspc:
                     checkspc = False
-                    if newlines[-1] == '\n' and line == '\n':
+                    if newlines and newlines[-1] == '\n' and line == '\n':
                         # Squash blank line if there are two consecutive blanks after a removal
                         continue
                 newlines.append(line)
@@ -1201,7 +1201,19 @@ def edit_metadata_file(meta_file, variables, varfunc):
 
 
 def edit_bblayers_conf(bblayers_conf, add, remove):
-    """Edit bblayers.conf, adding and/or removing layers"""
+    """Edit bblayers.conf, adding and/or removing layers
+    Parameters:
+        bblayers_conf: path to bblayers.conf file to edit
+        add: layer path (or list of layer paths) to add; None or empty
+            list to add nothing
+        remove: layer path (or list of layer paths) to remove; None or
+            empty list to remove nothing
+    Returns a tuple:
+        notadded: list of layers specified to be added but weren't
+            (because they were already in the list)
+        notremoved: list of layers that were specified to be removed
+            but weren't (because they weren't in the list)
+    """
 
     import fnmatch
 
@@ -1210,6 +1222,13 @@ def edit_bblayers_conf(bblayers_conf, add, remove):
             pth = pth[:-1]
         return pth
 
+    approved = bb.utils.approved_variables()
+    def canonicalise_path(pth):
+        pth = remove_trailing_sep(pth)
+        if 'HOME' in approved and '~' in pth:
+            pth = os.path.expanduser(pth)
+        return pth
+
     def layerlist_param(value):
         if not value:
             return []
@@ -1218,48 +1237,80 @@ def edit_bblayers_conf(bblayers_conf, add, remove):
         else:
             return [remove_trailing_sep(value)]
 
-    notadded = []
-    notremoved = []
-
     addlayers = layerlist_param(add)
     removelayers = layerlist_param(remove)
 
     # Need to use a list here because we can't set non-local variables from a callback in python 2.x
     bblayercalls = []
+    removed = []
+    plusequals = False
+    orig_bblayers = []
+
+    def handle_bblayers_firstpass(varname, origvalue, op, newlines):
+        bblayercalls.append(op)
+        if op == '=':
+            del orig_bblayers[:]
+        orig_bblayers.extend([canonicalise_path(x) for x in origvalue.split()])
+        return (origvalue, None, 2, False)
 
     def handle_bblayers(varname, origvalue, op, newlines):
-        bblayercalls.append(varname)
         updated = False
         bblayers = [remove_trailing_sep(x) for x in origvalue.split()]
         if removelayers:
             for removelayer in removelayers:
-                matched = False
                 for layer in bblayers:
-                    if fnmatch.fnmatch(layer, removelayer):
+                    if fnmatch.fnmatch(canonicalise_path(layer), canonicalise_path(removelayer)):
                         updated = True
-                        matched = True
                         bblayers.remove(layer)
+                        removed.append(removelayer)
                         break
-                if not matched:
-                    notremoved.append(removelayer)
-        if addlayers:
+        if addlayers and not plusequals:
             for addlayer in addlayers:
                 if addlayer not in bblayers:
                     updated = True
                     bblayers.append(addlayer)
-                else:
-                    notadded.append(addlayer)
+            del addlayers[:]
 
         if updated:
+            if op == '+=' and not bblayers:
+                bblayers = None
             return (bblayers, None, 2, False)
         else:
             return (origvalue, None, 2, False)
 
-    edit_metadata_file(bblayers_conf, ['BBLAYERS'], handle_bblayers)
+    with open(bblayers_conf, 'r') as f:
+        (_, newlines) = edit_metadata(f, ['BBLAYERS'], handle_bblayers_firstpass)
 
     if not bblayercalls:
         raise Exception('Unable to find BBLAYERS in %s' % bblayers_conf)
 
+    # Try to do the "smart" thing depending on how the user has laid out
+    # their bblayers.conf file
+    if bblayercalls.count('+=') > 1:
+        plusequals = True
+
+    removelayers_canon = [canonicalise_path(layer) for layer in removelayers]
+    notadded = []
+    for layer in addlayers:
+        layer_canon = canonicalise_path(layer)
+        if layer_canon in orig_bblayers and not layer_canon in removelayers_canon:
+            notadded.append(layer)
+    notadded_canon = [canonicalise_path(layer) for layer in notadded]
+    addlayers[:] = [layer for layer in addlayers if canonicalise_path(layer) not in notadded_canon]
+
+    (updated, newlines) = edit_metadata(newlines, ['BBLAYERS'], handle_bblayers)
+    if addlayers:
+        # Still need to add these
+        for addlayer in addlayers:
+            newlines.append('BBLAYERS += "%s"\n' % addlayer)
+        updated = True
+
+    if updated:
+        with open(bblayers_conf, 'w') as f:
+            f.writelines(newlines)
+
+    notremoved = list(set(removelayers) - set(removed))
+
     return (notadded, notremoved)
 
 
@@ -1310,3 +1361,27 @@ def signal_on_parent_exit(signame):
     result = cdll['libc.so.6'].prctl(PR_SET_PDEATHSIG, signum)
     if result != 0:
         raise PrCtlError('prctl failed with error code %s' % result)
+
+#
+# Manually call the ioprio syscall. We could depend on other libs like psutil
+# however this gets us enough of what we need to bitbake for now without the
+# dependency
+#
+_unamearch = os.uname()[4]
+IOPRIO_WHO_PROCESS = 1
+IOPRIO_CLASS_SHIFT = 13
+
+def ioprio_set(who, cls, value):
+    NR_ioprio_set = None
+    if _unamearch == "x86_64":
+      NR_ioprio_set = 251
+    elif _unamearch[0] == "i" and _unamearch[2:3] == "86":
+      NR_ioprio_set = 289
+
+    if NR_ioprio_set:
+        ioprio = value | (cls << IOPRIO_CLASS_SHIFT)
+        rc = cdll['libc.so.6'].syscall(NR_ioprio_set, IOPRIO_WHO_PROCESS, who, ioprio)
+        if rc != 0:
+            raise ValueError("Unable to set ioprio, syscall returned %s" % rc)
+    else:
+        bb.warn("Unable to set IO Prio for arch %s" % _unamearch)
diff --git a/bitbake/lib/prserv/db.py b/bitbake/lib/prserv/db.py
index 4379580..36c9f7b 100644
--- a/bitbake/lib/prserv/db.py
+++ b/bitbake/lib/prserv/db.py
@@ -248,7 +248,7 @@ class PRData(object):
         self.connection.execute("PRAGMA journal_mode = WAL;")
         self._tables={}
 
-    def __del__(self):
+    def disconnect(self):
         self.connection.close()
 
     def __getitem__(self,tblname):
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py
index 5c0ffb9..eafc3aa 100644
--- a/bitbake/lib/prserv/serv.py
+++ b/bitbake/lib/prserv/serv.py
@@ -3,6 +3,7 @@ import signal, time
 from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
 import threading
 import Queue
+import socket
 
 try:
     import sqlite3
@@ -37,7 +38,6 @@ singleton = None
 class PRServer(SimpleXMLRPCServer):
     def __init__(self, dbfile, logfile, interface, daemon=True):
         ''' constructor '''
-        import socket
         try:
             SimpleXMLRPCServer.__init__(self, interface,
                                         logRequests=False, allow_none=True)
@@ -148,7 +148,7 @@ class PRServer(SimpleXMLRPCServer):
         while not self.quit:
             self.handle_request()
         self.handlerthread.join()
-        self.table.sync()
+        self.db.disconnect()
         logger.info("PRServer: stopping...")
         self.server_close()
         return
@@ -289,7 +289,8 @@ class PRServerConnection(object):
         return self.host, self.port
 
 def start_daemon(dbfile, host, port, logfile):
-    pidfile = PIDPREFIX % (host, port)
+    ip = socket.gethostbyname(host)
+    pidfile = PIDPREFIX % (ip, port)
     try:
         pf = file(pidfile,'r')
         pid = int(pf.readline().strip())
@@ -302,12 +303,21 @@ def start_daemon(dbfile, host, port, logfile):
                             % pidfile)
         return 1
 
-    server = PRServer(os.path.abspath(dbfile), os.path.abspath(logfile), (host,port))
+    server = PRServer(os.path.abspath(dbfile), os.path.abspath(logfile), (ip,port))
     server.start()
+
+    # Sometimes, the port (i.e. localhost:0) indicated by the user does not match with
+    # the one the server actually is listening, so at least warn the user about it
+    _,rport = server.getinfo()
+    if port != rport:
+        sys.stdout.write("Server is listening at port %s instead of %s\n"
+                         % (rport,port))
     return 0
 
 def stop_daemon(host, port):
-    pidfile = PIDPREFIX % (host, port)
+    import glob
+    ip = socket.gethostbyname(host)
+    pidfile = PIDPREFIX % (ip, port)
     try:
         pf = file(pidfile,'r')
         pid = int(pf.readline().strip())
@@ -316,11 +326,23 @@ def stop_daemon(host, port):
         pid = None
 
     if not pid:
-        sys.stderr.write("pidfile %s does not exist. Daemon not running?\n"
-                        % pidfile)
+        # when server starts at port=0 (i.e. localhost:0), server actually takes another port,
+        # so at least advise the user which ports the corresponding server is listening
+        ports = []
+        portstr = ""
+        for pf in glob.glob(PIDPREFIX % (ip,'*')):
+            bn = os.path.basename(pf)
+            root, _ = os.path.splitext(bn)
+            ports.append(root.split('_')[-1])
+        if len(ports):
+            portstr = "Wrong port? Other ports listening at %s: %s" % (host, ' '.join(ports))
+
+        sys.stderr.write("pidfile %s does not exist. Daemon not running? %s\n"
+                         % (pidfile,portstr))
+        return 1
 
     try:
-        PRServerConnection(host, port).terminate()
+        PRServerConnection(ip, port).terminate()
     except:
         logger.critical("Stop PRService %s:%d failed" % (host,port))
 
diff --git a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
index a9909b8..b5cf559 100644
--- a/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
+++ b/bitbake/lib/toaster/bldcontrol/localhostbecontroller.py
@@ -23,9 +23,11 @@
 import os
 import sys
 import re
+import shutil
 from django.db import transaction
 from django.db.models import Q
 from bldcontrol.models import BuildEnvironment, BRLayer, BRVariable, BRTarget, BRBitbake
+from orm.models import CustomImageRecipe, Layer, Layer_Version, ProjectLayer
 import subprocess
 
 from toastermain import settings
@@ -179,15 +181,9 @@ class LocalhostBEController(BuildEnvironmentController):
         logger.debug("localhostbecontroller: Stopped bitbake server")
 
     def getGitCloneDirectory(self, url, branch):
-        """ Utility that returns the last component of a git path as directory
-        """
-        import re
-        components = re.split(r'[:\.\/]', url)
-        base = components[-2] if components[-1] == "git" else components[-1]
-
+        """Construct unique clone directory name out of url and branch."""
         if branch != "HEAD":
-            return "_%s_%s.toaster_cloned" % (base, branch)
-
+            return "_toaster_clones/_%s_%s" % (re.sub('[:/@%]', '_', url), branch)
 
         # word of attention; this is a localhost-specific issue; only on the localhost we expect to have "HEAD" releases
         # which _ALWAYS_ means the current poky checkout
@@ -197,7 +193,7 @@ class LocalhostBEController(BuildEnvironmentController):
         return local_checkout_path
 
 
-    def setLayers(self, bitbakes, layers):
+    def setLayers(self, bitbakes, layers, targets):
         """ a word of attention: by convention, the first layer for any build will be poky! """
 
         assert self.be.sourcedir is not None
@@ -222,23 +218,26 @@ class LocalhostBEController(BuildEnvironmentController):
         logger.debug("localhostbecontroller, our git repos are %s" % pformat(gitrepos))
 
 
-        # 2. find checked-out git repos in the sourcedir directory that may help faster cloning
+        # 2. Note for future use if the current source directory is a
+        # checked-out git repos that could match a layer's vcs_url and therefore
+        # be used to speed up cloning (rather than fetching it again).
 
         cached_layers = {}
-        for ldir in os.listdir(self.be.sourcedir):
-            fldir = os.path.join(self.be.sourcedir, ldir)
-            if os.path.isdir(fldir):
+
+        try:
+            for remotes in self._shellcmd("git remote -v", self.be.sourcedir).split("\n"):
                 try:
-                    for line in self._shellcmd("git remote -v", fldir).split("\n"):
-                        try:
-                            remote = line.split("\t")[1].split(" ")[0]
-                            if remote not in cached_layers:
-                                cached_layers[remote] = fldir
-                        except IndexError:
-                            pass
-                except ShellCmdException:
-                    # ignore any errors in collecting git remotes
+                    remote = remotes.split("\t")[1].split(" ")[0]
+                    if remote not in cached_layers:
+                        cached_layers[remote] = self.be.sourcedir
+                except IndexError:
                     pass
+        except ShellCmdException:
+            # ignore any errors in collecting git remotes this is an optional
+            # step
+            pass
+
+        logger.info("Using pre-checked out source for layer %s", cached_layers)
 
         layerlist = []
 
@@ -260,13 +259,14 @@ class LocalhostBEController(BuildEnvironmentController):
                     self._shellcmd("git remote remove origin", localdirname)
                     self._shellcmd("git remote add origin \"%s\"" % giturl, localdirname)
                 else:
-                    logger.debug("localhostbecontroller: cloning %s:%s in %s" % (giturl, commit, localdirname))
-                    self._shellcmd("git clone \"%s\" --single-branch --branch \"%s\" \"%s\"" % (giturl, commit, localdirname))
+                    logger.debug("localhostbecontroller: cloning %s in %s" % (giturl, localdirname))
+                    self._shellcmd('git clone "%s" "%s"' % (giturl, localdirname))
 
             # branch magic name "HEAD" will inhibit checkout
             if commit != "HEAD":
                 logger.debug("localhostbecontroller: checking out commit %s to %s " % (commit, localdirname))
-                self._shellcmd("git fetch --all && git checkout \"%s\" && git rebase \"origin/%s\"" % (commit, commit) , localdirname)
+                ref = commit if re.match('^[a-fA-F0-9]+$', commit) else 'origin/%s' % commit
+                self._shellcmd('git fetch --all && git reset --hard "%s"' % ref, localdirname)
 
             # take the localdirname as poky dir if we can find the oe-init-build-env
             if self.pokydirname is None and os.path.exists(os.path.join(localdirname, "oe-init-build-env")):
@@ -299,6 +299,51 @@ class LocalhostBEController(BuildEnvironmentController):
         if not os.path.exists(bblayerconf):
             raise BuildSetupException("BE is not consistent: bblayers.conf file missing at %s" % bblayerconf)
 
+        # 6. create custom layer and add custom recipes to it
+        layerpath = os.path.join(self.be.sourcedir, "_meta-toaster-custom")
+        if os.path.isdir(layerpath):
+            shutil.rmtree(layerpath) # remove leftovers from previous builds
+        for target in targets:
+            try:
+                customrecipe = CustomImageRecipe.objects.get(name=target.target,
+                                                             project=bitbakes[0].req.project)
+            except CustomImageRecipe.DoesNotExist:
+                continue # not a custom recipe, skip
+
+            # create directory structure
+            for name in ("conf", "recipes"):
+                path = os.path.join(layerpath, name)
+                if not os.path.isdir(path):
+                    os.makedirs(path)
+
+            # create layer.oonf
+            config = os.path.join(layerpath, "conf", "layer.conf")
+            if not os.path.isfile(config):
+                with open(config, "w") as conf:
+                    conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n')
+
+            # create recipe
+            recipe = os.path.join(layerpath, "recipes", "%s.bb" % target.target)
+            with open(recipe, "w") as recipef:
+                recipef.write("require %s\n" % customrecipe.base_recipe.recipe.file_path)
+                packages = [pkg.name for pkg in customrecipe.packages.all()]
+                if packages:
+                    recipef.write('IMAGE_INSTALL = "%s"\n' % ' '.join(packages))
+
+            # create *Layer* objects needed for build machinery to work
+            layer = Layer.objects.get_or_create(name="Toaster Custom layer",
+                                                summary="Layer for custom recipes",
+                                                vcs_url="file://%s" % layerpath)[0]
+            breq = target.req
+            lver = Layer_Version.objects.get_or_create(project=breq.project, layer=layer,
+                                                       dirpath=layerpath, build=breq.build)[0]
+            ProjectLayer.objects.get_or_create(project=breq.project, layercommit=lver,
+                                               optional=False)
+            BRLayer.objects.get_or_create(req=breq, name=layer.name, dirpath=layerpath,
+                                          giturl="file://%s" % layerpath)
+        if os.path.isdir(layerpath):
+            layerlist.append(layerpath)
+
         BuildEnvironmentController._updateBBLayers(bblayerconf, layerlist)
 
         self.islayerset = True
@@ -316,7 +361,7 @@ class LocalhostBEController(BuildEnvironmentController):
 
     def triggerBuild(self, bitbake, layers, variables, targets):
         # set up the buid environment with the needed layers
-        self.setLayers(bitbake, layers)
+        self.setLayers(bitbake, layers, targets)
         self.writeConfFile("conf/toaster-pre.conf", variables)
         self.writeConfFile("conf/toaster.conf", raw = "INHERIT+=\"toaster buildhistory\"")
 
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py b/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py
index b2c573c..5e70437 100644
--- a/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py
+++ b/bitbake/lib/toaster/bldcontrol/management/commands/checksettings.py
@@ -4,7 +4,7 @@ from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdExcep
 from bldcontrol.models import BuildRequest, BuildEnvironment, BRError
 from orm.models import ToasterSetting, Build
 import os
-import sys, traceback
+import traceback
 
 def DN(path):
     if path is None:
@@ -21,7 +21,7 @@ class Command(NoArgsCommand):
         super(Command, self).__init__(*args, **kwargs)
         self.guesspath = DN(DN(DN(DN(DN(DN(DN(__file__)))))))
 
-    def _find_first_path_for_file(self, startdirectory, filename, level = 0):
+    def _find_first_path_for_file(self, startdirectory, filename, level=0):
         if level < 0:
             return None
         dirs = []
@@ -38,7 +38,7 @@ class Command(NoArgsCommand):
                 return ret
         return None
 
-    def _recursive_list_directories(self, startdirectory, level = 0):
+    def _recursive_list_directories(self, startdirectory, level=0):
         if level < 0:
             return []
         dirs = []
@@ -50,49 +50,23 @@ class Command(NoArgsCommand):
         except OSError:
             pass
         for j in dirs:
-                dirs = dirs + self._recursive_list_directories(j, level - 1)
+            dirs = dirs + self._recursive_list_directories(j, level - 1)
         return dirs
 
 
-    def _get_suggested_sourcedir(self, be):
-        if be.betype != BuildEnvironment.TYPE_LOCAL:
-            return ""
-        return DN(DN(DN(self._find_first_path_for_file(self.guesspath, "toasterconf.json", 4))))
-
-    def _get_suggested_builddir(self, be):
-        if be.betype != BuildEnvironment.TYPE_LOCAL:
-            return ""
-        return DN(self._find_first_path_for_file(DN(self.guesspath), "bblayers.conf", 4))
-
     def _verify_build_environment(self):
-        # refuse to start if we have no build environments
-        while BuildEnvironment.objects.count() == 0:
-            print(" !! No build environments found. Toaster needs at least one build environment in order to be able to run builds.\n" +
-                "You can manually define build environments in the database table bldcontrol_buildenvironment.\n" +
-                "Or Toaster can define a simple localhost-based build environment for you.")
-
-            i = raw_input(" --  Do you want to create a basic localhost build environment ? (Y/n) ");
-            if not len(i) or i.startswith("y") or i.startswith("Y"):
-                BuildEnvironment.objects.create(pk = 1, betype = 0)
-            else:
-                raise Exception("Toaster cannot start without build environments. Aborting.")
-
+        # provide a local build env. This will be extended later to include non local
+        if BuildEnvironment.objects.count() == 0:
+            BuildEnvironment.objects.create(betype=BuildEnvironment.TYPE_LOCAL)
 
         # we make sure we have builddir and sourcedir for all defined build envionments
         for be in BuildEnvironment.objects.all():
             be.needs_import = False
             def _verify_be():
                 is_changed = False
-                print("\nVerifying the build environment. If the local build environment is not properly configured, you will be asked to configure it.")
 
                 def _update_sourcedir():
-                    suggesteddir = self._get_suggested_sourcedir(be)
-                    if len(suggesteddir) > 0:
-                        be.sourcedir = raw_input("This is the directory Toaster uses to check out the source code of the layers you will build. Toaster will create new clones of the layers, so existing content in the chosen directory will not be changed.\nToaster suggests you use \"%s\" as your layers checkout directory. If you select this directory, a layer like \"meta-intel\" will end up in \"%s/meta-intel\".\nPress Enter to select \"%s\" or type the full path to a different directory. If you provide your own directory, it must be a parent of the cloned directory for the sources you are using to run Toaster: " % (suggesteddir, suggesteddir, suggesteddir))
-                    else:
-                        be.sourcedir = raw_input("Toaster needs to know in which directory it should check out the source code of the layers you will build. The directory should be a parent of the cloned directory for the sources you are using to run Toaster. Toaster will create new clones of the layers, so existing content in the chosen directory will not be changed.\nType the full path to the directory (for example: \"%s\": " % os.environ.get('HOME', '/tmp/'))
-                    if len(be.sourcedir) == 0 and len(suggesteddir) > 0:
-                        be.sourcedir = suggesteddir
+                    be.sourcedir = os.environ.get('TOASTER_DIR')
                     return True
 
                 if len(be.sourcedir) == 0:
@@ -103,23 +77,13 @@ class Command(NoArgsCommand):
                     print "\n -- Validation: The layers checkout directory must be set to an absolute path."
                     is_changed = _update_sourcedir()
 
-                if not be.sourcedir in DN(__file__):
-                    print "\n -- Validation: The layers checkout directory must be a parent of the current checkout."
-                    is_changed = _update_sourcedir()
-
                 if is_changed:
                     if be.betype == BuildEnvironment.TYPE_LOCAL:
                         be.needs_import = True
                     return True
 
                 def _update_builddir():
-                    suggesteddir = self._get_suggested_builddir(be)
-                    if len(suggesteddir) > 0:
-                        be.builddir = raw_input("Toaster needs to know where your build directory is located.\nThe build directory is where all the artifacts created by your builds will be stored. Toaster suggests \"%s\".\nPress Enter to select \"%s\" or type the full path to a different directory: " % (suggesteddir, suggesteddir))
-                    else:
-                        be.builddir = raw_input("Toaster needs to know where is your build directory.\nThe build directory is where all the artifacts created by your builds will be stored. Type the full path to the directory (for example: \" %s/build\")" % os.environ.get('HOME','/tmp/'))
-                    if len(be.builddir) == 0 and len(suggesteddir) > 0:
-                        be.builddir = suggesteddir
+                    be.builddir = os.environ.get('TOASTER_DIR')+"/build"
                     return True
 
                 if len(be.builddir) == 0:
@@ -138,79 +102,51 @@ class Command(NoArgsCommand):
 
 
                 if be.needs_import:
-                    print "\nToaster can use a SINGLE predefined configuration file to set up default project settings and layer information sources.\n"
-
-                    # find configuration files
-                    config_files = []
-                    for dirname in self._recursive_list_directories(be.sourcedir,2):
-                        if os.path.exists(os.path.join(dirname, ".templateconf")):
-                            import subprocess
-                            proc = subprocess.Popen('bash -c ". '+os.path.join(dirname, ".templateconf")+'; echo \"\$TEMPLATECONF\""', shell=True, stdout=subprocess.PIPE)
-                            conffilepath, stderroroutput = proc.communicate()
-                            proc.wait()
-                            if proc.returncode != 0:
-                                raise Exception("Failed to source TEMPLATECONF: %s" % stderroroutput)
-
-                            conffilepath = os.path.join(conffilepath.strip(), "toasterconf.json")
-                            candidatefilepath = os.path.join(dirname, conffilepath)
-                            if "toaster_cloned" in candidatefilepath:
-                                continue
-                            if os.path.exists(candidatefilepath):
-                                config_files.append(candidatefilepath)
-
-                    if len(config_files) > 0:
-                        print "Toaster will list now the configuration files that it found. Select the number to use the desired configuration file."
-                        for cf in config_files:
-                            print "  [%d] - %s" % (config_files.index(cf) + 1, cf)
-                        print "\n  [0] - Exit without importing any file"
-                        try:
-                                i = raw_input("\nEnter your option: ")
-                                if len(i) and (int(i) - 1 >= 0 and int(i) - 1 < len(config_files)):
-                                    print "\nImporting file: %s" % config_files[int(i)-1]
-                                    from loadconf import Command as LoadConfigCommand
-
-                                    LoadConfigCommand()._import_layer_config(config_files[int(i)-1])
-                                    # we run lsupdates after config update
-                                    print "\nLayer configuration imported. Updating information from the layer sources, please wait.\nYou can re-update any time later by running bitbake/lib/toaster/manage.py lsupdates"
-                                    from django.core.management import call_command
-                                    call_command("lsupdates")
-
-                                    # we don't look for any other config files
-                                    return is_changed
-                        except Exception as e:
-                            print "Failure while trying to import the toaster config file: %s" % e
-                            traceback.print_exc(e)
-                    else:
-                        print "\nToaster could not find a configuration file. You need to configure Toaster manually using the web interface, or create a configuration file and use\n  bitbake/lib/toaster/managepy.py loadconf [filename]\n command to load it. You can use https://wiki.yoctoproject.org/wiki/File:Toasterconf.json.txt.patch as a starting point."
-
-
-
+                    try:
+                        config_file = os.environ.get('TOASTER_CONF')
+                        print "\nImporting file: %s" % config_file
+                        from loadconf import Command as LoadConfigCommand
+
+                        LoadConfigCommand()._import_layer_config(config_file)
+                        # we run lsupdates after config update
+                        print "\nLayer configuration imported. Updating information from the layer sources, please wait.\nYou can re-update any time later by running bitbake/lib/toaster/manage.py lsupdates"
+                        from django.core.management import call_command
+                        call_command("lsupdates")
+
+                        # we don't look for any other config files
+                        return is_changed
+                    except Exception as e:
+                        print "Failure while trying to import the toaster config file %s: %s" %\
+                            (config_file, e)
+                        traceback.print_exc(e)
 
                 return is_changed
 
-            while (_verify_be()):
+            while _verify_be():
                 pass
         return 0
 
     def _verify_default_settings(self):
         # verify that default settings are there
-        if ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').count() != 1:
-            ToasterSetting.objects.filter(name = 'DEFAULT_RELEASE').delete()
-            ToasterSetting.objects.get_or_create(name = 'DEFAULT_RELEASE', value = '')
+        if ToasterSetting.objects.filter(name='DEFAULT_RELEASE').count() != 1:
+            ToasterSetting.objects.filter(name='DEFAULT_RELEASE').delete()
+            ToasterSetting.objects.get_or_create(name='DEFAULT_RELEASE', value='')
         return 0
 
     def _verify_builds_in_progress(self):
         # we are just starting up. we must not have any builds in progress, or build environments taken
-        for b in BuildRequest.objects.filter(state = BuildRequest.REQ_INPROGRESS):
-            BRError.objects.create(req = b, errtype = "toaster", errmsg = "Toaster found this build IN PROGRESS while Toaster started up. This is an inconsistent state, and the build was marked as failed")
+        for b in BuildRequest.objects.filter(state=BuildRequest.REQ_INPROGRESS):
+            BRError.objects.create(req=b, errtype="toaster",
+                                   errmsg=
+                                   "Toaster found this build IN PROGRESS while Toaster started up. This is an inconsistent state, and the build was marked as failed")
 
-        BuildRequest.objects.filter(state = BuildRequest.REQ_INPROGRESS).update(state = BuildRequest.REQ_FAILED)
+        BuildRequest.objects.filter(state=BuildRequest.REQ_INPROGRESS).update(state=BuildRequest.REQ_FAILED)
 
-        BuildEnvironment.objects.update(lock = BuildEnvironment.LOCK_FREE)
+        BuildEnvironment.objects.update(lock=BuildEnvironment.LOCK_FREE)
 
         # also mark "In Progress builds as failures"
         from django.utils import timezone
-        Build.objects.filter(outcome = Build.IN_PROGRESS).update(outcome = Build.FAILED, completed_on = timezone.now())
+        Build.objects.filter(outcome=Build.IN_PROGRESS).update(outcome=Build.FAILED, completed_on=timezone.now())
 
         return 0
 
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py b/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
index 718e144..48dc618 100644
--- a/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
+++ b/bitbake/lib/toaster/bldcontrol/management/commands/runbuilds.py
@@ -5,6 +5,7 @@ from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdExcep
 from bldcontrol.models import BuildRequest, BuildEnvironment, BRError, BRVariable
 import os
 import logging
+import time
 
 logger = logging.getLogger("ToasterScheduler")
 
@@ -118,7 +119,7 @@ class Command(NoArgsCommand):
             br.save()
             # transpose target information
             for brtarget in br.brtarget_set.all():
-                Target.objects.create(build = br.build, target= brtarget.target)
+                Target.objects.create(build=br.build, target=brtarget.target, task=brtarget.task)
             # transpose the launch errors in ToasterExceptions
             for brerror in br.brerror_set.all():
                 LogMessage.objects.create(build = br.build, level = LogMessage.EXCEPTION, message = brerror.errmsg)
@@ -128,6 +129,12 @@ class Command(NoArgsCommand):
 
 
     def handle_noargs(self, **options):
-        self.cleanup()
-        self.archive()
-        self.schedule()
+        while True:
+            try:
+                self.cleanup()
+                self.archive()
+                self.schedule()
+            except:
+                pass
+
+            time.sleep(1)
diff --git a/bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py b/bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py
new file mode 100644
index 0000000..9b50bc1
--- /dev/null
+++ b/bitbake/lib/toaster/bldcontrol/migrations/0009_auto__add_field_brlayer_layer_version.py
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding field 'BRLayer.layer_version'
+        db.add_column(u'bldcontrol_brlayer', 'layer_version',
+                      self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Layer_Version'], null=True),
+                      keep_default=False)
+
+
+    def backwards(self, orm):
+        # Deleting field 'BRLayer.layer_version'
+        db.delete_column(u'bldcontrol_brlayer', 'layer_version_id')
+
+
+    models = {
+        u'bldcontrol.brbitbake': {
+            'Meta': {'object_name': 'BRBitbake'},
+            'commit': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            'giturl': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']", 'unique': 'True'})
+        },
+        u'bldcontrol.brerror': {
+            'Meta': {'object_name': 'BRError'},
+            'errmsg': ('django.db.models.fields.TextField', [], {}),
+            'errtype': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
+            'traceback': ('django.db.models.fields.TextField', [], {})
+        },
+        u'bldcontrol.brlayer': {
+            'Meta': {'object_name': 'BRLayer'},
+            'commit': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            'giturl': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Layer_Version']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"})
+        },
+        u'bldcontrol.brtarget': {
+            'Meta': {'object_name': 'BRTarget'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
+            'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'bldcontrol.brvariable': {
+            'Meta': {'object_name': 'BRVariable'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
+            'value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
+        },
+        u'bldcontrol.buildenvironment': {
+            'Meta': {'object_name': 'BuildEnvironment'},
+            'address': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
+            'bbaddress': ('django.db.models.fields.CharField', [], {'max_length': '254', 'blank': 'True'}),
+            'bbport': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
+            'bbstate': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'bbtoken': ('django.db.models.fields.CharField', [], {'max_length': '126', 'blank': 'True'}),
+            'betype': ('django.db.models.fields.IntegerField', [], {}),
+            'builddir': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lock': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'sourcedir': ('django.db.models.fields.CharField', [], {'max_length': '512', 'blank': 'True'}),
+            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+        },
+        u'bldcontrol.buildrequest': {
+            'Meta': {'object_name': 'BuildRequest'},
+            'build': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['orm.Build']", 'unique': 'True', 'null': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'environment': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildEnvironment']", 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'state': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+        },
+        u'orm.bitbakeversion': {
+            'Meta': {'object_name': 'BitbakeVersion'},
+            'branch': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'giturl': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
+        },
+        u'orm.branch': {
+            'Meta': {'unique_together': "(('layer_source', 'name'), ('layer_source', 'up_id'))", 'object_name': 'Branch'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'True', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.build': {
+            'Meta': {'object_name': 'Build'},
+            'bitbake_version': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'build_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'completed_on': ('django.db.models.fields.DateTimeField', [], {}),
+            'cooker_log_path': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+            'distro': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'distro_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'machine': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'outcome': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'started_on': ('django.db.models.fields.DateTimeField', [], {})
+        },
+        u'orm.layer': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'), ('layer_source', 'name'))", 'object_name': 'Layer'},
+            'description': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_index_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'summary': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
+            'vcs_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_file_base_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_tree_base_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'})
+        },
+        u'orm.layer_version': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'Layer_Version'},
+            'branch': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'layer_version_build'", 'null': 'True', 'to': u"orm['orm.Build']"}),
+            'commit': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'layer_version_layer'", 'to': u"orm['orm.Layer']"}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'local_path': ('django.db.models.fields.FilePathField', [], {'default': "'/'", 'max_length': '1024'}),
+            'priority': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.Project']", 'null': 'True'}),
+            'up_branch': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.Branch']", 'null': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.layersource': {
+            'Meta': {'unique_together': "(('sourcetype', 'apiurl'),)", 'object_name': 'LayerSource'},
+            'apiurl': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '63'}),
+            'sourcetype': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'orm.project': {
+            'Meta': {'object_name': 'Project'},
+            'bitbake_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.BitbakeVersion']", 'null': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']", 'null': 'True'}),
+            'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'user_id': ('django.db.models.fields.IntegerField', [], {'null': 'True'})
+        },
+        u'orm.release': {
+            'Meta': {'object_name': 'Release'},
+            'bitbake_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.BitbakeVersion']"}),
+            'branch_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '50'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'helptext': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
+        }
+    }
+
+    complete_apps = ['bldcontrol']
\ No newline at end of file
diff --git a/bitbake/lib/toaster/bldcontrol/models.py b/bitbake/lib/toaster/bldcontrol/models.py
index b61de58..ab41105 100644
--- a/bitbake/lib/toaster/bldcontrol/models.py
+++ b/bitbake/lib/toaster/bldcontrol/models.py
@@ -1,6 +1,6 @@
 from django.db import models
 from django.core.validators import MaxValueValidator, MinValueValidator
-from orm.models import Project, ProjectLayer, ProjectVariable, ProjectTarget, Build
+from orm.models import Project, ProjectLayer, ProjectVariable, ProjectTarget, Build, Layer_Version
 
 # a BuildEnvironment is the equivalent of the "build/" directory on the localhost
 class BuildEnvironment(models.Model):
@@ -39,40 +39,6 @@ class BuildEnvironment(models.Model):
     created     = models.DateTimeField(auto_now_add = True)
     updated     = models.DateTimeField(auto_now = True)
 
-
-    def get_artifact_type(self, path):
-        if self.betype == BuildEnvironment.TYPE_LOCAL:
-            try:
-                import magic
-
-                # fair warning: this is a mess; there are multiple competeing and incompatible
-                # magic modules floating around, so we try some of the most common combinations
-
-                try:    # we try ubuntu's python-magic 5.4
-                    m = magic.open(magic.MAGIC_MIME_TYPE)
-                    m.load()
-                    return m.file(path)
-                except AttributeError:
-                    pass
-
-                try:    # we try python-magic 0.4.6
-                    m = magic.Magic(magic.MAGIC_MIME)
-                    return m.from_file(path)
-                except AttributeError:
-                    pass
-
-                try:    # we try pip filemagic 1.6
-                    m = magic.Magic(flags=magic.MAGIC_MIME_TYPE)
-                    return m.id_filename(path)
-                except AttributeError:
-                    pass
-
-                return "binary/octet-stream"
-            except ImportError:
-                return "binary/octet-stream"
-        raise Exception("FIXME: artifact type not implemented for build environment type %s" % self.get_betype_display())
-
-
     def get_artifact(self, path):
         if self.betype == BuildEnvironment.TYPE_LOCAL:
             return open(path, "r")
@@ -137,6 +103,7 @@ class BRLayer(models.Model):
     giturl      = models.CharField(max_length = 254)
     commit      = models.CharField(max_length = 254)
     dirpath     = models.CharField(max_length = 254)
+    layer_version = models.ForeignKey(Layer_Version, null=True)
 
 class BRBitbake(models.Model):
     req         = models.ForeignKey(BuildRequest, unique = True)    # only one bitbake for a request
diff --git a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py
index 2a2078f..eac167b 100755
--- a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py
+++ b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py
@@ -221,6 +221,68 @@ def extract_number_from_string(s):
     """
     return re.findall(r'([0-9]+)', s)
 
+# Below is decorator derived from toaster backend test code
+class NoParsingFilter(logging.Filter):
+    def filter(self, record):
+        return record.levelno == 100
+
+def LogResults(original_class):
+    orig_method = original_class.run
+
+    #rewrite the run method of unittest.TestCase to add testcase logging
+    def run(self, result, *args, **kws):
+        orig_method(self, result, *args, **kws)
+        passed = True
+        testMethod = getattr(self, self._testMethodName)
+
+        #if test case is decorated then use it's number, else use it's name
+        try:
+            test_case = testMethod.test_case
+        except AttributeError:
+            test_case = self._testMethodName
+
+        #create custom logging level for filtering.
+        custom_log_level = 100
+        logging.addLevelName(custom_log_level, 'RESULTS')
+        caller = os.path.basename(sys.argv[0])
+
+        def results(self, message, *args, **kws):
+            if self.isEnabledFor(custom_log_level):
+                self.log(custom_log_level, message, *args, **kws)
+        logging.Logger.results = results
+
+        logging.basicConfig(filename=os.path.join(os.getcwd(),'results-'+caller+'.log'),
+                            filemode='w',
+                            format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
+                            datefmt='%H:%M:%S',
+                            level=custom_log_level)
+        for handler in logging.root.handlers:
+            handler.addFilter(NoParsingFilter())
+#        local_log = logging.getLogger(caller)
+        local_log = logging.getLogger()
+
+        #check status of tests and record it
+        for (name, msg) in result.errors:
+            if self._testMethodName == str(name).split(' ')[0]:
+                local_log.results("Testcase "+str(test_case)+": ERROR")
+                local_log.results("Testcase "+str(test_case)+":\n"+msg+"\n\n\n")
+                passed = False
+        for (name, msg) in result.failures:
+            if self._testMethodName == str(name).split(' ')[0]:
+                local_log.results("Testcase "+str(test_case)+": FAILED")
+                local_log.results("Testcase "+str(test_case)+":\n"+msg+"\n\n\n")
+                passed = False
+        for (name, msg) in result.skipped:
+            if self._testMethodName == str(name).split(' ')[0]:
+                local_log.results("Testcase "+str(test_case)+": SKIPPED"+"\n\n\n")
+                passed = False
+        if passed:
+            local_log.results("Testcase "+str(test_case)+": PASSED"+"\n\n\n")
+
+    original_class.run = run
+    return original_class
+
+
 
 
 ###########################################
@@ -321,7 +383,10 @@ class toaster_cases_base(unittest.TestCase):
             log_path = log_dir + os.sep +  self.browser + '-' +\
                     item + '-' + add_name + '-' + str(self.screenshot_sequence) + '.png'
             if item == 'native':
-                os.system("scrot " + log_path)
+                if self.host_os == "linux":
+                    os.system("scrot " + log_path)
+                elif self.host_os=="darwin":
+                    os.system("screencapture -x " + log_path)
             elif item == 'selenium':
                 self.driver.get_screenshot_as_file(log_path)
             self.screenshot_sequence += 1
@@ -531,6 +596,7 @@ class toaster_cases_base(unittest.TestCase):
     def is_text_present (self, patterns):
         for pattern in patterns:
             if str(pattern) not in self.driver.page_source:
+                print pattern
                 return False
         return True
 
@@ -592,7 +658,7 @@ class toaster_cases_base(unittest.TestCase):
 # Note: to comply with the unittest framework, we call these test_xxx functions
 # from run_toastercases.py to avoid calling setUp() and tearDown() multiple times
 
-
+ at LogResults
 class toaster_cases(toaster_cases_base):
         ##############
         #  CASE 901  #
@@ -627,12 +693,12 @@ class toaster_cases(toaster_cases_base):
             if is_list_inverted(column_list):
                 self.driver.find_element_by_link_text(key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list), msg=("%s column not in order" % key))
             else:
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list), msg=("%s column not sequenced" % key))
                 self.driver.find_element_by_link_text(key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_inverted(column_list))
+                self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key))
         self.log.info("case passed")
 
 
@@ -656,10 +722,10 @@ class toaster_cases(toaster_cases_base):
             # if nothing found, we still count it as "pass"
             if new_target_column_texts:
                 for text in new_target_column_texts:
-                    self.failUnless(text.find(pattern))
+                    self.assertTrue(text.find(pattern), msg=("%s item doesn't exist " % pattern))
             self.driver.find_element_by_css_selector("i.icon-remove").click()
             target_column_texts = self.get_table_column_text("class", "target")
-            self.failUnless(ori_target_column_texts == target_column_texts)
+            self.assertTrue(ori_target_column_texts == target_column_texts, msg=("builds changed after operations"))
 
 
         ##############
@@ -682,10 +748,9 @@ class toaster_cases(toaster_cases_base):
             try:
                 temp_element = self.find_element_by_text_in_table('otable', item)
                 # this is how we find "filter icon" in the same level as temp_element(where "a" means clickable, "i" means icon)
-                self.failUnless(temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']"))
+                self.assertTrue(temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']"))
             except Exception,e:
-                self.log.error(" %s cannot be found! %s" % (item, e))
-                self.failIf(True)
+                self.assertFalse(True, msg=(" %s cannot be found! %s" % (item, e)))
                 raise
         # step 5-6
         temp_element = self.find_element_by_link_text_in_table('otable', 'Outcome')
@@ -728,10 +793,12 @@ class toaster_cases(toaster_cases_base):
         # This is how we find the "default" rows-number!
         rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text)
         print rows_displayed
-        self.failUnless(self.get_table_element(self.table_name, rows_displayed))
-        self.failIf(self.get_table_element(self.table_name, rows_displayed + 1))
+        self.assertTrue(self.get_table_element(self.table_name, rows_displayed), msg=("not enough rows displayed"))
+        self.assertFalse(self.get_table_element(self.table_name, rows_displayed + 1), \
+                         msg=("more rows displayed than expected"))
         # Search text box background text is "Search tasks"
-        self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search tasks']"))
+        self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search tasks']"),\
+                        msg=("background text doesn't exist"))
 
         self.driver.find_element_by_id("search").clear()
         self.driver.find_element_by_id("search").send_keys("busybox")
@@ -760,22 +827,23 @@ class toaster_cases(toaster_cases_base):
             column_list = self.get_table_column_text("class", table_head_dict[key])
 # after 1st click, the list should be either sequenced or inverted, but we don't have a "default order" here
 # the point is, after another click, it should be another order
-# the fist case is special:this means every item in column_list is the same, so
+# the first case is special:this means every item in column_list is the same, so
 # after one click, either sequenced or inverted will be fine
             if (is_list_inverted(column_list) and is_list_sequenced(column_list)) \
                 or (not column_list) :
                 self.find_element_by_link_text_in_table(self.table_name, key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list))
+                self.assertTrue(is_list_sequenced(column_list) or is_list_inverted(column_list), \
+                                msg=("%s column not in any order" % key))
             elif is_list_inverted(column_list):
                 self.find_element_by_link_text_in_table(self.table_name, key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list), msg=("%s column not in order" % key))
             else:
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list), msg=("%s column not in order" % key))
                 self.find_element_by_link_text_in_table(self.table_name, key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_inverted(column_list))
+                self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key))
 # step 8-10
         # filter dict: {link text name : filter table name in xpath}
         filter_dict = {'Executed':'filter_executed', 'Outcome':'filter_outcome', 'Cache attempt':'filter_cache_attempt'}
@@ -834,9 +902,9 @@ class toaster_cases(toaster_cases_base):
             self.find_element_by_link_text_in_table('nav', key).click()
             head_list = self.get_table_head_text('otable')
             for item in test_dict[key]['check_head_list']:
-                self.failUnless(item in head_list)
+                self.assertTrue(item in head_list, msg=("%s not in head row" % item))
             column_list = self.get_table_column_text('class', test_dict[key]['class'])
-            self.failUnless(is_list_inverted(column_list))
+            self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key))
 
             self.driver.find_element_by_id("edit-columns-button").click()
             for item2 in test_dict[key]['check_column_list']:
@@ -862,21 +930,24 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_partial_link_text("Generated files").click()
         head_list = self.get_table_head_text('otable')
         for item in ['File', 'Size']:
-            self.failUnless(item in head_list)
+            self.assertTrue(item in head_list, msg=("%s not in head row" % item))
         c_list = self.get_table_column_text('class', 'path')
-        self.failUnless(is_list_sequenced(c_list))
+        self.assertTrue(is_list_sequenced(c_list), msg=("column not in order"))
 # step 7
         self.driver.find_element_by_partial_link_text("Runtime dependencies").click()
         # save sceen here to observe...
         # note that here table name is not 'otable'
         head_list = self.get_table_head_text('dependencies')
         for item in ['Package', 'Version', 'Size']:
-            self.failUnless(item in head_list)
+            self.assertTrue(item in head_list, msg=("%s not in head row" % item))
         c_list = self.get_table_column_text_by_column_number('dependencies', 1)
-        self.failUnless(is_list_sequenced(c_list))
+        self.assertTrue(is_list_sequenced(c_list), msg=("list not in order"))
         texts = ['Size', 'License', 'Recipe', 'Recipe version', 'Layer', \
-                     'Layer branch', 'Layer commit', 'Layer directory']
-        self.failUnless(self.is_text_present(texts))
+                     'Layer branch', 'Layer commit']
+        time.sleep(1)
+#        for text in texts:
+#            self.assertTrue(self.is_text_present(text), msg=("text %s not in page" % text))
+        self.assertTrue(self.is_text_present(texts), msg=("text  not in page"))
 
 
         ##############
@@ -898,8 +969,8 @@ class toaster_cases(toaster_cases_base):
         # This is how we find the "default" rows-number!
         rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text)
         print rows_displayed
-        self.failUnless(self.get_table_element(self.table_name, rows_displayed))
-        self.failIf(self.get_table_element(self.table_name, rows_displayed + 1))
+        self.assertTrue(self.get_table_element(self.table_name, rows_displayed))
+        self.assertFalse(self.get_table_element(self.table_name, rows_displayed + 1))
 
         # Check the default table is sorted by Recipe
         tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]"))
@@ -907,10 +978,10 @@ class toaster_cases(toaster_cases_base):
         default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1)
         #print default_column_list
 
-        self.failUnless(is_list_sequenced(default_column_list))
+        self.assertTrue(is_list_sequenced(default_column_list))
 
         # Search text box background text is "Search recipes"
-        self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
+        self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
 
         self.driver.find_element_by_id("search").clear()
         self.driver.find_element_by_id("search").send_keys(test_package1)
@@ -937,7 +1008,7 @@ class toaster_cases(toaster_cases_base):
 
         #self.driver.find_element_by_partial_link_text("zlib").click()
         #self.driver.back()
-        #self.failUnless(is_list_inverted(inverted_column_list))
+        #self.assertTrue(is_list_inverted(inverted_column_list))
         #self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click()
 
         table_head_dict = {'Recipe':'recipe__name', 'Recipe file':'recipe_file', 'Section':'recipe_section', \
@@ -950,52 +1021,52 @@ class toaster_cases(toaster_cases_base):
                     or (not column_list) :
                 self.find_element_by_link_text_in_table(self.table_name, key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list))
+                self.assertTrue(is_list_sequenced(column_list) or is_list_inverted(column_list))
                 self.driver.find_element_by_partial_link_text("acl").click()
                 self.driver.back()
-                self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list))
+                self.assertTrue(is_list_sequenced(column_list) or is_list_inverted(column_list))
                 # Search text box background text is "Search recipes"
-                self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
+                self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
                 self.driver.find_element_by_id("search").clear()
                 self.driver.find_element_by_id("search").send_keys(test_package2)
                 self.driver.find_element_by_id("search-button").click()
                 column_search_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_search_list) or is_list_inverted(column_search_list))
+                self.assertTrue(is_list_sequenced(column_search_list) or is_list_inverted(column_search_list))
                 self.driver.find_element_by_css_selector("i.icon-remove").click()
             elif is_list_inverted(column_list):
                 self.find_element_by_link_text_in_table(self.table_name, key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list))
                 self.driver.find_element_by_partial_link_text("acl").click()
                 self.driver.back()
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list))
                 # Search text box background text is "Search recipes"
-                self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
+                self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
                 self.driver.find_element_by_id("search").clear()
                 self.driver.find_element_by_id("search").send_keys(test_package2)
                 self.driver.find_element_by_id("search-button").click()
                 column_search_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_sequenced(column_search_list))
+                self.assertTrue(is_list_sequenced(column_search_list))
                 self.driver.find_element_by_css_selector("i.icon-remove").click()
             else:
-                self.failUnless(is_list_sequenced(column_list))
+                self.assertTrue(is_list_sequenced(column_list))
                 self.find_element_by_link_text_in_table(self.table_name, key).click()
                 column_list = self.get_table_column_text("class", table_head_dict[key])
-                self.failUnless(is_list_inverted(column_list))
+                self.assertTrue(is_list_inverted(column_list))
                 try:
                     self.driver.find_element_by_partial_link_text("acl").click()
                 except:
                     self.driver.find_element_by_partial_link_text("zlib").click()
                 self.driver.back()
-                self.failUnless(is_list_inverted(column_list))
+                self.assertTrue(is_list_inverted(column_list))
                 # Search text box background text is "Search recipes"
-                self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
+                self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']"))
                 self.driver.find_element_by_id("search").clear()
                 self.driver.find_element_by_id("search").send_keys(test_package2)
                 self.driver.find_element_by_id("search-button").click()
                 column_search_list = self.get_table_column_text("class", table_head_dict[key])
                 #print column_search_list
-                self.failUnless(is_list_inverted(column_search_list))
+                self.assertTrue(is_list_inverted(column_search_list))
                 self.driver.find_element_by_css_selector("i.icon-remove").click()
 
         # Bug 5919
@@ -1011,7 +1082,7 @@ class toaster_cases(toaster_cases_base):
             #print tasks_column_count
             default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1)
             #print default_column_list
-            self.failUnless(is_list_sequenced(default_column_list))
+            self.assertTrue(is_list_sequenced(default_column_list))
 
         self.driver.find_element_by_id("edit-columns-button").click()
         self.driver.find_element_by_id("recipe_file").click()
@@ -1061,31 +1132,31 @@ class toaster_cases(toaster_cases_base):
         # step 3
         head_list = self.get_table_head_text('otable')
         for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']:
-            self.failUnless(item in head_list)
-        self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click()
+            self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
+        self.driver.find_element_by_id("edit-columns-button").click()
         self.driver.find_element_by_id("depends_on").click()
         self.driver.find_element_by_id("layer_version__branch").click()
         self.driver.find_element_by_id("layer_version__layer__commit").click()
         self.driver.find_element_by_id("depends_by").click()
-        self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click()
+        self.driver.find_element_by_id("edit-columns-button").click()
         # check if columns selected above is shown
-        check_list = ['Dependencies', 'Layer branch', 'Layer commit', 'Layer directory', 'Reverse dependencies']
+        check_list = ['Dependencies', 'Layer branch', 'Layer commit', 'Reverse dependencies']
         head_list = self.get_table_head_text('otable')
         time.sleep(2)
         print head_list
         for item in check_list:
-            self.failUnless(item in head_list)
+            self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
         # un-check 'em all
-        self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click()
+        self.driver.find_element_by_id("edit-columns-button").click()
         self.driver.find_element_by_id("depends_on").click()
         self.driver.find_element_by_id("layer_version__branch").click()
         self.driver.find_element_by_id("layer_version__layer__commit").click()
         self.driver.find_element_by_id("depends_by").click()
-        self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click()
+        self.driver.find_element_by_id("edit-columns-button").click()
         # don't exist any more
         head_list = self.get_table_head_text('otable')
         for item in check_list:
-            self.failIf(item in head_list)
+            self.assertFalse(item in head_list, msg=("item %s should not be in head row" % item))
 
 
         ##############
@@ -1101,7 +1172,7 @@ class toaster_cases(toaster_cases_base):
         # step 3
         head_list = self.get_table_head_text('otable')
         for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']:
-            self.failUnless(item in head_list)
+            self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
         # step 4
         self.driver.find_element_by_id("edit-columns-button").click()
         # save screen
@@ -1315,7 +1386,8 @@ class toaster_cases(toaster_cases_base):
         head_list = self.get_table_head_text('otable')
         print head_list
         print len(head_list)
-        self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description'])
+        self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
+                        msg=("head row contents wrong"))
 # step 8
         # search other string. and click "Variable" to re-sort, check if table
         # head is still the same
@@ -1324,10 +1396,12 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("search-button").click()
         self.find_element_by_link_text_in_table('otable', 'Variable').click()
         head_list = self.get_table_head_text('otable')
-        self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description'])
+        self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
+                        msg=("head row contents wrong"))
         self.find_element_by_link_text_in_table('otable', 'Variable').click()
         head_list = self.get_table_head_text('otable')
-        self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description'])
+        self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
+                        msg=("head row contents wrong"))
 
 
         ##############
@@ -1343,11 +1417,11 @@ class toaster_cases(toaster_cases_base):
         self.find_element_by_link_text_in_table('nav', 'Configuration').click()
         self.driver.find_element_by_link_text("BitBake variables").click()
         variable_list = self.get_table_column_text('class', 'variable_name')
-        self.failUnless(is_list_sequenced(variable_list))
+        self.assertTrue(is_list_sequenced(variable_list), msg=("list not in order"))
 # step 4
         self.find_element_by_link_text_in_table('otable', 'Variable').click()
         variable_list = self.get_table_column_text('class', 'variable_name')
-        self.failUnless(is_list_inverted(variable_list))
+        self.assertTrue(is_list_inverted(variable_list), msg=("list not inverted"))
         self.find_element_by_link_text_in_table('otable', 'Variable').click()
 # step 5
         # searching won't change the sequentiality
@@ -1355,7 +1429,7 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("search").send_keys("lib")
         self.driver.find_element_by_id("search-button").click()
         variable_list = self.get_table_column_text('class', 'variable_name')
-        self.failUnless(is_list_sequenced(variable_list))
+        self.assertTrue(is_list_sequenced(variable_list), msg=("list not in order"))
 
 
         ##############
@@ -1369,7 +1443,7 @@ class toaster_cases(toaster_cases_base):
         # Step 2
         # default sequence in "Completed on" column is inverted
         c_list = self.get_table_column_text('class', 'completed_on')
-        self.failUnless(is_list_inverted(c_list))
+        self.assertTrue(is_list_inverted(c_list), msg=("list not inverted"))
         # step 3
         self.driver.find_element_by_id("edit-columns-button").click()
         self.driver.find_element_by_id("started_on").click()
@@ -1377,8 +1451,8 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("time").click()
         self.driver.find_element_by_id("edit-columns-button").click()
         head_list = self.get_table_head_text('otable')
-        for item in ['Outcome', 'Target', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']:
-            self.failUnless(item in head_list)
+        for item in ['Outcome', 'Recipe', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']:
+            self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
 
 
         ##############
@@ -1392,7 +1466,7 @@ class toaster_cases(toaster_cases_base):
         # Please refer to case 924 requirement
         # default sequence in "Completed on" column is inverted
         c_list = self.get_table_column_text('class', 'completed_on')
-        self.failUnless(is_list_inverted(c_list))
+        self.assertTrue(is_list_inverted(c_list), msg=("list not inverted"))
         # Step 4
         # click Errors , order in "Completed on" should be disturbed. Then hide
         # error column to check if order in "Completed on" can be restored
@@ -1403,7 +1477,7 @@ class toaster_cases(toaster_cases_base):
         # Note: without time.sleep here, there'll be unpredictable error..TBD
         time.sleep(1)
         c_list = self.get_table_column_text('class', 'completed_on')
-        self.failUnless(is_list_inverted(c_list))
+        self.assertTrue(is_list_inverted(c_list), msg=("list not inverted"))
 
 
         ##############
@@ -1419,7 +1493,7 @@ class toaster_cases(toaster_cases_base):
         self.find_element_by_link_text_in_table('nav', 'Packages').click()
         check_head_list = ['Package', 'Package version', 'Size', 'Recipe']
         head_list = self.get_table_head_text('otable')
-        self.failUnless(head_list == check_head_list)
+        self.assertTrue(head_list == check_head_list, msg=("head row not as expected"))
 # Step 4
         # pulldown menu
         option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \
@@ -1448,7 +1522,7 @@ class toaster_cases(toaster_cases_base):
         self.find_element_by_link_text_in_table('nav', 'Packages').click()
         # column -- Package
         column_list = self.get_table_column_text_by_column_number('otable', 1)
-        self.failUnless(is_list_sequenced(column_list))
+        self.assertTrue(is_list_sequenced(column_list), msg=("list not in order"))
         self.find_element_by_link_text_in_table('otable', 'Size').click()
 
 
@@ -1470,7 +1544,7 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("edit-columns-button").click()
         #get modified table header
         new_head = self.get_table_head_text('otable')
-        self.failUnless(head_list > new_head)
+        self.assertTrue(head_list > new_head)
 
         ##############
         #  CASE 943  #
@@ -1487,7 +1561,7 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("search").send_keys("bash")
         self.driver.find_element_by_id("search-button").click()
         #check for the search result message "XX packages found"
-        self.failUnless(self.is_text_present("packages found"))
+        self.assertTrue(self.is_text_present("packages found"), msg=("no packages found text"))
 
 
         ##############
@@ -1508,11 +1582,12 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("edit-columns-button").click()
         # otable is the recipes table here
         otable_head_text = self.get_table_head_text('otable')
-        for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]:
-            self.failIf(item not in otable_head_text)
+        for item in ["Layer", "Layer branch", "Layer commit"]:
+            self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item))
         # click the fist recipe, whatever it is
         self.get_table_element("otable", 1, 1).click()
-        self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"]))
+        self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"]), \
+                        msg=("text not in web page"))
 
         # step 2: test Packages page stuff. almost same as above
         self.driver.back()
@@ -1525,10 +1600,11 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("edit-columns-button").click()
         otable_head_text = self.get_table_head_text("otable")
         for item in ["Layer", "Layer branch", "Layer commit"]:
-            self.failIf(item not in otable_head_text)
+            self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item))
         # click the fist recipe, whatever it is
         self.get_table_element("otable", 1, 1).click()
-        self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"]))
+        self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \
+                        msg=("text not in web page"))
 
         # step 3: test Packages core-image-minimal(images) stuff. almost same as above. Note when future element-id changes...
         self.driver.back()
@@ -1540,17 +1616,18 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("edit-columns-button").click()
         otable_head_text = self.get_table_head_text("otable")
         for item in ["Layer", "Layer branch", "Layer commit"]:
-            self.failIf(item not in otable_head_text)
+            self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item))
         # click the fist recipe, whatever it is
         self.get_table_element("otable", 1, 1).click()
-        self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"]))
+        self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \
+                        msg=("text not in web page"))
 
         # step 4: check Configuration page
         self.driver.back()
         self.driver.find_element_by_link_text("Configuration").click()
         otable_head_text = self.get_table_head_text()
         for item in ["Layer", "Layer branch", "Layer commit"]:
-            self.failIf(item not in otable_head_text)
+            self.assertTrue(item not in otable_head_text, msg=("item %s should not be in head row" % item))
 
 
         ##############
@@ -1575,14 +1652,14 @@ class toaster_cases(toaster_cases_base):
             # Sure we can use driver.get(url) to refresh page, but since page will vary, we use click link text here
             self.driver.find_element_by_link_text(items).click()
             Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_visible_text(str(rows_displayed))
-            self.failUnless(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]"))
-            self.failIf(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]"))
+            self.assertTrue(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]"))
+            self.assertFalse(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]"))
 
             # click 1st package, then go back to check if it's still those rows shown.
             self.driver.find_element_by_xpath(xpath_table + "/tr[1]/td[1]").click()
             self.driver.find_element_by_link_text(items).click()
-            self.failUnless(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]"))
-            self.failIf(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]"))
+            self.assertTrue(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]"))
+            self.assertFalse(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]"))
 
 
         ##############
@@ -1673,7 +1750,7 @@ class toaster_cases(toaster_cases_base):
         check_list = ['Description', 'Set in file']
         head_list = self.get_table_head_text('otable')
         for item in check_list:
-            self.failIf(item in head_list)
+            self.assertFalse(item in head_list, msg=("item %s should not be in head row" % item))
         # check these 2 options and verify again
         self.driver.find_element_by_id('edit-columns-button').click()
         self.driver.find_element_by_xpath(xpath_option('description')).click()
@@ -1681,7 +1758,7 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id('edit-columns-button').click()
         head_list = self.get_table_head_text('otable')
         for item in check_list:
-            self.failUnless(item in head_list)
+            self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
 
 
         ##############
@@ -1703,7 +1780,7 @@ class toaster_cases(toaster_cases_base):
         self.driver.find_element_by_id("search-button").click()
         #get number of variables visible after search
         number_after_search = self.driver.find_element_by_class_name('page-header').text
-        self.failUnless(number_before_search > number_after_search)
+        self.assertTrue(number_before_search > number_after_search, msg=("items should be less after search"))
 
 
         ##############
@@ -1722,11 +1799,11 @@ class toaster_cases(toaster_cases_base):
             self.driver.find_element_by_partial_link_text("Directory structure")
         except Exception,e:
             self.log.error(e)
-            self.failIf(True)
+            self.assertFalse(True)
         # step 4
         head_list = self.get_table_head_text('otable')
         for item in ['Package', 'Package version', 'Size', 'Dependencies', 'Reverse dependencies', 'Recipe']:
-            self.failUnless(item in head_list)
+            self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
         # step 5-6
         self.driver.find_element_by_id("edit-columns-button").click()
         selectable_class = 'checkbox'
@@ -1746,22 +1823,15 @@ class toaster_cases(toaster_cases_base):
             unselectable_list.append(element.text)
         # check them
         for item in selectable_check_list:
-            if item not in selectable_list:
-                self.log.error(" %s not found in dropdown menu \n" % item)
-                self.failIf(True)
+            self.assertTrue(item in selectable_list, msg=("%s not found in dropdown menu" % item))
         for item in unselectable_check_list:
-            if item not in unselectable_list:
-                self.log.error(" %s not found in dropdown menu \n" % item)
-                self.failIf(True)
+            self.assertTrue(item in unselectable_list, msg=("%s not found in dropdown menu" % item))
         self.driver.find_element_by_id("edit-columns-button").click()
         # step 7
         self.driver.find_element_by_partial_link_text("Directory structure").click()
         head_list = self.get_table_head_text('dirtable')
         for item in ['Directory / File', 'Symbolic link to', 'Source package', 'Size', 'Permissions', 'Owner', 'Group']:
-            if item not in head_list:
-                self.log.error(" %s not found in Directory structure table head \n" % item)
-                self.failIf(True)
-
+            self.assertTrue(item in head_list, msg=("%s not found in Directory structure table head" % item))
 
         ##############
         #  CASE 950  #
@@ -1791,12 +1861,11 @@ class toaster_cases(toaster_cases_base):
                 try:
                     self.find_element_by_link_text_in_table('nav', item)
                 except Exception:
-                    self.log.error("link  %s cannot be found in the page" % item)
-                    self.failIf(True)
+                    self.assertFalse(True, msg=("link  %s cannot be found in the page" % item))
             # step 6
             check_list_2 = ['Packages included', 'Total package size', \
                       'License manifest', 'Image files']
-            self.failUnless(self.is_text_present(check_list_2))
+            self.assertTrue(self.is_text_present(check_list_2), msg=("text not in web page"))
             self.driver.back()
         try:
             fail_icon = self.driver.find_element_by_xpath("//*[@class='icon-minus-sign error']")
@@ -1813,12 +1882,11 @@ class toaster_cases(toaster_cases_base):
                 try:
                     self.find_element_by_link_text_in_table('nav', item)
                 except Exception:
-                    self.log.error("link  %s cannot be found in the page" % item)
-                    self.failIf(True)
+                    self.assertFalse(True, msg=("link  %s cannot be found in the page" % item))
             # step 7 involved
             check_list_3 = ['Machine', 'Distro', 'Layers', 'Total number of tasks', 'Tasks executed', \
                       'Tasks not executed', 'Reuse', 'Recipes built', 'Packages built']
-            self.failUnless(self.is_text_present(check_list_3))
+            self.assertTrue(self.is_text_present(check_list_3), msg=("text not in web page"))
             self.driver.back()
 
 
@@ -1878,6 +1946,5 @@ class toaster_cases(toaster_cases_base):
                        tasks, recipes, packages need to run manually")
         self.driver.find_element_by_partial_link_text("Toaster manual").click()
         if not self.is_text_present("Toaster Manual"):
-            self.log.error("please check [Toaster manual] link on page")
-            self.failIf(True)
+            self.assertFalse(True, msg=("please check [Toaster manual] link on page"))
 
diff --git a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_test.cfg b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_test.cfg
index 6405f9a..685a9ee 100644
--- a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_test.cfg
+++ b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_test.cfg
@@ -18,4 +18,8 @@ test_browser = ['ie', 'firefox', 'chrome']
 test_cases = [901, 902, 903]
 logging_level = 'DEBUG'
 
-
+[toaster_test_darwin]
+toaster_url = 'http://127.0.0.1:8000'
+test_browser = 'firefox'
+test_cases = [901, 902, 903, 904, 906, 910, 911, 912, 913, 914, 915, 916, 923, 924, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 955, 956]
+logging_level = 'INFO'
diff --git a/bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py b/bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py
new file mode 100644
index 0000000..6030605
--- /dev/null
+++ b/bitbake/lib/toaster/orm/migrations/0027_auto__add_customimagerecipe__add_unique_customimagerecipe_name_project.py
@@ -0,0 +1,375 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding model 'CustomImageRecipe'
+        db.create_table(u'orm_customimagerecipe', (
+            (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
+            ('base_recipe', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Recipe'])),
+            ('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Project'])),
+        ))
+        db.send_create_signal(u'orm', ['CustomImageRecipe'])
+
+        # Adding M2M table for field packages on 'CustomImageRecipe'
+        m2m_table_name = db.shorten_name(u'orm_customimagerecipe_packages')
+        db.create_table(m2m_table_name, (
+            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
+            ('customimagerecipe', models.ForeignKey(orm[u'orm.customimagerecipe'], null=False)),
+            ('package', models.ForeignKey(orm[u'orm.package'], null=False))
+        ))
+        db.create_unique(m2m_table_name, ['customimagerecipe_id', 'package_id'])
+
+        # Adding unique constraint on 'CustomImageRecipe', fields ['name', 'project']
+        db.create_unique(u'orm_customimagerecipe', ['name', 'project_id'])
+
+
+        # Changing field 'Package.build'
+        db.alter_column(u'orm_package', 'build_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Build'], null=True))
+
+    def backwards(self, orm):
+        # Removing unique constraint on 'CustomImageRecipe', fields ['name', 'project']
+        db.delete_unique(u'orm_customimagerecipe', ['name', 'project_id'])
+
+        # Deleting model 'CustomImageRecipe'
+        db.delete_table(u'orm_customimagerecipe')
+
+        # Removing M2M table for field packages on 'CustomImageRecipe'
+        db.delete_table(db.shorten_name(u'orm_customimagerecipe_packages'))
+
+
+        # Changing field 'Package.build'
+        db.alter_column(u'orm_package', 'build_id', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['orm.Build']))
+
+    models = {
+        u'orm.bitbakeversion': {
+            'Meta': {'object_name': 'BitbakeVersion'},
+            'branch': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'giturl': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
+        },
+        u'orm.branch': {
+            'Meta': {'unique_together': "(('layer_source', 'name'), ('layer_source', 'up_id'))", 'object_name': 'Branch'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'True', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.build': {
+            'Meta': {'object_name': 'Build'},
+            'bitbake_version': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'build_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'completed_on': ('django.db.models.fields.DateTimeField', [], {}),
+            'cooker_log_path': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+            'distro': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'distro_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'machine': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'outcome': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'started_on': ('django.db.models.fields.DateTimeField', [], {})
+        },
+        u'orm.buildartifact': {
+            'Meta': {'object_name': 'BuildArtifact'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
+            'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '100'}),
+            'file_size': ('django.db.models.fields.IntegerField', [], {}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        u'orm.customimagerecipe': {
+            'Meta': {'unique_together': "(('name', 'project'),)", 'object_name': 'CustomImageRecipe'},
+            'base_recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Recipe']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['orm.Package']", 'symmetrical': 'False'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"})
+        },
+        u'orm.helptext': {
+            'Meta': {'object_name': 'HelpText'},
+            'area': ('django.db.models.fields.IntegerField', [], {}),
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'helptext_build'", 'to': u"orm['orm.Build']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'text': ('django.db.models.fields.TextField', [], {})
+        },
+        u'orm.layer': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'), ('layer_source', 'name'))", 'object_name': 'Layer'},
+            'description': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_index_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'summary': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
+            'vcs_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_file_base_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_tree_base_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'})
+        },
+        u'orm.layer_version': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'Layer_Version'},
+            'branch': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'layer_version_build'", 'null': 'True', 'to': u"orm['orm.Build']"}),
+            'commit': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'layer_version_layer'", 'to': u"orm['orm.Layer']"}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'local_path': ('django.db.models.fields.FilePathField', [], {'default': "'/'", 'max_length': '1024'}),
+            'priority': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.Project']", 'null': 'True'}),
+            'up_branch': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.Branch']", 'null': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.layersource': {
+            'Meta': {'unique_together': "(('sourcetype', 'apiurl'),)", 'object_name': 'LayerSource'},
+            'apiurl': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '63'}),
+            'sourcetype': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'orm.layerversiondependency': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'LayerVersionDependency'},
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dependees'", 'to': u"orm['orm.Layer_Version']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dependencies'", 'to': u"orm['orm.Layer_Version']"}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.logmessage': {
+            'Meta': {'object_name': 'LogMessage'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'lineno': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'message': ('django.db.models.fields.CharField', [], {'max_length': '240'}),
+            'pathname': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'task': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Task']", 'null': 'True', 'blank': 'True'})
+        },
+        u'orm.machine': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'Machine'},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Layer_Version']"}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.package': {
+            'Meta': {'object_name': 'Package'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']", 'null': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'installed_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100'}),
+            'installed_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'license': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Recipe']", 'null': 'True'}),
+            'revision': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+            'section': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
+            'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
+        },
+        u'orm.package_dependency': {
+            'Meta': {'object_name': 'Package_Dependency'},
+            'dep_type': ('django.db.models.fields.IntegerField', [], {}),
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_dependencies_target'", 'to': u"orm['orm.Package']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_dependencies_source'", 'to': u"orm['orm.Package']"}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']", 'null': 'True'})
+        },
+        u'orm.package_file': {
+            'Meta': {'object_name': 'Package_File'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'buildfilelist_package'", 'to': u"orm['orm.Package']"}),
+            'path': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'size': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'orm.project': {
+            'Meta': {'object_name': 'Project'},
+            'bitbake_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.BitbakeVersion']", 'null': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']", 'null': 'True'}),
+            'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'user_id': ('django.db.models.fields.IntegerField', [], {'null': 'True'})
+        },
+        u'orm.projectlayer': {
+            'Meta': {'unique_together': "(('project', 'layercommit'),)", 'object_name': 'ProjectLayer'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layercommit': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Layer_Version']", 'null': 'True'}),
+            'optional': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"})
+        },
+        u'orm.projecttarget': {
+            'Meta': {'object_name': 'ProjectTarget'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'orm.projectvariable': {
+            'Meta': {'object_name': 'ProjectVariable'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
+        },
+        u'orm.recipe': {
+            'Meta': {'unique_together': "(('layer_version', 'file_path', 'pathflags'),)", 'object_name': 'Recipe'},
+            'bugtracker': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'file_path': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
+            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'recipe_layer_version'", 'to': u"orm['orm.Layer_Version']"}),
+            'license': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'pathflags': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
+            'section': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
+        },
+        u'orm.recipe_dependency': {
+            'Meta': {'object_name': 'Recipe_Dependency'},
+            'dep_type': ('django.db.models.fields.IntegerField', [], {}),
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'r_dependencies_depends'", 'to': u"orm['orm.Recipe']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'recipe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'r_dependencies_recipe'", 'to': u"orm['orm.Recipe']"})
+        },
+        u'orm.release': {
+            'Meta': {'object_name': 'Release'},
+            'bitbake_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.BitbakeVersion']"}),
+            'branch_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '50'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'helptext': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
+        },
+        u'orm.releasedefaultlayer': {
+            'Meta': {'object_name': 'ReleaseDefaultLayer'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']"})
+        },
+        u'orm.releaselayersourcepriority': {
+            'Meta': {'unique_together': "(('release', 'layer_source'),)", 'object_name': 'ReleaseLayerSourcePriority'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.LayerSource']"}),
+            'priority': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']"})
+        },
+        u'orm.target': {
+            'Meta': {'object_name': 'Target'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'is_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'license_manifest_path': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True'}),
+            'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'orm.target_file': {
+            'Meta': {'object_name': 'Target_File'},
+            'directory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'directory_set'", 'null': 'True', 'to': u"orm['orm.Target_File']"}),
+            'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'inodetype': ('django.db.models.fields.IntegerField', [], {}),
+            'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'path': ('django.db.models.fields.FilePathField', [], {'max_length': '100'}),
+            'permission': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+            'size': ('django.db.models.fields.IntegerField', [], {}),
+            'sym_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'symlink_set'", 'null': 'True', 'to': u"orm['orm.Target_File']"}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
+        },
+        u'orm.target_image_file': {
+            'Meta': {'object_name': 'Target_Image_File'},
+            'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '254'}),
+            'file_size': ('django.db.models.fields.IntegerField', [], {}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
+        },
+        u'orm.target_installed_package': {
+            'Meta': {'object_name': 'Target_Installed_Package'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'buildtargetlist_package'", 'to': u"orm['orm.Package']"}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
+        },
+        u'orm.task': {
+            'Meta': {'ordering': "('order', 'recipe')", 'unique_together': "(('build', 'recipe', 'task_name'),)", 'object_name': 'Task'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_build'", 'to': u"orm['orm.Build']"}),
+            'cpu_usage': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '8', 'decimal_places': '2'}),
+            'disk_io': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'elapsed_time': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '8', 'decimal_places': '2'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'line_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'logfile': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'message': ('django.db.models.fields.CharField', [], {'max_length': '240'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'outcome': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
+            'path_to_sstate_obj': ('django.db.models.fields.FilePathField', [], {'max_length': '500', 'blank': 'True'}),
+            'recipe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': u"orm['orm.Recipe']"}),
+            'script_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'source_url': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'sstate_checksum': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'sstate_result': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'task_executed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'task_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'work_directory': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'})
+        },
+        u'orm.task_dependency': {
+            'Meta': {'object_name': 'Task_Dependency'},
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_dependencies_depends'", 'to': u"orm['orm.Task']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'task': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_dependencies_task'", 'to': u"orm['orm.Task']"})
+        },
+        u'orm.toastersetting': {
+            'Meta': {'object_name': 'ToasterSetting'},
+            'helptext': ('django.db.models.fields.TextField', [], {}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '63'}),
+            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        u'orm.variable': {
+            'Meta': {'object_name': 'Variable'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variable_build'", 'to': u"orm['orm.Build']"}),
+            'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'human_readable_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'variable_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'variable_value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
+        },
+        u'orm.variablehistory': {
+            'Meta': {'object_name': 'VariableHistory'},
+            'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'line_number': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'operation': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+            'value': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'vhistory'", 'to': u"orm['orm.Variable']"})
+        }
+    }
+
+    complete_apps = ['orm']
\ No newline at end of file
diff --git a/bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py b/bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py
new file mode 100644
index 0000000..a2f8661
--- /dev/null
+++ b/bitbake/lib/toaster/orm/migrations/0028_auto__chg_field_logmessage_message.py
@@ -0,0 +1,345 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+
+        # Changing field 'LogMessage.message'
+        db.alter_column(u'orm_logmessage', 'message', self.gf('django.db.models.fields.TextField')(null=True))
+
+    def backwards(self, orm):
+
+        # Changing field 'LogMessage.message'
+        db.alter_column(u'orm_logmessage', 'message', self.gf('django.db.models.fields.CharField')(default='', max_length=240))
+
+    models = {
+        u'orm.bitbakeversion': {
+            'Meta': {'object_name': 'BitbakeVersion'},
+            'branch': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'giturl': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
+        },
+        u'orm.branch': {
+            'Meta': {'unique_together': "(('layer_source', 'name'), ('layer_source', 'up_id'))", 'object_name': 'Branch'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'True', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.build': {
+            'Meta': {'object_name': 'Build'},
+            'bitbake_version': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'build_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'completed_on': ('django.db.models.fields.DateTimeField', [], {}),
+            'cooker_log_path': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
+            'distro': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'distro_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'machine': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'outcome': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'started_on': ('django.db.models.fields.DateTimeField', [], {})
+        },
+        u'orm.buildartifact': {
+            'Meta': {'object_name': 'BuildArtifact'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
+            'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '100'}),
+            'file_size': ('django.db.models.fields.IntegerField', [], {}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        u'orm.customimagerecipe': {
+            'Meta': {'unique_together': "(('name', 'project'),)", 'object_name': 'CustomImageRecipe'},
+            'base_recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Recipe']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'packages': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['orm.Package']", 'symmetrical': 'False'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"})
+        },
+        u'orm.helptext': {
+            'Meta': {'object_name': 'HelpText'},
+            'area': ('django.db.models.fields.IntegerField', [], {}),
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'helptext_build'", 'to': u"orm['orm.Build']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'key': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'text': ('django.db.models.fields.TextField', [], {})
+        },
+        u'orm.layer': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'), ('layer_source', 'name'))", 'object_name': 'Layer'},
+            'description': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_index_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'summary': ('django.db.models.fields.TextField', [], {'default': 'None', 'null': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
+            'vcs_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_file_base_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_tree_base_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'}),
+            'vcs_web_url': ('django.db.models.fields.URLField', [], {'default': 'None', 'max_length': '200', 'null': 'True'})
+        },
+        u'orm.layer_version': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'Layer_Version'},
+            'branch': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'related_name': "'layer_version_build'", 'null': 'True', 'to': u"orm['orm.Build']"}),
+            'commit': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'dirpath': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'layer_version_layer'", 'to': u"orm['orm.Layer']"}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'local_path': ('django.db.models.fields.FilePathField', [], {'default': "'/'", 'max_length': '1024'}),
+            'priority': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.Project']", 'null': 'True'}),
+            'up_branch': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.Branch']", 'null': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.layersource': {
+            'Meta': {'unique_together': "(('sourcetype', 'apiurl'),)", 'object_name': 'LayerSource'},
+            'apiurl': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '255', 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '63'}),
+            'sourcetype': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'orm.layerversiondependency': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'LayerVersionDependency'},
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dependees'", 'to': u"orm['orm.Layer_Version']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dependencies'", 'to': u"orm['orm.Layer_Version']"}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.logmessage': {
+            'Meta': {'object_name': 'LogMessage'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'lineno': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'message': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'pathname': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'task': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Task']", 'null': 'True', 'blank': 'True'})
+        },
+        u'orm.machine': {
+            'Meta': {'unique_together': "(('layer_source', 'up_id'),)", 'object_name': 'Machine'},
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Layer_Version']"}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'})
+        },
+        u'orm.package': {
+            'Meta': {'object_name': 'Package'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']", 'null': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'installed_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100'}),
+            'installed_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'license': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'recipe': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Recipe']", 'null': 'True'}),
+            'revision': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
+            'section': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
+            'size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
+        },
+        u'orm.package_dependency': {
+            'Meta': {'object_name': 'Package_Dependency'},
+            'dep_type': ('django.db.models.fields.IntegerField', [], {}),
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_dependencies_target'", 'to': u"orm['orm.Package']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'package_dependencies_source'", 'to': u"orm['orm.Package']"}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']", 'null': 'True'})
+        },
+        u'orm.package_file': {
+            'Meta': {'object_name': 'Package_File'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'buildfilelist_package'", 'to': u"orm['orm.Package']"}),
+            'path': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'size': ('django.db.models.fields.IntegerField', [], {})
+        },
+        u'orm.project': {
+            'Meta': {'object_name': 'Project'},
+            'bitbake_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.BitbakeVersion']", 'null': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_default': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']", 'null': 'True'}),
+            'short_description': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
+            'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'user_id': ('django.db.models.fields.IntegerField', [], {'null': 'True'})
+        },
+        u'orm.projectlayer': {
+            'Meta': {'unique_together': "(('project', 'layercommit'),)", 'object_name': 'ProjectLayer'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layercommit': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Layer_Version']", 'null': 'True'}),
+            'optional': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"})
+        },
+        u'orm.projecttarget': {
+            'Meta': {'object_name': 'ProjectTarget'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'orm.projectvariable': {
+            'Meta': {'object_name': 'ProjectVariable'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
+            'value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
+        },
+        u'orm.recipe': {
+            'Meta': {'unique_together': "(('layer_version', 'file_path', 'pathflags'),)", 'object_name': 'Recipe'},
+            'bugtracker': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'file_path': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
+            'homepage': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['orm.LayerSource']", 'null': 'True'}),
+            'layer_version': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'recipe_layer_version'", 'to': u"orm['orm.Layer_Version']"}),
+            'license': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'pathflags': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
+            'section': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'up_date': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
+            'up_id': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True'}),
+            'version': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
+        },
+        u'orm.recipe_dependency': {
+            'Meta': {'object_name': 'Recipe_Dependency'},
+            'dep_type': ('django.db.models.fields.IntegerField', [], {}),
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'r_dependencies_depends'", 'to': u"orm['orm.Recipe']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'recipe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'r_dependencies_recipe'", 'to': u"orm['orm.Recipe']"})
+        },
+        u'orm.release': {
+            'Meta': {'object_name': 'Release'},
+            'bitbake_version': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.BitbakeVersion']"}),
+            'branch_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '50'}),
+            'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
+            'helptext': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '32'})
+        },
+        u'orm.releasedefaultlayer': {
+            'Meta': {'object_name': 'ReleaseDefaultLayer'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_name': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '100'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']"})
+        },
+        u'orm.releaselayersourcepriority': {
+            'Meta': {'unique_together': "(('release', 'layer_source'),)", 'object_name': 'ReleaseLayerSourcePriority'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'layer_source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.LayerSource']"}),
+            'priority': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'release': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Release']"})
+        },
+        u'orm.target': {
+            'Meta': {'object_name': 'Target'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'is_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'license_manifest_path': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True'}),
+            'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
+        },
+        u'orm.target_file': {
+            'Meta': {'object_name': 'Target_File'},
+            'directory': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'directory_set'", 'null': 'True', 'to': u"orm['orm.Target_File']"}),
+            'group': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'inodetype': ('django.db.models.fields.IntegerField', [], {}),
+            'owner': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'path': ('django.db.models.fields.FilePathField', [], {'max_length': '100'}),
+            'permission': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+            'size': ('django.db.models.fields.IntegerField', [], {}),
+            'sym_target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'symlink_set'", 'null': 'True', 'to': u"orm['orm.Target_File']"}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
+        },
+        u'orm.target_image_file': {
+            'Meta': {'object_name': 'Target_Image_File'},
+            'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '254'}),
+            'file_size': ('django.db.models.fields.IntegerField', [], {}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
+        },
+        u'orm.target_installed_package': {
+            'Meta': {'object_name': 'Target_Installed_Package'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'package': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'buildtargetlist_package'", 'to': u"orm['orm.Package']"}),
+            'target': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Target']"})
+        },
+        u'orm.task': {
+            'Meta': {'ordering': "('order', 'recipe')", 'unique_together': "(('build', 'recipe', 'task_name'),)", 'object_name': 'Task'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_build'", 'to': u"orm['orm.Build']"}),
+            'cpu_usage': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '8', 'decimal_places': '2'}),
+            'disk_io': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'elapsed_time': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '8', 'decimal_places': '2'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'line_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'logfile': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'message': ('django.db.models.fields.CharField', [], {'max_length': '240'}),
+            'order': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'outcome': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
+            'path_to_sstate_obj': ('django.db.models.fields.FilePathField', [], {'max_length': '500', 'blank': 'True'}),
+            'recipe': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tasks'", 'to': u"orm['orm.Recipe']"}),
+            'script_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'source_url': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'}),
+            'sstate_checksum': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+            'sstate_result': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'task_executed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'task_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'work_directory': ('django.db.models.fields.FilePathField', [], {'max_length': '255', 'blank': 'True'})
+        },
+        u'orm.task_dependency': {
+            'Meta': {'object_name': 'Task_Dependency'},
+            'depends_on': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_dependencies_depends'", 'to': u"orm['orm.Task']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'task': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'task_dependencies_task'", 'to': u"orm['orm.Task']"})
+        },
+        u'orm.toastersetting': {
+            'Meta': {'object_name': 'ToasterSetting'},
+            'helptext': ('django.db.models.fields.TextField', [], {}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '63'}),
+            'value': ('django.db.models.fields.CharField', [], {'max_length': '255'})
+        },
+        u'orm.variable': {
+            'Meta': {'object_name': 'Variable'},
+            'build': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'variable_build'", 'to': u"orm['orm.Build']"}),
+            'changed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'human_readable_name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'variable_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'variable_value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
+        },
+        u'orm.variablehistory': {
+            'Meta': {'object_name': 'VariableHistory'},
+            'file_name': ('django.db.models.fields.FilePathField', [], {'max_length': '255'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'line_number': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'operation': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
+            'value': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'variable': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'vhistory'", 'to': u"orm['orm.Variable']"})
+        }
+    }
+
+    complete_apps = ['orm']
\ No newline at end of file
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index e4d2e87..3832905 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -191,10 +191,11 @@ class Project(models.Model):
 
     # returns a queryset of compatible layers for a project
     def compatible_layerversions(self, release = None, layer_name = None):
+        logger.warning("This function is deprecated")
         if release == None:
             release = self.release
         # layers on the same branch or layers specifically set for this project
-        queryset = Layer_Version.objects.filter((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = self) | Q(build__project = self))
+        queryset = Layer_Version.objects.filter(((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = self)) & Q(build__isnull=True))
 
         if layer_name is not None:
             # we select only a layer name
@@ -205,45 +206,55 @@ class Project(models.Model):
 
         return queryset
 
-    def projectlayer_equivalent_set(self):
-        return self.compatible_layerversions().filter(layer__name__in = [x.layercommit.layer.name for x in self.projectlayer_set.all()]).select_related("up_branch")
+    def get_all_compatible_layer_versions(self):
+        """ Returns Queryset of all Layer_Versions which are compatible with
+        this project"""
+        queryset = Layer_Version.objects.filter(
+            (Q(up_branch__name=self.release.branch_name) & Q(build=None))
+            | Q(project=self))
+
+        return queryset
+
+    def get_project_layer_versions(self, pk=False):
+        """ Returns the Layer_Versions currently added to this project """
+        layer_versions = self.projectlayer_set.all().values('layercommit')
+
+        if pk is False:
+            return layer_versions
+        else:
+            return layer_versions.values_list('layercommit__pk', flat=True)
+
 
     def get_available_machines(self):
         """ Returns QuerySet of all Machines which are provided by the
         Layers currently added to the Project """
-        queryset = Machine.objects.filter(layer_version__in=self.projectlayer_equivalent_set)
+        queryset = Machine.objects.filter(
+            layer_version__in=self.get_project_layer_versions())
+
         return queryset
 
     def get_all_compatible_machines(self):
         """ Returns QuerySet of all the compatible machines available to the
         project including ones from Layers not currently added """
-        compatible_layers = self.compatible_layerversions()
+        queryset = Machine.objects.filter(
+            layer_version__in=self.get_all_compatible_layer_versions())
 
-        queryset = Machine.objects.filter(layer_version__in=compatible_layers)
         return queryset
 
     def get_available_recipes(self):
-        """ Returns QuerySet of all Recipes which are provided by the Layers
-        currently added to the Project """
-        project_layers = self.projectlayer_equivalent_set()
-        queryset = Recipe.objects.filter(layer_version__in = project_layers)
-
-        # Copied from get_all_compatible_recipes
-        search_maxids = map(lambda i: i[0], list(queryset.values('name').distinct().annotate(max_id=Max('id')).values_list('max_id')))
-        queryset = queryset.filter(id__in=search_maxids).select_related('layer_version', 'layer_version__layer', 'layer_version__up_branch', 'layer_source')
-        # End copy
+        """ Returns QuerySet of all the recipes that are provided by layers
+        added to this project """
+        queryset = Recipe.objects.filter(
+            layer_version__in=self.get_project_layer_versions())
 
         return queryset
 
     def get_all_compatible_recipes(self):
         """ Returns QuerySet of all the compatible Recipes available to the
         project including ones from Layers not currently added """
-        compatible_layerversions = self.compatible_layerversions()
-        queryset = Recipe.objects.filter(layer_version__in = compatible_layerversions)
+        queryset = Recipe.objects.filter(
+            layer_version__in=self.get_all_compatible_layer_versions()).exclude(name__exact='')
 
-        search_maxids = map(lambda i: i[0], list(queryset.values('name').distinct().annotate(max_id=Max('id')).values_list('max_id')))
-
-        queryset = queryset.filter(id__in=search_maxids).select_related('layer_version', 'layer_version__layer', 'layer_version__up_branch', 'layer_source')
         return queryset
 
 
@@ -260,7 +271,7 @@ class Project(models.Model):
             for l in self.projectlayer_set.all().order_by("pk"):
                 commit = l.layercommit.get_vcs_reference()
                 print("ii Building layer ", l.layercommit.layer.name, " at vcs point ", commit)
-                BRLayer.objects.create(req = br, name = l.layercommit.layer.name, giturl = l.layercommit.layer.vcs_url, commit = commit, dirpath = l.layercommit.dirpath)
+                BRLayer.objects.create(req = br, name = l.layercommit.layer.name, giturl = l.layercommit.layer.vcs_url, commit = commit, dirpath = l.layercommit.dirpath, layer_version=l.layercommit)
 
             br.state = BuildRequest.REQ_QUEUED
             now = timezone.now()
@@ -270,7 +281,7 @@ class Project(models.Model):
                                 )
             for t in self.projecttarget_set.all():
                 BRTarget.objects.create(req = br, target = t.target, task = t.task)
-                Target.objects.create(build = br.build, target = t.target)
+                Target.objects.create(build = br.build, target = t.target, task = t.task)
 
             for v in self.projectvariable_set.all():
                 BRVariable.objects.create(req = br, name = v.name, value = v.value)
@@ -333,13 +344,14 @@ class Build(models.Model):
         tgts = Target.objects.filter(build_id = self.id).order_by( 'target' );
         return( tgts );
 
-    @property
-    def toaster_exceptions(self):
-        return self.logmessage_set.filter(level=LogMessage.EXCEPTION)
+    def get_outcome_text(self):
+        return Build.BUILD_OUTCOME[int(self.outcome)][1]
 
     @property
     def errors(self):
-        return (self.logmessage_set.filter(level=LogMessage.ERROR)|self.logmessage_set.filter(level=LogMessage.EXCEPTION))
+        return (self.logmessage_set.filter(level=LogMessage.ERROR) |
+                self.logmessage_set.filter(level=LogMessage.EXCEPTION) |
+                self.logmessage_set.filter(level=LogMessage.CRITICAL))
 
     @property
     def warnings(self):
@@ -350,10 +362,23 @@ class Build(models.Model):
         return (self.completed_on - self.started_on).total_seconds()
 
     def get_current_status(self):
+        """
+        get the status string from the build request if the build
+        has one, or the text for the build outcome if it doesn't
+        """
+
         from bldcontrol.models import BuildRequest
-        if self.outcome == Build.IN_PROGRESS and self.buildrequest.state != BuildRequest.REQ_INPROGRESS:
+
+        build_request = None
+        if hasattr(self, 'buildrequest'):
+            build_request = self.buildrequest
+
+        if (build_request
+                and build_request.state != BuildRequest.REQ_INPROGRESS
+                and self.outcome == Build.IN_PROGRESS):
             return self.buildrequest.get_state_display()
-        return self.get_outcome_display()
+        else:
+            return self.get_outcome_text()
 
     def __str__(self):
         return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()]))
@@ -551,7 +576,7 @@ class Task_Dependency(models.Model):
 
 class Package(models.Model):
     search_allowed_fields = ['name', 'version', 'revision', 'recipe__name', 'recipe__version', 'recipe__license', 'recipe__layer_version__layer__name', 'recipe__layer_version__branch', 'recipe__layer_version__commit', 'recipe__layer_version__local_path', 'installed_name']
-    build = models.ForeignKey('Build')
+    build = models.ForeignKey('Build', null=True)
     recipe = models.ForeignKey('Recipe', null=True)
     name = models.CharField(max_length=100)
     installed_name = models.CharField(max_length=100, default='')
@@ -828,6 +853,7 @@ class LayerIndexLayerSource(LayerSource):
         import urllib2, urlparse, json
         import os
         proxy_settings = os.environ.get("http_proxy", None)
+        oe_core_layer = 'openembedded-core'
 
         def _get_json_response(apiurl = self.apiurl):
             _parsedurl = urlparse.urlparse(apiurl)
@@ -872,6 +898,25 @@ class LayerIndexLayerSource(LayerSource):
         if not connection.features.autocommits_when_autocommit_is_off:
             transaction.set_autocommit(False)
         for li in layers_info:
+            # Special case for the openembedded-core layer
+            if li['name'] == oe_core_layer:
+                try:
+                    # If we have an existing openembedded-core for example
+                    # from the toasterconf.json augment the info using the
+                    # layerindex rather than duplicate it
+                    oe_core_l =  Layer.objects.get(name=oe_core_layer)
+                    # Take ownership of the layer as now coming from the
+                    # layerindex
+                    oe_core_l.layer_source = self
+                    oe_core_l.up_id = li['id']
+                    oe_core_l.summary = li['summary']
+                    oe_core_l.description = li['description']
+                    oe_core_l.save()
+                    continue
+
+                except Layer.DoesNotExist:
+                    pass
+
             l, created = Layer.objects.get_or_create(layer_source = self, name = li['name'])
             l.up_id = li['id']
             l.up_date = li['updated']
@@ -882,6 +927,7 @@ class LayerIndexLayerSource(LayerSource):
             l.summary = li['summary']
             l.description = li['description']
             l.save()
+
         if not connection.features.autocommits_when_autocommit_is_off:
             transaction.set_autocommit(True)
 
@@ -974,9 +1020,12 @@ class LayerIndexLayerSource(LayerSource):
                 ro.file_path = ri['filepath'] + "/" + ri['filename']
                 if 'inherits' in ri:
                     ro.is_image = 'image' in ri['inherits'].split()
+                else: # workaround for old style layer index
+                    ro.is_image = "-image-" in ri['pn']
                 ro.save()
             except IntegrityError as e:
                 logger.debug("Failed saving recipe, ignoring: %s (%s:%s)" % (e, ro.layer_version, ri['filepath']+"/"+ri['filename']))
+                ro.delete()
         if not connection.features.autocommits_when_autocommit_is_off:
             transaction.set_autocommit(True)
 
@@ -1132,17 +1181,36 @@ class Layer_Version(models.Model):
         return project.compatible_layerversions(layer_name = self.layer.name)
 
     def get_vcs_reference(self):
-        if self.commit is not None and len(self.commit) > 0:
-            return self.commit
         if self.branch is not None and len(self.branch) > 0:
             return self.branch
         if self.up_branch is not None:
             return self.up_branch.name
+        if self.commit is not None and len(self.commit) > 0:
+            return self.commit
         return ("Cannot determine the vcs_reference for layer version %s" % vars(self))
 
     def get_detailspage_url(self, project_id):
         return reverse('layerdetails', args=(project_id, self.pk))
 
+    def get_alldeps(self, project_id):
+        """Get full list of unique layer dependencies."""
+        def gen_layerdeps(lver, project):
+            for ldep in lver.dependencies.all():
+                yield ldep.depends_on
+                # get next level of deps recursively calling gen_layerdeps
+                for subdep in gen_layerdeps(ldep.depends_on, project):
+                    yield subdep
+
+        project = Project.objects.get(pk=project_id)
+        result = []
+        projectlvers = [player.layercommit for player in project.projectlayer_set.all()]
+        for dep in gen_layerdeps(self, project):
+            # filter out duplicates and layers already belonging to the project
+            if dep not in result + projectlvers:
+                result.append(dep)
+
+        return sorted(result, key=lambda x: x.layer.name)
+
     def __unicode__(self):
         return "%d %s (VCS %s, Project %s)" % (self.pk, str(self.layer), self.get_vcs_reference(), self.build.project if self.build is not None else "No project")
 
@@ -1170,6 +1238,15 @@ class ProjectLayer(models.Model):
     class Meta:
         unique_together = (("project", "layercommit"),)
 
+class CustomImageRecipe(models.Model):
+    name = models.CharField(max_length=100)
+    base_recipe = models.ForeignKey(Recipe)
+    packages = models.ManyToManyField(Package)
+    project = models.ForeignKey(Project)
+
+    class Meta:
+        unique_together = ("name", "project")
+
 class ProjectVariable(models.Model):
     project = models.ForeignKey(Project)
     name = models.CharField(max_length=100)
@@ -1206,16 +1283,20 @@ class LogMessage(models.Model):
     INFO = 0
     WARNING = 1
     ERROR = 2
-
-    LOG_LEVEL = ( (INFO, "info"),
-            (WARNING, "warn"),
-            (ERROR, "error"),
-            (EXCEPTION, "toaster exception"))
+    CRITICAL = 3
+
+    LOG_LEVEL = (
+        (INFO, "info"),
+        (WARNING, "warn"),
+        (ERROR, "error"),
+        (CRITICAL, "critical"),
+        (EXCEPTION, "toaster exception")
+    )
 
     build = models.ForeignKey(Build)
     task  = models.ForeignKey(Task, blank = True, null=True)
     level = models.IntegerField(choices=LOG_LEVEL, default=INFO)
-    message=models.CharField(max_length=240)
+    message = models.TextField(blank=True, null=True)
     pathname = models.FilePathField(max_length=255, blank=True)
     lineno = models.IntegerField(null=True)
 
diff --git a/bitbake/lib/toaster/orm/tests.py b/bitbake/lib/toaster/orm/tests.py
index 783aea8..719266e 100644
--- a/bitbake/lib/toaster/orm/tests.py
+++ b/bitbake/lib/toaster/orm/tests.py
@@ -23,12 +23,11 @@
 
 from django.test import TestCase, TransactionTestCase
 from orm.models import LocalLayerSource, LayerIndexLayerSource, ImportedLayerSource, LayerSource
-from orm.models import Branch
+from orm.models import Branch, LayerVersionDependency
 
-from orm.models import Project, Build, Layer, Layer_Version, Branch, ProjectLayer
+from orm.models import Project, Layer, Layer_Version, Branch, ProjectLayer
 from orm.models import Release, ReleaseLayerSourcePriority, BitbakeVersion
 
-from django.utils import timezone
 from django.db import IntegrityError
 
 import os
@@ -153,35 +152,29 @@ class LayerVersionEquivalenceTestCase(TestCase):
         equivqs = self.lver.get_equivalents_wpriority(self.project)
         self.assertEqual(list(equivqs), [lver2, self.lver])
 
-    def test_build_layerversion(self):
+    def test_compatible_layer_versions(self):
         """
-        Any layer version coming from the build should show up
-        before any layer version coming from upstream
-        """
-        build = Build.objects.create(project=self.project,
-                                     started_on=timezone.now(),
-                                     completed_on=timezone.now())
-        lvb = Layer_Version.objects.create(layer=self.layer, build=build,
-                                           commit="deadbeef")
-
-        # a build layerversion must be in the equivalence
-        # list for the original layerversion
-        equivqs = self.lver.get_equivalents_wpriority(self.project)
-        self.assertTrue(len(equivqs) == 2)
-        self.assertTrue(equivqs[0] == self.lver)
-        self.assertTrue(equivqs[1] == lvb)
-
-        # getting the build layerversion equivalent list must
-        # return the same list as the original layer
-        bequivqs = lvb.get_equivalents_wpriority(self.project)
-
-        self.assertEqual(list(equivqs), list(bequivqs))
-
-    def test_compatible_layerversions(self):
-        """
-        When we have a 2 layer versions, compatible_layerversions()
+        When we have a 2 layer versions, get_all_compatible_layerversions()
         should return a queryset with both.
         """
-        compat_lv = self.project.compatible_layerversions()
+        compat_lv = self.project.get_all_compatible_layer_versions()
         self.assertEqual(list(compat_lv), [self.lver, self.lver2])
 
+    def test_layerversion_get_alldeps(self):
+        """Test Layer_Version.get_alldeps API."""
+        lvers = {}
+        for i in range(10):
+            name = "layer%d" % i
+            lvers[name] = Layer_Version.objects.create(layer=Layer.objects.create(name=name),
+                                                       project=self.project)
+            if i:
+                LayerVersionDependency.objects.create(layer_version=lvers["layer%d" % (i - 1)],
+                                                      depends_on=lvers[name])
+                # Check dinamically added deps
+                self.assertEqual(lvers['layer0'].get_alldeps(self.project.id),
+                                 [lvers['layer%d' % n] for n in range(1, i+1)])
+
+        # Check chain of deps created in previous loop
+        for i in range(10):
+            self.assertEqual(lvers['layer%d' % i].get_alldeps(self.project.id),
+                             [lvers['layer%d' % n] for n in range(i+1, 10)])
diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css
index cce3e31..bc8a97b 100644
--- a/bitbake/lib/toaster/toastergui/static/css/default.css
+++ b/bitbake/lib/toaster/toastergui/static/css/default.css
@@ -15,6 +15,8 @@
 /* Styles for the help information */
 .get-help { color: #CCCCCC; }
 .get-help:hover, .icon-plus-sign:hover { color: #999999; cursor: pointer; }
+.get-help-green { color: #468847; }
+.get-help-green:hover { color: #347132; cursor: pointer; }
 .get-help-blue { color: #3A87AD; }
 .get-help-blue:hover { color: #005580; cursor: pointer; }
 .get-help-yellow { color: #C09853; }
@@ -161,9 +163,16 @@ table { table-layout: fixed; word-wrap: break-word; }
 .project-name .label { font-weight: normal; margin-bottom: 5px; margin-left: -15px; padding: 5px; }
 .project-name .label > a { color: #fff; font-weight: normal; }
 
+/* styles for showing help icons next to command-line builds */
+.build-result .get-help-green, .build-result .get-help-red, .build-result .get-help-blue { margin-right: 35px; margin-top: 8px; font-size: 16px; }
+
 /* Remove bottom margin for forms inside modal dialogs */
 #dependencies-modal-form { margin-bottom: 0px; }
 
+/* Custom column widths */
+.narrow-col { width: 8%; }
+.medium-col { width: 12%; }
+
 /* Configuration styles */
 .icon-trash { color: #B94A48; font-size: 16px; padding-left: 5px; }
 .icon-trash:hover { color: #943A38; text-decoration: none; cursor: pointer; }
diff --git a/bitbake/lib/toaster/toastergui/static/js/base.js b/bitbake/lib/toaster/toastergui/static/js/base.js
index 895e61b..ed22a4e 100644
--- a/bitbake/lib/toaster/toastergui/static/js/base.js
+++ b/bitbake/lib/toaster/toastergui/static/js/base.js
@@ -6,6 +6,7 @@ function basePageInit(ctx) {
   var newBuildTargetInput;
   var newBuildTargetBuildBtn;
   var projectNameForm = $("#project-name-change-form");
+  var projectNameContainer = $("#project-name-container");
   var projectName = $("#project-name");
   var projectNameFormToggle = $("#project-change-form-toggle");
   var projectNameChangeCancel = $("#project-name-change-cancel");
@@ -23,24 +24,21 @@ function basePageInit(ctx) {
   /* Project name change functionality */
   projectNameFormToggle.click(function(e){
     e.preventDefault();
-
-    $(this).add(projectName).hide();
+    projectNameContainer.hide();
     projectNameForm.fadeIn();
   });
 
   projectNameChangeCancel.click(function(e){
     e.preventDefault();
-
     projectNameForm.hide();
-    projectName.add(projectNameFormToggle).fadeIn();
+    projectNameContainer.fadeIn();
   });
 
   $("#project-name-change-btn").click(function(e){
     var newProjectName = $("#project-name-change-input").val();
 
-    libtoaster.editCurrentProject({ projectName: newProjectName },function (){
-
-      projectName.text(newProjectName);
+    libtoaster.editCurrentProject({ projectName: newProjectName }, function (){
+      projectName.html(newProjectName);
       libtoaster.ctx.projectName = newProjectName;
       projectNameChangeCancel.click();
     });
@@ -123,14 +121,14 @@ function basePageInit(ctx) {
   });
 
   function _checkProjectBuildable() {
-    if (selectedProject.projectId === undefined) {
+    if (selectedProject.projectId === undefined || selectedProject.projectIsDefault) {
       return;
     }
 
     libtoaster.getProjectInfo(selectedProject.projectPageUrl,
       function (data) {
         if (data.machine === null || data.machine.name === undefined || data.layers.length === 0) {
-          /* we can't build anything with out a machine and some layers */
+          /* we can't build anything without a machine and some layers */
           $("#new-build-button #targets-form").hide();
           $("#new-build-button .alert").show();
         } else {
@@ -149,7 +147,7 @@ function basePageInit(ctx) {
     /* If we don't have a current project then present the set project
      * form.
      */
-    if (selectedProject.projectId === undefined) {
+    if (selectedProject.projectId === undefined || selectedProject.projectIsDefault) {
       $('#change-project-form').show();
       $('#project .icon-pencil').hide();
     }
diff --git a/bitbake/lib/toaster/toastergui/static/js/customrecipe.js b/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
new file mode 100644
index 0000000..4f6b304
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
@@ -0,0 +1,50 @@
+"use strict";
+
+function customRecipePageInit(ctx) {
+
+  var urlParams = libtoaster.parseUrlParams();
+
+  (function notificationRequest(){
+    if (urlParams.hasOwnProperty('notify') && urlParams.notify === 'new'){
+      $("#image-created-notification").show();
+    }
+  })();
+
+  $("#recipeselection").on('table-done', function(e, total, tableParams){
+    /* Table is done so now setup the click handler for the package buttons */
+    $(".add-rm-package-btn").click(function(e){
+      e.preventDefault();
+      addRemovePackage($(this), tableParams);
+    });
+  });
+
+  function addRemovePackage(pkgBtn, tableParams){
+    var pkgBtnData = pkgBtn.data();
+    var method;
+    var buttonToShow;
+
+    if (pkgBtnData.directive == 'add') {
+      method = 'PUT';
+      buttonToShow = '#package-rm-btn-' + pkgBtnData.package;
+    } else if (pkgBtnData.directive == 'remove') {
+      method = 'DELETE';
+      buttonToShow = '#package-add-btn-' + pkgBtnData.package;
+    } else {
+      throw("Unknown package directive: should be add or remove");
+    }
+
+    $.ajax({
+        type: method,
+        url: pkgBtnData.packageUrl,
+        headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
+        success: function(data){
+          /* Invalidate the Add | Rm package table's current cache */
+          tableParams.nocache = true;
+          $.get(ctx.tableApiUrl, tableParams);
+          /* Swap the buttons around */
+          pkgBtn.hide();
+          $(buttonToShow).show();
+        }
+    });
+  }
+}
diff --git a/bitbake/lib/toaster/toastergui/static/js/importlayer.js b/bitbake/lib/toaster/toastergui/static/js/importlayer.js
index 2fadbc0..c68f366 100644
--- a/bitbake/lib/toaster/toastergui/static/js/importlayer.js
+++ b/bitbake/lib/toaster/toastergui/static/js/importlayer.js
@@ -195,8 +195,8 @@ function importLayerPageInit (ctx) {
     var dupLayerInfo = $("#duplicate-layer-info");
     dupLayerInfo.find(".dup-layer-name").text(layer.name);
     dupLayerInfo.find(".dup-layer-link").attr("href", layer.layerdetailurl);
-    dupLayerInfo.find("#dup-layer-vcs-url").text(layer.layer__vcs_url);
-    dupLayerInfo.find("#dup-layer-revision").text(layer.revision.commit);
+    dupLayerInfo.find("#dup-layer-vcs-url").text(layer.vcs_url);
+    dupLayerInfo.find("#dup-layer-revision").text(layer.vcs_reference);
 
     $(".fields-apart-from-layer-name").fadeOut(function(){
 
@@ -214,11 +214,10 @@ function importLayerPageInit (ctx) {
       $.getJSON(libtoaster.ctx.layersTypeAheadUrl,
         { include_added: "true" , search: name, format: "json" },
         function(layer) {
-          if (layer.rows.length > 0) {
-            for (var i in layer.rows){
-              if (layer.rows[i].name == name) {
-                console.log(layer.rows[i])
-                layerExistsError(layer.rows[i]);
+          if (layer.results.length > 0) {
+            for (var i in layer.results){
+              if (layer.results[i].name == name) {
+                layerExistsError(layer.results[i]);
               }
             }
           }
diff --git a/bitbake/lib/toaster/toastergui/static/js/jquery.treetable.js b/bitbake/lib/toaster/toastergui/static/js/jquery.treetable.js
index 42e7427..794b902 100644
--- a/bitbake/lib/toaster/toastergui/static/js/jquery.treetable.js
+++ b/bitbake/lib/toaster/toastergui/static/js/jquery.treetable.js
@@ -421,7 +421,7 @@
         columnElType: "td", // i.e. 'td', 'th' or 'td,th'
         expandable: false,
         expanderTemplate: "<a href='#'> </a>",
-        indent: 19,
+        indent: 10,
         indenterTemplate: "<span class='indenter'></span>",
         initialState: "collapsed",
         nodeIdAttr: "ttId", // maps to data-tt-id
diff --git a/bitbake/lib/toaster/toastergui/static/js/layerBtn.js b/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
index a0509f9..7318b3f 100644
--- a/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
+++ b/bitbake/lib/toaster/toastergui/static/js/layerBtn.js
@@ -1,6 +1,6 @@
 "use strict";
 
-function layerBtnsInit(ctx) {
+function layerBtnsInit() {
 
   /* Remove any current bindings to avoid duplicated binds */
   $(".layerbtn").unbind('click');
@@ -68,10 +68,16 @@ function layerBtnsInit(ctx) {
       });
   });
 
-  /* Setup the initial state of the buttons */
 
-  for (var i in ctx.projectLayers){
-      $(".layer-exists-" + ctx.projectLayers[i]).show();
-      $(".layer-add-" + ctx.projectLayers[i]).hide();
-  }
+  $(".customise-btn").unbind('click');
+  $(".customise-btn").click(function(e){
+    e.preventDefault();
+    var imgCustomModal = $("#new-custom-image-modal");
+
+    if (imgCustomModal.length == 0)
+      throw("Modal new-custom-image not found");
+
+    imgCustomModal.data('recipe', $(this).data('recipe'));
+    imgCustomModal.modal('show');
+  });
 }
diff --git a/bitbake/lib/toaster/toastergui/static/js/layerdetails.js b/bitbake/lib/toaster/toastergui/static/js/layerdetails.js
index 000e803..8c2ec4c 100644
--- a/bitbake/lib/toaster/toastergui/static/js/layerdetails.js
+++ b/bitbake/lib/toaster/toastergui/static/js/layerdetails.js
@@ -7,6 +7,9 @@ function layerDetailsPageInit (ctx) {
   var layerDepsList = $("#layer-deps-list");
   var currentLayerDepSelection;
   var addRmLayerBtn = $("#add-remove-layer-btn");
+  var targetTab = $("#targets-tab");
+  var machineTab = $("#machines-tab");
+  var detailsTab = $("#details-tab");
 
   /* setup the dependencies typeahead */
   libtoaster.makeTypeahead(layerDepInput, libtoaster.ctx.layersTypeAheadUrl, { include_added: "true" }, function(item){
@@ -15,6 +18,21 @@ function layerDetailsPageInit (ctx) {
     layerDepBtn.removeAttr("disabled");
   });
 
+  $(window).on('hashchange', function(e){
+    switch(window.location.hash){
+      case '#machines':
+        machineTab.tab('show');
+        break;
+      case '#recipes':
+        targetTab.tab('show');
+        break;
+      default:
+        detailsTab.tab('show');
+        break;
+    }
+  });
+
+
   $(".breadcrumb li:first a").click(function(e){
     e.preventDefault();
     /* By default this link goes to the project configuration page. However
@@ -143,7 +161,7 @@ function layerDetailsPageInit (ctx) {
       addRmLayerBtn.removeClass("btn-danger");
   }
 
-  $("#details-tab").on('show', function(){
+  detailsTab.on('show', function(){
     if (!ctx.layerVersion.inCurrentPrj)
       defaultAddBtnText();
 
@@ -174,7 +192,7 @@ function layerDetailsPageInit (ctx) {
       $("#no-recipes-yet").hide();
     }
 
-    $("#targets-tab").removeClass("muted");
+    targetTab.removeClass("muted");
     if (window.location.hash === "#recipes"){
       /* re run the machinesTabShow to update the text */
       targetsTabShow();
@@ -189,7 +207,7 @@ function layerDetailsPageInit (ctx) {
     else
       $("#no-machines-yet").hide();
 
-    $("#machines-tab").removeClass("muted");
+    machineTab.removeClass("muted");
     if (window.location.hash === "#machines"){
       /* re run the machinesTabShow to update the text */
       machinesTabShow();
@@ -202,7 +220,7 @@ function layerDetailsPageInit (ctx) {
 
   });
 
-  $("#targets-tab").on('show', targetsTabShow);
+  targetTab.on('show', targetsTabShow);
 
   function machinesTabShow(){
     if (!ctx.layerVersion.inCurrentPrj) {
@@ -219,7 +237,7 @@ function layerDetailsPageInit (ctx) {
     window.location.hash = "machines";
   }
 
-  $("#machines-tab").on('show', machinesTabShow);
+  machineTab.on('show', machinesTabShow);
 
   $(".pagesize").change(function(){
     var search = libtoaster.parseUrlParams();
@@ -236,7 +254,7 @@ function layerDetailsPageInit (ctx) {
 
     if (added){
       /* enable and switch all the button states */
-      $(".build-target-btn").removeAttr("disabled");
+      $(".build-recipe-btn").removeAttr("disabled");
       $(".select-machine-btn").removeAttr("disabled");
       addRmLayerBtn.addClass("btn-danger");
       addRmLayerBtn.data('directive', "remove");
@@ -245,7 +263,7 @@ function layerDetailsPageInit (ctx) {
 
     } else {
       /* disable and switch all the button states */
-      $(".build-target-btn").attr("disabled","disabled");
+      $(".build-recipe-btn").attr("disabled","disabled");
       $(".select-machine-btn").attr("disabled", "disabled");
       addRmLayerBtn.removeClass("btn-danger");
       addRmLayerBtn.data('directive', "add");
diff --git a/bitbake/lib/toaster/toastergui/static/js/newcustomimage.js b/bitbake/lib/toaster/toastergui/static/js/newcustomimage.js
new file mode 100644
index 0000000..935b21e
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/static/js/newcustomimage.js
@@ -0,0 +1,49 @@
+"use strict";
+
+function newCustomImagePageInit(ctx){
+
+  var newCustomImgBtn = $("#create-new-custom-image-btn");
+  var imgCustomModal = $("#new-custom-image-modal");
+
+  newCustomImgBtn.click(function(e){
+    e.preventDefault();
+
+    var name = imgCustomModal.find('input').val();
+    var baseRecipeId = imgCustomModal.data('recipe');
+
+    if (name.length > 0) {
+      createCustomRecipe(name, baseRecipeId);
+      imgCustomModal.modal('hide');
+    } else {
+      console.warn("TODO No name supplied");
+    }
+  });
+
+  function createCustomRecipe(name, baseRecipeId){
+    var data = {
+      'name' : name,
+      'project' : libtoaster.ctx.projectId,
+      'base' : baseRecipeId,
+    };
+
+    $.ajax({
+        type: "POST",
+        url: ctx.xhrCustomRecipeUrl,
+        data: data,
+        headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
+        success: function (ret) {
+          if (ret.error !== "ok") {
+            console.warn(ret.error);
+          } else {
+            window.location.replace(ret.url + '?notify=new');
+          }
+        },
+        error: function (ret) {
+          console.warn("Call failed");
+          console.warn(ret);
+        }
+    });
+  }
+
+
+}
diff --git a/bitbake/lib/toaster/toastergui/static/js/projectpage.js b/bitbake/lib/toaster/toastergui/static/js/projectpage.js
index d367047..e742ef2 100644
--- a/bitbake/lib/toaster/toastergui/static/js/projectpage.js
+++ b/bitbake/lib/toaster/toastergui/static/js/projectpage.js
@@ -23,7 +23,7 @@ function projectPageInit(ctx) {
   var cancelReleaseChange = $("#cancel-release-change");
 
   var currentLayerAddSelection;
-  var currentMachineAddSelection = {};
+  var currentMachineAddSelection = "";
 
   var urlParams = libtoaster.parseUrlParams();
 
@@ -38,7 +38,7 @@ function projectPageInit(ctx) {
      */
     if (urlParams.hasOwnProperty('setMachine') &&
         urlParams.setMachine !== prjInfo.machine.name){
-        currentMachineAddSelection.name = urlParams.setMachine;
+        machineChangeInput.val(urlParams.setMachine);
         machineChangeBtn.click();
     } else {
       updateMachineName(prjInfo.machine.name);
@@ -103,6 +103,12 @@ function projectPageInit(ctx) {
     layerAddBtn.removeAttr("disabled");
   });
 
+  layerAddInput.keyup(function() {
+    if ($(this).val().length == 0) {
+      layerAddBtn.attr("disabled", "disabled")
+    }
+  });
+
   layerAddBtn.click(function(e){
     e.preventDefault();
     var layerObj = currentLayerAddSelection;
@@ -146,10 +152,7 @@ function projectPageInit(ctx) {
 
       link.attr("href", layerObj.layerdetailurl);
       link.text(layerObj.name);
-      /* YOCTO #8024
-        link.tooltip({title: layerObj.giturl + " | "+ layerObj.branch.name, placement: "right"});
-        branch name not accessible sometimes it is revision instead
-      */
+      link.tooltip({title: layerObj.vcs_url + " | "+ layerObj.vcs_reference, placement: "right"});
 
       var trashItem = projectLayer.children("span");
       trashItem.click(function (e) {
@@ -251,29 +254,33 @@ function projectPageInit(ctx) {
   }
 
   libtoaster.makeTypeahead(machineChangeInput, libtoaster.ctx.machinesTypeAheadUrl, { }, function(item){
-    currentMachineAddSelection = item;
+    currentMachineAddSelection = item.name;
     machineChangeBtn.removeAttr("disabled");
   });
 
   machineChangeBtn.click(function(e){
     e.preventDefault();
-    if (currentMachineAddSelection.name === undefined)
+    /* We accept any value regardless of typeahead selection or not */
+    if (machineChangeInput.val().length === 0)
       return;
 
-    libtoaster.editCurrentProject({ machineName : currentMachineAddSelection.name },
+    currentMachineAddSelection = machineChangeInput.val();
+
+    libtoaster.editCurrentProject(
+      { machineName : currentMachineAddSelection },
       function(){
         /* Success machine changed */
-        updateMachineName(currentMachineAddSelection.name);
+        updateMachineName(currentMachineAddSelection);
         machineChangeCancel.click();
 
         /* Show the alert message */
         var message = $('<span class="lead">You have changed the machine to: <strong><span id="notify-machine-name"></span></strong></span>');
-        message.find("#notify-machine-name").text(currentMachineAddSelection.name);
+        message.find("#notify-machine-name").text(currentMachineAddSelection);
         libtoaster.showChangeNotification(message);
     },
       function(){
         /* Failed machine changed */
-        console.log("failed to change machine");
+        console.warn("Failed to change machine");
     });
   });
 
diff --git a/bitbake/lib/toaster/toastergui/static/js/table.js b/bitbake/lib/toaster/toastergui/static/js/table.js
index f18034d..40b5022 100644
--- a/bitbake/lib/toaster/toastergui/static/js/table.js
+++ b/bitbake/lib/toaster/toastergui/static/js/table.js
@@ -33,14 +33,6 @@ function tableInit(ctx){
 
   loadData(tableParams);
 
-  window.onpopstate = function(event){
-    if (event.state){
-      tableParams = event.state.tableParams;
-      /* We skip loadData and just update the table */
-      updateTable(event.state.tableData);
-    }
-  };
-
   function loadData(tableParams){
     $.ajax({
         type: "GET",
@@ -49,10 +41,8 @@ function tableInit(ctx){
         headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
         success: function(tableData) {
           updateTable(tableData);
-          window.history.pushState({
-              tableData: tableData,
-              tableParams: tableParams
-          }, null, libtoaster.dumpsUrlParams(tableParams));
+          window.history.replaceState(null, null,
+            libtoaster.dumpsUrlParams(tableParams));
         }
     });
   }
@@ -140,7 +130,7 @@ function tableInit(ctx){
       tableBody.append(row);
 
       /* If we have layerbtns then initialise them */
-      layerBtnsInit(ctx);
+      layerBtnsInit();
 
       /* If we have popovers initialise them now */
       $('td > a.btn').popover({
diff --git a/bitbake/lib/toaster/toastergui/static/js/tests/test.js b/bitbake/lib/toaster/toastergui/static/js/tests/test.js
index d610113..aac0ba6 100644
--- a/bitbake/lib/toaster/toastergui/static/js/tests/test.js
+++ b/bitbake/lib/toaster/toastergui/static/js/tests/test.js
@@ -13,8 +13,6 @@ QUnit.test("Layer alert notification", function(assert) {
     "name":"meta-example"
   };
 
-  var correctResponse = "You have added <strong>3</strong> layers to your project: <a id=\"layer-affected-name\" href=\"/toastergui/project/1/layer/22\">meta-example</a> and its dependencies <a href=\"/toastergui/project/1/layer/9\" data-original-title=\"\" title=\"\">meta-example-two</a>, <a href=\"/toastergui/project/1/layer/9\" data-original-title=\"\" title=\"\">meta-example-three</a>";
-
   var layerDepsList = [
     {
     "layerdetailurl":"/toastergui/project/1/layer/9",
@@ -68,9 +66,9 @@ QUnit.test("Show notification", function(assert){
 });
 
 var layer = {
-  "id": 91,
-  "name":  "meta-crystalforest",
-  "layerdetailurl": "/toastergui/project/4/layer/91"
+  "id": 1,
+  "name":  "meta-testing",
+  "layerdetailurl": "/toastergui/project/1/layer/1"
 };
 
 QUnit.test("Add layer", function(assert){
@@ -84,11 +82,19 @@ QUnit.test("Add layer", function(assert){
     }
   }, 200);
 
-  libtoaster.addRmLayer(layer, true, function(deps){
-    assert.equal(deps.length, 1);
-    done();
+  /* Compare the number of layers before and after the add in the project */
+  libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl, function(prjInfo){
+    var origNumLayers = prjInfo.layers.length;
+
+    libtoaster.addRmLayer(layer, true, function(deps){
+      libtoaster.getProjectInfo(libtoaster.ctx.projectPageUrl,
+        function(prjInfo){
+        assert.ok(prjInfo.layers.length > origNumLayers,
+          "Layer not added to project");
+        done();
+      });
+    });
   });
-
 });
 
 QUnit.test("Rm layer", function(assert){
@@ -152,11 +158,11 @@ QUnit.test("Layer details page init", function(assert){
 });
 
 QUnit.test("Layer btns init", function(assert){
-  assert.throws(layerBtnsInit({ projectLayers : [] }));
+  assert.throws(layerBtnsInit());
 });
 
 QUnit.test("Table init", function(assert){
-  assert.throws(tableInit({ url : tableUrl }));
+  assert.throws(tableInit({ url : ctx.tableUrl }));
 });
 
 $(document).ajaxError(function(event, jqxhr, settings, errMsg){
@@ -167,9 +173,3 @@ $(document).ajaxError(function(event, jqxhr, settings, errMsg){
     assert.notOk(jqxhr.responseText);
   });
 });
-
-
-
-
-
-
diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py
index 92e3b5c..9c9cda4 100644
--- a/bitbake/lib/toaster/toastergui/tables.py
+++ b/bitbake/lib/toaster/toastergui/tables.py
@@ -21,6 +21,7 @@
 
 from toastergui.widgets import ToasterTable
 from orm.models import Recipe, ProjectLayer, Layer_Version, Machine, Project
+from orm.models import CustomImageRecipe, Package
 from django.db.models import Q, Max
 from django.conf.urls import url
 from django.core.urlresolvers import reverse
@@ -50,14 +51,13 @@ class LayersTable(ToasterTable):
     def __init__(self, *args, **kwargs):
         super(LayersTable, self).__init__(*args, **kwargs)
         self.default_orderby = "layer__name"
+        self.title = "Compatible layers"
 
     def get_context_data(self, **kwargs):
         context = super(LayersTable, self).get_context_data(**kwargs)
 
         project = Project.objects.get(pk=kwargs['pid'])
-
         context['project'] = project
-        context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=project))
 
         return context
 
@@ -91,7 +91,10 @@ class LayersTable(ToasterTable):
 
     def setup_queryset(self, *args, **kwargs):
         prj = Project.objects.get(pk = kwargs['pid'])
-        compatible_layers = prj.compatible_layerversions()
+        compatible_layers = prj.get_all_compatible_layer_versions()
+
+        self.static_context_extra['current_layers'] = \
+                prj.get_project_layer_versions(pk=True)
 
         self.queryset = compatible_layers.order_by(self.default_orderby)
 
@@ -208,6 +211,7 @@ class MachinesTable(ToasterTable, ProjectFiltersMixin):
     def __init__(self, *args, **kwargs):
         super(MachinesTable, self).__init__(*args, **kwargs)
         self.empty_state = "No machines maybe you need to do a build?"
+        self.title = "Compatible machines"
         self.default_orderby = "name"
 
     def get_context_data(self, **kwargs):
@@ -218,7 +222,7 @@ class MachinesTable(ToasterTable, ProjectFiltersMixin):
 
     def setup_filters(self, *args, **kwargs):
         project = Project.objects.get(pk=kwargs['pid'])
-        self.project_layers = project.projectlayer_equivalent_set()
+        self.project_layers = project.get_project_layer_versions()
 
         self.add_filter(title="Filter by project machines",
                         name="in_current_project",
@@ -308,13 +312,20 @@ class LayerMachinesTable(MachinesTable):
 
 
 class RecipesTable(ToasterTable, ProjectFiltersMixin):
-    """Table of Recipes in Toaster"""
+    """Table of All Recipes in Toaster"""
 
     def __init__(self, *args, **kwargs):
         super(RecipesTable, self).__init__(*args, **kwargs)
         self.empty_state = "Toaster has no recipe information. To generate recipe information you can configure a layer source then run a build."
         self.default_orderby = "name"
 
+    build_col = { 'title' : "Build",
+            'help_text' : "Add or delete recipes to and from your project",
+            'hideable' : False,
+            'filter_name' : "in_current_project",
+            'static_data_name' : "add-del-layers",
+            'static_data_template' : '{% include "recipe_btn.html" %}'}
+
     def get_context_data(self, **kwargs):
         project = Project.objects.get(pk=kwargs['pid'])
         context = super(RecipesTable, self).get_context_data(**kwargs)
@@ -326,9 +337,6 @@ class RecipesTable(ToasterTable, ProjectFiltersMixin):
         return context
 
     def setup_filters(self, *args, **kwargs):
-        project = Project.objects.get(pk=kwargs['pid'])
-        self.project_layers = project.projectlayer_equivalent_set()
-
         self.add_filter(title="Filter by project recipes",
                         name="in_current_project",
                         filter_actions=[
@@ -336,24 +344,23 @@ class RecipesTable(ToasterTable, ProjectFiltersMixin):
                             self.make_filter_action("not_in_project", "Recipes provided by layers not added to this project", self.filter_not_in_project)
                         ])
 
-
     def setup_queryset(self, *args, **kwargs):
         prj = Project.objects.get(pk = kwargs['pid'])
 
+        # Project layers used by the filters
+        self.project_layers = prj.get_project_layer_versions(pk=True)
+
+        # Project layers used to switch the button states
+        self.static_context_extra['current_layers'] = self.project_layers
+
         self.queryset = prj.get_all_compatible_recipes()
         self.queryset = self.queryset.order_by(self.default_orderby)
 
 
     def setup_columns(self, *args, **kwargs):
 
-        self.add_column(title="Recipe",
-                        help_text="Information about a single piece of software, including where to download the source, configuration options, how to compile the source files and how to package the compiled output",
-                        hideable=False,
-                        orderable=True,
-                        field_name="name")
-
-        self.add_column(title="Recipe Version",
-                        hidden=True,
+        self.add_column(title="Version",
+                        hidden=False,
                         field_name="version")
 
         self.add_column(title="Description",
@@ -374,6 +381,7 @@ class RecipesTable(ToasterTable, ProjectFiltersMixin):
 
         self.add_column(title="Section",
                         help_text="The section in which recipes should be categorized",
+                        hidden=True,
                         orderable=True,
                         field_name="section")
 
@@ -390,24 +398,14 @@ class RecipesTable(ToasterTable, ProjectFiltersMixin):
 
         self.add_column(title="License",
                         help_text="The list of source licenses for the recipe. Multiple license names separated by the pipe character indicates a choice between licenses. Multiple license names separated by the ampersand character indicates multiple licenses exist that cover different parts of the source",
+                        hidden=True,
                         orderable=True,
                         field_name="license")
 
         self.add_column(title="Revision",
+                        hidden=True,
                         field_name="layer_version__get_vcs_reference")
 
-        self.add_column(title="Build",
-                        help_text="Add or delete recipes to and from your project",
-                        hideable=False,
-                        filter_name="in_current_project",
-                        static_data_name="add-del-layers",
-                        static_data_template='{% include "recipe_btn.html" %}')
-
-        project = Project.objects.get(pk=kwargs['pid'])
-        self.add_column(title="Project compatible Layer ID",
-                        displayable = False,
-                        field_name = "projectcompatible_layer",
-                        computation = lambda x: (x.layer_version.get_equivalents_wpriority(project)[0]))
 
 class LayerRecipesTable(RecipesTable):
     """ Smaller version of the Recipes table for use in layer details """
@@ -422,8 +420,8 @@ class LayerRecipesTable(RecipesTable):
 
 
     def setup_queryset(self, *args, **kwargs):
-        RecipesTable.setup_queryset(self, *args, **kwargs)
-        self.queryset = self.queryset.filter(layer_version__pk=int(kwargs['layerid']))
+        self.queryset = \
+                Recipe.objects.filter(layer_version__pk=int(kwargs['layerid']))
 
         self.static_context_extra['in_prj'] = ProjectLayer.objects.filter(Q(project=kwargs['pid']) & Q(layercommit=kwargs['layerid'])).count()
 
@@ -434,20 +432,197 @@ class LayerRecipesTable(RecipesTable):
                         orderable=True,
                         field_name="name")
 
+        self.add_column(title="Version",
+                        field_name="version")
+
         self.add_column(title="Description",
                         field_name="get_description_or_summary")
 
-
         build_recipe_template ='<button class="btn btn-block build-recipe-btn" data-recipe-name="{{data.name}}" {%if extra.in_prj == 0 %}disabled="disabled"{%endif%}>Build recipe</button>'
 
         self.add_column(title="Build recipe",
                         static_data_name="add-del-layers",
                         static_data_template=build_recipe_template)
 
-class ProjectLayersRecipesTable(RecipesTable):
-    """ Table that lists only recipes available for layers added to the project """
+class CustomImagesTable(ToasterTable):
+    """ Table to display your custom images """
+    def __init__(self, *args, **kwargs):
+        super(CustomImagesTable, self).__init__(*args, **kwargs)
+        self.title = "Custom images"
+
+    def get_context_data(self, **kwargs):
+        context = super(CustomImagesTable, self).get_context_data(**kwargs)
+        project = Project.objects.get(pk=kwargs['pid'])
+        context['project'] = project
+        context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=context['project']))
+        return context
 
     def setup_queryset(self, *args, **kwargs):
-        super(ProjectLayersRecipesTable, self).setup_queryset(*args, **kwargs)
         prj = Project.objects.get(pk = kwargs['pid'])
-        self.queryset = self.queryset.filter(layer_version__in = prj.projectlayer_equivalent_set())
+        self.queryset = CustomImageRecipe.objects.filter(project=prj)
+        self.queryset = self.queryset.order_by('name')
+
+    def setup_columns(self, *args, **kwargs):
+
+        name_link_template = '''
+        <a href="{% url 'customrecipe' extra.pid data.id %}">
+          {{data.name}}
+        </a>
+        '''
+
+        self.add_column(title="Custom image",
+                        hideable=False,
+                        static_data_name="name",
+                        static_data_template=name_link_template)
+
+        self.add_column(title="Recipe file",
+                        static_data_name='recipe_file',
+                        static_data_template='')
+
+        approx_packages_template = '<a href="#imagedetails">{{data.packages.all|length}}</a>'
+        self.add_column(title="Approx packages",
+                        static_data_name='approx_packages',
+                        static_data_template=approx_packages_template)
+
+
+        build_btn_template = '''<button data-recipe-name="{{data.name}}"
+        class="btn btn-block build-recipe-btn" style="margin-top: 5px;" >
+        Build</button>'''
+
+        self.add_column(title="Build",
+                        hideable=False,
+                        static_data_name='build_custom_img',
+                        static_data_template=build_btn_template)
+
+class ImageRecipesTable(RecipesTable):
+    """ A subset of the recipes table which displayed just image recipes """
+
+    def __init__(self, *args, **kwargs):
+        super(ImageRecipesTable, self).__init__(*args, **kwargs)
+        self.title = "Compatible image recipes"
+
+    def setup_queryset(self, *args, **kwargs):
+        super(ImageRecipesTable, self).setup_queryset(*args, **kwargs)
+
+        self.queryset = self.queryset.filter(is_image=True)
+
+
+    def setup_columns(self, *args, **kwargs):
+        self.add_column(title="Image recipe",
+                        help_text="When you build an image recipe, you get an "
+                                  "image: a root file system you can"
+                                  "deploy to a machine",
+                        hideable=False,
+                        orderable=True,
+                        field_name="name")
+
+        super(ImageRecipesTable, self).setup_columns(*args, **kwargs)
+
+        self.add_column(**RecipesTable.build_col)
+
+
+class NewCustomImagesTable(ImageRecipesTable):
+    """ Table which displays Images recipes which can be customised """
+    def __init__(self, *args, **kwargs):
+        super(NewCustomImagesTable, self).__init__(*args, **kwargs)
+        self.title = "Select the image recipe you want to customise"
+
+    def setup_queryset(self, *args, **kwargs):
+        super(ImageRecipesTable, self).setup_queryset(*args, **kwargs)
+
+        self.queryset = self.queryset.filter(is_image=True)
+
+    def setup_columns(self, *args, **kwargs):
+        self.add_column(title="Image recipe",
+                        help_text="When you build an image recipe, you get an "
+                                  "image: a root file system you can"
+                                  "deploy to a machine",
+                        hideable=False,
+                        orderable=True,
+                        field_name="recipe__name")
+
+        super(ImageRecipesTable, self).setup_columns(*args, **kwargs)
+
+        self.add_column(title="Customise",
+                        hideable=False,
+                        filter_name="in_current_project",
+                        static_data_name="customise-or-add-recipe",
+                        static_data_template='{% include "customise_btn.html" %}')
+
+
+class SoftwareRecipesTable(RecipesTable):
+    """ Displays just the software recipes """
+    def __init__(self, *args, **kwargs):
+        super(SoftwareRecipesTable, self).__init__(*args, **kwargs)
+        self.title = "Compatible software recipes"
+
+    def setup_queryset(self, *args, **kwargs):
+        super(SoftwareRecipesTable, self).setup_queryset(*args, **kwargs)
+
+        self.queryset = self.queryset.filter(is_image=False)
+
+
+    def setup_columns(self, *args, **kwargs):
+        self.add_column(title="Software recipe",
+                        help_text="Information about a single piece of "
+                        "software, including where to download the source, "
+                        "configuration options, how to compile the source "
+                        "files and how to package the compiled output",
+                        hideable=False,
+                        orderable=True,
+                        field_name="name")
+
+        super(SoftwareRecipesTable, self).setup_columns(*args, **kwargs)
+
+        self.add_column(**RecipesTable.build_col)
+
+
+class SelectPackagesTable(ToasterTable):
+    """ Table to display the packages to add and remove from an image """
+
+    def __init__(self, *args, **kwargs):
+        super(SelectPackagesTable, self).__init__(*args, **kwargs)
+        self.title = "Add | Remove packages"
+
+    def setup_queryset(self, *args, **kwargs):
+        cust_recipe = CustomImageRecipe.objects.get(pk=kwargs['recipeid'])
+        prj = Project.objects.get(pk = kwargs['pid'])
+
+        current_packages = cust_recipe.packages.all()
+
+        # Get all the packages that are in the custom image
+        # Get all the packages built by builds in the current project
+        # but not those ones that are already in the custom image
+        self.queryset = Package.objects.filter(
+                            Q(pk__in=current_packages) |
+                            (Q(build__project=prj) &
+                            ~Q(name__in=current_packages.values_list('name'))))
+
+        self.queryset = self.queryset.order_by('name')
+
+        self.static_context_extra['recipe_id'] = kwargs['recipeid']
+        self.static_context_extra['current_packages'] = \
+                cust_recipe.packages.values_list('pk', flat=True)
+
+    def setup_columns(self, *args, **kwargs):
+        self.add_column(title="Package",
+                        hideable=False,
+                        orderable=True,
+                        field_name="name")
+
+        self.add_column(title="Package Version",
+                        field_name="version")
+
+        self.add_column(title="Approx Size",
+                        orderable=True,
+                        static_data_name="size",
+                        static_data_template="{% load projecttags %} \
+                        {{data.size|filtered_filesizeformat}}")
+        self.add_column(title="summary",
+                        field_name="summary")
+
+        self.add_column(title="Add | Remove",
+                        help_text="Use the add and remove buttons to modify "
+                        "the package content of you custom image",
+                        static_data_name="add_rm_pkg_btn",
+                        static_data_template='{% include "pkg_add_rm_btn.html" %}')
diff --git a/bitbake/lib/toaster/toastergui/templates/base.html b/bitbake/lib/toaster/toastergui/templates/base.html
index 640bc47..11ac2a0 100644
--- a/bitbake/lib/toaster/toastergui/templates/base.html
+++ b/bitbake/lib/toaster/toastergui/templates/base.html
@@ -1,9 +1,12 @@
 <!DOCTYPE html>
 {% load static %}
 {% load projecttags %}
+{% load project_url_tag %}
 <html lang="en">
     <head>
-        <title>{% if objectname %} {{objectname|title}} - {% endif %}Toaster</title>
+        <title>
+          {% block title %} Toaster {% endblock %}
+        </title>
 <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}" type="text/css"/>
 <link rel="stylesheet" href="{% static 'css/bootstrap-responsive.min.css' %}" type='text/css'/>
 <link rel="stylesheet" href="{% static 'css/font-awesome.min.css' %}" type='text/css'/>
@@ -35,8 +38,9 @@
         projectsTypeAheadUrl: {% url 'xhr_projectstypeahead' as prjurl%}{{prjurl|json}},
         {% if project.id %}
         projectId : {{project.id}},
-        projectPageUrl : {% url 'project' project.id as purl%}{{purl|json}},
+        projectPageUrl : {% url 'project' project.id as purl %}{{purl|json}},
         projectName : {{project.name|json}},
+        projectIsDefault: {% if project.is_default %}true{% else %}false{% endif %},
         recipesTypeAheadUrl: {% url 'xhr_recipestypeahead' project.id as paturl%}{{paturl|json}},
         layersTypeAheadUrl: {% url 'xhr_layerstypeahead' project.id as paturl%}{{paturl|json}},
         machinesTypeAheadUrl: {% url 'xhr_machinestypeahead' project.id as paturl%}{{paturl|json}},
@@ -47,7 +51,7 @@
         projectId : undefined,
         projectPageUrl : undefined,
         projectName : undefined,
-        projectId : undefined,
+        projectIsDefault: false,
         {% endif %}
       };
     </script>
@@ -89,9 +93,9 @@
             <i class="icon-info-sign" title="<strong>Toaster version information</strong>" data-content="<dl><dt>Branch</dt><dd>{{TOASTER_BRANCH}}</dd><dt>Revision</dt><dd>{{TOASTER_REVISION}}</dd></dl>"></i>
             {% endif %}
           </span>
-          {% if request.resolver_match.url_name != 'landing' and request.resolver_match.url_name != 'newproject' %}
+          {% if BUILD_MODE and request.resolver_match.url_name != 'landing' and request.resolver_match.url_name != 'newproject' %}
           <ul class="nav">
-            <li  {% if request.resolver_match.url_name == 'all-builds' %}
+            <li {% if request.resolver_match.url_name == 'all-builds' %}
                 class="active"
                 {% endif %}>
               <a href="{% url 'all-builds' %}">
@@ -118,55 +122,65 @@
             </li>
           </ul>
           <span class="pull-right divider-vertical"></span>
-          <div class="btn-group pull-right">
-            <a class="btn" id="new-project-button" href="{% url 'newproject' %}">New project</a>
-          </div>
-          <!-- New build popover -->
-          <div class="btn-group pull-right" id="new-build-button" style="display:none">
-            <button class="btn dropdown-toggle" data-toggle="dropdown">
-              New build
-              <i class="icon-caret-down"></i>
-            </button>
-            <ul class="dropdown-menu new-build multi-select">
-              <li>
-                <h3>New build</h3>
-                <h6>Project:</h6>
-                <span id="project">
-                  {% if project.id %}
-                  <a class="lead" href="{% url 'project' project.id %}">{{project.name}}</a>
-                  {% else %}
-                  <a class="lead" href="#"></a>
-                  {% endif %}
-                  <i class="icon-pencil"></i>
-                </span>
-                <form id="change-project-form" style="display:none;">
-                  <div class="input-append">
-                    <input type="text" class="input-medium" id="project-name-input" placeholder="Type a project name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead"/>
-                    <button id="save-project-button" class="btn" type="button">Save</button>
-                    <a href="#" id="cancel-change-project" class="btn btn-link" style="display: none">Cancel</a>
-                  </div>
-                  <p><a id="view-all-projects" href="{% url 'all-projects' %}">View all projects</a></p>
-                </form>
-              </li>
-              <li>
-                <div class="alert" style="display:none;">
-                  <p>This project configuration is incomplete, so you cannot run builds.</p>
-                  <p><a href="{% if project.id %}{% url 'project' project.id %}{% endif %}">View project configuration</a></p>
-                </div>
-              </li>
-              <li id="targets-form">
-                <h6>Recipe(s):</h6>
-                <form>
-                  <input type="text" class="input-xlarge build-target-input" placeholder="Type a recipe name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" disabled/>
-                  <div class="row-fluid">
-                    <button class="btn btn-primary build-button" disabled>Build</button>
-                  </div>
-                </form>
-              </li>
-            </ul>
-          </div>
 
+          <!-- new project button; only show in build mode -->
+          {% if BUILD_MODE %}
+            <div class="btn-group pull-right">
+              <a class="btn" id="new-project-button" href="{% url 'newproject' %}">New project</a>
+            </div>
+          {% endif %}
 
+          <!--
+          New build popover; only shown if there is at least one user-created project
+          and we're in build mode
+          -->
+          {% if BUILD_MODE and non_cli_projects.count > 0 %}
+            <div class="btn-group pull-right" id="new-build-button" style="display:none">
+              <button class="btn dropdown-toggle" data-toggle="dropdown">
+                New build
+                <i class="icon-caret-down"></i>
+              </button>
+              <ul class="dropdown-menu new-build multi-select">
+                <li>
+                  <h3>New build</h3>
+                  <h6>
+                    Project:
+                    <span id="project">
+                      {% if project.id and not project.is_default %}
+                        <a class="lead" href="{% project_url project %}">{{project.name}}</a>
+                      {% else %}
+                        <a class="lead" href="#"></a>
+                      {% endif %}
+                      <i class="icon-pencil"></i>
+                    </span>
+                  </h6>
+                  <form id="change-project-form" style="display:none;">
+                    <div class="input-append">
+                      <input type="text" class="input-medium" id="project-name-input" placeholder="Type a project name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead"/>
+                      <button id="save-project-button" class="btn" type="button">Save</button>
+                      <a href="#" id="cancel-change-project" class="btn btn-link" style="display: none">Cancel</a>
+                    </div>
+                    <p><a id="view-all-projects" href="{% url 'all-projects' %}">View all projects</a></p>
+                  </form>
+                </li>
+                <li>
+                  <div class="alert" style="display:none;">
+                    <p>This project configuration is incomplete, so you cannot run builds.</p>
+                    <p><a href="{% if project.id %}{% url 'project' project.id %}{% endif %}">View project configuration</a></p>
+                  </div>
+                </li>
+                <li id="targets-form">
+                  <h6>Recipe(s):</h6>
+                  <form>
+                    <input type="text" class="input-xlarge build-target-input" placeholder="Type a recipe name" autocomplete="off" data-minLength="1" data-autocomplete="off" data-provide="typeahead" disabled/>
+                    <div class="row-fluid">
+                      <button class="btn btn-primary build-button" disabled>Build</button>
+                    </div>
+                  </form>
+                </li>
+              </ul>
+            </div>
+          {% endif %}
     </div>
  </div>
 </div>
diff --git a/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html b/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html
index 668e0bf..1f45be4 100644
--- a/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html
+++ b/bitbake/lib/toaster/toastergui/templates/baseprojectpage.html
@@ -1,6 +1,9 @@
 {% extends "base.html" %}
 {% load projecttags %}
 {% load humanize %}
+
+{% block title %} {{title}} - {{project.name}} - Toaster {% endblock %}
+
 {% block pagecontent %}
 
 {% include "projecttopbar.html" %}
@@ -23,8 +26,11 @@
     <ul class="nav nav-list well">
       <li><a class="nav-parent" href="{% url 'project' project.id %}">Configuration</a></li>
       <li class="nav-header">Compatible metadata</li>
-<!--  <li><a href="all-image-recipes.html">Image recipes</a></li> -->
-      <li><a href="{% url 'projecttargets' project.id %}">Recipes</a></li>
+      {% if CUSTOM_IMAGE %}
+      <li><a href="{% url 'projectcustomimages' project.id %}">Custom images</a></li>
+      {% endif %}
+      <li><a href="{% url 'projectimagerecipes' project.id %}">Image recipes</a></li>
+      <li><a href="{% url 'projectsoftwarerecipes' project.id %}">Software recipes</a></li>
       <li><a href="{% url 'projectmachines' project.id %}">Machines</a></li>
       <li><a href="{% url 'projectlayers' project.id %}">Layers</a></li>
       <li class="nav-header">Extra configuration</li>
diff --git a/bitbake/lib/toaster/toastergui/templates/bpackage.html b/bitbake/lib/toaster/toastergui/templates/bpackage.html
index d775fec..81973cb 100644
--- a/bitbake/lib/toaster/toastergui/templates/bpackage.html
+++ b/bitbake/lib/toaster/toastergui/templates/bpackage.html
@@ -2,6 +2,7 @@
 
 {% load projecttags %}
 
+{% block title %} Packages built - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li>Packages</li>
 {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/builddashboard.html b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
index bab8e38..323bbbb 100644
--- a/bitbake/lib/toaster/toastergui/templates/builddashboard.html
+++ b/bitbake/lib/toaster/toastergui/templates/builddashboard.html
@@ -2,8 +2,14 @@
 {% load humanize %}
 {% load projecttags %}
 
+{% block title %} {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block parentbreadcrumb %}
-{{build.get_sorted_target_list.0.target}} {%if build.target_set.all.count > 1%}(+ {{build.target_set.all.count|add:"-1"}}){%endif%} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}})
+{% if build.get_sorted_target_list.count > 0 %}
+  {{build.get_sorted_target_list.0.target}}
+   
+{% endif %}
+
+{%if build.target_set.all.count > 1%}(+ {{build.target_set.all.count|add:"-1"}}){%endif%} {{build.machine}} ({{build.completed_on|date:"d/m/y H:i"}})
 {% endblock %}
 
 {% block buildinfomain %}
@@ -37,19 +43,13 @@
     <span > <i class="icon-warning-sign yellow"></i><strong><a href="#warnings" class="warning show-warnings"> {{build.warnings.count}} warning{{build.warnings.count|pluralize}}</a></strong></span>
 {% endif %}
             <span class="pull-right">Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
-            <a class="btn {%if build.outcome == build.SUCCEEDED%}btn-success{%else%}btn-danger{%endif%} pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
+            {% if build.cooker_log_path %}
+                <a class="btn {%if build.outcome == build.SUCCEEDED%}btn-success{%else%}btn-danger{%endif%} pull-right log" href="{% url 'build_artifact' build.id "cookerlog" build.id %}">Download build log</a>
+            {% endif %}
             </span>
 
 {%endif%}
     </div>
-    {% if build.toaster_exceptions.count > 0 %}
-    <div class="row">
-        <small class="pull-right">
-        <i class="icon-question-sign get-help get-help-blue" title="" data-original-title="Toaster exceptions do not affect your build: only the operation of Toaster"></i>
-        <a class="show-exceptions" href="#exceptions">Toaster threw {{build.toaster_exceptions.count}} exception{{build.toaster_exceptions.count|pluralize}}</a>
-    </small>
-    </div>
-    {% endif %}
   </div>
 </div>
 
@@ -67,11 +67,10 @@
     <div class="accordion-body collapse in" id="collapse-errors">
       <div class="accordion-inner">
         <div class="span10">
-          {% for error in logmessages %}{% if error.level == 2 %}
-            <div class="alert alert-error">
+          {% for error in build.errors %}
+            <div class="alert alert-error" data-error="{{ error.id }}">
               <pre>{{error.message}}</pre>
             </div>
-          {% endif %}
           {% endfor %}
         </div>
       </div>
@@ -268,33 +267,6 @@
 </div>
 {% endif %}
 
-
-{% if build.toaster_exceptions.count > 0 %}
-<div class="accordion span10 pull-right" id="exceptions">
-  <div class="accordion-group">
-    <div class="accordion-heading">
-      <a class="accordion-toggle exception toggle-exceptions">
-        <h2 id="exception-toggle">
-          <i class="icon-warning-sign"></i>
-          {{build.toaster_exceptions.count}} Toaster exception{{build.toaster_exceptions.count|pluralize}}
-        </h2>
-      </a>
-    </div>
-    <div class="accordion-body collapse" id="collapse-exceptions">
-      <div class="accordion-inner">
-        <div class="span10">
-          {% for exception in build.toaster_exceptions %}
-            <div class="alert alert-exception">
-              <pre>{{exception.message}}</pre>
-            </div>
-          {% endfor %}
-        </div>
-      </div>
-    </div>
-  </div>
-</div>
-{% endif %}
-
 <script type="text/javascript">
     $(document).ready(function() {
         //show warnings section when requested from the previous page
diff --git a/bitbake/lib/toaster/toastergui/templates/builds.html b/bitbake/lib/toaster/toastergui/templates/builds.html
index c0d0c64..a27a121 100644
--- a/bitbake/lib/toaster/toastergui/templates/builds.html
+++ b/bitbake/lib/toaster/toastergui/templates/builds.html
@@ -2,8 +2,10 @@
 
 {% load static %}
 {% load projecttags %}
+{% load project_url_tag %}
 {% load humanize %}
 
+{% block title %} All builds - Toaster {% endblock %}
 {% block extraheadcontent %}
 <link rel="stylesheet" href="/static/css/jquery-ui.min.css" type='text/css'>
 <link rel="stylesheet" href="/static/css/jquery-ui.structure.min.css" type='text/css'>
@@ -28,8 +30,6 @@
 
   {% include "mrb_section.html" %}
 
-
-  {% if 1 %}
   <div class="page-header top-air">
      <h1>
       {% if request.GET.filter and objects.paginator.count > 0 or request.GET.search and objects.paginator.count > 0 %}
@@ -56,17 +56,25 @@
         </form>
       </div>
     </div>
-
-
   {% else %}
   {% include "basetable_top.html" %}
         <!-- Table data rows; the order needs to match the order of "tablecols" definitions; and the <td class value needs to match the tablecols clclass value for show/hide buttons to work -->
         {% for build in objects %}
-        <tr class="data">
+        <tr class="data" data-table-build-result="{{ build.id }}">
             <td class="outcome">
-        <a href="{% url "builddashboard" build.id %}">{%if build.outcome == build.SUCCEEDED%}<i class="icon-ok-sign success"></i>{%elif build.outcome == build.FAILED%}<i class="icon-minus-sign error"></i>{%else%}{%endif%}</a>  
-        </td>
-            <td class="target">{% for t in build.target_set.all %} <a href="{% url "builddashboard" build.id %}"> {{t.target}} </a> <br />{% endfor %}</td>
+                <a href="{% url "builddashboard" build.id %}">{%if build.outcome == build.SUCCEEDED%}<i class="icon-ok-sign success"></i>{%elif build.outcome == build.FAILED%}<i class="icon-minus-sign error"></i>{%else%}{%endif%}</a>  
+            </td>
+            <td class="target">
+                {% for t in build.target_set.all %}
+                    <a href="{% url "builddashboard" build.id %}">
+                        {% if t.task %}
+                            {{t.target}}:{{t.task}}
+                        {% else %}
+                            {{t.target}}
+                        {% endif %}
+                    </a> <br />
+                {% endfor %}
+            </td>
             <td class="machine"><a href="{% url "builddashboard" build.id %}">{{build.machine}}</a></td>
             <td class="started_on"><a href="{% url "builddashboard" build.id %}">{{build.started_on|date:"d/m/y H:i"}}</a></td>
             <td class="completed_on"><a href="{% url "builddashboard" build.id %}">{{build.completed_on|date:"d/m/y H:i"}}</a></td>
@@ -93,8 +101,11 @@
               <a href="{%url "builddashboard" build.id%}#images">{{fstypes|get_dict_value:build.id}}</a>
               {% endif %}
             </td>
-        <td>
-                <a href="{% url 'project' build.project.id %}">{{build.project.name}}</a>
+            <td class="project-name">
+                <a href="{% project_url build.project %}">{{build.project.name}}</a>
+                {% if build.project.is_default %}
+                    <i class="icon-question-sign get-help hover-help" title="" data-original-title="This project shows information about the builds you start from the command line while Toaster is running" style="visibility: hidden;"></i>
+                {% endif %}
             </td>
         </tr>
 
@@ -103,7 +114,6 @@
 
   {% include "basetable_bottom.html" %}
   {% endif %} {# objects.paginator.count #}
-{% endif %} {# empty #}
 </div><!-- end row-fluid-->
 
 {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/configuration.html b/bitbake/lib/toaster/toastergui/templates/configuration.html
index 3e48991..85d6a62 100644
--- a/bitbake/lib/toaster/toastergui/templates/configuration.html
+++ b/bitbake/lib/toaster/toastergui/templates/configuration.html
@@ -1,6 +1,7 @@
 {% extends "basebuildpage.html" %}
 {% load projecttags %}
 
+{% block title %} Configuration summary - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li>Configuration</li>
 {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/configvars.html b/bitbake/lib/toaster/toastergui/templates/configvars.html
index 8a572ae..e40c225 100644
--- a/bitbake/lib/toaster/toastergui/templates/configvars.html
+++ b/bitbake/lib/toaster/toastergui/templates/configvars.html
@@ -1,6 +1,7 @@
 {% extends "basebuildpage.html" %}
 {% load projecttags %}
 
+{% block title %} BitBake variables - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li>Configuration</li>
 {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/customise_btn.html b/bitbake/lib/toaster/toastergui/templates/customise_btn.html
new file mode 100644
index 0000000..54d05f9
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/customise_btn.html
@@ -0,0 +1,9 @@
+<button class="btn btn-block layer-exists-{{data.layer_version.id}} customise-btn" style="display:none;" data-recipe="{{data.id}}">
+  Customise
+</button>
+
+<button class="btn btn-block layer-add-{{data.layer_version.id}} layerbtn" data-layer='{ "id": {{data.layer_version.id}}, "name": "{{data.layer_version.layer.name}}", "layerdetailurl": "{% url 'layerdetails' extra.pid data.layer_version.id %}"}' data-directive="add">
+  <i class="icon-plus"></i>
+  Add layer
+</button>
+
diff --git a/bitbake/lib/toaster/toastergui/templates/customrecipe.html b/bitbake/lib/toaster/toastergui/templates/customrecipe.html
new file mode 100644
index 0000000..823bbd8
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/customrecipe.html
@@ -0,0 +1,142 @@
+{% extends "base.html" %}
+{% load projecttags %}
+{% load humanize %}
+{% load static %}
+{% block pagecontent %}
+
+{% include "projecttopbar.html" %}
+
+<script src="{% static 'js/customrecipe.js' %}"></script>
+<script>
+  $(document).ready(function (){
+    var ctx = {
+      tableApiUrl: "{% url 'recipeselectpackages' project.id recipe.pk %}?format=json"
+    };
+
+    try {
+      customRecipePageInit(ctx);
+    } catch (e) {
+      document.write("Sorry, An error has occurred loading this page");
+      console.warn(e);
+    }
+  });
+</script>
+
+<div class="row-fluid span11">
+  <div class="alert alert-success lead" id="image-created-notification" style="margin-top: 15px; display: none">
+    <button type="button" data-dismiss="alert" class="close">x</button>
+    Your custom image <strong>{{recipe.name}}</strong> has been created. You can now add or remove packages as needed.
+  </div>
+  <div class="page-header air">
+    <h1>
+      {{recipe.name}}
+      <small>({{recipe.base_recipe.name}})</small>
+    </h1>
+  </div>
+</div>
+
+<div class="row-fluid span11">
+  <div class="span8">
+    <div class="button-place btn-group" style="width: 100%">
+      <a class="btn btn-large span6" href="#" id="build-custom-image" style="width: 50%">
+        Build {{recipe.name}}
+      </a>
+      <button class="btn btn-large span6" data-toggle="modal" data-target="#download-file" id="download" style="width: 50%">
+      Download recipe file
+    </button>
+  </div>
+  <div id="no-package-results" class="air" style="display:none;">
+    <div class="alert">
+      <h3>No packages found</h3>
+      <p>You might consider <a href="all-software-recipes.html">searching the list of recipes</a> instead. If you find a recipe that matches the name of the package you want:</p>
+      <ol>
+        <li>Add the layer providing the recipe to your project</li>
+        <li>Build the recipe</li>
+        <li>Once the build completes, come back to this page and search for the package</li>
+      </ol>
+      <form class="input-append no-results">
+        <input type="text" class="input-xlarge" value="search query">
+          <a href="#" class="add-on btn">
+            <i class="icon-remove"></i>
+          </a>
+          <button class="btn">Search</button>
+          <button class="btn btn-link" id="show-all">Show all packages</button>
+        </form>
+      </div>
+    </div>
+    <div id="packages-table">
+      {% url 'recipeselectpackages' project.id recipe.id as xhr_table_url %}
+      {% with 'recipeselection' as table_name %}
+      {% with 'Add | Remove packages' as  title %}
+
+      <h2>{{title}} (<span class="table-count-{{table_name}}"></span>) </h2>
+
+      {% include "toastertable.html" %}
+      {% endwith %}
+      {% endwith %}
+    </div>
+  </div>
+    <div class="span4 well">
+      <h2 style="margin-bottom:20px;">About {{recipe.name}}</h2>
+
+      <dl>
+        <dt>
+          Approx. packages included
+          <i class="icon-question-sign get-help" title="" data-original-title="The number of packages included is based on information from previous builds and from parsing layers, so we can never be sure it is 100% accurate"></i>
+        </dt>
+        <dd class="no-packages">{{recipe.packages.count}}</dd>
+        <!-- <dt>
+          Approx. package size
+          <i class="icon-question-sign get-help" title="" data-original-title="Package size is based on information from previous builds, so we can never be sure it is 100% accurate"></i>
+        </dt>
+        <dd>244.3 MB</dd>
+        <dt>Last build</dt>
+        <dd>
+          <i class="icon-ok-sign success"></i>
+          <a href="build-dashboard.html">11/06/15 15:22</a>
+        </dd>
+        <dt>Recipe file</dt>
+        <dd>
+          <code>custom-image-name.bb</code>
+          <a href="#download-file" data-toggle="modal"><i class="icon-download-alt" title="" data-original-title="Download recipe file"></i></a>
+          </dd> -->
+        <dt>Layer</dt>
+        <!-- TODO recipe details page -->
+        <dd><a href="{% url 'layerdetails' project.id recipe.base_recipe.layer_version.pk %}">{{recipe.base_recipe.layer_version.layer.name}}</a></dd>
+        <!--<dt>
+          Summary
+        </dt>
+        <dd>
+          <span class="muted">Not set</span>
+          <i class="icon-pencil" data-original-title="" title=""></i>
+        </dd>
+        <dt>
+          Description
+        </dt>
+        <dd>
+          <span class="muted">Not set</span>
+          <i class="icon-pencil" data-original-title="" title=""></i>
+        </dd>
+        <dt>Version</dt>
+        <dd>
+          1.0
+          <i class="icon-pencil" data-original-title="" title=""></i>
+        </dd>
+        <dt>Section</dt>
+        <dd>
+          base
+          <i class="icon-pencil" data-original-title="" title=""></i>
+          <i class="icon-trash" data-original-title="" title=""></i>
+        </dd>
+        <dt>License</dt>
+        <dd>
+          MIT
+          <i class="icon-question-sign get-help" title="" data-original-title="All custom images have their license set to MIT. This is because the license applies only to the recipe (.bb) file, and not to the image itself. To see which licenses apply to the image you must check the license manifest generated with each build"></i>
+          </dd> -->
+      </dl>
+      <i class="icon-trash no-tooltip"></i>
+      <a href="#" class="error" id="delete">Delete custom image</a>
+    </div>
+</div>
+
+  {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/dirinfo.html b/bitbake/lib/toaster/toastergui/templates/dirinfo.html
index a5bc481..ecb46bf 100644
--- a/bitbake/lib/toaster/toastergui/templates/dirinfo.html
+++ b/bitbake/lib/toaster/toastergui/templates/dirinfo.html
@@ -1,4 +1,5 @@
 {% extends "basebuildpage.html" %}
+{% block title %} Directory structure - {{ target.target }} {{ build.machine }} - {{ build.project.name }} - Toaster {% endblock %}
 {% block extraheadcontent %}
 {% load static %}
 <link rel="stylesheet" href="{% static 'css/jquery.treetable.css' %}" type="text/css">
@@ -103,12 +104,16 @@
             name += '</td>';
         }
         else {
-            name = '<td>';
             if (o.link_to == null) {
-                name += '<i class="icon-file"></i>';
+                namespan = 2;
+                if (o.package == null) {
+                  namespan = 3;
+                }
+                var colspan = 'colspan="' + namespan + '"';
+                name = '<td ' + colspan + '><i class="icon-file"></i>';
             }
             else {
-                name += '<i class="icon-hand-right"></i>';
+                name = '<td><i class="icon-hand-right"></i>';
             }
             name += ' ' + o.name;
             name += '</td>';
@@ -207,10 +212,10 @@
                     <th>Directory / File</th>
                     <th>Symbolic link to</th>
                     <th>Source package</th>
-                    <th>Size</th>
-                    <th>Permissions</th>
-                    <th>Owner</th>
-                    <th>Group</th>
+                    <th class="narrow-col">Size</th>
+                    <th class="medium-col">Permissions</th>
+                    <th class="narrow-col">Owner</th>
+                    <th class="narrow-col">Group</th>
                 </tr>
             </thead>
             <tbody>
diff --git a/bitbake/lib/toaster/toastergui/templates/importlayer.html b/bitbake/lib/toaster/toastergui/templates/importlayer.html
index ce3d724..033f0ae 100644
--- a/bitbake/lib/toaster/toastergui/templates/importlayer.html
+++ b/bitbake/lib/toaster/toastergui/templates/importlayer.html
@@ -2,6 +2,7 @@
 {% load projecttags %}
 {% load humanize %}
 {% load static %}
+{% block title %} Import layer - {{project.name}} - Toaster {% endblock %}
 {% block pagecontent %}
 
 {% include "projecttopbar.html" %}
diff --git a/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html b/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html
index 5b8fd84..8d65f33 100644
--- a/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html
+++ b/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html
@@ -22,9 +22,11 @@
 <script src="{% static 'js/table.js' %}"></script>
 
 <script>
-  var tableUrl = '{% url 'projectlayers' project.pk %}';
+  var ctx = {
+    tableUrl : '{% url 'projectlayers' project.pk %}',
+    projectId : {{project.pk}},
+  }
 </script>
-
 <script src="{% static 'js/tests/test.js' %}"></script>
 
 <div id="qunit"></div>
@@ -34,6 +36,12 @@
 <input type="text" id="projects" placeholder="projects"></input>
 <input type="text" id="machines" placeholder="machines"></input>
 
-{% endblock %}
-
+<!-- import layer dependency input typeahead -->
+<input type="text" id="layer-dependency" style="display:none"></input>
+<!-- project page input typeaheads -->
+<input type="text" id="layer-add-input" style="display:none"></input>
+<input type="text" id="machine-change-input" style="display:none"></input>
+<!-- import layer dependency input typeahead on layer details edit layer -->
+<input type="text" id="layer-dep-input" style="display:none"></input>
 
+{% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/landing.html b/bitbake/lib/toaster/toastergui/templates/landing.html
index 45e9532..cafaa1a 100644
--- a/bitbake/lib/toaster/toastergui/templates/landing.html
+++ b/bitbake/lib/toaster/toastergui/templates/landing.html
@@ -4,55 +4,69 @@
 {% load projecttags %}
 {% load humanize %}
 
+{% block title %} Welcome to Toaster {% endblock %}
 {% block pagecontent %}
 
-  <div class="container-fluid">
-   <div class="row-fluid">
-    <!-- Empty - no data in database -->
-    <div class="hero-unit span12 well-transparent">
-     <div class="row-fluid">
-      <div class="span6">
-       <h1>
-        This is Toaster
-       </h1>
-       <p>A web interface to <a href="http://www.openembedded.org">OpenEmbedded</a> and <a href="http://www.yoctoproject.org/tools-resources/projects/bitbake">BitBake</a>, the <a href="http://www.yoctoproject.org">Yocto Project</a> build system.</p>
-
-
-		{% if lvs_nos %}
-		    <p class="hero-actions">
-			    <a class="btn btn-primary btn-large" href="{% url 'newproject' %}">
-				    To start building, create your first Toaster project
-			    </a>
-		    </p>
-		{% else %}
-		    <div class="alert alert-info lead air">
-			    Toaster has no layer information. Without layer information, you cannot run builds. To generate layer information you can:
-			    <ul>
-			        <li>
-			            <a href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#layer-source">Configure a layer source</a>
-			        </li>
-			        <li>
-			            <a href="{% url 'newproject' %}">Create a project</a>, then import layers
-			        </li>
-			    </ul>
-		    </div>
-	        {% endif %}
-
-        <ul class="unstyled">
-            <li>
-                <a href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html">Read the Toaster manual</a>
-            </li>
-            <li>
-                <a href="https://wiki.yoctoproject.org/wiki/Contribute_to_Toaster">Contribute to Toaster</a>
-            </li>
-        </ul>
+  {% if BUILD_MODE %}
+    <!-- build mode -->
+    <div class="container-fluid">
+      <div class="row-fluid">
+        <div class="hero-unit span12 well-transparent">
+          <div class="row-fluid">
 
+            <div class="span6">
+              <h1>This is Toaster</h1>
+
+              <p>A web interface to <a href="http://www.openembedded.org">OpenEmbedded</a> and <a href="http://www.yoctoproject.org/tools-resources/projects/bitbake">BitBake</a>, the <a href="http://www.yoctoproject.org">Yocto Project</a> build system.</p>
+
+		          {% if lvs_nos %}
+		            <p class="hero-actions">
+		              <a class="btn btn-primary btn-large" href="{% url 'newproject' %}">
+			              To start building, create your first Toaster project
+		              </a>
+		            </p>
+		          {% else %}
+                <div class="alert alert-info lead air">
+                  Toaster has no layer information. Without layer information, you cannot run builds. To generate layer information you can:
+                  <ul>
+                    <li>
+                      <a href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#layer-source">Configure a layer source</a>
+                    </li>
+                    <li>
+			                <a href="{% url 'newproject' %}">Create a project</a>, then import layers
+                    </li>
+                  </ul>
+                </div>
+              {% endif %}
+
+              <ul class="unstyled">
+                <li>
+                  <a href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html">
+                    Read the Toaster manual
+                  </a>
+                </li>
+
+                <li>
+                  <a href="https://wiki.yoctoproject.org/wiki/Contribute_to_Toaster">
+                    Contribute to Toaster
+                  </a>
+                </li>
+              </ul>
+            </div>
+
+            <div class="span6">
+              <img alt="Yocto Project" class="thumbnail" src="{% static 'img/toaster_bw.png' %}"/>
+            </div>
+
+          </div>
+        </div>
       </div>
-      <div class="span6">
-          <img alt="Yocto Project" class="thumbnail" src="{% static 'img/toaster_bw.png' %}"/>
-      </div>
-     </div>
     </div>
-   </div>
+  {% else %}
+    <!-- analysis mode -->
+    <div class="alert alert-info lead top-air">
+      Toaster has not recorded any builds yet. Run a build from the command line to see it here.
+    </div>
+  {% endif %}
 
 {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/landing_not_managed.html b/bitbake/lib/toaster/toastergui/templates/landing_not_managed.html
index 5bc435d..9b37f55 100644
--- a/bitbake/lib/toaster/toastergui/templates/landing_not_managed.html
+++ b/bitbake/lib/toaster/toastergui/templates/landing_not_managed.html
@@ -4,6 +4,8 @@
 {% load projecttags %}
 {% load humanize %}
 
+{% block title %} Welcome to Toaster {% endblock %}
+
 {% block pagecontent %}
 
   <div class="container-fluid">
diff --git a/bitbake/lib/toaster/toastergui/templates/layer_btn.html b/bitbake/lib/toaster/toastergui/templates/layer_btn.html
index a2e9393..314eec7 100644
--- a/bitbake/lib/toaster/toastergui/templates/layer_btn.html
+++ b/bitbake/lib/toaster/toastergui/templates/layer_btn.html
@@ -1,8 +1,16 @@
-<button class="btn btn-danger btn-block layer-exists-{{data.pk}} layerbtn" style="display:none;" data-layer='{ "id": {{data.pk}}, "name":  "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="remove" >
+<button class="btn btn-danger btn-block layer-exists-{{data.pk}} layerbtn"  data-layer='{ "id": {{data.pk}}, "name":  "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="remove"
+    {% if data.pk not in extra.current_layers %}
+    style="display:none;"
+    {% endif %}
+  >
   <i class="icon-trash"></i>
   Delete layer
 </button>
-<button class="btn btn-block layer-add-{{data.pk}} layerbtn" data-layer='{ "id": {{data.pk}}, "name":  "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="add">
+<button class="btn btn-block layer-add-{{data.pk}} layerbtn" data-layer='{ "id": {{data.pk}}, "name":  "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="add"
+    {% if data.pk in extra.current_layers %}
+    style="display:none;"
+    {% endif %}
+  >
   <i class="icon-plus"></i>
   Add layer
 </button>
diff --git a/bitbake/lib/toaster/toastergui/templates/layerdetails.html b/bitbake/lib/toaster/toastergui/templates/layerdetails.html
index 7dd3db2..7fe365d 100644
--- a/bitbake/lib/toaster/toastergui/templates/layerdetails.html
+++ b/bitbake/lib/toaster/toastergui/templates/layerdetails.html
@@ -3,6 +3,7 @@
 {% load humanize %}
 {% load static %}
 
+{% block title %} {{layerversion.layer.name}} - {{project.name}} - Toaster {% endblock %}
 {% block pagecontent %}
 
 <div class="section">
diff --git a/bitbake/lib/toaster/toastergui/templates/mrb_section.html b/bitbake/lib/toaster/toastergui/templates/mrb_section.html
index 396fb8e..bd8f991 100644
--- a/bitbake/lib/toaster/toastergui/templates/mrb_section.html
+++ b/bitbake/lib/toaster/toastergui/templates/mrb_section.html
@@ -1,43 +1,68 @@
 {% load static %}
 {% load projecttags %}
+{% load project_url_tag %}
 {% load humanize %}
 
+{%if mru and mru.count > 0%}
 
-{%if mru.count > 0%}
+  {%if mrb_type == 'project' %}
+      <h2>
+      Latest project builds
 
-  <div class="page-header">
+      {% if project.is_default %}
+          <i class="icon-question-sign get-help heading-help" title="" data-original-title="Builds in this project cannot be started from Toaster: they are started from the command line"></i>
+      {% endif %}
+      </h2>
+  {% else %}
+    <div class="page-header">
       <h1>
-          Latest builds
-       </h1>
-  </div>
+      Latest builds
+      </h1>
+    </div>
+  {% endif %}
   <div id="latest-builds">
   {% for build in mru %}
-    <div class="alert {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-error{%else%}alert-info{%endif%} project-name ">
-       <span class="label {%if build.outcome == build.SUCCEEDED%}label-success{%elif build.outcome == build.FAILED%}label-important{%else%}label-info{%endif%}">
-         <a href={% url 'project' build.project.pk %}>
-           {{build.project.name}}
-         </a>
-       </span>
-
+  <div data-latest-build-result="{{ build.id }}" class="alert build-result {%if build.outcome == build.SUCCEEDED%}alert-success{%elif build.outcome == build.FAILED%}alert-error{%else%}alert-info{%endif%}{% if mrb_type != 'project' %} project-name{% endif %}">
+      {% if mrb_type != 'project' %}
+        <span class="label {%if build.outcome == build.SUCCEEDED%}label-success{%elif build.outcome == build.FAILED%}label-important{%else%}label-info{%endif%}">
+            <a href={% project_url build.project %}>
+                {{build.project.name}}
+            </a>
+        </span>
+      {% endif %}
         <div class="row-fluid">
-            <div class="span3 lead">
+          <div class="span3 lead">
     {%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
-                <a href="{%url 'builddashboard' build.pk%}" class="{%if build.outcome == build.SUCCEEDED %}success{%else%}error{%endif%}">
+              <a href="{%url 'builddashboard' build.pk%}" class="{%if build.outcome == build.SUCCEEDED %}success{%else%}error{%endif%}">
     {% endif %}
             {% if build.target_set.all.count > 0 %}
                 <span data-toggle="tooltip"
-                  {%if build.target_set.all.count > 1%}
-                    title="Targets: {%for target in build.target_set.all%}{{target.target}} {%endfor%}"
-                  {%endif%}
+                  {% if build.target_set.all.count > 1 %}
+                    title="Targets:
+                    {% for target in build.target_set.all %}
+                        {% if target.task %}
+                            {{target.target}}:{{target.task}}
+                        {% else %}
+                            {{target.target}}
+                        {% endif %}
+                    {% endfor %}"
+                  {% endif %}
                 >
-
-                  {{build.target_set.all.0.target}} {%if build.target_set.all.count > 1%}(+ {{build.target_set.all.count|add:"-1"}}){%endif%}
+                {% if build.target_set.all.0.task %}
+                    {{build.target_set.all.0.target}}:{{build.target_set.all.0.task}}
+                {% else %}
+                    {{build.target_set.all.0.target}}
+                {% endif %}
+                {% if build.target_set.all.count > 1 %}
+                    (+ {{build.target_set.all.count|add:"-1"}})
+                {% endif %}
                 </span>
              {% endif %}
     {%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
                 </a>
     {% endif %}
             </div>
+    {% if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
             <div class="span2 lead">
                 {% if build.completed_on|format_build_date  %}
                     {{ build.completed_on|date:'d/m/y H:i' }}
@@ -45,6 +70,7 @@
                     {{ build.completed_on|date:'H:i' }}
                 {% endif %}
             </div>
+    {% endif %}
     {%if build.outcome == build.SUCCEEDED or build.outcome == build.FAILED %}
             <div class="span2 lead">
       {% if  build.errors.count %}
@@ -58,28 +84,41 @@
             </div>
             <div class="lead ">
               <span class="lead">
-                Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
+                  Build time: <a href="{% url 'buildtime' build.pk %}">{{ build.timespent_seconds|sectohms }}</a>
               </span>
-              <button class="btn
+              {% if build.project.is_default %}
+                  <i class="pull-right icon-question-sign get-help
                   {% if build.outcome == build.SUCCEEDED %}
-                      btn-success
+                      get-help-green
                   {% elif build.outcome == build.FAILED %}
-                      btn-danger
+                      get-help-red
                   {% else %}
-                      btn-info
-                  {%endif%}
-                  pull-right"
-                  onclick='scheduleBuild({% url 'projectbuilds' build.project.id as bpi %}{{bpi|json}},
-                    {{build.project.name|json}},
-                    {% url 'project' build.project.id as bpurl %}{{bpurl|json}},
-                    {{build.target_set.all|get_tasks|json}})'>
+                      get-help-blue
+                  {% endif %}
+                  " title="Builds in this project cannot be started from Toaster: they are started from the command line">
+                  </i>
+              {% else %}
+                  <button class="btn
+                      {% if build.outcome == build.SUCCEEDED %}
+                          btn-success
+                      {% elif build.outcome == build.FAILED %}
+                          btn-danger
+                      {% else %}
+                          btn-info
+                      {%endif%}
+                      pull-right"
+                      onclick='scheduleBuild({% url 'projectbuilds' build.project.id as bpi %}{{bpi|json}},
+                        {{build.project.name|json}},
+                        {% url 'project' build.project.id as purl %}{{purl|json}},
+                        {{build.target_set.all|get_tasks|json}})'>
 
-                    Run again
-              </button>
+                        Run again
+                  </button>
+              {% endif %}
             </div>
     {%endif%}
     {%if build.outcome == build.IN_PROGRESS %}
-            <div class="span4">
+            <div class="span4 offset1">
                 <div class="progress" style="margin-top:5px;" data-toggle="tooltip" title="{{build.completeper}}% of tasks complete">
                     <div style="width: {{build.completeper}}%;" class="bar"></div>
                 </div>
diff --git a/bitbake/lib/toaster/toastergui/templates/newcustomimage.html b/bitbake/lib/toaster/toastergui/templates/newcustomimage.html
new file mode 100644
index 0000000..4487b3e
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/newcustomimage.html
@@ -0,0 +1,54 @@
+{% extends "base.html" %}
+{% load projecttags %}
+{% load humanize %}
+{% load static %}
+{% block pagecontent %}
+
+<script src="{% static 'js/newcustomimage.js' %}"></script>
+<script>
+  $(document).ready(function (){
+    var ctx = {
+      xhrCustomRecipeUrl : "{% url 'xhr_customrecipe' %}",
+    };
+
+    try {
+      newCustomImagePageInit(ctx);
+    } catch (e) {
+      document.write("Sorry, An error has occurred loading this page");
+      console.warn(e);
+    }
+  });
+</script>
+
+</script>
+<div class="modal hide fade in" id="new-custom-image-modal" aria-hidden="false">
+  <div class="modal-header">
+    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+    <h3>Name your custom image</h3>
+  </div>
+  <div class="modal-body">
+    <div class="row-fluid">
+      <span class="help-block span8">Image names must be unique. They should not contain spaces or capital letters, and the only allowed special character is dash (-).<p></p>
+      </span></div>
+    <div class="control-group controls">
+      <input type="text" class="huge span5" placeholder="Type the name, something like 'core-image-myimage'">
+        <span class="help-block" style="display:none">Image names cannot contain spaces or capital letters. The only allowed special character is dash (-)</span>
+        <span class="help-block" style="display: none">An image with this name already exists. Image names must be unique: try a different one.</span>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <a href="#" id="create-new-custom-image-btn" class="btn btn-primary btn-large" data-original-title="" title="">Create custom image</a>
+    </div>
+</div>
+
+{% include "projecttopbar.html" %}
+
+
+{% url table_name project.id as xhr_table_url %}
+{% include "toastertable.html" %}
+
+
+
+{% endblock %}
+
+
diff --git a/bitbake/lib/toaster/toastergui/templates/newproject.html b/bitbake/lib/toaster/toastergui/templates/newproject.html
index 997390b..e83b2be 100644
--- a/bitbake/lib/toaster/toastergui/templates/newproject.html
+++ b/bitbake/lib/toaster/toastergui/templates/newproject.html
@@ -1,6 +1,9 @@
 {% extends "base.html" %}
 {% load projecttags %}
 {% load humanize %}
+
+{% block title %} Create a new project - Toaster {% endblock %}
+
 {% block pagecontent %}
 <div class="row-fluid">
     <div class="page-header">
diff --git a/bitbake/lib/toaster/toastergui/templates/package_detail_base.html b/bitbake/lib/toaster/toastergui/templates/package_detail_base.html
index a24bc8e..9fa28a8 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_detail_base.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_detail_base.html
@@ -1,6 +1,13 @@
 {% extends "basebuilddetailpage.html" %}
 {% load projecttags %}
 
+{% block title %}
+  {% if target %}
+    {{package.fullpackagespec}} - {{ target.target }} {{ build.machine }} - {{ build.project.name }} - Toaster
+  {% else %}
+    {{package.fullpackagespec}} - {{ build.target_set.all|dictsort:"target"|join:", " }} {{ build.machine }} - {{ build.project.name }} - Toaster
+  {% endif %}
+{% endblock %}
 {% block extraheadcontent %}
     <!-- functions to format package 'installed_package' alias -->
     <script>
@@ -38,9 +45,9 @@
 {% block pagedetailinfomain %}
     <div class="row span11">
         <div class="page-header">
-            {% block title %}
+            {% block mainheading %}
             <h1>{{package.fullpackagespec}}</h1>
-            {% endblock title %}
+            {% endblock %}
         </div> <!-- page-header -->
     </div> <!-- row span11 page-header -->
 
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
index 642ca69..8a0508e 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
@@ -1,13 +1,13 @@
 {% extends "package_detail_base.html" %}
 {% load projecttags %}
 
-{% block title %}
+{% block mainheading %}
     <h1>
         {{package.fullpackagespec}}
         <script> fmtAliasHelp("{{package.name}}", "{{package.alias}}", false) </script>
         <small>({{target.target}})</small>
     </h1>
-{% endblock title %}
+{% endblock %}
 
 {% block tabcontent %}
     {% with packageFileCount=package.buildfilelist_package.count %}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_detail.html b/bitbake/lib/toaster/toastergui/templates/package_included_detail.html
index d2aa26e..568e2f2 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_detail.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_detail.html
@@ -1,7 +1,7 @@
 {% extends "package_detail_base.html" %}
 {% load projecttags %}
 
-{% block title %}
+{% block mainheading %}
         <h1>
             {{package.fullpackagespec}}
             <script>
@@ -9,7 +9,7 @@
             </script>
             <small>({{target.target}})</small>
         </h1>
-{% endblock title %}
+{% endblock %}
 
 {% block tabcontent %}
 {% with packageFileCount=package.buildfilelist_package.count %}
diff --git a/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html b/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
index 5cc8b47..fb310c7 100644
--- a/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
+++ b/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
@@ -1,13 +1,13 @@
 {% extends "package_detail_base.html" %}
 {% load projecttags %}
 
-{% block title %}
+{% block mainheading %}
         <h1>
             {{package.fullpackagespec}}
             <script> fmtAliasHelp("{{package.name}}", "{{package.alias}}", false) </script>
             <small>({{target.target}})</small>
         </h1>
-{% endblock title %}
+{% endblock %}
 
 {% block tabcontent %}
     {% with packageFileCount=package.buildfilelist_package.count %}
diff --git a/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html b/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html
new file mode 100644
index 0000000..b766aea
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html
@@ -0,0 +1,16 @@
+<button class="btn btn-block btn-danger add-rm-package-btn" id="package-rm-btn-{{data.pk}}" data-directive="remove" data-package="{{data.pk}}" data-package-url="{% url 'xhr_customrecipe_packages' extra.recipe_id data.pk %}" style="
+  {% if data.pk not in extra.current_packages %}
+    display:none
+  {% endif %}
+  ">
+  <i class="icon-trash no-tooltip"></i>
+  Remove package
+</a>
+<button class="btn btn-block add-rm-package-btn" data-directive="add" id="package-add-btn-{{data.pk}}" data-package="{{data.pk}}" data-package-url="{% url 'xhr_customrecipe_packages' extra.recipe_id data.pk %}" style="
+  {% if data.pk in extra.current_packages %}
+    display:none
+  {% endif %}
+    ">
+<i class="icon-plus"></i>
+ Add package
+</button>
diff --git a/bitbake/lib/toaster/toastergui/templates/project.html b/bitbake/lib/toaster/toastergui/templates/project.html
index e8354fd..4e83981 100644
--- a/bitbake/lib/toaster/toastergui/templates/project.html
+++ b/bitbake/lib/toaster/toastergui/templates/project.html
@@ -4,6 +4,7 @@
 {% load humanize %}
 {% load static %}
 
+{% block title %} Configuration - {{project.name}} - Toaster {% endblock %}
 {% block projectinfomain %}
 
 <script src="{% static 'js/layerDepsModal.js' %}"></script>
@@ -67,7 +68,7 @@
 
       <div class="alert alert-info" style="display:none" id="no-most-built">
         <span class="lead">You haven't built any recipes yet</span>
-        <p style="margin-top: 10px;"><a href="{% url 'projecttargets' project.id %}">Choose a recipe to build</a></p>
+        <p style="margin-top: 10px;"><a href="{% url 'projectsoftwarerecipes' project.id %}">Choose a recipe to build</a></p>
       </div>
 
       <ul class="unstyled configuration-list" id="freq-build-list">
diff --git a/bitbake/lib/toaster/toastergui/templates/projectbuilds.html b/bitbake/lib/toaster/toastergui/templates/projectbuilds.html
index 27cfcd7..bb38284 100644
--- a/bitbake/lib/toaster/toastergui/templates/projectbuilds.html
+++ b/bitbake/lib/toaster/toastergui/templates/projectbuilds.html
@@ -2,7 +2,7 @@
 {% load projecttags %}
 {% load humanize %}
 
-
+{% block title %} Builds - {{project.name}} - Toaster {% endblock %}
 {% block extraheadcontent %}
 <link rel="stylesheet" href="/static/css/jquery-ui.min.css" type='text/css'>
 <link rel="stylesheet" href="/static/css/jquery-ui.structure.min.css" type='text/css'>
@@ -21,13 +21,17 @@
     });
 </script>
 
+ {% with mrb_type='project' %}
+     {% include "mrb_section.html" %}
+ {% endwith %}
+
       <h2>
         {% if request.GET.filter and objects.paginator.count > 0 or request.GET.search and objects.paginator.count > 0 %}
-            {{objects.paginator.count}} build{{objects.paginator.count|pluralize}} found
+            {{objects.paginator.count}} project build{{objects.paginator.count|pluralize}} found
         {%elif request.GET.filter and objects.paginator.count == 0 or request.GET.search and objects.paginator.count == 0 %}
-            No builds found
+            No project builds found
         {%else%}
-            Project builds
+            All project builds
         {%endif%}
         <i class="icon-question-sign get-help heading-help" title="This page lists all the builds for the current project"></i>
       </h2>
@@ -66,7 +70,17 @@
                     {% endif %}
             </td>
 
-            <td class="target">{% for t in build.target_set.all %} <a href="{% url "builddashboard" build.id %}"> {{t.target}} </a> <br />{% endfor %}</td>
+            <td class="target">
+                {% for t in build.target_set.all %}
+                    <a href="{% url "builddashboard" build.id %}">
+                        {% if t.task %}
+                            {{t.target}}:{{t.task}}
+                        {% else %}
+                            {{t.target}}
+                        {% endif %}
+                    </a> <br />
+                {% endfor %}
+            </td>
             <td class="machine"><a href="{% url "builddashboard" build.id %}">{{build.machine}}</a></td>
             <td class="started_on"><a href="{% url "builddashboard" build.id %}">{{build.started_on|date:"d/m/y H:i"}}</a></td>
             <td class="completed_on"><a href="{% url "builddashboard" build.id %}">{{build.completed_on|date:"d/m/y H:i"}}</a></td>
diff --git a/bitbake/lib/toaster/toastergui/templates/projectconf.html b/bitbake/lib/toaster/toastergui/templates/projectconf.html
index 4c5a188..30fd03e 100644
--- a/bitbake/lib/toaster/toastergui/templates/projectconf.html
+++ b/bitbake/lib/toaster/toastergui/templates/projectconf.html
@@ -2,7 +2,7 @@
 {% load projecttags %}
 {% load humanize %}
 
-
+{% block title %} BitBake variables - {{project.name}} - Toaster {% endblock %}
 {% block projectinfomain %}
 
 <h2>Bitbake variables</h2>
@@ -43,6 +43,7 @@
                     <input id="filter-image_fstypes" type="text" placeholder="Search image types" class="span4">
                     <div id="all-image_fstypes" class="scrolling">
                     </div>
+                    <span class="help-block" id="fstypes-error-message">You must select at least one image type</span>
                     <button id="apply-change-image_fstypes" type="button" class="btn">Save</button>
                     <button id="cancel-change-image_fstypes" type="button" class="btn btn-link">Cancel</button>
                 </form>
@@ -312,9 +313,11 @@
             });
             if ( 0 == any_checked ) {
                 $("#apply-change-image_fstypes").attr("disabled","disabled");
+                $('#fstypes-error-message').show();
             }
             else {
                 $("#apply-change-image_fstypes").removeAttr("disabled");
+                $('#fstypes-error-message').hide();
             }
         }
 
@@ -546,10 +549,14 @@
                 // Add the un-checked boxes second
                 for (var i = 0, length = fstypes_list.length; i < length; i++) {
                     if (0  > fstypes.indexOf(" "+fstypes_list[i].value+" ")) {
-                            html += '<label class="checkbox"><input type="checkbox" class="fs-checkbox-fstypes" value="'+fstypes_list[i].value+'">'+fstypes_list[i].value+'</label>\n';
+                        html += '<label class="checkbox"><input type="checkbox" class="fs-checkbox-fstypes" value="'+fstypes_list[i].value+'">'+fstypes_list[i].value+'</label>\n';
                     }
                 }
+                // Add the 'no search matches' line last
+                html += '<label id="no-match-fstypes">No image types found</label>\n';
+                // Display the list
                 document.getElementById("all-image_fstypes").innerHTML = html;
+                $('#no-match-fstypes').hide();
 
                 // Watch elements to disable Save when none are checked
                 $(".fs-checkbox-fstypes").each(function(){
@@ -558,8 +565,9 @@
                     });
                 });
 
-                // clear the previous filter values
+                // clear the previous filter values and warning messages
                 $("input#filter-image_fstypes").val("");
+                $('#fstypes-error-message').hide();
             });
 
             $('#cancel-change-image_fstypes').click(function(){
@@ -569,17 +577,24 @@
             });
 
             $('#filter-image_fstypes').on('input', function(){
-                   var valThis = $(this).val().toLowerCase();
+                var valThis = $(this).val().toLowerCase();
+                var matchCount=0;
                 $('#all-image_fstypes label').each(function(){
                     var text = $(this).text().toLowerCase();
                     var match = text.indexOf(valThis);
                     if (match >= 0) {
                         $(this).show();
+                        matchCount += 1;
                     }
                     else {
                         $(this).hide();
                     }
                 });
+                if (matchCount === 0) {
+                   $('#no-match-fstypes').show();
+                } else {
+                   $('#no-match-fstypes').hide();
+                }
             });
 
             $('#apply-change-image_fstypes').click(function(){
diff --git a/bitbake/lib/toaster/toastergui/templates/projects.html b/bitbake/lib/toaster/toastergui/templates/projects.html
index c2d77b5..678a796 100644
--- a/bitbake/lib/toaster/toastergui/templates/projects.html
+++ b/bitbake/lib/toaster/toastergui/templates/projects.html
@@ -2,8 +2,11 @@
 
 {% load static %}
 {% load projecttags %}
+{% load project_url_tag %}
 {% load humanize %}
 
+{% block title %} All projects - Toaster {% endblock %}
+
 {% block pagecontent %}
 
 
@@ -36,17 +39,29 @@
   {% else %} {# We have builds to display #}
   {% include "basetable_top.html" %}
   {% for o in objects %}
-    <tr class="data">
-      <td><a href="{% url 'project' o.id %}">{{o.name}}</a></td>
-      <td class="updated"><a href="{% url 'project' o.id %}">{{o.updated|date:"d/m/y H:i"}}</a></td>
-      <td>
+    <tr class="data" data-project="{{ o.id }}">
+      <td data-project-field="name">
+          <a href="{% project_url o %}">{{o.name}}</a>
+      </td>
+      <td class="updated"><a href="{% project_url o %}">{{o.updated|date:"d/m/y H:i"}}</a></td>
+      <td data-project-field="release">
         {% if o.release %}
             <a href="{% url 'project' o.id %}#project-details">{{o.release.name}}</a>
+        {% elif o.is_default %}
+            <span class="muted">Not applicable</span>
+            <i class="icon-question-sign get-help hover-help" title="" data-original-title="This project does not have a release set. It simply collects information about the builds you start from the command line while Toaster is running" style="visibility: hidden;"></i>
         {% else %}
             No release available
         {% endif %}
       </td>
-      <td><a href="{% url 'project' o.id %}#machine-distro">{{o.get_current_machine_name}}</a></td>
+      <td data-project-field="machine">
+        {% if o.is_default %}
+            <span class="muted">Not applicable</span>
+            <i class="icon-question-sign get-help hover-help" title="" data-original-title="This project does not have a machine set. It simply collects information about the builds you start from the command line while Toaster is running" style="visibility: hidden;"></i>
+        {% else %}
+            <a href="{% url 'project' o.id %}#machine-distro">{{o.get_current_machine_name}}</a>
+        {% endif %}
+      </td>
       {% if o.get_number_of_builds == 0 %}
       <td class="muted">{{o.get_number_of_builds}}</td>
       <td class="loutcome"></td>
diff --git a/bitbake/lib/toaster/toastergui/templates/projecttopbar.html b/bitbake/lib/toaster/toastergui/templates/projecttopbar.html
index ca2741d..ee86b54 100644
--- a/bitbake/lib/toaster/toastergui/templates/projecttopbar.html
+++ b/bitbake/lib/toaster/toastergui/templates/projecttopbar.html
@@ -1,12 +1,18 @@
 <div class="alert alert-success lead" id="project-created-notification" style="margin-top:15px; display:none">
   <button type="button" class="close" data-dismiss="alert">×</button>
-  Your project <strong>{{project.name}}</strong> has been created. You can now <a href="{% url 'projectmachines' project.id %}">select your target machine</a> and <a href="{% url 'projecttargets' project.id %}">choose image recipes</a> to build.
+  Your project <strong>{{project.name}}</strong> has been created. You can now <a href="{% url 'projectmachines' project.id %}">select your target machine</a> and <a href="{% url 'projectsoftwarerecipes' project.id %}">choose image recipes</a> to build.
 </div>
 
 <!-- project name -->
 <div class="page-header">
-  <h1><span id="project-name">{{project.name}}</span>
+  <h1 id="project-name-container">
+    <span id="project-name">{{project.name}}</span>
+
     <i class="icon-pencil" data-original-title="" id="project-change-form-toggle" title=""></i>
+
+    {% if project.is_default %}
+        <i class="icon-question-sign get-help heading-help" title="" data-original-title="This project shows information about the builds you start from the command line while Toaster is running"></i>
+    {% endif %}
   </h1>
   <form id="project-name-change-form" style="margin-bottom: 0px; display: none;">
     <div class="input-append">
@@ -17,31 +23,40 @@
   </form>
 </div>
 
-<div id="project-topbar">
-  <ul class="nav nav-pills">
-    <li>
-      <a href="{% url 'projectbuilds' project.id %}">
-        Builds (<span class="total-builds">0</span>)
-      </a>
-    </li>
-    <li id="topbar-configuration-tab">
-      <a href="{% url 'project' project.id %}">
-        Configuration
-      </a>
-    </li>
-    <li>
-      <a href="{% url 'importlayer' project.id %}">
-        Import layer
-      </a>
-    </li>
-    <li class="pull-right">
-      <form class="form-inline" style="margin-bottom:0px;">
-        <i class="icon-question-sign get-help heading-help" data-placement="left" title="" data-original-title="Type the name of one or more recipes you want to build, separated by a space. You can also specify a task by appending a semicolon and a task name to the recipe name, like so: <code>busybox:clean</code>"></i>
-        <div class="input-append">
-          <input id="build-input" type="text" class="input-xlarge input-lg build-target-input" placeholder="Type the recipe you want to build" autocomplete="off" disabled>
-          <button id="build-button" class="btn btn-primary btn-large build-button" data-project-id="{{project.id}}" disabled>Build</button>
-        </div>
-      </form>
-    </li>
-  </ul>
-</div>
+{% if not project.is_default %}
+  <div id="project-topbar">
+    <ul class="nav nav-pills">
+      <li>
+        <a href="{% url 'projectbuilds' project.id %}">
+          Builds (<span class="total-builds">0</span>)
+        </a>
+      </li>
+      <li id="topbar-configuration-tab">
+        <a href="{% url 'project' project.id %}">
+          Configuration
+        </a>
+      </li>
+      <li>
+        <a href="{% url 'importlayer' project.id %}">
+          Import layer
+        </a>
+      </li>
+      {% if CUSTOM_IMAGE %}
+      <li>
+        <a href="{% url 'newcustomimage' project.id %}">
+          New custom image
+        </a>
+      </li>
+      {% endif %}
+      <li class="pull-right">
+        <form class="form-inline" style="margin-bottom:0px;">
+          <i class="icon-question-sign get-help heading-help" data-placement="left" title="" data-original-title="Type the name of one or more recipes you want to build, separated by a space. You can also specify a task by appending a semicolon and a task name to the recipe name, like so: <code>busybox:clean</code>"></i>
+          <div class="input-append">
+            <input id="build-input" type="text" class="input-xlarge input-lg build-target-input" placeholder="Type the recipe you want to build" autocomplete="off" disabled>
+            <button id="build-button" class="btn btn-primary btn-large build-button" data-project-id="{{project.id}}" disabled>Build</button>
+          </div>
+        </form>
+      </li>
+    </ul>
+  </div>
+{% endif %}
diff --git a/bitbake/lib/toaster/toastergui/templates/recipe.html b/bitbake/lib/toaster/toastergui/templates/recipe.html
index b5e4192..c6ae2f3 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipe.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipe.html
@@ -2,6 +2,7 @@
 
 {% load projecttags %}
 
+{% block title %} {{object.name}}_{{object.version}} - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li><a href="{% url 'recipes' build.pk %}">Recipes</a></li>
 <li>{{object.name}}_{{object.version}} </li>
diff --git a/bitbake/lib/toaster/toastergui/templates/recipe_btn.html b/bitbake/lib/toaster/toastergui/templates/recipe_btn.html
index 77c1b23..baab06e 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipe_btn.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipe_btn.html
@@ -1,7 +1,15 @@
-<button data-recipe-name="{{data.name}}" class="btn btn-block layer-exists-{{data.layer_version.pk}} build-recipe-btn" style="display:none; margin-top: 5px;" >
+<button data-recipe-name="{{data.name}}" class="btn btn-block layer-exists-{{data.layer_version.pk}} build-recipe-btn" style="margin-top: 5px;
+  {% if data.layer_version.pk not in extra.current_layers %}
+    display:none;
+  {% endif %}"
+ >
   Build recipe
 </button>
-<button class="btn btn-block layerbtn layer-add-{{data.layer_version.pk}}" data-layer='{ "id": {{data.layer_version.pk}}, "name":  "{{data.layer_version.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.layer_version.pk%}"}' data-directive="add">
+<button class="btn btn-block layerbtn layer-add-{{data.layer_version.pk}}" data-layer='{ "id": {{data.layer_version.pk}}, "name":  "{{data.layer_version.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.layer_version.pk%}"}' data-directive="add"
+    {% if data.layer_version.pk in extra.current_layers %}
+     style="display:none;"
+    {% endif %}
+>
   <i class="icon-plus"></i>
   Add layer
   <i title="" class="icon-question-sign get-help" data-original-title="To build this target, you must first add the {{data.layer_version.layer.name}} layer to your project"></i>
diff --git a/bitbake/lib/toaster/toastergui/templates/recipes.html b/bitbake/lib/toaster/toastergui/templates/recipes.html
index 5cdac43..d144893 100644
--- a/bitbake/lib/toaster/toastergui/templates/recipes.html
+++ b/bitbake/lib/toaster/toastergui/templates/recipes.html
@@ -2,6 +2,7 @@
 
 {% load projecttags %}
 
+{% block title %} Recipes - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li>Recipes</li>
 {% endblock %}
diff --git a/bitbake/lib/toaster/toastergui/templates/target.html b/bitbake/lib/toaster/toastergui/templates/target.html
index 65e6c4a..4c33eaa 100644
--- a/bitbake/lib/toaster/toastergui/templates/target.html
+++ b/bitbake/lib/toaster/toastergui/templates/target.html
@@ -1,4 +1,5 @@
 {% extends "basebuildpage.html" %}
+{% block title %} Packages included - {{ target.target }} {{ target.build.machine }} - {{ target.build.project.name }} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li>{{target.target}}</li>
 {% endblock localbreadcrumb%}
diff --git a/bitbake/lib/toaster/toastergui/templates/task.html b/bitbake/lib/toaster/toastergui/templates/task.html
index 635098a..ef628d9 100644
--- a/bitbake/lib/toaster/toastergui/templates/task.html
+++ b/bitbake/lib/toaster/toastergui/templates/task.html
@@ -3,6 +3,7 @@
 {% load projecttags %}
 {% load humanize %}
 
+{% block title %} {{task.recipe.name}}_{{task.recipe.version}} {{task.task_name}} - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster {% endblock %}
 {% block localbreadcrumb %}
 <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
 <li>{{task.recipe.name}}_{{task.recipe.version}} {{task.task_name}}</li>
diff --git a/bitbake/lib/toaster/toastergui/templates/tasks.html b/bitbake/lib/toaster/toastergui/templates/tasks.html
index b18b5c7..353410f 100644
--- a/bitbake/lib/toaster/toastergui/templates/tasks.html
+++ b/bitbake/lib/toaster/toastergui/templates/tasks.html
@@ -1,33 +1,34 @@
 {% extends "basebuildpage.html" %}
 {% load projecttags %}
 
+{% block title %} {{mainheading}} - {{build.target_set.all|dictsort:"target"|join:", "}} {{build.machine}} - {{build.project.name}} - Toaster{% endblock %}
 {% block localbreadcrumb %}
-<li>{{title}}</li>
+<li>{{mainheading}}</li>
 {% endblock %}
 
 {% block nav-tasks %}
-  {% if 'Tasks' == title %}
+  {% if 'Tasks' == mainheading %}
     <li class="active"><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
   {% else %}
     <li><a href="{% url 'tasks' build.pk %}">Tasks</a></li>
   {% endif %}
 {% endblock %}
 {% block nav-buildtime %}
-  {% if 'Time' == title %}
+  {% if 'Time' == mainheading %}
     <li class="active"><a href="{% url 'buildtime' build.pk %}">Time</a></li>
   {% else %}
     <li><a href="{% url 'buildtime' build.pk %}">Time</a></li>
   {% endif %}
 {% endblock %}
 {% block nav-cpuusage %}
-  {% if 'CPU usage' == title %}
+  {% if 'CPU usage' == mainheading %}
     <li class="active"><a href="{% url 'cpuusage' build.pk %}">CPU usage</a></li>
   {% else %}
     <li><a href="{% url 'cpuusage' build.pk %}">CPU usage</a></li>
   {% endif %}
 {% endblock %}
 {% block nav-diskio %}
-  {% if 'Disk I/O' == title %}
+  {% if 'Disk I/O' == mainheading %}
     <li class="active"><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li>
   {% else %}
     <li><a href="{% url 'diskio' build.pk %}">Disk I/O</a></li>
@@ -39,7 +40,7 @@
 {% if not request.GET.filter and not request.GET.search and not objects.paginator.count %}
   <!-- Empty - no data in database -->
   <div class="page-header">
-  <h1>{{title}}</h1>
+  <h1>{{mainheading}}</h1>
   </div>
   <div class="alert alert-info lead">
   No data was recorded for this build.
@@ -54,7 +55,7 @@
   {%elif request.GET.filter and objects.paginator.count == 0 or request.GET.search and objects.paginator.count == 0 %}
       No tasks found
   {%else%}
-      {{title}}
+      {{mainheading}}
   {%endif%}
   </h1>
   </div>
diff --git a/bitbake/lib/toaster/toastergui/templates/toastertable.html b/bitbake/lib/toaster/toastergui/templates/toastertable.html
index 9ef4c6f..98a715f 100644
--- a/bitbake/lib/toaster/toastergui/templates/toastertable.html
+++ b/bitbake/lib/toaster/toastergui/templates/toastertable.html
@@ -12,7 +12,6 @@
       tableName : "{{table_name}}",
       url : "{{ xhr_table_url }}?format=json",
       title : "{{title}}",
-      projectLayers : {{projectlayers|json}},
     };
 
     try {
diff --git a/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html b/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html
index b9f8fee..0301a6c 100644
--- a/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html
+++ b/bitbake/lib/toaster/toastergui/templates/unavailable_artifact.html
@@ -3,6 +3,8 @@
 {% load humanize %}
 {% load static %}
 
+{% block title %} Build artifact no longer exists - Toaster {% endblock %}
+
 {% block pagecontent %}
 
 <div class="row-fluid air">
diff --git a/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py b/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py
new file mode 100644
index 0000000..04770ac
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/templatetags/project_url_tag.py
@@ -0,0 +1,34 @@
+from django import template
+from django.core.urlresolvers import reverse
+
+register = template.Library()
+
+def project_url(parser, token):
+    """
+    Create a URL for a project's main page;
+    for non-default projects, this is the configuration page;
+    for the default project, this is the project builds page
+    """
+    try:
+        tag_name, project = token.split_contents()
+    except ValueError:
+        raise template.TemplateSyntaxError(
+            "%s tag requires exactly one argument" % tag_name
+        )
+    return ProjectUrlNode(project)
+
+class ProjectUrlNode(template.Node):
+    def __init__(self, project):
+        self.project = template.Variable(project)
+
+    def render(self, context):
+        try:
+            project = self.project.resolve(context)
+            if project.is_default:
+                return reverse('projectbuilds', args=(project.id,))
+            else:
+                return reverse('project', args=(project.id,))
+        except template.VariableDoesNotExist:
+            return ''
+
+register.tag('project_url', project_url)
diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py
index 4d1549b..9e6c46a 100644
--- a/bitbake/lib/toaster/toastergui/tests.py
+++ b/bitbake/lib/toaster/toastergui/tests.py
@@ -22,15 +22,29 @@
 """Test cases for Toaster GUI and ReST."""
 
 from django.test import TestCase
+from django.test.client import RequestFactory
 from django.core.urlresolvers import reverse
 from django.utils import timezone
-from orm.models import Project, Release, BitbakeVersion, ProjectTarget
+
+from orm.models import Project, Release, BitbakeVersion, Package, LogMessage
 from orm.models import ReleaseLayerSourcePriority, LayerSource, Layer, Build
-from orm.models import Layer_Version, Recipe, Machine, ProjectLayer
+from orm.models import Layer_Version, Recipe, Machine, ProjectLayer, Target
+from orm.models import CustomImageRecipe, ProjectVariable
+from orm.models import Branch
+
+import toastermain
+
+from toastergui.tables import SoftwareRecipesTable
 import json
 from bs4 import BeautifulSoup
+import re
 
 PROJECT_NAME = "test project"
+CLI_BUILDS_PROJECT_NAME = 'Command line builds'
+
+# by default, tests are run in build mode; to run in analysis mode,
+# set this to False in individual test cases
+toastermain.settings.BUILD_MODE = True
 
 class ViewTests(TestCase):
     """Tests to verify view APIs."""
@@ -39,27 +53,58 @@ class ViewTests(TestCase):
         bbv = BitbakeVersion.objects.create(name="test bbv", giturl="/tmp/",
                                             branch="master", dirpath="")
         release = Release.objects.create(name="test release",
+                                         branch_name="master",
                                          bitbake_version=bbv)
         self.project = Project.objects.create_project(name=PROJECT_NAME,
                                                       release=release)
+        now = timezone.now()
+
+        build = Build.objects.create(project=self.project,
+                                     started_on=now,
+                                     completed_on=now)
+
         layersrc = LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED)
         self.priority = ReleaseLayerSourcePriority.objects.create(release=release,
                                                                   layer_source=layersrc)
         layer = Layer.objects.create(name="base-layer", layer_source=layersrc,
                                      vcs_url="/tmp/")
 
+        branch = Branch.objects.create(name="master", layer_source=layersrc)
+
         lver = Layer_Version.objects.create(layer=layer, project=self.project,
-                                            layer_source=layersrc, commit="master")
+                                            layer_source=layersrc, commit="master",
+                                            up_branch=branch)
 
-        Recipe.objects.create(layer_source=layersrc, name="base-recipe",
-                              version="1.2", summary="one recipe",
-                              description="recipe", layer_version=lver)
+        self.recipe1 = Recipe.objects.create(layer_source=layersrc,
+                                             name="base-recipe",
+                                             version="1.2",
+                                             summary="one recipe",
+                                             description="recipe",
+                                             layer_version=lver)
 
         Machine.objects.create(layer_version=lver, name="wisk",
                                description="wisking machine")
 
         ProjectLayer.objects.create(project=self.project, layercommit=lver)
 
+
+        self.customr = CustomImageRecipe.objects.create(\
+                           name="custom recipe", project=self.project,
+                           base_recipe=self.recipe1)
+
+        self.package = Package.objects.create(name='pkg1', recipe=self.recipe1,
+                                              build=build)
+
+
+        # recipe with project for testing AvailableRecipe table
+        self.recipe2 = Recipe.objects.create(layer_source=layersrc,
+                                             name="fancy-recipe",
+                                             version="1.4",
+                                             summary="a fancy recipe",
+                                             description="fancy recipe",
+                                             layer_version=lver,
+                                             file_path='/home/foo')
+
         self.assertTrue(lver in self.project.compatible_layerversions())
 
     def test_get_base_call_returns_html(self):
@@ -181,6 +226,140 @@ class ViewTests(TestCase):
         data = json.loads(response.content)
         self.assertNotEqual(data["error"], "ok")
 
+    def test_custom_ok(self):
+        """Test successful return from ReST API xhr_customrecipe"""
+        url = reverse('xhr_customrecipe')
+        params = {'name': 'custom', 'project': self.project.id,
+                  'base': self.recipe1.id}
+        response = self.client.post(url, params)
+        self.assertEqual(response.status_code, 200)
+        data = json.loads(response.content)
+        self.assertEqual(data['error'], 'ok')
+        self.assertTrue('url' in data)
+        # get recipe from the database
+        recipe = CustomImageRecipe.objects.get(project=self.project,
+                                               name=params['name'])
+        args = (self.project.id, recipe.id,)
+        self.assertEqual(reverse('customrecipe', args=args), data['url'])
+
+    def test_custom_incomplete_params(self):
+        """Test not passing all required parameters to xhr_customrecipe"""
+        url = reverse('xhr_customrecipe')
+        for params in [{}, {'name': 'custom'},
+                       {'name': 'custom', 'project': self.project.id}]:
+            response = self.client.post(url, params)
+            self.assertEqual(response.status_code, 200)
+            data = json.loads(response.content)
+            self.assertNotEqual(data["error"], "ok")
+
+    def test_xhr_custom_wrong_project(self):
+        """Test passing wrong project id to xhr_customrecipe"""
+        url = reverse('xhr_customrecipe')
+        params = {'name': 'custom', 'project': 0, "base": self.recipe1.id}
+        response = self.client.post(url, params)
+        self.assertEqual(response.status_code, 200)
+        data = json.loads(response.content)
+        self.assertNotEqual(data["error"], "ok")
+
+    def test_xhr_custom_wrong_base(self):
+        """Test passing wrong base recipe id to xhr_customrecipe"""
+        url = reverse('xhr_customrecipe')
+        params = {'name': 'custom', 'project': self.project.id, "base": 0}
+        response = self.client.post(url, params)
+        self.assertEqual(response.status_code, 200)
+        data = json.loads(response.content)
+        self.assertNotEqual(data["error"], "ok")
+
+    def test_xhr_custom_details(self):
+        """Test getting custom recipe details"""
+        name = "custom recipe"
+        url = reverse('xhr_customrecipe_id', args=(self.customr.id,))
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 200)
+        expected = {"error": "ok",
+                    "info": {'id': self.customr.id,
+                             'name': name,
+                             'base_recipe_id': self.recipe1.id,
+                             'project_id': self.project.id,
+                            }
+                   }
+        self.assertEqual(json.loads(response.content), expected)
+
+    def test_xhr_custom_del(self):
+        """Test deleting custom recipe"""
+        name = "to be deleted"
+        recipe = CustomImageRecipe.objects.create(\
+                     name=name, project=self.project,
+                     base_recipe=self.recipe1)
+        url = reverse('xhr_customrecipe_id', args=(recipe.id,))
+        response = self.client.delete(url)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(json.loads(response.content), {"error": "ok"})
+        # try to delete not-existent recipe
+        url = reverse('xhr_customrecipe_id', args=(recipe.id,))
+        response = self.client.delete(url)
+        self.assertEqual(response.status_code, 200)
+        self.assertNotEqual(json.loads(response.content)["error"], "ok")
+
+    def test_xhr_custom_packages(self):
+        """Test adding and deleting package to a custom recipe"""
+        url = reverse('xhr_customrecipe_packages',
+                      args=(self.customr.id, self.package.id))
+        # add self.package1 to recipe
+        response = self.client.put(url)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(json.loads(response.content), {"error": "ok"})
+        self.assertEqual(self.customr.packages.all()[0].id, self.package.id)
+        # delete it
+        response = self.client.delete(url)
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(json.loads(response.content), {"error": "ok"})
+        self.assertFalse(self.customr.packages.all())
+        # delete it again to test error condition
+        response = self.client.delete(url)
+        self.assertEqual(response.status_code, 200)
+        self.assertNotEqual(json.loads(response.content)["error"], "ok")
+
+    def test_xhr_custom_packages_err(self):
+        """Test error conditions of xhr_customrecipe_packages"""
+        # test calls with wrong recipe id and wrong package id
+        for args in [(0, self.package.id), (self.customr.id, 0)]:
+            url = reverse('xhr_customrecipe_packages', args=args)
+            # test put and delete methods
+            for method in (self.client.put, self.client.delete):
+                response = method(url)
+                self.assertEqual(response.status_code, 200)
+                self.assertNotEqual(json.loads(response.content),
+                                    {"error": "ok"})
+
+    def test_software_recipes_table(self):
+        """Test structure returned for Software RecipesTable"""
+        table = SoftwareRecipesTable()
+        request = RequestFactory().get('/foo/', {'format': 'json'})
+        response = table.get(request, pid=self.project.id)
+        data = json.loads(response.content)
+
+        rows = data['rows']
+        row1 = next(x for x in rows if x['name'] == self.recipe1.name)
+        row2 = next(x for x in rows if x['name'] == self.recipe2.name)
+
+        self.assertEqual(response.status_code, 200, 'should be 200 OK status')
+        self.assertEqual(len(rows), 2, 'should be 2 recipes')
+
+        # check other columns have been populated correctly
+        self.assertEqual(row1['name'], self.recipe1.name)
+        self.assertEqual(row1['version'], self.recipe1.version)
+        self.assertEqual(row1['get_description_or_summary'],
+                         self.recipe1.description)
+        self.assertEqual(row1['layer_version__layer__name'],
+                         self.recipe1.layer_version.layer.name)
+        self.assertEqual(row2['name'], self.recipe2.name)
+        self.assertEqual(row2['version'], self.recipe2.version)
+        self.assertEqual(row2['get_description_or_summary'],
+                         self.recipe2.description)
+        self.assertEqual(row2['layer_version__layer__name'],
+                         self.recipe2.layer_version.layer.name)
+
 class LandingPageTests(TestCase):
     """ Tests for redirects on the landing page """
     # disable bogus pylint message error:
@@ -255,18 +434,48 @@ class LandingPageTests(TestCase):
         self.assertTrue('/builds' in response.url,
                         'should redirect to builds')
 
-class ProjectsPageTests(TestCase):
-    """ Tests for projects page """
+class AllProjectsPageTests(TestCase):
+    """ Tests for projects page /projects/ """
 
-    PROJECT_NAME = 'cli builds'
+    MACHINE_NAME = 'delorean'
 
     def setUp(self):
         """ Add default project manually """
-        project = Project.objects.create_project(self.PROJECT_NAME, None)
+        project = Project.objects.create_project(CLI_BUILDS_PROJECT_NAME, None)
         self.default_project = project
         self.default_project.is_default = True
         self.default_project.save()
 
+        # this project is only set for some of the tests
+        self.project = None
+
+        self.release = None
+
+    def _add_build_to_default_project(self):
+        """ Add a build to the default project (not used in all tests) """
+        now = timezone.now()
+        build = Build.objects.create(project=self.default_project,
+                                     started_on=now,
+                                     completed_on=now)
+        build.save()
+
+    def _add_non_default_project(self):
+        """ Add another project """
+        bbv = BitbakeVersion.objects.create(name="test bbv", giturl="/tmp/",
+                                            branch="master", dirpath="")
+        self.release = Release.objects.create(name="test release",
+                                              branch_name="master",
+                                              bitbake_version=bbv)
+        self.project = Project.objects.create_project(PROJECT_NAME, self.release)
+        self.project.is_default = False
+        self.project.save()
+
+        # fake the MACHINE variable
+        project_var = ProjectVariable.objects.create(project=self.project,
+                                                     name='MACHINE',
+                                                     value=self.MACHINE_NAME)
+        project_var.save()
+
     def test_default_project_hidden(self):
         """ The default project should be hidden if it has no builds """
         params = {"count": 10, "orderby": "updated:-", "page": 1}
@@ -274,26 +483,116 @@ class ProjectsPageTests(TestCase):
 
         self.assertTrue(not('tr class="data"' in response.content),
                         'should be no project rows in the page')
-        self.assertTrue(not(self.PROJECT_NAME in response.content),
+        self.assertTrue(not(CLI_BUILDS_PROJECT_NAME in response.content),
                         'default project "cli builds" should not be in page')
 
     def test_default_project_has_build(self):
         """ The default project should be shown if it has builds """
-        now = timezone.now()
-        build = Build.objects.create(project=self.default_project,
-                                     started_on=now,
-                                     completed_on=now)
-        build.save()
+        self._add_build_to_default_project()
 
         params = {"count": 10, "orderby": "updated:-", "page": 1}
         response = self.client.get(reverse('all-projects'), params)
 
         self.assertTrue('tr class="data"' in response.content,
                         'should be a project row in the page')
-        self.assertTrue(self.PROJECT_NAME in response.content,
+        self.assertTrue(CLI_BUILDS_PROJECT_NAME in response.content,
                         'default project "cli builds" should be in page')
 
-class ProjectBuildsDisplayTest(TestCase):
+    def test_default_project_release(self):
+        """
+        The release for the default project should display as
+        'Not applicable'
+        """
+        # need a build, otherwise project doesn't display at all
+        self._add_build_to_default_project()
+
+        # another project to test, which should show release
+        self._add_non_default_project()
+
+        response = self.client.get(reverse('all-projects'), follow=True)
+        soup = BeautifulSoup(response.content)
+
+        # check the release cell for the default project
+        attrs = {'data-project': str(self.default_project.id)}
+        rows = soup.find_all('tr', attrs=attrs)
+        self.assertEqual(len(rows), 1, 'should be one row for default project')
+        cells = rows[0].find_all('td', attrs={'data-project-field': 'release'})
+        self.assertEqual(len(cells), 1, 'should be one release cell')
+        text = cells[0].select('span.muted')[0].text
+        self.assertEqual(text, 'Not applicable',
+                         'release should be not applicable for default project')
+
+        # check the link in the release cell for the other project
+        attrs = {'data-project': str(self.project.id)}
+        rows = soup.find_all('tr', attrs=attrs)
+        cells = rows[0].find_all('td', attrs={'data-project-field': 'release'})
+        text = cells[0].select('a')[0].text
+        self.assertEqual(text, self.release.name,
+                         'release name should be shown for non-default project')
+
+    def test_default_project_machine(self):
+        """
+        The machine for the default project should display as
+        'Not applicable'
+        """
+        # need a build, otherwise project doesn't display at all
+        self._add_build_to_default_project()
+
+        # another project to test, which should show machine
+        self._add_non_default_project()
+
+        response = self.client.get(reverse('all-projects'), follow=True)
+        soup = BeautifulSoup(response.content)
+
+        # check the machine cell for the default project
+        attrs = {'data-project': str(self.default_project.id)}
+        rows = soup.find_all('tr', attrs=attrs)
+        self.assertEqual(len(rows), 1, 'should be one row for default project')
+        cells = rows[0].find_all('td', attrs={'data-project-field': 'machine'})
+        self.assertEqual(len(cells), 1, 'should be one machine cell')
+        text = cells[0].select('span.muted')[0].text
+        self.assertEqual(text, 'Not applicable',
+                         'machine should be not applicable for default project')
+
+        # check the link in the machine cell for the other project
+        attrs = {'data-project': str(self.project.id)}
+        rows = soup.find_all('tr', attrs=attrs)
+        cells = rows[0].find_all('td', attrs={'data-project-field': 'machine'})
+        text = cells[0].select('a')[0].text
+        self.assertEqual(text, self.MACHINE_NAME,
+                         'machine name should be shown for non-default project')
+
+    def test_project_page_links(self):
+        """
+        Test that links for the default project point to the builds
+        page /projects/X/builds for that project, and that links for
+        other projects point to their configuration pages /projects/X/
+        """
+
+        # need a build, otherwise project doesn't display at all
+        self._add_build_to_default_project()
+
+        # another project to test, which should show machine
+        self._add_non_default_project()
+
+        response = self.client.get(reverse('all-projects'), follow=True)
+        soup = BeautifulSoup(response.content)
+
+        # link for default project
+        row = soup.find('tr', attrs={'data-project': self.default_project.id})
+        cell = row.find('td', attrs={'data-project-field': 'name'})
+        expected_url = reverse('projectbuilds', args=(self.default_project.id,))
+        self.assertEqual(cell.find('a')['href'], expected_url,
+                         'link on default project name should point to builds')
+
+        # link for other project
+        row = soup.find('tr', attrs={'data-project': self.project.id})
+        cell = row.find('td', attrs={'data-project-field': 'name'})
+        expected_url = reverse('project', args=(self.project.id,))
+        self.assertEqual(cell.find('a')['href'], expected_url,
+                         'link on project name should point to configuration')
+
+class ProjectBuildsPageTests(TestCase):
     """ Test data at /project/X/builds is displayed correctly """
 
     def setUp(self):
@@ -303,8 +602,18 @@ class ProjectBuildsDisplayTest(TestCase):
                                          bitbake_version=bbv)
         self.project1 = Project.objects.create_project(name=PROJECT_NAME,
                                                        release=release)
+        self.project1.save()
+
         self.project2 = Project.objects.create_project(name=PROJECT_NAME,
                                                        release=release)
+        self.project2.save()
+
+        self.default_project = Project.objects.create_project(
+            name=CLI_BUILDS_PROJECT_NAME,
+            release=release
+        )
+        self.default_project.is_default = True
+        self.default_project.save()
 
         # parameters for builds to associate with the projects
         now = timezone.now()
@@ -338,6 +647,7 @@ class ProjectBuildsDisplayTest(TestCase):
         }
 
     def _get_rows_for_project(self, project_id):
+        """ Helper to retrieve HTML rows for a project """
         url = reverse("projectbuilds", args=(project_id,))
         response = self.client.get(url, follow=True)
         soup = BeautifulSoup(response.content)
@@ -345,35 +655,273 @@ class ProjectBuildsDisplayTest(TestCase):
 
     def test_show_builds_for_project(self):
         """ Builds for a project should be displayed """
-        build1a = Build.objects.create(**self.project1_build_success)
-        build1b = Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
         build_rows = self._get_rows_for_project(self.project1.id)
         self.assertEqual(len(build_rows), 2)
 
-    def test_show_builds_for_project_only(self):
+    def test_show_builds_project_only(self):
         """ Builds for other projects should be excluded """
-        build1a = Build.objects.create(**self.project1_build_success)
-        build1b = Build.objects.create(**self.project1_build_success)
-        build1c = Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
 
         # shouldn't see these two
-        build2a = Build.objects.create(**self.project2_build_success)
-        build2b = Build.objects.create(**self.project2_build_in_progress)
+        Build.objects.create(**self.project2_build_success)
+        Build.objects.create(**self.project2_build_in_progress)
 
         build_rows = self._get_rows_for_project(self.project1.id)
         self.assertEqual(len(build_rows), 3)
 
-    def test_show_builds_exclude_in_progress(self):
+    def test_builds_exclude_in_progress(self):
         """ "in progress" builds should not be shown """
-        build1a = Build.objects.create(**self.project1_build_success)
-        build1b = Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
+        Build.objects.create(**self.project1_build_success)
 
         # shouldn't see this one
-        build1c = Build.objects.create(**self.project1_build_in_progress)
+        Build.objects.create(**self.project1_build_in_progress)
 
         # shouldn't see these two either, as they belong to a different project
-        build2a = Build.objects.create(**self.project2_build_success)
-        build2b = Build.objects.create(**self.project2_build_in_progress)
+        Build.objects.create(**self.project2_build_success)
+        Build.objects.create(**self.project2_build_in_progress)
 
         build_rows = self._get_rows_for_project(self.project1.id)
-        self.assertEqual(len(build_rows), 2)
\ No newline at end of file
+        self.assertEqual(len(build_rows), 2)
+
+    def test_tasks_in_projectbuilds(self):
+        """ Task should be shown as suffix on build name """
+        build = Build.objects.create(**self.project1_build_success)
+        Target.objects.create(build=build, target='bash', task='clean')
+        url = reverse("projectbuilds", args=(self.project1.id,))
+        response = self.client.get(url, follow=True)
+        result = re.findall('^ +bash:clean$', response.content, re.MULTILINE)
+        self.assertEqual(len(result), 2)
+
+    def test_cli_builds_hides_tabs(self):
+        """
+        Display for command line builds should hide tabs;
+        note that the latest builds section is already tested in
+        AllBuildsPageTests, as the template is the same
+        """
+        url = reverse("projectbuilds", args=(self.default_project.id,))
+        response = self.client.get(url, follow=True)
+        soup = BeautifulSoup(response.content)
+        tabs = soup.select('#project-topbar')
+        self.assertEqual(len(tabs), 0,
+                         'should be no top bar shown for command line builds')
+
+    def test_non_cli_builds_has_tabs(self):
+        """
+        Non-command-line builds projects should show the tabs
+        """
+        url = reverse("projectbuilds", args=(self.project1.id,))
+        response = self.client.get(url, follow=True)
+        soup = BeautifulSoup(response.content)
+        tabs = soup.select('#project-topbar')
+        self.assertEqual(len(tabs), 1,
+                         'should be a top bar shown for non-command-line builds')
+
+class AllBuildsPageTests(TestCase):
+    """ Tests for all builds page /builds/ """
+
+    def setUp(self):
+        bbv = BitbakeVersion.objects.create(name="bbv1", giturl="/tmp/",
+                                            branch="master", dirpath="")
+        release = Release.objects.create(name="release1",
+                                         bitbake_version=bbv)
+        self.project1 = Project.objects.create_project(name=PROJECT_NAME,
+                                                       release=release)
+        self.default_project = Project.objects.create_project(
+            name=CLI_BUILDS_PROJECT_NAME,
+            release=release
+        )
+        self.default_project.is_default = True
+        self.default_project.save()
+
+        # parameters for builds to associate with the projects
+        now = timezone.now()
+
+        self.project1_build_success = {
+            "project": self.project1,
+            "started_on": now,
+            "completed_on": now,
+            "outcome": Build.SUCCEEDED
+        }
+
+        self.default_project_build_success = {
+            "project": self.default_project,
+            "started_on": now,
+            "completed_on": now,
+            "outcome": Build.SUCCEEDED
+        }
+
+    def test_show_tasks_in_allbuilds(self):
+        """ Task should be shown as suffix on build name """
+        build = Build.objects.create(**self.project1_build_success)
+        Target.objects.create(build=build, target='bash', task='clean')
+        url = reverse('all-builds')
+        response = self.client.get(url, follow=True)
+        result = re.findall('bash:clean', response.content, re.MULTILINE)
+        self.assertEqual(len(result), 3)
+
+    def test_no_run_again_for_cli_build(self):
+        """ "Run again" button should not be shown for command-line builds """
+        build = Build.objects.create(**self.default_project_build_success)
+        url = reverse('all-builds')
+        response = self.client.get(url, follow=True)
+        soup = BeautifulSoup(response.content)
+
+        attrs = {'data-latest-build-result': build.id}
+        result = soup.find('div', attrs=attrs)
+
+        # shouldn't see a run again button for command-line builds
+        run_again_button = result.select('button')
+        self.assertEqual(len(run_again_button), 0)
+
+        # should see a help icon for command-line builds
+        help_icon = result.select('i.get-help-green')
+        self.assertEqual(len(help_icon), 1)
+
+    def test_tooltips_on_project_name(self):
+        """
+        A tooltip should be present next to the command line
+        builds project name in the all builds page, but not for
+        other projects
+        """
+        build1 = Build.objects.create(**self.project1_build_success)
+        default_build = Build.objects.create(**self.default_project_build_success)
+
+        url = reverse('all-builds')
+        response = self.client.get(url, follow=True)
+        soup = BeautifulSoup(response.content)
+
+        # no help icon on non-default project name
+        result = soup.find('tr', attrs={'data-table-build-result': build1.id})
+        name = result.select('td.project-name')[0]
+        icons = name.select('i.get-help')
+        self.assertEqual(len(icons), 0,
+                         'should not be a help icon for non-cli builds name')
+
+        # help icon on default project name
+        result = soup.find('tr', attrs={'data-table-build-result': default_build.id})
+        name = result.select('td.project-name')[0]
+        icons = name.select('i.get-help')
+        self.assertEqual(len(icons), 1,
+                         'should be a help icon for cli builds name')
+
+class ProjectPageTests(TestCase):
+    """ Test project data at /project/X/ is displayed correctly """
+    CLI_BUILDS_PROJECT_NAME = 'Command line builds'
+
+    def test_command_line_builds_in_progress(self):
+        """
+        In progress builds should not cause an error to be thrown
+        when navigating to "command line builds" project page;
+        see https://bugzilla.yoctoproject.org/show_bug.cgi?id=8277
+        """
+
+        # add the "command line builds" default project; this mirrors what
+        # we do in migration 0026_set_default_project.py
+        default_project = Project.objects.create_project(self.CLI_BUILDS_PROJECT_NAME, None)
+        default_project.is_default = True
+        default_project.save()
+
+        # add an "in progress" build for the default project
+        now = timezone.now()
+        build = Build.objects.create(project=default_project,
+                                     started_on=now,
+                                     completed_on=now,
+                                     outcome=Build.IN_PROGRESS)
+
+        # navigate to the project page for the default project
+        url = reverse("project", args=(default_project.id,))
+        response = self.client.get(url, follow=True)
+
+        self.assertEqual(response.status_code, 200)
+
+class BuildDashboardTests(TestCase):
+    """ Tests for the build dashboard /build/X """
+
+    def setUp(self):
+        bbv = BitbakeVersion.objects.create(name="bbv1", giturl="/tmp/",
+                                            branch="master", dirpath="")
+        release = Release.objects.create(name="release1",
+                                         bitbake_version=bbv)
+        project = Project.objects.create_project(name=PROJECT_NAME,
+                                                 release=release)
+
+        now = timezone.now()
+
+        self.build1 = Build.objects.create(project=project,
+                                           started_on=now,
+                                           completed_on=now)
+
+        # exception
+        msg1 = 'an exception was thrown'
+        self.exception_message = LogMessage.objects.create(
+            build=self.build1,
+            level=LogMessage.EXCEPTION,
+            message=msg1
+        )
+
+        # critical
+        msg2 = 'a critical error occurred'
+        self.critical_message = LogMessage.objects.create(
+            build=self.build1,
+            level=LogMessage.CRITICAL,
+            message=msg2
+        )
+
+    def _get_build_dashboard_errors(self):
+        """
+        Get a list of HTML fragments representing the errors on the
+        build dashboard
+        """
+        url = reverse('builddashboard', args=(self.build1.id,))
+        response = self.client.get(url)
+        soup = BeautifulSoup(response.content)
+        return soup.select('#errors div.alert-error')
+
+    def _check_for_log_message(self, log_message):
+        """
+        Check whether the LogMessage instance <log_message> is
+        represented as an HTML error in the build dashboard page
+        """
+        errors = self._get_build_dashboard_errors()
+        self.assertEqual(len(errors), 2)
+
+        expected_text = log_message.message
+        expected_id = str(log_message.id)
+
+        found = False
+        for error in errors:
+            error_text = error.find('pre').text
+            text_matches = (error_text == expected_text)
+
+            error_id = error['data-error']
+            id_matches = (error_id == expected_id)
+
+            if text_matches and id_matches:
+                found = True
+                break
+
+        template_vars = (expected_text, error_text,
+                         expected_id, error_id)
+        assertion_error_msg = 'exception not found as error: ' \
+            'expected text "%s" and got "%s"; ' \
+            'expected ID %s and got %s' % template_vars
+        self.assertTrue(found, assertion_error_msg)
+
+    def test_exceptions_show_as_errors(self):
+        """
+        LogMessages with level EXCEPTION should display in the errors
+        section of the page
+        """
+        self._check_for_log_message(self.exception_message)
+
+    def test_criticals_show_as_errors(self):
+        """
+        LogMessages with level CRITICAL should display in the errors
+        section of the page
+        """
+        self._check_for_log_message(self.critical_message)
diff --git a/bitbake/lib/toaster/toastergui/typeaheads.py b/bitbake/lib/toaster/toastergui/typeaheads.py
index d5bec58..dd4b7f5 100644
--- a/bitbake/lib/toaster/toastergui/typeaheads.py
+++ b/bitbake/lib/toaster/toastergui/typeaheads.py
@@ -27,7 +27,7 @@ class LayersTypeAhead(ToasterTypeAhead):
       super(LayersTypeAhead, self).__init__()
 
     def apply_search(self, search_term, prj, request):
-        layers = prj.compatible_layerversions()
+        layers = prj.get_all_compatible_layer_versions()
         layers = layers.order_by('layer__name')
 
         # Unlike the other typeaheads we also don't want to show suggestions
@@ -35,7 +35,8 @@ class LayersTypeAhead(ToasterTypeAhead):
         # layerdeps to a new layer.
         if ("include_added" in request.GET and
                 request.GET['include_added'] != "true"):
-            layers = layers.exclude(pk__in=prj.projectlayer_equivalent_set)
+            layers = layers.exclude(
+                pk__in=prj.get_project_layer_versions(pk=True))
 
         primary_results = layers.filter(layer__name__istartswith=search_term)
         secondary_results = layers.filter(layer__name__icontains=search_term).exclude(pk__in=primary_results)
@@ -120,12 +121,12 @@ class RecipesTypeAhead(ToasterTypeAhead):
         return results
 
 class ProjectsTypeAhead(ToasterTypeAhead):
-    """ Typeahead for all the projects """
+    """ Typeahead for all the projects, except for command line builds """
     def __init__(self):
         super(ProjectsTypeAhead, self).__init__()
 
     def apply_search(self, search_term, prj, request):
-        projects = Project.objects.all().order_by("name")
+        projects = Project.objects.exclude(is_default=True).order_by("name")
 
         primary_results = projects.filter(name__istartswith=search_term)
         secondary_results = projects.filter(name__icontains=search_term).exclude(pk__in=primary_results)
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py
index 46e5761..a1adbb7 100644
--- a/bitbake/lib/toaster/toastergui/urls.py
+++ b/bitbake/lib/toaster/toastergui/urls.py
@@ -87,28 +87,29 @@ urlpatterns = patterns('toastergui.views',
         # the table pages that have been converted to ToasterTable widget
         url(r'^project/(?P<pid>\d+)/machines/$',
             tables.MachinesTable.as_view(template_name="generic-toastertable-page.html"),
-            { 'table_name': tables.MachinesTable.__name__.lower(),
-              'title' : 'Compatible machines' },
             name="projectmachines"),
 
-        url(r'^project/(?P<pid>\d+)/recipes/$',
-            tables.RecipesTable.as_view(template_name="generic-toastertable-page.html"),
-            { 'table_name': tables.RecipesTable.__name__.lower(),
-              'title' : 'Compatible recipes' },
-            name="projecttargets"),
+        url(r'^project/(?P<pid>\d+)/softwarerecipes/$',
+            tables.SoftwareRecipesTable.as_view(template_name="generic-toastertable-page.html"),
+            name="projectsoftwarerecipes"),
+
+        url(r'^project/(?P<pid>\d+)/images/$',
+            tables.ImageRecipesTable.as_view(template_name="generic-toastertable-page.html"), name="projectimagerecipes"),
+
+        url(r'^project/(?P<pid>\d+)/customimages/$',
+            tables.CustomImagesTable.as_view(template_name="generic-toastertable-page.html"), name="projectcustomimages"),
+
+        url(r'^project/(?P<pid>\d+)/newcustomimage/$',
+            tables.NewCustomImagesTable.as_view(template_name="newcustomimage.html"),
+            name="newcustomimage"),
 
-        url(r'^project/(?P<pid>\d+)/availablerecipes/$',
-            tables.ProjectLayersRecipesTable.as_view(template_name="generic-toastertable-page.html"),
-            { 'table_name': tables.ProjectLayersRecipesTable.__name__.lower(),
-              'title' : 'Recipes available for layers in the current project' },
-            name="projectavailabletargets"),
 
         url(r'^project/(?P<pid>\d+)/layers/$',
             tables.LayersTable.as_view(template_name="generic-toastertable-page.html"),
-            { 'table_name': tables.LayersTable.__name__.lower(),
-              'title' : 'Compatible layers' },
             name="projectlayers"),
 
+
+
         url(r'^project/(?P<pid>\d+)/layer/(?P<layerid>\d+)$',
             'layerdetails', name='layerdetails'),
 
@@ -125,6 +126,16 @@ urlpatterns = patterns('toastergui.views',
             name=tables.LayerMachinesTable.__name__.lower()),
 
 
+        url(r'^project/(?P<pid>\d+)/customrecipe/(?P<recipeid>\d+)/selectpackages/$',
+            tables.SelectPackagesTable.as_view(template_name="generic-toastertable-page.html"), name="recipeselectpackages"),
+
+
+        url(r'^project/(?P<pid>\d+)/customrecipe/(?P<recipe_id>\d+)$',
+            'customrecipe',
+            name="customrecipe"),
+
+
+
         # typeahead api end points
         url(r'^xhr_typeahead/(?P<pid>\d+)/layers$',
             typeaheads.LayersTypeAhead.as_view(), name='xhr_layerstypeahead'),
@@ -148,6 +159,14 @@ urlpatterns = patterns('toastergui.views',
         # JS Unit tests
         url(r'^js-unit-tests/$', 'jsunittests', name='js-unit-tests'),
 
-        # default redirection
+        # image customisation functionality
+        url(r'^xhr_customrecipe/(?P<recipe_id>\d+)/packages/(?P<package_id>\d+|)$',
+            'xhr_customrecipe_packages', name='xhr_customrecipe_packages'),
+        url(r'^xhr_customrecipe/(?P<recipe_id>\d+)$', 'xhr_customrecipe_id',
+            name='xhr_customrecipe_id'),
+        url(r'^xhr_customrecipe/', 'xhr_customrecipe',
+            name='xhr_customrecipe'),
+
+          # default redirection
         url(r'^$', RedirectView.as_view( url= 'landing')),
 )
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 8689a12..0e255f1 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -26,12 +26,12 @@
 import operator,re
 
 from django.db.models import F, Q, Sum, Count, Max
-from django.db import IntegrityError
+from django.db import IntegrityError, Error
 from django.shortcuts import render, redirect
 from orm.models import Build, Target, Task, Layer, Layer_Version, Recipe, LogMessage, Variable
 from orm.models import Task_Dependency, Recipe_Dependency, Package, Package_File, Package_Dependency
 from orm.models import Target_Installed_Package, Target_File, Target_Image_File, BuildArtifact
-from orm.models import BitbakeVersion
+from orm.models import BitbakeVersion, CustomImageRecipe
 from bldcontrol import bbcontroller
 from django.views.decorators.cache import cache_control
 from django.core.urlresolvers import reverse, resolve
@@ -45,32 +45,50 @@ from django.utils import formats
 from toastergui.templatetags.projecttags import json as jsonfilter
 import json
 from os.path import dirname
+from functools import wraps
 import itertools
+import mimetypes
 
-import magic
 import logging
 
 logger = logging.getLogger("toaster")
 
 class MimeTypeFinder(object):
-    _magic = magic.Magic(flags = magic.MAGIC_MIME_TYPE)
+    # setting this to False enables additional non-standard mimetypes
+    # to be included in the guess
+    _strict = False
 
-    # returns the mimetype for a file path
+    # returns the mimetype for a file path as a string,
+    # or 'application/octet-stream' if the type couldn't be guessed
     @classmethod
     def get_mimetype(self, path):
-        return self._magic.id_filename(path)
+        guess = mimetypes.guess_type(path, self._strict)
+        guessed_type = guess[0]
+        if guessed_type == None:
+            guessed_type = 'application/octet-stream'
+        return guessed_type
 
 # all new sessions should come through the landing page;
 # determine in which mode we are running in, and redirect appropriately
 def landing(request):
+    # in build mode, we redirect to the command-line builds page
+    # if there are any builds for the default (cli builds) project
+    default_project = Project.objects.get_default_project()
+    default_project_builds = Build.objects.filter(project = default_project)
+
+    if (not toastermain.settings.BUILD_MODE) and default_project_builds.count() > 0:
+        args = (default_project.id,)
+        return redirect(reverse('projectbuilds', args = args), permanent = False)
+
     # we only redirect to projects page if there is a user-generated project
+    num_builds = Build.objects.all().count()
     user_projects = Project.objects.filter(is_default = False)
     has_user_project = user_projects.count() > 0
 
-    if Build.objects.count() == 0 and has_user_project:
+    if num_builds == 0 and has_user_project:
         return redirect(reverse('all-projects'), permanent = False)
 
-    if Build.objects.all().count() > 0:
+    if num_builds > 0:
         return redirect(reverse('all-builds'), permanent = False)
 
     context = {'lvs_nos' : Layer_Version.objects.all().count()}
@@ -84,9 +102,12 @@ def _get_latest_builds(prj=None):
     if prj is not None:
         queryset = queryset.filter(project = prj)
 
+    if not toastermain.settings.BUILD_MODE:
+        queryset = queryset.exclude(project__is_default=False)
+
     return list(itertools.chain(
-        queryset.filter(outcome=Build.IN_PROGRESS).order_by("-pk"),
-        queryset.filter(outcome__lt=Build.IN_PROGRESS).order_by("-pk")[:3] ))
+        queryset.filter(outcome=Build.IN_PROGRESS).order_by("-started_on"),
+        queryset.filter(outcome__lt=Build.IN_PROGRESS).order_by("-started_on")[:3] ))
 
 
 # a JSON-able dict of recent builds; for use in the Project page, xhr_ updates,  and other places, as needed
@@ -1215,7 +1236,7 @@ def tasks_common(request, build_id, variant, task_anchor):
     context = { 'objectname': variant,
                 'object_search_display': object_search_display,
                 'filter_search_display': filter_search_display,
-                'title': title_variant,
+                'mainheading': title_variant,
                 'build': build,
                 'objects': task_objects,
                 'default_orderby' : orderby,
@@ -1862,11 +1883,21 @@ def image_information_dir(request, build_id, target_id, packagefile_id):
     return redirect(builds)
     # the context processor that supplies data used across all the pages
 
-
+# a context processor which runs on every request; this provides the
+# projects and non_cli_projects (i.e. projects created by the user)
+# variables referred to in templates, which used to determine the
+# visibility of UI elements like the "New build" button
 def managedcontextprocessor(request):
+    projects = Project.objects.all()
     ret = {
-        "projects": Project.objects.all(),
+        "projects": projects,
+        "non_cli_projects": projects.exclude(is_default=True),
         "DEBUG" : toastermain.settings.DEBUG,
+
+        # True if Toaster is in build mode, False otherwise
+        "BUILD_MODE": toastermain.settings.BUILD_MODE,
+
+        "CUSTOM_IMAGE" : toastermain.settings.CUSTOM_IMAGE,
         "TOASTER_BRANCH": toastermain.settings.TOASTER_BRANCH,
         "TOASTER_REVISION" : toastermain.settings.TOASTER_REVISION,
     }
@@ -1908,6 +1939,11 @@ if True:
 
         queryset = Build.objects.all()
 
+        # if in analysis mode, exclude builds for all projects except
+        # command line builds
+        if not toastermain.settings.BUILD_MODE:
+            queryset = queryset.exclude(project__is_default=False)
+
         redirect_page = resolve(request.path_info).url_name
 
         context, pagesize, orderby = _build_list_helper(request,
@@ -1982,7 +2018,7 @@ if True:
         build_info = _build_page_range(Paginator(queryset, pagesize), request.GET.get('page', 1))
 
         # build view-specific information; this is rendered specifically in the builds page, at the top of the page (i.e. Recent builds)
-        build_mru = Build.objects.order_by("-started_on")[:3]
+        build_mru = _get_latest_builds()[:3]
 
         # calculate the exact begining of local today and yesterday, append context
         context_date,today_begin,yesterday_begin = _add_daterange_context(queryset_all, request, {'started_on','completed_on'})
@@ -2101,35 +2137,38 @@ if True:
                     },
                     {'name': 'Errors', 'clclass': 'errors_no',
                      'qhelp': "How many errors were encountered during the build (if any)",
-                     'orderfield': _get_toggle_order(request, "errors_no", True),
-                     'ordericon':_get_toggle_order_icon(request, "errors_no"),
-                     'orderkey' : 'errors_no',
-                     'filter' : {'class' : 'errors_no',
-                                 'label': 'Show:',
-                                 'options' : [
-                                             ('Builds with errors', 'errors_no__gte:1', queryset_with_search.filter(errors_no__gte=1).count()),
-                                             ('Builds without errors', 'errors_no:0', queryset_with_search.filter(errors_no=0).count()),
-                                             ]
-                                }
+                     # Comment out sorting and filter until YOCTO #8131 is fixed
+                     #'orderfield': _get_toggle_order(request, "errors_no", True),
+                     #'ordericon':_get_toggle_order_icon(request, "errors_no"),
+                     #'orderkey' : 'errors_no',
+                     #'filter' : {'class' : 'errors_no',
+                     #            'label': 'Show:',
+                     #            'options' : [
+                     #                        ('Builds with errors', 'errors_no__gte:1', queryset_with_search.filter(errors_no__gte=1).count()),
+                     #                        ('Builds without errors', 'errors_no:0', queryset_with_search.filter(errors_no=0).count()),
+                     #                        ]
+                     #           }
                     },
                     {'name': 'Warnings', 'clclass': 'warnings_no',
                      'qhelp': "How many warnings were encountered during the build (if any)",
-                     'orderfield': _get_toggle_order(request, "warnings_no", True),
-                     'ordericon':_get_toggle_order_icon(request, "warnings_no"),
-                     'orderkey' : 'warnings_no',
-                     'filter' : {'class' : 'warnings_no',
-                                 'label': 'Show:',
-                                 'options' : [
-                                             ('Builds with warnings','warnings_no__gte:1', queryset_with_search.filter(warnings_no__gte=1).count()),
-                                             ('Builds without warnings','warnings_no:0', queryset_with_search.filter(warnings_no=0).count()),
-                                             ]
-                                }
+                     # Comment out sorting and filter until YOCTO #8131 is fixed
+                     #'orderfield': _get_toggle_order(request, "warnings_no", True),
+                     #'ordericon':_get_toggle_order_icon(request, "warnings_no"),
+                     #'orderkey' : 'warnings_no',
+                     #'filter' : {'class' : 'warnings_no',
+                     #            'label': 'Show:',
+                     #            'options' : [
+                     #                        ('Builds with warnings','warnings_no__gte:1', queryset_with_search.filter(warnings_no__gte=1).count()),
+                     #                        ('Builds without warnings','warnings_no:0', queryset_with_search.filter(warnings_no=0).count()),
+                     #                        ]
+                     #           }
                     },
                     {'name': 'Time', 'clclass': 'time', 'hidden' : 1,
                      'qhelp': "How long it took the build to finish",
-                     'orderfield': _get_toggle_order(request, "timespent", True),
-                     'ordericon':_get_toggle_order_icon(request, "timespent"),
-                     'orderkey' : 'timespent',
+                     # Comment out sorting until YOCTO #8131 is fixed
+                     #'orderfield': _get_toggle_order(request, "timespent", True),
+                     #'ordericon':_get_toggle_order_icon(request, "timespent"),
+                     #'orderkey' : 'timespent',
                     },
                     {'name': 'Image files', 'clclass': 'output',
                      'qhelp': "The root file system types produced by the build. You can find them in your <code>/build/tmp/deploy/images/</code> directory",
@@ -2313,21 +2352,33 @@ if True:
 
         return context
 
+    def xhr_response(fun):
+        """
+        Decorator for REST methods.
+        calls jsonfilter on the returned dictionary and returns result
+        as HttpResponse object of content_type application/json
+        """
+        @wraps(fun)
+        def wrapper(*args, **kwds):
+            return HttpResponse(jsonfilter(fun(*args, **kwds)),
+                                content_type="application/json")
+        return wrapper
+
     def jsunittests(request):
-      """ Provides a page for the js unit tests """
-      bbv = BitbakeVersion.objects.filter(branch="master").first()
-      release = Release.objects.filter(bitbake_version=bbv).first()
+        """ Provides a page for the js unit tests """
+        bbv = BitbakeVersion.objects.filter(branch="master").first()
+        release = Release.objects.filter(bitbake_version=bbv).first()
 
-      name = "_js_unit_test_prj_"
+        name = "_js_unit_test_prj_"
 
-      # If there is an existing project by this name delete it. We don't want
-      # Lots of duplicates cluttering up the projects.
-      Project.objects.filter(name=name).delete()
+        # If there is an existing project by this name delete it. We don't want
+        # Lots of duplicates cluttering up the projects.
+        Project.objects.filter(name=name).delete()
 
-      new_project = Project.objects.create_project(name=name, release=release)
+        new_project = Project.objects.create_project(name=name, release=release)
 
-      context = { 'project' : new_project }
-      return render(request, "js-unit-tests.html", context)
+        context = { 'project' : new_project }
+        return render(request, "js-unit-tests.html", context)
 
     from django.views.decorators.csrf import csrf_exempt
     @csrf_exempt
@@ -2582,7 +2633,155 @@ if True:
 
         return HttpResponse(jsonfilter({"error": "ok",}), content_type = "application/json")
 
+    @xhr_response
+    def xhr_customrecipe(request):
+        """
+        Custom image recipe REST API
+
+        Entry point: /xhr_customrecipe/
+        Method: POST
+
+        Args:
+            name: name of custom recipe to create
+            project: target project id of orm.models.Project
+            base: base recipe id of orm.models.Recipe
 
+        Returns:
+            {"error": "ok",
+             "url": <url of the created recipe>}
+            or
+            {"error": <error message>}
+        """
+        # check if request has all required parameters
+        for param in ('name', 'project', 'base'):
+            if param not in request.POST:
+                return {"error": "Missing parameter '%s'" % param}
+
+        # get project and baserecipe objects
+        params = {}
+        for name, model in [("project", Project),
+                            ("base", Recipe)]:
+            value = request.POST[name]
+            try:
+                params[name] = model.objects.get(id=value)
+            except model.DoesNotExist:
+                return {"error": "Invalid %s id %s" % (name, value)}
+
+        # create custom recipe
+        try:
+            recipe = CustomImageRecipe.objects.create(
+                         name=request.POST["name"],
+                         base_recipe=params["base"],
+                         project=params["project"])
+        except Error as err:
+            return {"error": "Can't create custom recipe: %s" % err}
+
+        # Find the package list from the last build of this recipe/target
+        build = Build.objects.filter(target__target=params['base'].name,
+                    project=params['project']).last()
+
+        if build:
+            # Copy in every package
+            # We don't want these packages to be linked to anything because
+            # that underlying data may change e.g. delete a build
+            for package in build.package_set.all():
+                # Create the duplicate
+                package.pk = None
+                package.save()
+                # Disassociate the package from the build
+                package.build = None
+                package.save()
+                recipe.packages.add(package)
+        else:
+            logger.warn("No packages found for this base recipe")
+
+        return {"error": "ok",
+                "url": reverse('customrecipe', args=(params['project'].pk,
+                                                     recipe.id))}
+
+    @xhr_response
+    def xhr_customrecipe_id(request, recipe_id):
+        """
+        Set of ReST API processors working with recipe id.
+
+        Entry point: /xhr_customrecipe/<recipe_id>
+
+        Methods:
+            GET - Get details of custom image recipe
+            DELETE - Delete custom image recipe
+
+        Returns:
+            GET:
+            {"error": "ok",
+             "info": dictionary of field name -> value pairs
+                     of the CustomImageRecipe model}
+            DELETE:
+            {"error": "ok"}
+            or
+            {"error": <error message>}
+        """
+        objects = CustomImageRecipe.objects.filter(id=recipe_id)
+        if not objects:
+            return {"error": "Custom recipe with id=%s "
+                             "not found" % recipe_id}
+        if request.method == 'GET':
+            values = CustomImageRecipe.objects.filter(id=recipe_id).values()
+            if values:
+                return {"error": "ok", "info": values[0]}
+            else:
+                return {"error": "Custom recipe with id=%s "
+                                 "not found" % recipe_id}
+            return {"error": "ok", "info": objects.values()[0]}
+        elif request.method == 'DELETE':
+            objects.delete()
+            return {"error": "ok"}
+        else:
+            return {"error": "Method %s is not supported" % request.method}
+
+    @xhr_response
+    def xhr_customrecipe_packages(request, recipe_id, package_id):
+        """
+        ReST API to add/remove packages to/from custom recipe.
+
+        Entry point: /xhr_customrecipe/<recipe_id>/packages/
+
+        Methods:
+            PUT - Add package to the recipe
+            DELETE - Delete package from the recipe
+
+        Returns:
+            {"error": "ok"}
+            or
+            {"error": <error message>}
+        """
+        try:
+            recipe = CustomImageRecipe.objects.get(id=recipe_id)
+        except CustomImageRecipe.DoesNotExist:
+            return {"error": "Custom recipe with id=%s "
+                             "not found" % recipe_id}
+
+        if request.method == 'GET' and not package_id:
+            return {"error": "ok",
+                    "packages": list(recipe.packages.values_list('id'))}
+
+        try:
+            package = Package.objects.get(id=package_id)
+        except Package.DoesNotExist:
+            return {"error": "Package with id=%s "
+                             "not found" % package_id}
+
+        if request.method == 'PUT':
+            recipe.packages.add(package)
+            return {"error": "ok"}
+        elif request.method == 'DELETE':
+            if package in recipe.packages.all():
+                recipe.packages.remove(package)
+                return {"error": "ok"}
+            else:
+                return {"error": "Package '%s' is not in the recipe '%s'" % \
+                                 (package.name, recipe.name)}
+        else:
+            return {"error": "Method %s is not supported" % request.method}
 
     def importlayer(request, pid):
         template = "importlayer.html"
@@ -2596,12 +2795,16 @@ if True:
         project = Project.objects.get(pk=pid)
         layer_version = Layer_Version.objects.get(pk=layerid)
 
-        context = { 'project' : project,
-                   'layerversion' : layer_version,
-                   'layerdeps' : { "list": [
-                     [{"id": y.id, "name": y.layer.name} for y in x.depends_on.get_equivalents_wpriority(project)][0] for x in layer_version.dependencies.all()]},
-                   'projectlayers': map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=project))
-                  }
+        context = {'project' : project,
+            'layerversion' : layer_version,
+            'layerdeps' : {"list": [{"id": dep.id,
+                "name": dep.layer.name,
+                "layerdetailurl": reverse('layerdetails', args=(pid, dep.pk)),
+                "vcs_url": dep.layer.vcs_url,
+                "vcs_reference": dep.get_vcs_reference()} \
+                for dep in layer_version.get_alldeps(project.id)]},
+            'projectlayers': map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=project))
+        }
 
         return context
 
@@ -2628,6 +2831,15 @@ if True:
 
         return(vars_managed,sorted(vars_fstypes),vars_blacklist)
 
+    def customrecipe(request, pid, recipe_id):
+        project = Project.objects.get(pk=pid)
+        context = {'project' : project,
+                   'projectlayers': [],
+                   'recipe' : CustomImageRecipe.objects.get(pk=recipe_id)
+                  }
+
+        return render(request, "customrecipe.html", context)
+
     @_template_renderer("projectconf.html")
     def projectconf(request, pid):
 
@@ -2733,6 +2945,9 @@ if True:
         context['project'] = prj
         _set_parameters_values(pagesize, orderby, request)
 
+        # add the most recent builds for this project
+        context['mru'] = _get_latest_builds(prj)
+
         return context
 
 
@@ -2797,7 +3012,7 @@ if True:
             if file_name is None:
                 raise Exception("Could not handle artifact %s id %s" % (artifact_type, artifact_id))
             else:
-                content_type = b.buildrequest.environment.get_artifact_type(file_name)
+                content_type = MimeTypeFinder.get_mimetype(file_name)
                 fsock = b.buildrequest.environment.get_artifact(file_name)
                 file_name = os.path.basename(file_name) # we assume that the build environment system has the same path conventions as host
 
@@ -2833,6 +3048,10 @@ if True:
         queryset_all = queryset_all.filter(Q(is_default=False) |
                                            q_default_with_builds)
 
+        # if in BUILD_MODE, exclude everything but the command line builds project
+        if not toastermain.settings.BUILD_MODE:
+            queryset_all = queryset_all.exclude(is_default=False)
+
         # boilerplate code that takes a request for an object type and returns a queryset
         # for that object type. copypasta for all needed table searches
         (filter_string, search_term, ordering_string) = _search_tuple(request, Project)
diff --git a/bitbake/lib/toaster/toastergui/widgets.py b/bitbake/lib/toaster/toastergui/widgets.py
index eb2914d..6bb3889 100644
--- a/bitbake/lib/toaster/toastergui/widgets.py
+++ b/bitbake/lib/toaster/toastergui/widgets.py
@@ -20,6 +20,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from django.views.generic import View, TemplateView
+from django.views.decorators.cache import cache_control
 from django.shortcuts import HttpResponse
 from django.http import HttpResponseBadRequest
 from django.core import serializers
@@ -38,6 +39,9 @@ import collections
 import operator
 import re
 
+import logging
+logger = logging.getLogger("toaster")
+
 from toastergui.views import objtojson
 
 class ToasterTable(TemplateView):
@@ -45,7 +49,7 @@ class ToasterTable(TemplateView):
         super(ToasterTable, self).__init__()
         if 'template_name' in kwargs:
             self.template_name = kwargs['template_name']
-        self.title = None
+        self.title = "Table"
         self.queryset = None
         self.columns = []
         self.filters = {}
@@ -61,6 +65,18 @@ class ToasterTable(TemplateView):
                         orderable=True,
                         field_name="id")
 
+        # prevent HTTP caching of table data
+    @cache_control(must_revalidate=True, max_age=0, no_store=True, no_cache=True)
+    def dispatch(self, *args, **kwargs):
+        return super(ToasterTable, self).dispatch(*args, **kwargs)
+
+    def get_context_data(self, **kwargs):
+        context = super(ToasterTable, self).get_context_data(**kwargs)
+        context['title'] = self.title
+        context['table_name'] =  type(self).__name__.lower()
+
+        return context
+
 
     def get(self, request, *args, **kwargs):
         if request.GET.get('format', None) == 'json':
@@ -219,7 +235,8 @@ class ToasterTable(TemplateView):
         """Creates a query based on the model's search_allowed_fields"""
 
         if not hasattr(self.queryset.model, 'search_allowed_fields'):
-            raise Exception("Err Search fields aren't defined in the model")
+            raise Exception("Search fields aren't defined in the model %s"
+                           % self.queryset.model)
 
         search_queries = []
         for st in search_term.split(" "):
@@ -242,11 +259,14 @@ class ToasterTable(TemplateView):
         search = request.GET.get("search", None)
         filters = request.GET.get("filter", None)
         orderby = request.GET.get("orderby", None)
+        nocache = request.GET.get("nocache", None)
 
         # Make a unique cache name
         cache_name = self.__class__.__name__
 
         for key, val in request.GET.iteritems():
+            if key == 'nocache':
+                continue
             cache_name = cache_name + str(key) + str(val)
 
         for key, val in kwargs.iteritems():
@@ -254,9 +274,14 @@ class ToasterTable(TemplateView):
 
         # No special chars allowed in the cache name apart from dash
         cache_name = re.sub(r'[^A-Za-z0-9-]', "", cache_name)
+
+        if nocache:
+            cache.delete(cache_name)
+
         data = cache.get(cache_name)
 
         if data:
+            logger.debug("Got cache data for table '%s'" % self.title)
             return data
 
         self.setup_columns(**kwargs)
@@ -330,33 +355,6 @@ class ToasterTable(TemplateView):
         return data
 
 
-class ToasterTemplateView(TemplateView):
-    # renders a instance in a template, or returns the context as json
-    # the class-equivalent of the _template_renderer decorator for views
-
-    def __init__(self, *args, **kwargs):
-        super(ToasterTemplateView, self).__init__(*args, **kwargs)
-        self.context_entries = []
-
-    def get(self, *args, **kwargs):
-        if self.request.GET.get('format', None) == 'json':
-            from django.core.urlresolvers import reverse
-            from django.shortcuts import HttpResponse
-            from views import objtojson
-            from toastergui.templatetags.projecttags import json as jsonfilter
-
-            context = self.get_context_data(**kwargs)
-
-            for x in context.keys():
-                if x not in self.context_entries:
-                    del context[x]
-
-            context["error"] = "ok"
-
-            return HttpResponse(jsonfilter(context,  default=objtojson ),
-                            content_type = "application/json; charset=utf-8")
-
-        return super(ToasterTemplateView, self).get(*args, **kwargs)
 
 class ToasterTypeAhead(View):
     """ A typeahead mechanism to support the front end typeahead widgets """
diff --git a/bitbake/lib/toaster/toastermain/settings.py b/bitbake/lib/toaster/toastermain/settings.py
index b149a5e..b28ddb2 100644
--- a/bitbake/lib/toaster/toastermain/settings.py
+++ b/bitbake/lib/toaster/toastermain/settings.py
@@ -23,6 +23,11 @@
 
 import os, re
 
+# Temporary toggle for Image customisation
+CUSTOM_IMAGE = False
+if os.environ.get("CUSTOM_IMAGE", None) is not None:
+    CUSTOM_IMAGE = True
+
 DEBUG = True
 TEMPLATE_DEBUG = DEBUG
 
@@ -87,11 +92,9 @@ if 'DATABASE_URL' in os.environ:
     else:
         raise Exception("FIXME: Please implement missing database url schema for url: %s" % dburl)
 
-
+BUILD_MODE = False
 if 'TOASTER_MANAGED' in os.environ and os.environ['TOASTER_MANAGED'] == "1":
-    MANAGED = True
-else:
-    MANAGED = False
+    BUILD_MODE = True
 
 # Allows current database settings to be exported as a DATABASE_URL environment variable value
 
diff --git a/bitbake/lib/toaster/toastermain/urls.py b/bitbake/lib/toaster/toastermain/urls.py
index 521588a..6c4a953 100644
--- a/bitbake/lib/toaster/toastermain/urls.py
+++ b/bitbake/lib/toaster/toastermain/urls.py
@@ -60,7 +60,7 @@ if toastermain.settings.DEBUG_PANEL_ENABLED:
     #logger.info("Enabled django_toolbar extension")
 
 
-if toastermain.settings.MANAGED:
+if toastermain.settings.BUILD_MODE:
     urlpatterns = [
         # Uncomment the next line to enable the admin:
         url(r'^admin/', include(admin.site.urls)),
diff --git a/bitbake/toaster-requirements.txt b/bitbake/toaster-requirements.txt
index c4a2221..1d7d21b 100644
--- a/bitbake/toaster-requirements.txt
+++ b/bitbake/toaster-requirements.txt
@@ -2,5 +2,4 @@ Django==1.6
 South==0.8.4
 argparse==1.2.1
 wsgiref==0.1.2
-filemagic==1.6
 beautifulsoup4>=4.4.0
diff --git a/documentation/Makefile b/documentation/Makefile
index 9197a40..99adea2 100644
--- a/documentation/Makefile
+++ b/documentation/Makefile
@@ -333,7 +333,7 @@ ALLPREQ = html tarball
 TARFILES = toaster-manual.html toaster-manual-style.css \
 	   figures/toaster-title.png figures/simple-configuration.png \
 	   figures/hosted-service.png
-MANUALS = $(DOC)/$(DOC).html $(DOC)/$(DOC).pdf
+MANUALS = $(DOC)/$(DOC).html
 FIGURES = figures
 STYLESHEET = $(DOC)/*.css
 endif
diff --git a/documentation/adt-manual/adt-manual.xml b/documentation/adt-manual/adt-manual.xml
index 6ce62c9..67b330a 100644
--- a/documentation/adt-manual/adt-manual.xml
+++ b/documentation/adt-manual/adt-manual.xml
@@ -87,9 +87,9 @@
                 <revremark>Released with the Yocto Project 1.8 Release.</revremark>
             </revision>
             <revision>
-                <revnumber>1.9</revnumber>
+                <revnumber>2.0</revnumber>
                 <date>October 2015</date>
-                <revremark>Released with the Yocto Project 1.9 Release.</revremark>
+                <revremark>Released with the Yocto Project 2.0 Release.</revremark>
             </revision>
        </revhistory>
 
diff --git a/documentation/adt-manual/adt-package.xml b/documentation/adt-manual/adt-package.xml
index f3ffa06..68eee9b 100644
--- a/documentation/adt-manual/adt-package.xml
+++ b/documentation/adt-manual/adt-package.xml
@@ -27,7 +27,7 @@
                 information about OPKG.</para></listitem>
             <listitem><para><emphasis>RPM:</emphasis> A more widely known PMS intended for GNU/Linux
                 distributions.
-                This PMS works with files packaged in an <filename>.rms</filename> format.
+                This PMS works with files packaged in an <filename>.rpm</filename> format.
                 The build system currently installs through this PMS by default.
                 See <ulink url='http://en.wikipedia.org/wiki/RPM_Package_Manager'></ulink>
                 for more information about RPM.</para></listitem>
diff --git a/documentation/adt-manual/adt-prepare.xml b/documentation/adt-manual/adt-prepare.xml
index 01f569f..65df1d0 100644
--- a/documentation/adt-manual/adt-prepare.xml
+++ b/documentation/adt-manual/adt-prepare.xml
@@ -364,6 +364,10 @@
                     Comments within the <filename>local.conf</filename> file
                     list the values you can use for the
                     <filename>MACHINE</filename> variable.
+                    If you do not change the <filename>MACHINE</filename>
+                    variable, the OpenEmbedded build system uses
+                    <filename>qemux86</filename> as the default target
+                    machine when building the cross-toolchain.
                     <note>
                         You can populate the Build Directory with the
                         cross-toolchains for more than a single architecture.
@@ -371,6 +375,17 @@
                         variable in the <filename>local.conf</filename> file and
                         re-run the <filename>bitbake</filename> command.
                     </note></para></listitem>
+                <listitem><para><emphasis>Make Sure Your Layers are Enabled:</emphasis>
+                    Examine the <filename>conf/bblayers.conf</filename> file
+                    and make sure that you have enabled all the compatible
+                    layers for your target machine.
+                    The OpenEmbedded build system needs to be aware of each
+                    layer you want included when building images and
+                    cross-toolchains.
+                    For information on how to enable a layer, see the
+                    "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-your-layer'>Enabling Your Layer</ulink>"
+                    section in the Yocto Project Development Manual.
+                    </para></listitem>
                 <listitem><para><emphasis>Generate the Cross-Toolchain:</emphasis>
                     Run <filename>bitbake meta-ide-support</filename> to
                     complete the cross-toolchain generation.
diff --git a/documentation/bsp-guide/bsp-guide.xml b/documentation/bsp-guide/bsp-guide.xml
index 5477ca8..d9bcc3f 100644
--- a/documentation/bsp-guide/bsp-guide.xml
+++ b/documentation/bsp-guide/bsp-guide.xml
@@ -99,9 +99,9 @@
                 <revremark>Released with the Yocto Project 1.8 Release.</revremark>
             </revision>
             <revision>
-                <revnumber>1.9</revnumber>
+                <revnumber>2.0</revnumber>
                 <date>October 2015</date>
-                <revremark>Released with the Yocto Project 1.9 Release.</revremark>
+                <revremark>Released with the Yocto Project 2.0 Release.</revremark>
             </revision>
         </revhistory>
 
@@ -113,7 +113,7 @@
     <legalnotice>
       <para>
         Permission is granted to copy, distribute and/or modify this document under
-        the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-nc-sa/2.0/uk/">Creative Commons Attribution-Non-Commercial-Share Alike 2.0 UK: England & Wales</ulink> as published by Creative Commons.
+        the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-nc-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England & Wales</ulink> as published by Creative Commons.
       </para>
       <note>
           For the latest version of this manual associated with this
diff --git a/documentation/dev-manual/dev-manual-common-tasks.xml b/documentation/dev-manual/dev-manual-common-tasks.xml
index e927a89..f0836e8 100644
--- a/documentation/dev-manual/dev-manual-common-tasks.xml
+++ b/documentation/dev-manual/dev-manual-common-tasks.xml
@@ -2249,6 +2249,19 @@
                 Typically, setting these options is accomplished by running a
                 configure script with some options, or by modifying a build
                 configuration file.
+                <note>
+                    As of Yocto Project Release 7.1, some of the core recipes
+                    that package binary configuration scripts now disable the
+                    scripts due to the scripts previously requiring error-prone
+                    path substitution.
+                    The OpenEmbedded build system uses
+                    <filename>pkg-config</filename> now, which is much more
+                    robust.
+                    You can find a list of the <filename>*-config</filename>
+                    scripts that are disabled list in the
+                    "<ulink url='&YOCTO_DOCS_REF_URL;#migration-1.7-binary-configuration-scripts-disabled'>Binary Configuration Scripts Disabled</ulink>"
+                    section in the Yocto Project Reference Manual.
+                </note>
             </para>
 
             <para>
@@ -2364,7 +2377,16 @@
             <para>
                 However, if the compile step fails, you need to diagnose the
                 failure.
-                Here are some common issues that cause failures:
+                Here are some common issues that cause failures.
+                <note>
+                    For cases where improper paths are detected for
+                    configuration files or for when libraries/headers cannot
+                    be found, be sure you are using the more robust
+                    <filename>pkg-config</filename>.
+                    See the note in section
+                    "<link linkend='new-recipe-configuring-the-recipe'>Configuring the Recipe</link>"
+                    for additional information.
+                </note>
                 <itemizedlist>
                     <listitem><para><emphasis>Parallel build failures:</emphasis>
                         These failures manifest themselves as intermittent
@@ -2708,23 +2730,20 @@
                         is configured, it might be important to mark the
                         packages produced as being specific to a particular
                         machine, or to mark them as not being specific to
-                        a particular machine or architecture at all.
-                        By default, packages produced for the target are
-                        marked as being specific to the architecture of the
-                        target machine because that is usually the desired
-                        result.
-                        However, if the recipe configures the software to be
-                        built specific to the target machine (e.g. the
+                        a particular machine or architecture at all.</para>
+                        <para>By default, packages apply to any machine with the
+                        same architecture as the target machine.
+                        When a recipe produces packages that are
+                        machine-specific (e.g. the
                         <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
                         value is passed into the configure script or a patch
-                        is applied only for a particular machine), then you
-                        should mark the packages produced as being
-                        machine-specific by adding the following to the
+                        is applied only for a particular machine), you should
+                        mark them as such by adding the following to the
                         recipe:
                         <literallayout class='monospaced'>
      PACKAGE_ARCH = "${MACHINE_ARCH}"
-                        </literallayout>
-                        On the other hand, if the recipe produces packages
+                        </literallayout></para>
+                        <para>On the other hand, if the recipe produces packages
                         that do not contain anything specific to the target
                         machine or architecture at all (e.g. recipes
                         that simply package script files or configuration
@@ -3554,7 +3573,7 @@
      require conf/multilib.conf
      MULTILIBS = "multilib:lib32"
      DEFAULTTUNE_virtclass-multilib-lib32 = "x86"
-     IMAGE_INSTALL = "lib32-connman"
+     IMAGE_INSTALL_append = " lib32-glib-2.0"
                     </literallayout>
                     This example enables an
                     additional library named <filename>lib32</filename> alongside the
@@ -3565,7 +3584,7 @@
                 </para>
 
                 <para>
-                    The example then includes <filename>lib32-connman</filename>
+                    The example then includes <filename>lib32-glib-2.0</filename>
                     in all the images, which illustrates one method of including a
                     multiple library dependency.
                     You can use a normal image build to include this dependency,
@@ -3575,7 +3594,7 @@
                     </literallayout>
                     You can also build Multilib packages specifically with a command like this:
                     <literallayout class='monospaced'>
-     $ bitbake lib32-connman
+     $ bitbake lib32-glib-2.0
                     </literallayout>
                 </para>
             </section>
@@ -4307,18 +4326,18 @@
 	            A source plugin is created as a subclass of
 	            <filename>SourcePlugin</filename>.
                 The plugin file containing it is added to
-	            <filename>scripts/lib/mic/plugins/source/</filename> to
+	            <filename>scripts/lib/wic/plugins/source/</filename> to
 	            make the plugin implementation available to the
 	            <filename>wic</filename> implementation.
                 For more information, see
-	            <filename>scripts/lib/mic/pluginbase.py</filename>.
+	            <filename>scripts/lib/wic/pluginbase.py</filename>.
             </para>
 
             <para>
 	            Source plugins can also be implemented and added by
 	            external layers.
                 As such, any plugins found in a
-	            <filename>scripts/lib/mic/plugins/source/</filename>
+	            <filename>scripts/lib/wic/plugins/source/</filename>
 	            directory in an external layer are also made
 	            available.
             </para>
@@ -4539,9 +4558,17 @@
                             option or the equivalent rootfs derived from the
 			                <filename>-e</filename> command-line
 			                option.
-                            Exactly what those contents and
-			                filesystem type end up being are dependent
-			                on the given plugin implementation.
+                            Exactly what those contents and filesystem type end
+                            up being are dependent on the given plugin
+                            implementation.
+                            </para>
+                            <para>If you do not use the
+                            <filename>--source</filename> option, the
+                            <filename>wic</filename> command creates an empty
+                            partition.
+                            Consequently, you must use the
+                            <filename>--size</filename> option to specify the
+                            size of the empty partition.
                             </para></listitem>
                         <listitem><para><emphasis><filename>--ondisk</filename> or <filename>--ondrive</filename>:</emphasis>
                             Forces the partition to be created on a particular
@@ -4585,6 +4612,49 @@
                             This option is a <filename>wic</filename>-specific
                             option that says to start a partition on an
                             x KBytes boundary.</para></listitem>
+                        <listitem><para><emphasis><filename>--no-table</filename>:</emphasis>
+                            This option is a <filename>wic</filename>-specific
+                            option.
+                            Using the option reserves space for the partition
+                            and causes it to become populated.
+                            However, the partition is not added to the
+                            partition table.
+                            </para></listitem>
+                        <listitem><para><emphasis><filename>--extra-space</filename>:</emphasis>
+                            This option is a <filename>wic</filename>-specific
+                            option that adds extra space after the space
+                            filled by the content of the partition.
+                            The final size can go beyond the size specified
+                            by the <filename>--size</filename> option.
+                            The default value is 10 Mbytes.
+                            </para></listitem>
+                        <listitem><para><emphasis><filename>--overhead-factor</filename>:</emphasis>
+                            This option is a <filename>wic</filename>-specific
+                            option that multiplies the size of the partition by
+                            the option's value.
+                            You must supply a value greater than or equal to
+                            "1".
+                            The default value is "1.3".
+                            </para></listitem>
+                        <listitem><para><emphasis><filename>--part-type</filename>:</emphasis>
+                            This option is a <filename>wic</filename>-specific
+                            option that specifies the partition type globally
+                            unique identifier (GUID) for GPT partitions.
+                            You can find the list of partition type GUIDs
+                            at
+                            <ulink url='http://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs'></ulink>.
+                            </para></listitem>
+                        <listitem><para><emphasis><filename>--use-uuid</filename>:</emphasis>
+                            This option is a <filename>wic</filename>-specific
+                            option that causes <filename>wic</filename> to
+                            generate a random GUID for the partition.
+                            The generated identifier is used in the bootloader
+                            configuration to specify the root partition.
+                            </para></listitem>
+                        <listitem><para><emphasis><filename>--uuid</filename>:</emphasis>
+                            This option is a <filename>wic</filename>-specific
+                            option that specifies the partition UUID.
+                            </para></listitem>
                     </itemizedlist>
                 </para>
             </section>
@@ -8166,6 +8236,29 @@
                             must accept incoming connections from 192.168.7.0/24,
                             which is the default IP range used for tap devices
                             by <filename>runqemu</filename>.</para></listitem>
+                        <listitem><para><emphasis>Be sure your host has the
+                            correct packages installed:</emphasis>
+                            Depending your host's distribution, you need
+                            to have the following packages installed:
+                            <itemizedlist>
+                                <listitem><para>Ubuntu and Debian:
+                                    <filename>sysstat</filename> and
+                                    <filename>iproute2</filename>
+                                    </para></listitem>
+                                <listitem><para>OpenSUSE:
+                                    <filename>sysstat</filename> and
+                                    <filename>iproute2</filename>
+                                    </para></listitem>
+                                <listitem><para>Fedora:
+                                    <filename>sysstat</filename> and
+                                    <filename>iproute</filename>
+                                    </para></listitem>
+                                <listitem><para>CentOS:
+                                    <filename>sysstat</filename> and
+                                    <filename>iproute</filename>
+                                    </para></listitem>
+                            </itemizedlist>
+                        </para></listitem>
                     </itemizedlist>
                 </para>
 
@@ -8563,7 +8656,7 @@
                         </literallayout></para></listitem>
                     <listitem><para><emphasis>Manually running tests:</emphasis>
                         To manually run the tests, first globally inherit the
-                        <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-testimage'><filename>testimage</filename></ulink>
+                        <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-testimage*'><filename>testimage</filename></ulink>
                         class by editing your <filename>local.conf</filename>
                         file:
                         <literallayout class='monospaced'>
diff --git a/documentation/dev-manual/dev-manual-model.xml b/documentation/dev-manual/dev-manual-model.xml
index 6e0ded2..6e42c7b 100644
--- a/documentation/dev-manual/dev-manual-model.xml
+++ b/documentation/dev-manual/dev-manual-model.xml
@@ -939,14 +939,14 @@
                                 For example, if you are using Luna, do the
                                 following:
                                 <literallayout class='monospaced'>
-     $ git checkout luna/yocto-1.8
+     $ git checkout luna/yocto-&DISTRO;
                                 </literallayout>
                                 This puts you in a detached HEAD state, which
                                 is fine since you are only going to be building
                                 and not developing.
                                 <note>
                                     If you are building kepler, checkout the
-                                    <filename>kepler/yocto-1.8</filename>
+                                    <filename>kepler/yocto-&DISTRO;</filename>
                                     branch.
                                 </note>
                                 </para></listitem>
@@ -975,13 +975,13 @@
                                 Be sure to provide the tag name, documentation
                                 branch, and a release name.
                                 Here is an example that uses the
-                                <filename>luna/yocto-1.8</filename> tag, the
+                                <filename>luna/yocto-&DISTRO;</filename> tag, the
                                 <filename>master</filename> documentation
                                 branch, and
                                 <filename>&DISTRO_NAME;</filename> for the
                                 release name:
                                 <literallayout class='monospaced'>
-     $ ECLIPSE_HOME=/home/scottrif/eclipse-poky/scripts/eclipse ./build.sh luna/yocto-1.8 master &DISTRO_NAME; 2>&1 | tee -a build.log
+     $ ECLIPSE_HOME=/home/scottrif/eclipse-poky/scripts/eclipse ./build.sh luna/yocto-&DISTRO; master &DISTRO_NAME; 2>&1 | tee -a build.log
                                 </literallayout>
                                 After running the script, the file
                                 <filename>org.yocto.sdk-</filename><replaceable>release</replaceable><filename>-</filename><replaceable>date</replaceable><filename>-archive.zip</filename>
@@ -1340,6 +1340,40 @@
                 "Project" menu.
                 The console should update and you can note the cross-compiler
                 you are using.
+                <note>
+                    When building "Yocto Project ADT Autotools" projects, the Eclipse
+                    IDE might display error messages for Functions/Symbols/Types
+                    that cannot be "resolved", even when the related include file
+                    is listed at the project navigator and when the project is
+                    able to build.
+                    For these cases only, it is recommended to add a new linked
+                    folder to the appropriate sysroot.
+                    Use these steps to add the linked folder:
+                    <orderedlist>
+                        <listitem><para>
+                            Select the project.
+                            </para></listitem>
+                        <listitem><para>
+                            Select "Folder" from the
+                            <filename>File > New</filename> menu.
+                            </para></listitem>
+                        <listitem><para>
+                            In the "New Folder" Dialog, select "Link to alternate
+                            location (linked folder)".
+                            </para></listitem>
+                        <listitem><para>
+                            Click "Browse" to navigate to the include folder inside
+                            the same sysroot location selected in the Yocto Project
+                            configuration preferences.
+                            </para></listitem>
+                        <listitem><para>
+                            Click "OK".
+                            </para></listitem>
+                        <listitem><para>
+                            Click "Finish" to save the linked folder.
+                            </para></listitem>
+                    </orderedlist>
+                </note>
             </para>
         </section>
 
@@ -2183,7 +2217,7 @@
                 </literallayout>
                 <note>
                     For complete syntax, use the
-                    <filename>devtool update-recipe --help</filename> command.
+                    <filename>devtool build --help</filename> command.
                 </note>
                 Building your software using <filename>devtool build</filename>
                 is identical to using BitBake to build the software.
diff --git a/documentation/dev-manual/dev-manual-qemu.xml b/documentation/dev-manual/dev-manual-qemu.xml
index ccc915f..903028f 100644
--- a/documentation/dev-manual/dev-manual-qemu.xml
+++ b/documentation/dev-manual/dev-manual-qemu.xml
@@ -197,14 +197,14 @@
                     but also is not as easy to use or comprehensive
                     as the default.
                     </para></listitem>
-                <listitem><para><filename>kvm</filename>:
+                <listitem><para id='kvm-cond'><filename>kvm</filename>:
                     Enables KVM when running "qemux86" or "qemux86-64"
                     QEMU architectures.
                     For KVM to work, all the following conditions must be met:
                     <itemizedlist>
                         <listitem><para>
                             Your <replaceable>MACHINE</replaceable> must be either
-                            "qemux86" or "qemux86-64".
+qemux86" or "qemux86-64".
                             </para></listitem>
                         <listitem><para>
                             Your build host has to have the KVM modules
@@ -212,13 +212,25 @@
                             <filename>/dev/kvm</filename>.
                             </para></listitem>
                         <listitem><para>
-                            Your build host has to have virtio net device, which
-                            are <filename>/dev/vhost-net</filename>.
-                            </para></listitem>
-                        <listitem><para>
                             The  build host <filename>/dev/kvm</filename>
                             directory has to be both writable and readable.
                             </para></listitem>
+                    </itemizedlist>
+                    </para></listitem>
+                <listitem><para><filename>kvm-vhost</filename>:
+                    Enables KVM with VHOST support when running "qemux86" or "qemux86-64"
+                    QEMU architectures.
+                    For KVM with VHOST to work, the following conditions must
+                    be met:
+                    <itemizedlist>
+                        <listitem><para>
+                            <link linkend='kvm-cond'>kvm</link> option
+                            conditions must be met.
+                            </para></listitem>
+                        <listitem><para>
+                            Your build host has to have virtio net device, which
+                            are <filename>/dev/vhost-net</filename>.
+                            </para></listitem>
                         <listitem><para>
                             The build host <filename>/dev/vhost-net</filename>
                             directory has to be either readable or writable
diff --git a/documentation/dev-manual/dev-manual.xml b/documentation/dev-manual/dev-manual.xml
index 608d3a9..3ddd01f 100644
--- a/documentation/dev-manual/dev-manual.xml
+++ b/documentation/dev-manual/dev-manual.xml
@@ -26,7 +26,7 @@
                 <affiliation>
                     <orgname>Intel Corporation</orgname>
                 </affiliation>
-                <email>scott.m.rifenbark at intel.com</email>
+                <email>srifenbark at gmail.com</email>
             </author>
         </authorgroup>
 
@@ -77,9 +77,9 @@
                 <revremark>Released with the Yocto Project 1.8 Release.</revremark>
             </revision>
             <revision>
-                <revnumber>1.9</revnumber>
+                <revnumber>2.0</revnumber>
                 <date>October 2015</date>
-                <revremark>Released with the Yocto Project 1.9 Release.</revremark>
+                <revremark>Released with the Yocto Project 2.0 Release.</revremark>
             </revision>
         </revhistory>
 
diff --git a/documentation/kernel-dev/kernel-dev-common.xml b/documentation/kernel-dev/kernel-dev-common.xml
index 27c82ce..ab7f80f 100644
--- a/documentation/kernel-dev/kernel-dev-common.xml
+++ b/documentation/kernel-dev/kernel-dev-common.xml
@@ -389,6 +389,10 @@
                 You can use the entire <filename>.config</filename> file as the
                 <filename>defconfig</filename> file as described in the
                 "<link linkend='changing-the-configuration'>Changing the Configuration</link>" section.
+                For more information on the <filename>.config</filename> file,
+                see the
+                "<ulink url='&YOCTO_DOCS_DEV_URL;#using-menuconfig'>Using <filename>menuconfig</filename></ulink>"
+                section in the Yocto Project Development Manual.
             </para>
 
             <para>
diff --git a/documentation/kernel-dev/kernel-dev.xml b/documentation/kernel-dev/kernel-dev.xml
index e3df2cc..38850fa 100644
--- a/documentation/kernel-dev/kernel-dev.xml
+++ b/documentation/kernel-dev/kernel-dev.xml
@@ -62,9 +62,9 @@
                 <revremark>Released with the Yocto Project 1.8 Release.</revremark>
             </revision>
             <revision>
-                <revnumber>1.9</revnumber>
+                <revnumber>2.0</revnumber>
                 <date>October 2015</date>
-                <revremark>Released with the Yocto Project 1.9 Release.</revremark>
+                <revremark>Released with the Yocto Project 2.0 Release.</revremark>
             </revision>
         </revhistory>
 
diff --git a/documentation/mega-manual/figures/add-variable.png b/documentation/mega-manual/figures/add-variable.png
new file mode 100644
index 0000000000000000000000000000000000000000..6bdcca705afe530a2c2b72c4f0d8050354c23410
GIT binary patch
literal 110712
zcmd?Qhg(zG+CCh_G9tyX3<v_20R*H-ktU#`p!D9GBE3p)Avg{&h=9@}AOu8OXd+E&
zP=wF}1PDDq=mA22B#@Bgw{_lgzB%uE{)3NeU1VK5D|@f~to5{e-A}xsz7_`?FB=F1
z;&}Y%fiVbl0_d{t{Bjcb at F_x%f<RY5k00DK4Sl~kON%(an#p|5h^E_+<IEZ&KE$O-
zxHr2$nf7i7nwpK`Ylyfuxm`bKJNuO2vlaX@>-fxB_IyRTr1QwrvEQ%0J1+8-<<uWv
zd2AeC{&Mm)>Xg+f&u2Z1NC=Pn%^qI<NX- at pOpt@(xZ6sjtL8Q8&TE&{lztRy8Y0YW
zF{;=PU57C&{J~|3jCFOQ2ptXCCEWf-HRl6*iw4wU<`UNXPg2Egp!XfNZ@}z9^g*!%
zhhb8MP!e+&+3c<){z&j{cwtr5&~kvcZzJAeoAV=tTKwM{LXc{3JetdcIXO<bvX3Zz
zbFqA%({78ke&m!}L1Hokn8|->>M)XPHp{`4eP*5 at Q}6J$j?smO|8BFe^gFC?!goB-
zGc)hsdqhReF=P*2i;-w?@S!apMLM#@S^0#iw-y%oHr)9{S6 at T^w`c4L8u)iUy+uRm
zrnl%8X+xr at yN%<BnclkA`$&X2o!kHQd6p}y%$JkQqWk7wW?0I}EH?w`@yHLuB~e5y
z;w`?aexn+4n0%^|d5V63R;T~(28rrJKD`yw at q~kub7N&7dpEpwRC#nDTR~n?@djFs
zn_spVmkGSc9`h?+9nao=s<4P2)p*-C-7|m;dh_ANtN&>NquPH$G&D5WPQDC2FzgOV
zuc*D>fEdBqRWVjqS1+=kl$VqH=%@G|<JImZ3o2c#(koM1t{Wmrg!KC6<8;z|!<C&t
z2YEk4`QH`@H4BmB9h;bVckD$pf2c&m%8Ie8<Z{+z8soqpgP5zEVX(f4?&|8gkf<3T
zz<dDeK4dzQ5u(%Q*=Aq#1eGz9a?1|EgD0c5D$TJZKAG!pA96gn_Uk}@zuOc6Gn!`b
z)$q~VM<4U}c at j09vx;0?z5(yS7IPo?FRGrLlsL^YpUgNc2Cf7vRj6OSeUUvzPDx1!
zp<a^dXIWEIb0WtuCO5iI^~o94d}zSYf7vUDP-?Pf!K(+?nnDP3pT|ws6t^kXTMVb_
zciXeg#gmhhX=kO;!DljAx(^*9>At;V-;H at Aw@6OJyIXzAQHyD~J=U*zjQukXZ}9;(
zq#Ve>^Ij(~#&=_n%NGMv-8TcT>~Zzgg_Wt%I;%FS7*xE!dQFJYM20=LRLHs(lM18G
zbWD at D9jJWtNp3_DDr!MIDg76a9i&cvnetMjBVn9=fMV)Es+WHSlM@`$J@?Fi+!BvM
z>?=@b#=UtjU9#I{v|!;w=j$h4{U2?Bv?A*=0Lg97G}dh6@{I9=IVv)GCc|!Wc>f+*
z(3y%;^dqTQ2J|9GIbHqikOQ5hur$?TmK=$v$qYQ|T4wC@;)A2fQPY=z-5#T7BGqD9
ztezMbrBC{ff|T+p_)1t8yJv;(LJ=dbYEb&&p}9ZkV7(%Wz9VAr at eV`8y$`b8haK8(
zJvB~m?*bI2Q!r7}B+8!feE9$Fc_w`fvbfPS-QYVt-EF!)ttW`_hf3`q_Sr%5>jdc7
zHn7ctpCUfose1WDG+%2deRUgx*3J#>AuSC$Oy*CFdA25ut1BvcsWbYRhw8L21Hz;$
zGindoux??XS~l2c$IH)eV%PC2cq<#*AjrhPc!PWS6E!b##+gxlnNQRihj9(~LvH)g
z$z+tL<9x1*i;K+o+Qh^+p?2o3AX{7q(6TZ!t1<lSv8KBPkUA)hOwk#e*v}{`Djth!
z(=bq_y;q~fR87_Vf>j5*bUI9w*_ElP{U77TByDFiptsv5C#?V#Cs8QV&}`u-*n#Zf
zsu#YeJ~BUf6 at DM{LroJHG#c$<5=6qP-YNGNkP=g{pP^8((#u at 2F}I|wa)I^ohje?L
z3{>~t^B2vwj8(bG!QBxK5Na6Se+DtL+x_9ViV^cLfmscsl`$i_7<3g88}2CPXiZph
zK<}zf<LO65&Wv at UOho2+LT>LDU1^?C7?|kk?>z at sk680$i at lEz_Y?h>Il18>B&G at q
zgg^TIDKoP)1=>?Qf`Q@>8#5fXaWP3D5>y9m&?D8*I#JB&6x+rW@{%)P@$6N0i}<tZ
zqJ~`5)$ZK+FyJsJj9ICmHZTuj=<ksXlKR%Az}3MJMPY0d<gP>Lfp3LXlud*9*<U<@
zgUzQA6y}dD$ptJLuzY<HEse+SqUA`dL`On`1HI^e{u>;Xd<W8Qj}cGQyM#oH(sLL`
zUdaabV6ElY{M}vuW-;*)cT8n(8a5ruClib)ST|E-G<G4f=u*xtfP?zq4HgED&kmex
z2{T#nvn+CVDgW*iFOE-vGziqq5HC=VNNY^MAOrj0`5kh+lhq@@sQoYvVoRqR#lRpF
z6E$yo7xstFx6wKv=2y;|0v1w=NntKxVHD>do&{KSz`{*@orJbgE8cTt9PPkxed^`$
zJ)*Nmwb-brNhxMS9&3gGs7Q)3JQ+a7HRpy&;;CIC!kYxan}-l)3MrbC=CU7*c~{AC
z(tHUd!t^=vh|`CumhG*gY=Vd_N!w*_o@}DmzY_*wn8O;^pn6>F{W8C!fSjR)W<uW$
z-=XhpIrDvBR!cnN3_ofS32q8oe$~{}G&(j`C{Bb`0c*D#ut<#A?X|c-$3l?ma)Bmx
z&~wOzlqTx7*b#{Izx)A{*2vrk4T;WcbG5Toq}yXXFq&%+QI`3sT;`KmQsf5%$sp&W
zqwsZYnD93~8enrU%%Z~E*}g&c>-8NquDL3CfK<GbuveDOI7~{S<>XaV%GTWxtuqP;
zO2K=4#axK=y2?qK@%<)htO6S^ZfSJ%TL_4;XTYt>h=V%R2&!YBi>^}JxVc2s0R?oi
z+b&HFAw3$9S2Ygs?xaM>)gL6uHDt}oh-F>Wr`mb>=m%6!z;jvkmz$|s>;;d}_)p%=
ze`rvbW>0Qa-h at 8kF;BPf at ZHMZ*nn9go-doUNty|D*&3#o^+6-(1#^;iO-sWM6iJlx
zbOF2Feew6?0P0?iYKDQ{eneoYZ#R{&^XDCCliY<sYqjzy11MGG8y;eNSuC<a0!N$x
z&op1dqgF$g=aR*3M3MjFuA8dFe+7lN+9L at VlxaKxBiIyfPl)of*Kl7LdkryMRX at 19
zdgtYdiiV*r5eNpdh;mK`uFk0!t1!OR!|cUx<$k}_6XgE<8pswOAhM>KyBDxgX$wpE
zc78X|uJ<4l3D2XdP6{|QTW`BAjKR}DevOzWS2*A)9VQue_>q~aNR#GZbwNZwrEg=q
zt;z4&$z#FY<Zdke$|{-JJmM_{Ssk>q+pzwHmus}mbchGd+P=?l at D1;aYB at aUd5@>{
zk_nxzGEuU4|G4Q>KZFma7-Cb%ko-PMtC>*2qQv24j6#9qQ1RU>Zvwyzj)rP5gEmKL
z&*TL^!>^9gxOl;qx!*h7jEC|CJ^5IW+ynk7%xTo~^wse5a23yF- at 3ASoM4Msi2VzP
z^ej|J502O!P;C`!RJhH~;@C at e^>Oz-I+Us}KB;JtoYp5 at o|)aFUR)(L?R2;gAvtTr
z8o8=sLmmQFA-3{#+%j1CDUS?q__!C7+nP>LBltxImsRwo%IMS-Q<A<lCNa+?SrpN~
zWYKMqJIgJDFUqI6ux1^VcHtPjO&zh4OmtY^`e)cy6~uhoeILZb7PGk{N({JhLHkgN
zL^RsMZm0Au8 at q2kjF>dM at iB8axwdn8B%>I0;Zs{?TF}RGDeuF5>rzr2a<F^ZzjUME
zt8<0aWdRdh>NIJo&kk at oI=oopW9 at Y+%$MOIly9rBSFc`;zG5;Cxo9;o$m8>l9;oD-
z0tCaS-ySwrF5OyimZzasYj(n07zz at uC)QaXReg8jhf3lNaL`W1<2#RN?vsOQ&aN&l
z`%s7Q2bBXhq(%fov$rR^%^odRw?$wMH%)eNw+X|1t%3D{9k$dZ!Zr^wb<u&B4X6hq
z!Xh<;pq8l+yGq2XWLnQ|Io$!@>{Er0htXwl<jvfUqNeQwIexjCBq<DIAmkA5&NBaP
z7pDv<zb%nAQK+D9^}anW?vBTVO=gqVp-;{xukPe{VvVnxh4qk8BZY&c*DrSNOFrxJ
z8HALS6!ghv2GTXr{o8aUYr1>Q#|>+F#q$o3Jd21vu5La~{9tFQ@~1N6*lHWqwj+wg
zCno*jJ>9XkmvHq+zv1$x-q`*cH4Ey&g_g*jCQkEbp{xUjqOInaM at f!kg*Wj!9B2BP
zv5!wDR_v8nwJimR^&S3Z{ghecdpEbOnN90j at Wf<b(6=XtdHSZ8;2up)OY~-I0wjK!
zHs{YRXA(dm&b44*;VntUmy;jtsH>`E*9wYYJ~F at Gl7mJtQ2V95(t#hPzIaqsjj1vC
zz+wN01DLkXSuWZj9(L<g)pP11-%6IS5=T)Fq|`i4L`!0RlPBp(-BBY}3j{UpuMq|%
zthI`IYZ+eC230_gVivz at Ez6Bs+c3Q1%A7<hR8DP4dLPbqKI~hXhAh7Oef3Ia5(KaU
z(|gPe`_~Zj$$<UZJGn7ETmq<v@=X<w#a)}G$9B4e1{5pQL(L-2!NP(OWp}4S!?82`
zOx;>73oxEWMdTh`@?vdeC at 4w1FFhw>vS_`(gk6UFs#4$azXlSGu?PapzE*eHq<ITj
zMiKC{#SHEI1#Xy?NRG70{}Hu6NLC|Pk at u?h6;H9Orwf2wtXC2o4vSj*Cl0<iG1Wu8
z;#z04T-667*gcKFmpZbZ^CuS*wNPaD5y2FQ*In0SHQ%_iWFp0(#^sXP<<T(0o1^?U
z!bob+hF>~+$I!ZpxtmI8+hF)}g<Nyy(8nXjV~$W1-ZAECN2uBLx9+o~@UftcPwcon
z$?(?Q(3UKAExEaXeyYWbmjfGoS*ADSL<yb0iKmrCYFvN&*EJUL?<G^tcJ&dTsvmOG
zVlU(jggDF?ZGC9(lpq|ntgNgCd7u`hR}w3U&N<97ldH44A0Y?_f#t?R!*SBda!CGU
zfc9JhNrqj+JH%zvJ{48aziPS|8PHb}dJmaAHYF<&vIRC%y*?gx?#nRTZn-&dHx?D8
zKR at WcC8nM?clSZVTot;Kd%8U6R3%(Y6!iYmrt$2Y9T8_zYGGr5uloq{JL;MYmA;Jl
z*j#CLUAAu;+o#F^`)-Ne0Lj7UMnmoKgOM#VZQE$FllBRpl3<HM^7t5F4^s|yduNrS
zh)LJp{&k-+=tikjwrd;ChX!Ag3Fb$qxqEypHj79l2W?gFkq_VavtR$!bMpH#dAT`g
z^QhwEt%E>@WrY}ysc6{fS!EreS-$t3fsFOvQuZ@$>wX=s-v+lMI`@f(tS8nen3G8L
zM0=*E%|9cmB6l$!_KmJYzNCe$fVJBnI*1^@ggzk*ncl?BRqY~-S~r5~Ov7lu3wR~s
z=~H6f*ryVRidtiDh2o1m)CVdJ-X=kwh(EsO9eZ(Ae)HyV{byy46UTszuZi-!qTXB7
z1o<c&q*#vW)!7d<tBbNRKgV^gp{$(h&2gd}R8{k&SUY&UbZd(~wc=me1iqUe0j)!n
zkMh>^6{a8|Wy!t<$d`S6R8oQZxF=Mr+?zeb17cOm at 2|#~7H&p5O5gCc$q~TTcTSzM
z5ikqeqGi2XGdwJqt|0kNR&GthY~{#zBO_njz2YR4^f(;!t~7<Uy-t}Kk+d~PpG3}<
z57u)(Grin%Fe!5`{>HgSY at kH39Kpv?M at jrLys<VG;BkUhc&b_%&+=3q#f+3>lRT?z
zS8R7GX??S&DF*48j1&<#5x7!lr|h at eb)Wfy4=zz<dvLVTobPlhcp4T22p<0o_1Cqx
zo3K<&4I3M1FHGZ6<&v}7(ONnGYkD7o4{#p|`gxg|nK5}=0XAd1KKKu$A87)R8U)c~
z7ImOi6UibDCtH?%+bYU1RGFj*H#f`c1x{p$h{Lg?RzXHU*Xrn)!c<=*ei#`TGH<U9
zIBU!8S=3~o7ZB!7JB()%&Xl~NH>PnvD at xrNoMe@G&6dOemz!k$PR!ft#xRcesy92N
z1A~Xy&TC4x-RzjS?)%KX+U=TNlGts9((sNUPdg_dBUROcKf8RV>ag*hiz_ZZK&~hZ
z0u^J|K>Auji38uISaRbb?#|y^Dp+IlUr`fAT1YdGe*ZA(rkmALBGxf9hi<rddcV_k
z-E8g1 at WEcdt%tbyU^U-I*H`f}ZR;(eN9B^a>Y0b1r|gj2t)Ujw(2Ff?rG0$|ob5Mh
zZc8n_92%!k?BcwQE- at 9pff8!Ty0Xiw`$XYW_Ho$;>!y1P2N28#`i-aq)&@{;t;Hv4
z?peDe{<lv|OFhM^x37;k(FMf6?7kM43Ai5B=ozzNqc2i{dDGle at F)+%_8QI!U*31;
zS9Kd`DZ4YCy*Fc7K~eWaICFwzQB!iJ)dbdor2sV!SWPmfJaakp;WedW?J+vNWt;+I
z>*#?gizjpn(H<6=+mO;_mk&-9^ek5(+6nmZdn*-ofycejyHm1R)eYWsp>4$QIj-AW
z at Ww)`Q)P<_;ixZw(kt7;Ya77iz=YPV at xIldgLwfno>(~fvMD;wLjEj-!v^Oy+;-4p
z?Q>wU&r`KTbRbaviS#g+%@=n^+uGC)=~2kLVgZljy#_!>MDZqa4@;x1<d)l729{vq
z_C1T`3q9lqpcE9Id~rzCnxWDfI*%dlY(2NjT{CIy6SA0`-aYY>jkDp0!b at TbJoxIr
zeNHvAS at JjQ$^Px#iI*Kyuy-%MET3+jm?&Azo$)#GdfWWO%X at Y+uwMwa{@$Wy=yaWN
zvaO^lai692pjiZ$tX?@-9ew}2pl5Sm;YKn+lxNe-?9Ks=^n#nz{7S1Luj=!|Hb=t_
zZjayU=~O(qUdIzV{^FHLo$8!cCz{lB%Q<n9K$)f~VHn$ZybWNOoChJWxj-q~_~1F*
zTVyVMb$C(}FFVq9o_l|LFLtKbM|81P4WZ at JF_hcovL(yjn2h}-NFlXc?I<zaE7iQD
znSK$JWNTXZq`PFQI0IcgHu42UWhZJTUwiv#<f8ROk2^uu5~PU5)I6UX=ZNbSY#JA}
zDvP`jK%DShRua9BAN9dE#wF*Dtea at zV1=A(<GLHJpAz?}*rnR)bb<Mr2+H(=C2Gtb
zxvJ0_W(y$?VK$vZj#eS=gfn&F>*<<wgLE4kfx~+GL{)CMu=5=>I*PuCfYeB%cK~?G
zq`($6c4Uu27?wHEv9eR-9LT7v8uJs7|HGzP?5>>sB&Eklh+}9XW?K!mT`3zX%$@T&
zN)h&eH<w-b1g1Rwk+)A_qYToSlybm})~+6M??0H-r&S{kMy_vcH)aJuD##8z>vf9d
znIl9o;Pq%1vh7-qyu7Tn#M#YSC(8h}eJidvWrEG0e2C{PDg8F&X(93~tElp}S&tv0
zpn9M9 at V;_HC~R(z3S2FsmV^An7@>I-J#okPi4xmV=h7P{B?^u>4j1orenqps8d$+1
z%&z7{<zI6;o7y_Fk!3x1Ca^OZas?d%>Ov5taGQu20;pv%Kmb{XYsTFpl<NkV^OG*h
zyyo6_?|zLia^VD_k<edSc$<agxf4Wx%SJ!5C}8g}+{&B|22Ctky|Z(t4~BQ>D><Yd
zYqzP8>Xv5bCmqNuK%4ACQngmnNZcK58TJ4?HZXv~N7B{CAoCJywpQy3Yonk~_q7Zh
z(nR{$^$iRfex%pK&#fAY?<e6M6z$(WM0yV6)!fx3H?A_cJvtZmMvmS;tyUU{qm~DF
z5oo-Lf>KTf3Bp1HsF*<i2Kml5DY>e~#&;_#PED2$LLE0SjSEZONai2qC75?B7ZW<=
zsvh%K$UNIr7DXT;i1l>yHRe;=o0S#c9&a8Ga#mKt!)2wXbm!Sk4omziQdtyA4IGJa
zn5TW6;%8oj(7C at v{WCsYP7=AyDbB+_#o~DN;xFu_WFx5UG?$ydizYHRuxELy=zPO5
zwxk9mYkL40l`No$@H?N#hg|Y+++Ui;1g)%Z`8Vc{*4 at 2}i#HrtHV&eF`r}>|d=dYc
zYiJWRLi$ruU&yEBS3_K?WTS22#=Bo8SsXj at vjC`K<Y1C%D+$ewqGYIM<jb0e9){Yv
zYJ(>D9O{R04baxz#q<7+^=05t+p6>;--v!*gY`b%93s9Gh=C#bCbF`!qE4s=DwSGJ
zm@{aK at GH_j9_<;#i1UFB9=6hAjq*)qxofAT_ZM1k;(@aTkxF=Rqjs!OaYT_Qntgqr
zMI*NPAw^9U(C8GTs|TE-hYx6hs70}k=B4|}g+0qU14HSPwB)!G+<hcVRsaRov$z<4
zuy20ECff{KLK!nW!{?*}clO_`;9!pl^<U7!HP3Qy)Z|t%^*o6ux!Gd&#|{#2G5q_k
z10c2)6ydl2xov;Ux6oGRy)A?qQ`Jr1v_FA69THCOFcA0wAuA-ILI5ysz^1`{iqH_@
zr%r33t3rB64On_U{n{>#m0D^fX>mkjmmRZcfEXYRa;@tWmX}Sbk9kg8O68e^+~-8f
ze&8GMxzvn>V&&xda?nS%rm`$B&Fz_yM9<l#P)6;XqTwYj|8hsEP<+~^jx1KKVw<l)
zez_sZ%*$tvb1RYvlD?J8hn$spy}H~8HfT_%o5F<0wx%gdVZO<AE!YCFg8Td?H98Yq
zCgFXpigGGr3KtM*k=<-UGRLDWz at 9X2zrkIK^ATtJ`zJ1)_edw++oM8EZG2i!WB65y
zoRCTDod*oJFN&Yn?)0j$4oP$<mZ-RlWLvJqk^x_p6#CnVXdsR}%LP(ZTb=LS%dm;9
zHfTt}cmjz1^wL`;bXCXW8h*-n8=Sm-b)eH21+8NUw!{GHCt)YhN{S5IcDh(KmC(V7
zZ{3P)QI6$CY^S;!D<8##?@#T2qh7CRnz6iEu=v->MI_$M_ioMGzjOn%2|&u{wmIze
z`#PPGA&(|J!dQ;f<EolpiETv%LxZ=b3SD7|4s3?RENWG&dxeVgw9(@cTe+0|D(~@|
zxcM9|ZnD90P563ZNRZR0sa%Kpv+_}*EuP8Zu=U{|4pyp``JKIeZq8oMz+lyGon`*f
zQI}wHldZohIi(AnL#^&B^d1xR{OE)Lw4z>}>Xe?5R`T(qX<@Q8bijw^oh>Xi-V5Lc
zJ^0k(`UjOF_Cqg3Y^RK8^V{1`1O9o;F82+VU~oy}iu6a;=?cEYKkr`!JUQT36LZ3>
zC80WXP_4k{%mV*Lu|U}i##hc7YI(=oR<e;gp%faOEyf3aO>KNWw3#0i)q>5c`?5T2
z>^W0dNVEb=nn5D%XbsJ^%j-3w)Ak1fh$s9LZD(y)YShm|grl~%wgxVNG_RG)f-s9m
z1jRSV)tp!1K~W=DI!Z91^-NeY#Qr&AIbA8zI`+xhLE;--NCTW5h{HI<XAnDKGBSK7
zH|0L+6x-|@Z`pg^&U at 0$&z!n}-}7)9xqUt#CbGP`gwi>aD(WI%^~NWt0Y6bz7anY}
zSd(L8fmZMHdGqRle?Q2!lsYNJP>Jf<Hn+n!Kf!KK$>|}_%U$NgQy?W6b;i<ZdXEFx
z>IViwLeO4_F$tISsF6wyO1Ez1PpP-Swc1GZnE4&xyu}r9AlMqzB7_UjZ^6I`NApN3
zUaPG_3PM+*YJfGmh_gF$qY&mw1GV?I_~_9lHv%r0wr$w)R-q<Iv~kszUiF~R*LV0a
z&jw~sGe)_l|76YfC at rf?*JNe1INZtC!_CO7&PGZ>p!SdVZ3oXY6Gdgli!-RTd>*E1
z#U at a~B(C~c`*m{YZsX(oonK|y4pia2w-N at zAg*j6j!RvVq=RcRdNBQGkuwqoNn01g
z?_ at xZUg|J7+w(e<i<_{o5vN5?#K*%zU}@N!a-edIp+EC#RW9lrh!e8=xwR_i4{^`d
zxFChFi2Nvi-Q&?K<trE7QWo9i1?F6_X1x;;+Nos+;eBT0*WG&ptsz&KJE(~e?H6t<
z2)7!+s*Hz7@%K(A9nE&}69NsSqx?|CY1Owp2`Dy at LvzaK7A!3($hIm;#CzJcb$f<p
z>fqpOfg3LH at Vb*f*Eim{V?I@{5rsHn3 at v6R)Z7x4`<PIi7361-K1<Va^{HCKdlvvW
z#5no(ROs5j4`U(A4bXQi?*u^9NHrR236?6zbv)M8<|&wh^*h>~!TUn{0Ig`LH!mb+
zMqC#pG)Se>z0K0$aJZ=%$wrkjgNCb47UxxI8GNx7^K>(@E7eg~3pT?ft4Ufsu9(UW
z>0J&tZv8s{Vd&<sARp#zV;YvL!2;=emb1i(dAqUR5|^EuJH9-1uF=+ at Ox+zE{N|uJ
zKvWi_LWXuPPgRO+-LhE67^oLxRq3_*;c8<Hz(193KRPW;Pc7i(&oR9seF1WWd-&D4
zjn>f6VDaK^yBb*^sXoo#o~|x<YV^%>e?1Q~`CJoP-$lR-)k`r4EQz2`8;@W*Lr%zl
zaRK_f(|E<%(-myTw*u<MSJMn1<bVG&rSwx#W!=PdD5Fy|M=hc^yiJu=nqK3z0`hx8
z8y_<ocTI^1myg1Yz*iki(eX9P)Be&p*U2AIW?JMQOK at A(!P>6 at u)uDTl6W+25<)i^
zXHnu%<YD*l_wX3T9VSU#FxUa$!_R6EQF?N+!31V%b!tJJ9-5C7d45h`C|7o}K&-=X
zdMgj7?Ay|86HEK^Xu-X1^Y$~IQ$f`b-M8-+SL7AA&2-Z9F^e?;-xfag|3y;$V=v`C
z<5rmJs+l07v1 at qSD5fKU^)Biy+ogy>v9d$UJM1OKm{H?FRJ2;C8v3SE!yS_+F&!r1
z$g7~u-HTC-stqEn#fvGf`NXWUFEukMWGGA7`|{}Bn?VgB@?BE+%WNtqqt|gd$L&Sb
z?LxtSs(~$HpSYn^>`zd!I;WF57CsFkET0ITDFzMEa)VxGrDBS=yifS%)-vQ*|I%U@
z7<dxqEXI7h<P;R7M4wy1<@qCo9GEeenUxr^C7-sEr0Zdkr+r2cu^a=)3q1!^6fTsb
zxDD_#BN7|8h*BQD!6NjiyFsy6J6g|z?CW0o!ARDnZbPjfiL;9C{4g#WD{xw(;-k@(
zYm$|djkaysj at -|(R~xR_8A8IP%d<HrX(-<uZ1Y^(lVn<j8Xn@|6LkR3jUcsrAnLSS
z{OkfY=U?xo9h8&)Zw5ye<g|eeRM|BP!%)SgrJ{OzdXwrR$Kbll6shCUFCRa#_Ac#f
zd)@G{$?ogIZSN2uh8s3W-40jDYufd14QEsyMIrPveBbst53rTvPm3*;*7!<(F5Cbg
z(iv&q26}oDUJ#waN*X;YD{Ewbzjn&Ae7 at 5A_h+Y~HHfPr0-q&MN0mnOZ=)b|4)5oU
zrk at eloliO%%;JDRZf$A)wd!`JfdRb53qdW?s)aP`R7xPmBqFBIhc9Do{lV at Hu}2zH
zh=D?Hd2Zvb_l$t2kYXrm6<z0v`E3ByA9!@0W#0Nd6K#>aOv)@S#iiKGvCCuM4XQ<{
zfc9@(z8!=gZTtB6yen`DUX)UKqnTV3wERxt+5l=ml$TUi`pt062K)mh*?YT_c9F_Y
zoKUy8yk3J$eHS^rbO~eHFlOTfb=cbrc-8r#i9RQQukpHq0QsrfGqXQeI4b$_0AQzJ
zZB88mMexLio3c_)p7C&$pZg at Rv?Zndb>OtT8P8PEQBw!GIB13+u??QeGLHy%Gar8R
zz@@kT<o at R;C!!a2-q_2q^S7#bS4o|Vce~9yHWT at vm~1HuR=hlJiv9Ic*RK(G&O`Ce
zJW^}*8cYS7+;rlmsGiF4=)-MPen6aT3-R}3YWSG8H6q+a?;YRf0TK(!!Rn$BTz(5G
zAlWUIfc~b^M`ljRF6esLm+}Zob(!eu at S?&%jP;kLpep?k?9jlrtg at j`B7WEO*@6mt
z2qJ$wTOnwBi&YeP&3X3mSF>ku5w)7YDz(kF%IsOejmA*a_H}_6AFHbc#7(}9mT)_T
zCe(MS1l5uknWPB%39wVs(cGC6$Lk`Nh$tXwP8=RQAa2;#zD5&!e*<MjC4((0p!z{;
zD_dnArFGl2kvsjWG}<Lqa-)-nBEwn?LJqR~5^lCSr}ivycJ><6Yu6$2SB?<NK68O^
z8w=k#)77}DUTJo-mhnQrXT}4>dHNU{8bm|;v@*)&b#`ZVUVk&OgUhft;^)R2&tR6r
z&{+~K%(Y8)h%l3!V(cfMbN=6Jo?s!9YSXSXFW6QMxE at 6&P_{(cV1qcKo4^0atvA|t
zZYwFdLs20HaoPa>P;;#P0f>9kw^}M)qSVLYigXbamp at -=q4owDpbt4H3<}%&ns7Y}
za0>0~s^kGhNj>VtcN?QPV$i0iU at uRGo&lFN^h&cWbp!>es_%o6zTyq6 at S<QVjTh09
zqn0f5t)V-=@hDfE1JDtRcuvG at QGF^YyuWT|Hs(cjC}=|Mlb=S4L^6IrmU}E{MUQ@@
z1EfwWL1P39gAUxdb3fwfrSctU(9t~VM-nz6DA_|0G#<DOWNp3sz1f1 at Dj8u2<t;3r
z{$Y0n at JYSI#|HXHStXF|)*fL_M9PMVfDw!0h*OvkHef=xG<iLEqQ8w^x&)Fg?>3DC
zcP<R)KF)OU0KGey+lfWzG=<gJXi<<=-~18z)98e%H at aM)iuilYf$+Vi%8+_Xg{;?*
z3~gJ|Ql<Cs7_gV}mxXAu2Q*BV%*klJ1(L%MdwXPGK%D{hfUN#8Qem#H4KLot5C3F+
zdHfx9e^da7X at Zg@?W0QeI4;HJn>4&+Gq4KTp+Acx`m?&0&#zRdA-*k$0@@`8sk`36
zqZ>5NCu5H{1~ev3L>?puHt!CdA01#v)oq{MR2yDZWR=Fgde=}ZCE+z0aPViWuIKAn
zk&WfbN8pw=Cq;?<8PGBTy{D7Ka?o;z(TQ&cH;rdC2DuVn8_LR*cd=<`j`20^e%&L7
zjl%W=r~&1f;Sr_~#lsPw27QvA+c>+pSM1m{5c}WOOy9s$x}|e1VCvqp#7}#Fx#~U%
zFh|d!MHgJh+B&98eklAS-MN~?Gf)O^?CV#m%3CC*ICoFOqIER!b&U?U#aM25m~g>(
zl)oj`ILV?n$~I7~lXV%cDoXQl2!MVYesm;d5 at HPEG5=k;tj(nKMR;d!!3I~?vse>s
zz_nqkFl){ta at ePb8Vdlqr06Nyeylmwb=7=r?J(-$^(Qd{r*o8f5TgydUn1Wc<tV?W
zrn8vQk~T6R!E^`c-$c2G*6Tpl?|dp+$h<w{mmk)@$-aKOvKd#X at 98pc*#H;B*86GM
zLv_+QwzB>@6~`FfGoPn~7HAd~%d4t>=tA24Nd5~SGe7Lys-{n!gW4vm<s%y;%0qP4
zeaDo%>=tP~ZRZ;6$0mLTQGTwe+6`Y)x{To%Wgi<THtD at ld|#pJ7OS~*SpHQ39^viZ
zkG{;c$Xq}i57!kb6Es*a{rLGFOy9ERYBSa!2|?%)xNZtSDtANgkj;`Olb&3a1wn1v
z%Jcvzy3TfAapvP^9dPSxxKqPb+<fB<Y;4g%q;6HUiiCA}B)Bd6j3+Kg#p{HfxwI?T
zB{OGZ?CTPWwB6zH8d6l!e8&S^XPS;?ziYy<DK=>v at j`tC6K9;XU7l&K;#1X=P1ko8
zz8`;QvD~w(6sGEFvU at t^V6tsme}o{Tnrjb0<*K=!?h2hZhFiaW6#|Z;Pq&=I*{w4y
z0>FJ+2nEKINE!FTzmz^w*)(E_<!U?op2|Gt?Fw*l!Ir1scU6dzN8e2+F4rB4>9tsH
zRC&^RNYe~jZ-s8A&dvI17QFbhozrmag{uSe5o;=%t^c^(t#FIgxjCs0>Cw>1rsJX1
zjG)tN`RBPuAt8oseh*p)A{G(NABWfTTwIRvw$7G9#VU46km`Ie4)emwp2BVHUq!Sm
zlRsjq4Rh#et>lfh;R5Buxzqf*xhFz*%D)YFcd0NI{#vPVklqU9ue-L;iB~8HNcmWD
zY48*Muct(vPuGp`pQm>EU-y56p)sx!3IJdg)_D!cIIjZm)I_<vlnP(A#Z5*b{Ov^K
zQHq^sWc=2<g-_prbVG>NxZ-8H_eyk$B7WhOTU3<(UdoEoIP^S9bM^PmMKs}h%F4yW
zKQa5E685lC%iL35z>pdjG7gc3OILJ#`gUiLsBa at Hp6#1C-nK`(82@;$+6vF};3>KK
z at wUpjoYbek;w>!=41ZS>CfNAURDYmb=V~$%A6#RLd71 at F=+P~gx;#A7av>ga%l~)b
zPM7OMqLso~;}#Lw%SM4db5lMyK0f-r=<x6z*xvU~3O<p{_$PG;F+&vgaU4dY3*zJB
z{}B6?e29a#3p3T8YrMXD#nFMx%YJg1PjI}wJ-Vx?oX_cZRMeR+gqHLz at xdl^)x{+}
zU0uNG$avFO;gc&PWIFc`W~Q22<-)@Ai0pWxP<^UpTu`b1U0g>8uYf>?R9oVYFfKVV
z&s!2oe&3p1yO|an7YA at TpH)q>T>+2tfN|qEClhkpqyAXk&6f{ghuhOVJ&#HI``rYJ
ziU93<wJs;ff)**`>KaH~YfFRFhBWQ2FLp1YL=sRCd`*7~eR9S$&_1QS3}9WlJQIev
zoYs;P5&bPe^xUgQKrl4$@ZxTqoQkK|xojwabfqrhYoac~OwY!9*q?y~09Ul0zWoI7
zHD48h2kX=*UFy?CVEwrp017s#|E4evOTchx3u4ZzPnQ-o%nbu<o|IFTUUhSHO4s at A
zo-}NBRswtJvg6nX?!~Vek`Gs0aD6fIvVlf4u at Q%IpPX%q=jPLbpfIdaa{r_fsTkG%
z>Xdh)D@~r8>-o1LQG<Y|nudkSA}$x=A94 at e_&h=l59`v!$6Rj7R|Qc19^|!iXv4_<
zN%&KT1mV>W<m_+s$RkYMxAA at 4Yr4qXXvP<VfYu)GG;qs8GUQ0*o&%oOj>mNlWpLD4
zyQ4zTsw$b029EWH-L#qUqU)J7F780Jn{(Tm6&#TN;Ft!OUIT4zZ;u1~*e)azSWh43
zo!hrFelV+mzcfQh at ZnOXSNt+s>XyDe=HTE9|A^3d>MtEBnCv^b@$o8C6d`C^ZL#XI
z at zm0)P}e*6nfN!-L at Y&8U>E`J$m+3xgef{7F6q2MV{#alyHVP&MZ*v-Q?PZKua}qZ
z?CdPD`9j=hfsO~DFSl0_rIRf#cl$lZZL={?7plHqhAE7w`wB}m|LVXL2ae~<zW2C6
zL|sM*Bc6d?x&;N}*<U{(HIZ`4w<~*kN?)UL-n|>$*(nhg{!Kl^#YNKzhfC;^SN8A*
z9_2N>n`&axB<p9;(Q$njSv*$sTBy_<&KxV*|8u(XU^C0ITM)vUX?jC=pwq=9L$Cka
zu0a>pO_=_w)73n)ruty%vUp<h1E-X0<j<*$H&0WZ4nNXnzCE~Ew3PWU{?fzLc*NNw
zb8FZ;vu8rg1lMa9tyjEst9znyJnnqCQC>b3VCkx=kx9YuzGrq??jyd^U~TzS)l*|i
z=WO4Sz*FSUGZCElNamMs6b&X9mH1DpIjR7*1R5&U)Y95gmo?j!IW(nG{Z-Y`yXVh`
z>~~2CqNN<xKfRPICM{3R0Sk0es<jB&MtMhW2{$iDO~ubKHQ7N4TR%9o3KwOf_fN7_
z+~;L1S~Qf^Z<~2DX at VOEJtm?kX8)?dIKdN7A`y=6uBtb_`^<oD at R4Q(88w`j!yiK^
zYssXkw++7~I^oHLqH<q9H%kDMGNX-@!F?4|WRkXXJ*SSAechM at W*)pa7*BE<Acq$f
z7Y7|IV`@owNY$%eJ2-fK>>^$rcD`r`8IUCM{@`18e~s^^bH^FcP_mO+ja#q<gKmS8
z)eA5R{q%tzr}xlleEGxM1H$!N_;dYk-)$TAAa+U2li_qU6W|VA&&r0O%QZgPyD?Y1
z`rFbD+t!%()EWOg+E?mI{qnuOtW4+n_3KG27K_zy- at Z+Q<zzVc0K)3-{!6t?`WC+O
z4e^;Z6VL$FY$+vO+bTwLQ`2VOUp4&9`^WAMG8gd>ldA at nJ}+a+nE*Y+CMS{t1~avo
zMP1i at i|$Yi)R`As!HcT&yudg$#=#%-_h0j`f?f8^Ik=K<TwrteinPr}9C0KjCKs1S
z;Oh|vR at nLZH@4Xg8 at jZxpx~h5o3sN|2z+&;uH1=Era;O=uuQ*)G?XjTXP-3dOGov8
zFJ4m1`>!<r9C1~UZ5d#0>zTTY#y3H)lai)nnHeg%F;+3>gAW?!=px73zf(k&`I$?g
zpG15J+8EX{Mf$-a)&dB_Q_YCrVJFDv!#--<2>%ojhIn*HAF!bV+*&ap5eLX%KbX3Q
z7zfOjN{C5@&hhB at rVwAlA7~^FLd%5bhTmSU_QoD+CBA;`!tV(%dI(_6e-|<sl^Ml@
zc6!src`skCWi7oguG+56_2pHoc at y*N*L!x2{z9%lxo9B2R+NwjSWF0{`~D`tvRhuQ
z<JH~0jo7dA^?3U98jk#fFS$0?dXJ7i at 2pJvsznZc`8BVNIf2+n?-D+7jHPvECzi2{
z?K94uo{q5N@}>Fo63($W7BQ0B4(l1)!^X3%AqL#alK7mA at rO98QqZR%I${Lrd7b|s
zF!#T84y#B%_0k*^N~Z>ewc4vh^YZe3X4+~CRb58|if6w at 9S=Vo+s5Ka8&neh#Hr}_
zOfDeRK4&m!x-PDZo!7S5y$#e1w5p~`ft4uRt-O4E7RW+<{t|Fc+j0m%US3*C+i-}`
zKs+ZHb>NXeH9+R>j4P~cxOycc4V##pj9<rYp=A+e!*i^0#$7lHZHzo at MXy}R;{;%W
zxi-Fpu02|ZR9W-t)GIRLH(EqNV%+~>)x#JHF3cBq at 1oIYfRa2Ge_mvCa<Wt<WZTWn
z?a|AZFN3e7AB6e&NiPF+B>`g|Rq7b>NZHU<l{qtHd&bDswOIeXV*c>35dirYKf9hO
z1^|qI?h&I at m_P=4;^o&(7RPWQ{UU%Qxw{w6pI0X!^?%AknBkPi%zcDC-N3-0Z*|Yz
z&(CmmFbAzdXen4(aq-~a$O)MnZVXtJ1FA(}C|4AyKlrHT1R%^#EaV=GV<pE&3+l-L
z4!1%~!??=3|MG(C2um8*@p7wZ6B84%p7am*^}}<yQVF|ZcUsx(0D`Y}a)=V1Pf!r^
z{rjK7!oo{?hf5UNo-#MvX at I7l0C;+RKAS|A6?ppGlRk-m94-E1S2)~2V5`>G-Bo_s
zKaAWxj3lFg$Ay{g2FR$YV{qbjF+RSHIGcFJd08f~<0^rpJYYMxFs)ec{+p2g>O;x?
zE{#5VvgCeprU~fLMTj#8=)8!@ZoJvr>G~|Z&DPd`DK+?6e88>2j6wu}{#7Uxe+p{+
zbC3DM9M-5%6 at mXg=VIp5Er$`-S?0^gBL#_&6XK08$El!7GWow$m;4K@#xyhaRDsOs
z-(@*JI&ekLRQIgEOA3qtwrFEVw{=m~KT4GVRljH-e_84+KIZ;afH8jKGH0Kho;Oge
zqWx!d&pk(fo_DtK7mfep7j@)x(Hfnlu=shYUl|Xt{py{SlVkS#IisR0(yiyj|8oK!
zbTN})sK600Y+!KE!vx@|Z*G>4ylh|6zLWVMLrW4()|Kr2cN73tHc()oS8b^~>^55Y
z{bkRKEB{|<)eqCe*N`IHx>PRpTY~$K0;{Lh at 9cWcD4uxvACr7o;j6S9+GB+UMqC65
zTkIbD&#z}4(sL=^SumKzhY`V#{~@#uM%hxolo04Yufo50q^6Wp9RFkJE9)pBozox|
zpneYcyTE<y?vGCpDDSUdLC5~?K70*2`*-ig)8o;9_wN3B9d!Kf?kgUaD}VP4zyI<-
zH;TTd3Hs&lix+MkyZd+V|Hrqium|xZ_R0->6XUh3TLAT~_~{3X{}gX at qSx55_PJP@
z^t7~_`Py{_<;L<H0~`CC=PMmM{FICF;gNV%xxWRdRmKC_wtWhEXI`i>7Wu at nF81`&
z!20_(CTn|1OU{;ur>{kXe_dUlivDq~AHQg)``}JR6Q_)3KhRWNzS1i~S=;kAv}F<7
zoI!Jh)}L!0O%n#)6csgkY?Tvh;n{wdv-2|OcDi%az%27$1H^#=M)A$*gcIMJx+C?W
z at ItIDAzuQh-TUznP^TCFv36rKjC^USdp_W(0!z9oWa9eHo)-FK^f3<A`K#vnzju;h
z|M*qVOzGUs(#L*ZEcCYdCpFsnIU)tGe0r*j1bzA%fk65Ey{GVJK^dhY?`Vgrdg)dg
z?ZUoE=?}mg?!HEe5yinD2X5Y+tu`488rZnh{p)p2WKe#cnYXw1nXxH2dG2`xUrq%F
z{N{AE8(p45VmGNcM#KmvSv%^!nlw_o+_zNeK6HW*y3L>Z%@ktL%<C~Dreov!*uAt@
zY}Uig#{@!E%;+p0tT(Sy-b|hMtIEQ|xf5NrCiTbUY9;4HPE<Oi#70a9cDI at oKF;@F
z3Gi^H7zECg)z|Lj*VUP|Hs&JEtv=N(qN+ at rLaPz{Q&v_LMHy#!cbp&1qz-P8>wjzH
zcfn>fWslC~u95zTO>pYH{!@xvX&ihYZKFCfsB(G10~O97WwojXlA*C;TC27=ev}}W
z>sTE8Y${lzs(&FkeYu*UvBf$LZ>b2AaL8DlO^Q>=-m}Jj3(uDSbWSO+Lrv6k&D0=4
zrK;L=ysq#04NkmN1wLJ_QaGe2;Dc_CJJL^{Y+zuwl36+!(rfoM;FexK-Aus4OuJ?C
z6D;5&^f>E}N%=7++gb8HE|{<G{El;OSCe;T|I2?&KgcC3(v|GyTC}Xw$M%asa7k%h
zY2K&8+9uUL{djoIRoZ5^7r0(3gbj*T6Rj1qNedgXUm+2^+{`oz(bN=F>DaV-%<PHK
z7*yx)IZ7 at _WvESSJiYci?$O^iqn+;RbSiqc^y at -%&u<RoOQtnWchejI+5>*jTx`?&
zzPyU<;!MqEvpBTp`8R7db3fRoV&IdQafF|K#R{WG9b_95aO+mAP#gr<`mO`VpPjt&
zw}@YJ2!OO(Ih;B1k2yfJ8v7_~c<%-;zp`mTj at 7oDt@Uh1xCQ1;M+v`*|4i-gU=@|#
z- at x26i+)~2p}}EB#^r at UeKX8x$yCnu<I|Jx!^n1OyHg^C at IXvS(NvD?GmlGuNj{+`
zph^elHwdsu)^;-`ZlQ;#tOLjv0c&sI;yL!R=38DH>CfP;`PS*_K4z|s>w`%->Hf{L
zK!eX%m5$qDTTlO->+Sa(f*{TYjN(briuj!y8)k(X(MFSgS0(!6;SFP9Ia at tYhm~In
zdO7QQ+n5 at o#pI^TUq_O%()cuAQ{+ at mJ#*%8$K4)VR4gku)yrWmRT;c&9+2T!oF5W@
zPd^F#xuD1lS1Jlu&VJ8YJ(5NKW87E03NSozoa=^qb-@{CWeQ)YG?6NhU)|uthhrJb
zDT}dZO6d=g5kcMVWUux7Q39)}>3~WOnKgvvN9i?aKB{4XwcXM8rPG=bH^Lk}{r>QC
z_iO086&~!MFyY(%$!|A8 at E<N&k9_jD>>4D|W)$-~N3FTapD{q)gI_j|a&=tE9*s9i
z)%cVeb`;iKZy=V<@4G#0wJIlGVJv#dq!RS0);g!-Qt%S*CM at z;yO|1i&A!F#?Kfea
zZD%-H0;r8Vfi0uCI#EB3+85?5hQ-mu*Kly*VWx78o;_QzOIw1+?&b}ow1?KzX88$K
z&U+T_K{hKQiYHXuS at N6=zo3- at Q$O4NhR+BQJ)MVBdz|$)^ZAw5q_6hc-D&cmK!#6C
z-Gq80Yx|fA_bF?B7o+WxK7WiG`iYA}rsT)DbC!C?qkjkjbfF?q5JVnTDi<O0N9)&Y
z2bWNXuJZerH1QT+a(`S?aJi$Tzvl2W$<7>;dU(1>LptL(P_RJn9s7{7j!mg-G^6L&
z38m*Pvi?-(!u1axWrLBYJ$u<(Z?ZT7^f25M<|%Ut0Hp}FfmF%<UYDxRud)D&l#Cu4
z?r6C3LE8WN@#tH1xnGLZqbhBxC|cug**|A>hv#-A=$*G}&OM1kpQ6D!6V>?W at 3%JL
zZ%u+%<m^LqAb=#iuM2_pOMT)@?xuRWR_-k4=;H=%q4j%ZFWcQ;Yci*axPrdCT3w9E
z>c?747<MO!_NiH7LDEI%wWK`JCj7*vk5tB_{DkDs2Xe&%8(4W@)A}8YVx9))0?N2d
z>3L462~XYHN&ZG!aLc-;J&U917AGx#ay at He3B2ZKwX1zH+L@zO3APca6asvk0d51H
zN?~swQ|8vIGj+*Tova<rZv1G80-oxb+e~faX9&eb_aFc1H5`S!HbFx~;gdpQlapR2
z?uX6E*S}Ft`|^8JB$4M|TmbnhKS at Lz|I4(N`h`0>5)^jn)n;6!8)z*sJ|Kli*3jVs
z)okw7O{ps-Z^3gC23cn5s;qubR<H)VRd^9pVQe&H=1%pi>AyGq*Xn%M_A_xZ4rEJX
z;}1FU1U1<R8SLHsXT?+D;bYV2g53M?8Vg*bB#ZqXXvlOgMWaQ&>G+p&QJuT4&#3~<
zpJSI#Mtjykc29#W at V0?X$0rUskr^fH=!1h$>q0^g=@*cb^7C48p&cDA76|dNV|qQu
z59zkQbnZAA&FU?0<)SHsjlry*o!>Mi7;pP$dvzR-9>mW+FOiMlx>sx{HXX7d at dTD;
z3Rl37)$50R)T8CL37z=yOn<>?U at Pa)n%|JZRD&{Kc8u!8VU$6(mw$+KI(K8pKz(t$
z<L6qIrv?22s)@TgJRfb%rKGB0pDtl-858iyG<CVMI%Ra)wxCzLVP^Y*8T at lm&{emo
zyDWKovv0(g2R^HxvYyR^Sy)4Hm93ngXA2u7`uIbT)216cEolTTAe8y?8?eCDcC7)!
z>$LMa+QBZT?Q;m)kyn=k`~BmIuOg9-pF0<@g2ge>wAM(9;LquZyZ;P0#xIZLYm}Oq
zm{jCA4?>TGEdn4OiwpQbPKYv6wphJwZsj%VaptZ17su{CY=s9-2o`RSzYdvC<g8VW
zid!5kno-!g;nqTQES11*y{(zKTu`goaagXd^>a=zr)H1Ur}YfDECqu$UH^pQDvZe<
zgx<3dmaKF5wXs9ph4ItUeA)$K8e9AHG3Ta_0k%O&Ar2B|K_=PMI568uFz+_O$RrUx
zG2)`>{SjoC(lB{-=x3;vI2GQ)OF1F0Hd9q!#EZNXawf#k{*U(xO*hQ+0-C7+Mt$c_
z`P`WSc)#Kq34z+eQ at T1FAdDk(Da6ZS-8OA>dg&-jY}TrPJjZhQ$2|@TrQ~bQGEFvn
zL_>A8nH`#z=BDLb$H@;ja$deF0lq)~jYItx=1<vK+EC0uYjWtvDSx!;_1QB&5E7;x
zS at PuaHZD#iZ)Y%ClAY#ocE-*JbM4N at qsv+$yQ=kN{*slJkg?vt{CYHp^$6ZDDLd&|
zz2cFM)Hn5?H#J9r&x6cw+ZtBVZiL!gZbL~_`Io7KS@|SEX&*YaI29_oWi8?E0qjP5
zpZ{QS)F=Xf1_;YR6oaeC;7(NM#q}yv33_HTAL7kckxJNm<Yd3 at T7I$eKK(o^+}HN<
z at pJzp>n8JCpnhLXqd~ENvVm;ome|RuoVJ$|I$I@!M|3a!kiYDZfRvZ;W{EiGqCvCS
znN-;a13k}M(&0V+lj|RLs?ZBXJXU0_xm&|xTd at 1dTd#5xMCqiGrg?_g*f at -ITP#UI
z+A0{tlQ~*ntXx|`%&0tZEqpIs=TFGrdXR5+21J7 at vchWv<ATkb%rG;;gq?F8EDi{3
z&c>QZq)nuavrnDvS_mij11o%RpC05Kb1M3hYxCp57Zw at b-(e+l^}=QuN|2CjvqE^e
zyD?$s^9p_W)|_zWD|pS}8(gBiwzjtEN~MWGeYIjac3o4z%Di at whFn)U_#FFGJV?@I
zv+7=Y;~(uKGGle*CHV+rHh4{;zDkH9p{A)YGVIwiV{G!NDD^PkyELX>{LarbAX>iG
zgJr(U(Ic|GZ14<_CU~29dX`z+Ob6!ISah^qWcz*_gjTreYfwBjJ+&z?Efv_SB7HMp
z(u6Uhkbz=XHR+(YHocL{J)>%$c*-JNI*c<chHPLHwBmRZVfDN$MDirKV`Hl^ufF~u
z+{Surd`^_mevslCsi|jj4`zVF;dm*BOM54rB}va-p+HNY9exUPT<h(rXv^n)M at elo
zJ-M}1sWlUbYYncyOUUjwTJ&jDf3L5FS8LqQK(w7T26Q$iEbmx*9`Ei!WvfdZpXbk;
zfV_?$kG|2*`Wuk5EVF^cm+fHU**_H%w0j@)*SE8vqS2(LL6X4lKZoBn2S&f1Eckrt
z2FR=X94N#5wtHx6+~1k%8&;MpY^m>9EUiDJq>O~7mwYTQy}{bP()&FJqGM)l4d-`O
zF$0&}+fx01?7d}FRo at yfy!NI$rMpAA8vy}HDM31<Te>@x5-BAWluqgHmX1w_NOw2f
zrT=rzJ@?}s<G$mL_Z{#0vTMbh^NIO9zb7`_u9)E8`vo>(|G&&hw(Ev#14CT at 1q^{`
zK(Y>N3~}H;3;O>%_5kp|jcBwX5 at JTIpL@G)kJG!ky1vAJZhz%{wJb4u`A{1*Q0ae_
z#yY1JpaGY&s&(xX`VX4IU+yGWJeb0<3${@CCnJpax!PnnI|xJ~1h!r$4%GVJ7qn<k
z6;X;!HM3AtL00^-uX_?HyuYgkoc*M?_bv>X1J30}^v9*k&I+!3CcU#LKoT;U8kT9p
z!NL705&#h`UXt%j at 8?Fr<{c<Nimp~OI1HEWM|NtU3F{6P0k=!xt~R^dDo&<zIPu4b
zdcHIMT at e)?`o7zAR}3HMQ{*L~2lQ?3Z#3?Y1hik>eZmGDoQ4E)r^ObsPgpIWAcSGe
z=j!Upg!``ek`thEgby4ne%#kRHj at JC+QrTkmK%`tH2u#<S^akX8o&p9K?c`{i6o}<
zUuT2zh`oI6 at i<8-=3?EfN(i2UPYsm>E=i%1P)U5NW@)y<@;^YyD-sA*;4KD(3KY_+
zr67Xme|*KjbMR%wUmB1HBB3Q7U!MQPtc?A at m%3$a02j!X+$FbCgAW96pkoBS90<S%
zf{z^aM$*NHPyqliP5AHIu9#LtvU~TqmO9cDFu1KdNG4SHYIAdxc_<Mg(OOGb@(T$T
z at H<K>-m>!M)?7AuFWTnbxw|^)URrF>zZiSRb-%M^f4(W^Z>flxlX<$;tt#tU5ugjZ
zVVt_ at x4-{gpM=r)aCPbDeLo(lD{)~n{{Ys&xGF9OSlmn3DUZ0?KFZaeCAbj{e(W|v
z(w0phna5xx7<)bvdax)b4O*LZl>eC&J3r6Y2r{@NhwAH%Q=Jzwji9lX+r#yuve3U!
zIxUrvETzTs*GGP_^{L;u;Ucq}Q at MHU1$<umJPC6bni2j}De_V at bB{_96yA=^dh*qY
z*fx5n<sBC!8y|y*KdF#4H%Xbm_`LQX7|)6>eLsG?x!=XPI^UlASv;3ort{eRSVPx;
z`|R=_4;WV3ihGps at wlDr`MepEDPjDWsI;`@r(T-9(<E5we9XRt>Nec3g0b1Xpz+nl
zLu2prBL3`8_=8)9u>E&Ibh^O^vF*cs6r^UPWSsmJv}o at bgTm-3;F0N`qP&nVNiJ{Q
zd at hl%XM=(g8lQBSw<GZ6+pEi|l+ at _^q4QCT-p1#d^8yFPl>3X7L^JZFtsJ%Wi$m}q
zA|oTW=(qs7>{<*sNyNZw8D>!t7hA%Pc8F;|ujvaM7k;drxjjLbqAF~ATQ<758^xU4
zY;sFk)Bp!-R{}TkqR6Dh8T>hsAJodDl_3Xu4t#B*hy94uTqCGEb7Y^QQ~Yo;en{s#
zthd1HS6aZ8FE5`A25pM#vT$=d5JP}WIri%Y#VxTCoIr9`Y~W{1->OBgXai-*+UX&g
zqbk7kNRiHVve4p;<Rds?(R(c={d%3>Hp_<wJh<Jd7%B)csqs;%$zr6Rnx}_EL#S|?
z?TG+x;Ab8@<q7hSV!yi<Wt0<4PScET#<=X%k>_LMT(og23TqpqqPm$f at sz;(I-wt-
z9_xV{w7bII5oGy|Oi1RYWX;m2C%2gCT#a1BoS34fnOc+8v(9W(_pQ~N{oLZ*9IFYe
zr(O`M^0;Jvk>S|QC2g+(j4z4&qC^8&t>Rv|2vlEcRWT9d;E?IoeZ&OYQZ4Z;*Ucn6
zx^U3KoF~51eJaC73q5)fL2l`YFo_c$>=~%T6u4|OD?>#r*C;wvx2}e4a{L6KN?7QH
zlOtLkWgi~c$G&i%vYo0H;w)z{9jp#+;1`+Oyud-*%Z3po2RDy-O}hDTlH*Q|MH8!a
z{mw_TbU^s=?4X^sOR7=OXADkNy={ovylRaMalsk+q{QMQl!3B->XIT<=IPKi7x}<N
zn5DzICRB30{(L6cxyBJefRe4q at 2uYnP&~j$Pm-SIS#%IhlFMcnb6&H{LW0Y2IDaiM
zzu8{p{>?`8{Q>J~_ at Skg$W^`%v8sUku~#j*TY%f at qbA%dq+!F^KCGYJ<@neGBl=GE
zc&&$-YV$rdBO&#IA5ivIa$<?kcKjvOxA;d^66D4Y<wh&tEgQMMfm^7rb8c*i!(G6`
z!NJMMgcXPt*I5|X&Y#*?^98CuXt2OZ(s<9OD*;>W^^d-RE{|DiVjcC5cL<vgg9Z;?
zkAut^YiMzIr&SM|!Ry`iBNQtO0YABcr|-yon?!#1z7h>9d5Np{RnQ@}?l&hB3RTPj
zrpVG%Z0vX#miiWBa~TF;WF~{zF^pNVGKV*WTz#O`<rE01#DC>0-VhWtW-dhbx+nRW
z#&;YG3V4 at g!5JPh6h1NTkcOz;Ueu=pXkRusGvKKXR&%6d#YD1|_>|3to1?yq2^FJV
z9Xq6vZ;B06jcDt<ML5zl)Zp5?SXpdwd&+E*&SW}V5gq67;+ef;ExBb<!H6ktLM$Mv
z5Y7|;TeL;8$tu_v2e at sEuAl7$MdIv=QgnT<DK6Rn6=bV=FhM8mztEMsKtP?@wXndl
z)Le%OX&cYS|A}cQ-)_jz5|>w6E`09e;7j3V at 8X%7Xe57NHeM0McfA?Ux*kU*`Xe21
za&UbmzKPyIY5(QB$b9nhvTko%-^V*L#S!fbPZ3>N0Zz_B_;d$POn|IwEZg7zN%O$w
zyuJ=@<!TM?(*5ZNq(_#BFw38cf{%3Rtroc#9!`$hBq%;(VM~l at Tg~+M51GU$a7b!*
zEkm&ltp4X@!2!}Y_wIRAcJhz<9?mF>YeiSTP5FNg+rtjsCg$IP+Np4U_YJ^<*q&8t
zp&c*$TeKIX3*6O`Y0&r36R(t5-wXxsl53;x0KKO~l#MPVLj_E`8I5&5n?2S7YufvK
zfgvGqzs1eMV%gT~)b~Sk%5|Q~qxGh<=f~eFCEY~RcZJ~HHcNa4oG>zjA3J<wTv@`j
zHlf4!u(z)_n?>0$_)nE at zGYcnLVzNP67rK-Em2iKUT&-%D2F$#lh@&+MbMR<@Wz0)
z at zg_%x#=RJL}o|m*LMx{pQF<>aLlQBjD_%B at 0a_KQ=XTQIIM74PeqgctVi0HX9~j~
z_-S at P#6vfT0c0_J4Sx|9mlmJL5VdtM9L@^6Ljnv}b&W0z863^!#;m0q8u+nHf!y`W
zkpWu1#>ONU#<5ZrB*Ttz2(N}LR$xfEIDikKW(4%pPW#$NQK3N1#=?%6?}3Um3fWW*
zlSbe=@RCG`$<OHXsET_ at e-s7tigLJ<EQWH<m5f)bBOdYkX&wn6?4&_q|Go~tJY%Yu
zwLmn^L|Jd%U^ajh(LnvNTJWO6LT?;?=VQ6v&f&7edzxI|vJE%oHu53F8icuG(aZ5o
zOFoUI3Bl#~=B#a;Z4VRO2ZIkSMf9GSm`+1>at0CnuBxkd&qa0`1j=n^*g+MZUHc4o
zFxGBVp!G+{@1QfwMpy3W_1Qh2O4e>z&;uW0U<y)%afNTu!yT$*R(Eik0HSJ{+LMny
zj%OR)q0#sq^w|*<dfSJ#!~0>~rq6OgZ`pyg#N#0OtT7ut(C|{fdoEjW8#vOs;TumK
zpUYrAY%-f4->mgdhPG8GZ!gy>Q0Wwl6)|%HPe0 at OqT8GHQ}&LBSK03O)rpcE{zC1L
zLkE(^q&HponLWJ+zm`I-T<JvK?nHZ`EULQW at ctA@EH6I;UZNUURMP&8{j!G>NP~(L
zNVqx1T@}g$iWm#@bBx>Kt>y1(jLn|Sb)3MHKDLk#Duh3_p_1Emb}#dzHwMD}Bai~E
zf!kS074clZg}Ch)ztDuT-%BqPAr>lnRT8YWJ8bKA$TSAD??yxtZ9y|?VEK3(F_7oR
zjb-YHw~@Lx-GWV#nN$Cx>}^3-ylgNiVP+1#1a9^Yd|SzMV>GRl6X$*xsj?$(UoUz3
z{gmeTkFGx`V(2A3jD+5)JBg$~KXh%{r!K=BM0SKNj^e!tEE_G4<6j?KVq(3Do_j7M
zBXdR|kB~eSII at Z<&yjnHgS!7>_pv#)<9jT8`t$rgN)HuN)T0;?50i?sXYZ#A<M563
zwE|vA{nSMUCO*TFIVoHgC|DSFnpUhxE=ZisELa}b5j5|DlIW?`QLUH+3L*(`&{_>K
zMl>_pY`UC6^q)<BluCc!7qozue(OuHDQ+|%6i2xEV5{QSyoN;iz~2;p*kagS-&(wK
z&~V1_#t+zv7eAflDbU??J{Um<1~r^8B+VyBpJp<|KqdF9=B1%+P4QkgPV{?NUp?Nu
zHqa|6wVyV=T&0B%#1z<>vsf|)1mUbL$`+>6FC|Fg1}|GRMFFx53Epo-uE3QhA+XWX
z8cGj#VQBXIS?|I5D>*Mbg$VGbSceZh;016tIW`tj+MBf$fls&5)^YLBw)BGClgW7=
zT9c<SBQyaw-tIe1_`vW=!G(lW5)RNa%|9uAb^iegW=Gm^tJYf7LLR!#`BGO=!@qex
zY@}q+raG?p%l)*lg%MFz6sQFAcba>KKT2Z&mdX6sOK5Fuamf0ZF9IT7k40naqY$b9
zsx&~=27KTPu8^?`u06Ywb#hX4IWB(w at V-HNx^8rb<@y*MSFG4suZ22iJTRMtsNRM2
zYl?_hma at 5_iRnqa_d-rT%A2l^fM+MI(Z+Az;-;_>=sZn1KI_-`IW#u~IQj0en;yd-
z#Ko96IbjPpEVO-Om1ttRYzV~Xj#U*8?%kJSI7Pke=>es+>|*S_BVMP6?Bs5#cgpE-
zJhqHzx^F0$K(x^03}<GR<8}Y*txx&yRJDN2%#7ZTwwPa!C>#biTfNp0bN5@@n7*)m
zC)d506^f2og!@9deL~WvnvmehD}-tO-j?MQRYNs%rv<hW>mT%Vo!B#JY@{2Xr_A|w
zn3IO17GwSxwN1J{pn73RD>^1dN@?pc_kOEi!(e{8wuVcXKb%y+;nzkCX`PEDQKOK(
zkBvv$nmaXf<dumNwzSYl<QciDsp}r(DFGTqbj+{S-<?f95LAh%_v$wTk+^`YAtIMw
z-{EMnEy`)-b-+lvGu!qJ!{ujgRA3F|*?n_8ID-w#JRDzQFI%{_h-KoY0CT;Ym>0cA
z=SHub4vP4GdV8$CUg#p6TYI>Jnw>(<&sEDxR_Z}Ov#b~&888A(l!xewYrvfrMaB#T
zp1<};;FL!N!mbz(IE at R_s*-93zu)7!aVl%WH#VR9=3uF1eWte9t<}}VG&jVKZUv3~
z@&hMKMB?mIlhzXc%J$gn$?E#06?|iBVMd^9dfH_vEkQbww}E3oBMd9MLCt-i-P)}h
zY5KDnLZJEzF)V%ldm8kqGINZrETKZX)>q)==Zl7KD97R+=B*yz*}}nXWV^{^QTOdh
zl^s`fW&P#(G-BY1cf^C8Q${>&_SQ<YFgB3v$o4^1g0AG!)7 at 1S1IVimVE9<}dH{c=
zzRA)c6Iy)ToSf?f8hhdqqCd2SOKaz2g-^pBVxGkfg^ct{M-o;4!|~rMgl(HPmd9_{
zze$jk?HGC-;!|LpF+e4`;JiqVF1>m&7wb@>x`ScF&oWx_OWND1&$AZU^KR;$L<?HP
zc?I)tmA;;j_=<3x4omQQ&N`8tV$>TDL?Q586qp$h_Nnkp8$JFg#R5s~VDs?0aafm%
zjCF>?5cE|SR$|g at 1kGHP_pe>#tdqxM^>Y$5Ky`&|SF&Xo$1o1QC88un1e&4`2<;vx
zf9K!SOKIpNZGU4$==g?C6=A(B-I!}w*6xun8s~AS0|7KHJ_j#vFDVAJxA1z)db8Cp
zR~&1uNR5~Z`I*b009d!=-t?C#WAZHvI8AewsC`&~%i(jM=2{*=Y3<-Ky}ka`_jJL_
z*^xS74vB;cG2fe%C+W8iq}G5ZJyNj3dXv9)=1GwfWEc&Q at MzbztC+@zYa6Fq|FW4)
z3bXUq_xbV8R+Zn`Up_O{r#mhh7q at EYSE>lherRFrQ&wD{FwJ-7_&UeH^Ui0hnI=MJ
zu?ShZ>l$;r3C_g?{I1R-sdT<M`O#=aG*16Ir#P?!veJjXBm8P<g at MZ502vQ0bkxU|
zI4jQ1SY_$AG>VEu#fyNpzOGA7&L6?H4%b*@Ck^l9z(CO^ft1NvY^j;>nZl((t>8Ca
z%c1HZf?bx4#N{z4<O?@97r{)o*Dg2WWX3zJBjYy|Zi`@ML)RU(zRzzp0Z9BDe@>}l
z?fUWBU7v97dJFPTw#{XjHA3Lq<#aI%KnJ$bp{$BeF at h<+U2b`3^kA4|={Hx+T-GcU
zg5<-A2_#T6OV*aI1+nV7;(f68V)1KagO8Jlb})xaI(SmdtW0n at IjZd?8 at M+YYZ*Sx
zwHdcopsd??w5UhD<_>xwI9g(BfKw0c{cA@@Gv-4v)%>IUAOR3%P{{v+CCyz%6`?E*
zoUL{bW+<Q6ePF=$%D{08%5azYq<7y`Z*^O`SXW?(H(F+9<-=Xjk~z at yF@#ug$$8yS
zo08kG$Iz3o&9>M9;kS4lB7L2(XOb8{!P1!DE0Ooy$=H0)ez8^`COOI83hiGTLF$+T
zC>6eFDu_fgwWrreK#cF+Dc`qL?;qL7ZtbI4pZh%dHGWzo3Ks@#Gc_5{sBo6oaKr<E
zV_ at ex0`Ycg&G4#b(n%Gi<7u+^3e~O8N_?Cev{yX~2Z-!K(0NKgw-z64uZ8bJfVIm?
zyZ(Sl9M)Lh+FBo!bzy1GX>(`S5(8PWm8p?FvS)enjP5JC{)@Gg-Eqw&7b8bA%08^E
zw}vAacV`klPJ?L!nYY6X;`cTfDFN at L?)BK at fMof}Ql1nZ^Qnd)wri1SdpipOXRFG!
z99DMamy8IZ3c#m(OTd(Db0~FDU&P{g?0I8 at kIhfYmmcI=I|;`Iof)z`K|^<Hnt>L6
z{QHmAinJKZ)dv(sJ_A_5e*Ugb#~Z3gENt5YH)TrU(f#p9?H(mxto=oW^3>tiikuR_
zB%-Qi^=^Ij?AXC5yli%0pu2qsrocv3kcwz*{V3}_NnnHR$V#peX&;5La&s$_xJ_E`
z8~F#7F6`lr(p8VKm~F9pkDB$R54RmmfPTEdlg~abkd+`_Q*KgVct<XcMAU4~ED^&}
zoHBK)%8~#smF=S`>BAoTjQzNLpRMiq?EnMC%@^gaK-^EH`xYhk8lq2;V&A$oj<E+^
zxC~k8T5Eh>aN{ys+rIi(N;#tcx;IrP-vG3~WTrTpxYHz{qpNK{qdT46tazWf<^gcC
zYRV&-O8I48zW$3$tn^Kz6gf@}nMEd2N|@5oveMRa_yo3D{G)y0?6XwLU&%4t(syk_
zGO9k at Pn6+Cw+wGR#y&}cOFXVHId70{#4o$zKXN+xdUGuWp~5`dln7+FVyPexI~$~J
zNwft^K+vcfnZwm)e$S(94+o?JqmOS at J)%!4>GQC at ZJu%`S`Q8`B{gkVr=8^UI~oEy
zcf?~ge6(cZ`iz&apXQZCC*Fu?7631;%hb{mznt%*0a0EUut>bk2mP<W(Fp5N|D*TC
zf)T7b&rIFlUl4jkM at B_Jh=Vt{94tahAt|4GD#z6i&lRH+e at SnBW|%0;KrZ_M25Tf1
zUUFZRLj~5oFMpBw2biN|={s9b3;e`Dvvj&>^h$5u5}dBCnmVx}bSZVS#se!iDi?-c
z47-l3<s6Jl*LZLYujU+XOrEy*I3rpPSk<0gd!;i^5<bbF;1&?hiPirZX&t)uJoEew
z^T^HE8%#rKc@~ph+b-Ar4|#S*$D~HLE5IN0=ESp==P#jF+<bXBey17C!Z`(=H;n}i
zGF>c-ENcSDOb~?&x51SU2bT0rFQLy$#Jm&=U}BbnLtM4*_k(qrfS=^u$vzyt^`&ny
z_T?+o-CwqNnaN`)D59uG!?iu~i at us$Jiq-ouh#co)cd9Naw*vbiv%HBa3Ynu^{F#d
z(wwAxeEOJi#JJ*&hFx`j$%i at 2*DrbR%;-69X5f%`N!qk6K0t91Z8fhupwd+TcklT&
zx%^cDA#mV4dhYhZ0s1y at Hmk<@e1reN-I7%M&~9y7)rh6 at -?;#9kc$S|sK{1UYcmJn
z1DEXw;kwl8&b3s0P&2Y1#`ck3ubi%WD3IzbYH~`;BuCZ46Hp6P!0u?{0o6EAlLg<Z
zch=V_FH_(8-0X|=3$wYLxSn>v4XMJCeekj_U(iB*1nP1)Ks|deyytCkrV*Gj?UokA
zR87L(Vs({<4v?Q9f0J<~%oe at BoK0{(_oG+hO#PJ~%{zbr^!D_)@(BsO8>>+3j3KPr
z=RpOq(4=Es403F(@>CVlysbur-h*KrrTMJ<-CtrpCmQWO+zkRbqiSF(r<$n<YJV(4
zVsOvxNkia3q=>n9#n_Es*}5$y0gz0>U at o@?v4}!gGpmKvQ(ElB#V3y7%^h#w$X^>$
zM#q?r at x_7NaflHEzr$Pfq5y;2thC=BFtu0!%}iz39>?=CZEHtgLgVZEO)hK6caG!Q
zbii2(4uJR#^h)uU?}awKjjqeloKT(ih1(*h!cI$RP>e;RRU1-Rez<H~Bk9T&5xa_9
zU=yrMD3N{R+SD0~MlN0yW}}$r7XNWTq+(EpsJO;HSv|CJDmO)<hWiI93+3fcu|Ute
zW2tU(xiTVIdIRJa_w(~z1A}j0el3O}zUf4R6|)_tv!)u;u_K{5z+9J{w|}zA<ltBd
z1asOft3lh=^lL}?z7=$)U`P<YlZ_`paFfYUYn`zmbiKC{g>s54YO#vYR93m;^H7&v
z6UND|-~Nm(M;o;LHH)76o#l}E{^KINjD(*%pJk#6^#JcIJ&cB3?~nZi{cvM$b%bi?
zo`<h8&}p4$-7$W)v)9b{J4PxN53tGFmwKDk{q|-+zMxfl_DCpTabO|7p&R7xO2V9r
zgU}pDd%&s=?TC>5rz|gI#p7f-UIWKZ61JPb4`H^(XtRemgtS5Yx81BuH at oYX+!nov
zfboiS_b=VvB2dXcpmCvL{}E=g!KqW<*Q`#i5c(0s?1H<t-ae4SDi7Bke*#+qoPyYu
zAvD~5vE#VEOok#W2ODra%6NOf_W3dwU^MT5SuG;H^$uTc1q~d){ZepWV%Jcc|Ldm;
ziB|%O{riMmr^1e#^HR2ejX)_7h#+L8ky{1Ykfw>Fip=}D)U)K?Y%_5!nnn_m?l66G
znam%rzPa~q!U5X9-4L<R5~^T7bbi=!+hnordwhY9^*GdrWysCG?AkPdcd7zjqEJTl
z`w{$$%^<1Or17oSFA5-EYMSSiRWW&CKDW>|-X7tAp8ChpX*gej3Iy|(*;A2S!OL^Z
zZ)`ERb?56G<FW0J*F63xeRAJH0nk2*YO2x`{@qFVXp%5;Dxb06hZCrY^9VN1t-jV_
z)O#FV72NL)1HI5lo6#5Wf%R!LR{J*YwCA^?4VQ0WGq>ygBcDEJXa`J}w(@fz34kVc
z90Mchd*&kI$dXc7VGQgxVPIhXI{vLQ=EQhu80&3d-lcVLHU#%3Zy6KAu>1FKTJ&XN
zwX&~DIT=4j^2@~hxWg<jtj{g?t;(bzU*0}EhtW9LO6jOACDl*5<D139(c4oMj9$!#
zRNOXP*oLfVA~vj5Ee8~sjDKi|UB2A0y-f`qKlJ(9QW|Ys38D<5*VvVnE)Bq#X?^q?
zQT1t_Y$ZP}aU(lA<AX{a6(eHiO%E&0%tHGL{hsW>?>_9`T0}&FpZ14q{Sn~ASZ_sG
zVg2xdyE;iO_uAWV->Sb~YtI(FgwGo2mC$aP(`L3S3B!J2oq79F7ARerproA*(8x`g
znM0?}Hh2+83l!iE>pN$8mv^(2{CRV+CiQ2h;M<~uwyjni2SdJqiIoox3Z50)dcDhT
zCZPzeqF$j3FZ*}rC&|q!bT}o_B*X+#9?fOM{C(}}tm at 2MIpn}yB8FM$_t-!a)M0($
zaC8L=8^O=%_gkNn(#8#gX>zk>7wzV_y`CqqicHvsINh3$oQ)hc$L}G9=-e!5+uXE@
z;cZL{Y+)@Nv8-*^AVKao8~Gfjc|*B-t;J$&U)kBnVssP#cm6xnX5RveLwBJ8Z&^dQ
zhRsX2_;V%~P(*K8w1rxwkpTanvuAJm`8XutZh)6Q%k>g)ZSRHOa^Ct54LmbuUVdG#
z!UDK<zdt)Hf`c~<bv0SYlL*J2y0<;xgR<VvD8tF`D?+}glJwUK*Ha?|3Q1($4x$Pl
z$h{qglc`N;IOPPsnbn`uyxnOhD5`1z-&_$Y{8>HC+yrDG>V>)CW*GVV=WYgV_dkZO
z=T@?oLK7Mtj!%=k`Eo{g+-5DAGPtvqKD+y*S7!Ejq|OUCURZNqFwDK|w at tkCC0_)|
zDp$his=w6cp)D{P-<aU|nLfi3kKCv%!!C^&co4q7?b;}a&@29Reu$TrcmD|+RIq9>
z-Wm|&4M~!v?BWuODn;wB<i^`p?_+d}z9}(;G<&L3lvp;cajMa4X#-aT1aNIeWqKSm
zf-c=de2}92hp(MMJlYFn*K&X6!MLN05IAwdfLFi!!Fs4(+qgpKLo)1p&YBm3bx8Qv
z_CZE(jQvSfE*z0F9+}>5-~$-p`g<g;f){e+IE#9n at GKnA<EPSm!j|!DrdZLk79pBg
z<*&K(yykYwhFx_#L at Yj_O9j&kY!4X&eZZfHA9xHL<-!0u8ew+CKy=^_&JKc1=-|68
z`_BJ*NYH-*YIJ{;Crvgt=YK+le})ed0ueD#=B&o#zwX=yK4Xa=9Uun&Y)9aF5fcHp
zWAot<DllU6_h1R>Tn(f`&RayM$^OU%h|1p2Mm^qgxIB4O0Z;vVkrr26Z^-`s{)7V}
zj#@tvK#}vXEA+6Ll=MD;@!tb3{6vNP>GS9I;bF`?DBhS}5M%{s2MueuTKM>}O1#UW
z{3NI4--FN+dWOAn?78A32!@beKP4#I*?qhUh;TYs?$x26emtKQe7IZY(OF)Sh<~Is
z0p$Og9XP+ve~$<p))Xf=*?%8=f1-{5I at B=C{y%hyNIU at MWWYlqU=?n;j-vrsuNRr^
ziQ7u@@2NZLcf(1l;aAkxzmud2TwFA0^1c4p?QLu0;XxQA38bZ^p+o-RsmOc=5J^Rc
zhaw|}M9R=a%H~9Nn?9Y^1OF`sKVBZb-55Ja^2>ND#ed(qEhYvdw9}+(&6y4tg<!X&
z$Wt`dNf1QyViX>|{|MlpquH4e#N%?tG_ag?ir2uu!!Z930r*yBplv!&-FG0EQEusA
zZpOd)1sn_~@TLO&{eK8Ig^C#XH2E1A|Ne(Dvvu2n58d2M{~@y`D-rNR2N4v!zaj!|
zfe3Jt1cP7x!xU;Ipir3-<NuqrX$qg91FxTknEq!t)xi*|DD#*9a}cloPYt4w1^D at f
z3R$W at ssD|FnDfJ?;(b2kzCPADTVY_gk;PhDxp41PQ|WoDhB)ot1wLa1WwV<*-v$*R
z{29afS!rF%PmCl at cT~bo`kQ1Xjz{XLIBaxXRGqYWdZWqZbH=gRf}1(fxk2mg*}PU1
z%eCkejaf^!*oU5l<t*8mtH{69P>TVj-;`L>4Ixl at 9VxKErXydqPsGueTB6+gCyE{X
zA!lk@>e%==jg||KaKs{_{ZFj9hV*#6-2`>wa|6DrB7&q7Q7tL+EWS0M9QB9oUs7bh
zH~o84dxSuSPfBb at 8`1Dj>C3r<d#p6Is}b#|=1O(XHlS?^{(1je*ew{StiW}yCInJP
zP0x3RNj==xk at z<d?z!m0g{MfWv}_w~)R;#!=s^|sj~1f*OUgoVz|N|BGME$%4b4W#
zo<CZ5$f{5P6F8MSK#7D8LAGJ>4^;~eo72H~rdM54#83Vpss;TQxwB8W{xDSG4qTfo
z&x!VVg870K7cvmXO|HR-4&K3yoL~U?n9A3XW5Ge7sbvMnJz|K8Vl1;0DS$IlzR8#)
zak6x+4;kmG+0fI^|H{wsDi}v|^Pxg+x3P1W`1p3^90BJYnHbw3vNQa>xM#CN-J;>u
zoj*KneD;W(c~*4}LSWL>!CE}koj6C6gTR8}_7d$v(5Jt=s)GEV>2c=h$eNseZaTkT
zkhaQqlr%G=1#4W#UK+)1JRkti(5rc~zkbERz&P*8K>@#?c^MbJLEVL>U$#sx*Jb_O
zC1*@%XUvqM+eA%&!7`-28s)q at R{$oE-5daY7P9xP3K+$5aiIl^ZvDn)W&*u6;KCQK
zsXveKM^ER5L-(zjW|BMM?eD=Sf4Hep+qvzzP+K!*K9B($sCe6%nZfOl>VCC9IKCN<
zD9uHzRwW_X8M8~yq`b^0j%l#0K*PcJ$vh#!nlC3-M#yA4_p*2B?ULd=oJjJU9zX-)
z?iYLSiS`}kq=VEN7!pv<F^0CXoV2Y!Dg9-6N7la*uH^^J=sX4RIVTe-pYkR(v=}Yq
zVtKw#B9kGBNDK?cwFjm!L!vQ&l|4u15)7MaW9mE&Oe`RTlk^M}E-Bk3hhA`*5}i~T
z at RV{bW=<-LvT17W_|Cu&Pl?V{oeFs#XOd0$c!k}UyECpwB+VGZ8&c84;pmkK;{-9}
z@(7BOsqbC%W-Uu5fupNszaEMA;cpL`3m!)U)BjQ{U-PfpC<Lu23b!OyT6iuKeq?K<
zbD|;QR82vE7dZemoJCzEwp#5)j?kf at Z_d7)i1ul@!*5Nnk81D(bk*oKUm)-KvrnhN
z*_|O&IY*^mqG6n5gOnAY+O2FK<ZFiujMr~eoU&hBiV;3OD4+s7;#Gtqs_{R(E6HDj
z<4Od|q04?jhZp5GR#_}-kbe{+3%JRFLZw9sq$+WK-cfTbjOf?I((n`8i3(-Sz-wtb
zB|x`>=lEH|W at YavXIt5xpBHXXRa=`=UH!!1gsJ}5S0y;zIgzoYah*CpjX7!!|0)u4
z*eLpLBA#IuA(}>~6(73!*=me4K!k+d`?B&FfAV7Nu0?lCpr!Su$HLX!?Q3&=TXQvf
z3SW{-Ax~@Tu8Z`SXwo4sn9WDHJk)aoA;=dpDCnu*$mwB7EH7AxP3(ukngdNLkGbYf
zH7{O+mV9xShvTFGgNB%J1jEY3&5FUN;QFa8QRVfpzJInIgeC;Yig*pbQO7Y2a&MG@
zXYjEA3H)<uH9LeH<Zcy-MAPPa(0^>}RKTp;xy8ssOW`)>Svwe!=+U2JpaOX=H`o7)
z59QMeDIbNw%qRk1@;fDBr6jvhwo3-|JeJ)!9(@jn_PBTMYuo7=cn^260~npZcLq?j
zXwjq*_Z`|~h&6%`LLT@(>waziIClAJnWpTCPC*M#!{&{h@!aSF%I+3CgKP;==E)Pg
zlnbvP#Gz@|A{ubRrFT at tAdbK^GG_uY4r}qr*<O^r6rcMTP~tC8OULksg4t_DJ7AT^
z8G`@3iJU=N%Tj$+<Z99uN`#~ux<Q&++4WL}y`X<8_!BvyzE2*-%O`~;`<$Zla~IFY
z{Q6 at X6gjZ-gD;xdv`8Ue_~Gq_^eD?fM)~Hph*~q|iCTQD>ybK2-x4^SOi)!*GcXmL
zJUn)15Eq6J;<Ryu6Bt%#J3w^@w?Z+HrM at _s)hKSfYL*re9mlu9L)M<R7~RDrzgzVj
zthzu5=1Ay=cM0mo!18%TP at G|9ZLKvwJ-!gE=J)_-%KPi!2snxynWKgne{b<Ao3c{w
z at pjd<Z^#Hh$imCX$(c=cB3Rsu_?IAQfzf2M$yAJGFr0n79p~UXEs=)?ZOqEjM<()o
zkZOsAqjViwZCq!v^T^1ztz6?cWh57;sJ=LA71_(T)$2*V(Zwexcb}|o9&PFoF1BF=
zp7Ne-|AuSpVb=>1;m*vpsah+2B^ybLd)B#Y*cLh!&CqFG0HzAepB}z25u_=Zcwg`i
z#XyILiwnWFvAsUZVdmqAg{xTQxOi*3u=fyxfV$Az<tNBMjBEglg5RsRy5XLp(AJSC
zgn9U%`#sAr6UfR~R`svHlWhl~p&AmBw6UeBIFvj>9F=SOzjVcWnFLum&5N?Rx~QfN
zej|*bhEM&TX8hLqZhxcrt_AIsk(W<k$KV-ASjq)7+6;nt+>eo=rcRz6I#KEVl3MvK
z+dpy+I#4 at 6Z+Ye@Z1rfL`W3>ykKUiHEc`BphmIJ&S;LB>-1=Fb#o6==q(Fmfy at En}
z-nlLs$I2)r?3yuZ*BbtuiY3qHmiJ&MWs8suBM6m$C<c|neQ7kx($_neNe>!is<rBk
zX6<ERo6+vxJ&{hJ9Fo%$LiatB<@hy<w>=TJM|OPy&N=<X>OXTfg&5Pf`bY?qDm?1@
znel|@z7@!({;P?E8+OnDv&O3s(T>BxdO>w5?#)kh>c1$&lj61w)TZGVI*;z at eLef%
zc?jno4|_3+KbR2XrOold(Qe(FU<TB!hjdoQVu|Fc!MI{BheeJn+ at 56WK;Ow at 8|iEu
zf8{>E>L3$8a5J$Ii>(&oc&LYk+0JeE#&aS%u>Gpt{Jz`bVNKB-3&<XF{OYvbMW(}@
z at osq^$1!BK73Tlj*vg!o(kQi)FfK%%4);^QUQfhwozq&kV)T+xhoi{e)sYJDP6iru
z&gN_Kxz~|H=vXBJ?=T~)J%T_0Opcuz at m~;$yPOA^&*hidpy-2>J$aA}nSf*ckwh_R
z19O`mhwoK_IVO0;tNHs at 3J2P6LKgPJQCJ-HoM)nu)Vrcf)|HB|7T!3B_U}pQ1|uIp
z$5r!lxpBE#sQ+R`0v3SQYbZORQ{78iR^a{-@};0HoLm;7c1``#YeFza_Ik>U7wU<T
z+v`4icCR1b!h;UDc=Qf!7f5F%A&2Wm!wf}>!M!l<ruYdKz<RTYX80+Fe~MZCyrlDb
zqV^v<KlaNGv~AR-OmrU>Q{8mLK?;2z95~YwsmUEAvq#?|n3X|tmxdYPQ0P>K+Z5)0
z6eqNc(h~5 at We-bS#*E{*x8}|bNkmjlQ0{wt1bLK?jm|YkDj#Zq%d>#R26m1bT$DRs
z)=ihU2n*xQEdf4A;A+-1R(iqihhpqyV1Ax?FVp4;jzyE(I%u_*EO&(sjahNJyV2Yy
z4UY0P0>ws>d3%M9NcV-Knu}~+=2waMh%@@<Jc!1SrrqXIOmYEF>0;S)aO6_A^BKv3
zR2M?>NzS=YX%utr_IKHkSANp8sd{r<yrP<8e1LN90=X%K3R=0^SK`e(3CnpH<!+yR
z(}bePrQ-51Iq_;2|EF^OzE!whg6^y0!)Rz*cxg5*ag+oraVL3f_5JM3Wb{QTHM(1J
zE8>dUA2DC)_q}v(CB=KiqnnC)s99V>z$yp*>jjS;YZ(Cfp{8!jrPjF>1RV2z=Jstu
z3-byz87j1FT~77OpE2<8Q0QnNcL}(~=Vd0!^0eSD<vR(%C71%D at 91QxW7tyUQlY*s
zNEKE1ymJS`{m(M-ndT0D7HoQiKL0jhP1nhBTp;W{8f8oqWGR$2*bKvRP|UeYTm!Ry
zJzJNfjC{F5*Ip>S&UmYL7x{hS#LfM<kzWK%nK|Z6l;ozTVe2~jPIgg(LSuRh{rE0l
zlugG*kp{Od;)L(PdM2*iw}tI8mE_>QAE)0s4liYqtH5Z&+4r&pU-Dsh;-~=04IMyx
zM;bx+&&u<k6Y6rXN2-MIZQZP6Teef(aepQ;&UB(JCC#?veO?J}JrL;{<|>lX5LjaE
z=dMJxKutQQLin75mhd3M-OvM<C%Ym!z|n_l^eA!G;0Y(Wr5ggCg=hD#W2Og1o&usf
zmF_bnfs7A}mhkX?Xhh^YQW`<b9T at v~5n2E29$VO2q(Do6S!378-V54=xxK4_jKB|?
zhN?95vcEt4jLjr;23I>h0j}h at 8UN#n(8qqkmV<$CYmgz^)16dEBVRl-yl6=A>)&%r
zfJ!;U2}3!Zz)=rIm46EUkSHtZ&^ptRBG7zAPnVyCu at 8UbNUok1fXTcWy{czFlOj*`
z6$OBM2M;YJ+~IRqpFO1y!%wE*=v&=okxIR23gG$j`F%#$656#$L$%A!v&Axgz;2I2
zn2+<<o`AlQa^vd`HMlm!5DdcTkeXLl=yMEpw-~WnQYq1^ktG`@A>Etk(%(Db+AiLG
zS&)+z=}JAxg_4HZ%qk0=cvEz4u)Df3PrZA1mlM6hjahoq!L&FDL%qmYMQ+OhtFj)g
z9{Rd&REXG^t!9=Z4xqk?mKcIhf#RPYSwSVO2<I3WR(5tWX40TFKfgMd=9n2&DG|VE
zqTzQOpYo5H^*w(MC_f06tF<t22;=wQT1Pcy{TAw7>G`o%NDep7K_O?e#aXTrvVwqB
z<JQ~#?Sm3t?s~Y37sU9D90nd^rw}aWK!Fw`jtKC-QIgOSWJZoWXz5DA5fFc{kQE@;
zp#*k1#dBa}IqH3v?M{*yl2f~(HQ)K*Ipj4`k}iC!v03L1bc+kI0A*#Onpxwt)Q&`5
zJR<U%?4s(UDp;<6t at lz6Vqor#oo9UioA*^?q2U*5elLlQB%{>kcjniDUeC2KSzCY2
z-xM}NbPGauossC_deH)Xqbdl)R}mN;liuh;E_rBZpLPaX4Q(qjc;4%9>Kv*Xu^mwe
z7am6XX|DpD2fUuK(Yg3&4xO88piRRxk~(SG4Q(6ny at VDIUGH;}7V8lSAb%&F%X at z&
z{1 at m@vo2%@(7m*$wwr2#8}|>)R`i&`YJ4-W#E~-mB+ieatmraE8xL@|mg}>Y`tcUp
z_EOSNb at X$9!H^rcF at J?ZR*V*J9$fBt%k&}+J?<TR at 7riqXW2La*I16eT}+Zt4<Cpx
z6;j{>ckrNY at eZiy)nh)5zrh6SUS->3^v};3+!UP0`1yG|Mc+IR(6((iFw$fEL7h}N
zXiQ at 3hgZxm5F9T^^Nd4wNEY%6j6~$((P)HgXej4e3~8>Q%c8-DVGQjPkx+zJx8f;>
z(_YMB$mJ%{tdX+c_)U{4VU*}BYY74}3!bP>8hK9~0<e!g;SD#LbWxQ;*ysV#fl7BB
zK&Rkv$)0FqI%h%{Axk3Ccob>gDP{F0W=J3IA6$mz&-Nqp7AvdY1SYY}fz26qw_`ye
zVJCBxf;MhJpgrv(@I7*6<iy)Iz#w`9!KD`!z*F;O&bqx#syk?ac->3VyWU>c{6LXc
zDQApuu7`YasKg#B?K2vBv3v9`J5p1jZQao&WCRqR^I3B*3>nI7q5Fn)&r%gEcFX+^
z-C|vIpwaF|P4PQ?V6aF2mDjr4YV1_cjf$1t1}QuK%Ov%f at +7dY$B}MKnf5YwY6dEq
zz}%C|qk(13Z)DHbV)TD=&s}Ak`e|<ioNIg(G1{g{WI*zDF*ya0&Aoh&Gh)Kc_hixQ
z^S><IDMEnZqmJfuHfX)7#)Sy2F0;4PB`%tKh<xr+l^96#)7R}e)w!4{xE&a-i_%$8
z1wF_~{mXg6qx^j|3lGF(>Dnag+NRRgR~M=6_IH)O`u;#Z%7WCq&CInKRU_+<-il%s
zh(Ez#GZrCPeObT#3&gu|-erD~7S9WH7zMr6-QwEI)eBC*cP(1Lory!Hd_(#5Q at 4;f
z!JAX}%&Ex=xHiy7wvduV&-;<AI~NH04A{uom6D^=1t`iq?aaI>W3joVYpRQ`Sj5FB
zmfX|<H;!SqrQ=|6k$n8vw}@nm)6 at ZR+aAalwoO^q<3+Tk)oc-7Qmxi at UX#DpV0KP^
z2f!Khh9zilS%i1O(DH}_ws4g|->B$dkcL<50Z)gAf=unTQ+RhnS<1G$rZ}-vktIH#
zFx?2|J3UnI0i2f&6Ic86dAWYGyI@}2By8!{0>=pKVpy`K%?l{W9BW0?P$nNmIG(}0
zS}()Md=FO32oufnjtvh{q4hb?1Skd8h|SzuN0$F+RUR01en$t_#)1l<#k^#Fb&e5Z
zWqsIjl-Ou&Wmfe}Dr(HNGn%r~fUQS^g%lMb at O-P5&A6`eWuUo~nXQCxm^*hryvhDk
z+_Oo6uge?V!R@;4L(;Qum@!b^oN5^S;fLe<^#k8D6w}ECL*71XtAnn at TB&yBQR7qe
z1Qd*n=N;V&XNx%Q5cYL1RN)eY+`)nN*SpwF{(0?I?R$xP;7ZCujDwu2ahLrTkZdi3
zmgx;7K2>1zDtZ3Pc>Bfz*Cs;~l*nX!7o=ynsbX{(a2RB!J-OeMwt%rx=}0crJN#=v
zfI{!zxd66u at Yz2??Bjv*L%lWNC{7~c2V^B5Kk~kuK)Wn0wxug&S>zn%yO$LFY+bk?
z-~Y4Dcx{Op4)|YZiNRHk>L2)NRZ$L3ZSwFLkH>4N?OC!50&bk2Xh$STYQB!(eAmsG
zDt_z!gqj|hT&Vnjdps!PzwAGH*gf8o?|_+I`r=cg``0FwoN-W{gHUGC3t4RJI63Th
zT{v;Q)QKO}-uyc9SuCGTKe}0P5?(~^QA88qmV!5|#pBN-^go2Aqd8pBPH{4FheR$%
zA>?83r(tMl at Cy<)(J#Z&UY`3|R<`e7nzV0+&Tq;+Z#W<t(IqA<X!GEp`gPgfyb?OZ
zkkMPe5<Wutbl>CsKLV))8VxMZw1nA=Z7s1BTac4|aqPknzIAKz-)XQgOX5$+%i_(<
z#h9_C%W!AND#+W!;!)*J$meMw2APp;yOIQ-q<;7~J+DabGM6B$(Bf|FM+%1}P+pfJ
zE6hey!y$j at Sh_0<6lN`|D%j5}Q++0g|2UGOf&w}l@*C+AK90<h);K2DOC7f~GF)Mr
z3NoGou_fhSYV?HUgfnDy6AyUIokqr+Ba!!drd)En6CEs#&;8x}n5yOG4|JdY7uH=U
z3}~`^R<hYCUsDu2xZ*QUk|Vol2{aR7j|kSgl8*3a6U*@tn&ZO|_xb4~X6R#6`(HS?
zCo8nghK(A(FD<ob8Ubq>7kzqZ`hS7JSDeAcScqF)GUI5ub4Cfc^M|zV8g;B&a^NWL
z=1u%qD*aziuV6)?P6}pvZ}UBL&Vcj~rvCo`hW=j at _`e6_|6d-&b1kGmpH+jsgK!*<
z6Mw4msOGC}B-!FQmj7lA9ss?LYr#=gRW(lEukLbE<M%y<4&!D8Xtc&7o1GNiHFyz`
z?sy4s+9ewuQp)N0r0ZJf^d_Csl{X6Jim1-;WV$q|-#Z~K)Oq*S-<BlI%qUV-<cYls
zILz!X3WwG4S7(c;%qO>s at K3_-V@=M_ojvND(#piTJX^<_&%Olw1iLB+byxVGot?Ga
zdC2jHYR#20yDV!(kCblu#x)Y{!fH68`*ZZ;{uA68tI#w8h>Rk%P?8ZH*YdI)I-fp@
zitdj1Jg#=$5`7405#D}AgVWO`$*)gx85%E7S6<8g86)F{0ehNE!0A@}AZ|f2>q7XQ
zm}qmR*vKazLLbrzA~K?`^IbR_P9e{GVMHXk@|wn{)ty at lmvWp;5pnlx6m%C=y<l~W
z2pG)X2zsX9>Tgik4vC(5bq at LBLE|HFpK#)J!TBA9g7WF1MH~;-n-LE`?2uajo{9Kf
zq9%WGI6tvjTTD#Tu9|QeUj!H*WYbg!1z4|Py%Zm{B$DZY<?-H&#V*PaO~}<#z)1=h
z!mRh?I+4Sqki#xN;A5#Y{wde^bL3@%7SVYg?3>e84O}o2O%iVWkyucD9+IDjMTO0g
zzi<^*ga at qR2VoDbGBD#|X-Hwf{{iD0;<pbf!VcKtYN1T;v0qUtWYyP(b{!OxAYYuF
zedz`NcJK|VsctA!v1xf8k{DcE1xEmXeeKg$3*UqMOGakwbRAhKk78%wYLrnjQG)fo
zb!5StRiHc%tFjS=t|Q8Zhy at H<Ppu(R-0*JVQNL&Y_B-H0j3TkLzJa4TMS+GhKvkmS
zWHy`x*f|i(kagN_A>)pvrmA&(P{}$tRTcOp*GK{87rgV#_>}si-C`mc&oDqgz?cEL
zIf<W}Yj-5eoto18iKwPyVG6<J5nDDd{pAwBc&)ldxlnUo-zJ}M&wdnW`nPh1QCAXY
zWEgN>>Y1D(D%MT#LW>+`_Ai=JoxQMCn#E1A{s}_kG-rUu_nDIXvqja+=Dpp1{PAtx
z at ocb>sgu^NKe{U7ck3F=M at 0i*X2Psnb|Fs0V#v1PLn)R<6h*No0hdFPR8f1ct<L8L
zb_2^<#w;Hy5f-+lr^+GZpV~^t!<+YPXI(Da><*-jvbYUqqr=KSxPWUnW5(b4R9kg~
zug*obYa33InG@~j@>p{&2H at jewaHUNOZ#2CwJ?@QX-gIt)70AbHOXg~0K?+0;X^ZH
zSW4Y8<N27nU_AMdz!A3ip&7F#xt{3UIT7$Gy0QqukkDVglh&~E<Tu<JKW|@|$J{q#
zb}JsjD?2<poVMB5Mn?<kZZz3KWomp?aZ=V$ZvRhds8!YG$UV-~K%`FA2-d?HUq}X>
z^uGf6H()mq!09#S6+?1oD(rG)S*KT)D&23nDBy9kNWJfT&_a^j at A8O|x$E|}xwUg)
zB7_u+a<Dy7{M*D-o1YzH&3aoo)&%MNr$!Eg)0>I&rg9E-UVwM)qO;fY<cjNH`NObD
zjd*9~v&dvZ0CS<OuMgQ_xg~~FfWp{*L=Yfrdc<@1<TJ{1<grjc7eaB0A)0)s2X+Em
zsqt- at 7jQ81rcL)4LK@`w4ue*XSM9do6e9 at yb}B<sg<ZN{UaQ-WD2jf7Yuj9fhgPa%
z&kAsd?3WOGX=Xp!J*EW}iE;PSPid3bB^3q4Lqp0|`LIx13<G3n;EGJboo)&b^v#0R
ztB%^9SLhg6X8A==&IdMAi*?8x<jgeiQq$7L at -r(bl!u0_9BiaCik>(Rc`3)RZSC#J
zSXzpt^4f2C^g at u!`E7&SH(q at jvZ&%Wm+rZ_K<V^BFB`T9X_++-y?DMI6N2ylN<S6b
ziTKvBaP40qb(Pms2!VPN0^g3dlBNBW4OB}Vad#098Qqf#%0hJBv8>L!i7tPFDZL|a
z%YF=d2FxHua6}qAA+?WEj9cTVjlA*aWQtQj`yJ*7dY;dU^VH?Pt7AXUYC2ek+bir9
zm#UHkt~?bb3<N&Aq~q=x_}xLHB+T;!utZ(W);I3}r<LPm2UI7P&jHHxA6Tn!UMx31
zAM&%9Z`n;2AmMrp{j!S4q`s(!o){p882BUs14t|XGQ2lrT*yj_?mkCz4KZGLCwsj)
zt=8%-URM3&9OK-|iXzw at x1!NV+{i4zU54_DNZBmgmZ9UMzUmQX!M^o@(dc5Qre)4e
z=2V`D$OlZbR~T3Nkx&2=8zT%mCGQ?_fyV}U3zIHxD(fHRC*v4Zhz2AaySed1itmak
zDKAO4-ksimHwd}xb($&;HKIVaxpIH9bWfCtF%UGq!qasD`*u{QN;;0Q@|^eG8}&jN
z8q8ic>w$xNge-h?M8B&S6l{V?JgB9ffK~YU5>XFW=+w+o_D<jk8E1VaQ(V7N*Q8q4
zq}d(gGP5LqRcCq1c6|30YcZ_!*HUG=L12=xqbUa0BOV{G&#yR>H8p-?4LRV#U?_9M
z8v_=eRbUT8dP`bIkCa>4LJsc{jO at TBzx!~m->aZAf6?0MU2W8SvHx1)qkjZ%s^bdd
zRq(St_>d#;9Lfv*fcMRB%Lpw29p+h}9EacDG>>={jN$W=LGoi4cs?83SV`s0qNdHq
zDOK$9emd81a~WYp6TY2t at eo?m*&3;t_*^MUO{1~H`>QlvV8W+p7RR5*0si7*<?`oX
zS;-0 at X*C-!X3>wO0{=IlM3Ze40<JCIJG#(OZU?MSd^znuiM(o1)#M30Tag4P*s0 at j
zKa9fr3?9RGoYHP>Z at 2f|vEw?&341GxC^)`uY+1_mjrM|nMoo%-z%IW at OymJ(!(MD1
zn5^`u>MTx>rD?!nC0A+$x-6&Zuww(>ALI{AyPj5i34CrV^o>Pvq;o8hycdqV0h~;)
zzc=XpxW0gfetY`}-H`hRxGby>*f!QXVq+23P@%pk?#sD$7(twDQAC9l_<?=NA_ki>
zMSP<z-$A}4^8=HXmd<Aa0~#S<i6HPyFTj1EtdzvWAd<)^uf3R*IA5&HgijAgE*{|8
zB#W`gJ1F@*{9`pWAolu+%miR4x0*TDBv6T3K_jO457TKb7IFegRPp$KO#7~j^4i*n
z&=29Ca25O|l2kxgR$89!1HKFhxeAFUil?aL@%FyMc7<uj;<!yXB%OZKkXrIO%TnB)
z`@+hFKwTilpQjEDP5kuO;BBBR5|+4e{;hQA#Wfl8GZ%eB^Lh6CUPd?4QmZn?Nb75&
zoSLX{OFkF@!hUJ at i*p{SS=btKn*uW#AZsj62PAf_rk7_oe`jVyx9bQtcFK4Q*OqL8
z45S+j at GcX0x<nA6qU{LHG2S)Qb{#4B16xP()XNXC7T%oyPHMSvD;Ne|;*q_WcpG;k
z9_3b5cnyA>F>iXs7iwGKeF~LamLUYYvWzZ_bJ*iTfk?B$*4K-BW-}@Mttz0CIGCIM
zBG4uOx!6d)1l*%c<6I_nt$#*qWQn4HfzB>fgNY#2$-)8=GY6(E^<?MuUl*Syd*{_U
z7<_gU)|!VH!-W(659Z!Fs;a;H8r^g^NViBxN_U4M-QAti-QA!9N{Z6b-6^1ScZ*0I
zLYhOo8}<1<&+qr%aqoNYc<&w8vHx%|;GDhpr{-L9uC at G*psmh|7&bCn+?|ia!3wdS
zmXZycdm+sSIi8Igw at d21YXYEC7&6eEsUUVri;%&w9#0jD9&(^EyodM^F1fdwHt@|V
zOwi9=KSQ7qN0cwv at Xw5<DG~Xjy$=KIEurNq+*nQdaIT>OUGa~WtImolW*t%Uj7lq(
z6vW~TFN)XmUb!nEm^^N4$mT at wLJ4kT=izF(Ux0WFF&}EyI{n?FONf7)FKju0Q(Zmu
zp4y1MN7 at eU`@!$U$^*qIdI)vItXw5mtVs2Sj&`kfEJ1DYE`%1CK7k!`kjR^#>*1YF
z?7Pl92ZL_AT$uOxP(g~G;?CUyDtS_UXyR|u85N-M+nS^i3u<QO&tPf5X!#x0hQtaP
zSTG?Ge*FT96W5C+s(mg%@Fl_ug%dN9?1rCxPd7reH86zbw}=S3p%wo>Gb{aX<v1}9
zVxVuji+xvpyXP+TSjOkFw+?Y4SUEm|+N%HI=2G#8F}5Z>ternjaEDGw=JM)@8r6I(
zhw#^z<g)w+^A#*%1LEM1#2>^`%uFBT(<e_UV%Dkz<FpBC!@mGWpDrCV(<AM%6<etP
zo-iFWzl8$9ASs#{m_f3;(@6nV?aT)`IV*wxbOeFJuRk0t(Xk7vk?VD5`vXnN*o4fk
zUWLP~<beU0ZRJrucR$a0+J9yxi!Abl-k(jP-fc~w`xr^N=cKLV^!3l2!G8Re_Y;yO
zS at 9H<_{eq_ey|g~FdnXpNgP!gbjaulw`yq~MPJqF^(9wbTxkKtzb1#1*Q3XYTC+Id
zP7?)x%$AmUdAX3{Q|>u3`eE@{)wP at t)GsYY&xUcI at LX((EJ<I0{Zd|TwmCiGXr>T7
zQ-(NzjE}x&UIXiOF<SDZBl7P6G|qU1+%!_qs at roIErT@DG<u;+G0gJ^1!y`9%P4>i
zA at u&5IZlcuA=v3b!CaeM=hoLq^fVDk6{C67OS$mrLezJy$CH=vyX*XTRb!;o2HoAK
z)<7o$BaD$3>x*?5QegFj4#UdQoWT1<i<|03np-~;93#=Ajl^Hj`$4)gD?T3u+db$l
z#SP?`DS$rGQ*sYlx$K at -z8Ovi9IR2kJvsMvKC99au7@_^t1B+0NDN^i3SS;%lXlpE
zgY7_(AV=1=%5YH`F}Uk1f21y6d0r1DNWQKzb_^<BiMzDn4g0gAerkOJ)$b0Ed6n6%
zE=^r2rnlV_y|7>zo6E)2)0%X@=s??=&0D=iIVspnP*)H1YenLCo01U79^1 at APZ5E8
zBxE23{@kbqZvvVZWppt76~-8Ulv4g9YQ?qG)h*W#O6J`1;pk%J0DvL<bxmUfEe*>P
zj-xVicXG$iUmXZQWz4+`^jwr8OV=MKI(XbzI-}XB*k%x&Z{G3<-a%}LMh^s3X4l`s
zi4|kH^~-qXv)AzYmSY`2z8%KOIXQqIo**i;oE-8MZO|(@Wd*HK^H^!s_gKi|x@%z(
zjGidTXdncA1yhAN`6e4;>Ov<S(f<zd*Wx?iD1`iQbx~S1K(uvV8VsW<oxd6F%{OyI
zN|Hmyo_s#UV!syRjzekqUQ-tBj_k$Sww~ft9gFEJ(PBfk_WE+fAko#gGB>wBCdfou
zxk6V1I3q8<Cwtv5zHND0HC4ZQLll(s(!A#zCcVgwC1OV#S149Tav`oKbI;jQD7aMG
zeahd(WZ)+$7E+@=?*WuO?Ik)d6_9p8F;_=q7HZ%k$Tqy*BagXL2l557Yz^5b?HBQA
zg!Bzn?_L)B510blFP|KQPVT?~$l|;*kwXtqTT4q+CTpd8 at 4|w{SrNTwX*zmjg!NR9
zel6bIEfOCC2&c-dXM8E_AAw+${JcAaQgIR1MbRMpJB5hNV8U8iOCvhgzo<@$ijyo*
zG>`pw4J;m!GmYcDVAg%P(JJJA4yAJwn(JJpU at n1Kt7)kLEhOEp!)FqurM3V=+hH$d
zpxb5*<?`izGilE9=~`*VU}H<FuTqnPn#@yHxt!Oc_gj at nMl1SVY_5i2m7!xTPj%01
z>&FSo=AvwXU&nAlLZ;bUGtEbBE|rZz9Sjb)uZWE>*fs at ai6offgV=%&BbG07B~kb-
z*_+z}cOM42;|C}-*++hzLfBR(d<i<%&f*{3S at LRar>>HMt^AC+Yvj@&zrw%%8rJti
zv$lcfqv2hX|6Cb`7CR8fH%>!&KQEeL{H%^vJJ)~Z18Bd*(B|7!q}dQDUv{zR5zQA!
zUB^lEQv7>NGiicu_)fa`IH(J2a4myEj{#W@*wtPRmh<C8RO`yy{Q-eRIS<rIJN@^D
ze!Pz*@WDnd-5qDX>j~TS+ at iou!C*qO(`*uUO^(rxH*ropgzCp?uM=2vinnBbnQx=t
z7hDME0b|baYoZDEcIAY9fwd0{RGO+f6!c77Zoamz&)N{VE at xdwn&oM~w4`W@<*>1J
z7Kkt7FE+XpN)wDpKD)2+^z3lR^jtZ*LYnq{R)}TFEG8sdjJ6_cqr4H2B&eP37P at 8H
zqGP(aXxw1KQ2VXND}&udqHzVBg$s-jnK+~LxmvRYOa)iw=#-Z_Z|nu~UNX at z##=_P
ztppr~5 at T8oe0VJA@ltIS>j=(%WQcoK9~1R7b}t;pSd@`)CPYMBj9sNtUoG~z7d%Xe
z-~`6;V->XfC2 at S_ui0Vd190Nl*e~ojulHfaim at Z*v8j+nqPWF|WvP&1yZKwZLkQrr
zU^C5%3!!{wKUTQ{pkH9`%IV?#0*lYwAb%qj7**?N0B`Nl-WV&)+S_d4s8gMo6aj*r
zkdv(~?&D1!Esu76UqyHvcrf$9-kNidELi8I<t#RDxgAVy9+FeSu}<c at Qe%(uD5C_c
zYfFst_J)(i7n*j5Z%0w(*eYnfSt?i<MQRXr=DU%ugP(M?Xm&4eao?;L)!Td8Djc8z
zMzhefy{Dz={>pt-qqUNvE6pmQ%ubsfA~TE4s@(>YXCK2!`ugjL1N$AzOgx(6zD`bF
z at Apt19afLVz~lm23=Y0+cw^GPbj9c+ma*XvgNVJEObuZ|<OQ!9KymZYWvZ&r+)tE`
z=FB@~)Zg)`E^&VvY%Q`%Q6t0VwW(oWNEC18^bK>~6&x?J{VKqACehjp^!?@W7mh_N
z9f6dY)XQ!ba7JvfouN878{A7GAXdv!%CJ0*@`8S9$1<Wy)Q}FZ)_tb9?G9h<1>Fz9
z0lrno{8Alvo2aZG at +e_g+|RM{skqC?<8g-Uc at M_rg(ed)KW8%65&w8Cj2T&7u&2}N
zS&FKW%yFSG0_sd$Nx_=~aRDI}nofpZVZ#yifhLkA>%zD2-xbN*>k}NLyDp?pcx}&S
zW)qdQjQlFkt3ew%J#K!mC)Gag8hSMFI4l!(DS4^$d`bd8WKBwU7cs~IXeu(&dq(#1
z9P(8A#U(W|>nERj*q2CI*qP${m6Ew_D at UXF*S9?Nfb1IP$lE5Azc~u=1>pR!Kp56U
zD~l*WFenfmtVY*y$ep&8;1-^=t{a;Q<*1tvsV>Xa*T}8awdToCuGg at 4;8pgoj1l##
z3b`77q{~uvP)Jy7(P8lg`B=B?Nl6B3Nk+^$>zDS59~T}k9Jt0+!M`Xia^xAeeUG`S
ztj?v!V(-Ajpk-lS%)+I9+ZO*sw=BXVryXex>FENr^tw&qgl_<qq_5#z|FG3c4~m#S
z4P}mnSu at rJey+SqY||e=uu_JfA`=P;N`kl;WW5j7!^Xz78wdyI2PKVoV%5-`QyN$O
z$q_QF(0J<>Zv|B+>C at BIj@Ru+Y>RlXtj6Nr)ldFT0K+GeM1V+!s=Y+Z at N}L?sner=
zM-i#hJP|!M_0EN$q{FK-C1O7VqmmowNVdP=a*Lkc=faX(av*{V*^Gz}2D<=I#@dqD
zzy!0kl$1YH6Yd}eelRED$iV~0rFAawQw5QWIQET<sBJM7d{_7>X2oue-DUr~z&~)2
z>sp2fsAb6y{`HLs^WIz6NH^n4hE;51$8x341{AimKB0$lbW_zE`MO%kE)Xfm1UUo^
zOhh#uD at F=JU|EtstYpx7(L;wE^+UrSF&C|>H6T#1BIj;T)(BDixwZHQ1{iDFA2?KA
zoBmK(Omni!uA{#s;k at CN0QmL{Us}3m-T-#V9#iL%elQ7~2S3*G`#*0Rp#z=*)*q2O
zs5;3<V3cv(?T|dsRbO1k(|u{GL<@OpKYyac(hF`wnRhFaqUyq@^0{RN>q`y=ALcuS
z?}_gIqKCVhLs+p#c5Gh&<)F3rbMT{pt8}aoDyk2Zi+ax!Yzkpxd1`=Zvepows{$b`
zOH$0otTkk%KvbpnTpC>*JM##-oVwN7(&T at DNfyj3@*>a*5B}K=?H{f8HvGYZtcDKM
z`Cn(YBmbg9aR5rxC7yjoa4$Fhb}EH|ljsr1&YD+HA6y?}%32;C7=n~#uZ#vr@)TZ{
zM0q3li;B7KYfFq3*FomjKdl>bM(gmw5?{8 at cc!X;Vf*JPMEbzwi0Wd0av+8pxttyK
z3cl6n(vmgsu|o}(5yo+D!=YgzeN-kRWKdQJ+pkUD- at T-rGPhsggq`wC0y|Sq^ZX8j
zGup<iZ*?v{(gzs$XAI~cEa(c5J%F7sgeok~qFJ>p1T3GaS`6#nfXAnf@>Uh+izy0$
z%@{?9QeJ$cQqWqxQG(FGM0``WMaLxi{U3B{z50+5F%KeF<y8 at XHmT==D17NYAv=LU
zP=|@U&CYbM=1J3O!e1zx|B&hN=V7`CDS#PNnvHSnr4T at zXz^s7 at -K;*0>u*W%|iJB
zDLRx2-d_ at Mou+>1A!}j%q*BeN%&E8!rT4&p5OAL8FlQ{x{-dqL<Nto9e^V`$hs2p`
z#(xweE~W=|%Jc8U8JRC*h(Q-=@==CNYgkp%WKE4B-(4Umi*r%}dcEJ at A`NKP8+qlP
zew at -IFWx6PaKaEbGW_*#J at BI`GF+#_<Bs%T+9dGm3O<fI-sWX}d$FW=Jt)}cdN^cn
z{7Vg|qgCB|y=%g?ES?)2;v36?yA9~C6vBT6GH6H$Bnbh>fD0f&3^7t9Fsgb%qI6oq
zt|bBME;E>xibiK%UU2c!l>x3lCstXPg-ZiPHqqSK*!B=+LtaNu at 6w|n?&>fymyON)
zKOUXK4aV5}j)E*0eI+Y3m#E`uktoB)ShBa at nVivxUh&#MA?IbZ$l&3$nfIredg?)L
zztdt7sFQy0(=OthK*}h-u`4LlH7c+rDyLO6 at -$-QZh>jV>z*gT- at zbom1m=hxb at c#
z>bL4RsHfIZUu2%h$0Hs?;Z#{&ESegvAIG~^gK{gaky_yMnv`RDOYZ4y-|?DaRoX(^
zGWa~~5&M5IMfF*(ArDd2QE%QYp at JV>56)CR7rW(OFK-6DTk}Ta{I+^@UXJVxeze=W
z9FDBv(|bcT%XFEBCEfbUw##~t{%~~d<NifK{o}{1tZs_}Sa0n9sSD5?^xbn&Mvu~e
zhIn<+YwM>FF4iYPilKkr4~@?=@ST6FljWPz`Q^JyvB7D<tnql at 1zedXUI~rlif(_$
z&x=;?`XHr^6Q4PrSo<yCo1HL<_HfH1k9~?2evZV at V05xzn^ymGkpouNJ^9eOHG4)^
zt(N;u0{a17=>5~AuC5b{0lQK!I`F`i!_3ity79V(9~^(O8&iyGW?KLD7X5h+k<ih@
zip|-F&tk?j((dx5FRVL)Oi9`=zy}2iOc-qV9c at bc309m9zcQzw^fTzxyFL>gvKjQj
zE3BpZWo(WT*i;|Fdv?TnZA|I{!NEj)=4I86*>sL93aKU4>5jHT*j!0GaFj^3c-%1-
zG9gKycJwv8^-&6<WpdebK9AZHjEiHVzB&YE3~|2xfAYz!4<p!sHyUrWG><(P7BOaE
ziTPG?zHs=TFD%=+E--iPKYBlmND}|#n=8V at gsza^v*seb{4R%x#P<2)ynUX{&8;t2
z1_r|m3 at 4;#e9k@^Xw!<GmKR$|%PCb&t+29Gq4&)l at h$-<37uT5S{c?{B-UIOt-RS?
z;{N={EW&^vRF?o8h*-ulC;Au#E>aAx_bfvJS)t%ss2hitW$=+qfOInPy)`$%%Ye*a
zGoeH%3&ejoHS8k6eC^U1fwYeMh6`MduS>1DNf*v+QIOz>Z}x_nzUvZ$|BD-Sk|=-s
zs_0^6*qudRc*bFGEZqIp2d`{8(i#5Q<<_vQF1xom&IL)<u|d~fAnV$J2)}XIzjv7!
zYIMMYAtuJMG`y at NY+oNGCo^l-D%av at Pfz0$-lQ}9BWERz=FuYeR`P+hwJBOR%NcU6
z^P9cfmJp{A%XQ at MRZO$Tid3Nu?S@?+#1Q)_>^BdliTPmBv{lRpY~j9Hk{jix9`B7>
z*3Ab6qhk`o<j$l)G0NCxN9{Q8F#Y&KXGK~=wGu~&MsHq~UpQly86k<V*>RF?DcmrA
zV$leI{3LI^UMFw$P|q>pYmaJbkp~~k>#*F0u{<wt+V(>+Q$0-XmZ8p<tr{J^zC#lg
zr#)l2!|g~;FNh?Io3NK9hSuh!%;ojBasHd_X>Pwlu9t(=vMv9_%EpU`Kz(gzhQ{!=
zHW%`)kU?34Al?$M><kxkN8ai1altw=^G5L2JPXUq45mYB;7wIP1t2TdJKq$^M>MeJ
zXMvX!XLa;r8uv+}h4Y#{aSZcEKhJsO?iHb`C_LT+yIXcxF`R^BSSFtqT`Go+ve6U1
z8*hq8rR`Uj`?xEDEm0>IzWrYcaz3DweaJk|yt`>Rrfc=}AYL7 at t|7aBvsznQqw~5_
zWf3F*ScuPv4x1V#SGTT0D42g7K^2Weje32LrTtRMBphm$SyPXn3nfbSJs<K+(q0T$
zUnl!#Q_gE6Z3fu=6*Ig&_6<ja at g@XTrb2l+J`BeQ*4sC4w;=Ih53G${eOm*L{PKP8
z&o8_<lfan>Crg!>m$xS4N0Jc4gLVLSd#fAhGT_)SX3sNjZEq(ZbXG4AtgGYXdEkPX
zAoggR_x<&+%_r~eN-t;SV7!Yje4$Wpt~bG(o6w|;<?ZbXwv8jL#7d28OeAoj37H5C
zH)?i24MsO?)2_;bxtw&hE4a`&&JaUPP=>Ma at 91oBwD*9{FZCVcp<UWLVsr=!#G0Mx
zEljLwqLp&WU$;lM)ey<n{MVsWUiSJ#IroaRqg`F<+7Myq9nIaAq{E|y^+j$5pT;fZ
zrLHPHJ2?xjBV8&ua2Ug51lR#LvUfe-hj9<~pmSNG#o_))imAB+&t at K_p1yNDNnf2g
zXcEasNIBGhYU1IIAuBSiw2iUcv#c8kSf4uhJ+k`2l%Dl;BW-g5hQt%v?m5Y2rvi1L
zYsqD4x&0h;`b!{X_LnZ@=x1 at w`Xg~U(#TbVr|Sp5Nba1~p%KO0O<)9~t;YWP8<QpF
zn^*gskg>!D$0 at 48#mkDsv-<Kk&a+ at akPi{Z#|M`qtZ5wHKDs&nmp!ST9nAmb;716m
z&dY1Aw#^J!WWhOHF0t`l{>oJH6zll9@#-2~k@@+xp%1PIw8s7G;Z2$J$E>H<CS-Q}
zEJuQwWjpIx9<ay3qw;-*p1XYlE6+OUYlA##7d}vTyeqbo4 at h)_6VuUDF=Qg4C-zL8
zS0u2=xIL)_jzE6b=M=NhSy!>mvKjzZBBOgA&ivF`y`$e`5Qg!Ar<M3OP>6Vdu^hx_
z&SdX6&XwH2rF+s%YrhL6;Q2(d0<E$3o?W-wo72SiGh#lwC2c)Bqn(;2q#XJ8(YDY6
zvZ^!e%6VH8JGH)DT9hpXgcqgZ5j$g8IyOHq7>XR3lywyb&tz)CH6^(b>=smKG)obt
z@#~3^tbeW>fY76~`20*-C1Y+uecaY&(4tfWp}IuOp?1ucoB4Kj!6C2YqHNlBx63?`
z8$=_dF<ZQK<5Kb(Rdr=~&GS;FHUfS<M5G8?C2=g%Lae&?qy=!|BHH6CM$?B5 at B5@u
z3BcW)VR5-WZZGS?-m|aaVtyP<`2UOkxR at e10WJjfm^}3DuQhP6ZIm_m(!_rLl4wBS
z>U at n;p|7VMSOn*vWeQ>^3ZOc>*>;cb=2(dJ?E?%l`R85afe6sqTwc6}-)o1%Zu>uw
z+wc5m5WfGVV%F*p`Oo(MPQs4=orJCMUq0#o0!#i*!Y=rawe{fL0-^C=TLK94egoG3
zCpYmaZDCb+ZsoHnn3zgBE%4^YCgJiQB0}R644&0XCA8c%F;X5FrFtG0a_L!%JJ&0A
zHP!8|f_m<ss_h!@;Z}Qmu53Y=t}6~kkY$+Y@@5dn%Ee#igOSbT7x^l0K3~XxAyX~p
zn%KdgFokg#oaTu!B`J18wW*qOEt4<%o*X5Ojf#MSDw`xnn7eSwm~~JAdipGsdt`W<
zSI6%C6rqa1TR)OxYxob!$jRDd#rif%{-Bxg(#IB6OKpMZt at _@cpxK)j(M59S{y44(
zZjtqzj^~Hf2{mE*Ou^QCamsul+CtHO`Gs))x(pTHLAU$$?#L2uNqh(7m(U-?AD{OS
zPMUFM{|&Y)9H*}<0)K;Ma3j^?3D6!;%QgxFVL0XXE*x|N+59Nu9n7o_t=>l>kUSB>
ziw99PCZz&$HjVJ&_X<Juy6nqkG`k0ec$w5wL-9J<?vnc`STJI7*Uh6Dg9K9I5XftP
zgfF^*J#f%*J;hIS1koG~5cfhhM3f*Rw}Uw(@yncLQ7G<mP`N?SXk&lu&9$QcF_n%g
zj2tq*r;nC0sTHG@?V_$(^hQvZ^+uO{;E`3Cpw}mM_&=H63r^s`eSUk~OaTap7<S2w
zo}D%k3j>*5XOtws53~m;qGnj#VP%K5I`W3&{x%ltleVa1JlHxC&G&O~7E`ww%8%~l
zB&8QU4(&fMdoqs+HfNki2^%6*^S`Gv3Y}6BVbcD*a0@)?%hkPp+zC1E-h-s}L&TY#
zUNgUc*WR^ro}PWt2_f!*yp!WyBSWL5NTmJ=iAd;jLkPblTB3mHG~kTzuOIuYpLwkv
z_d7d&hQ8!0JbRAr9{NSO*^*qT0qcV?c0f*{l^>myKv&76!_~@2%VVH8ckr?SRmL=`
zzx#;D-&L~q9kRB;y8}f3$=JC$M_WP)-Xm-85qwxyQ|Q<GlRt at cd1-UXV5t5OJ_rWq
znET}H at c8NGLM;xk($NyaD}sNv>a_X5Q=Tqwr&^{S_dy%h!O?wvEO?m~TRNB20<$)%
zw0%5?b+&gnx<2%)U?t7{=0}fCCd-St#)c5B)f`zNC{VHEU%B*juu-(Zw6z}u-n0!f
z at ph#bF_#vFiJLSle0AOVUnKRR&j9>Pxi_^}4yk|=Rz<UlJ_fbc=nz)}qY&3<oNKr;
z$Jqz$GhIt+59oLCI~$R2rx@#g_dX_!ggh&0TmpGCyRJQ3F5RSGbq+>lPwyIOQ}e$m
zyDnF`ASSatZmzjKWuII~JD99fA0xV`ox%W?lVSJW`)7AzJ)tVkJ2zdrwoa*3_OE6%
z2_|Jac_S5oPBVK)d$EbM+td@!IBa$!O%F=FKS6F1Vo9(X42X00tk6L4(WS(u8E3cE
zB+Un_<Cml#MoR^D3|e3^L@{6EOX;DXjk)}84?+$^qz>)L>?U6&tmWFhL+M)VgF1Nv
zS^zv}F0Zzq at +Ip}rBYHhMOHIQmJ4 at xi6I^i&3d+ZZmv{&+ztqdTs8+aBv at bEnUp*F
zz1|#XU5T^-89?hVi>q)X15msCK{bl^6%LI1Ov5o0*02Hggk~~=Rp#ng-I-CI5{#4k
zUB=CxC{CoRWfAWme{k4&t(LR%NRk=6NTh|h8K^ip{6j_GONgXNvZhHY;wQ7cP>u(K
zT+6KiQl`)GUz~HI#owh{N$$Qt=@?GYSF5zf1YDN^b}Q!abDF~UmO%4O)R)bLi`~^s
z?7B7-H8a*hK|eF<UN!zHM0=RIk_tDg%Vp4yS at E%!tMtA;t{>oeRI}{+=*60Z@!z<P
z8Q3pKG8jGJPJ?(=AA22n=}QW;WNHJ>Ef<`uH9~B-1uek5owkPja?_<QTIOT0j9Q=X
zCNWtilVmF00~w)BlJsbCHRz(JcJO{Bj&)|(QJG*_6D;#FI{Z7x@`yj#=^BAFjVNc8
z3swy3dv+1G{i-9st#Cf&XeAk)jI!L=OcGka+fn}0-`ZsNgbXvV<}Ngp39Q)DMnVSo
z;9y=gccs0b4fLeNMeCZ!0}2G?jh0nvsflZ*m#A?7s%Yv-Ts>hKHP<5nghqW<@Zv+D
zr{Vuv4ezxU;3Zgv!Vxcg7h(f2rBFjX`Gl#>*t**}Ty)Ze>}-)+${ehNZ32x129uXr
zC+|YC8Prd3jayI)>gqp{-L%y(3l5gi?zBs4y^)Qr_r0^QN~@ZOJ!(++ewbdqtRwC^
zdvE$TEToR^09;O<>?O^_fE!tQV*^H00XgQcnKFTTP1I%Lp#PcXD7>W}%($FPM#s!#
zk>qasIBxr4+TQH~(BD6R(KeV`Xs<S*1Qu3XqD8}N^V=%O+d{QOTSI3Pc6|vF*f#EF
z5Lb9oSy%f=bGBabXvx-mXg$h}1w((>t#X7Z*Pn$6L$cV%$i+D*>kv(UY_+u$q2>$G
ztSItr$>J=ai(8EbczZ;;hxNX<K+I($l3<uBrV2^M_YgdpApx4#&U_xK^t at _WPxR<%
z^2iU8;)1Uz+#bU*TEZ=WkO8m|)1^zEE&{2qey<|gRl%>+S_onU+?xFh4l$_l(P>il
z=jA!lBp(0dg(%FC3)Wb=H;Dp6tTxoE=d_c*jQ<6GpyOaP3aRj05&_C#f|WBBC}-%M
zIKxZ%)f5|Zu3`X#o at w#<O-|X`z0sr>Eu(udYhA at LXXJXgJhqE6MZ6-b!dngYwu`Jl
zZHE>XAjwZAlGVQsvL`=*M9)omuZ#U>F5C#isWJBTQJzXaoOAIIDfGruNopd>&$WP`
z;)-uS7v7=5wpP(hN%Z1IO;3D)fk~sdjK<B4>BC(c`7D+jud5(YhRquyW(WSdV`MuP
zm+^d=jKt7kc>kt2`+WTFf+~!OlBZ1#|BFQyfD6g%z*#9#!T(hx?!dNGR9=++2XoYC
z!@dCK+?n#Q+0bTi|E6^J8+J{XS7!PKeT}vhP9n8gFkagu<mQk7qZJ~qyuXp^kO)EG
z4Z+Z3SDDW3%M(dCVQPcxrP}u1hH%T8Xc;p-Jy^eXQ~02SW1$1m!@0ii91fO-UC3w6
zNZ$Jtz`}A%^hb~^Qm#fW+2<9{-keF3-R<Hq4PqVjRSEs5Ck2HC>$>-iM@`7GVp6}5
zvdxFUriNOfaALf at Jj&IX`+HJ(h+ul|&!+CAToPY6R7GCD07^d*@T$Ps<@ZOa{Xla7
zi3sVEqOc{kmY0^gT_*OL0mj0;%A>%Ds>BClb!mv`Tu(QC^VvuY+=AR?rc7r#vj<HZ
ziD}lV!G}UDz*nL%t7qVDJFA@`hHmfT(F<<*pxslM+?>G>4?2vBs?$bZR*lMZNY2&;
z5!lVl-Uzr<_Gvw7{G+pt%MrH&&OKznH)Wm|3nrvs$ZznuKlSn%BSb9Tv-~Z4OKSve
z&TipR#KF3wLf;KHi<sY5jfFYoXWD>Qii?A6SHj;;LM7YU={j4MT2c(gR at KBnb?&R3
z_d~dfuO?#nEkT)*EMao1p7?_pNB*@FCtWt19tO)I-V*r91Ka851Ter9<u?zyodGYo
zk%9{L+QTf4?JiE26c^vV!7;^PVgcL^y_D{$X at ot{0T at QYs`?!_-MfQ$U8{A78*<dj
zMmDTiOS at b4;j-+Q?m~w&leIy~KGz`~1D^stiD%s|mQO0cmaAW}@nPq56|86`7`rE!
z$oLl*W`ek|VdmJ9Ds+}@56PTik?(jL+-nhroa}smIN+zQgS+*01iHH!xl_DVa}B&C
znwOU7&IK>0I|Bv+;YNW at 7#L^qH|+JS4vB|iA%^*IHs({py2y33FSh-qYlr+qI$bHB
zBs56|R<!q7Z!yf*h;q83^Bou at u|2BJWdZFdcgxEw73-dAc<ncUn6!FM({`*4{n3jo
zV2r#^qSY0(To&!><wE|!idWa0RK>cdG$F#i2mHd~QXz)^P0qtpg)s6luIDF5=mlde
z&(>B{1yB=f8XV~R@@^w-h+uLBtM|}5+jYErf1*)QZ_G0S`!{-WauK)7w}|n^GqGNd
z&J4}B)?YmsD_=1TbW0xG{;uUFRf~mT1TZ|cuGdY4dqx5(W at VPV%xWaob-D{(6c0fx
z1Zf9TJ2mOje3p(fO at e`vnTQ4Jy!;Z7B^EjIj@$Co)}MNil<cr$)&*;p7E_Ysc~l(w
zI9&+qEi#p46kNEK*S*)JJPpuYFvZXS(dlJgZ9WN8J}y(8LATIiq}@RNq}-w=W}Sg1
zaz=4V*o%DdnjyTwsNngei;%C1P`6Mnn+E`QGjqK?`3Os2Ezj22Vt1OP-;^wlHdXvx
z|DPkkv_6^q)=TW at vtQs*Nd4gl$B$Qb^w9G+i+EB2PVb2R%!KiFo at P)zID`BDE0OyH
z{b?R}>Hi{|yh~pwdK)vaeKJ58Q#3UtELxnZiY%+fE=o->i5!0g9!%IT at nO`Hkdf9;
zeAdWg%?`^ljMT-cb0k at FWIt$!Oa;7`$!2S*@~Q_#B at U`T(9yRC6db0Lzm?NKvrfAu
zsb=n25Q9cj!Y<P(k3*&c>2iW(v8hf|2NTs_T`<VwhGK_N*)CJAJ%UH35ba)PPYK7}
z5P=C<lVB&4Vb<{LZf{6VxQ0UMk&k32=j0I!9+ at 5?;QhS6wkmaE&VENJg7{|`Pffw8
z*jN>j17gkRpa1iFE7gLqU+M)o5N_%weMh0z8sDh$(356N3mRn<!(Ng*OtCC(!iJ}|
z4zo)k3ZZID=2T at wp)L%nI-UIDbX5cjSe<w;az80~+sV^CmY{%KSO?7Ve9}h_S?g8v
zFd41A2+Q^!yJYSQ`h!jkKZE;)odp at HxwCc2&A%T%CQ2{p=^M`58JVT0V$O&vRsN5W
z5<wC2>%2kTN{PpIZm|#YOqO5~%|1T%kgzoK3~MJnvNM8OeVUp$A$(Wt4XfJPlpj&Z
zTFB+n%n#dadEhdx&)A7#bI%p+vgJPWOEGlVYW%PEy%WI$2=TE4Z<1OYgS7gcdT<6h
zIaoK+jLJ<V%hx}e(HKHa2{H<xlW9MWUt<xn>%FFSQg{A7NepS~bZEu#4br%6-+$}f
zdOiOvh4*m%tr%ipda2o&Ax_7QGS|vUUopYbs?YH{{@xWRGy%2<rq3dr8KR8Y!>onE
zQ}_*3<*_H5g5?#TdgEw~1cuviU=~t!?j%YKMPs{4*J|LfiU*0>klw=p6K0Bhp&JPX
z_VUtYpq2beAG5fKGGtBiSz0JV%)l0|Ga9Vl_+uCFaIc!wBM5iHt&$@GdEp0V_-MD4
z>cH&xiDIA(iE-2U7`}_!%hIS&sfq(R1TXmwG6zeZHYY-AzR<=vdq@`*c+pgS+5)rv
zP`%CK?DAnJit&HFz3WwY7M=sq#VPhuhc=*v<0x$zJJiRUDoW|%Q=hA|f_Gtialghf
zSJTf&*z)n-$rTZd2E4w|6RlPGGuJ2D++fz0pSprLln)=2L`W}QU2Zaiy4W3iL-YxK
zwKKeBQn~v<#Re~^!XzK&4y<m at g02)HKNEz*tjq{7o}i>C+*<%DHUS0DK#_i{qpP+D
zc>%Oh2#GXl_WI&L?zGy!5B1(ELxq7isIMAN{a1uUMEh<G%~l(tio!iqSwT5 at jZFSr
zG$&RJ8~#T0e)Ar(DmX$O5r!(^$h(m*uGarJ%%Hm*CiiiIICh9On+LQ-tx1w*jFsl+
z?mqX=;L*d-e#q24g;bS;qp$r at wom?L!n&5PSdK*Aj4A8xWT0yoFOMbhrnOaH9#c1C
zV-nL3Y`2RB6Y^MWcrD~&ud#{p(Y=ZL1L<$bm>RwQBkk?{Sy`fj$teMsMEk>L%tOMx
zY;i}UWUwwz{!GvDnxhGXpq*YY#7<z(P5PkF%uue2QH35~3D{yCfRlBNcb>#tr?2l9
zD)=fz8tK;$xLNpwRP6KSt#iliP0sho$Y5}aF^C&Zfg^~WMy;*_SBb9Z%1v`fM8N&j
zHb2>&<!yMR8YuTe1%Njb*Wx55+9T`MY1qfMU8+_x+KQ``j?6mGgxPG7d>d(foIlZQ
z;I5&bg?U57*K=arwC#9x=e(Eg539B6oQOZy-y19M-=!q_P$9EE_Q9l6K|^VThdGF<
zFEnV;6k{?V@)`&y@{q*tQzmg<w&tDffNwO2*@Nz$WiBkTQh&##YV2O%ExP{j1T+Ke
z$Tsuw+3dkrgI<Aj2JP}Xc^fYTlZ!je6kY3`*gZ~^oM9sLnXIb|ta0g^o<Lp6&JL*Q
zX0hJiRD|+0RzRIp;q#-x^w!2GBZ at s%V$z(|u+R1zZO7<j{Rfh%7N6QdV##bQ{r1&u
zD^KWQ=Y#apBj|PZ6Wwq;=XO({ykSJC2S>Z}HX^Uh&JNCr^j`LqXXTPPv8GAjeb(OR
z<nmiG!1hA|7Q*6`>>}QX%{~e}bwOmvf~_G6P9h+Fl$+6HQ*(6<D;7(FyUuaxXJ|H~
z&rs+4d5RRUjSSL;>r7G;8{;x7e{&>x)Vtpy%pm40Teaxn|F-r~z4ynKLlp*hSTQvZ
zE%`)oY`^-hcOLJZis*q;Nb{&6J>V7z>2ETKvN3V6?X2GOfC&(OyfmouRp}YxImM>F
z{Q~agSwv9#w!aJN??ZW9<QSYv#cWof#~`v$^C*o}ei=~Ktn>msu$^2Jq#CVwppX*o
z&QSds$&Y5`S}3t62b6l;C?ZE$*V}4h`2qvc8b)HB;|P^GR`PS_Rg;Gw9Upup!*sh-
z+N~mZ6G at e8D!jVT0h9YE-Fq{XHrI3rP8``iEgUrApuoak5am%j{4nfw`PoMSD^?d&
zxr)`XYBl6_67jkP at s&SJ?l5}i3Q$ROV(a at WAG+C~ON~@jc{1K}b(zjHIYPKt7pR+a
z4JRh&-Mg6w84}>wk65c60Z!@8aU&wAkrmNbG*zUhXglX!NnE#emkN=Z;L<ESg?ETf
z_pt7VsMkh8*=CaWtkCvPnS`io3<tpLr{9+!*H7+F<PZ}^<*n;Z^IJ(v7jV~F&lRNu
z at 3wPBx^V_fZ56_q2h&?JLur$~T*W_muh2H5d0deU`zysBJ}ArC$?OVdg)g;#$pdZ}
z)ZR4l2t^3jk)z}sTQ7rR&iw3F5reLGT0-cfthqwuJ{9Jvz_&@P+SEYuJjNn<Xqi_h
ze;Qf>x&$fIWo6nX{m|?uK$tE&q;NZgjYx)uE>C;jqW+z(l+-HkDEZ6%t6GCa06WM7
zTb3j`-9tNal?yuF3O`4OjC{C`Zw6WP7aUm`4A-xRGW|HqU+NOCffLMjLH~T+1D3`^
zff3c+Sov!?8l3<wZ=@Ej6yRAW68Y5*i{0Boy29e+ivE}TK&h5T9W4p_LvXDH_mq8s
zt*r$)ccsR=pFG&3Ha7`AKh<r?G9Kd)iRE-97#bls9t2lYFv8MXC|u_-fy2F6|G4zy
zL(L>mSJIMwX8Ia||6g?hoZ){YZ$Iy(HG=X0Zv^BOmye+SM_2aW4*Ru>=x>TY#T|W{
z<@K!;1>VH)Pe!+%yO{98TUqxf?G%GKIJ%dq5?ow}4X=*Efvzptg&$$dF+|fHqtVW`
zY-r}g{`*+Kw5ckZE&@!*AO=_lMEP-y)C(!5T}VI!Q+HjzBu}jqWsf3GHkgjdU-^Z+
zI)ixbOtLT6?&2ts^RI^{yX^sv?0HRE>ZF4{lFb2J7tZhlmnAVoQPHMc1m9q0-0Pv%
zvzCSGwVwIrVh4h){Ja3C?b=ncf*2Ri=%Zvu5Z_~%J2C67Z2iMYl&i9xAd7(Va1Sjw
zN{#E8sM9V at VYzBSYp2vdJteW>dzm9WPmzMIqR>LHS2&i`PS)GsMYMtQK;4d8PB>>)
z({7+JPxo>MRZp>vK(O%4M`GYGQwQ^>nG>KbIlw69jFen)mRPez^_m_P=xNCw$T+>o
z{A^D)hfCo%!3Lfy*3C!(?0 at Z2*RTFXLagUC;bIoV<U!7%_hqKO{!K$Z6N6KU@)?gM
z+csziSvxN{>%^3PFahQ at 7w3W(=mwm&LN385^FO(@{b<u{G_8oF>5V)PP~=YvNJ#W@
zTj%g8d~*_Jpe1k<$A-7YyJylRVz^X at jG7w)hQg_kSIDvIi$2}Vv>`%#puI4;VYyVD
zIrUB&1d^%PEQH6_H6*m>&@+g%5irMU`m!?nrTvo#ePQ{aoX5b at RT38H;KSQt9xtcf
zKM=0WU#%g6YdNZD_?JOTSoFceXTVq;H(ZB%=WL59iee6m+VjZpI-lvwZb<>y at FEX6
zneGGjsQ2|#4K+gzDX6=H0SdlnZ*dm_g4!D?h at M9^BJhDx5zQ3mgW7%dX)JJi^Bd@$
zgby;AT_bi%p#WlVb03|lxo!#`N;Z;mQ;sj}`$e^nnvSuCP4!DVOV=J!5CJ7oiQepw
z_6{26P=K;^yR=8&-R})1sU7MqxkSCfa;AyI<~vuBo?U)vI%Fq?V8Igq^~nhv(c*!Y
z(zy710y1QCX9m^Il)Uz%2c9((fC&h4PQiD at TQ>v6%ZLk1F+1t)qPa>LO<K=weY=Up
zjkFj)WZ~{jVjYA2M_pe=obWszNd<H}&cP)!mGAQ0wTli8jE({Yhl$(Wj#jFt2tlTm
zYyi4onTejlROmA&BL3U95_NG_;_>#;kHe1mJ&vHo at K~RMUnR_1%LYd}!=m-k_4D?F
zDh8J;Sf-LkQK%t=(SD%Q&Ot+hnjAs_OXG#DL`a1Jy6_HNbS*V(SGRC$x8}b3p*#d)
z2p-ce;2L^rw{)bS?wDaq7OP5pQ2tr^{u;eMSLe&a#?0Itf>0b?b5B3`*B19vmP-{T
z_cK>*e)llq#g5r+?t{GyC_)JHFF#l(@@eujF<WhJbUL!<%#9CQMG!xtDuhk?h3r#1
zX at +3sspBMq^DNwO*~KRm+W~X)=QJr$A6u0jD)~4}Ur`EeM#nM#4aND{n?*`-l at 4zH
z9|tXtTE6 at rcqy?+3Lhg)a at RhkxjDG2zfr*{c at sKXjF7u?)&*nS%hE|OLflc*#18L?
zpQ0;P#5q$y66=w6^l0PGpkom4t7r>{wdOIJ at DVh!*YonHSL!<DpOZJyx)!uR?h#M7
zV*&0C#SyAiU_dJD#o<@t(F2wwTY@(+(r;c6$nCDIPIi31_`0H3s;*oNUQ<+%+L=rK
zWF|U%!PVQiNG<O89X#}%lMkc7_iCd*fpWsozXnJn%)0LfNa177%5NXl$NAjkwMhP^
zd$kpRCDpYgJ1wdwc?*WY?Y&rhS*d?R#HSBcib2J7&H1$pj>D*k6L!-wX6|2ty0HD<
zoqGQ-s;mF^N%>!Y`*_j+K8g4L>?TAUp1Xfen^h^3hdW4CHembMY8ZZ+38k4XWdMJg
z7GbQ9sNU8ra_Z0Z-%N#?X{=_Zrg<HT2GYB4&bQUH(rTfz+pkPbVe#;A^jo~T at 0tcI
zKF`+?izHkQ(+#%FZg)&nd^vVDrlkAs)Q7`UM<DVFMt*OZsxq at 98qeeeO4BHyH&H%&
zB9mh^Sbf$oV4=RnRGvL|B}kKYa^3Q+k+>n?qPU`3JI!K1Mvy+K!sFWU)?vr?K0Q1!
zr*k;pee$Awvoy*BQZXN?ONx_mr|^>Mm&S_qiA#Hlu+a!D1&ZE5tU;Fa@<a}bAGcmT
zg!UixJde`y61G!96>I&;tLsynHpPwagf>%lXz7{hoxQ!UUZ%|^$J=yGywfZ7@`92*
zQOfT7`gOBlTWRCFI*DBt553~XMt*Fg*8zIMp2^hoR`cC~fMfPSgu2nztONAoNb_aK
zHeUg&LHE>G#YO_z=c&}ftv0o<Ty|;7^@YrCZhxr~xcIBwN1(jSl(P}n*0_gw;c7I+
zeE;O(|LfBZRAH6l>Ws#`DM7DFG2I)NutL9kXLDgS(I`EfS?hTCJN%O;PpYg at f#D8<
z6kTmX5&rO4Lbi>icdvbnl#H9og=vN5+<RI!)2djtUO|^^GKKs}USC7IU(>(3{{B2u
zewBCO#^)7z^(j!LSn1`0s#UJf)qdMMO*c^Bl$Fkx-%)dt(X{%Hn;|ND22>JWYsG+(
z?E+gdO?CBxQ5~!7tk&S+2-y5_snYo{-PQup4pSkkT5kwg#7ft<bhfr~ZzF`_v`mTg
z!&+}I{1elL>$HOxgM8c^!O_v|)rsm4KD>-)j#>N((b1a&sU?lYqpF$TL?mkFr9RI0
z${d*T9+k3feA*E{-f<sL6-VoPQU at rb?I`BWo!n}u0osS~uIr4SOBBl3$}}=Fgc81T
zuD)NG7Y16-4K9RdpVT>ng*7eD2RBoX+pm-*Bs&_464&3pb%0z&n4$t5{h=9!wMR}&
zXm#M%jZ4|l7ABt9FwY9!j)x9jGMhI!PCETdN0E|Jva^Qk1n;`rr0mI)?uC7Rort`W
zMvI{-!RRl;5ocF)C(QhI8S9fq)EUDYGsC5P1Tzu^^RkOc7Q}<ale+13+P(3w7wWE7
zfN$x=o(S&wP~VU9peZ+`#LcRL<$262gJiARF}52ziW$N)x=y_7XB$MRg9w?R<%}Mi
z-yOA3F{?XzfN at E`To<-;HxDd=FRyG)JaG*-q_~}Aq~F_pBm5>m3$C-J0603;Vl=PO
zS!yj|a}Wu at DNT9gWqaEkVk(ZNnHb3J<Tsn*U7vH8!4K%aP~3$vX%me2mMYS2VlKbx
z2`A?N^>i4C?vv89fAtEW at zIRn12TK3nq1T0zwe%U$G8+wbjV0A+MCvQ=VRhmqh9B~
z!V2t{ZqA-kReWmjCTpN9H~EqGNI$Fns&k=ZWWVj}<C22a{4-n%A+M;CDHK2{Pnma=
zthEBc2G1y0dm7A9<W<&h{1k3WuV`Jf;RE(%di^>*Gqd;j=y5sQ8OTjU>FW+Zvl_Dd
zFTP?{_e2GhbS;7Nnd7HV!B?=g!&cXk(-K-YEqMKFnTSH})+EOOXe>es`WkYzT9mLy
zUmMus)bVuhmOuW>bS6c4c4zeFf6VK*A20y=iZb0)fcKQxvxYEX4?5zWTF_U?JTC+`
z6r|{AjM6L(*R+G1RkZWHFfb_p*zV>oCU!~i?Z+Ll_{uAD`DL-E?s+x+M#Qs9wt;sv
zde5>sF$v$bMhuUjcWyqnFR8ZS0U<75bjZ>KbWuXGE<o at 0&fOnurMnPJXN$+;O`wLC
zb!1QebyL^q%ZLf>FSxe*!dD$D7<;U&Gj+sqXVRP3s{WlOkMZyt*^O4zfJPs^#rva6
z!ubOtFa{&O at toP|eY?Bfmye`{3Wxvh>2b;oDyDp|Zs1L;(hUopnF7%4u10Ly)rx9$
z2NZ0m4KFKn%sSe$U^@?-P*W?cp|f;^9kS<WWm&OJG)!-0i_~KpKaF<F3$wEry(RFo
z3RB0?Z}cG`G{q5)YKd~!h&WxwpzVz at XpAd0x}E0ZxO^cl2>(6I=8?(A`mtr-BQM-N
z;XyZtp79Do>Zhu_LP8WhTT>c0XHs+c*^KEebNtv__^gGhQ8^R$0Rr(3Er3$-o-d$i
zdK{p+ck!JL|0#h`iMsNT!9-3+^fkz{rFY>I at c1ZNf~KY`;wF>nE11P0SDN|9!mQ+n
zh(T?uqyKn~e}2Vq0_OByZ#&D}pVYloV5mlS_x*yL&bn84e$E<Ce!AGVTv2DyzWS+7
zjMWd5KqENMx-NSXlk{C{X2YqHO%cNqpH-O8f_<+m!&C-1#i}PdW!7abJ{kG<t-TGG
zwJv(`pnouF)~GG`(^r_)SiLKE0Ez--KQ;xEs=ZFtaaG$^B&pd}ubXi7hh2Y7s4{h-
zupj3B^~?L?1YhvHWXp!4<Kf|@zh@;i%PX?ToV-vR(i$GUKnl{$K%I)0eyI?_;?L)5
z0plVmeVAgdqe)e<GSPot>rTx5 at 58I`nHz{JdEzW8W^D6pbTLbpE8YjFeIDhVy5mvk
zV7zu3mMO##?&K`zg)WZEKcp>LOzpW(HJF2Ov!a-#$@-WwAM&&7N9wNkaUz~rY$_zz
zE$<hcFxo_SbE`P6KY<}P at wW}i6|>Z(EL<77dL>uan&hOUq`F2K%ZKV`7asj;5es8|
zHIs^J8ZZ5o<Bm01MxV}9aWoWLuRe8}Zt>@ew^?mq!q{AGIfVYJJq-?y at IwNhQJyOP
z7hIC_w|QbJ0j=%m?dAI`v)hK>SpCWVqc+;d|8++l32vaBiEm8|*iyw_eNXv)qLJI*
z%pgO7-xfKNFF>UxHt0)B2K{1nFtv8rYK&lwichLG_;h=>svME(O!004;kDXgi!OEX
zdFe7tSrWR;=lXl9PrV<T;)F?vhjrsTo<Jz#@qbYWefkzxg?OrR90NiM8r)Fp>URzq
zA%|_Z3i&EUMFst6a(!mVkrK$Vd2()jmTB!e{pN*LKU;Ybs+4PP!`cJWZgWo#->mFp
z=>1n)+HJb<pNOAN at oyvxy6eO^zK2jDW5W|p-~x;oX;eQuP>!U~3R*OzmY3~9IN{~}
zEWBqhs_2E_0gl~05hqqHY=pW7rE>y&h$LrA0Q at AkU5CDjS`J-U=EC7fE;3N`sRwRl
zPrMm1N_;!PA1^F-<}Sg^B*4kX>7ErDe6>1!zS<a#RCC*vQ+KeI+>QOG at TfK0Z}7|=
z17pm(UlpNVf}BW~&WT{DO5%9J?Md{*zJ#bD!nfUP{8zcE%Md<=4>o!v&Z%#6hqswB
zi$Ct#x!3xc$Kd8URq84o4yV7Q+~+g@*K8{&+;mc>Vw2>!!5$Qbw-kkoiPl01)&p2p
z+d4|<C&wI(!W3R at hK*TSJXuFxZAU&rN0(+v9^|pv7YAFb7NXYMW%rK4B~K at pbDex}
zNEa0#-C)fvmeF?-oznLA0|xZJd4&)0pO<Nb7!-mRol;LRiMzJ5Zp at oeLj8UB9mY0K
zcq9bYug{fQ{iQ#HR9ou2<Fbf%QsDc<1v&s9o_At_OE_#;Jo7OLOrfaC?m63!$jPm+
zLDD+-?5n61CC}dKFz?x_OB~ovT~^GFevGt9l)_1rw82nip-3K}4m)xd670krHkMAP
zScs=sh}Nzw0d4odp{_upsGwYT#&&GOXy8R2Z at trH0xK_)96I}k%I)2k5gj7SU}Idx
z`3jkFOa|f+^u}GZtY7%XAA=<!^fX?Q!mN_<zyOI=O;s?@jn4H(Ryia({dBy4iT^Qi
zE?9wD(NAP^?ayiL=iqMD`PV~b)z6;=7K>;h;#`QP`*^LYNWUR1%>Hbc0=>Z3%CnAo
z+P3I9?n0^vKUh@*JMjy4EO^P_C=pba8o-Icgz#dDK{8;hvu=Nivy({*7*#Kij{PjO
z&^e~)+u%nEf~a<%VmLM`n3(g?i+{t={lVNx at KPsa?C#gcF~l*}PEq6HS_YGTPcJhB
zfN7(>OTO3_u2a)LU$Ey;kz&h-JU?IOw!uOOv9c;1vQncAO9=ZXGYj(2o`XC0TnYFo
z&G&r|QQwxH%oTJi*$kR0z!(dBpRsC|9*-~|3fhC$Pa%5NO->7_{~x)PD0~IMCS5+s
zFJ<HD+Dxj9!`^2FXig*_q^xG^gjQvq4gUbfGRGl2k48arhzpLtjG@$_7EXYbr_j*4
zKD!S5m<-cYmixO>_x{nH$yBacm*rPz(cJi^*Y?7*>Fu6oU~_aq;qlfTaz&|L)G=0S
z^LGyO%ZH<c!!W?FSNENOvUja@%eIk+2XO`q5V$CHm$0*tMZlF~Klg{ho|A*=W-~zx
zN-)OFNmEuKP1yTk!3W4OS4G^H&)5#nz9=(n;T(Hd#Swr>1DqiZnc3E7WPB4S0YjXC
ze;2mI2So&&xKBQ*iwi_VKy$Jk+z!WW5JuskR|j|0YpN$^L?_-p-C|fS1!;?jLB2$>
zlx8TE>i9UZVQYt1h~Rudo!>wFDe=ohhLY{%vowK9;>vdA90q?DYvZ!6`^x$$z4Bgb
z4>4D&uV?DZ7D<}NRe0FfwZ!2-(81gpV$kreOCXSLFd at +nkuBKj`WMDJ2bJ@`gZJMI
zL4MN{)Purp1dr&%AgoUz5rz&^wz#(8jX1qJaNu1kou~-H2QBdaxK4!!zb)n~wh#qY
zYkQPUq6A8 at oRyP+E0rZBaA3nc1Y<mRhsJWx+VUh@^R0R%6kKK^9jnjUWdLiD-Y;BF
zlHcuJ=NQPj^X^M_SFqfAgujFVBX*m|osjd+y_2r(lkUAlli?raSx(i6L0QW9zzZVI
zVRbIw)~hiO#I-Cz&!jr2zxU=>#Q5LiWKH>yqKHv+iw87Q*9WI;ap}?Ha_2e>QK3nO
z*fM`4$aK8C5xG32D#8=^mzf9A<Uh<j^Jf3e%u~0RJZjzmV2d%XNAjmnN)$VKZ6|KU
z`QM}VO{jy9NeCRcGdIKJP7+F2ncub3*gEX<A%6Kbq6RB1oauUvcg;p;)*-ToyXKfX
zkAbm_J=?Om9sSd!Z0dG6huIyv9Z$Te{-Ph742|ZA=F1v%2wbNJ^~^1=lHIG)H?i7x
zf|aWOvlS at tPctp4UeH%SqW+N(XpUc_UnT`!0Jg;k&kTfzREF0RcA7`sTv&|-=o%(H
z=<0gbalsYTwkdoY8Fe}*2_R3!;RVI(MBBEv_-SDcWGYUs`eH(V3c{O at no;YlEbEmg
zHJ%XhNzO6C;>T|_Ifl`w#Cd0?9 at kNft%uE8Ex3-82T!?L$1LuJE)pRL!?Vye%g2JP
zq1u-3B3$dh9Vs`Wa&QUBX;pR0u<SZCo30a$VYbxETHu!V_1CqLjq8zn|G%BofQOaU
zNm2(?V($$dO)7bEv%t)BKO<1_*UVrm$m+B+lxQ{{N;t8m&UxN~&nxjisQb>arkZcx
zjUZS+EU$D#rKo^_bO^;tFVdx>^xg?QC<;mmg3_BvGlZg4DIpZ;O-evo0 at 4XxAV46w
z8(#nSKKJAOa?d$=;DH48%vx*Ktn!;RGwBv8sdJd(w`crK67F{`oxOQ^C}A|LB?X~L
znb1G)Gx|^8KNe3s;(8>Oj`)0t3m5PrlMYf;sN#BPP0;hBuaN>^0jy)V^FIU`2EMnx
z)UZql*P0CV+6J8By2H)D`Kf`W(m-1Yz^l>m9L;G0lSjhEUuQFMj{a5WW4&6oQ<Cm5
z4XtrR&K;0gm$t=91asHm6=%>(uV3VkTT*>_o(fz9Dmm_s3Y-?daN5wf9rYLZ-?am`
zkGf9pt?Eez6QdEujhnUjya1QRO%8+Uy~!&1PtmCD8CFSb(B=bO7`k|MS}rIGt4v?N
z03Dgyi at C-8;Ycr=0jR$XB6})`*D9-bG``!7yjRVStt?`5s4cvR9poG1b%;Nwl6x*^
zGJ%c!Yj^MHxbSue{nA1rE%N^9Ps0wwFq%Jd at 4>yxU|Ej%#>Q2I{`lsBOODapI}&8i
z*zyW}B7 at tlR7@zEKW~9StH4Fxn*Oi#%LhY4a#Eur<72ke&ZK4II(a{4^d821dhh72
z<f*ES at uasga<#egP)fLY`pX&U(k(kn!K3!6%vPE=QG#Dc$B)*x$W!^OkGNXilshPC
zq?i)am}s?H5htxZfepStuJieHT<6m~v$-7)*7=a^KYU4Sp+5|^EO}&mrt;4UmsaMx
zh2_+azZWBBTY?DD)92x%+`>HaH5U{u7|sJvgFnfN$VHy6eu=cr%ls5QN$jWoy0No;
zp8hlcPX9T;VrigTfPe+<pUiFAx`pgHGWFM&=5>p%ECb+14Z&KUCy&9>Wd0jtWY-t9
zuOEv>*zv#Xe6Jq-FI at N8))wrNlkoNQ{h+U}&>ZN{%plR@??^(KHxP0#1 at 6BUB`tOH
z%SG6LLuxG<9RKQ^#rz+1({yclo4BwW6*$`HzUIxo{HeV*&FQ at bbi-yUG9kFz<R at hV
zw4`~{)plwRgw{%@ddo5$`s#zO!J$qz3?ve3(IhU#cEvP&#sGX2Hv(OIbe*mZeWYic
zM_h-!nc*OxYvU-}TST%22W(gR^ubKRW(;8c8Aok8ZinNiC4);&hg7kKq-4HqhAN;*
zjFQ1YEsJf$$h%YS%<}kc{3PCOk2L0t$9<TTBd at 6tWXXq&lBA=p^Yn}Vdxy)VRTmIu
zDLRy4Lz5ZcP?x67UT?4+N^4-*g96^bo at V^PUA{I1Engc^)Z4{DmZ+?Uz0O=kMANc`
zUy&5Ag%`Dvi{x=l%S~kK_27(g$tyBFe+0L<*IB2}r0xE0 at NW9fpuzf_P2A@v3Zmmi
zP&<3cw06TcK<6!D!om5I=%tO~eqM>zqOgfKl`PzhMmHbd!SH{jdUtwklt=CI=Q#Zc
zsxF+Y)y-JoGM7>ZLwcaxCD+HXO7ryX-hRJ>{;V#pqU{{#(1(pN5fU7GjcfUtjzR0W
z3gLZvha1KEq!Dtlx$L0=_8U1LOOiO4Glxl&dmGGU`VHC?YY2o`$!9BeN8|EKd_?+N
zxaN4`LEyS^kQvb=Q|?GVE+2_D8JTf4o!oOJly7Cqk7yRKj*)z1ycab6>j at Qdd-7x{
z+K at 4_0zPyTxfQdG;kdSxE>D)>0kHj@#7sPP>WOdhYChhd&_`D0lXqO2G?yJPn8CBf
zluzP*YLY(hv~sdjTm+6^Q&x=P06fhbWl)Gmp-BNK!U(!QAGTrsw1PCgBjgh85BoWe
z5v-^tYLkd~^To!{e1AuT=Y(GUOn&o1ZQu6jvV{N2!KJmvo?b2>c+0rxaDQP;CLu?D
zsZ8^l-JC7C(3~`#ORgI4+itNm2xjrrJ48Z6`i3xhT&wb!@ds>y3#|rmIf8OQZd<ZZ
zoMsK41iix&Qcw}jWU!OGN_J)UKllxviuP-Zao-OmZ#UN&6twBQ5#B~xp!Yd4T9Q37
zC^~fF0Z7~DWfRCzF&yj5jk~d2_CsU?)XsyEn8I)z^}?q7A8~Q4Zw at DL>V)gGm50;~
zs5iFq0~kK?#jtzwUXz&4zTq8{0n`CXByFZxZt<FmAhkbH{xB3>M>v8joJ%- at Cjv0i
z{TOqV0oBPbSWvcTGE%;IgWyP-=Oq6rso3hGQywrtr^6(0G%+z;s38n_3sPjV{}3JM
z&t-4Ep6)~c{0C$}am1k6_Rp(6+`gCQKy2_1>?m8Gw6b2lB_C8s(^f{Y at kVaXEl?17
z;G`H=kD(ze2Jiy&<QDqaOuc22$dMpge=`dYGanJ(HW}D$#_g+yl2`Iv0_T=CL)%<s
z1}*^<CoF3C+ at PHDRK|{w^IkYVYSFxg+*{I_T%;~rF$*q&!o;rtoLWx%o)ef(@~-32
ztZQ(7-->gPm<(;^b2cFV=5Gtxz!>n%duQc1LQy`-m44^YSTg{3AVR1keW<qe$JcNw
z`yXmTE4DJ%>~-P at dkFHrGC?R~Y0uhqnRqsHN06lDih`-451ch)&?NCdaKFxV02=@v
zF(gjmw at _xPJirJWPd*o7AaRHY%ia``B{cn!{l4=fv*ot(!H3H967QLH7yCKfEuw4)
z)%_Ee-cy0PDu-L_4f3fVXb)rs+Y6ivq3?BrR~D1xo^b{QerZdsJ=o6RXuCEMcroLV
zpqZWQv#pxoKb}R0E5%s*z$=I8`QB|9OYqCqoZcUD at Oh`?Uf<4B!Ub+R@$KG<TX8v>
zNTgA<N2hFeuUFdHkagSm*Dn951vos2nI_buP$hl(G{Jj;!e>LUmI2ZLiBNL%N8*~s
z=>~f73*78W$PGUe*)>oL=ZobIVC!~sIC8e!_p+iLXU%DwtN_jJ-W3S_711*xCp=w0
zE8qeg9;N69j}3Lg4x{BsE3P}p;IAKdn at 54~H#7%OteK8;N4Sh7wz1`d+Le0Tkjmyu
z^x^KvYP&!Kq1+>vk6aW~EVnl*Z$G!pF{ga6Tm>tMC;J-nkrBD^^0m2r>83&YndYbJ
zJm!kG2p2%ToN0{ps>_F#Owe&oHU&s>1HoT62hjQGnxc60p>5GDo^*K%CqLBL_lmor
z4Y!Cov^CoA!a2<4OL%)9<>tf&`*|O*hpfx{-&oQ-SS%s+q7%`3w~9=HKJ_$?9Q47)
zM|QCz{$%;XM;oKgLFL~6WGtwMOP{)a!f?Y2MnNDY<|r8|2;CWV9oZR0J1v&MMt at S?
z`bB3+a72l*wie69-&*p6>2Qc$TP(`$-E7E=haReN=)tmo<BGyngVD<qgT@?cf_%aG
z(=cg|YfDAwl|@gO{G}ptm+2hYQ8klhf%N+WakFnHQa-HqDy%{rD>L&k;7o#aOvYnu
z1>@NegG_3XE3g2Ab#l+T*LteOt!Y=ZHfe#-q<&uk=d`?xJ5)d)7ReJe*CZMX(fw9e
z-Xj~2*lTOFh$ibJ*Ori$%F;hI9UG(Cj!L$>mKS)3ui5{}<qAR`_Td7*{Kw4j`)r<?
z3XiEkO-%&!O8BoY1WOWsznOKWUhl8ndYVZCnOJr+Sm*bK*ZQyTVy&c*IjGgp>jOv1
z=$hT3Op0H=OeU6k98x4PIr411zTCvmP}?@0h2X;}1lDNJiLkS at mdVAwWPnaOB>f2Z
zzD(1E0#A3{dp=tqyeazD>m?(N5q*7l8+spA?|WnEP5x>J^0b%-L66pE6-93N04E#*
zzH`OcBQHqQ$G99zO$i55R4ctcA%9J$E&O0*Fnob1L5ijQJ8(*`A{hbL;^rSc)X{Vh
z>gf5`uC+dn#YyCOo6VM}D!IT<P}t^ES9GV^cLP*-X36sE#-1MPPb7`!jjdJsb$ohm
zZ*>8*SnempU?xF0M&6i&4ekyF&YWmPTnNx^!O!%+Cpy)AYRks&g%lfhzXn(5ot;<M
z(tUFLS0Q7+HiO?2|25(Zj{qwnhNvzU0M(P%Iak^_mpUf3uOwDf+F9klP}AGLD?9n!
z8s9VbNYhaQZ#2$haq?VT^hsBV;(*KK*;5vVBd*SAUO6u2e0U?zKWQWO1tyh40hUKS
zgR2H-l1_*_e0C9FjygTFMcpvYn~1FOB!+?Axwzit^(tWiV$#45OYHxY$G75AIVY>l
zhAZYB523-|N<Mp=yP5|S^vn#>(;PQ66 at LF;irIk at a2xg@%E54MtIgwu<?wI7_iGuV
z0#fCTAHFN*it9g^uWZs`<7gip8)!wP at +RJ$1g}}Man*s)<X<i0bS4aYulG8Oh5i|n
zRs43eVP~F-CwSHRsaCm&Va&#V3Ju&tu`3#<I+k`?8}3w!SBY0tS7aMF_y}e!p%!6}
zI9wL*T{`jqZWMun6dU`077ljDU74deR((l_``q*)jomUO`FK#K-Vh#m%jpKrQHc_w
z>f0iG0j>_gI&zo1;3zT2rrZW`tYP542ZztkH~vnQ#`YIEHhvo^sL?`aIrw6Y$KFk(
zRmn=hb`(q{@EqYI-^;4kah6A86FXfau9 at VZ*Wok=iysvK+}K}W^$+yLemEJR4gX_t
zCp`e_ at _Ign(T%tkm<Zs9TS+Uio)m8QN)EEi==h-GS|QR%02#Pi*_ym==eW<^pix`k
zv7fS%Ob3BiI-Bw(dLO~BnA|>-fEiC2`?2Ty1;UZ2CtyCP at QXRdYvF2wP<T@^%+a6x
z!5bxZg+ku<uyt6H at _3Z4zXSE-$Awc<T!2cOQLUDKwMq1$M#}jRY+i9<R{`8|A}V{e
zQhu-m`gKY=l5Vx86BF<)(;3T)3`7-iDyLSJAWiDCR)6JIjn`-ibe)qB_p5+1scg;Q
z`m#kx!`q}=lS))3gA0B25c2+sulA)o6GE%deI4k1U7dY5$V32nxQS|q5b`Kfsz!CI
zO)$evXI&K?47y5RnL_(61JJdg6|~@2i8SJhMSyDRI8B at ksPuAX<5JTydhuO777V}n
zs2fK27~ci2j|^9M%+<?93&tMv1{{9+Pgmj9p=LUB9){ilY`^j-$A(w&yylR7S$|`Y
zey9DmG;Uzo&bX>L222msC0r&GP~Q;gN9`OO&ih?a$f_Y1Tz@)5BztnWD5i at yF||>)
z{vnVS2}6opax=vX_68fBbXQLgPGnA-i@;3t#DRJjECyRI%KFo1EvRs-0&<JGVKqQ6
z{w|Cfn|$gM*U~eHF{^`w>vGN2(YhHUQ`FIn+gXq5K+~NAy2<aCM3%iLoyNfVrWp<E
zK0FyI6aK%gGrq32B+L5G;h|olW$#*dQ8CTmtJ;t6T+$;41=*erQKX^SvPl`+?0=aS
zUCD7&JUQGLo9$3tINqzgxvHc%-L`NhWIBxFhx{?s4KXwn?;GDTQ#G_aUu&<<_NXpo
zC5R6dYn&R}BRDocp>X=*UtNf=s!FKQn1y>GP4rQWnG7-F;502kEcn%UI&Z-nC0Tbm
z!fx1J2sw}2SNuz^(_eBmFL<Kncihgd?TpWah!6F67|t!H|1u0QUX9TcNVKMT`IA0u
zq`cZ~@cjndi)dsxhp)2i!=I*b8~ji?P6D?No4l6!^|QjmP-2*8U8v3z#qZbw_^uBU
zjjBrvkgI~053g_1A9Ld7e(B$tB;#y at eOgsG3f%THCh<3TR3LiNDcSMQ6lox(slkUx
z1vn;_+*^;A7$5Vftbjc{BlD|nHIpziKE`rwac}RLBDTJAczsVbB-FY^8oSA9wO=!a
za`tO$8`zBX at h7|@P-35Yz1aYji1dv$bqqTyzZu~7)Avg}A2c3~LN2UjV7W;rx*p8+
zR{_oBz3taFds7ONf!oS7y(w~VmjNvSq)DZhqce%<HSE%H4qjbh at oxQ>8|T{~ks1FZ
zxX<U!4NxatO;RCiW6|Rt7i=D;FD&X~wqm5_j^5C-I8H~Qf2S8+2QHJ3xd#|IPR21&
z3aA&rHrD(2_=vJyTO87>SA`5WlInK}gbFn5`ugiD904>eYb$oPwqK4$*&p{#Z>B4X
zbOn#Rg&nsN!g2c4_0UTqXF`$)=^1FrbFEn!9Q8}Y6Lu`5{*LL%yZhRIEf>}CgMjh_
z(A>YE{+nrWwGb`?1Ofr)+wfe-%z9;g{mQ?g`u&@AyTEr8swh1 at UE-P>Q<MQS1Ogeu
zVuL5igp-DVy++h7;Op!AMG$?c4gS%?ln@=xMm at vd>}|Tbva;AEh#s20F<y6KKSMas
zBi8_K`BN^gu8xk5k&S!((W|S at zd26YQi@vV{+k5>-<keKp}>9cY{(N9fDo$xL@&Tu
z1>j#sfXh*T{WQSE^p_n#N$7820KB*O>$idHjsJ}sY+w$|PoyD^jZb3M)-rbK&6aB=
zf>e)%5_07d at KW`~FZ>sb19B1$hu0iUPkhU;M1pTI%XX4RZcY79(``%>>^nu(_3(Fh
zCX at S&?^YN&?|i<s$yNdWI)1l8I_QZeY#5)Qrh`#Xg-dvc9Hdtot&Z9{BPU%DlS}sf
zh=uy_2L{nbPx1`o?DdB1pjS~tdl1>p;KX2Y10Q5ofpteYZviHC`9hrt`xUb5N{l`-
z`@w8YsEhHA!;?Jw0&OJH8j>H(A?Q=J?Y2|AhD~Qi(pOXjxGm#O>>(Bm)!dZ5y31*s
z-?AeD^+Gq4G%+i)We+{&X#G$%!smOfD?&x8opVER at na9H*mm?(G~qoXHT`AvP2M^M
zV>9oUI at MZmsq!i*ni=<S24Wm!0^*eubQhwIT+Q&R)XC_nh&Ojbw<y4tEHw@!#KGG)
zd!NSTE8HuaLWia>$c7Q;4g&X5nepapf}1 at j${1`%b$=@EYmpPz_CI>OSL3^Kns9Rt
zvgC&6e6-N8=k4wKdD-vB;g7$6+<Ky8bEiaiueLmeQrS##bPAfcs_bEvXW2CT%do^)
z*gE-5JI-njs$dY`Ejeucv1^WpGgYthtE5M?RL={pJ!`#E{;QtJ)d8u2`OMxL(o1*x
zhIw<F|9s>X!#F0CKL64EW#%qaZ5t=~p+{XdK>UMV5xx_z-(*?(M0LksJ$HhOEnzIQ
zdR*QI9re1NcrYVT3_sGG4gRAz8S}WI=x9c#-t<^m8t9{eGbWcmNPdiG7dXA6+jaVq
zkimyr2;-ifZrby&%s%O*b^9X;oT|F%3QQDbm^EFXd~A1!_Pe$x4+)irXBdC<gwi5!
z077IGTUNIj%T<5k`K&~|zU`w?^Bm<=N1r%tvmLK_CjY%_q94`s<29@?i?FgE_p%YN
znY9&lDwFYuY8p*Upu&=uN_B+nAI7$Wt$wZz*-_azF7}#$v2oZ9W$CdX;j^#l(f^!1
ziSh&(juqpvC58)-77l%uAW+Fgr+dyOehwMEQRc+-CakpSA||Oe48M(8Cx~q;=uikr
zZ|&^w5ei0jObnW{_*}WvdjK^?UF3)!5_70kRM0OqX9|r?4x1jB>xiG-CN4uLqsyHD
znbpzH?t}E6`=1g1UBf~HQi)PF9`Xo_gsItT{9XAl|K|YhP5a_cDn*ElvMCBUVOuC|
zx~d at GeBHs77-K{iOz4TtX<lvTZxCB$Pd~hRqSnFBj#Vhh_*zPj#$DB(5#m-2Mo6ea
z79o*Qoxt1KXA?W>J-nj!jrsg33toeC<5vOo_?m+G0hQcAm3;6k%3{}u3uukjCjJ=r
zf!J6{t#r7aH{k&?NKSDk#&5j96TbPJVS{np at OLEEzL?EgdReiay%}vo9n@%$V%{kW
zufnA+RAOAtYIFqx_pi~OdT|3dmH0#1{kG{B`!9?9WobsJdg+P|1*Z67zK(dY3+^_y
zYb>E=29?glvJM-NFqT4xK~>K_=;VHn++iONg;0D)7p>17adjOVM2<@L*31_zGy at iC
z-IuGfQ&Z_Qo-hMXI2V#HKmOXXO83sykI8-lWg;faNsF`%fp at khY?O0V935z8`ak6>
zU~~l_W$sG#awyfU{*2-I-?)M_N at agUKK(-Tl)%6CTHv1(6`-_0^v6yveHr|AOI2Rh
zxcW_58*Ofcy1MJvOUaEq${tP7h1`f$1hClG9a(4Gr-Yb}GTX0NbGzM_y23BR3W&r%
zaczRU966f^^eOaeSy9q;`Q%eht#nsgXZGL=l6rVkdk~lQAJXhvwasjYOK8Zqu7K5%
z_jadEFz2MK%M9ahLN3KjWE47W2(*`rfdoT~hb?V at Vl29Zh;$dB9GMG-?v}70PqdAr
z6B+BWMZD7sZSSobH8I<-ljnh)Ua$%n_ at tMTBDLttX)l^)r0?JpHkcYhC9*W3F?;0M
zNX=T}W$IUo|A6c30lEz^(1Yb2{}0n?b%h37x_#<5O%eU^w>nsV at rJ2JdM?91<Lr&R
z$6 at 5@J?W#DwG(A at w;J!oBkd-hD2Dnl(U+kQ$r|!`FEV}QQD&NyeL9 at -^*;JNBwy;^
zPb)Up2lH&uS+<%Z^EUgd?5ffkne5+pt=8Gd-Y3?tUh`k;rzUA!BwJ;INnaUAEz%IA
z at LqoYgI7F#$#O;^?>9}35)dWu+?jz#RijKFzhf$K87TUIrSR>9qvCQN at X@-sTh_hy
z+e&YZ(p4t+#err`U9ed_S0^@8$KgWx(7jvOm}&Ij&k8;fLUPK1ltFZ|*nT>4t^4v6
zII-+qiS|~1=xxC5n4s-?@&up~cxSe^R{hF9JDGm6gTMTRr%&R<%kItjE7e9D*Q&Ev
zY=Q-Ztj}ZIe2hc^{m<(Ie`;cL8_1!gHiLQ>1^piFR-upIUNMK<3Ts+fqIf!B_fyM$
z_sCblDEENt{f@&Q+yhC{B=G>MDxZqX(@XN#{4CEZm|r6c&(G)Z{C&jqAvp<5)tnr5
z|9p(VRN9aS&!8qS*}r=3x6Z`Y`zaqC&-swZx4 at aHLxl`#N=3NHdsf1Qx^-er=*!;V
z(bxkY<5i!-#qB)C2KYo4H9Wh~;=3dqCC*vh{F2S~)3jUvhr6EL9x@{s3%3MY$k1A%
z=8oNJ{aSIcgZECcJ_z1)B;pp|@1CUOj0_YP8 at Oi*%-VTB^zcF;!iIWdp%Ou%$NC4<
z>Hk;8HEx?xY#24wyKMo3&=X~9h`9z5+cM+xQJ6Mfx>+LV)(Mq|i(u$xB4eg#-~3+r
z-+*l@{^TR7hDdx%eZ+7ODrglU9)sKNIe8%A0YD{WJ-drp+U8cqenKi>v=O>-_WDDM
z+vSTzff<8(vXYg$ya;W_0(rKUYmgPFZpq``@zOa3dRcDZf`6q^5u7@^%q$?Mep0(d
zSdTZ}N)NwGz0SNc?&DkE;VoSdy*^k_U=2B+5quVVf6{D22K!XDwn)F0Z(R*XPztK$
zGZ?V at rIW26D-{fX$#`whal|^AJ6<KPAi9#_P$X?K($;^y)3hk6Eu7U~jp{fC4LKhJ
zoUw=)ztbtC=53Tm+x$MZ^UG6y-c0p<`TWS`9^L!3DFk_uflkIqUIvfGzOaHyR at qvX
z7PXDhy}G5Tg~F8H?~8XYgrsj)Y>CnJc{wZU50is<Kj>t=H{h8gn|u+|Rbl3>Y#Z^^
z6Qm}@cNTzcC+^0Gd0eII-9(Mqs35d;d{9i-%-G6pSKIx1RHe3p3Z_O(s`9;ow4`~_
zxPk0CdEHB(<e?m^3Gx#bsnF0&8MNJzt$fHDlj*v+In9^BdMy17)J@=2((f^SrY|bd
z*dbdpG@=lUf^<bSz^Y_{W}%N_#)D-T1$cKkM|EqPPobI{cCGtKEpILzvw{}9{5qiV
z*`$6<YNkTb;U8_`sE-c2Ub-t{D${?Az&agVK4w{y9kQr<81l^F?xwm%S&^D=`ojwL
zUSF9(!s=)zRT~4ofBk1{^1Y__ER(W+v!e0$XswYVxP8OdBIILi0`Kq0b1HaaZ}D(}
z`k3CpbugmOiwe~pb7~7-^FBJGzjW};>6bvK&{l*o8{S7nn07G6z{S|U`Dx{gHgn&f
zXL|8HG!6Y$yBU}i6Z<7c`V<xBu!x?$>Hzk^7*8A9+tuvWw2!Kd1b2T0%L+CtA-!Ae
zLn`O`TDwN_9!(_IyY`{0biYZ#Ox!ZGyQ4>Kj1-=eTobl_Cu50zUahzkEIEhuU5Mks
z;V5(gB5_RO6wR?hx6o_f5o4%d>y3{W|0oP;j4{RF*;|T)R-Z95-+?h?IHn3m6|OuH
zyz~*NUy)ag6atJUV`s-Y^AEY3qe<Nyf_|&d^SPSaksO|BIYJjx(z7Puep}y`@7OZ&
zR`gXqcqdQ!RS1d|3Bt_?NmrCh`Dc_%-@}zS=UV5erTeMI|6g#+<UDuCF==l7;6zm0
ze55`9`sqU7ZPj?`SX|Ul)wsh at L1}l~xqXv8vzkre2^VfoPHP7_)0Q(fHFI}Wt2h0$
zTYe=6cbSY=4hTmL{08PnJE<vt7VnAdsKgiW#&=G9(Fe)S6<K at gWNgp8)H(4dbBTE2
zl!f;$cT at ybLz3Vx`jBA{+|e(SL*w*!A$TL0d%~3yBZ39vfRH;RHPn-DJ&bfA(*eu0
zj})Y{1GBiwwDqzvTF8|1+2(C(T|(!&oIg!_^DJ~5Etey~A=G};I^=}5E<vdQ-BFYl
zUv(uu2;R=@YlA<``l6ur8lr3~kaEzw9TdQx%h<gYP(-mYwAa>s0;ufW108vihqe+6
z{-gGTZkA3pW?^A&@9;n8-DSsVam^BT3>wK4lG?aRF}6Et6iEU at O?D&5{n{gj<(Vht
zUFHG51X={pbWaihDAJI5NoA$<_r}E9=<iG~Z9t}(z)scR)BUaFE)d2VeDNgnzkcUL
zX~8Sfjcu0kNDHRUXO*JMNINFpyI&00Mc4(J*<EeES#VsiAJS_T(siQ0wGN~iG2#&k
zB34XyFvM&T(|}n~2AB6YlvlN-e^LFQ6CYGURM^!_eO+?x+#It3GNy^7ddjILDCyEk
zk5g at 6hHTL(sl;4e at H<XdBI(_To5FPMpBEB8&e&i;n%%A`J^_tZNn6GUj9_-L$_7et
zjnz9|f)*x at OD<kTWPm-}V^)@CYIi=9>%wky`Q&ODRG)^ds?0p|9pJgKsc}A}D+q^k
z1?mV(K}9Bp7|d?sy&LcMPTZLMv8U2$x^B&+GRL<pU91o%Gom%PWvN>;#KKXe()#}S
z?9ie#i!zH}vH$9_73T#`q<<~rN~`1Pg$gUkqiE4Mi4~;F!TMyEUTvfO5x`W{9|n%V
z!tFz&kzO}vKiPQU8Nz8Bz1y?RGZ8xph269MM+%Lw-WTeq2OEdY84fK`u*?c<GI~UZ
za!MFSP^S25nQ<A=#GT%IFq5TUJfTP0EzYP7 at K5}g-gozpXY6W{@IZq9WSGYt&M2K3
ztuN*I*cb^GFWvSZYzC|Cp3ZYRtyVUfIS=y1N56Bj-AUeAo6RvZFl^pPJZNP?({G at I
zHfu#p$6<XIs+b7wK~X(~*bsXZmsDpTRh!vh#OoiMN?i^<GcHTIe;~IqXNbE_){ImQ
zu{xQ4!|fGC<xzn%KL{);1EH-(k~1Z~wtQzo{sjQ{zJU-((r*RvzV}>E$){*s;tcI<
z`qTFlFRxr%$k0#WqHAlT5BsKS-sjbqZ#s_W%~U~-nYwXT<qr9t-T2r)E0^BLhqGPD
z?b{E6aa_asiI%NEqyOdn>@nxo;!511Xv>Wz!a*`Kvw{Xngi4~sI6bwf$}R2d;qD7?
zoR{_^vn|+`_oq|qPjH(C{J$dmDDd>Xe^6_xea`u--ZepVVUMIxaNalD+eDf~v2yEp
zwd8sGY%ZjWpp3dU+V$85HMAU?N9Uiq0tU(!?^zJzLh;E#eP+CzNcVce0gB<>QT++>
z!+08uF6Km7Iy_DN<hNCKkDmp6DgPS-IwutV7eh|2V^BruU%0`wwPGJa#!}1lW@<g>
zF=6*#T?8?umiS4BFAj#nMG+1=c{P--Tbp)YG?2MIwX$L>8Jw=mGMqaQ=L(~{-u}%9
z96_3dD>rhctDE``#<<m%+<qFqC=dghw%fHdF48}=)geq2b_uH|=OG+Wx%H4ge#l&X
zWD#~qxwY at 7zUx$r%-|l@*a1o-lDM+pcjYkn1kmaWa-CUV;je+R+Y{{#pzGLlRsx6Y
zFt%%*0Zg!tU#g(GC%$pyb7c~Kq42Gr9&XQvnqq2h|6&tEnZYMAN0!rb2v4*#9_`p<
zRt;@;2Vol}<A_SBe66=>@<l$|kNgU3Zo!Q0q&;J1ca}T(znddvlLGRzAuQLk`+mOj
z%UeX{54rJN?ORPEt?T54#Yx-vH$oXqszk2HaVv)(%rx(BNXV|?@r;k}AJfx-JWl)`
zBR^hvWCq4vD4RQ}DL+u~TOIh at tdEhpJV+CPd?)Fv?+j-y&KJaO!V>R6;&L>&8LuUF
zj=cIQA?30~n1O8RcB#{}YKQ_Cj0f)t8z)DEdyL2KC2H5(b at I=}M^LrQTO1^VtNcJ(
za9E2x at qwpD&`4!d`;tm2=d{R&o;!)DQBFKaBj|E3w{n2y2v3&l;V1It|I`9FKdPk(
zC(*PC?(BR}j6L%`E7V{={KOQS_=72*HdCis%#2A;X&UtBQ}J|t>3F?t`IHFj1X;sv
zNICMu*92ro<d1Jox!EqLi&w}w`+(hT<5g-7ZyTF+b(#hjF^L`M^PlI-BbGJ at JHb{j
zO9#)aiy5y91oGH>RRW+NquLRs4OtomlJua-FnG3X(VLg+vAf*LZDY8}cvgPm<QkTq
z(*jCt5w<;jEYj;>p7WiHr?ET6<}Wrg_Jg4};RDMXT_#l6J@;<1lTCuzgu6X#bmfy_
zn(+&nvmuo6uSVbPJ3O*sVqKm3lT|2WCqAEn at jh545Lx^OwM5eSzUcB7JmW9W<-h$w
z+87XxDwNI;HDUsE8do|~94b;AFa^s+*oh-{*#PO}X($@GYTGv}6U=nD_72Xy>Qbly
zH-!FpXmLzmgCB^%b~RP#DYc=q1<dUoxzd?{=Jxo?S+K-IL0_k2G?Fc`ckUH8>W&yq
zF^ix4?Rk|v55y9%=#Bh9IOVVHD#I$I_ff<X8)c1u9BXSN3i?aKvVs>IXq}dXFx2uZ
zfJs6nC5Un=vP9wqZolea<K1oyS5Q^S+EKeLA#-^njl6P92v~0UQnmG)aluEPGF+71
zhOsapkVYZ-r?}4UahD!T0oD3p7lUdek!H}rYrM0k8%XQc??zzoNS&_m1rT;nE-p-l
zUR0p-Hyy1k%9zoR)yaDrXKg5~u9~1ni at WD*1a#}xZ28B#C75S at G?%0lGT(x7?kXOm
zIW{!bOK$5Ofq+TSiei0e31?U6*^pzBLJSnatevt1`9d7&B+fYc`Vq^o52jv&Hn#IY
ze*G<Vl<}=)G$JA*fCwoLyLfqKVow&Pvwp4|<I0d{`Ml=l2%dU`_S7d^ng>F`IT1aG
zKN>ct;ZoBsZHO1diaJU+Hs-c6hFb)A@`VPSc}|r$IHBr=EqHz|%pB>ChLr|X!cH6s
zaPv$^gY}fU_=M6NuZIGu<QN|rFTEPTn{XA+E~Q~^T6<SS;;i|;zxg*+H^oVzI%Wlx
z9a6VTqrSn`m=1(EUl641<K`L+MAfqjrFQXU5)=hQ>ci8VG+D}3rrnnws>3DX6dsB7
zba+gBuoV+PpLdh&a{HBm{ca at y<mpu%5$JdQQEs$#{oV5I=ba0C`?eqn<>c*Y6JWw4
z23<uKJ(d>GaV)KO`gdy1zRl8=mQKApxBfL?jJPG7a2V}7lQ>nw?&#rEz-7B8sTsdA
zn-Yz1v>9?Y)oaVNMW%GxXvoSyzbz?6u+>`J*?KCi1C(nVj*dj~D`rqNbe~-ZM0LSZ
z%F|D!{de1vxf}3f!Ik+%?Q3Yzu40a&UCsJnCp3hpMuH$QOL2<+1H|b4_+Eqy%}a*|
zfLg9FuYO8w5C4SFtaafcWKY3?;nqEV<JH$~a}K0Zi+ruLU;_)^o<eD|crs#9vHlAP
z%m~k#-1RNNKBW_phoVOxilxml1?6=PmCi4&{LttYsrDpX!zzA19HkG@(Gs#z6U@($
z+&gez(VlYCdB1ZPdvs!!e62yVG{D@!eqmOUk}kY#T<1_JT854q&Sra^pt!4qLrshf
z&v;Loo6<Gm3Wl#aw~s=62dhqUK&3OMuAgxAU%b+ at 5g|iI1NWaSu0hpPKO%gbQDoT;
zSoU%Du9c;m=y$CB5DR%)G9K>?#o+0^5=3HT)+;7Ym<Jfog0W4tH=a9}_EGDK(%jHu
zPk2L?sSeNlo)e;Yns2h>>COxBdAZU8sHS|`;O$PK0f)?Cfs?ps?-H1?OC~-*&bC3y
zZnW(jj{0QBh8 at 8pm>-43>N^TaVe$G$w-d{T*s01^>$1i$ugJuQGioBcJSG^A;0=*f
z)98gwI->K{fiPOm+%V6kWSXMuFY+*;k2 at CX<zu9a%|uT)EXqWdG^3^I*ZeeVi3-is
zslqBOtPi56W_Q=aYrx}rKaGF0VhStN=uTENouhlCkX1cZ5-vO#7Ug9W7VFnTvGFW3
zsHPY!#Q72<PH(>O?u2^DD`38NwofbHS<nOyS at aoN+ZK)E6S4mC%gAf?>67NC1w*?q
zuVrD{M-|vt4HC<|j!Xq!eMVCX4zqO3)niSgp(qD^g}j3A5{IMu3SqGZ(4SiK6#^7;
z!}%59db5WF6Y>Bv-;b9DkIVsIwhsZSiyqD}ank}xdCT4kK9X&20vEUnr3~KCca>8F
zsKpf0X8#k`61(6a$=2!3Y3SkwKi%*^lE0!^q{};;<$|f-^pe6icegsO(UtE5U$VCy
z&xf=b!OC-?&3lZ|A>Ai%5OBD0oZ<b#q|r7%y=PL-*Rgurkx5uMUg-CZL!-O5aes86
zqKi4^p;6fL*XvkEMje%8_UMUXmC>Pzup1Q`vqrY}obFiXVB8hIvBu4+h_%#{1fP9Q
z<E=c*M2%bpZi$eCwI_dS%B8_WT!Tu91&k-$O?894+C)iUl#o&zuwp9^lkr(&_hT2a
zp_#JKb&`<D1hI$Cxg+)v5$=i_xXDQTpkr6}{)4Yi*VB(QAbGT$MS)m)c#Dy0 at 6ULM
z*AOE0!9{*M|G7=29#CmWdxR2h;2M5#Y)p3}H9EwvlKEu%)lpF02mZ9C+FC^vq*Nz=
zT441mP@(x&Vxh0=Dyoar*X^`D1oymllCK!Vm%~g7p2qkw;*@$`fLfs+(9d_8kx9@{
zJnG{zDoF%FmrM7^zD%}y-GcDjLBivZkEUV&Sgh+N)kuPiJY>D&L~DGx!7jfk9Ql9G
z5jR-XfGv)a;-*ZVxU&-cHTd at Giu--rEI5%G6B=yVdje>aRi`qbjY7zA^nA=FPCiKo
z%GKe_X9;HA>B+3Y at qi=;8JqGh#DL?^n*6aG8&V&ETH^ZiobBEm{s<A%s_LqF&Zb#k
zD=b#4Z6^_6O;%aasI%+|v>KV>u4d=+@%g>&Df%ja{osbM-hjp0W9Qu7tAJ+Af9gQ$
z>_KYpvBhhLMd_O5zC!0zF&MtUd-Dlv55IfhIy)4)!BFS9{t-N)C$E<cP}FFq51G8u
z%jWdY0I6zsg6Br0!u)IIH&;H;$^TvPk33H1HITEe1=E^`tb6x_N|VFnDTVNYNYjS0
z9t-MELnRB=Ox4LflAjMcS;K_m*FIBf9M*nFxB%Iyqvhlq_r$F445hLL?Kr`z!4*IR
z4sY+<<hegTgIl@&Zykidxnmq=MqPNT-_$QXOg=!sd_*ZOjI=f7lv}pQFDw#k2y5J2
z(&pP;)Zpf8RytjKAyd8fW5RQ*p$MXJ)eJiF>o1vou0{yJSfA}S9BGOQIxgkgRy`_^
z<~a54#0!N)z6SYt at pBtTl(-OdNh5nPywRdE-L&JN%Q{leJ3XteUx~9%59d;Fapi#3
zRD1$CXU!Bg at Ft?B_i1*&(%Pqdqki)jX+`{HE8<~{E6<#A^z6Oo{5hi)KolWGIP6Aq
zJHm6U_Nce!Z2NQuw%WsBT{qKVQg$dBkNjIo^9EdRxLB}|pLn3biqKM`>9Rk<d9mt$
z*J>YX|7U2WXQbR^GD=GBZkhXVE?OkaG`V_vA}Gf*ucqs<Y)Q7)R};TG;Q{^<XM*MJ
z0};p({lAQz2fgdm)#%v^G#&>*Qt<4ofU)!23M?1cc8Ebzq0<v;%?34BpttjJ1~3HC
z_jDue{e+_vYa2`p&R~IynwSX>$PP<bmUh72{MvR)Y)1IZUi4pQkq=tt at Anl-@mJ&3
zbms45>y}z&)|(2RSb#(jf<O7?e_r{+3EBU}+42bu|1TvZFS{Iu40=j+5zh+5YZm09
z7s{=Z6IgaFM$u1e^<(wy9fYI_*63S}C_^#tNzcRTah)DvJ;b=tT7T;Z^2 at 64!uRVZ
zedZshxI>=|KR#z_Z10q_g?T{oVDOKKxs+r+zE$&)71};%|9Ui^$oDF3;tGM`NFafT
z?|`~z;7{z~*W=2HJJkhNQA%I{Xt&)5<r&}Vi~W{xA!NqUybf4Iqy)VIBuN4T%6kGQ
z9fGw#R05p&Ss(AQ1JO|xvxOD*3-8Q^pTNyHHP?Q|L*a8BpwR+f4No3}|9NA)le)j;
zb8r=lLW2?c_41sQ!w8c1D!7=TTFUF~O%pd##2;k_R)Xjub6$M=qTQj5!eDL-ce%K4
zvmi!X5Ti~7laY{CovKOQveDt|rCy`nPGSyMlex*))CaXI`ZN4Srj$@VI?*<Y#X0?7
zk^U{ZSr!Eg(Iw;Bu98Ql{GMwaPVEt4+0SQ*yq)C*_xe0M055jqoe0E>jdTNWEur9F
zVhxWAW%5fNUOe=`WN_U&lrnW_BfS|fx+4p*6k-~6;^hHq3K$2zwXr5U`4+cO{7mK7
zf~TrW*u7pTb0X{1ro^B#p0^8aEr(5a$0rM0F)?FOG3{#Y<zs7mWlP)*T^SJCkXun|
z2<Fl2R$2fX!qm{Kr`%y-EbF8a$?c?nn_uG1?}yH%=(KfGp}P<e$l0H(x38RiTCM#g
zTESHR282EDW|oVG90+XZtDv&{F}mVn>}488yV7=7n~6 at nPC}rid(|Tz;lUMsP|@M1
zV`x}W!?KeSQLX&C8{<DilM+DAdd{R`8?o&F=fN8PLdN+JL>g~J*mA{^ZA at +AA{0F8
zqRCPx`BlMASb_eH%Y0?aKmRSCQUznh#E5(&fwxMd1+5=`gD#XQEkdN?u8DvXQ$aTs
zB;Q)&#fT(O!*1P%?$Wox at -4P^^D_c-qtkvojcO6~kAy5o<8sWz7<*gs>giTFM!lI?
zN%tVrI7Lc}%AucD73+cTAzjt^r!0mCwk1Xl?#L#K{bFq~*UT>Vn7M7}bbHKFQ9~r^
z+o%e36M7Q--lqanf3>h8xBb;^fvQ;Us#u}h)upfO;yXvc<9Xj%%m9l%ty)64{@sw%
z*&@pt<9nYCX>CTIK$)(IhT1A2*7g=S=xPfLkPcpHhyYe;=c})XF?1oxo!wi%lbAzn
zB?(-BfbTALHYifREgFTLC8{E&n3S_)6&l~?_}mjCryr|1;C2d}LhrnqN1eccRe#?^
zquNAcKX8_yph9QMR>Jd=*C0C6eYnUfpVES<@kPQFRUHu`n8Qy~b1JArTS%Lt6U;9*
z$as&_8Rot!P2QdmXmh9d`YXlIxNajouq!=aYvqka7|y=$+7%$tH|7&LD0N}1g88K9
z{o|azS?gZK<7dLO)`k1eDsK-<MZX9H)Z#@`M*@#F<iL*l19m0&le=}hM~Kr}*}<O6
zvTtVWk~-#^o-r~4J=Kg$EhtL2eNRmv3Ns;yU}+s8p7K+ye(If&<1RwDkGp6p<9jZ{
z`^;O6l}_wt_GlrJsh+jux_n6w+SOIRt-G6_;u=k%THvP$CteSKAgWuaTUXR;ym1S+
zSe?DTt%@8d7jr{xO#02BW9UQ5Mlz39oE9>E)T$lwuzU7htD^E14js7Wzg5 at aCaalo
z5<l<!&SN_9YeL}isL44_v2%^JGqkXU3CU)+1=B}10bda6kF;lQGhqyFn8Yp9+!x%+
zsC_6qFL)C&A#eo{v!fDO73O6K&F!rAxAKfq&fyoeSzx=MtCB8Cxv>rSCU`2^u3u&O
zgDV|Ok_jkUXu)=UF{ig>(06iOW1CS|)_$`@_wZN%z%ww^Frki3wjDh!vd^WC%I<B)
zhz at uSsm$^3Ojyj&Rh4x5QodIL(lW#n<1ovovmA1Qk-|Hqy4+J!-NhgTRr|7oYarL-
zYP7kzqzAEpVPG1U)3ZCV58gYSC`H)bn*7LH6wI`grs2J{au0`@HT&F`sx_JM`f<Jv
zorJsLwuZt99X7`X>iUGFr9)_pZ;xA^g;CE-F2C5(&<C`t>SP)AiagtI(It>t_tq^6
zH~;yx=d-rrjGMZB%=x&?=eLc&U5)m4r*JzcD@%uvj)LywY7fd2%gDcrp-lt{Z+PJg
z9-0$*UjzdXu8jOK-#oL*%V?=5uUY*JEbdHjkLVz^lOlZ)YFZUWU!8nyX3m%3v~P&8
zc4_nKI`CQ_WfpN$T6o#Ks2Pgbue&9Zm=WXAk|M1xBCJ!w*`a4Wy`$(rB|>cK>vdb}
z;JKccLdTa at B(Yz=<*+;Pp+q8>D?j&zkDR#8R>BHJB<#dBb%CDk8Mb}UVyfMpjV`Q9
z{lTA!muzjZB20@!Y}Jd|>c%6wSp}Cq)&s&+ebY`KbS*Y4v at yB9q*~<rBQnvGjm~`T
zq#+;?#0XDh`2R1qY2e<(7?|H<qNNUPv=BP^v3DtI1T3)omyrLLP~l%D{s)(@UcU#Y
zH(wmZ7W+V<6;<oY8(?{=;)xvU{6O&LGSjZKL&ex~ZT3F>WW7;OB^!Zlp*)=%&W0GV
zM+}+=zI<Mit)HKtRBPM`70g`f$R^eV5Y{H1!D@<{Ju^-+*buJkpnnQ+GzRm1&_k?=
zjCZyR(PI3u$-Sd at ScIcKhvl1_<~?t}UBQ^yrPd*&qMGK2g$h=B%kvznM_1(g`@ubr
z>vMqjRL3Z{n=ZJLJ20<i#rox=uvJcxNLy9^*Zf`WvRxBH`$zU&;3e_L>*M_C?w3F3
zFpfP-e_bE0Sw9?U37cH+kCb&TRF^XjC=Hk|`#){QZP*^<f{O(mE<+_<LbPD1sB*?w
z{AXdr$K#q06+YLBS!EU}I%|<96}5M-iiAZ)<%U;$7JlQ;v`X!xUadApHs;J#E9MHg
z9Sz#&y9FQns50~8C0M6%z0?g4^7Bmm133&0d(2iuP!rfQlsE_IIC-xBr4KZ7f1ONp
zF^_3V4sjfl^`FG?o`@c-AqRo;re6l>{FIe^hRg~^MOi~7$9a;lpH79pUP~dzR5zTj
z%JTGdZ%jb7_9H at JdDO=x#o7m|U_DN3FG3rM(C+LIqRs7ra~Z^|ZB*SMdy1 at wH+doE
zaEe at j|6~EoNm>y3;!dXcD`HZ5_Fj6unK>Qh)X~n}RoQWUiKI*4zXjZ0QqsIBLY29q
z^>3JwNDopaN-aFtKUWX>4=25hS4>HW+kqfPq|JNAbq0EdWi*1iv8~^30hXb~=j2t~
zJ>&#*cU;hv)4uE4E>v2ITCA4Al!6Jf)`!(6uZX?6Vn+#0oU*2oum#)!2fF`TPBSWB
z2fZE~v~hseKM{q1<cSAIO2L>n?jMjx1JKv1dSq~A=Ka<Ed`t}lnrbe$z%nYh>-UC^
zR}!sTCbJuPk1QBW*zUWmbPk at KTgs9}R*FPSPDG2ni-QY)bBOQ>htFN$>-l(9vE%l=
z51;QQ*b{3R1NSsP=kV6 at 3K-+)?_aNM5ATyNP30g5_k|MeA5R%`#Osd3BfA)Tr&m(*
z|GY()0x}B>$nBo|Ri1#_z3pZ0x})J#dr^z*mxB+13|RI{9naK|l}Vv~J5jgkH8Vt^
zY?^#}9!I8>CriF&W^1yD?c?oF$z5$9{V9A0$!CF!*xIs<R5B-llIQishi7iQzF6w_
z6u4Zfe7JE*LySc-z?%k=*!QVlGP--IdZBODaSau;cB<G+R^k?bYlzlna1lGT0iN2A
z3+(zahfH*<`FJXj6up8zzdP~y at HB<*fqLE1?)d)m3<%9&UC4fP1nl5o_yyI}uDA<!
zqBxrNaNaf#xN_3*!!x5Yw}G>xw;xNdvD&)L>rzIS8MFx0zsQDH$@6Liz3*)D#F_~J
zsuUqtDUw`-v^6%b-f37s{mzIlH*1iENykS7d^yu_K7X)$c5AH(VxV3ZG~L<+Z|>V|
zJs-C|JaQxC)}GA`>5UR!ug55*V_uK at ty4MX_xXxh5K?Kq=h4AyK*pPa!w>R3V1~E%
zt!J;9$EHOz;MJFVr+FU3`fJqPomBX%k+3bb(i@?EUn3m_Ky7Ixic?;wH>y6o&R{)B
zzFmZ4bu|q!kcP^=k(`k~OvU^&1;OcxQ+B}7M?bdBAD+7z6&B>>%$hLya*(wlvsJKG
zyG`|S6YGV0Y&B<^_F)=dAVIWH$=CR3M$+aDPFe+~3*j5DHtg^!W>HRsru1Fm(h5`6
zOczX}vUmPWODZ*8Pq!>K4xkN3E^8jM<so at 2N6}rEDKGHWwHbaN6%Gc1yljllz6P2u
z%@2Rq9ec+F?Oq=zKnp+;as0zT;MDIG#P6}zr7DYv^k7{5J&n^-OA?#&tSwUcy-D9|
z4RjbTPkeW)EXTW1x~8E*Cabq`uiBV!)rP5CsqC=ymAkb`?|V2|8sBp%i7A%J2ai at j
z<Zd#03~NA9Un6DsRvAZ|O3P$bUveqGH(rYqX;;1Bk at fbQi=TJ4!~@kkJw(dx at R{pd
zMiqU}-P_$_yw?kuLK7}L(dyr+R%QS>+Nya3-W7RA>2kM?NViQBEl+^&*Q%j9j7f$?
zLT0ALdL#DXY`2qmGxkBJn$7Qt&^Pij2llVfSkkHShX>BCxF77~Yr*hLw(q3ZPN$j^
zZqB}n&~JOt_bsbKn*_z;S<WOyO?x^0@?j)VG!=Y~P2YVt)>taQJj%kQ{K~;k(b!<?
z1(%%Yjs8Mu3dyCpS4E?%9Jg<7ODeSnEf!Flj%0Pd+0zkYuPJ_jNnv8g|6$6`&Lfn^
z5EPD8Oo{?jFi_K2ADvNsEZ3n>a?yBDPV~vkn~sYyI?R_(QzoUHGfcSAB`lhK8X9MI
z>Ad at MQD-mbD-qyjdRLRuZv<AIS2xMF<C##tVbG+-k(c*Y_$re=TD(T!8X?P(MYQOw
zxvuaoyIldby5o(vFWrVh5s2Sd;eVclVpwlbT%?h;D>yf}*1T%?l<REDkyMTPl`xl2
zw?3!q$H$((-xA_{)mgMquJjq=2?bNLx6#x1&vm`mZ;!1L_y{_BlyC`CVf}j(F6UE>
zwi64InW&Z~L(Q%f6f|!txTV<3N at t&Wd&)}<^*tP05cOd0LdB7&k&eQtKKloH5&rgJ
z(H_8PfqOBM02}Fjs3Yd3IBID5tA<(~Gqu-07W_o`&EQbWk#166MpwBX#Ucbezc20l
zeLabv<NN0liXRLbGt~qo70 at c<uQx3(07;)L?S5|aq?ysA+<X*g{iP;aYpQYJs+Rdx
zefb97%V^H!oaeeM#TbI3w7xof#3HMq)+dQtrbwNH-fF8?@T}P*E+p@^4Sj#grm?i`
z$vpX;1#p2wB>wif&YfH)UZE5Q|K>|gaXLz^vP1b?1xy+*+sj6B1QIS>dcYVhy at O7C
zVx{mb$Ia$cTiMWdAS!$`$K0gk%Tv{*wB6ghv!+Y$`;N{JX(xAhevD<0h|fFhJ>PJ%
zrqsVYY*0lvrO at H03IUHfBaJpz;(s#uY4*|!p4PKMrI<IwXH{zrg+*o5B|Ob#;1Q-J
zc)qTr3z6k|dV^c;asRMRQ?ynWW64MA?yjBy at HW(CE`yJF^`3w0*1m)w&?f7-nKq4{
z^W>DbIxk=Bcj2O6<j7sw*)exBw)0||L{kFWsX>!P)i_#pz60fNbr{bzd}^e(f%D;4
zn?r{Mwa80fK^e3ofz#KI&A;+v&LkC7j*zs#<sWY4YRftOK5s3qd;`lluLH`DALuFw
zy$R7aa(Qy9ocan^mO&xkm(e7yvxmi6N@<dvI&_%fr;nGUUZ~44qc-c9-c2w54(_=T
za`A5Ud%6BEoHqxhZ?d?ijr46b734fMX7cBZLZc0p&&#SY7m=8j{OuhO>UtDOY6pG+
zrAp!@*$W;kL=%UOuajp(&Y%(~Ohta4pTBAsm67#O|DPmN4&dSiVfXlRpI5MPTo0=J
znf58xBu9@@mcGXi*9<<E!XUo>(##}p!V3908NbDylc2g-W4A2r)!Zs+DBtV7gJl<O
z!7(#YZj^aO>FyRUk9;l1X7;Od_8-R0B2_7RN1)wS#w&B4kK%N_s09>ABj0Q0rEZ(&
ziw3;Cm}P6#|K^<kgV&OabB>zBd7Oe#Z+NX%4;C)Q(wHV>-Ik`l`Cc?J*MUa9INkGx
zQ-w*@&Wr)k$vywr6wJnloO%zMhSB>x**B!`mX+>4<2|*up#4dTe?aF5o}ijYOs0CD
zngrY~;m(WjYLL{l*PSLkgMZZiRN!!jPUj)g=1Q17&zo6>SMEG7%LAjE>{c3=o(a+2
zW#o_CDt?>C+m)jBgY64#^_x1zrmXksdS~;E%<k}NgJ=6LX~n6m^~r5VxTz0H5wTVs
zXSmNy$gSvKsnLh0sGimm81TAf?uhA`O)I>wH^><?AWS^(SUS8jSR-7|(d%q-11V%|
zy7zpn4S%eZbN`F7w}8qj=-x+PO1e`zUQs%vQ;<&S?rxCo4rx%jl$7r77Lb<i?(V(^
z^!xtz|GTm7UCVVmzMeB at X3or>{XBa=bHupb;%(XIbEcLYObrLk9KG^uY9qxRtA at 1I
zu8G?Wni=k)P`@J#$l2SMoAq at K$TmkTCma;7al?UGhB!n8oj`YL<0_9!DMVMc$XN>Y
zHE^oH at ed%PvUpVwKO25QZFpcUBMXR at Cc7N{!(y5o>D9+AE!uqFsZ$<Q at A59Jo>Wp?
zsYnnM4;G~d33FKro8EuIMoi8Xm|(#Rg3uc8=CZM0m;d=~*7Q93dvXwU9|F>NQ8tn&
z;zg$)h{yJ|M1DBWY!UT};y|I0NPhAwX{8@#Tu7Zhx$I1#pe}=RuHu59G2leRMuxX|
ziQSwP1)VI_nfwD+^u?|51Ki>gcd8TL30@(647TP<JlbgR;u3rPgFj&5k0d#LTxAx?
zRFu6|GYxu1a{R!eTzK`v?k41j&}bMYi{xl3qJl*rXn%7waddWzwCHO;;+e5b1)W|T
zNYm}9jIjQl!29sbr^>t1RD0nCONL}gvl5clS(C75ucZ_k%jbF0=6(u2j=4aoc+(e~
zpCXE2M#P=~S%GH#0ZwD!u_VeiaQ!E?j~tm{Kf1E#oM5Gqf#RMp0 at XJnHLzlQ5Os>D
z-62?~);hl_<tr;J{m0mqkdcb-Dj7kA>e{TUOpRt7ehcOuyA2@~5en+$7z~$Z?^ts-
z=!x=*2K!P;3+8<5=o_q8xlCC#s#7BVJP#0$Jb3AGUF0#laF4uitGBh)YfYA0>pZLP
zxx3~yrb;W@`bx{^^G#LCBNtYnzbntea06ol+)E3Z;tO`AwwJSEmsC)(ysvW_!oD&^
zp?nuMZuC59(Era<hIEr%F`6bufce$9c|cmx>ye4oR2fbLF*PasB3z#j%UCJuKN}!;
zb%M)M8`N^B1II!bzgLlk6m{%6jQ$C|B~k{J(0vs82t-|-(z3brKZaHOrk+&z3Wf<X
zTi2JeMv)}Y5c`CTNHq7`o88SG-A6p8gW5vcp;4KNSyF=<6jPe;RzTh{(G7jjWJ+~%
z)(cqg%D)67jUTo#hp|F5yF73(VEUX9m}8lh7T#gQ=_Rmrj39fGrMa6m;!c7TX;N~E
z+)>QO`z1Z8A2&H+mdVmTiu)~AjGAG4GEh00A-5UX)6-g!lMApB-a8In%f0vxrSyN_
zw+Oo4Ck%){#*tAPaq`xwWNuMkUMb-TeSBRcQQ3_E^I^mfbW4A9O$iXM_F-vQ1jWmK
ziI^cbj`+)IH-1t+Z78UzWrL~P6NP2?82kMjyR at 9fabU=A!+6Ts at L$0>N-%}ySTXSe
zOX}Os#S^92R9}B+ajNu9ttwEbn3<- at Z8VJ7Z%#UX8+8z2b^a*}p{>({C8JPS^@E3f
zGUBYl4NBY$3Yj;d8Foh{K-<WGK#k7nZH+~?#=eREZ=a0s_z)aG{5;)1kW=YUp|}wZ
zBC!}#Ra7p|oJe_*1pRjK^fsEg%CcFE6+3!wbKd3CtyVdD$!q?<_~4}nEYT`wkXnum
z+}#N at G&FczjyW=)&w*dqQkwUB at 6o^^9aNNGsXA=EaA#Lj8B_J~MGy(Zc%G~b0#>l}
zu2*kK5k3ZtRy2?py*AU4MpfMcN21B(!L2oDOQH#rbubDZ3{Uu>1(9V|zoo|rB+DH~
zV;JM684%MSb(Y-hL65YTTQBhH{?W4??aX%ze1zpFLkPVi&QXJZD;6vw|9F7c6ZJej
z8E_Fk2(kqL<ZlYQ&FW&ayUX!1gxBMZ39wT*;poY7JJfumGb+2yqDMFQdC>)KF~s~1
z0vmoj_9R(5!HXj1?Rb3Tiv_Q=`}d*~-QC@}oNuG|tTA~kdCx>~|GgtX@#T)`#l at b*
zMdEZG*VBqZ!Cw}AU*F1>)z$_d92_KQVFM*U7oYzDLhM&iS#@>b!^1;@7P6qW1)v8n
zudcqRC=~d62^sb?Xh5r}sfh+NnB068WD5j~zu4aA>b*sIZV at zah$I0HFSq;>4}gr0
zM)m~`Yr!w;8St#n7=TY at _z|eu`t at J$3b-~^=%sAn!0GkBibQ|uBqPY<*FHLzUhSR1
zs1}i;F0oC?+^|m-R|CF7?x{S&JnjxY73o9*#lQAYUK|wQ+3R4zm*z-;9+ at RatZP*W
zixWQ0;jU5nI5kG}qIzq)AL<->HCIFgQ-z`ZkJ_$~QnkrKG|gGB9a>#Y<^N&&Jo2-d
z!P&`fXSGq%+dHUAHg;xlR4KBl=C9Wd^qvekF!?OuV9|Y&_Gjzwa6xSkJ5Wu|8yRvq
zW_Nw>r-9ECs8vJ_*Jyg!?NRbQ?AxQ$nYOpOH_98c%=MC#HU$H<lEi(2cjtdnbw6s4
zM?9J=J9Tz;YH82lZ$SaMRAnqbSa|nSVDjHwe+0>bKvVpW&`~B)wtJUw2bbI+AMg50
zzT<T!A4N;A)0x(dsTSuAX5wLTP!i}K%E{@GP33aDNwz2!l*+I-bf6)5clLM=!S}R}
zIe+IAn{j0Anf}yLpk296Rib(0jdsA>#l3pP?|onDlFSom-~3#=FkGwq`*GCZLyONI
z|FhY_=sr4#5Or_I{7Lv}C&wifj1~HvHj*g}$4QPK4E^{K(G!KyhGI<wEgj1m8^a=_
z6&yz$=4y{J7rbzjT%dfG!YVMbF%Fw)yt}Tx!nf3U!XC);GK7AfJ79C0N`o=Gdb~g#
zwXQvxSm3_CoI5(UZj5lcy8`(zIJfkbKFmd;^5gnGMPG^67oFYIbJvw`WG+~*T^18m
zKiq5#S!-W9FL{L>Xy|+getkStvDmw?eG(UE_KK;kU$E}1zht=fI)!@NS<Pu0Mj4-4
zzXk^8%Y6IKm`oQ1LFOOhdtJ(H3 at 05ocnqR5mxZA1d$aw9S-G3y at 5%|orM{|j*x==u
zdaScOdU(5|?mjxK01D(0s$ejjZu~|52x at C^p(-^|k8<|S6JLy!n&pK$mT8RGSx>p2
zZ9Vh~cAA4cX2JETY|c1c@}5ok0n{`hqowqlqc{F at ThuVNw!EtEth6V2)Mkcb)gGOX
zLfuLWRVYENPi()uTU|DIH5;afo>EJeOo<vw`%VM^DEu<3Ilnwp7i2u8pnLPHmS~&d
zV at 3h`4If3Zh2~~0DhiKlRk2b}&3a%{&hD@}uLrIYEkN`<RT>u3&bC`duicSH;te7V
zgX7W3pF<s|3etE&kre7U_(l%0S-NfdT*8X`fWw=*5;mu^S`ecCn|y2RUGoydc_()!
zNx#toI=bgjbzvR#?AM7L`Z0RC#)kG^-84r^x6W$K%n;XxPkI}(43eWkJDm9-9!s6C
zYk-}2wj}>G5iZ&giKKHdSGXS4cUr=xg9EhRr<FL8c)Q{(P*N?9)+UQJZtSiOwdPwM
zV0PKIr_=5eMNw;JtvqV?pnm3dKHg0tO96ss-mN_*2GEmQcIV^G8sFi;D>$dtG)$i@
zCfPKQ)Nu82g1mc6lP5u~%~H>MGU0(gR*do`dj)PrR`g-rH%<UT>pW-WB>taPX$#xu
zL$da+raQ?|)!g;tT<eCn_f2wTw3C~tSjGMoYN<}~y_febXl)^F_KshGnxM7LktTu#
zi>f)_r7#y?1D8S1c}o&h2(!#k*^5ZkqT_w%Nj#C5vy=I4k|0d1_pVV#sb8YhA}ckt
z=?M$Z<5JwpT^YX3 at q(-9|Dm_gA+FClA3PG4D()L-$CPb6F5%ND;af8JJ~S>23I93Y
z3ceYtm6d26&O=V9r)KN1Ezuf!I%IHm1`Onh?k#WZIu+l|eh|kNFHkGpn)vUH7d9 at j
z;ORl<_3G$-erhYoQ<O`SsAJQbD1ObRZ?)B$lM18!3G|P8hx6V)tp=ze>PobeNO=-L
z9=DpF(vigf)3APrJWg{WXykUr at w)SDOe-Buuv5!Udn~U)JZjZ;{<Mf at U~)BgUkjL<
zVg5VlLV5X0WR8xVhx?;+kYJTj<FeC9{<PioNhhyn)2a3wW+u#}Bp!mrQwhg1VBMm7
zYz%DmyyKlcaAw5fzBS%E=1mu_HsYO??XqsRGUO(m%6Wp!2lRXW-Tg~(Zx##O4iE+E
zv_UxBZ%JxO`$p}@V01BF*#^^V)*j+ at oaHezh8m8G3A%hl9iMnQg9gDtp?+j&8&mj-
zwm8xa)^_R`jShea`iQy$v3t)G;2XSR`k5#2DO3uI<m<bGY(r+D%9-|SG*74b2ai8e
zp18cd?IRiF`0fBpXQV>4fi{c>K$a<jmj%uruFYtlzgw_ at IvOFL7Wqn-usGb!Y5NrA
z^Wy-Taj%_hXlp{dIId63lpk1}CK4xd<16dytek at F+flo3UKJcYH9Z2T1(v$!T#g3o
zg0Wzhg^TyYmFpAsET73FG1Ot-?S1+kVYaRo4Tg`u^0-oCkJMK11G7eLsd<o*a|A(V
z?U5`iqM93New?m=?!JuIvG01gx4?j1xaTc!6g at 6V;0QW9`u>r}0I-YNHZKcxx(evg
zamxaIr8aT%_OM$Lai=4|lKHI`i2Mt>FnZ=Y5gsDJIPkk-vemIAl3`C#fLWT{PW)IY
z1KB%0*;Pv>j?gqk6)P%q00RqmhChP<p6MA&k5JfgSnn{kmdc7j7LV2C- at +>;=mjG!
zmxMZan00Nx!!Wd{IuFmE3SMCT0ry&&I81T7509Q8o#Jpy=c|X*`z<!&;z(uQ$^PHX
z{wOEm04Q*6e(^P2h#{_#%ytjlRUSj~`c|JHNGz=kxaysSSi$QPTV054%!2Vhm8r<z
zp6e0d8=jn$?9#d9G?nlC at -3kz9}^BLsAcTu+gt+?y>C<w%1pwGH0Wx9Vhv;bX7p18
z7ab(D(_B$;t}H7wAhf-U-;f at qE$I(7yAgFvGTi-<Q+RWctd|AX5Vqo!{K-gdUd2}r
z6&=dV6ARN{4>kE`LJ{6J>`u2pDf~p)=n-3(Q!<g1MCow8$}X&$uNf+uk<nCjwYt5_
z0*)eQV=Y3VPUuhdF$RIsq^L03!tKeRC^{Qw{N|h=8$jKK7gC1c+OUYUe2tN5I`sdr
zk`+or+g%XzDg at 5%s|cl<?0q_~Y981UADn*N&dT52j#`trJFB6_Z_rLo=BrQ=tMHAq
znj9XTmh2X#Op704qD?DB<W+y4%MZtt!>Ylk=&FZOj34YDZm`VqBbird)kCRvgl15*
zleo>f at rF=d5wm0)YKiH`E}cWd#c2PDc(18$%BRx`M~+3T5K%^@H*^Zh-``!Jhx?8P
z<i2JUYE?1X$IAr^9MB?kZS9$y&{C`MTa>}J>*qihF1;Seu+Y75Z+HI9b1NIK#32wa
z-U=ffP6i4OCNj-TuQ2b}nHlN2(_=Q>7>@i&6%_v}i<`RV&wj_j+|9i<TTu1UcbCK0
z9|QFAlA_9scDGS_Z)^sZFrUY;<I5P<2E!zxeP+}ahWKd+$q26-iYnS{lx6UGbxl5)
z1S%0_{3o%nXs_Lf*-k!b84rl5LH(9&wyJS^Hfh~d-<ijUDj+iRbr~Tle2=Nb%ngyM
z at vR&^JFFO5yK-oip|C~H6~k9(#?w6_j+$$b3au1Gcv{tAfnNKL<LDnlGKx%|f_K=6
zL>vq8rU?;ng3MnkG_+vTjH#KcWT<yC<wWmGp7H2dw`lW>sN&ot^;ZFEG^|d)HHYtE
zHBJwBs-q0to&*h)ySd5RuwfPEN{zm7L`waoN0$wZ-5Ks*U%$#l5+C~ntsy<ufcFr1
zS4RgEo82)O9*Bop&#L)e*1YF(OL4Zk3GD-t=x>Vg-Hsh~L1R2P3|&Kuo9f&JVRi!N
zKA~t`8Bj^G!NAtueZRZiU}BKP=174Z913HkS#}mHI|=sm0=*Pj$Jkbtzx8EmL0bJ;
z!a4BTA%djeWMuH>L1~F)E>3ZmNq-c&%xBbC2*uJNeLW#!;1&-lzC#;wvbD1{jcZmL
z3ejlL`3WZrCG57y%cRJy1hdGCAsm(siSB at 1nw=@J>sZnN&(%qL*m_t%0dv^LG}r`t
zD_5w at 2)+XE>uFPhA#!tye~y9bRFt@;SC5Y#O>tpS(ze6FJ&7PKd)Mw2^b<cAh~n(N
zxI)0;^L<l4r0u+<u%N}KchMu#{F)af3|&d;5=&vaeKQw&)K1 at UdTy$TOdIHM9<F{!
z2vh4gF}!`ZDDEXHnk<;$=~IA5djlkC)Jj;W=XmFJg!#yc`e!?Z!d08XsfGATfy{HN
zfBBWf50vg3H16S!GI#g7P)7F4eSv=^4HFACVAQhQ<4Ff3SKNph5*{qoEL<jzt%hbn
z)FP7F8-=sTLS+*U;iu^7D5p!6tiO{xS!U_)Dzz{-<HFO<HJMcO`QzR$kZM1_!W!Cx
zRdfe&zm at PacNik<*zC55&~h{6utD?OP6sW?O8$~>)eQ_&gHx^r1`SRq#e~67;aOsi
z^a1JN+REjO*e>Qfi=DtYDM#1$Bq=5&IgyDTj6FwIm@&M33&L=~f)DldF)h0>{oQ1>
zn`%mLpXh~Cp-L|~M at 1{_m+gc*)}_+=ev*Hxa0yWu!Imwz8_(E?;P~t${rj7Qr_mpH
zM@^PFF6<^(Y-#%>WXik-VGpXW5zE=KEYCyvLLU?(3y8Wb7GEZ$)yssesjX#78Ps-S
zg>x-V8Z-uQtJll~2cA8o?H at TZamt>!uau0ETi{VVfDx2d7 at oTBmk-e@4B?SyfvR~=
z>y(!I6(T((H%19Lxj=BDYAjjrN{<F(J-4xHcjv-w$KNf+Z26f3J<rrOf>6cLIQc~{
zPKh1+NAQPiKgpV0!z=Yd^;#((HS0P>kM*rrGU$U at rl#sz;axS=g?DcX8|70lnoAah
zxg}0>D~uPh;%NoO(yHizvCNE1zAE3*UvDO)`~IkM;|#1$I2ZUBy4<+K^;w<xfU>Kk
zcyrVzr`?|t8<K{`LQAJ4wG`1`xp=LCv&xOI%!#lN(pCm#!vH64NM$QvC6rH{iBGMu
zC<n8MI#;=3o%2_AiiUI8$BRldr3y%Cg&zgfEYd>#eH&ZsMi<-$5B9(w&1D?9-F06$
z`KL^1dR+uS1&G6|1<ogeO9_vu7d!VNoZU at oSLvicn2Z_-ll=->zT<1TJ8b-m^MNz&
z>qiKuUp(-?;Xky#fAU5Aetv=<5voP+SP7FiRh)|k1qX#oRG3sMO({+tG;X-!&+;&>
zsLPUKYAib7H({=ac3-B<oIN$1XF(aV24 at H9qSl{U^ux??WDmRX3r=iS6{o<?n&(CD
zHNM<(F|LnUi~&-E at a%W6xanoD#qAq)nn>m9M&-rd6Rgr&N=%`Yrs5cXuw%4+vp&YM
zT+h_&Yt>Gi8EO$xntoxC5oXtOblY~6h)Hu?OTQkmfL?BBfmZ%K<r*K7Z)9(J!O>I)
zO3ly-L-!xJGo83L%r7{T%Md4|i2QncqS3<)G0jes=`g`sc&7&UL5ZQKc1CERV#M5$
zF+;8SHm&@zUi<A%q&mon8nW#6Zr1q(0$SJJ`fdC<i4RNo>ctT}08suiO>h9y1Q0Y`
zhRk}@jAWuxvEW20$~xDx%|cAGMp95UPsDqZF at IX25iy|=tbBL!gWtpu<x%muSsJ$=
zQc;S@$AmmS7*m-EsK_ep^)G$>3L*6zbzpd1 at vZK&+m>Qc at l;00`OxO~I#Mhu%dG8g
znD5EJZc4&_OB2GLtARB`nCI#v8aWNZEg=;SQ|FR$!?%A%O^q5+$wBD#pWeVH$4qAF
zkUYNaml;>T$fX*Rrm6m%UX=fl^1J#Q&X`<}g5&<3nH)P=p at ItFdvZp_`vazf9%&}l
zQd6P%acgDPggT0#lEbXHwf8$8<H4pI(p>uN(wv9azj}{g<b9e0?-;c0N4ySyVt|V^
z)J)!QSC8!1AzIj!xSJHYm*@zAa?Oq=6gNI2*y3Bw(LSt6HfXOfL)6{A*4XduR}FDk
z{H)H3mYY8=K}Jgj(D&;XFHDg>TT1(tr=^XJ0kBUWEGn_6190AX^`Ij92oaXz19w9q
zPTc^7x;TO!)=7gW6;{2c&WkIs+|DNCmTRs at 820UxofTU6GK-|eg0LVt3pXB;CwQjW
zkjQgbbooN>*NzCx8t at e+>@LwFFach;pM$8PxF1*p?mc?^lk)zhg#&NE;^+M35^SHg
z><nvSQVX1*Ec91I<w-u%0eU}*?UjbvFd6sx?n!;-D#u{%=t}YYXT2cE8R8TNtw|mQ
zvuAgm-ooCN$&Rph*O`YAu>O`NEw53_KTu_VHr9&4w5t-Vjd(B+K{t_w2&r<avq%D>
zrDOaO4aDk3#g$5)^~Nnj at 7Z$;w?-Q5RM{g%DL{Z5)vz^<L%>(%M&IKLD`}}4i=aKq
z*6lOyoRBBQkZ;1pzscU at vgq}S(*Jx$;Wvti0H`*h#F2xf4_0^Z**HAhLzcbMV6v=B
z*Vwf$Hw#zI7}-Y=&QMWs+d67?L&Cjd$`2Plna6h`$%;YLuyo1fZWnA+j(7vW6BX1K
z1ZRl(h1XQx at xAY_BY}Z&vT@;)w3rY{cwRD$P$F^-k>rk9hmS(-q)UPCxx<G((Xx<a
z(hLncfsjQb(IRIK<GF4H(DQR0Rr2Iz7i3y4mDEeV{7{v&VXo>fDcSjvlv|e&-cDrl
zMe!FKgxuLL!jrvuSUbp43*}iV3!M9VzwR1kG0N>^^9?s)h7z4c22gINhstDwShdmt
zv4|tdB}KW~hy3cKRQw`@r-1?rwuJ3C<w#9V*+Yg%D<jWxya(fY8>~cQ$}07`8R_xJ
zl(<KQ(TiMGqvFGXi8IIa-NZ+{qV$i2y?PHEuOhXjca#bsZM}GFPB~{N2_)}K2kpac
z1B}h`^u%NJF2YU_Zi_uE&Bt9-{=A=4Q at 2J*&~&KtdWBI(l*JqrIx7A~6}fQn^<Mg(
z<58fc0g6rEjaRACZ+Kx@=cger*`BgL^37G0v>!`KAXHnf8kkbOVF#mxd4h^*;%ad0
zpLG9P7s?kVA1)tF6aZ4{A=*%54qF`5e92j5ZrX$ltu?tULaW-tqJHm?&?mJrz#(VV
z10XPZhv}EsE+rbhAsuLP_o<T9V5ZD>)VnGVCpUK+Fmpt3eKlbJ8?*^kURh;r0#P{0
zt+yMOw45fwW;A!Fwr3Y;gje?(9lw-Gso3<34zsF<?Xbv at KJpx$mr#Tq at 6*jJ+|`Tg
zciDx%;}WZ<S$v&YgzHvffrr{y*052vju%Nk2ro<;sr;v~q=4Z#9Af64W0ncX7y4ZB
zkKvuMjm<|aH2a_(FDR}JFGAjZx&FqY$Cd>?c9Gj{#;xO|F<DHhW|Ra)H*C9!Wg{No
zfo?ATF>y1t`mHI}*W_%3WTlh<PAZ<!iS56~fak?4 at NM8#*7nwS;YCa)moGHJR<^0K
zBmV}3y$1eEH$M|f(NlQ;;UZpmF>M3D-*_R&UJkAi|K*{d`KNW(p#Kn2|8F<Tlfn1m
zofC5SqsLZny~0D`4cL?6nNCA@`RKB?-Ccs(QU6r(7KsO`S=Wl7k5D|oZn+b+2QI7X
zDz*=8&=_`&A{91E+yg7{;TBBR^ds185f@#glaDYD_Q{m^8|L7EM~U*n9mk&I=OzEW
zxwJ{ofURbN=Sd0sw<+Hezf*|=h(6X*PaxxsL6su57XO20I1gehxcxLfti~U+Jr*oR
zcg0zXItrX at 9)B=$jYkqUr>lvfeS_lmsq%&lC2J1?PHzAMYmVEmv1yy<Ixfkb60II6
zRGK|ajY4Dau3)2O+A_?aSaGIp8+tA|;YPE#;VNcwFU}RU#0H>+NX0ScF?sTUP9;SC
zJ8G%WKYW}dr~OYZKmwR0c>FfwD>|0AAFD)GW#$XAkBTH$r|~Nm`?No5pTPLKp8Qn!
zn-LwZd`q!ltd&R$VPbi7C)cZXtkFNg#REWf7D#b0gnEtxiGGC*`|HHjn~($fR_Fon
zKG0f9e%aij7_RZxY+!L;XFn)-olX1d-9-uwU+^49Y~7g3Ca-Fh`;5!FeJFz<KnNWC
zebsE?`CA`Uu+ca2+NxkfKte50!a~$kp^y{X%6#|+OH`SyhOY}oyHQs=RV-?Bf94~_
zVnaQU7A(rfbUWhj3zTIW?*x}-vyL)X{G@^jn!vpX8MP^3Z1Ad=XEYKPS{2$(!k6mp
z%>*HhRwDh%d{nRWkEHr2AMb(J3&E93Ih63jlrm^-b<N8)h1|grS!-CdG)Exzk>K&_
zN!a%wKENE~drrSAH;Q)rD+Y;WM~zQL;^)->_TP<Sr6q6&9TQ;|%mmKWD%3NP41N=?
zi9^=m at JY?!4x$qO#Lc=&j^D0`rCP5VxtvJ-ZHy4H83k*m?H$J12b*^0iKY_iJVopE
zPBs=MQN!(GZQ>Ome-L|%VUm at XJ%y$s^T%G!g$$*qsX1l|zmP&4=|d^kV=d6*p`I*C
zL=PvP4&j-Pq2%OO%HL2yn6)XxuxiSBPC+3M(9Onn5k;BYp_4=7%q<3j6B^sI#@dku
zwaZ^LH*Qa&824Fz7 at kQ_j1omk=9GAqQ2OIwHQy79Ggh(SEm+c0AX&a=(2;ZG$Z1jK
zwGMXA6|F%KXB)}4diqCaWIFw&GjixX7q6Dvx0V~OmK(h2T48ZvmR&}C;|Ccg0<3nT
z!Ew)XmksoH<?;^^AvzJre at 4<6=$aKXy_UO~abMtt{WlbaWq63&uv%%7AqGy+LQ$9Y
zq2_mL<iEV*>o90dc`U&z<7Pt=R*#{^{gGu%GRegi2{j;Q6gMU@?q;Rtry02$)*M<?
z7Po&@0g at VFA9pIqh3PH-0lz|;?^r=9q9VyZmg0n~#f`}zEj3vq?$KmIuJrzgBnEh}
zk0PqV^vBRUE<-gsk42l at Co5IkR1}93_bD9`*DCXU;5#H514nQA at ZH)qllrhaAIqw0
zh!}TLGF!|TUV!tTb2Dn#Hx$jd<SJrVtg^g>EJmZfIj-LmxBo$ZXkl<>c<w^qn;-Lp
zv}V0iG{YGr?xNw%W{xWkbaJv#0+2%5OiORXdo(tmBAyHmlf=4GEv?+kq~&mx{AYIc
zV~eQx-P1QWTPH8j&#ktT(F6;=cpabhyK>2LV$VDiAi39-Ur6&wp7dy%Tc4q}mFcSU
zfb`Ui=9Q)^fQM=%&VJk?p{7XiWw^`0Hq^DSYqJjpd*&7%Xjppt`BDK+J(hrnJ|}dR
zP8!+p39%--Nnw#YYRTTzse2hU=;KuX68pyIXSdMs{ogf!ElA4JEGMcN+CLXkJeDaD
z(g#&3R+j-=V)d&24|{RdrN+oaS8!D{(PuR=DLpC-aJ9zQ&;-xx-JGan=t#0Jr{-gB
z7SP|B89;%Sv4dm59_u;GS#0X>q`Fha1abDT8UU~#VOLQitwx}TM7fjaNv$1<YFV2D
zCvJaT!9#-$>r?}$xtf)~v(513mfG>pZ22&>I1Xo3<d- at 0ifKWd%D9?pS~-L<CjvaE
z5Xla3TyVZ+U$2bx9sf~+8M+zA;cLK($$a{W*_uTmX^?8u+i+I6z~V<Q&X`KxPq+Ou
z8VqBth~c0PE1ar+k at Rz@4?68L*H-`OdrsB#Cw&xCvnrM3l6?Jdpu(*k{U?)$G3uNv
z+2Ea98)NS#j>nh;K6a5(7i9yIAh3WucL?gSCS7hueEPt&MiU?52Ov4+p>NmjZl!Ga
z{Pwa}fO at TR1GR#Gt{Rb^c$3%V7iZliZ(Xj=R%S++eWmk<>UqU%c_63Y7bOr91}wWJ
z5;|8Xw5zq<&GZqL951%3T<82z_pD0ylmWFfR$UAl=l=qwE5GPyOPJr0t8DJ#*6)bA
z^**iCL+j#H8x2~uE!V8)SQykRqtoS>zOsB9=Akh~IT~aPe7$l^vb#eUK^Ib?pKXA{
zL(Og(OHMsBD0hN)*}8tOmoLuQ*y>z0&@fb6VUXgy-wTXQWPT6?SswCXUpiLNZHLWL
z%g-{x$M#dG;qRUjEMIEFn2o?=A#e(iPp61okh_t;7hgLa>9{p at 5qET{S1V;op7tIS
zJmXQ at Ut{=~q{j7jDo%(0iH4OxY05%_PZn4F?o9*>EiwWNnfBHloyFdL&l@#PXX_I0
z66G%ivn{mc=JV=Lr$aw7b{r32bIT0jV-K^hYQJp^cm7!P4^H#nTl62bM`(Mq5n1;N
z2;N&F{7ud1DHDNo9cBOxY~hl86SU3eN**-!s-i_KR)#%$ojbsG_|9p%NrwU?T92nr
z18R1SDR;BGXS5wHPrh+;kImNSK%T0~FF_`kAK0eA=gz_Eb$qBar1)wYE-)4JgR1`C
z?6OyN at U~oMio{Hzi3L(BR at W&AaVzr9n4T9$3=;ieGqX^9#0{c{mne4DcZ&UNyKUC>
zQ?hgZFFD<Bw?#7*y4C7<&|#kq7jBdQpj~DD4`_#TLj3%`nuhWQq!On?!3RP51-&=F
zy5KA8#hJq>WbOlF0&(i~h&_brLGAvG_0YjC^KQ0W`r+m6R)LJ7<7WE64O}BwX0FkE
z{_(=?p`@{J^SI#>s%=`lS077yBo_R0fNhoIkNa_%z3qZ~*`XTUtz$7Lm4-bRh{Hxl
z{EZ3D;0c*0%@=q;-)U)O=XJy4_?+e23_$C~x2R5{3zP;L_iD9V#%Vr?UG38fGvE2p
z@%0yewh_mY;s_uY|3pL5qVHMS;LtuTDmgw%S8c{sCB*XQfz_(u$z_;)Em@?&Nk!HA
zh^!yMjc&VGAb;SVC38fbm{s{;Zo{Be8x&;bR*`MMk&pUbvR9&18sZh{q}qTJ$}7?_
zS|f44dBROctv4Y55){BPy^|g71Lel#whYx8EZoFtW1QtH#cG>T=OHj?W6-f)NflxE
z6b|58 at F`~+U~)8kE4_+e at cyPd$fM=qRf#oiO$AMl{!r?8-+h8>HnmYT>4EZ&Efb1I
z#SBZU@=rQQgmRwpq3ZrLm#I7 at e&$3aYVJIG_#9#ul~jlR!}~G!tAxN#;$2>sI?lSs
z=Q*tc*Tz!qQleSdAO!L320v$=0GTBIzu2szSrI!&;rt_2;dHPG*o!cIVy-{fI5Fbg
z!dYbQWy<f)8AivKCK84Ffvg#%4GLxLX>nQ;B2b#fZg%iZyOUia_c{U2-#V2BMi=P%
z0AuG6QoJ8u>AXs3S-I_k%&5O-XL28-K~r!H>K`;uSQSK72yAaUvZm_eu6M at AS*`0%
zdtL)r)g&hcU6nW*nsH+zg|vv^&JmI^4Ch+}il(!VS8E1wGoQ$~Wkko#ApB;dfTbYm
z&N1dXx+>t}4k33XR})tv3;i!}Z;Z0m;8eufS`tw()BO&Pai2}t6PqKeOdB-Bi`j<&
zL?`dtM!P+>J4j&h9LB2GSjr6?a9}3)FIQyqXts8Ex+(Fv+~T}GF(U2tw7OU$HAap8
z3Z!F;98Ckkx|UQ_AN at W=TWj-wGbG!c7LpqWu5v56=A~=p7oQBD)63YoIFO}c!;PtG
z7_{8&^#HyD&uDM^;BKqcN{{K&&HaI?>#nD7ljJ!=#S-$bK at f>)+cR#|k*G&It&D0N
zQ at 6MX*fu7am4M|BW!=Hy_o$2@#i$e1U$=;RP4wqTjf~GjiFav%tyqVqRA-(0W>!s}
zIR7hr)cLIx2<Hiz6y<Y$bV+%hpn}AzeG4T3$Ya=_0l8&RS%LIUuQR13g8q59L-~Wb
z$OhSf#51P8 at X!j^F~bbF9o68yq|ng9=Y{#k*7lQgETobJvM^-5P{7iUY-gtAmmU5J
z<?DPjq0z$z#Um-pK#I4x1 at e^2LexfD+{$VEDgx&z8;?r5#@sg&bn_%LtQFa}QbKVi
z at 2qr2<0m$PLzv3WC6)@L^His7xPCkLTh*^5yQ;sL`<|ng#82I@=wQ}LM%+0Wx3N*`
zUJ}bhTdl}n3_lPZ_6R3xT9C8%=CyKb;t@^nLG-W#{y{_2!|QrOq9S$Vv$CW1&fo19
zN9_|2>Yi6Hk=huIVMhc?8<YUkSwZzTPbEbRg972B&`B&2ROE`69U(<1idXCTJy+bx
zy`$_Zo*mXiHVH%F#{koro8i%1Y;0~#HSzFwp{La=%zo)D@~azD#GTV7qgKstcG^W{
z{oYCRZv7mVU4_$A4R^1hUyv)W at nC9!CCZ9BQ)H~b77LB2+kAvAv<WeqP`lFXmJ6{J
zZtWc{I0dFEFh<UkHx5t(-f717Jn9oV4VAc|mK;rOOoXUJzI~pan17*N^pqc3d}dpI
z1T~knK1VXN_z{srSF}!4jFPr@?C-BqTB_0%T7Xbe<~I<``c;VVFYC#bNf0&2{JZfH
z{AWQpH)+#BFDo}j2>n(>wb<{I*1w;#xSDSNcFNxb7qnCSXEylNv2Jg7UdCeEq4prZ
z+0nu3c$D?><6<aeEUYbmv+rG{K_U5n!Ez)#P)9Z&-Xk9Th*v|Jb&ba<&W|j>IsH*l
znY%l?ZNaFI>smY0Wb8APetAwW1W-YOcF!iy0^c5jtxrlW{B1lFAJ!tyRP!&5>1EjQ
zIkui1j(?Yz;sdk863#4piOR#aRSZhTsWfxcba`-q8)RH(w_=sb=ZFv?0u`ZPv%G&J
z%LL_<6vqA;f}<1GCZlIYGRL%IMyttj7g at 7`<}~E$aP at xXy%}eOg3EYQgF54XAF at 6T
zIF^PVe;MhB&%5FdeIIp!%HRVzF=Pm5jkfJnZrR=d!YNNmY~QW<W=@E@;Ilk at 4#y!n
zgwp$#u-d?D_q%(TRCgL_CccYH(dAsXfBh-=s}%LQt(~YGS0bDXD%nrz^#QK~ka#>H
zZX|r%GgcKTFE(M836Pu0g+Pbeyfl+ov<^!Ph&GwP^A8ImL;&&u?<LWI<Cy;gcm>Zt
z9cr#ZSB=f>BgqN+#GCYRMh8^wge(eyW#ko at 6$lyR735&J4x?%wA+=yK_!VScDV;id
z?Iy3_wD&JnDt)#zmT1ll%}KcsPoQNleDv!{(W|p1?`b=`n-0!Y&$BAACEg~GLw7ED
zo=ir2(s-WT?eEu3a`a(n6+eV*kzhooo|KMu)tJHgf&SayZT|o{f2+}9Ps(&s-Wv^s
zbY$wW(0zm@{H!mj28R{uB4uEB`2nrdJ9~_0CSfq=iq}?vL9;c1UFPp-fCYLer3;m0
zMKQ~_QpLH<{ssv at V%$|R-CetA#(5WMk<S at Ir8J#80CavTEjU*FYN>6ecByA>MlZdS
zbG%EG8wmnzX#ZtY4*Y9!Tcx?srZC!&V0899#dIjNINP#JMPe&nx&e>|u`P4l;rRMF
zw}7uAq at xqy8DPUg!+77tLc3QL#hdX{#XDzT0DC<yV8;Z*ZglTCA9H?u9)qX5&$*By
z<-v$~1g1 at PuS{fEM>yP-vN>|(OHVFEyYo at y)m(-O)u4_eUdg1<@ReN7pViaOqss-6
z#Q8rQdI!`FrT5aG<pa8&E?YpdQW0YN6&vpojmgJwEI5~K<@O_s5`3&Vg<!Z|9=xzj
z)(TcJymJK)@1MPz at 1gca!hsW4zAn%TN~B?TRH43d&>*=SOSNa*EUbp!&=6Fzl{Ga+
zDvsX-m*|G#0K}zUxqrg3Cv%IBSrm=^&dR-=$PC^9F~5b^l>p#olH>znR!+X at MK4JI
zJjI+fl<88hAECj^E%+rj!4>O=@iZF0o*~eQm<uxROS8<KK24>q2_RPJx6vr^oHl+k
z#BL^iMNU%lV`Br at 5u+rbhl)NjE3h#4)p*}-vj+<4<#!1TtSoq~xU&lG9J?f3%Yk0Q
zKH!^wm!pb~=e<n&OTGn(cu4Ler<bp{VTDbk=B>SCpE(1e2bv2Fer?#K_XBh6!o8n<
z;G-CkJzESJp65Y}*Ql~YJ?3s>7%v0YreJasQ|sTzUa}g_v9<pOw=WgcWZM8J*I4M6
z>cSe?=~o;$yPc0jZnqR{R-vxwo#s((F9CUAkH)lT67t&s5U3|ICiHEm-}qi;evW?U
zDY;O(mbmYPhUa{lB3S{g!@iW}&ank#7p1>3H9Rt6<hXB1wvl7&J&onK4>>@yVH+2Q
zi9;f3NKo6dV5XI%4G<3?$B3?rC%IUz3@`|Xmgu(~PBV5L#p6PXjj(Stl|&kR{91{%
z=r3gd#`auFD0%xb7>;tB^EF<3{F`4J+sx=pCaz?F+at8ZY6Tl<6?&UX)dc|myP65d
z5wl$HNv<$?+RO2pWPkBT=jRYDGm{9CsN?`sF at 0(Yj8ZJA_$xnX*0t-W6+ihu?h}L`
z_BYm|BeRgT&J9ek^t3_77exeLbIyKPpN4o at x{_te$$1yg_>NoU*o%tQ-#e=Tc at 4U+
zcX-Ac9yK2(!>1rNe-~UD?Tp1*GHE3~8}7Hy$y;m at QX{NGnN_l|hu&_)c>%vHSnxT{
zCN)- at 6t2(t=XttuL6?WxLsJ*ezuR9*v*07AUX5Wb!7grSBCs*P{skx*WuUVnUx^=J
znf)9^t3boAR~_ZrNp>d3m#UV8G at ADZi!<J?1y=BqAs)nxSbd4gjTdo*fCunqHx5;s
zoO%rqDsJfVq8|B!qA#@lGoO)A3WM~k_GipMjFb*}u$Vcn-Fogu(nF?TOtc#87Z9|M
zOSrWHP2YQXAQrxl6tJ8x&OisBV>kQ`{&!I$l2|MP12wcRS(`buQoa?P8o(W9diOAb
z?T%cawPJNSy78d at M$yYSBJD4<Sz#-fGLA%*`gi3c$~0Ih=V-P%J(h4E5+`(M1{=Sp
zi1<dXN_p+RtN7NfIoc2cSoYA9j#<u1;~_Eujx=5Tmhf!r=T$Ab^En~&f7d3mYkWRM
zaz`cBwW;C3wzaWAb$7?|4oGFm^@YtdX#b_4RJhuW;hHy-fvx19Tkr{pX^SB$nX{>d
zK;@yCJcHwIQ~6k}H?P0O at wU!%{ZbYNYq+({JA~~`uxKfbEB-7%kjAW#vDQ-&YF4w~
zsHeL*-m8Cu-qRASJw;94 at tZG}Rj{vef`#jIp9PbZ29TluYxiRJz9hcC6Hn|O1rRm9
zmpQfYtVL}!+BAs$(sN^1Bt56a49g5*>N-J8P-BR`!}fMsIlQkH=o3O#NJiXX&}s}F
zbY3E^B>N3V9VmQqC~4w=J2XP?Wm)&4dtuz8kvj&)J{ciP7y4 at tCu8~`Fq6dQ#rAWl
z4^k#S|G}Xx3>?yBf at Ey|-%u?jD5aAVVp>i(d#b4kompf;n0GA8NX at jGtFF=t7o$)!
zecHtUNam#ch*uC_QmSHw*3eLuEd$gD&G-kJ$A&2rNDQqPeKos;-h!<t5hVbe)=?Wb
zHdKXKB}842nNr5Zd(PF93Zm_?d*mzJ{6POpWP+GxR~v}Gg^QyZbbBObiGbpJnJvEJ
z8eL_~Nl^k27=9A5O~2_gM4iJB;djr!t1TR0xB!o=hjenn0wuH+0oLqx>m9Xt{JsNj
zD7bw)E>1b5#H`~rU5OjcOYpXWf&|EZDxbe!bVWF3X|~}U#Dp6^moU<1$#EPW;~9W(
zdcn5B7$`r)F#d!}rF?g7!&){R(-7kx6q};{vw{ery4Y7o8&iR$^Y)!N2ln3b#oN9W
z7~Mr<%!brrJC*rLrPw?HDs@{uLW}I_3eHa{muVMS4evlI5q(4bH;lbxFuJUevPDbp
zG^(lE26_-Jwtgpbs_>h>wC63xU$|)SYyFFF`#YZ_oW>%2Ez}i1j?mGGu_cYjuoIVn
zlBC>lCv&#XVie0 at JSP$_w6+7a=p4?IY&_dr`do3j8oetf{Q9yBmN+G6NUYP`==Wa*
z8uEkmofr`y>zb7t%tQx@|5VQqk;92>hYXT|CqzOlk@>K-i;=@eMk~@>t&l|dJeEGz
zzRBDOCypI!2zUXW`e(>w-va*7-m2Wwvwh)c0zp%HzF+!nKpL(>JLaoY877COJ8iYO
zhs~9BtP5$|M<^zd;=__g<~No|(A+IHq-0Rx#`jw;Az1 at h|KZ>WwdN}ky$N+knBuJ=
zD?T@&Fq$Y2)q{PgNF2Vtewo4vh%a7tg at 9C0&2*p2eua6mVCb*wu4-HuHNv*Bu=7Dh
zB-e{k**<WB at XcX!1B}i$+;ffkpPwl}CwP~dGa at GM*z&}LWpFMitwAck(wjW8{5 at p9
zaQNi(bstqANQ<*$e<_mz<zDRkp5R~jGTE-k!f{Geo>G22I6|{GA-y28;VjO?gtfOA
zVd+SZZ`Ta^&7L#Tkh2G@>Kks<jDwbEu{eiOo4rifdi7NrOt3-xxmOAf&7UK!ao6PO
zEjAL1l29jFu1^2VThjFbDQ{mQ`1O%!o8?QAqvWc+_IfN9Qq^W!EbYJDYrZu2>%Rt@
zf#Fv<G~OeBz#t1(W-yKKLhoP{@`!Hg1&d$_3*T7C@(aym-g88v3t!-Z?ZP=i)A at zp
zM>3|#Fs9KLDue?;O1fg(=UAmkZ(-n=7tL(aw_b;XZrDU9@!28&$eS at H&UFtC#>{zO
z0V}tD?)k~zoPTTZUpdF$*~RoSyZ)hsfTo`RJ17I>4*|I?Kq3*KT<P|QjiTTJ&R6dE
zj4Njbyng?S`58hyFK+)I#5dW{|B(W`=;hHomU>-yda^{L%352az~X>r$4;mhkl_&X
zx&@rLAT3?#T&~IdtKdJe3{Vq5YV%e$y=lJy?Nt4Ay$^H$;6Tsa{mw`w at E=5?23k@<
zW@%-m=k5Juq~aevmHhDF3H-Zx-~8VtVlXdNE-t16ivubifnOHVvEcvoM>OWMPfY*`
z9D1Me$4htplfXQ?vM0~d_?KV*=>dS}eZK#1_x)3^0HqP~|F_7maL+|{0D1aIZ4B<M
z%PXD1ti2RG;@X30{@ycp8y~iKWzxyhdAUBQ4M%=ghTSrn|Juaye{=f)tw7^~wq2FB
zpp{N|9%%M}jhO%5^`PFn{_dimjX1X`YZbWlKjA}QvHbUB0ePPcNSE4$o`t!?QiXhj
z_3!8oI*0qKW8KaPkB>-Z8Q{w1tipMG?H=B~(Z5VJ&{zK&NGJp{UNze~)B%C6@=%W#
z<Ge-GvJc)4>*_RxnDp`S&3!)UE>5{VuN)Sx`VRAScp#B9YDwbVbV>}=k6!Ek?f%2P
z!9g>u27Qx8XaCZ|%*`wB$7?Ro@~D>|@Og8pD5?APHB<;52$1H}H6~9wZ%6SQMb+F9
z2=uryd)M~07bIVP(`WJ&uXDE;H{ik(1~P;^MxCCynbVw+J>x5vV76{4;;yxssM&(|
z0g~xM9)c$n*S+gEbx#kLKp^f$13)tr+EO2)yJdaA8(iCTpS*vC_$(vBASsafzv`w?
zC_t?^khZefu>ADmMJz^aah572oPyd95KFR@*Oh3#YS1gRu9N{9u#Jt4+i>WrxHC1L
zcl1E6e9RYi&~@`W8UgCA#l}-n5B{X(usP=u`iZm5ceM-FS<VY;Xr at OxPiO~D1Ud`N
z{x+=-C`UDOrnTOvpzF_D&jOZ%>tlQLYgE^aZv$Kz8IAq~8bHBp)=Ld?a~V$~)@z-6
zM_b-rbx+Vh5we#gt0{e0z*&a(rHNFY!hI`%FV6=V5P`&WK!Q`up#JuA)BhZr!xSK2
zMS5iZyPv09QuJCan{cmHh2Spv2{!$XANELqF at YH8uGw%(oND2%S$FmL)nTD=dyC3P
zkeGZ1cXeOO5ZxQ38<(y6Uja_^|1SZ~R*W;~c;c|uRqf29zEUG5Ie(o86?E);)LHMu
z$<MBF#ZYLkcC6KOx+o9fGR+mU7Wkk1fqz;zK*(}Eap*}_p1z{zr`ZpYpV;6IsJ}$6
zkIT{I at 9I7ewgVy}yN6px%|<8WsZt$WbpM0dJ3u0`G9JYb`V?oRw&0a0!!&>EtV+IW
zm4^l4ayPjZXFmXm49X0C?_qZ*sfjHYmXs*@X5k3;c7<pZb)({Ne;?2e0X4){5q7U=
z_#@0pDf>SEh6FSg(zcMseRCA`HSgN^iujhqJ64p8SQ$iIBeU-E1H{AS1y6B(b%}P5
zXK-owa05#=;|~3_I1K0I;lTn!Of!6ZaOHk{bhI*e%%t4f+(&6wH7w#sa(JX~VuFi$
ziNZ8sj9OM{kIUT{+;j-z!pIJ6RQPva05RhE-l2uY>1J={$66paM_cge*}Cn$Ffo6%
zJ~5XsS|6j{c~>SFtVV>lmBB#o_}U+M&Nn#H at E<NVht1Wtepq-#)cBR;Y`a~#G2+O{
z6C}KA*|^ZtYO~Phz*YRmK8_U1#~X*L!~3x=%DoZ7Z^32 at dfD~2!duX|J>7lIpL7O5
z>T at txdm<$^>PoNeirP8MCqzz8cmn1<iVWdtayZF2o>)N79nS!Q9!s9Sz#Cmt!t!Z_
z_U^RtYK$X!+Hv;oZVeuue5{Fm$T-%Kn0nYeYHj0R^aOi(gfBe|7faN)-W=dOmZTJ;
zHbh;~FBLp`aXuUjz13M}_kLnG48yp0U at u-ex(~j7xS_k>yk~z`+HjMA+S+F0bqDiU
zfqHLSI~)IW+8*Vq^>k)ad#uAx<+Skl<{H2C=B`vutKB|^J7d12W at VxDB;hv<&n>+7
z)m*pJW5y$&@l{LG-JR8al&n|(8y$?tkf+P5iM_?kj4fBM at TI2`^&#(rMNyoi`=+%N
z?b-<bhs3lyyr=6%y8DF;FUZS}_a>u5tM^s>M`3$zdUDFA4-ZW`$`d9|Pm6*&kDK1P
z_Ig_0^lL-GI<)ag7gr0O_Zzb8Cm9XG4lZmek0*<m_Zyva_Kx)t{0jqJr~0i=o3-pG
zHc|b~04wt3h1kmJUCJ`NSvuD<gWAgQ&~iWHLL7US0c<Vv3O{0>Bapz|y$-<j!2eP|
zTrCHE0RaB|>#{pvwT4_ at k<KoEsCk=VZk^`CKW3WO4!EFYEtksMIRcwi|HeSoyA_d(
z+4o!HQUP})O at Sg=zKH1@?Db)l5w8|GoS`ZkaYsy9biHmr$_?dh0jIXE&NUS!i}mcb
z{j^pgZ1#2yqis2jm2npk at mIqOh$fqlEgZiIV0Q$7A-dlEpD_xTo!>N6eRTq;_l_h}
z<TP70X|t~v(FLjR9y<3_Xj+#t_}W~Y^DZA{qa`XBtQRDVlEikT->9%oOgFf|H*)Jh
zs?veHlX$hoP9AROj?RAe(8A#5V9lxuaV;)A6v!*PX%TEFu0Q0pEmz8#&wZ_77ixT<
zf0m4DHkbkmvy*=J>xwEFoyp6*JJbZYHhqJrBI#j`x1T+l8X#>6juxU$#;^ES4wiD{
z^=me3<My8dTJH|n9v%35Wc30TVe at HkM9IXApZMLc#>YkCOHt=b-=(<0#56 at URbiDz
zCnJZ6=o=&<lOg*1ts|*?h&nb*9=RDkXOs#W_)r^+B2F*f!+|F at x~!Rk2W4%$>ix}t
zAarin#;%}$<0&Yb5_wp(;*a!<Ql1P^*5=L;=UeaaZ<*h1NPP&#Va3*?V*10FG^er2
zM*M$X%M|qXP7j9+7vCvMwrie(*ykbUPjf)2x`yCS=n@;YCZwP+cjQtO6uVBMHWl at E
zRi%Nxo<9r}RO^kQSwu&zRObhw+8megX`%E2;tckC73z+V+g4G?JP<&6Vn&fMTs&RU
z&LC&y3Nb2S!nECo2J`db$}Jn==-1d+H<oU~sq9Y#K1;UQo`?HF({2X0X!-X{9Y3_@
z83Vs;dA5jrGHFuL6ovL7zb--mEx3VHiECPtH45QC1QEi`!=Yk^p<<?MnQGpX3cuFT
zBDc!C6Wh~#LDo_|=+c{Lku+k2PeD_TkZpG>YZWFL9KV;_v#?d?Q$mt&JDI6^YE1X+
z)LIKpcq#BajMp`9&$vEN>vS2L;<7J5%%@_K>0}-CBw-s?Nn&IV*>z!I`-BRC{Q?jI
zDCd9=a79PFDok{gh at Q=p`$Vz*4O|rk+x_qpCL41no?1~DWE#j2`+<wtcX%%#JJ7sh
z3ZidU0GuX5PH8Z276|4<hw|wnFNzHq5-+E;)kItpGL3I5llB8&kU{9?51X62Lwrrc
z0Ow<pVf)|<=7HO1YgJogl6BKSwj7Dp^Xac16vRR#23({>GL-zPO>oLxkYdE3zd#m3
ze+k(>GXRM>NP9?t5+7VF_fIWQl5?wfsvZ-DPrM64J5kMeJg!IJ9{3FTR{?Jl?$x8e
z!uUzQS*LO3Y!K1r#mVGHbl?iK9n|1Y6HlFI30?=hQ4lOBpo?l~e_s_2C8e%Q)NpsX
zsIy$@509a1g2Xo+OvIl2X7hzNnooHb!|PX3)Qfis4OjLBo}0iEu5HoYdp$nz6C0e~
ziE?n#lV6qlw3;7rPDd%j_}t<L2S#zO^Wj9CrPWHG-`v|lwXqgixDHnCfM}O`ez0*)
zj at TivFBG~M8GdM8IjMzEr9_psVGb18ybP!n{w0^SYPC>{FtCh*kcZIX1gq;>Wdi-l
zZR5|u+t=fsFuHcF?SEu#fWNw1>~fcmfn6HnW3;fOCPLZsP^GO*-+(mf3dMvTJ=NNB
zuL9vBBm^ReRhuW5oXk-My*lS9(81PTpV3Pfd)@l9aB2%6+ba2W>~qrVN-JS};(Zx~
zq?J*0%(h;`XH+rbsFZ6{z*)^_6mxX@;~Sh@%u`$cPU^>&eV+>|yPqKmT<lm~9O=+0
z=J$C0r}9w4zq=VSjN7O5f%715V(H7n1sd%kYZIUK{Q?J#T*Raq!i~hAYfIM+O at W|~
zu_J3?1Olpe$74x(IbooYpzn5rXoRuQvW&<x7XF48g2RH?-Xy?qL07V|AX&}93H>m}
z^aT>c%KR+gv%tl6@(jyy-qlMpm=5mN6BRB~)3Kd?wO3}ji!}pGrJB5)M=ITU%62xw
zqB|6F^2}jh2+~p3QS<+Ux3`X}s{O)67mc8lbeBpuNOwzjr*un7ZfR*yLJ&5gbhmU!
zNr}X!Q*x8ieHMP- at BYp?<K8>Q{o~v<)?nb4z1Q0BobNlI=b7`J3%GzqdG2^%Q;PCT
zZH_BDX!_qf&xW0E290*NTuRf|yO2L^UKEup+in*OK#CiR_!VRTMKmZpRl~fquKcpc
z at Bc@=^Zee&NavGn7A+<)=ulns#1b7 at r#6VPr}<V2bTeHRhvv;4I8qk=8{W}mF`ZaI
zWeMTijMiLF>Rqw2(l5ofQd1p7gteB!Mr-w3F-zn22yCj=$wA#-=dMksrva2f^8g2g
zDp#Pzmom7gHJEC(KslcG3mPP!F+SJAp6sh_o)-|QDN{0!xm at xMiC%?yv<ji%B`~;L
z&-ink2|$x^O#v!7zU78#Ia~ym(-v|!$YE}M=B9D0h=4TtjQ}_ at C*P1<%QKu?tf|jb
zN^Y*6 at UyNq%OU8^`!b-C%baePm-tj3F~T$L2&_K1Nq-=T at h5{=am3tex(kim`Nwz7
zRX%oJi}<9iH*fxB2*H3EAzKJ?fb}kz(DprW*cevT7>q{7SQ??}L!d}goK{c_I~diu
zE_%aKK3dkfy3pIzOG7w?U9}t(L1u-p%!dbH44gOaVJ)ZNUf2;pmfE`Ewx|`|3N4Gg
zqxY<<aSskfGNf!T;gRWuU+d?WEZ2R|tA8n?BVVtvtiy&7uO0jw|DIb_>Ap?^`gP}A
z at cV?e998fU;V+(8bbunE?jBzOtp|VMC?OXG(w!@|_R2Pup1*|_Qt}wBXOujlw7Yl0
zvR%$WbMrOWgv2r3cWx~@hu}{olEyU$VJcx&V`F5GK6|MFFkLD#d at c7b6@eNT*BB8M
zA`O#fMlciUo3$p~u&ad>T8tO0)aQrQb&q(|*JM>BpPM?8vHwb)<N9@*h}7{5{v>Ns
zAL*xmX-+zVnU$W-3s6%Y7Y<CD;gGDP%I%vKP;{u at p7ibghKjg#e6W%t1W7zan)j+$
z?HuG_+1JJenub^MibM>|PR(Aj7vs13O)mv_j{t|r*r-U2oR$WuWzK- at KI};gn;{hz
zzo0*MK^x_~Jn<&;RdE&JLPN7B3~)TXjN-lZa{W@~zGbAaBIE+ROh<vNIO(BEHLg8b
z-cTYJ6E^59`{XoVUV~~jT*Y4*OoqfPJ84#OJ5vg^M}@TU>dlul@>b`!>cnpU*r;N-
z@*Kq%PQJSB?Z9w;jO at BL_sbw?CnxQ$IRPzBaz&#<H;+QrGcQogvyIFquk0Aycl#9B
z$<Y^*1PGNUy_yn6F*68 at J>#xNIZ*T at mo9i(0xX8b9OCsH)XsED<6#0$MyhAC)C%2J
z at W(pgu2uS+nbT964!$mrMZo0Xij!TLq+1{w{Qzo2cTTHg!VrSlhcljiD$q949s<Mw
zp7GPoC%}?yeH}*o4&&FQKrww@<FqZo>ort}0pRwzJH$nXU?K2><&#NF0L}0*z#I0Z
zjU;@!-|}Gr?#D7Ii{xEw3oIhuY!buikmq5~KeLCA%XoX6xmBz-fBNB&stYW7fVpg6
z4BO5j*asIg5 at 9*OC%tEnR1*T%2H5DM_0miT?u~5fZGDVOk}`z(`&2sC13pJlt)?`e
z9Ds1ZH(M7%ne<+?oi~+>PmFWPrLz#254UnfgTu|~It(ITFe7&KS{`}Ew!m3#XB5S@
zNx|MXAw3kbS_6^WTZ@^+J5$x8>5;>7d{tQj5*9Dx$YdvNKVXP|_yJCm$zls`O-l>X
z!^%-KFyaar=Dkr-HftKqDGP$NENWl_WpOGeCr>P=s5pCT(dUIDzgqD>dj#@E+)9)P
zC+*27D+0*uY at n|XKS at z(ljir2h7~b7yy=MZwIaPXJEz!4;<U6)<d1>(<?oM?A?*@M
ztpPXj?Q8c+8LziYkaZ4M%+7-i<WKs}<-k~LCbK}G$!fYzM&%%n3A{2_#!~TKPq%%+
z3o|as4STb+mqq%{5aBChn}sDVF0dG%wQ4IB8e)2RthPoA+#J}DRW>e}ji+%HDUbQ%
zN7y5Kyug7U*l9*EBX%1wA$4?>r!^VYUxv0ZJJ*hoLJIV&uonAO7T`|y<H{K)T2Ch5
z{VLfeSTh30+$!S>xlN4cjq~MqwvGnoDdCv5d5D!6S=Cm(jwj>QcdqK_F1so8$q_EX
z!8!N(JIAk3K+6Tu0^{YdB`3jbImQ=w1%lr9TheB;XpF8Oykzfmxl1Y=rDiv136z#%
zYoe6AC6h|iVqw<@!N|gVB3d=(Mb6uwgUw5jOZrR?o_zJzQ9|GwM;btc)SB*2z&{g`
zh4<tO$?)bL3E*ZcjOZ5v!QEI at V-a{nnyDpBWTTXg+D?eM$mZjS9oBnAjd0T2ZXh8t
zk_`<>JlA1W6YNr??r_(LU<QcoZd6eP#S6^}`i?#CBmL!taL4ws#~SPwU{WPjVUnDz
zxREGtz3dT9p?c2!c9)s<ySy}Z70z%@wp0G$&H(C(GR_aA2H`7I8I%cl3p#M!^#V{y
zlqXb&6#4Gl`c-A at 4AEc!xdtdJw}%RzVOjOfl~!Mp0oNyl-slyp7$#-AwmB)3!kHFg
zpZf0h-=#f=k5VTN(Rmt(lyO(lFs*)O764xOY>0JOZy+-PycNrLk#92_YZ&&Jnk(?D
z+SsNlo42`jfvnq0o&BViOaDAAgu;lDMQ at 9;&b7}zD)FoG8KS!V_=!LAO7An`dkFlA
zewcBmclz>#oG$p!pwiS`*PI60lLC~wXpq&y`l1*R=YRZl$+EO>#+^mr6l>k1GBSXq
z>B<^v>Kw(H1q<0WcI at T$*`32TuP0>TyK??)EDi4cI+IX|HioRxkUScv=FVSFN2-&2
z9Nk8Z7j<#)UfPyWM?rE)ql5s$cj54nVh16+pQKKimp($zo1+yugT8Y^Um8Jt2v(rn
zryZj#`niUdMT!0GkCz;{x_2i)r5eUR=)@e5mzGWqc|awdK*HAXH60q{3f|lQoDfSj
zgX)#_kpZ^FP{o3<*7!(MZn`s4e4a0XTde2y{8!K8DQHWPpjRJzQn%-l!CR{=+WdHf
z79nEt(llQO(4&}|+pCPdM&?AFGDXWQhK=gZK~~Z{!kF94yU&>}!S8NRhc#a&cYrfh
zvRP|i^~3KQm8h(_w;ZPb33JwJgq+1*)9{+XZOuEIf#Xs{->8E&W5)J_frVma at nWdU
z+BKmAke)B^(9E^;E4W9?M=rFm*WoGrEh~R%Y3T&hnQZP08`5YC5pnf_=|Zt}B}(`T
z={epAaYp3C67m;8fF%Rbu`RWQkC2KY`;3 at q+^2i=rCJ*uFR<QP|E<3-YP4*1<oFBj
z&4W22NKJ#s?G3zDt5d?<?Ui=R4f$?$=hmlMOrXO8ag7*-isWz9!dY}%g1Id0v at wA>
z+~UO7gC=s9wFW)$UJ4*G0No at te6W0GpMb!#jq*{_q~&a)Zl{mm>1Z)h1ENI^sZ+9*
zG#*MnFQRw=hHKs#&khvte~KT>%*+h<BPL>!(q+u}7<&5p-*&BU*oyfiewwmsjqv7e
z#8(BSN%3b%?I6Ca)j56}x`vTE at L|IR74n06ocxS8qv=K=uscyhnx~xFUr)GiHVC>!
zyMKLxd>xTG5%?j!GsjTtOMPwLDbdDiI~mijBVyVr{$F8)(2oY<w3Kr6coOqkT!j@!
zy0_I9P4>oZ?zLLDu$Ue(D;q~;8V1B(Qg*rMPNRjhiESzn<qr0Ou9S`*(S30WGi7fk
zk=C89Xupec<@cW%rlx&3n81}|E1d!SD#pe=ot+2;h)<0<w6)z_T_KZ`+B&m%xZp8H
z6!GAf8VvY2SP at m#)xqM_9Ym)7#y=gbtWZ{5(^jY+{t7oB5e%_^e*=FQn}cy6^53JJ
z<6#K at J#>j5;>15kE_2KSeER1YBLHvrKX2K>06E@&-r^C)3DAS at 0GRN=0ZAnO6*YU+
zhhZm8OCxPzb2I-!zK<3?j8+~$Fm;gk^lM$j78kkI8}tLF$mh`vpLNKEMP>Q3WG*-&
zwC);S*?~7Z=GpgfrLA<$wO6hN&*YQts=Mx;AL%Fr_dz+ at pNbYB7r7GxILB|5po!E9
zlwUGTlsg-xn65vUErgg!hDQAHvAGm*$~+9i->X5nxN@}G`#crb6CeVXA+1%PneZZm
z(Uotv&jJc=`i{#EB)t_a?Uv8xlsQXj=-cVI&?vR@!^k;`YOBh1;X)_CXyGebO}ne^
zte9|l<@Cab0}s+u)~>Vc|0a at dZ>!1WNlK at 8Z+nCN@n!h-XN371FEY6A+#kky540a~
zhM<^%O$D=61sW*#s0~QaGvSMfjoVMwJoAOcefJ(XSd>kEn_-Z~V&LF1>V}u<4^iF7
zgU(f~j_uK8Q+EzXhI>&utNjEt?7~?aN_-%qvXU|;XVVzu0uUak%$$O2%e$UiRCsUE
zpDi-<j at 1QLzom`imz9q{&Zc9ug2<yo{-V*%aCDbAz5w=PlsA(nPFA;z0ER(_Vs<=`
zvBPIu(UuVC&b!YFEfu(9*$145=*3nRNdr<<IJoozS~Iv6_CE1YxqzlljeYQiF;AU@
zF*bz+!9H9~EzsbJ=y>*|-8zqw+zE at fTd@=*M=i+zBS)wMKpn(`Hg<y-LJQQKT_))K
ziVV9stc^b8KoCC at q}CUS{4y^8{dJ5`SpxkF3xIY!Gl8DjTFMT<AQa(~*AV)R2+(sl
zexOzekO%aBNs4^~sP`hIlBiEFq%niLL31ve9oH%&Lv$`^AAMQFy=YO9PYNAS%Q5%+
zzUjE?{+>AH`So{RE0k?eozQ#C`Ie9mygv_|BRx>8Ah%(s#qazcyN&eakBnoum)kf+
z$FKlv+F at Brn0T4Nd08hHj;x+QZ=i74^&-HskJD8ExJGGh5EpezfwpzEc^3Uq<NKIh
zkx0q__z`{R5o-^$D4*SZLx{P(!BX1$!`5*WP=r6f;btQq%4V7oEbM;$G=fCfrxr2V
z at 2UFujEpNo*H_6NUN{=$^!k|L3XAZZX=7F93zrQ2!)bu-!6G?cg9 at Reqm4{|wUc9`
z(!9jm@*^5rXpo>!5PYR$PBKmCq)fRSE(9 at b(>kutQa9H{j>gWF8OvI;+=XunY9A&G
zLFQC7a^qEdrqvPfxdcMj1a_&cK~)Vx_P`dwe`DbFwevPMXi9@?VZ__g>!q$$lb$tO
zl^YiKt4HTk7tLDzRCHe%w#aY}6dt5IsC~eKf6K!f!uNOCfa%$`P$W$hh1u4{)sgl6
z3REppEW-%}H3QL>3CS&+=ZNBSu0Jo{lafZz>sNh5eO>V+X%h3+C7@>sO<_k`dNNo_
zb=zG{hI*!fewCV+t4tfeUMh+Hgta%eK{j8;^<`UasAv)GwBv*UYd<FG?bBeXq~%BZ
zypF1qn-kQINuev*MY0;0S`q8qskfiB&~&chG<x$6J^?q32xdK-e-1$5P#h}I!Bspv
zw4!L`7ufAhm&*m;Ek00QSa{ddY7r{oEAEj;+h5{%ufD~~vj2p&136|{4Rc&^<yQe3
z1YTE6F-ijL5ZE<9Un{}DNfsCad)un)P}!(!ADUfK`FKCuwRqXV8%UA!lfCD0gp*K&
zHOK&Z at WoorH-7s8AqR7I3&n%J=lRUG=SQ<1+s8|WYX=&w=aF7~WPfK?{NI_yyK$~Z
zGo$z};}a<qtgbw?MaURslz5{=N)x;U$I;ZK2te;OEHfTQ6t8f+kyaYplOXp681gp=
zSO4M2Zx~s)(QMT?OmMp{MGP_oUoaPM;~f%fx=<XxgqE<BQ~S{<VD%gLCSpYuwXVVM
z!uQ6II=<Fo6h2ZCe5D;1E*YzKI8==ENCf|Fa(l;rgon*nF2yAFcG_Cp2MEAQazkY!
z(gjUm7QJ-yOU={et`iJ!YMc%4k<ZBR*Rt;Gb2bDS#^n9>oA*L<9rU0)b;SmqnsAlT
ze;sQXp6q|gJ4ykRFL%mfz*q21!Zae84AvJ5v;eHAok3(s*Z=`5U<Bf3+I{dUv(V1@
z*FXxcJ9-o9U<c}Fa2AHl$wGOZ;QE<NvIHBt?r8E_!aKUYU)TE$TU4e<(N3>g?pl+V
z`igPG17}-#@7Q?l9cqqbrKL}vnLUIn4<|eLkwC8lDnuNSvIKeH8#;9;2s_4!nEmAX
zH^Y<-yUX3 at m;T_J6)l8pZ at Zn?!V$38-`k7K%$c;YnQYcx<e83jbA8=0+OY4ME-gH%
zIc3o?{)Ur|zxVkuuhUmI6sIR0ZAW%K*Wa%~rzoi=p6?YI2&wHzPsXf`;sfbYiP4xq
z&#aGCvOg#Z|M0xN;#1ll`eZx)zSaEZ at C};EUdwsx at q4vDXM^Mr7H3fQv6onEs;~(7
z=5qd{iw-xgRSKbFzF}jhQ}qdeRQb4cxwj*#esS at I3IZj1_Go*A;XWWch3z`m8imH*
z-Fr+RVGUruU1q>%!z>vJaCN_`Jgv{_v!fIn+JY~atwz{h1~`|ua8K=B?<iESo=fkE
zx_G#(pQ|$i!lVCpqZg~K@~uozbRR-5uyXviHmaV~MdNAO{?lad^^EX|+zvQShMk9C
z<`!9&G>1-8)2^p@(tk<nw4QWq2cyE4J`dEiRMYm at 9w8ePmKi-VVzh1^1;#Np_$JtR
zdgK<k5ZByAqO+&h%2fbHF)u2oZJyp6&F}_&!RQ!gafYQK&KDxOim?QzRhVXZN7d*c
zysQkbpmbUtnP)ShN(m-E<zVZ|RKp5u3BC?N&}*Uf!PS)Oj$|U?yq#<g(ZD8%^_<t}
zd*O5YJJwFQRTYYO)1=e;Ak5r}19W4;lwugfZ~|Fx?-(^j$1hdyPlq1iHM`AoXxl~Y
z^i#C_D&`m-%`rC=lc4$Z9fo8P^~ZPpn`-oh#2m{Pb}g3XQG<ZRt;OQ~Jf?>s3{XTd
z%lqqoR{ywPED4$ZcL&&hQPs8vfuUckq6DDE;h1c8dXZsN<%?1IiBdkQRp`4l#mF`~
z1o1fq9(_T@$;Jt7X+BfSawSsI#QOw1qU7l0<k(I0d8Ps&LuIN`#L5BK>HLjSTaZpE
z|1qDeEnPpXhe8q`d^#7QSI<Z>ox0|;NjKS21md!G)aCi#QEB#m<ueJBnvh{WW^WT-
z<=DwNQy>AuDHX-cUL#Z?8QNNtC0BOmIKghsiUJv{(V78u!oU-JIWpSs*FT^Uq%fq8
zTyzoUgLOj at WY*JnqMjE*PBycn1mJUfYk#yJcsZz^w~DEKd;Ypit?a0ETT~U$yKer{
zUNGew7TZe(LWtDhzw2Ecp+r2rMD>5^+ggRA6KN%=d^n`v8Ah6q5lKtp4(QSHfDHqr
z;;xDd_R_ZzvLnB14GF$-I0NyV#cit at qPT&fZpBkv0&&Suml04*rf&VsXxOe+d)b1J
zU4NtyCcDRpD8A?Zs7yp;gK>h07yvu*Sa4@`S}x_IN7WumXgv=*w0{{rY>NsXd(8J?
zSc+lI-3_He$IEq)0%G-A4zo?A3OZyNbPj+?8U9-m`lPpCl$rrDgaJ2<h7zw?k-65%
z@?N3dTQKW$r9>9`8Y`BGQzQXbE at +%-YwA#OjCpX;VyVBN)^2c71pmhsceH2O=-D9O
zeBlE0YSw)zjH|cmbfKk?c#^OC;%eP5)VpTAk97VX{Jg9G at _8nw`)rm8B*@|5a50XS
za1BWMUu8r*#F}Th5qgmuYCp5?OJ0zDjpdGW*V9v=NhESO+)noQ=1bQCo|7$Ql#h`@
zY}y-om%eIo#Y=M`6&Py8 at 7w&D);%$Xz~f(nWP}~%0r%%RsKl~&+VNKC+OT4_d~fn6
z(A29lh77~!XFjh*mO${ZX&43*m`!u|weUF>78wAKk1mS27h`PO$zK0LZLIg+SHAS}
zI at pTWcTB`C6&IhTtdE-lit!@IOUI_NWAp}#S#$qW3t%uA+~O5#pRap5r->dbl|-KJ
zd5 at 7cg($gZWZ>5VZNzlFO!q5kJQlVKb)w~AtjNWi)GdhIw~m1f-eB0MluYq7pKeif
z`SvHNlEA-xGPUq^D9hAZN{@r~Fa{n at Jpu@-n2)@zGNNq*ju_a2n<S3edKGY`MQ1DY
zI|)u*?8kLf4?7GG7D-PF-bR>=JD3 at UO8VmLum$N<{OM5ViiYuKbzkk{hNCj)8<WBG
zyLVT^(YYK>25%4DJgFEI=wbqv3d?M2?|v&!e%rsOV-jS&;Gt^1wC%%hi`vu?u<jZq
zTQamVoiIYG>}{PqfD2EAFMZvqV;vrCyYms^mx~7(Spel<E`|<?@(>P}XNmL3=@F!^
zgGdX<$<qh>6uqwWrNh2mFKnM$*8j4``Q3t3GkNt=+hxie<CqDCb3-wE++0K=Z)a|r
zd3vyQTsSK(85H|DVCT$A{kU&hY>0+ at lt#PmY>5$XK)A~d<@(d{E^2^Vxuoe+T-;2e
z|2ML?MJga5&<WB`FE1~gSlP>_ at 34^(EbwrB^CpFY=3o9e68FG9-QK(j&dj7Br=+CK
zR5?CHX~DwAuBxf&#`%{riZX*>5%wMYu<myDLr)){$PlD`yniVq6x1ej9l*ko&0pPY
zZT9Wp_1OG;aQ^bnzqE5JJyJF=mD1x#`<ftDmi>SGKQrKBz3o5bc5L(e184sK_}Z`3
zWrhz at KDrV-`qC at 4r<TZHum~LYndHf#M<IQE=zTTlR2vCD?$7jRK{O#Pjm!biH}Mez
zf#29sAs*l2j(mJUQ7!u<U4>7;D>$)J{BkrF#$>YIQ-FCSqBjq&8v<+g8LEpDmqq}X
zyvAQ`p6o+iS}9x+`Mmt at B@pdhup0nZU3`F+r%D(v9gGeFFZBGqzT9j+ at J8QasAXO*
zD_Po{$XK~+)VFQz at gstpYzpSxeJvvw6z{BpY<p--c_?#SM518dxWfe0J4+4}z0GJe
zecOGBU+&*BT$SH&BRTj~(qv6;9RIm)yWHcOBG{w9JU)N%Fv`YQf2~u13h~R~Z3(<Z
zy&lk6gi2owlXhJXxKp+_!U8XznA}&7-?R<{w7k7-Qphk}Q}%%(P#ZIb8RH^~L=qwZ
zJ4c*n+%J^lza|NUV!KDmt~G9BbzE|V-FB0A9SLL1elxwUJ^b11a8sHv06L}lJx7QT
z62g313|%_tq`C?GcgmPwbvTLGX_Fag6TwqJ!tw<%2`<f?kw(Rr!Icqlfbg8uWL-7!
z2RWUmPh`eEuwVK*Q6q|9a8gu=7-IDYc*xza at H;mnHEusGnt9;n?>M at CaN_-!bpb1>
zpfs&}=%b5lipgC<>nbeU6Y%?R_tFqFQ;f7KL=(mI8&cyf{j;lety<MGPlw?w(~!IQ
zJJX|^Hs37X#d~|_GFre0*GY*f?bxYn6>GV9VZ8c!F}}cci3|cp-V1zSWC{A<CI2Qh
zpm>0FlKD-~dhp<S*S#Ns!`<Bw&E4F3u!HZKQ6KxCx}%pwM&<1^Spz)I$19}!O-5-Z
z*LBVrHb!iX`LG1LH*Bbo6S+6|i-a_$jlOsGd6wa8k3n?UNLBWD`wuN-T(Z$daUD(d
z$m~HbSod`Cb*&G~kE+s`oOwt>zeNP4_+?KM7YD^!UVn|VnZ#<ZoA3i!#70iKVrp0b
zNMJrP;lxY2n7g at 9`!k7pTlP+Xy^)B#`J#FQTBe%!wX}v8u&K!Q8b!|UjB-q!CU5Od
zI>m_}0peipS^F*B%7-03+Gr4aUUl_ppU2+#&Hs!e85#TEhTx9$2F=I-*do1oiIstD
zHsgqgd2ZDB^7_?qW$DaOw67Hx$rtSUqm5LjFV!>Q2O^5j%UOeAR8mEP=N^$%VwxEw
zz^|`@+O>+`fVOlY at zvTM%O*?BN~>JT{Z5duN(zTn%p>@>CRJRRS*g))Y1?7*Y3N}W
z95Q{B)UvA=&C)^OXDFV)0|=k%)&j0&EI_Gq3FYrrG$2%0`s*ULn_CSn`kXAHIL#$x
z16Y0W$4ar&rso at _ZB902xrk;Ul1lW&eq!22#?Qq|#fms`@X0v?(P>nM3(yV5wj~Ng
z6xN>v2-zkGjn<)MMU`pwH)iLccq)w>un&BO=WqJN-90E|xq}btaXP;XkT%fLxB8N;
z@$TmF%A{SR5gUulpj7p1$0tG8gV5T9LrTi~(N{OeS(xY6FB6BY$tYh&*nLt$9b31X
zZ+(e+S$T5Y-5|EMxFBZEctiQAyCIE?tkak^p~dfj?1trl=EDFriC<Wv*zFSsmynA&
zsFCZf9i`#ueR${lRQcC6@&!wl!{;w=w)c(4Qku^>_=vt=E1 at c05j}1KZ6X at hezRTf
zwU2vK`$q*6czQA5p}Ors>i38HW<4vg9CwISZiE1f3;6QNJG~E^`zqa~<buX`ewH)a
z8RVl0ZGTzH`Zy#^7EE%ayd#(=*5fRmBo*rH7Y73FMCRY1aa0FF=JvIPeMkrioRvW?
z#0$UTQ>1}`WGA-O<@|fV?^E~5^1u=U)6rIS`v`0I^~|c2MP1b-sNNGjI^eNOHy3di
z1(*=ES-n^p!*CvUT=VK7g?MM}n!h#>UL*T}rlxLusfY1WIoW at 6OZ7p`{7>c!6*6-R
zfOCxaezc;W*^rk0`T#7TXS>wNp!6pSy1zupx;<%CXXWQ_e(%^c;HGJ1^8ACupCD+*
z`Wy4rQ#P(okHJ&t-iwG0hMX&>Abc<T+2PGTiHUGVclIDkDx8M4h-J}bD3yu8*!yVt
zh%4|CY;59flh|*K8^HIxT<DIy<zkfk=9Ub1@%CI6QLf1J&}OgZy!Sqgh&`|?q<M8I
zAS2={aA<1SZ(Vb7cxL04>9=;Vy$R(ARBiFL&O5`mcvue9<ewj%ig)Psm4CJ5mCB~Q
zLIvk at 0A%9mk%`#bys{n}QOi8wr!Z?B!HdSf+0gjDc*NeOkg<i#6h!e>3nwua#HtF@
zlnv&J>nSt02wZKhi&<7aQU!#LqTmV;>B6EnMmqk2T15f~<^U~WzHW~g%mDSEHj=6~
zR_98xht$Qk6}y-jXfP+4 at 4WJzMt3Dz9ViA4d;3v8kI(s#YsBDGgFI+>)hm{<!)EV)
zu>vv#bmp9(Af!|{S<CQ7HUmbmruWL5Sh}Piv>yh{t}ms)DKT`LB+Zs81)i(JG3c{*
zb(0r9GC-P2ftv?@pV&duvhSgo4|IS!Bi3U6S#U$17CN>OTTJ^j_XxrDTO2l+Na>5}
z3!E$U&^JMW!AN`HG}!O-Jb%$5CWv>=b-`UtB}SV%NCOQFX=Wp`4iX4Wx<k2Nf3vdx
z+hJ|~vKC#~IOuKM?=e43pb#a|y8s6^a(c8zbLTmV0$ZkCgjQiBAW#RWW1YvuQX2^B
z&>?GlaGNizV=jApwPk}29LTA<)zajD4qP9Viq%Dh)J-w7xb)5cR at B!kKr=@HihhCx
zAc8&KbO?Hs6dzT-lCOsA5a at YPfvM0lFcq4)5F>Lf=9JkYh_KutL~eKPL^30@!sDQ1
zT>cr+QHKO1ciyiu(zgEBb$0U+P&32ud_T&*sfa4*d%W0P<UyTcLlE*gxP}}J#)r6m
zqoht6rpXwl1y67MPH5dvXLvzxUkOqNouk+_DjSTNFG>H){rQsXH=_%v9-*9^oZ3h1
z$o|2Lqa)-tl8OAKCe)+BYdSjM^BmshfOQR66f!o38yM at ndf9Gs^fN7Kw`<qB3mv$x
zOP1tg?i$X^qiea`G;Z9#!;HuW4!5>M0!ckOJ-vY?f9^=J+ilg0jSQFCqK^2grPr+z
zpld%<_&3S9w|uoT5U%&~pz(-PDi&}(9w5`3cd2qgel=UGc93O9>bk}Yv}0OTk_?-P
zq<3C9w+)==;bxzPsREyA6IpVB?Cdbtia!O at svA}9e$-wpXEq7)8;M+d1`f4r{9$wX
znbD`zO60f7B^*ZG%qY{QkL)tO;3JTOjb5Cn{p~Th>JB-pXo?TPH0UyaL|8ID-rK5r
za|>PMd~ZHcDU at tKGC2U_6RpPEk0KRxc|paa&zY#Cd<b+8?XBc6aZZ8bn_Gnk81PTp
z&@Bu2nWj-v at yX_H(}gf`$olB4K%&v;LnI|dvSiCpy?Whwdu$x65E!zq>A!74OdSmC
zb6G{d_rYd^iMjcBggWwt2iYQk5$ov%tc&?(bHLm6+ua~OfF-W-J7M58SQ{4mR^-by
zs%8!5#c0sR55x|HRLq(j>|VjZjnNnG3Uq+hN3bdAO-1|aLD0QWet!PpdHX#Dx4Zkr
zrdW_H{Q!_~$N!M4ET1^GNvGtt73xf3>Q=Ge-zPhD(NUsuu13wi<gJXwSHWGFMC^>x
z<=6b)Z`O07wPxg?H~J-}?rex1*FdMiGU&F<&3~Z*bujzwOC!!O9j&`e3uoU+j}d~K
zO6IGa%4W?rghwhzA%r;2Ou3^&PTwBrQd*W=D`UsOj}ojp`|pW`CSNa5GkA+xnPH+W
z4+QV3_4nxi0;+7D0NkJGO+-C9*Gc7Abj3xXa^RVx1`*~4QsHbS2UIkFP7sXPh_Y^6
zs!uMRs^XTG=Lzefy!_y9K74J+!O?LxX1PmSA2|8_k9mR}`JzJ!<?oJ%BYxp8+XN93
zKo~`UmI%{Ds!4QUX|2x>#A3l0g{pG_RQQ^ZrRTBA;;2D4J@`N`$NHO2-ixQA3{>Ed
zL(zJA8RTZaz4=D&Wpeve6Z6eDMFfakQe}s!EbloYT!kYh+~9qIy1vi!V_{`cI7jCx
ziW at j0Lo{wFcLE|Zw4dbo%gw~PDc(G=tF2>;hf2!Nyui?1Q at 9@+5vp~d1Y2r%B460q
z))xBAp3TE7-RQ%4^N8deM2kk)mGtd0dL~^+0UzRnoM_Gi^X`rW5zP29dhV**^!trV
zZ<zA2U({`Pge-}5Po41vtKQ|e+5n?c5whU(Cl2CwbPm7m$E|tVlDWW4m&wW~)}k}|
z^Iv5^ZuazXR`yH}UrQ=Ir3|WjQG6G}*dZ5*CUd>7d_!iKh`!k3&*Fs at c(XAiguwkb
z8wjGE(f5C;VG6(j;*l#0$<kJ$VXeK15(dAtZ}4FFB1 at n)zCU{VPp`Gff=!jxQEwTb
zkVn9T9nccBeK!w<uH23#);~AJsJIuko!vgCeE#CT^!C_txAk^R4_i%4^(2VW7Qqbb
z=oIP-n}~C1yQjSW8W!V#mT^%t81}CHu5MQZJJ2_zHkVlYy)RJ6pnvn{xUq<pZJx}u
zLuDuOKe^2Sb&xz7KeZ_XH$4b)G2JsEl{xY`DESRr*Qnv6P>E5}+^!&L6qRxs>#2Xt
z?}LX~fvaNw=JCbFQ64Vd4oth+&i^8zSDh^)o=Qw|z&cSS8ouQ;)vb6Ozz`MOGL`Rm
zhE63GC~cy!7QjX4bvrqGdc+VtaedxT8Njoz-j3aK(PBH;M|U(@G?92@@}Fev$uqF(
z0JMG`qME5xg-%%3W!jy|F}`^K+M-SzEHk*2;w75>m8U~y!PNEeX3^=40r=zC;Jg&t
z{HN9C$^CyB@!vc%|0r9B>CP)`0<raDqNA*6-+z*}|20!GVn at jt=x`5fmb5hV=>sPZ
zMp#b0{@-4sC5@#`Ry6jV?$NzuPFDQy$3*?LHkg|Z2?=?H-EzScv^^U3PsVu5{h#mh
z`Lmgm(~~h<{DIeheuY%P?-ZYZ0I9v6p<(yHz<?Dt_5)M{!CKdYMd%&|jR9YhgZTT8
z9~h>o7Z|7^=wXuJu&-HRWB&V>tN;0$4>b1wL{|I1Hw0dQ&fXcjbDcU^V%$L>^3bH$
zNA)?ArGA{`?T`~ArK7okPa<r<+~JaOW0MGHgh!wx{ap+BcL`iTOM2a^e at tm@^m8)!
z63bfm=6?Sx*D*`!Vd<)tmazG6qA&7h*2<6V#@+9gEVJJ$Y4!e@>OAlrF3CO(9M6KA
z+$Ns--L}zzL*w{YEh<m^EQ|_ns5_qIt$$1a5uQSA4!|d(2*c0A+_H!FrJOZf$e7wV
z<PJ8bj+uR^*$B4fUQF#yTfn-uJq$L`XbN9&?o+F&H{$Wc&NDVndj#cG0edBjHGdYy
zXkLh0Cdnv`-{ia$X5|z+ALT(!Pl(v9oQq()X+FCiG;eE1y5(M3TDLDdH$2|F`WCnZ
zj(vdLUqcwveJgu3z31hVwJ*U+n8-|+D1dI6+m7VbOu;=yTmM|p%q4^0omYq3-Urdk
z5AAi?glxOYk;O>dCpMwo*5fkmKloN2B%SJ5Pbs`SVg`tQC24$+PBuUBU$=w0F0gt`
z?-9>6rDc^p6CU%-vHVU<1_pw<BVo64Ki+ at tRE=95xkCC>A6JvYt2Wl at mQB~8b*Xk!
zP`%w43O}cKke|c<Nw--bKPOO#Ce7kvDjEvHp=u$PkvoXlj<+Njv|QMN;s&YNbg7Ol
zJ?oP4Geq-^*l<vJ8_V`MN4aFg!2#Yiq@$v>TlbcOTU&5y{ZrSw?PIFnZ%@2x?KTg3
zzen4~HeW%C?%494P*4~on?H|vf4BeZo1YvFJeK(fEqw_Iuu&<@8yd$~)@t0EroV^;
zkh8?+l;vslL}Cwa?b&w!3|?d-V3%zk8xxB+;*7~DHxXW7&Lz&0(~Ur5Pa*nQb}l6+
zmL;n!axKwoTVc{O9ai;;#AiqQ4?$kqpRMz$@Hl7elvDVYcBYfl)($MoxV(jZR<Mba
zE{G#bS@#|}Yvi#V%(=t|i-aZSlnlB at ncnrW;K>=52oEDIKW}JxJ>MG1i7Jajr!y9J
z>q1&$w;u6c_`>270kqxLG|7fDqq!#GG-7zz!lL#IK#OKHCihhkC517u9~0B?$<e$B
zPt;v`efq6I(BsT!082{j`?!4?<T@<->7Y;4S95|KxHo1^nGCYcvp>b2%6bH%8)u>X
z20}MQw*CxJUwGv5 at R7x=SX(NJ-FduS<X;>ULKR at LEN$+-V2cys4JfE}%UzN?*b3Gm
zN$vIzdMUdJCB3idSe$y7bIF?Bh at z?+VVie(ZBu=2f$v0dYc=|kC`&@lkccq1Cwxs)
z#3yRMoCdjjka(xMdy)5 at vSvFkSrF)M)6Eea#rJWQ-q}IBMMpwqTtKOq$xgh~t+$%)
zy>JM)GwjOZ?_$>^yQ8h-G<-7k7+9~unx5-b3Yys97_*j}OM8spAU!=X7GHGvHpVW<
z3|3tKUNlqOrQr<CClyUKPsUOCV{rJ`r?*N^-Ul6I;RR_Cb#t%!$ca7AfBtjHyh3E5
zhPWqGPDoexrEnfMKZEqjSXb!c*dwLbQwP|NOk-p?!t$R&!Z;5<4qk5a&=;1SkE0CK
z1dCAw(b#K$7Wl~`W7*@kdI<?Wf4xSU_ojEtTSPnqN+J`nV1h9=!EsgBMx37BH(^_G
zbhoozCNt#WaFChSITT8njYU&`j!4NWzrD5JH{J4>KxW9{;5=s7EYMmB^U*b~_ONDw
zg9sXds)&;Tzfkz)<s%OVgvi!cwE-?BCr-Ne#2ZA`91{!qbwV~LWr6Gz3we5{@g$?#
zF&S8NC#3|yPQd(_82C2E6Z_4KM?@KC4r`nfz5p>foa at T$$Ce9c3hDV$7IDPFvFz89
z#f_q}&u7L at mnwdpOCYOaCN@0jbFJ}vNp(Px$wa1kR!%cSJgRYUF7kNW($xaPlG4r8
zNs2w2Hlm2_wuW+uWvC<X_F9r9_>pRRV}0u@|9hsp7mz!0VRl9M87p>Or}Md4#lXeT
zz}IV>oZp(I8CPX97u>T8Q-*wtg0iUyAJHJOy|41z3fURWT*%h6EdD3MpQvT$H4|ms
z1)lf`Z%r~4?0R9JP5cpyEGg*w6rA)qO?FO58$&q@>(s)w?M%?jBHf0l9z;qDU&XRd
z-Qg>_lo+*7a_~v~JM<zb&dNWLj)!Y2eagSuV~tcZo51IP9lW~eXVZ0xB)*q5dqt!O
zW3XQ_g5gIQWRLUFcZICeh_vj;=%Gv$qT^WS_Eb9%C)+>$+7>ku8P!-u>v}jr7p$*2
z{lei^lLD}oE}Y_w5?Nc!|G6OaPJ{sH+Tx06>0v#Y-P?jLagX3+?gTF^zB4NyaPLQv
z3G&HGVS|2<VJJpXHq=}&Sla4K9kbps#O?4{>3J8W;WHDhfm#+3Q->t3kGb^xq?(I2
zCdXM_f2PqiBQ}Q+N!+Q)Cv}^2+7PnfEO$TN`g~0f8~xQeA^9F;fo)dn4lM0HvR#5&
zTQ<(5{fa*yaZH|_G>>R?!uJ)))ss?JYMrWhNyYlrd!@)^&j;(NvBeNc+2vu^$>+iL
zph;1)T4kj%qSo4oz~-qX<=z6^*Iue5du;HAlwQ+IpNxYBvRf at d-L<3YUuNWpOk7l0
zhcw5R`3qozBY^3j8kNYqJ`Y1Vw5Fz}7~O-P_$Qz8S<xW&ML$NIU8E{(@Kr<n>ewBP
znrlZg&}9|PrL|>rQqx9Y3#_x#3uW5!b)UpE;WZsoTB$n5uf2eHT)_#jMEb61URt_V
zTZ<k=?o=6xi at 0uXOpG^-4GeUCOlKR-<_&(*5H*k|a}39_*x%v~*(ImUUV7Slw5b4k
z#qu={$$?Lg2fr4<tj=|Ipst6E&t*ln_z+ET6?uKJd`~C!WP*_8=6)0?%UTVo#^$s)
zOt85x)jvTQ99ht*Vw75+=3utJrDm#W;^g5ADGSNnc0awUn<2Jm1$ZQn%bh*EJ#$J*
z=C-=y!1(X>xDbt&h1~ZDp_lmc&u)oh at 3Imeub=*pUy^A~_SFGum=(;|##2lrb0^ok
z`%}eNyTl*XW<@?BwsDu|kz{QXT9)e>yfF(@rK&ycD+r{r%<oj^b!wQoC?R)|sM;RV
z;<x!b{!3=$U_$E_7fg?UNJZ9Qh9^fK;MYEj2*fpH-{9QY=AAmIKA$o{D-i at 7aoBc(
zV!XkbV%zT%8y9Qt;ejz$ypf8Avr_a!E&n8|o)EDkXFUpVEiTEeE=E#aFW9P_J6i2V
zQ>vR86QcU=U%}{Dhzpig2)GArt;7rLGTKjuo_aM7ONXS9l5tJZ*UU9n-bj?;0+eR8
zQl>~FAyq{vEJ~*th#gm>o#?>&5Ag{eWg}?Q>{M({6(b8vj5Z3##wkIpjaeHE6(Rd#
zn$l!QDZ9P78{IrSYoB);W^Gy61E at iRXQ!go*M#$k$;f&pqCsCL=3wHxhSD~?ko<ze
zdSQQJ?7$bE5nHsgHhHcmf-3aWWv3)(j58)SZdHayeL?IAY^-#p8*^)Xv->Fp!(Pjr
zkN=JnkIm0bs-P=w*46?h!0|+=V1yqW!z;RfD+eYpo-k>bA=pxJh2f}M?wD{kK^7O)
zH7C=fh@>cFQ8e}(ywmc5msmhS)Aw25jrH%jn0dtM7*o@?HC(_hn{v-21xxm at vmETZ
z&h4RO#*}TA&ZF1gdBn$k1HgE(>*ST^@||b0{!dg1H!`GdwprT+!<92;Y~N%kE%46#
zZK>9`LStR*x2J%^1irnj@}%AqsFXDcg_ls%55$j1RXRoygy|mB=2X7sJ8Vw&TRK>E
zh~k{j#)XG94%%lmA$gd2TNJ#RVnkEL%fZS>;3kQ}9>$Ju)PlQSC+um4pF3mvLN3dc
zFcGpvTkA2UZYiwb-+8eBviOx~EFh1&wQ_FmuuFIz%cNsm?43xR?ES<Q7VorE!%5~@
zcEfPoK8X`u>hrZ49Zy?*TiELxWlwDt_+$yiDdXW+cV1HVMAWs1g3@@%KgjRR6rg5G
zG{jvK(^?o)<*a`Ci}yJhd|{@!4`&{Ojzui2K#FCtUDxu3S?i9q?FM5P)kJ>hKqqDu
zn at NNXhT#}PFs8+<$+}0I0dx{p4!Rk~v1GX8Zs_bgBC4O+z6z#!BXM`{3#Ml=EOK>`
z{aTOnGXv{lIcJ4war$k~b@*ao<iJ$nm%&f at 4zy1v@(s@{0`+?_E#+or9e}vH<b77s
zg|3?fy8tfM${o`5uIP1+H?tmtY@?6sbJbbMHur65I+#xTehzWvj<G6jXLxxiQ(KlY
z!{Uhy)k8zRQrKPFyrz52t$VW#r|>#)7zJ}bs(XOi((AmSRmQG|ySKFX at IjCuY9r7|
zINV?X`O5 at a-m%2)o|C!k9JM8rks~7@{oHnUWM0g4*0aI9&glc^{O)2&Jm_Ar at Ve90
zB63-+z^FSuC#RnV=UQt*uMf8RZpO`qGdqSy7oA<6E=hGv>lG|sfS=>Yad)CDK6_O_
zozV+v^~*0_B8yFxUBj`*&*E#Y;%t0JlMDdZc?!}JT38R*{4XgV<IP2b98bF2J{h}Q
z)WFHvH&<Gc8F!9o^+UJ3b^2O&MkxDAGpNqa=h)D*s|Q5PlldiasNAdAJ8`m|@1vHr
zg0|-kY- at FEwq=ISbwbHj!hXfoc~x!Q-=t&-eylL%o3y%ebi;nyN?`@tgBq~S`OrU|
z=u!#@K at F&R?EWlio3w`%e)%5k_UWjSz2C~=MNv05w at h+6@x;Mh{n(FrF0C_$@|UL)
zO$2QgmglF%IfVE&hw1?Qch;jh#65c68QUb at In7dzQAtRymBQ+Ls7)f2tc~{FZ&W_N
zsyHh?H)?L$aX~~p?LeQ8ar-G0?ux~F;*iJrI&h!BGFyW)sw#?;lZRaj#eldEQ2Q>~
z-Y9px`vzRIuY_YCfKY`fD3P$7`dK?HqBEV^jjHC=F$tLOB9`m6$U@^t*GhCyDjT!w
z-^CENZ3m3o`u8%=>dm+e_bz?pD{FwA1lYkTd8dR~uLEGVEj+{#R~r&n-ofDXcm-z8
zLAsvKw87Q?d*{}!<Ut-!y;j0pEs?>Gmihh0^G8%V!^WHb^*6lvPhK`VVu2!l&$02D
zQk35yF<FMh#6(Z7L9rI2_OW}<)PeH6>UOJrRpcs(vkEJrdZ{<7w#=BnC~t&P%~3Yt
z=v2Es?l+ at -B`3b1GtFMLZJzd}G!CHyVo|Ew>ziv?eJGEpA$gF+<Jv>N;xV7gk8TeI
zeDD8Z`^H=W1$usl?ABRr9bF&$c!pCRWQMKrzj2553h{N9D(A%9S7jSVse>(HEKyDM
zXCOtzHD>=mQ1$*l>jMuL`Ts$N_<z0(OpgXPSd93c at 63~LZ}9u0#}9p5(>|Zke6+ at f
zeaXi?LF?TA_S&AbdI`H7JWb1eDYqj_DURtrG8n0lfs*6ahkrtMZ*aGcd=lEWVBe%P
z&WE*{NZ4ar4D=C|E-D*pHI>fS1;`3X%Ug~S+DRO2%s~3-ChwOE8U?(Rk5?`V{h~_j
zGWL{~K_&^oF<uHW`U=%urf0(VF%9rOdOeZ5LHh?|1U&4?l$M62?bb<D`>L}CG4^-U
z;uL;5VkAzXKS3e;@)D*-!vprxUXF(GPgROl<VfQ14S>J=HfN@{Yuq5V3NqoieLHcZ
z$b2|UKOG*@?p^ZW1Bm~Afrm0<Ct`_vdUAu)cpE-sK>o#QLO?(QJ(=}7 at oE*Zg_}CF
zp8N}(_`$6j#jQ`txbb~B(LD)lKv+KuITm&>uGkehI0T_y at fFVfwuI@s5~H;-X+h+C
z;FF?emW`v{hlJtyI_{-m{YX2ljgF!(d0I_)hi~y}Ypnc*0#?j*&!&YacIlMYkZkQs
zCN5t`zLQG}wciTUjw&Cm((E5oMj(CoGZQlGAsqK}m4jZP>&ujlo70cid3TOJOHUZn
zyu2(l;yPZ=GcwhZ2cSRKDjUpSv84(pH;{~%(sG^oJl<P_ei>c|SE#J_qb|?}P=?O<
z&EO}Jqa16mOr}d!F2<P%MfO}zF3m>fF>>st9YxSHc_W#T%|DRqMIo=)5si+Fala4c
zkCYY;pAluIA9!yj95;<}Y9pByHcrfpSDG&>;9~lc3|e>HG<M<dT at _IFo>e(_+&qk4
z-`t)5=b~lPIVKj6am!}QFFMJee?1#(Ga=AY7*O7MA&j2WXWf0Mky}b3;qqcuB$~A$
z1GEg&UmejSc3|-r)pU1FblPr>L=t%d=4yO^Lb1O9jutQjFLYDta^-j;b4Gf<xc at 2K
zr3DS_ at xARpX`4La5C&^NcPT)3N%;kQ%qG-OOdzLZVU3mg)s4}E4Q}MxA(vyI>;~g4
zkBL4)!rx{F0=OD@#NP4=rIff_1d>}He at MliXh7YdHhGcmx+m}Xy-RNO*V;0S#`!DC
z(As+JJQVT1oGIW#s%=(It}1!9Ltj(Kl8XCRVJFe&*v!WJu%O3Fov2HrOr&9hn^Edq
za1||Z!R=+&jVxC$3Q<1$nxPQXWP-gKW@;*)=`)CE$}Q2SSVz>keE}4Iq7SjvixK#g
zJ+yL=UUid}3{)Du8WUD^n1{vo+T^u4^N6z7R)ERwZtmFZU839EShU->Mz4YCU2loo
zBmEAKW at H8X2-P^6Rp><TTGCcn)0$?FMLe>?4tJLX{%d~vM*-3A)14l0H`_l-oFy$o
zl?B(A+aA-yZhH*i<FYH`>ylivX{OGnEUHB(Vmm^8r`g#+MOj^4_sN+O{9VLZU+arB
zwlJAJ6I{JQ8V>^@TrJ2?A0cpG|JUSI4C01Q!FbOYx=0m5F#<I|(0$0v?@+~sjt7Sy
z<D9#ckWf#-N5jt-F6<8l>E-$2aeYF2DP)0MG0e@{!W}KCwaPkG$+2#h;{c{Wz0<=d
z;uZs%IyAZ%{l8Xg_QrEv#$Q=vcK;N}4|W)x;4F=gMQqV|lv(q&vT=;(^!T)ZxFM+w
zEjs6dB)GOWz&OaC?*M+ac8qv!@K9A;`Brfc{Vm0M!1X7 at 4&QdnojBD!(FkSJ+{OyD
zqzPv&ttkrVBPhBdQIBTSupo_sO09<KD=?fS|D)&h7I!5_0om$lll(v}jUGd*3)qWb
zR??Lkd+tXFUYW1WG?-?C*~X;(5H=yi8!(a6_tboCq!l*9)GfmMP(j{J#?=)vqdKjf
zYYymb>UCc``}2aP7S4Yvn=cf*Q at vwjer05pmgj`L!qe5DA+y$K6c}6^G`&^O{{<<Q
zFUhXZ{)xB at W~AbtJu#3~BbGdk_gNMthah0QbBYNdJMp|dno$HF=l~^}f*Hts?fV#b
zFN$DxyM%JuYeU2J2wWt&3HAsi7o#d07B93`;EA<?c<_&cy;7_VpTL<{{O`=GBLoDg
zVM=nvNQu8}K+(#<TyE22FVko^xVyeOo1^vjyDDZo31s3rNlx{nNzL>#G;JlCi2|GF
zDbk)P+8M>W>`*KQCUhs)`d10$A6P>rPI<9`lIxn4fR}CQgk33%TkeXo#0KrGt24=A
z)x|7`v}Hk-H5N_z4~=Rw37k}-nVP&_kh7{Blov6%7Gr&qZiJUzDv8#KB{#+>IJLGJ
zbiV0nCOdohx-AuC at uSf@4o*y^V~;p}9P#K4PtV&0Ii~j4G?6- at 9=>`3DReUbFk?q0
zRoF`Nm<+V}@!rS?VZkqu_!|fOBa?ID0(^Q%N`{6NqePMt+BlC;abId5KQ??OpZOt@
z2t&T_HOs)Gy?9 at 6+Yz{hsJebp-{w^YVShKD{D?k1J_ at JP0(()PjnY~f5wP=4VzZGd
zs+hL^H?J~MOt)n+wLq^rBuc+P54+q^p)%M}sgwLH$iU!drG2$Z5MRqduWks8sZ)R~
zIF~-A4*S&4b|U5H>*loQ%rCMD at zN%zf=-wrq~llaf~bYGwTZKX%q-)90T|XVBsW>p
zN}mGh-CScMUMxNM_#gRiUgc;I`()j*gf3HLNi$^0B8W>g!*ohm;isN?M>B;Lh9pp;
zaoDQBtZzOpcUvkRy_^+b+vCU(=fe{2(dp0W#8l%>dL&K$=xf;6%<qRar6?>b&RqHz
z3O=3$|1(a4CWuaN0fuRO{lKgEgU=LToufzH{}oG-k}O*~@jDPx!e5bv$tUHN3Nql5
z!<bxa!|wXltHW-4!XK%y^n8!ddWI#yAeF*wB0*ABYf#Vlej3+{R2C~Y>WR>fw*7Vv
zw926nhD{*uI*p)U&mQ*J9ytKqJLW{Z at z`}tzv^v=z_zwsU50+M7}-JtSZk~|V_N-K
z06)T@?kJLg($ucWl7?q7n-#<QdMM-DGzVh=!uOwa3JITUWPj%Oe=u0K02 at Q+sV13`
zIk(kY8uKD{xMd(m=<>C`2o^mKr`kC3jk^mam5i_RKgMw=AmTh7ziK+VD22hw;zlvI
z8~{#J=oqTuD9=rei1s~F_QC}FVs&OEfs$AH)zDL9HE|ZLJn(s7iPAYM2Z-567g|px
z_=iUaRwSem3 at D(h^LWokn~k|Z7DMoN!*^u5MluiHw#Qx+&%-vjCo(03ze;>l at K6fF
z{-|o9Am(#e32H!u9Yg9|9x-X*k7#axVUjNxmv2zZ)VdSEU99C&zNFPUv&p+Ie_W&Z
zE>hQV!#w%trYZnxf<oPdA9;RlpM1JD+*NbvIjH+qoTNfmHi6|n@(bE)gMsnuz4VMg
zg_LQDBI))CN|*(~J9GUlL2}27=IoxSsLd?V>--nd0aJgrhaW%~`QI|&CbcL+9Ujy6
za)Y0A5<AzmOa(QO*99x5SkXA$JDmp~t+WO11EQ6&u0-8t- at q~S(oedC<}J1S1K*2|
z@>`ffCkt-a_~RwNN8B$hQZVs8mNq92nBV%*uV`eXWvs2NJxTibIckW687<QlB5q`~
zS(=0-BEkLVW7OuFn$?Wvnr@%MoO}N}zfa2d2pvQSIKYMGK|`t_h2etE;~S%bSD6K6
z at vcGpWwDc<&A$A#vxi3q)^J$s#POxp_^C;bWf9-W<ldR5zrXSSm?>*H|Nr8?H(&E}
zcXD5gcotTBJ#@eP>rAuX><srg8yJ8<z=r{NA{|3R0+RxW%OcFc2&5EdFmQml2U#3I
q6o(pcQv(Bog8|SnK+rUTwaQ=85{x^2^X6VqKzO?PxvX<aXaWGiXHJs<

literal 0
HcmV?d00001

diff --git a/documentation/mega-manual/figures/bash-oecore.png b/documentation/mega-manual/figures/bash-oecore.png
new file mode 100644
index 0000000000000000000000000000000000000000..801a5d911f6ae43cd90e5f33eb7e1d98f5ae8aa0
GIT binary patch
literal 138198
zcmeFZWmMGB`ZhcW0xAM32nZ5NN`rKXlt_bggLIel4BaJ-bVx{dGjxYY3 at I_f&^^>J
zGtc;sbIx<l^Zotut~G1zVdl5@?7a7VU-xwpsj4jZ_~DC(007{z{0C`u0N_66EjAxM
zE~elNHkbhbXaVxllApY?4*U_ul#pzGkQ#7d*TQq(=xLMkui{XLW&x4a!)3umqs at -p
zrc=MV$L?!7t1rxk1iw&`JmmjE+hiZiO&3PKY+~>BfCryAJ at W}JeaKJ$qUjGoFyzK~
zjI1ZlrrDjpcrGkBUC3?Hd(zXg-}^cz<DPX*TiXxREbw>PuqQ}fVt2~QKlAY~mD`lu
zqTCC+=EIO%eoD+cRtd~^5Xa>Qa0mVm61&>KMBuOL)h4ZLzpjq?=9Ii^rw;Ia$}-wo
z>`285PRQBf(y}#@^5r{BOPGpGNK6w+z<>P%#Uu$f1Bh4N^3Gko-QgVm9^^-~V~NMM
zhP7maeEpx#|4(IO1!M*fAQu;@;(PaK{!Qu!`lpf7ufG0Ias6366YGQDtxio{U68wh
zp`j+oR-$A%cewv-ac}C2UlYncStH)^=e6#>MmgFh{y%#L+K00u3a3kNH4s9pC_i3(
z-$=x>j7m@|HCXc&LWy22K+DI2I3O)%fTN;)v<(>T at EsLo@Mgstk6$F9b-wx_TKbh2
zf)oAdh|>3T)Cqkuy9-)^{^u;L`5>pQNeY;IZ5z#ed|qg1X!NuHxwv>+p~Wh#rf5U|
zJ(^~~!AdpKn3?2bly2L;S|(P at Dg-?PL at yH}DR=?7&wc#GoqaEZmXj6%|1t at igJtO-
z_%j~|(UvAH802`TIQ>}yb|Kp5Znd?w>G1E_^Xuz9OV~_BU!I4;`#CjmX<e at BO?Wko
z+$x<4S-`EAD)~eEN;Uv-_S at Xc>;HSr{;ol at 7Kr|7VBbc-+Oc+QQmm^5gE%&$ewgAW
zDs~>cYETUXuMvg!1v(36 at u5hXv!4lAfS-at&?mxgwF$ZpyHL58h_x at foWt(#s<2D9
zVz#)IffrX5_fUGkd(dY|`10zB0Qp2>0^AMw&H5K#TAX_c^eiP<G19N_L*L`$%HRhD
zyrTt35^sug3Z-gdpFqIg&jR1QvuL}O;l`mO4j9`Cn_{A6j=~S`6UtU?%?Y3sGj$Wo
z7kCQ#*Uk4on at PpP4>J~ec^w^{1yzvi+<B2({e at hi8XFs1>G`7jq1wt9trhhF6}x-I
zwgPDc at 7mCZ;>i1p(iL*+0}9#}Qitu<t-o_Fy}-2V<!eB!6 at jbG5;V$orRy}(#&7?|
z%n!LpcADZOM&vkU<aa2-xk-sW!%n6VN%`Ew at JrCTw;FV1e7$`>a9slHimwL2e6N?9
zjXx+10RD8<3OKgUHKl*L>XASSpvq1d{?-p#t|v3TnLocC!aVPE#2&QT)o^s`_bYw>
zLHqKD|2Sw<hTz1a)9X{H14R0>-`zF$`+Q=|Q5kf_tjkE_ph_lII_oa#>d*dK0#<sQ
zIGASbI*sP<Z*U^7EkfR_kGeL((>`Gz&S$qr$QBYy(fRppi*~)q1nyoB=AvRob~B2E
zrSgdhkvE2ZTbUX0#;lFF>xC4Lfbb<s7X+Fv|4smmkfM_KzINFyTc`%#jF*1plH1&F
z{GZ04L>praCMPF<_$v+cqnP%Vt#1tC*Q}APuB`B>$w^DT1ZGDOPREani;KDu1?jcF
zt=-LW*OjfBT8_U|$$%uqRYci|I?t<YqhjO46o0JQ8h*M$-+)lX)SeBS4Q>8Yp3x^q
zU$3~itb2bYV#7EMdai&Mb!})*r?Wk!H%}wqk;qV8BWY%lYd&4%G(bPxt2SS532=Z3
zS9+oXp`87L6DKr4jf5`hRZvf!UNbFD%`pV5F^2rJh0XQWAb5Fy0Qnn8<&CEAx;!MC
zW9!w=_B;ogI`Ip%gZ^W%z+W_k;h2`#o=3OYb3ctN&F$N8UV*v8typvSQTF4FD8DOD
zUbsG6Dm^xfrY}kJVKrw8kO7#n6f6De2Uhy-?YO%iM-gIea>lqOBL##W8m~YMS%Jgf
z(ULbG57#FB$lw<<m&ELB2&_*VJdg at Sxos%eIK4x|FVUq#U5IA$z00X($H68VZ_otN
z-B;9w6H8umTY{+Tdul66#&?t_h<1H{?S{HV%=Z*-1;(QzUYKA1r=8tYHZS;^9G6I6
zCZVCGZ^@1^_{*n at qfYLiD&(pn(vJJT7waL!9Pl(({P|}Q$%ap(#Uk8|7O%eIa~RpE
zE7fN<AD1G?$PO3IS6^X_*ya_;OJ8g|Weu73O%gJ*oI9Iywg@|iE>EFZ$Ih1Z3Bbnh
z1gT_CIZ;G^`*d&x4EfG5^bL_Y0U!u{e=WDTfS8Pycu!0GLEm^F+^4b1M at niGRqfgF
zEPkqCjqg_IqZc&;1H&648V)Jl#f=sR1_se<Xl`HogVU*b^u#PU2Zg!M{>?}W7=r}I
zV~TcnZ6XRHRGE_#N5w5dQ@<>KaV|uTz^^N3tNUMRh^C~utFL at fUTHXegd1#At;vwu
zN*>^jUiQCz<SIl<`Ah_3#cHm?C9s>VIDx40weDjw;z;Qe82U=!=Ei$%V78DVq|X#5
zSaMF#_h^8|inQfe8~k-lf~aIHc318>{JI%+hjx9aQ-GDOQ?+jt-v&Nd7>R+ii)8Pe
z<6R+h*DMKk3Ya3M6bWN=k=_q#zAT?vO9&sYN;x at k7S@u*mMHX`mrR%0?;pw>clx$K
zBqF;R`z4kiuurbuGj_$A6wO|z?8LHfL>VBGI at W@B^XbwR88I({k=*dGuuXARgn3qw
zmG%zkY?G!&sqf-lWFL0=AdFUA=HKrJ?&%L7t&-_qu(a~5VZ4N94X_!l#aKmQ%V9+e
z!yxA}{0ASP`SO;G+v-Sa4O?UMW<NOJMR1 at 5ifYcjLI=U43|aBQ!Zgnh7UacxH at Gf`
zIq`2U9}WDq`{8{jKK{0?G{{Ye?!K5y+sE^mo>Rf3s-xbmtlJ&ecJnE~-9)B5!cL;K
z^yv5yl+f5^JiPq}(uFh|bd_7$KKUhQ?zLN3+Y#?e|LsopTgJBQ$@d9jzU2Z|R-Lc8
zeYJBJF-AC30^RM89m+}UcMzNR;%GRqrp{v+!d-q8KVXb at L)<n#_fh=G;y)S5z~x;B
z0l&5A4aTz+9JoGIj;0_Qe;)B5_wR0VVt3aY_u_Ii2S+QX)1;d``;|gw%AINA617Z|
z_Lc;8R1`CGnp)N|3r_X2pc%U3;RyR5|AmM2wT-Rqn?tuH4K)&(>k7*i)F!_y>`tCB
zVs0h4UCK>pF2fF?<woRq71zrdwbx{@SM$x+dF(m at c~oBj(;}m8{granvodqPevS;H
zCH%}<45?PyZ^n+h?z8!v0N0fAaDc4Y*Hq!4c`EAna`Uu#lcU~B1GMR at OH|=hRF1xw
z*TGmN(r=JG?K-s2bPlkxXJ?ddJ0h&YKE}`aG at C1vx+v?M>tRhg at 8O!TqdP~3ZVWF#
zplx1^G`JvwEDAK4y4`j1I{779)o2 at GNI(=ns4NXO=36wnZ8o-aKy!wV&7H;5Ol<_R
zSiaq}o7|cmlE&szLw^sm+e2-qHdVkoRqq}NC7sGqjAeH^4JgpWZouZC`!CQ2WAVl_
zft;PVDoeLP#5hEEK+ycHv}C{#G*FJ1$Cg9}D~Ps8^fWXQ_rwo7<gJemC8~jJLUu~K
zr1d_-qT_qmaT#*iewzwpO0s3gbLVb-#Mfib-)C=+JGIZ1)eDHRlMoEnI6JjE8ln^|
z)c)9g&gO>k|7yDw5%UG0i)YlLpq!V-6z?BQL4!sziaYSMy{PX(zp_)J4Qy^U``(@k
z#fdPw8KiCx_YD!(4}e~te&mbGEXy4 at N#e`KrdTF}Ip<dp7%O`7SAsKNqWzlxX=x-z
zZW&lC>F?jen(J2;$GaEUGNo78H;up&jKkKx#-g?x#l44hLCuac)QPwMVqak;clguc
z6;KsFPUK-Gb5%Kt`Xyf6j48(R*=dP>AJ;eC-juv0GaX1INVqcn+XF6;hGM}@Ow3D~
zYN?%4C}rF3cA+AiC5Iw9XG7n|No`EGXFeBTKi35Bv^<J~=Iz%xmWr#ncRQDohl_Jd
z8o<08sj;2+t3X)BRPhs_j|vJ<7AJH~U*Zj_L_VNww~^@zQcQ1<Y-0WR0cU0zh}~`D
zumw$KUli0&NUy#KL7Na8r=$&_g6)esZ{|f at EP{JzQ8%q=-G__OPN*>=sPgZAAB+zX
z1-zs=u%KK+QHxS at ic%AGow3gk+Et^U<f}3}fSw|b-CKDq0da9E0f?}bV<`p-czmo%
zsYmDOkVJ{S${bsmiO)fxHonDyanq at x-AyD8HkTHVqEp-MsbVD0TR4NrNx?+SqY}cQ
zG<Kml{v^Jt$`Ri*wNw*#Dsc}A=p+|Cn*M^J_7HPNtlvPne06fOG_LX`vJx0PP>dCl
ztw6L?)|+Ybk0hrH3%LG^rYCnUF<$fHMnPLziBAee3`5)MHRW|Z!a0j3Z^u3TTsb%u
z^M1S?c>MN0v>{c?^!>0Owu^WRF{?4kJIiK#ve4420rn~EoV`XFNjD`r4s|1DkmnPj
zl+CsoebiC~&9@^ryt;OrN2;($04qgH6epnUL=XdzUx(i2W<ELkx3dm!TowCtbw5|b
z^tpr};maxLXiJR^1Y$V^DoOiiwAHK*VkS{nivH^|o5*92S`EzpbbN*rND&|_#tRT4
z#Isd&*@{USSbqqwVWP^M^pdZT&_ at K(c9&W?2tFIFNC7T0A6>@vk`cUGKNtkY_2G%l
z7x8C|KzlRH2nT2`idJ%efb_NtK<v2c%p_5~0En=oefvwROE=ephtpg~v4?3xrl1$u
zHxc?A(8So$S~j;+4p|3O#VzlZ69wM@)k6s`#uVLhAOoWw4gDOvlsrJ+7df>aBdT3y
zeGsxpr2yp0jO9wMFG^|eyK>n$!^WAJ<BTbIpK(rwzK04yiP{TuOhvxo+FSgMSPS_=
z*c5z(zQ6mhq`;Mj#csNBx$blbVXPL*jd8$NTIMo7ZJ&IF?xCKQT-fZ_u`kUvA3pE8
zc!qNi>qBA)vieS03}{W?`6OW&W0y2Djyq0XH^!KI3ss_wyUyD5Ft_j3H$)97m5R+g
zTcOMsDCKc%-`1mUSo%=sAd%*?_pxB77z>INt$fc>Tw_{5T3^s*z3_=>{N&KVqrN5I
z9K)3`WgUBtYd?;06?nmqWV|WR!}dP|E3+huhgLo3nq10CJ at z?43duF1t|>_EydM-$
zezJR5WW_O+<H;g^6kp_n{#Y at FRmHF`SMoIU3OY*Bcg)v%#eAdh`%a}%Uaq5SDB~+r
zN8z^E(2;)*awG4K5jwpA+U0rU2FAc|7eUr<mbfh{u&2&j&IL<t=W^uArdYQ8Sn-T+
zx%H~%OEXd}O2h{uva^{`Bbm&sEK<uwa$<w%mS+|WKB5;2>8&2r7FI_!ZOFo(HU!;y
zb0Oy?qkpcc21^7)T-3|~94fz)Vokl}uWmAH at C5jOQ^umN8>6xa-Wfqcw)p0<g^gIM
z5g{%yg`lT=7U3>?civfvY5i$b;&IQR=9mTO?lq+16p8N{0cNp6d(sR;MM#4D|1c`s
z47P3CR{Mze52z;U=vuV;kGL2dW=~)A1phAQ6J$fXtvfHWtWed~pGzaHq#lf3IGlWt
zjA`(X;%T)X+2Aqg5@;=hEKjzhnp6Mbi-W}Bthnoc{(RO;V$60aBoC<W(!-Bq?YEjS
z@>s+6 at 4ymV_J4vG{ctO$2m89zBP4 at CKqaqchuyE0x%>F4Phuu6SSIu*U;4%s;t9Uj
z^yP0Xl1>k`N(DX&IHHG?`n{6HgNGKcUC}*PKgIS#*N(&8PF`J-9`)S>%D at F-Uf7qU
zU7<iLfMqZtLg9re5e{veuiCiFbshv)l6XD43wyQ4zfN8&rZB8rP;Wf{I{0@{Z92`(
zQvs*nJ=r279p2}J)EqvEai<96-juYmvN9vZhsaZ+(D%eRbg-7%+Inb(J>a=3Rm<i_
zwqbKhceshfQ2zDjTzh+Vs8%fDKxl>EbYNc#?_ucLe7I*+l=Eh>%)Dt|sOM$=PUU&c
z4H6&cp3Y8{q}qo5PBYVsfan&TIwCv|rjy_LwcNn{eyf at hD39~T%L8AS=#igR<g2*8
zNW?il8$rQYCAMwF)kv-7;1(^a4XtTF)lkp>98dLT9&7H8=(SPs4>e*O#Z{r|ocPdC
zgqphBBV{XzkC$Ziw~wOL4E&hOjx#ok4-`njpJrbK=zAdJ4a9Q%k2HSA1d7lEb9N at W
zI<m+=r3ViJ{&?&(+FeO#Daqz=4wZ&GG)v5mYhFK1&b}ofN?Yv8m^^2mF&^k_I<H0Y
zvAb at 5rSY6fkzC`am^sdsRvOt at xSQjREWd^B88rVnacPKMpp(yljVzC35p>%#Nxy2e
z5N<mv8(eTga}ueMBq`^aaFO#ab+wXJ8m}n+aPk=p0&(00w#8ictS7V?w-dCSAS8Nr
z7Q9A*%l6SVoI<l}jS2yv)AF?<(QUtMN%nInvf9KENT*!L9K|dFRA;ZpgajHi^R4rb
znA1)TrtW9#(fj$S5an<Vbb3EvonF9xUC3IV4)%O5It9&1$$0Pu%Cvs-P*J`-LY728
zC}=0 at k%wq}G$S4+q?fJQ>DGpuc`!sd>wL+2tyXcX$h_s<pjc<&C+YpbSrusgo#b0+
z4opqY3P)?PHj$o=D)Ju3Yj at FjjqLh_JE&`_5sQz*Q!VX+h~c<PJ;x81zt35mgst?B
zdKQ*beRLgk6 at Cq59(!#W<oY^ePXWfcWG{`9PegwlalCpJ%UutzW4RH17`iFWbg6CU
zmF?gt=X<VubM->>VaPfK7&iyzBEw&Z>8B`EyZc-?edXh-w$7?JFK^ZOSVB<JnJYwn
zw(*PY-j>>LldwOaVS?9&q<SJE(>en@$ArfI>F||>3Iq*h^DM5(UWF3%_Y$YqEve@=
zwQ{lAg2{A7iOB<i7<LwjCSO5)Jw=Ja;xRjs*hzY|&8=b7Oqin}^_!_PW;t^^5rPuk
zCL8$)L!7y$#k3ZuI!%85@}Db9F>kW%tK!+D66r5;MJk&7tLrr#5Zfl4lUka2$*}zL
z()UtB%-dUb>F|2elC3s9CV%f(7jY<f_3EF95{PM+C^Q{QP+XiacPedu;e&-c7xsxJ
z0UN<O at lfEhcBHpAI5E4K8DEE5a4IH!Q|f2#G&G^(?xG**Er at 4_amjwS^F9Kv#qaXJ
zWc6Kt#`fqQ&J;eOD^=8+c4!P)D%SOnZ-F{Ls-?2KKA}2sUQ=U58w2~7c8ydYQ~9DF
zI2&*uu|0H6-F(0{I;dTng~jZJ>#WKjhw|A at EH+A|AX|&K_;d`NMV5J8Pj(15iRW at 2
zx&5epNkcPbOUp8*;TB7|fBtF=;MYiP?myn|kL>006Q{ZNB^9fbJUg3oJa5_f3~O=+
z{U*~1k9&to?!i!??>?^=4p#5x%LAC8^9pc9_p|wGF)Pl{E?0_4`h(tAZ&C>Qdj*^a
zO}a;<2F6X;z$0e*-n9H-p?E*JE&>{dT)d#A)K=nx^v4nrSm88SRsvCTIuaquk+~=W
zapu*jn6AFc6a3oqAXYzYD-J{TWpUMWii_{zs%-nrVtV27&7cXFF$Q2_G6uuS-CqkX
zK3n+MU{p_G$%mMV at x|qr6ZS_c_?^<lpIuUX*xftNP at 6n2<$4Q!J5|_Wp}u-d(MpiR
zDdX0TC0cEco3|R#CrV`G`JysA+nO)S(k)`_bppM7{rhr~uuJ8JdCg&Y)uaS^qN<cL
z=1!g$kghnG%Ronr>Tvia^kAVr_Hf7EDH*2jGmZm=nTYJ7j1#JA{X9>Q8Yw at 7_<3%*
z4o at E|v0vZTuW5{Rp^VY78Z?k~gH9}TA*<Ymf`r;tr|%yf15k$%&2Q8gdXVQaxRuQ5
zj6v{bdhK*$h|lZFX-M^A2HmaQ1s6q~ujhUWo;<!PS4cwdE*?WWp(Sc46wBSknsMK%
zZ)XDi14*?{YewT3|N0oY&*^;abX<7!9{Y{>9l28nJg)6HH^=uu-|Ir%A-j6C$%oH%
zx=`8ZI5``rV8O<pvyD=+*zcn5O5=jHM0|M#RWut#ZAfe8Ef<&BNLA*LY226BXHy#=
z4suDlJL^ka%twP&nQ^WJc>$|uKy)9YC0AJC$ZZjR at wc&_G=nfX{x?5_VNV`c8%mf1
zvT4$a-<t8%Q!!o*a{TNVTFc#|2sk at Osav84a<Byd$gjoMrb6qcDP@^SWI={3UMO>n
z0r^8|VT;XG3yRvX;A*XT8vE*nVc^(jz|?tZt4R5afXCZ9Ul^7L9T!|+<%58%)*EiG
z9J#{9 at RXEmpE1gD{MJRXzTNq740`$3H*#9FnO)5p-8C4wdMx}Kz$Rl}@?@KUB5V7r
zDF*PkxFRx}fB8Wl#Ac+f-jP`4J0ZwulK at s#n7X`I&Ke=BUGsw63bs(DuagKJ&~E6x
zZ{ooa&;(^00E*T`rKB)xX%%wK?{=Rv?C8!mv4bR2=X(M*r3=+6dP8Mj5_MHP7GHCA
zT^6^z&24q+8{H!q^`@TCpsSF6&1GzAJU^iU)Y6^}YKxlL$vNNhl2~ZFh9PgKYX6B!
zVT=r!%o7Z(FZ)Yx_X<(_xdLa1v=GAC>$5NBOcgF+NFJx3)6UEW?ZqNA*f8cU?D}j<
zNJHYbewiK4%N3^{CzXHn{0=DLxEp0*4tq at Ch2tfg?tLA(NDAqirx#x0uI}nEJ-SrG
zwB`AYruVmT*^7Wt7kho~wnMB7?dO5475xPr7n<A&<78|1hFk=_oz(p2m;Hv+<^YOs
zL+(vVCO<FcM at Pj211%(nZR|<0<>hDPNvGh0vGB#PZ%C>ZGcki6+A8YJZWoyracFpr
zpD{nccXkQ^@2pL;Ry4YgY4c(c=ZKmecj#qrI>u%Ve1ZyQwSe&@(}R?&m|QwOVJG at x
z%Qm|zUz-Z{2SN$+)+kiX^?hu}drXL-kJ%XI!0BoTv-Yv^v0xb9=H`_uhaDGUwoc0G
zH(-bqirVDip#EUL+;i)Ov9S03?aQu)u<>z&UHqpQfI+nVonnHdq}a~oRp at Set9jVb
zxgX0?IJn;>M{ekS*exmc$t|<&H;?t3a~=Fp;)nNtmce?`n$0$*Jx)3ZEmiQ3!j<f)
zkM&cG1Kx0f3VUKynfWE`nm_17%GTDs%4<!Qv*}}|9|^WQd&sL9|Ak|VvM*dT{)aN9
z)|Sw&ft~kz9)&&WjKdC0>^$&ToEU#y=4OB#ZE*b*M{-yPHHH`Lg#ibL*eT}E{$?7s
zj&p-(MOGs3t{{Y)`%^%P!_$?V&V~ABe4|{IIaL%Ye9sNla0kgnf9#C#6PNh?N1=OU
zidS)fEE*J;+H~3BhXu=wWXk_zMW%{?zWe6&G2Na64|Mn3FQ2&gD``cQH1UP62}m?}
zq}G(&SHwjZq{Hu;UduGzAZ7UNMwcm!$!g=WR!2r#OLJ!OHD$m at 5TpKR&pA!6XnVk-
zT>Qz0zQx7+=}w<&&cu1${a9{SH#}m3DIudtO7)j6nH|Y1gNl(Pxa*}>c4)xZ$2G4}
zj4RB?t5D8$q~a+iA*=MD{Xs6+hg7 at TXn?|7l!N?G9;UWU(CvESM at k+3R-m?<{*4!P
z8|yYbHW$gm9!|;tOBEmJs9z<ODCh<6l8+Q`#cy2R_mYn$ZR=jD%=twj`uHoPp;Kv<
zC~OH!Kx)C<=fOrIg}R}Sma#6}N}ct)&^d6r->Mxi%Zy(>f1I~DT)~v!#mAmBqn-|`
z>cMbe2*ZQ?1j^ifujCi9#Hnwu5EQAqo&$e=Hn1Ceeix<!fe9=uEWFVE-YoBSWpoC=
z>8!dq$N>PXPvp<n_){&|M2{k3r#7x!j?T!^4Ia`ZZqiWPM8ULFy7 at Ez5tE?5>}kgo
zg%i>A?!&7xfEeU##wRrhA18~eqbH^)Gy2{*A11cY>ZPtJbfwW(_g?Q7KUi)i!Xq4B
zGz>j9<tKgz at jVEoJ4bnUV2+aeHo>JE)nvRcH}Di7SVf`{L=5Sgf=Pk4#GO~@(mS!{
zN*}bvc%?v9-3#>jnRScvU1Kzk&XF>bd;kZar5_8fy64|VDakKzKWQ+nzw9rs%l~e#
zu}6S&58pfNG!5rj%{6FwBT1>q9$Hp;ywMjfkE?EWmqO5O08O<9EMXrE&>(~eS6E>+
z2NbG9D%`5kSKugY#HHz47q(zcE_)`s&oQBaY-;Bs*H&PwB~6Qfco^z2VJOq>MlP5z
z4(bg2S!NrZEyBMOy%;TfFEGG%NBD>*snPN$q4^fj*?^@Oo2?1Shv;_sPEKTP_B36#
zYz6Y?+J$)q6aYtbV+obV_eCB(`1IV3S=5KK>TtpB?s-0E97S4dztT<C8(>+Ll>_d&
zmH`@h%Qx=%ai8m_Czhyj_?9AQYV17a%uWNJ{YwxG<4EHYpFNfuIxpSR4Y7`#VEXP%
zG9B=kNLb&cYMW#X_m6k-SbVJ6xn^*&(!d4pkpKK-n%M}6X~nC6j15G~t<B@#oEqC-
zw#b#T#*T<Ts;3fk`<=!+p=FHf+R4nJNqhTMDVd-)&QLI9o{Z$|{C~Ls8xlso*yxkk
z<G&d>iR)(L&6Bmbo~_f*4l}#%1;v*d9T(6v^TCbgoFSSu6pewMjgt2`oKoO)#<(jA
z<h{#ueMAI|T55a5f)Ehmiv`~u`+DU^WPCHmq)M*00wFFNA2sGVg}1EukvAr0zVb|_
z-9bb*>I9#Mam}6fI`QS0LlO{AIC7%|*xlQp*ZrykF<CA`92?B^LxOtyPmM}luIZQX
z$YxO(S2t=Yx3PmhzhRH#4s+mj>lS{+d%nR=z?(`l?SD;2a<=X>irnI|vf+ey*^8oj
z+j6m(i^^uiR_ND4_+$&tZoDY{@(mt$3okU>VryJ;1!J`=Tty1c at 5Zod9qW$UEI-mw
z{Z1Z`&!t6cI=b+nZ*gW%|NFJZp|is#JT=x<_H#9bz=fRv`g-Q at L{1$vZ5gL+r{2-e
zMiC%<=uvT*`O+zAV$rnZ7a0*RfRk__<x0taa#Ogi!e+Uzs{L%Hw7guy#@arl$N41@
z-eRjWd;Vd-6kaZ8LRKqz+&wJHn8S(EA3w{MrdG38`}ZA64ACOxo!Rp=|C=xp(FX}*
z|Ad~FN;Kv+T99C$bj7m!6R-`By;~EG*XP6ggslqB#coDFzJphTLX}H`l}q}jiNw2o
zkLOGlHqz2QKQFui@<s^}8jnxp7bo=fM0+}K(1!P39bvGBp+*{B06I#3LL8jQzQ!)>
zVr;mlOGg=CR83azAnd$?iovDj&Hc#52-!dNqV<w>#w7p!#EpNY;|Bqz#frWK=$&&;
z1IGBfFlo7YN`d&HK7wxlgGEsE+1X0u)JIJ0 at zK`S`5nLT;cCjB`r_4}mR<MbjXxuW
zr8bn|>l8hdRN>7WD?K;ZR7Rb`QIUhe>z8xuz;luH7AdcElNH;?-J3){n at ya*CGuZ1
zEgdLUL!x`W`LDMW)>!Xp#P(yp;{hystHns!=6YQ3PbXck at 2E9o(B#*pOHD_jT3W6R
z6m;}ldybn&5bbVpnP)c`Lvn(FHQ*^nw^PYj>F9kBHJLgiq+i2orw6I>QO%ZID-B&-
zWDnS at ig``nYRbH&=4wh at FUDt|^E822_36izS1aa~wv;qE+<E6lA|gf;0L84aVt#=6
zVf~z%y>eZE$`)DLp15dm*#4Dsb>o{YgD*_0=tm7qANVczoqyo^-rn~3Cs8<q?vBwT
z3;FIZpW|S0G>h1v^$=tUFa5R}w_B|zwa{mE8isbc4&CRS5|C?VrhI*&LB4w!Aa=4M
zp=ol2GcK4DOqjbPv+qJJYJ9(N0E^`z1qPvu%+nl#7G!0=j(YX}sc+o+n}C3+Ko&R7
zy+3JoZwWaiNs=DFJ5NzRA-zg?Qm(d0 at U!QS(bUcE&>@kA#Yjru!E?GON57mwz*}!u
z3A6wos!9?LCU33939kBd`dnx4t#Rm$^<7OS!C9ShX8Jrp at gUdCt5Gb<kS0*hH~{AT
z$xr+~cuO|Rg)Qop&s6e{+7DI$<y8~TQk%?^K~zANqd9t_)hz5-jY$~;q@=2nu(Fl|
zk}b;EUW(*GKpdw6hHNt4^-qx6^C!dx6QDl(a<vaE)o8wcJ8o1P#PSz|%_mgh{M(8}
z@%VF5qApPkX8%LBCESqpJ6TQM?%HR{Xq9kGk`n+lnhdVCmh-Z>&&osNY1q#M38!0X
zQyZ;MBP at f$%we93R!O$t>ezY-+hP&%fe{toCtuUNUU%1tduS`##Z74qf!dGJ|GYYt
ze{n|H#|iNB<HiqRH!nYKUakac#l%VbbQ;aIv^$;m9e$~Y<&KPT3f*J`MEAbp%`~bE
z);_=d<ksgaXyA{hTumkp!M+^td{0PK5-daf)8C9nFwP>=|6;4aw#{adlk-_6pU at nt
zEzEZDeB}q;`rG=gK2m>vO@)1t&>vXWTXJ<+JLf&e36HxG=j4K*ggJzXyu+B7UtFix
zW<OF8`-1`|ykAeGU}x`i#=U3T`UzULnmSxt%k43l#gelhnTg3|O_A{eDqrwcZogym
zby<r<5I;Z8ONTm_o_^h~Y(5t>Ru59~g{`08{M1q}9o)T(2nZ0}4n3<o>ThXXJ<>sh
zhI4P6_Z)ud+lOzW<i=at3w3iGlHzGfEo;RE4piYcj2wjt(3<KxiOKGlLLg!)?FfE5
zuFK~zIR|F%@~2QEkvGx0m%A}bP0!$9Shtub6 at TvI6d9^0 at mn4itwjthM@dPkz~ii8
zh>pT)A%%cFFZRA|i#|pYIfucfMRzAwKy!e%QY2F8HWHQc-&(>kv0<~N%%aXSeIb4Z
zta4V?2x&h|Fqz-ZPl&<PkWZ#36v3>PaJStQmqv+?XEMRw6i24T6DDV-9v=6nt#RrF
z-Ygi*gZZ(YMKGv-#+!v<GFe*U?n9BQS=f#L at eqO=Y%(GLt_xh_`m%d<9{B44wQE6s
zvYhUi^ta1SYnC)fr?0M_LkW9K1U(%IWL{K!BLj;$ia!hL{Z`p)?v`Huz2MWH(H|j~
z54V3s7vNuAlb+m>HcCwP2%p>yr7IPJ+Ti{t$IX42g8+kluO*+!;+9ipT$=WuNtgTI
zHV6)DuEzwrF9c@#VOWDXSn0M0?+Gu}pJbcjY=m5<Sga0J#|>u7jR;JTn=2Tp<hyx2
zo$2$;=QKsWa960cBBut&Z0y=x_!Y-T%NVS_fPQq1AI|t*@{?OMaCd_+E156NnEN$X
zpQ0=ZIYv&N-Tmjp&|BA at bUS$26ZwD|57)^rD_Bh*tKR9pdK-T#?jNtmOeykY)rz<#
z!&X{rKRl{BX=dsRtt(BP^s3t0^TczfD{@5W*hV4hBZ#z<tsQ0`@p4OlPNz`L3gl)|
z&BD|ubrp)BaAt;l=bA)xs_>%VLBXH*_4Xa0C83B#xxSVQ at v+1MU4r-SnR!s}<Xkj?
zn6YyAN`GA_E9J47na>OC?6gIN_f_eh2gtOglFKrG+uXkek~{^Ll`&!2Vo=pE7*;p6
z<yw~O;9t^%2?OomKelj8b1d#$s9KP0?T&4+7HOoN=bjhoiaRX^xN*=E1Kn`@53QeH
zM at pH>Q({o5?PKj>%UL>tb|gz|DyM|H5y`1AhX>reX8#T9g37nh9??Mq9P&Sa3OZMR
zTAy5}6|cT6Gyu{F+lyahTQbfB4Pk?!UAIlTrYORw&ArYL2&s9+rno3|yfER?smXS#
zilOkg5$4giU6%DiEWvEXE^e&`CtlANq7|ajF?g7B(05J4H|@v${?|xCzgL+-7Vu_M
z{;RypDSK~+lxafD^>?Gppp19gy`{m+B^1}Ui)czVUx({0KK&fm=LWhJIU*q3y!`%J
z)d*#Fj?i at bBFU}okj<95BA$gjAUtZA+aTq*Ja}IjSl*RTbVB>>=!I$9GJP)DvB at l~
zZ}`6D$#Z1ubL6&U!!T at swUKE3eDOr>30~C>`>ep~V6yq4i-vgSgyp5Ih0rd`D!hab
zAb_|v-a&*QJ9E#zhx4d3n_1quo!r at sN9B(nwm0JD;g76VR|(ovxzLeB2>?=HVa7XD
z-4_>JFIcxUb+*#D_mzz3GOPi0{dqhMM2aS6c`2RN>NyH5<vF8vdfdWdv7Gu-Wo{?>
z=5fgwMpg at YI~l7*>zmxrX<zQ0?@ImY;2_i4Z$fSX#!NmsQQK+&#wRpkY3*=W=fPk#
zhzh{;#P9Xx<}3q86bG+kRV;!w%JFUT8S_npgbdAl@=|Dz at mom}nU;xD%)Z7P27iQm
zl=&iM&{%bR$ppZF_4`i(Wu|m?Qmg8|=Vty?T}I(&zpjxU$mj>fFv2`1Dw--*>=UVU
z{}K4am-(9U%Apa8d^(#aVd~T!M?7JUpwb+<=M%7gbDd(N`+JkNX<yO`{Z}HLKZKA!
zJ+09^H>NZSZ)<yaau-g1#W2gBnXNre7?ID_p^@#fU2=4x`ze_RTQ#{Lz0E3u9l7Ow
z@||=i>#Rs%rYRsl0gs)fULmQhyfk=`)D)Ur+y(Dvb)-s~WLi|6*X)m7-L-tyA3+bw
zNVOw)_e7mO=Je7_s<WZs3FeMZAO}r-ePx=iU%u&~)!54zMi)gV-KkN^3bBNx7Suw5
zBIw@}2u&L?aKgn_?!`BRT-Kk)6a36}?2qB>KtdS)ixAsiq4+j&el#7cg~+qg$fF&y
zFJp4cYe|1-g_|@5>&<?lWJx=ezoP;QUp&&B=(rKFzkzMcvoz7q%m*T=!rvQGb{IL0
zUgAx562^%D3`fM3RuRr!zFJ0!yV9N$k`rC8cHHs0UGS#c|MZ=NLNt>`n%#*IZ^uH(
zZaGK8l2+D&83a{_V`@L)niM=qAJbt}=LR%V1l&aFXJNI(+i2e&p5K_<hIATU!QHUg
zcz<%oJj09LH1oXf^%t~&{%oEdBLD~EE_51sb$%fy<bhrWj-|P>iRRo-#cDx6recel
z)Aw2zBVemz=<+YQ3S_<gaF`3(AJ}|{P1rAHbqe6P9II_wi;Z5pOC#Id93rKbo=H%e
zoORDT?C%j&LJ%5vzh)W>qw3PC%HeF at c8lNA+hmGrwE#FK=S*XmBrJNd+iy9`-kRQR
zaB<MUdbHu6bIV8KlYX>t4*-eo|8)6=H<de3F&x8TIbJKIuz)1iT=Mq6(Ix*QG;q_y
zaB0nA*hbJz?8lq!692ZmRG1w>?HE!->$Bf*{^aFkj^<Mn at lc^YQEw65JTb}SslDYd
zZ<o~%Rf?FS$hqSgI!MfEo>$C!K++Cz8>Ug)`e at 7fW;G<y)<}zjhS9 at CRqfGW*xHao
z{e2_JkhS`d{AIX3kFiw<eJE{MYI?r&wMIHD>tOp>w>Ov)Hk;IS*K5djBg1yVBejlH
zFiiLK-XOZ&F!&}lWtFn-O&uoLgtH*hml~jDjDDIb#41`45<WqC)`X{X_7EQzsq^h+
zcWd9c=!?_PEqkt)idFEqYMf&)x2$PZ&qG{sJ9}w!^Vds`268F<k81X)`y(38H#tA*
zOmvtCuL|3KFmpxb4?hIZK7Fduz)AOpvnTbHy>2Br!K<R1EFBuwW(<6)Dg7Pb*99oh
zk$Fp{J{DG39x+O!nNm=GmS{LH at jW|%`8`2s?ZeWcu-+#Xuc88`!r#5?-P?Ppg;gQD
z*caLNl at y>RgfzNW6BR-4Xw#9n|A?+_Frc!kik51W3Jvd95V9&rOkXkP9ILR;c~Dz>
zenTr0IA@(c at Gj~{?et#iE7o_P%xX>W-X$X5dQ=*8!XgUrSw=@cCWgGDjhahge*e+G
zAS6ZeT_Q~kn at pg!P9kE+h!#gz<3lpBuCB!)?!AN}W-aZ)J at 3wEM-Y)i)ISM6$Mne2
zXkuAe*>!heh~hx9TFyjTi=p?0hW%n0QIHh{VK_EFC2wZKb^^bfa+y>@t_ti+`&?V&
zAv32lF%DMFmdyARXYXr?*UEOb-l=J|9UTPW%hmH`Z01_G`D~_IJo7pTYPQKKa~Bs~
z2e~p|c4*<<EYN6dAucAS#_G+e(>>+CAne4h`wwV=HN;WdC?Y at B(B2QW;apE{Q at _^W
zqCTibQU0lI^~l at rQ-6NTFMLVjnvRZ`fq|`-Q|%mZNo=QU7dt11nG5%GJB({xjpUCK
zBqY7servI+V_*<6VX3iiiA%3v#qO252n-iF68)J2j+!*6ivIfb$>sZRZy`UPDpX>%
zEJ8rcR3Wve?kf_9GnIZkOGz-Mkt+%QG+j;DHl4H<RzT&qhq%G`HZZn=5K;h!9IyWF
zo|ZPTVI=MPBU&m#$*8J(<!7SuRq+mqNe_$gwVq_cDn`%0meRi>CwU^D4y*I77Hw8a
zXF5(sfFz5beHOd8 at xuTe!Cuh#<GhU}m~-pu{?WQ4^vgboS!AWE<&du81Al|oZX!qj
z53OfKDK!Sl(myTxcYpOqH&SIkr=gO?*8dH$mSyg^r(lMgYTrO{q+9bUQ_zeV$E`l`
zi90#=ByEv3JxgIkE8K%i<o&_>=ZtEY$b3I8lq6K?$c-^I$1&87q2M=3&Yx>1R+&^_
zmO9u~Lm!rI**<cZ%>DcHG%fdm&vXOHKI~h(c2~ODa&g<9TJQO~LbVBtGB`0YM-QAn
zbCa-gq`VdPFIoj~=q-jS=;cL@**jxVx{RPNf>bWKDagoeEi;PB+M;9(4Txnq#s8!K
zl5oRTGSC`Pm at IFQSSH3ehmw|3UdD3(KTY$sMWhegLsQ038ylwZ!`|J^*555Q=4s>t
z79AwTlu+rz(FJC>^$@q_O4j6%Am%=Ry*XkUP@;_QuhnW|Vaz{61f4#_5TjB at v;|to
zwT;?wgldoa{g+(SZ;M_+8v8ve|1x5KV72f;K=>Pc7Vj!vQ7wJ*RXe&`XFHGWzbP(0
zQ0_p(RsrMETc1DCM3pV34l{&fD<~XTCNwyW1TqZq7;t!wnrADMJts?BcW0!b#Ha#v
zjFk5vzn<DnZ8+1Xc($&3iGl+LWJLU2^&AY0-;SrDCQJ(YD%B^eB60oB9`}d7BhiTr
zgO0w@)e%qgD|ERbPT?(ozfqc%)wkls^7KA!nS~+7>HrF!U?!a2ira=aIyvT5+F9tj
zxnpOdW`7p?k7AJl#Y4F#9=bmrOF#0kdXQSVOxY`l8R<Ktj%5>3FRRu>BHN<g5G;gt
z%wFwGGBH;RMjMUs^fO7KXQ=-rNBjuR^g at 2OrJ<n+r6}W&(a2TXWj|E?{qF3{b^i8j
zZVkgi#!&5;E_^GuvL}aH?qJ#{uv_5V2L)~8rpwf{G*f@)C)IbGq at VnJh!i*=P5Wz+
zxU{S2FF6?biEsilt at ie-YZ1=ph1+)}%&5icpTFj*J at 2%;ZbVT=8sRi|7il|(yn}O~
zs>y&{^q#;^?c6 at _A&8W$+CX7%==Wys(418x`(LP$4<;_N8p`T|B&Vk6%Q;37r+}(M
zkA__g+LkKjp>Q9U%cST9L~w5Yg)@cir2jVoq at 9qd>uPSJM8R42 at a&?1tuFU=kX4*F
z7fZX{;q9UehQc=@I$RFq4*8JGPL}fLP(7KwC+0)Gg9y5r0VT3?%Y<BZK`LM}bdrLx
zwK?S|Rly$|7Qj~*n5 at RXP}x*LwB0fENh3Jzt2y(`YL|<Lmn~DfqfW_xrA8oEF(4~E
zQ?VFBnde50K3!(wc3e784)3eoXc3|!<jYjCV{}XdCXEzvyq<Iy+cpFILONYxWGGt!
zu at A?;qcB{rYHP&ib0ZY|*tF#riRXbf7=BN at 9f%DUJrQne2Y-sMU9!I(&FR!JXn0MG
z-(A}gBesU5qZ%7?@i=C`)iv<fDu0a0!L;~-$*_wzTI%r77lg91Lp+yoCQfh^r=!Oo
zO|;&iX9?u0XqO0gD|w~l)Bm+U{!1SP=DU3sTU5EZxmkb_AbGPQYO=?RjJXq%VW;0W
zlc<`%e`nx3cPd1x5xleTuAV<w=0Ms-8gr35VTN<Oi;)BT4i?D#D`5bm4r!c!)G^wu
zNgUj8ppf1BUP$ooxMguMb1V!I9mBA^7YOJOr$OBq0|OR^++4OuuvIsDgGez$@Pc1~
zLXL(JE{G`LEltgG8qcLBH=x;fJmMchE0+=t?!>ULFq1|-P4m~<j4$XSWk(#Xx-Rr9
zwFn+Ru3Q8ZwH(H at Y`p-#qs at B}u<TDn>qrD8c(?Ug?KgkXY7^;f)6L2i5T|4&qYhc^
zkGRjqrgNI>)De2QY-kI*FWEg-eMbln!@WiV{aiPAfC$i9l*r{q-vd$Oi}MzTD6I64
zAoCfk>t-Y#S947OCj#%(dw-$`^=Aw)?s0eivO1gOpC|8sm1pRqSx)@%58u+$yJu&U
zZ9gyA^TT02rIoKW{TDA`dTUx~Yivl24l6x9U3JY%!Nr#c19?FH64%T502rOj#V)5R
zq4Gfg!)KJ^0*ww?cRR<njK*fIXV8*$XSPCg58#3iHmePM6a+{ci*1WeI|Xl%wm9#;
zG2qZ%sXflU!`IH#hc>Zuazc0TN?Z<t<DEYmzl6}_PKApYUY+#FY5s&{_4S>O6rt{r
z2TYjbH&%|SBtQNar1_tK*Ae9S3b6tA*>DzgM&5c55D=`NLWgP=?Q8TZf7IstHR)Bl
z<jx#U4Ng=^U^HywjYz+J5Jm!oi-+fed7h1(y$5zaKoJmms=e9N&>-!yJlMjLOCte{
z2 at J&I14adA?k;H%bZ0wD_~;#jmdhjxvC=<meLh1VF$x~mclxWw|BHVAqfZjMYmV9N
zlHe&=Fb2$;vz1X%AreR5xxEz-c-EYd3qlF``1oLU%*Lq~2E?ixT-%3ZloR;Rpe3IH
zmTgA76n|wC$XhoaKs{f=a6fLn2Qx-T00;c122CC#Q~YfVUaS5lKRQN&v5lBn`1A&B
zcV#n1f3#-L*pxeLfXF<)b<LmI4Z*y|w$vxU_OQgKa at CMW&CA&&%}ny>Bx;ZY0px{*
z<nROlBc?f;`AgfF*fHVX_U-2X`2QFk6Ed at K?bymP(F~_;)e&BDSw94oZ<SaZZ|sb{
z#3*3&^NmNSH0sdvPgQcKN(K+*A?TtZV at hzNffEKVdsc-mL86*p-txW(_{TZIglUe9
z{^B$)l=3dVbs2W!zbFFwG3*!IJXanYm5SKkv}d|&md$eiA?^BKy9lPdK=|!G?k at Rz
z*`V)Pz<knmOwEER#l#`E0!#nMQ2fgp{dY~&>JOT3jY_ml9H>W at br=S4 at Bj$3`~N>j
z{lAr)^+7$u!}$NS0{^YL+&ua$$xIT2k=$XNH=KJePUMRpuTuVRUFHY+ZRLR>4ZqHJ
zv=~Vhz8cAshoP#p@=r;gsoLS#PP}7JdH63X&i|^rInSG7RdVeeby|`RN~F)ncz_s=
zRuRv=XJwzH|3&ZkU)s;+__B_6X{bsfJw{7IBK_(Krl5ZjsP_i%*}t{hpWP=-qhfc5
z5jbETBf;=9Fh$C!awXlr_xPzNM`KRT{C>1-A+wIIuH at Snnq}+>ljQ&Y+mXv-?&6r|
z^mTPjar07_?)~fP{uND~j+hm!X=7xz4?`nG{;fOGn at Mt&FfuE^Kh;(LEoSXs9l%I)
zSF`E<{R_&H=PtOkf$wOEF_Zm|V!@CWJK^6y8~Fb}TloKM4i<EAO+E!!nBAM1nR&xh
z%&v18*4%ED`LM^ar$5WLy}cH<qL;^FD1$Oyb^Z=N#ZZet==^0SSJ-%T%WP)^w-vFJ
zC0_AexwoUazq77ki}?dbPl2<CxiitlRTNp)IlYmTZY at F#v~{c5qgYGnEfpLq8D}NO
zpie>52mL_}lV5n|l)QqTgs$>njn$>YgiB1x3TzbczdT}O`%=XDm4Z?Xs6eYXJw1OP
z@$8J0+CwF;vXXL4#7FhP|Lm#|xTzIIz~)<9xX+G8P1kp#Bg0#{*6&J0on4Q6!|a}#
z+W(Nz$mJvI{P^xucjO+Bgv!)!Tj$_B(=exlkJr7gXx?|TM>I$1SA6pjWMknER>53U
zfw?((qL_raxx~Xb#qLJ-&Jl^2=AqeI4#7*>%T^!UN6V|NZ-+^qLE(7Jf;=hW;*v~%
z8>sWhQqkRK6zw6N&WA{?iFZEm(EF8I<Nisi+R6CJA5=KxBwj#n^GnKjIn+<De37^*
zQ`LAiq}7A(O<uWP{8H703&v&p?{VdPI$*=*vX|^MieI{X5K?H03G{o~V``6{TjIQE
zYj%HCs~Pd|iz196>2=JJp4bnO?X#b(>;)~K#>VqK5u&yPuOuZVXL+DIF$^>;)a9k+
z2Xc~!9a%P{0}Cx~%RGSBZoHVT;}=q;N36x?7$)9tdiypo=rz)-2}qcl$J1p>-oAAR
z$zEOpyAP8j<x>VT3-TwSsOef&-HT|Lid``XY at 7f7p`a;Vdb8|5{x5)(w00$Rqv1`5
zQ=Kn{SmN_~WJ#0AAAUPg8%qsdjA&E(xewoIa&#anoafkqH`Y{~KhkV)e^*^S*gxr^
z^^Ya>FqL}|0B2!Tax=u;f%~|Rpy#jjVysImEeA~+u?)?>v=-r;Ct*4GGrIH5y|0E8
zwk-v8*{}|_efx7Z$JLNwmhmiz)KCfc6YFBw<HH)SnQ`h~t%g}hL4Ku at 1GsHI;3(3f
z5!r={eaohmzV!I#{^ObmSJ1xQ)}`I_FTP^sm4iY4+2(Y!XF^}$;T95Fh53dv+7aaY
zwvrBf`*sfg*fGyJiF2eB{Mlzz4WpOzQn6}9f5q)BJs)@I&W&DxsW}(XaISs$x=ZH1
z*@&6b_Ni(D;-i(E?t0g-b>0-q*^K)hYu|58lRY>K>VT?~qLlsZtJDCxtTKVJ<(x{Y
zp#<Z17H}?(vg|aB(?p*0m3Pj_E~|HWF4(Jm>=A9$ek^0h;#MqN>1^}RJh(LT(d$iv
z{;`y2I~i{4tD``YPm|r@%s!4Pc^^iABK#2oPJ*=e()Th|m%X>sA9$p46}K^|ey;h!
z`19ASs8M;$t`{QAa8+PVAh6(;!r=H at 0`ER`-Y{2m=*zDIZ`KcABQa|q`n||s&EN-3
zKQH{eE>-a~*<)V(eUdCJQ{aG{GFR%W-*|lrbmz3<9zHa&Cj|0>CSNfU{#CNW+h5JR
zqEdoUN<b0QN*J%e;GC;WqXw7H=U@%jjYUCht`{YTi+c|)1T`}MLg%UCIa%H5gXW)g
zqYp&KXSa2(1fvMtcD%U?FK76gBLw(h3wE*RI!jMr#C0nIGUWPu(?90}FN=L{jI^SQ
z<DSHtk`79H>K_<cTK6?%ZNF at Kp=P`sRQuo=fh%&ZQHi{EC~k7i6Tl0AhcyxSPs~yi
zd#Dsv(tWXSpANYc#8wR`E0ll9Dy1*brvC$42j!Uqr$RO8_8RjH54HISlnf(oT+CLk
zwIKp|oMTry+sDN%sk)cO9wHszyy6te=e*|m-Mh`2^ZN4oOQ~PJj at srbZeLb4Hmn3%
z at p~w}yI~}*cy0a5FPFc8Vk7q67mZ9|*||CRj(*?TqY>e>=>kY$m&h9W!#~VG6Pd^_
zfMN>Y6GQ&L`@HWJt^J`nXc)quU*7&msnN%ShPI&H$Vk{=Ev&1HaJF0_a({Z-O4=7Y
zQ?MbXHL&z0`xz?ilEd9|_?fgnc14*YZ)?0yCv~IJORg8~KWSC++F;V9N%G%g@?WNA
zU~;po{?<+jv3;peq_M_5=H45x(y9DOon}<2T54;Xp6+FInsYFZxR-8SuDQ%lff4>I
zMf1Biz8z60-Jkw7nX0J2RGtsfHuu4nCx7JHw7_8Z1-7Bg%gdTmMm>~KMbS~g278$X
z2yrP^H?q_difii<>R?CzZrG9fZmRQJAf`DJR{IBHX<xZ%`I^@tih#Fe7LG3yHR85<
zpEhRH9O<>)X8E;v at Z?l!qCd5T+B*R9jg0&EL~8f*If>ryn8x%c_9VDT2WNvRI<y?r
z5k9LgQk3%KPOwgNEw|bf1zmgzEnFG@@P^3<QBD*!Y0mS-^TsMJk2QC)3^{b-3zKa;
z+)AgT_zb;0fFC^4;~ml{cOy<Qbn|NGX-d9s+}52nOiQECp6m_hdXsWZ!wXfs5>+0S
zJ*l4{1O!-Mb5pc&S2Q6nV})i{$<shIL!U_GaZRQ?lKjNQdNU}aTCL-Fk4dZ_cPsk4
zD~Y}D`3g*q4WBiSh2W_<e<n9q-{x;batiXt6ze`O2}&|Q)2TJjRkG-J0_+Qi*Zmfd
zac8;O*u!<FjNM6?Xu;eHfNpoW&O5JgLU&J=!N(#-S^Mh8`C(0t<cOukP9^@1v)h+>
z?779&6wA?i(|IfP?Xf%mhrREPYO3q{ynu*EQ$c!B5fJIpJBWbvCcXC(s`QQxL at 5da
z(vc3KLqab~6X_5L5Q++f8hQ_9E<W$`z0dcq`DbR$KeJ}CvQ{qPo^$uvd!Jo?XP=Wb
zr%1_$>~`Ec?>;6v=|YDm at a145t+3^uke~)?!J;`91?q&5F`qUfi)>S&Sz at l`jWzA)
z`WQ!{@W?sqad%MP{jMz+#snup<|l_{qc;x1Czz#HQ9}hz#S!vX5~J6HirrSjh7l1$
zaxe+Tdp9zyw at X~&tUFJ%P=W;5r&P4WRlf}9Ufv88S*wpLA+PX4JT`9>*Qft4w`V57
zcQtEAF*Kr+BuADk*qhF(ynib at M~^HxnCaV(j_M4x=Rn&m5@>FrWnJu<9TuhD3qbg&
zT2FSc(qgPDr(Qb>89F}Q=aj6E9phrIbjfzUE<}A(k1c+m+EWqd^|1X=_oD{}1ia&V
zL|_-zW}ScyxoDoWLZGv<EymSCB?YXerR>s#B6DmzNbdYdOm|GIl9$JEEf0(497<mm
z%K7=0u*;c)&DMG)IRN7P`@a8nzB3T{4#(^H!-FW%ScX9d)fRp>!K)GD6(1!^Ho6S-
zR6E3&+<**KURcf5EO{XSYCl#|`vukhy!F$$xInO0VrmNS{fK*Zxbj;1GqEq3+j)yO
zuNZdrcga%F`-i1wd`{L8F6iKUBb!X{G=>l?|8A%GVJ75r<NatOnv=jbx&S<$Mkd}=
z=))<gL|`tHys(wnrht^p*B+X>XLu7)clS+<I`aaA66Hn|tZvcmK8h}5*`?sW!gP&r
ziF`C4!?vz>pxR5&BdX?sv01mivB|iiDBG-S_HZC1G=KObOfB!i%{Oqq>jH+V+(FXy
z`_+oKvhD;7d|5wKTa=o}>XC~1Hqo*1#uG;rWsEI>*}`pV9Bm8*qli<^4x|#l2vU(Q
z?Tg=mm{- at --bvN%6Nx`mujwY1 at eo_|4VM)Zs9x>~2trdkVmsku?Y}>^s-&n^ZiZJR
z(1h>Lu(xzq1qrkGJdTPjzcm;xwb-a6G`m17>+>|i2x(F)yAe_4i97brkqtRB#2_xL
zFhx6LXETR%CUlpaC>6%m#}$$T=!VtBi2 at pvzmt$(gdOqLK!f7K#gzEuLRkalRXNGk
zwKYrL?<#S{s9$Q^5(Qgnr>a>K&My;IDlEzx83Tfe66fjURE(HM?$LeR=Ff;ca9W0n
z-}&yXU&~JRiE7gG_!c8C6Wj+H&tHn;uo74OaFv7?fy|k;&@_*FUVWj*Npz3Js$nOx
zl6w+RJ;t5ZtxLmAd<iY?Nj!?fx4RW>`LOu2R|;`{-BK0HXFu9 at g|t+i>JkBhoSo0w
zAud-fPPg0Q#@?vZGX3f|>hD#wsg7jeFI<gDma$9|os6|lna_-88|W{d^iZw#iFA2)
zZu_nHN^CE_zCysy{RzvBO~ufQJ9hMtAcq7Abh$THXCvn5RfR~NU<ZF^^)|vUe7?7L
zUN6~dI%vKxSDbkej--k|3hAr~*s6-deEuEe2Y*h at qo1PrOf)KKalO+%H9j-+b0NPD
zQ at 1NwH?b#&xZ7IEaEVLRd2Dyzc3~#hm|m40iB6qVM*FKCp>6sfA#<NLUlATkdZf@;
zo4#V;oL8<N9HX-+EKjW7$k%NzRM}-ESd^0Ddgp&e`h6Vf3T3kn%rV{P^wbKRl`pOO
z>hQv0MfuThz at nkqsAbcBy!sR7s6xJfR;P-dD|^Q at Ziq)dRiXt$=>2FON_gP#`_eJ9
zCaM*@IFV%UfKk0Ka0cLN_xITCSOYMW)Q#dpx!mA_6u0$cK|rt|t<e<Uqvo{y3|Kmc
zQMydugPEsjiN6!piqWkO>M$pvSMnKAW5QtWp=KMXNHB$Jv?OCowTL7q!Ym9<nUXb2
zCBDg;F;DLTO2*cPKW at GI`Z+RbB7_oe=$0E$MQFg4A}}>IB|bDf8*|rxWIAEUM}S^I
zguc^`ChVQZ$4AzxLb}&e(o>!jh7Y^Mr~OKp%mp`(oGj!eBqaLbZ9P%I8_G#}|IP!E
zv)vT+Bd*uF-S6;(Gv$PFu^UK>({2*DCyd9tnjYaebS0jhKcXMpBXY=3I#`O4e^jMJ
z)vG;fbvvmT3pyEMbjh}=3(zGEp7AlQ9sS}Kid<*ps#P|182PpvZ%n|p(L+2<!&@PJ
zQB_ at pO(>BUzH|ldzfULzh;0XezHvns=>E+1jV{;jsGrU*`60tkDdgmKAMk%3TcV{z
z43w|f-cR)>wQY6FZ=tH><dJken9)v}hC>e<e7wABasoNQomzs4R)-#Z<#RZbC&lNZ
z>}r8>>Fj-){>Lt9I1WkzD5rUnHi7*?HG5I1hNzYpQZH}sFHk5E14FO at DaRbkRG%>L
z_8vXuuT)!aI7`#YOPa>3eR<UFs&i`A2UiMI&$;!9yB7THVm{`n at U0L#tSyK4AU?VW
zQF~e|)YJ+T4xWw*Q{QFn6g%|92ND&HY^rJgMkl_NeT at +S*2rhOsJ&x*2HmZa31`5Z
zk|fxJT(_}^!DVLjtzELgcVmI8cTyepCI!3VP_I`h&fae3_<Z|mH>gmoVGWE|JL6%V
z^i3h}@DyC{rV0C at 4dcT!^+|>&=5urM#AX?lN62E`ceXCGRfMmxb;HhykP0A66?lNE
zB)o6*K2ho*4dxs1vUq#D$|sWfewxT+?8|sZ;w(YhFy$Hf6l>-K|9&CSM%8%JLTYX!
zJl at 34??0#<5-HkwcoY-W6c#@(EavZMk6Y__*pc^svKdsKF2t#`drB&?yxBbw#69 at t
zeRffcxmk8vMOXj41=<25(NVJ9Hv`zrQ at V}NxPAUCN;myfRiL-5v~p=ueu20t$?YQa
zVB?}OQhab%GPLcK>-Y_}JzaG4ZkNR!nd$Tmb>G0{b)Q&a{`kAT$r<~T at r+gcMC+V)
zlRS~_8&(?(Y{>TCchONa<`GwE>FMjON4w at KQHjhiWZ+ZZ%-_6u<MIZ1_C;A+sW{HY
zxXStXSY#>qiF48FZc$wCI7g;N at Z%mA;}qS=NyhYLI4Q(*Jb|^g?096Up&<No^3((Q
z=o>KCC*1=F%LdMtDV$hU$;6K`GMj>aoXoV=qkRNkb3OtaVx{wvpUxU+8aG%7G^O~T
z>~K>fOA}?+eA`!BJmi|s-Nymm%vQWAxM1%&YahhFb}_$l*uvN9y1U<WokA_ at bijc(
z#NK9IV;qTk&y{AIUPVXST&j}9?KmNAb;_-DB1tKf-z7A0#@M^l$Sx=tbN^zn35Fk5
zIs76gF+ZACC+zHI=@o*p=^*_`*G|_W%PT&W7;2p`<hj|$TRCjWxWoVurd<WYZJTJ`
zqjfFxb=Pceo>{F+uQT*p57F7p>FV#JbM at +BBK{%npgQ(QVNx`-Vk<xB2wFRxxiXTc
z;2nFi at V;DoB1@~$*u^m4cxHn^- at U8cb=Pj0>lJ?wN~oWV4pZvpgsht at ALib*TaPwH
z7q&hDsNFPztHXnF at Ppf(idt=AcnQ1RN<w{ypvhSp7<B(|#1c6(z#~{w=sN+`6gaqB
z!FR@}2B9FT^)aO$gMGyJ$Gtn#WX)Z5gUrk7uxo8NQe202r at wf>gueZ=Yr_j*s0yRQ
zAiE!<x-9AW<dcU6Y~pP3s&_xbBfT#$)qXExU@*40zqU}z_fAV&XJm|M=|jFpm}lLe
z6sXKt at CD+7T|GUb6rUecB76p24A;N0Qgdhmbz4VY6xhZ?H0s8FeiF?t(I^mmNlU_6
z?E9Tb`fArpp2>kFF}${F$$--B$N;?e4RaX2&HiPL*N`;{wn%va1;lT{p84dF$lWen
zma<L+oaN-e16dOE72nj6R-oWsLF@|^B7na}D-Jy!OJPjkd7H^Q#XqyC`w^wtMsa8^
zw&jC at q|V9KOFpsDr0#?;<UZq%fEiWJ60Nxrmdr)5;G!bqk4Mc~JS(o{`uvG&4*C|I
zK8Un^u?*xKjv*?=Hq^3Q^fuh^RZG~*7FkcN4+aiN%WIeo5Bygl-pTKyOq|v=MNkKx
ze$Ayrh4l}E-YcBR;y2BpHxqr{aG{)6s1xTlbtCFUbUocPeOkL8UAQXWRu>~!S>lfX
zcxN{{l!v%xq_|Rlt>)$X_ at Ck62emg0Tbz=8OLnkYKw~y6 at gEPT&2kjwoCRaX-_(Pr
zI);r at fQpwObNWgrdv$Cg$haM6jQ~;DWXh#92ys{$QFY!|LXlC9(*@8CIzFO0etYFA
zIrO2~BiGZ}HQyr{dSm>$FYJ8#%Ofm;zEP>doEoz}CCx1xbV`>Br{8w!^^pQlzK#v#
zg6gF()miD3d<&To+Dy1DE`@22491V>Co4lo%mm?w#R(uVN~&@K(30&+2_?LgZ^aPm
zrvU?zfunYFX$32^I)OP2;}#@9G`5!ITW->JTZe&?w at EkW`-c*T8q}j7`^CmZZe<EN
zUkU3u<V&OXPeWu{tGV(Etj9x?M!wa|iqDa^l4TS?I&KX$X}d*;7iE@@Nsl-LIjvd*
zeM(C^F|!%OlTEMt5G3WB9$E;I>V38uwKSTasdVV28XQ9dj7Kjw6OGTKBbjQW)5w`~
zLke{g55JdHziRmH?>Glvlpo9A!#qQ#_18GCVAvpZEK2XYtk_A&d+t6C56*A3cMd at h
zNY^lYF(6JZPqix?pD00JUGv^_J#8pR$eQXO^RosE-wFzI6D+L84v)^`%I1$x89vAv
z^KbB+rOXTk$*JupY6Wt9J-R62D_e<na(a5Ik>!jUJP!!G>!yDy6`a&}Q7<Ir=IUju
zz`)+!n#VD^S;^U&s!cr_8LgGDvNXCvPtyuTcZ<h`v<l7CS#H#t&EM>i_7h&gCatC-
z)`V*rX!Wa)TLkj&*oT(iKOChtHFT?&z6&ae=5 at FpP^UM1yR at X_!7b1?eolD$1YA|w
zm8|Fs1bnVUwLQE=3SmLcDC$!XM%-5Nm(9xIV+RB>OWsa07Qn-iRhvzbPOiW5SnZSc
zoO}G2puHR^#wL0h>d`gy;|Zy;h~Jg3b<l`~AL8Rh at 3kb&O~!W@^&L|yZU^UmfBx*_
z#BL5pO7Bql9<tmc)L7GISR^x^s2Bb#=~MZxV|W(&_#LO>{`7`{+g at 4+s`2+k=H60S
zrQ76`2qdb)%gE8+1sjyNq{4B~?L<`3>dHD7(^jXB8Z3w^bN*?RxHN~OjfUIJW^QBK
zwqcJpktr*_s)^?|!OdsT%hC88nN}UlXCC|Nm^cVXWqX=tYn66vx^b}6YKg2&bWMGn
zKky7H at 7Nd=7ikp?oxPk>`%|+x7JN^l0ABC?j{WPTsmwI1sPuy8vLjV|`#a9D>N7;&
zZ)cWG6~JNB=cMvA*$umr0WL(*FZ)`P8vMJhW8A$8X81jq-WKM}THa+ at r_K?Mazvn(
z^a40mT^e##`d>ka4ROE+mBs?@rFysxGl=YM%@8TZD+F%P$`yql6!sHFMu>!Qt%PJ9
zncmgzG5G8-%Y&D<VFHqf2ve3*Gjp?{Nbs4MZ*Pr!_O9dJB$;&>iJp}?D9HAb4{~yB
zstl$ay at o}MOk_)(T}XmsvQW7TTme79mohcZoy$*9FTPy^Kr+Br*ewO%+Mg at n6ECjJ
zUsqYLZvwb~U9v<0H~zYMV0k6%uPYfs=KtU2|0BGVA=T42UtR1)7;*VjU$+^{FXyTK
z3MX=Ggwy>|23(mtjY;idhPrvh2(b`DqE1(1oYxWM`G>G#<!&Ayr<{-WcWX_bqF^(B
zZhv|uOvXnY$D&{N&HEWR?zPy-2-D+h5=8Zw$5UmP%hQShnR~#MDo=Wxx>4M==)>9%
zDDGU$l<S|?_ra%$<I3Q+x%@AE(I|K|3<`xB&0JM!7lZLLS?d3jB%3NZ+_t1065rL;
zPS0Xdv-DG(mIfoig25Fhs7gz6lBhF8_N+_ at R&VmWv$#|(-I_lxcMI{^hzFUES at P>w
zGHse-)lkP)7?=*ZFL9Yl_-c1U<J%)v=h<`v>vh}7C&%yhPun%84Zkwh_ijM@?HoX3
z*Ss*c_2Fza`4SvVE at tV&ui)?}fjX$BhOBd;R3RqmqWAi4c}z=V_>y(rhHN?mD*M~C
z>5YE6WD@)XE<Kb$OPW?I)DTtxd6wRQIk6+rC}F<$qt{<!?X3jal-KrjPp*%iE)%lH
zbANmH^ttKffSXNYm86<JmCxn%!jWb3V*U+!{k4n^R+goayJ%B#7DuPPypvq(AnkVe
zivQgKzDtH at E#S2ko$HNF1iSkdrcCLn*_`yzZ6G}wk){~rR;i~bW`1u`-S)zuxwsO3
zvY>fSPB*iKGgIf*uOaljes>M;cnV5NU6 at 1e3B1T91Uy}ERJ3$6jaO*Vv3KQI5LRnL
z$0dRv#+JHB(`bttK!_P`{@{D?W1g?Z$1+=|0O~n`?t#*7xS8op=ze!`Lt4j?L7IKi
z%iMZ@*?aAlMUEwP-|sIxHi7l~KoFT;Kd*bn{4r|bw at 3l~vCw_50jB5iYq??t^a==(
zH?ok@(b`8>2#B0uXG3YtGiN at 8GK{G8G(2bRR4C;6_30?FGBg}5DAB4s220162q`uE
zmMy{5Zm=6%`<ztoQKH&^QE}G42GTM5+4_~xVT#|5Q)*d;&y-oT?G+2lfo-GGJ}d%-
zf^N$^2&Ln)9rh<VJSeX9HTe3pk`51K>Yda$5+I^HWBO+VmUbUSLeQ&E{Y*D+exJ<Q
z=Y}41J_0?B3urhgCv^+e=DP%~)%s(CiK$As1oa~rW-IYU!s945%tsx{qY`L+Za+t%
z_CGItooHxpHAv+~#ax*-LUtGc23ej>cKi*&VCku8LvFZ_o0L!;UP)o?q=;RTtB5J`
zQn=2yS!jT=6Ia{gupn(16;JVjNg`PXn~Q?;;+|!#QNf at oqI1gAP%(2R<td}?e6L7!
zolyaVr?}-jTixz+gMsOqa*Mrr4AT%a7MVNa%K?i)9u_ccTEUOO1Az at QtA9zM0|p>G
zt5%p5PUha2wHIn{wLe%tD5 at 6P{a!rJHn?JSCZ8^z-0q=D*m%7jg9%U-a`MjR>OEIq
zwF+)_(m>h-&Gw)x7ci7(DW8qHD1JUppNH+hglT2R^C<Ci=%x)m%AYdWnR6F45AEi*
z&pYuRjxiXpuebae+*87<VLaZw9#52DDOfh`45_?v&jF^r^8A5<-W|)sqfVjz`)r1*
zZa(K9jDv?CEqaaRjFJwD2k*=NAlTH6hM9V;+ZT9W(@Ye~goNB#qs1jZ(@&QxnNNz}
zjMvW<LLzF}Tcp0Oz7*rJC*+PXM|`%GeU<!6Z^<3b%7W<e8GyL4WbTgPgZ+>?j40qx
zu2OSLe7_-+IsWQXr_wiaGJ2FHy<D#c`vSanjc>9-xBijpo92@{$5Svd{`?c#2p?Uf
zG1%-dg&Mk=GTLBZUVic(CT6Gut<-!0>e!oRCjq$<^hVoNp&CJFC*XnOp2Dlj)-F=L
zj!Pp7uNWZ$3QS^tjoG4(A#pWX=y*~llR?;`)FX at +bY61jghw3zae<&+%lA<y>HWcw
z;tI<?OQX3SI}LT0vPzm^HYKSDcy73Lr-SE|=*RnNE7|i8z98 at kh{;`G^>4(Ir=C|$
zhWz at VszV3madIM$`LerQOe^VrUDZx39q-Y<$3=`RGeW*TgV5ut^#-<lMs^fG)YU~6
zhdw-eaC?2KQsF#?m7f>#srJf-ZLJj{ARhE)b4a;Dyiz)pkX{BHNY;}C6JVKoHO-53
zDOXizVW7wQtY+;9)K3?38rJO67}1cYEfP(4*h`@B9DgT7rY*iY3Y%=G2-rGQLw;B`
z#(e2kBI!oyL<uqZ(qs77Z&c|a8`jN#Qbd*91)TS7mkZ~;)Yk-lK4xgINMTTj5S at z{
z`bn+V9jo%kWJXq={US(T4cd|+tJ1YEV2on9*ix$zeH~wv;~L-e4C<npbWPyBubMz6
zq%j`XOnlr%LAY;gReLw<R&}VpfHZ$ja<cy}<mRy=!PwYX-o}O*Ni3G4s?X1q5MNMA
zqHtrw)%%dtX`1SjCk5qj)ExAe?EG=_t5>uPhYxu(?<$)Sa{N4W@)9{nvGfndd6P3<
z&<C-T%5B at 4@w?+2I8i=y+GOWk+ni0)s{g8a1}&txNH)b8R&{H<uP at 3DEw?>Se*HvX
z8dbU>o2f at JG83>%4L69r3o<sWG<N~F?K}WWwz at P$uMj~#SOA))Kfe($)FB#uM}_c!
zUcaFK0LM$0J0dWaCdWPPAk+l5zhCTI*c+px#>E_#Hnm=15VlQQ&^98LQg+S7hq|9l
zG?uiue*MOV$UYwu;I+MP-as=Z9;Gbsc<wQy+)~AwUjC5wh>AwF+>HcDVEX7%`9GS)
zn0imN%IUHZ1X}B3P at xTiz02^ir0Wsw0mnOeTE8mHj2d)mAXd5wPU7hykFWb-3|`$1
z)wgOWLEZ|HZ`uw-%`ng-FySiOODx4^&0jwRnf43KHRh@$r3f-A$F!rHO}8;qy1^>G
zQ*TGISca-0a at azT+lMe=8^76^Tuk^`^S0xlql<$RGAeKKrg`9LVDpQt0OM8i!E!f!
z1MMtvA7W)|3Ko!Sn(vf30h6J{dG!}6aE%CcX6+Ko=rrkdI~p}+Tf)L`XNFY7hQ@{p
ztD-Q`eKTJ at 8r-_0FPsXgP@W%-S$U(|lD at sQa49q`km1 at JFu)}8nrHj)*_W7K#TrZW
zEz*gl!;>$EAG-!NGLkF(f?W+`mkuT4o|^OBbQ*`~v&uKI+Ff6~?vF9RTict<ovh-J
z5}bTvO_KZ=9v~=yU<)m+<dC}M&N7sKkP;q#b*vz$w1~rl>Dz}|$!3!MeMfV;v`9Nr
z!1(HIx(ez8 at 7!8(?^F`ZyUs7;f!FgBXaEKKtMg}dYm4e(;7Hr_o>}4iEEZ$HP13{q
zJ1C{)A204$)}mKG?}n?X<GkQ|?DBY at lnH?}-j-UT^)g(%1yJVn(>zuw0C-)7Upfc(
z at d15{X@}-s)cZ7{8n>6J!y_;S%6edl8_Gnfz at 62{<S(ON69e!T4f1%e)tm+9O|G1!
z#{V`Y=RYS4e{3fH9G<<AZ}8JwUn$;P2d^!k6rUMgQCFeC#V$L6G0U{VF}^S2Ok+w#
zcav(Y!gj$#rB?sr(St^Zk(!wky7q0yn%Se(jvnmWveyEB!rRSVKAG7ZmT#DE_D8Y7
z$0VqSl<(7rrf1^_8czlLihOW5Y~pduwT`d9^Uf5Qm>4P3DwpPi`E at c$n?++tFWN7E
zQbR^7!2np6uwubJpj}FM<ar%P&rde$^BPCFwxW032RIzd@>Z>dk9eK|b)8e|6aZ^_
ztI5e{2;esvf|IZyWJ{=d-J94vMzo|NrTtk?5~-}=dL6|dFYXYGWAQtEMMBcwni&91
zipku*?W-j}uI#T*J|Kra1`SF<0E19*j2<EXD`C!GslqO!Eq?A)bcWP=f$LKKNgGqs
zOuWTqT^-Bf^L6sKa2E5fM(59D at C=7QmJ=Osen|eB_~e?XLwtZDUZl0Q+w1HioS)IM
zsR?mhI9c8ZW^iy}r8ym7C>+C4E*381L6^3nH=5=xs9C^Uh+eJmY}54CF8jq7O+p6o
z;~JCBPj()4+`R#~<_Wp^0H1^L4GQpS<M7(P(aROc^fUmGcm?<tRkL`!OsLti?k52&
zj=F059%Bf^f at Zg_XPICDd)olVKCPZPH}!jg`?^iKosFz^^(_?ZQy-ykdHA%;i%@)k
z^9E^tGa_J9rZK?{lTR68_wxExdjaw)De2;;BKO at kU3&LWPpDTm9co^?ku=N*KDbbQ
z%0Z(yRdLk^Beh0jFl-S-VfCs at j>9PO2}LDB*-L)DmhSf;O-3v$L0B{c=`XX6TNYxH
z1ecQKyOb<FE<^d?BcooA0E-{Xce*Xsy%Mo+ZLh!j7Dq`h<(!Ey2=9F3sa?U|W(@65
zWd!unpLNMTi(wupd9O~fN-Y*4JV_bqZX!4i&IZ at Z(9Ah)7q%wbg(NYDlaX5MM7;M=
z>+^F4P1yGYmIcWAmUze at _fJpKN#dA8$|wbjt(fAq4HrSd{J9GrE*YXgmrZ%U6%e5l
zn$c9;EVR>3S(=8w6{E$}E<VGwxQ`s91dg^3O~6ZW?)c(dCi(D;I3l3EJqaUSsGpw5
z)=tnH3HLlGhpHR03y;1_DkHx8ElOpKw48rKYl;4bnU{&uDDQZHR)I$5XuW5pSm`Jg
zs!F41+8wBaO*I|kScKy%+*hlof1Hym&vxCHID%ngPEXe~({kTxDdBx-cix9f+1li!
z72L2l%I)wMoS7)>$_A$|V=CwipC?!Y4pdvEYydH~kwG7Db#T81u(02Hb~r<ct>C59
zHqzrApa6VI`GBT1HBtccZ3y8aY_MT at iAPwhJ*WpXp^V*H`eRG$`YxvF4xT0-cWgX=
zJSL;rH1#&&MzJ{YPj9uHSV{O9Ec>2k%}QHeC<R-Vj2#Fn<pf@*1YApnsF;D0VzDwI
z^OHs=?;ndzKUP+Zl{VW!XRkZQ6 at k%PIg(FWhf9nHO>GN~&ujllGO8?-%S>Sh$TG_U
zxGs|Iaf6j9c{P3NOH=XZFso$T>1k-fr_Dt{pk|hN6BJF&^w?INIsfimdA;no5~4T}
zwJ*^RC73?>*63q|Q*^#HupaAI!TKNJR{Vko@$-Wl&>RK%`OCqh`TGa^9#BNuVIa<^
zl|$Z3 at l_;zG6Np;jHdj;3+$J#50^|ayauuR!KS|}-~G`at|L)B+tgx2Wh}m!nlb`z
zG3a8fS*;me{!$DcF}ZIbB$d+}!(pulg-^1~Azps_g|BuTJ{B}AwWZuxV2Fd)R*FFX
zz7iJcDaBWv^(L86vQ9Vim!vH+1D8RLYuPD0K at X}i4)t_?Omx}u#2Yql>6M20J4CIk
zv?~aCR&=r;U+rQEcI>^Mc7~WMzI^n-eV5t?$c~cke9a{h#c at q;u-fVP8o=Cg at Z`wX
zcRHWX5+<ArXDR;aS1u+dhFD9lb-aiYOX1Fo9_U2~ZO(-IH8zpHI{wxo>+R)L2pKZ)
z7O4f?&3xAg0WhBnD=oQ?C*$}SMuV3+{lh1~-b}w-wbjkSuf)F{rA9}hGX%J=)%cI%
zwGn?Uvu0 at JY#gUppjI|=PdiVpcgD*?Xa(R;ANWYJ(j~=0^h-zF6f|E$tVsV5E1akW
z*{@BYs9Y2WY9ubogwKw5a}woceiOO$tsSsL93(dhbLYXB{eQTQ)G54a_9d5HaA_=R
z`10g~Z;{~(hZvkJTiJvY%6#B5voqF;yc#yL`mCUxWZm;r(|_1jT#!2x=cjIj#ShQk
zU$e%dW1`2}_Jg-Yfa!-W+_Tr(OrS<CaGee!FJiSb^}}Xk$Rs`XkN=O4o|=F`r>fdi
zrD_{vAXYJd$fasIn0VMoLaSlKD?G;xaB-}dIX$ZtE_A=2JrpGK3d26?Pv^>U!|Y>C
z_AI&sxt6-&gkXC1fL>2TfO*rRaWUg%WFU#r;h0~JO3wT|?IC`@=D at 9oW(~O~XdnMq
zyYHUdOCbvwn>ESwb7|x$Xra~E>B4IRlZ+FM%PAT5l6?};jH}_ze@~N-71ecFtH3n3
z-M2le2sEPNSM5<Lg`Oq5c}Wk~$7m^cLol1^3BT|f=KJc2Il{zBgHn+~;+Rk({ID at F
z_p=$u0b<t@*#ha~kk+4<!^GA+$(o$hGtJr^YX4$@gaNf4CZ*i8VDWicHVtaS&WxPj
z#9W&KO>b{c(i``UtM?3N_c>YHa+GU{<#x165^WTF!xydYH*zIoh>z6C^|#jH{sS{d
zST9>U-Ut_=$*b=`+{sUZuc|`4&I(Hp4hZPfox;hwzmnHw(l2JJlfH;&3sX0D9-sI$
z|2!3qrk7eD7g)>F8=EuQY&wzy!_NWJad&ud2j`I&^xUKi+oP+iThxF~bCujGJ;rMo
z#RbCIBi^VuZ{X;?6)IOR9OpKH8U_N(0wW{GCTL1vydgh#>oa#|Fa7;7gjs?;*WrU+
zB%dnZaHvWFf4FqFZYZSBfA}qNcgtUPb>7UW&s$IhTl`GdG^f|49pcc9HX-LXH+QC3
zrnjdcDQ1yk8Gr89a=SIfdenjcY8VM^no{Og$~Ayo)<|GsEV}DtucEX?iy=oAKZ0vC
zjEnh158d2=nzmp<j0qQ8i+FdKKASD0D=ycN;PJMdb@*O>kf?xi5t`W;k6Jtr8$P!5
z#Qz=OO|bq=a_y-+w&=$t)84reTnQuOp~_#N+0ZZO&4a^*V6b|`ah7>TBztq;{-}+5
zj;Wc`58-@*#4`!%0|(Zo+1L^uLH=J_7q8Uor>1V9)|o~T-%_Nk+_EtfXc9k~@z?eS
zWMaGC19_lj-s*cD&g7MXg2Y32UvvfO_!B<6UhmR=AkKPx!|e0O#1>w?iCv}}tY>VJ
zXRxC$eCl%&#A?=M1IElpQYZgat<HZ&`F`$kGEIM9pM%t=rdx{l1<Ebl6?T8^WpOp!
z(sBqf+x_wZy(IVUiICI?cf&2d+S@{m$ZDnDy}5kui*VGXCC=jYc?Nu at qHCJF4OkEn
zvgJ?CGLqeH6hx_4)Us4o at wQ&Mv`k#@K@=ZE(z9~?taAW5vAURYrQfsRB)-j^uHf1*
z5Jr3rK)wS3bY&HR8?8%o7_AMfBxuKSYezFF*dB0JyAlSG2l00n`;Zz_5)u-pl^xsA
zNB89ssFA|(a0PF_WHFM<`@F&X_MaOFUI_#L0$&rXV8;)Ia4Q;=b#=$=bc>4flmEu)
zjY)CtT;B7456Z914Wy-}f(KV;|JNIC at kIpu`cf3&>x0byU!(Y6U7XRp(c9Y#MjPOU
zItqC$1ZkNCZ{gzNqSb}b)bL-6KMONEJ5{W#tQ5po1tld*lapyc0XPwi at 9ovR{F(*+
z;~LKUx4;eg(UbnBAG9+kuXcl{yx|dGIq%nFsRY4>v6KFwN)3Kc8^3_}XGjL-gF(%k
z$9E+|&(lCjPQAE&{f&UMbh-Ut20Jw|B^EgvBM-dIKC;C=8J4R`*KT#rd~mP=!d2oQ
z<~EVj(`l4cRQta>iT+T51b3*S(ddOk?EAAd$L at PTM?U1tu4VblggS=;E-nz(k3PhL
z4|sR}CI0eZwBYqM;F8|dvXWubJsIZ$UBjHli2?=ySmy=Lx*W`u<~boyzw8`>*j*YV
z{OjhJz;l-na6m0qnLc0u)_w!f2H7=!58&j+m2qycim()iff^`8j&ny|i^7%*x9#^O
zEgU{K;5tNLn96_iKN=AHA80VOjq`I=+o0@=qd%qj?M8M{KbBZ~_#KyYqQ0I*W93s+
zb>UdkW at iO@YxPua%=>76vYCy2|LNw~A{)K9&sk;JG(DHPi2l;BriFR|cW%(xw?Zek
z80bz=tkinS=<@gZ>?>iOFYxOX@&(1{U>6}nM<H$&{xjIOk$v3X7kvUYo8!9UGtWv)
zpOuL-n(jUksI7B09%Rj2LF}{bOfs<ofDb*c49LnKMpwc*Ve@!xOBsrwZYVM}zQ6gf
zWbB>O;DLkwn#n<dLi<UbtET=bhp0>aVL+@;Is-B-cQzGNr12d3gDP$a+4qbGaYdLz
z1tI!xWBB(SwYr5QfpwkUlH5g6UDn{>r)Ba=CwiG<`wseYGI0o>U<)wNn at vSat+6@3
ztWP>QYN|X#8rdV8V>?<NH6JGKZ%;B}oKj}DLdKm2FvDfl!A_|u9uh6(u&cVhEsD0j
z*Z1S`fVP9jz*F!ykPP1g6?NBu;I6`Aqd}i*K+ehf<Jcdr=vx4H;kt9IlP7&lO+#HF
z7OcAYB91rZeO{U2R#F)=PH$$)J9TRttLqaYli)2^+{Bx8Sf)WOtL0_c{&fa&AyPKD
z5w!*blNxhKTHO5^HwNXClcFyyyAGv=1N4i2Tn`)_jcilt0n!<N2UqJMVis~eJo0Uf
zKKky_yXM0*+&QH==bH)u?cF6vX|=YOd`^Za$uXtCg7J{Uom at z?!bSN}V*kaLp(LL)
zaQ;PJ1K2 at nKyCt*R5%uJz at 0s}p(|qBVi`t6=H0mqB5uLsyjj-51 at Q{<B;IxVMl*F1
zy^+W+g at 9%xEw7?b>9TUWoay#!#K?(e<ABt&P3 at C1eS3TFV#}eRvoNWR>&x at G0PjO&
zvqwTQbH$I<Ztu{8gnQ?a9S&8y!Ntydbe0*`=Jz#_bq`Z<1IiG<RziTdL~&H~P6Kb@
zRLf9!%y9r-+eCepUOLZ1_7bxGgJxg0!k;^}=wF6<Zb-j-&Je$n;Wra+zq<(vix<SM
zS-n7IXAl%T^9MDG?9G1A-TO&w^wPD1RF8`x%PQ-Q139yki%0O6=S6<k{7VG0dRX}V
zq7`lvU)i7aZ){1<xyZiTY)^up8l^cjZyqNIa6$wXT4tPAjj?=vD!@d}VMAPeDYo?0
z_NK1UY|`OoG<2tFa$pxv%)?%cakZ4YZ)N at n+n~`+%LMUahnLG@#5Tth0wa0hRV$IK
zIdL`FiTM#H6&&{+<-z?jtMg^-V}hg|hn~fduOnjEOfsdBoop${yED$cqLNuI{UIsN
z&<%g*s}({zo3C&%VyGN4>^C&kx05aB*oT{3xzbcX7(+Pl0W at P(lsFb1Hvv0hAg4jk
z?aCFV*}XNRZf1T1x&*cpWfwJY-W+ at h|IK4MQdBKDH73Hs?tF at M&QzcA&z at ps-txl)
zXhMy&(icPAZ1)+X^EadzukWuQnh8zo=hcafHs<IB at ZuB`hat?gpRcXT at h@{gnRH!{
zX?pwzER-jb%0vKLL=;e3vi-5lTXHziuCe?G8Jbh=O%Rr`08~`<(Bn9$XGY`O7 at 298
z2dc-T`4}2 at L4}EhXvgi9N at QeBN!VFbH)S0T92Aa|Cu9>9OQ3R$G_0m-2Kl*?*lup5
ziOuDh+RyBC)CxksWNn|0wY at fLw4j&c;#oP@)Re34I=qK|w!08e_@$6S={g8zf2>&z
zEcvlk9hbcgxFe4}@LBL9x{x8n!W00hgZ>P&X}wgI>5^msB{uw+QF8p`Y4-r at OGoo0
z51!5+U5X9k7-Z3j)ULg={5$T|C#OqRkC9fJYecbos^b-v8ce>b%hhXLp-heTuS2}4
z0`{i*MU^<Z5X&HIb(h8yTwA3CE*d+DkJCb=6q0fpw3#5U%=LfIy>C|3J_+ at dX&f**
zVW at RJr8oEcBw$;Ahz|2H_0z7nSpx=aR9C`4H}VMvx}^62uMXf4F2~mJZJWn`gTx6r
zi8Es!cMqqPFTlBjTAm8KDK_^mXhz}MbFL56f&u|<PZ|eE3w_xs&4`O##zSPuVrjAw
zMjL8J&K>dBfc_y4$EiF~+Lb5f2HH;(wr at V4#9EP at m0WBH%6$^cq<JSVC#EZ%ol2UM
z_q;L#81jF<Qrj>okY#F5fPg<xX|s7PDc2j9n7 at A*+;yY+OJL-%Gt&W!!UPS@&oml<
zwmYbX*~9JYp;(kwY>R8{u~-o%!0P^N_r}}Y!qqbBZmwnZ*8yBF-b%=2?1hZw5v1y$
z&OH=**LMxUiSu*v?u at z6x36ks0MC)&ity~5K5kciCfzo5w<It05WHciIily##Uy1M
zg7%0$GclM$b|J5hHGTp!7M$I8s{?G0TN{q98F<<(;A`BgF}~Jy7=OHEJxjbHv6DQP
z;we2`8Qu*i@~bO5?38nW+S}bQPI``^Zs0FmxBwTd+XkNe)2dg`;<?M`Y_N~P8oW!m
zDUXO#bbQQ<4}xNS1XZ8D<4XKFo|`)>j(*$P5Fw@~T=?T8Vmq*QEWnJKIk`-nC&i*E
z<VnuB%stw7u{G~tjo?Yp4H4T139td>Ue7K`ApT@=nhFHFt?Ii`WuTc|%{P}Lg?>dl
zH8TUSnp`dOr#T at x=tS%8)i0pedo-XVP+Z at 6ThiQUc>4GA)4H?w_VU{ITP)<ASO~&6
z;u8CYLn?)+bDHk8bQkk0UMu6~g19=$4^kz~TOx;&V&}hrGwkKp4 at MjH{0AJA0St}S
zs&vu#?`=!%0BR;Krvnd1A=|GX)UE-8(t1yLyjPu_D`WM$-j0a1-b*~R?W=A}E1L<-
zB`0~6Xx-#|(V{+uwD{rB_-Tj-GnZHd?~Me6QG<%kUO&sKyB<t7lsQUPyXZK7GIs*%
zN~VY;LC>dUB*H)>u!&M#BLFPe?gHQ`V%a6~fPu-CFdDozmSE>_9$OOEv00+RMKi0K
zIEvH_k-{%|EWtr=#RR*z)>mji>l$oQU^RB~6b5cJ#ZTmv4VRqXcUAeEd$bI%O7)D?
zvR+c$^9W*M9Gl%+uKrS?27IpPQOC*J9;uiTV_bU at Y=u9i6Kq+E1f9uJ(WpbermLWc
zC1Llyohy{{f~&?ug`s-p5 at sK57#JK>akv_JbE|fJa6sr~Fp%QYO at MYT)@h`QDK=DA
z?)*cUDbq+<HC{31x|0C4(lpcayPp}SlFw+H?XP}D7a5rvY1xPtKixx3L?X{p<r1ax
z%cz?Sak2!QT6iR at s~?JA+HkY30`>0M!RAWGrX{9TL_eF;N(jXT4gV~%NXNyTy{aku
zDZ&*e#Th4S(f<2R#^A~BT}N(S=%8y%_oiF at +Ip4=Q4#ZV3|`xqp|!v-zSO|8<CE!k
z(IxmGf0_TuUpv6Sp8t at C@?MZc+%*D82D0cO&I~9`PGyW>j018~Y9=jOa`0$VXf1`X
zS~hs%$e^WA&F|wqp)*84d9$wPJCDVFQOBNZ7V2KcI^njaj?dRp+(a3}J5CZxFZo-5
z$~iQ86=}-(rf;QaAcv~j&<&tgN<9&?dCl2NBu0rn{OvWO+){Azc&9FNIW$GK(0j_&
zS at wNmmlTS<jl0*=ywP>q+#QUziax&0b at RqBak)6AeQ@(p552fhW3RhW6~(wd3X^%J
zE#NWOU@&Hg70lw;_&{So%S<ncKEr!eeb=;6Dr<t`=iYpUD9%q$rIhq4`nia%LD_Z2
zs6-1_q<3$i-EdmUnsH>TPmOwXtXf{PDE6Tnjzw2ytef4w$JyI5zmn0l=np&Az9$#g
z++q0|I0v7lGr5Fxj;wR&FAKFNR{j|yWzpo*LxQstHwaDF9zom76S>Q8)(IX9QW$)K
zGQ*F)h25-DiZf%;vn{QiK9Uwv+dX~j8t{0>FW>8%iOjd8n$Is at bsBp9*m`Ruao1ns
z#gTGl0=oHE)EnY}y?+%Y^HI?r_c28i+(|%Y7P{QemA{CO3ih}TMD!K)v2Cb23RDzg
zXJVr|<sZQ$-wQ_QR|YOlUNO%+ZUx<@n2(T0X!}!lJs7fkKe^s$yZ9m!v{}?S+u14&
zKAt8_bE!fD3CBi_;CkdTngOgzB>W5=Qt)163ao(+NDL0YHHvFt8lOv+{X$8#H>nmY
z)k6MZThH)a`LnbK%rc(W_ssYU0A!b$J-3ZE0<88vQgDV at p@6N^!l|J5wB7{2q0E`f
zpGS-RGg~?i&(MRBd at 1~YahqlLGwJG&p)`pX_@<2+&&ySanAcSpVarZ}`B>Bpf5oAl
zl`NQX`8 at h}dLR#czN;$g<EAcLPG;01ltq?m_5P{f at 5A$VYHE^#pCp#t282IK=w7n;
zsvZRqPfRkAiilEhu;DA??g2JEobjD(C%UU~Q$fX$fi$0n5{_u}A-BY^r#$~bUM=K4
z-|FCwn|#vmuS(eru>uV*R-z$HI1Z|<YNq&p$jJ$-TXQLQoin98*@QVCi9^Zyiv~Am
zQq?$B?<)2FI^q)(q)<x6ZQ|4zqP<%B-J7lQ!S~A4uM1&pv|7FUcXQN&zjPqXmELhf
zF=#nd%UA;@pVj!)>{F{%I1M-LuTi_JVXu^!e_C<Kg;Emr_5r*?3_i~nJVqY$fhEkl
z!P9KWxV^r!`ytY*^QR4qk2X1y8_E$wo7D}fI6q(3Z>g1-4oEZot9&^~eL7V=B=mC>
zJ36vcBlmW&o*UuIcxsLp-3n2-Kt=q&6U{OPCID^a?Jw{7o?~0n-dnWz`*W++Ouon8
z9mfXs16pi2l`Eyn_kuhO2b0pMW_hP-OP-QKJZ;wA=QunYOwxNE=t{XpSU&!2iQt)!
zC78ej3(alnEJ{luDjV*0BW2sTvj46HKn7%Q58ITRQjb)I(koxDiG%A3=PILII$M%h
zO8BWh)Mv^S+DG{icPb)Wz)EB8Vg0UPV(ZPM<#*_~+4e4Mfa{DjRekT??oC6X5F!21
zR@=(#LGBJp=^jq2m>O6rEiurhF85EbEo|X!2`awg{?z33HyrBgjDTx}Q}FN+;%EQF
z94srhb7euxqe%Dg$xW6G$=XG{wp-RwJN at tqMT7xO{oM~NnpXe|`#b+MpL932v0!hE
zx<XR$W-99S+u}ca^$JcX1*xvtkS^>PddCXZQ|MvvmzIJi7)DIoolKz at w*a)<GvV^s
zLZAC`xOE~0<lZ?At;?qrplaXxr)s}d(_asBE1(2}54(H+eCUK%sQc{3Y|yj2Yh(k5
zx3M*N{~6?4je;1;d&akznuicCs{iQ?un>OpKS;)!@NTCR280_T{+r`{@Xj2rK_N+j
zV&CsQh_uQCt0XJ%{;ek<f<d7MHU<0l)M&#+Fr{tk80MsY3<dE`hku&GJ0QXl*7V<e
z4)_hQ6Z6lc<gy_6J6L`BciMl6TY_q``M=juV?PNXmy({YR-`#lZoat&MiYh8e`VvB
z$mqfhIJL|(iVzz!jiamNNSkqFOwhUP)Y at vpOZkf|RV at l#r at w*^@Md7g6|5DVWDK?-
zKgY~A8#hWHnS9|a-z<VE2b#L*AN+K099w@{Eme3fBPb}S5WMw5%8~IwKqCkniT<;b
zYTP!q+QEs4&_-X#;l{&Y(d6TON$)Z7djRnPB5%LC3JzVyfcVi8#h)zg4?`OJ2?2ZW
z`YHBP{?%85ijQ2a*$BdPFQb1Kt3T=Z9gx1TCe$ZjtH&k5{@R7l=4|Oq0xYGkf&|2p
zYNN9Y)3rbl<!^2ZF$45R0+LPD&_P8zhT4x at KpKhE$3UAWczAfU9 at 4|k4j4>YdX2NS
z&68QSc*9M#&zmVQ5+Lv$<26kRnCH7cc*Y+Nn*PF*DIfS`Pj(R%I8#qwYfS}&h}}Tg
zAeT<Eil^-Y7mJIq_vQ;9=dkWCE^0hmoaj;>3wmyd7k at VbDLuTH@-RVPuei8aSvO&^
z`1EJhOP at iKgJo6SyoaM15a*n#D&>R(pWw;TAI_-!2k(C9{9~{jUVw=BmSaGc?)k?S
zhw~2B<>KMD?cXIE0e4?p+XIWr)2OR<3{&Wq(pCDGJx6cbQ5$=hE2hQD5dCzQE$a1R
z*os^_D+c~cM7QBm1q)yPl@|ZS at W%vUwbIH=!+IfTm1e(TYdX*@uWzo|(*bBB-IW(6
z-?48VA}dQ{Tb>f)*f)+~f87|FoSAd;wM~EdwQL%%ZKv;084O;h9R5kM10Vun+8Nuw
zvj1EDX}_S*sHwCAym`|M4OD0g+Di>5r#$Rl3ffsD?>%7EHC_?;wt<&^yg(kj_hNMU
z+rxU+(%?QhaM0Neu}*u#$@~Y{(o-4xfwW;orr_Ku^o#5WJPP>)pMO5l23S7(9i<j_
z at NpV_$ktkudNu7<Me-swpcneE+;(cK1WSY+_DX;S+(MPlJe!_r^k!u-AtDt(#oSVD
z(6^MrmFe|-EToeUT{XD!I=ir+;}0@<37CKIeM1DiI;nXmDFIc!KDe%UZ9GUS4laoW
zw(#~Rrsv#7Y^k<%i#U!R^O*ImK8L9l`l3}(Arldw#v;$qqCiccx~_}<FdojkY#;T1
zk_^^IoIPH2{AyS)<;zx{ABbgcWG`Pitgj{lp!E7A2dm7f7TY^*CF`$x_Iy~Jo(RTR
z{wBIK7|LaT^5Dyj1TwR?9|AQ at mHI_IGiLRQ)3h`+A5m)w(1G)o;G!34GY3wMFG;av
zD at 3WCicXEJ3<?Z-&|b?ti-M0)pl30^glBc1|6|gY@#18me6GwI6+g1|$_xe^TCKL;
zQ}HaE+z+;~bV25ty`Da~&ou;%<5)%{DUD5XQs0`ZH3bahL7#&-xP)^b_5fRBQ2i4h
zf5US~CiLP=T4%{P0->d)00M-UZx;P at HwNtsY$)pmY;Yg5Q)Sj1pt~;J&2pO+s3B<>
zHxZ<*<lL~N0=g7`O(HP-q&OB8y>=fztaf~wt*K(d`OF8 at B!64?Gr6>sQ&yM6vrqvo
z0sG1-^VYP`0L9pI3?F{z_9o1IM~>^Xpmq3L=n37MbD?dAv)a+a>amxL9(NZZYm?^+
zsOoXdaOjD~#ftP<!Np$Y`RD~^=Hg8})9R#o=1@*(psKa*rbCY;oaJ%bDM8r5s2fse
z{ALK41??B8L+7Q2*%nt&*c!G%Djrr{drz`9o+kA}U~g4*3eL%V6 at x3YCW*^s+jzoz
ziFO;8fKr2kRf5a!sc6r7!~;&2F4T7~e!aGv#n#)+mcB!lEDo31g`C76<$wVJ6)Jxp
zB7GKVHw%+!fw=Yt)trkToaG`74w^TX3gFUt&6o84oA}m_lMB}byE$w<`l6js@@zM>
zVD4;zLEgOS!9nKYF&W^ZI8j>dlydt~EhJRqYwQBtv3<R*Kxi=f&2v&HIdU>0vRX13
zzKEE69{fvfF7fOo+az8aVr2*v*&EJF!PWy?E1_pRC+LFE?E3l8FUgtbPe!HBJWf4M
z3Z%#P_<D2H`cL=RwiV~SBfD2Vl}{#k({;6k#QD|u2RmU)%zGWNhNyq=`jU2E<%^}5
zi#IL)hZ=i(t>;Nr7ls*!z!0`mQRszXo~yJ6t)=~^HS)$znOn at 5b-cEjVu{^1cBQE6
z2NNYzjmC|=gB|VPF1?I1)Fd;1R>!?cg$cYq%|RtD)w?KM+tBmxUsC#-ai|jEI4pW4
z3~cb-MLmM_%_Am7&_zaHT0*cSRz!P026wZyz`i at A#2(EgKgbz+$FSATT)IkPDq&xA
zWiV6dB7MUAH)Js8?CIcn$IcNO8gkL$A6SGnhJ-Hvtv!FFaWSxZu{js2!K}MUfgRkD
zAPDmrh4?~z_ZJsF4CLDpaHFo;2===+`~9K^0qH4%;>Oc at snWBji=>0c%W!0sboqdY
zM0qiq+|>2lBr`;NzM>Sd@~yhT1T$2&;}oo|4~;E$Q8*XH4>KJ&)ZpY1&T#V$l?4YA
zbo;Nt9BpB8uAi@);$JK<REOC3*Kn+Pj$~f+?Hq9~Lh7Hvk at j;T=z~(2^nWT4_M+N%
zA8g!tUM*3MWAPp3%+wP6tN+)&&*7BH6*CZ*aMnGK%*b8mS-v4+$I*x-ZAgWT&%r+d
z?mqWb8jIKUsV{w(K4|3hd+@`~5)}8a#l8Z%`*Lc!XPT`SJ!HRQ70!lsr~?Pc(leQ`
zzGGzZ7nq~qUh9#T^}|dv_QAo1vxOg1O#hsbp(o~3XXPhfPB>yO+1Ye8tjq}O*fhYg
z&Z?h;S at T`<JY2tu+eWsKQZqMagS73w`3jzMQ`*}os@<h=`DwrnM=Ah>8|V=Q>de;(
zFHOd4a5bt7EbPKQB;(kMXL_(@T^(ZOf2#BYx&9EfJKAz_)-fO3>L#^`rJFEIJaDP|
z&zXk6&guKtO at t;cfu_jZBxkzngChKTbdW3E_c4Lki7R1?Cy22ew1$*Bac{BI$+L|~
zPAo~x@(vr54KXfM>gb7ijH=!2K#6hY_yob{M&HeG0$8me&AL)!fyJVtc`j4t2mO8+
zsm=$EOL`wV|BIi^ZVV#}v9sd~u`O=K<mf}zkUgJ~*7?EX%Ej$&cJto6s%EK0EV*=m
z_<3E+L6eJrkoY3xzsoq3?V$CrRPIv17f^sI=drB6;?;%c-i{rTS!HE7l7wX*l~F?_
z8Fh+?#pjM~7`@ouyo{T*toBHFy5?4-LO{d9D(%pBnb?K^1q$NQR<|#chWM}IQ__eZ
zQWHD*;Gsa!{YT!v>|91pguwOyYFoOnYFs?A+jll`Zf9Azb!o6d@<M#>z4Xc4amMk~
zW at l|u4O!}0Ua+(ZR;WqxKV-jiwkfLoC!ujE{g>PtW9bp2Od&ky1j!c>iQP;ggGU+1
z)PZIryE+_;`%314Z2oj`l=1v|wJT5FPV>J_<R5$4dWM|~Ua+XV;AH!gV8mU<c*?wh
zL{@?HscX-8Jkx!~(hF{%#{Zbr<13+uAMrrWrTvNGl^<T3#Aaa2{Y}PcmbO%Nh5=(H
zc+s-S1~&IOY1t%5R7}O>>A^8>d&iSMrWF4Bz*_l1GU~EHB_jW`;;Hm6KX!i5fBm at S
zLa&L at n31U<sJ~FT*V^_6vPysTK!+nZG}%1!<aBRSzl+J!k>_7N>t6$$^FO=5r2YZQ
z5#xWTs|PC9hC(C*u!W3E2C<y6YwT-6jIF_lBRQ at E&=<C!Yn!)@Z`!+%{q6i1#zHp_
zW0q4l8F~UZm0=g+XQ!ZtVS<*)fy>7BqJP$G6P|(LweE8qi>0r at J1I;-jLpFU=WbxL
ziE-xM`5e&f2VV at M6v<=9Lzj+DYBr6h9FVg$X9WnOTE&aGXWg^X&*ptgV2Z&B^)(k2
zA&r}{eaO>~hFz@}-kXfx^kP}Vn`O-xIT44&+y8^PuZ)YTTl?NLDyb5Z3Mxp0lr$nD
z0)hh44APB&bPR}yw2IOxB9bHB3_SwUokQ0ELk}?Z4)?k5bI$ubpWbipC;08zd#@}0
zSFCHTy)Ies_tKiU;sShTkCep0c-q0rDu#1>!z4ode6Bt6BnXuqjLlHgvpQ4Y*5r*m
zgoe-K;qpI0;Pv>JWs^Z1=a3r;o5O<I9q~=X#dFT(cOfx3%?kd~v{=PrS5GLsxS+{o
z2LmmLlfvo5uA*ZP37^q|K3+V>Z$1IVV1k1753 at EAxe+zHXz)xr9&-ZTe&UC*E2dk=
z`w)!Lu%~SDDHguD4z57M{a%Cq2d0Do%(+sX99*7F7_vH)b|5j}6H8lHriOr)%ou98
zyb17gqs3|yg2nt<02y}yGF273yG`pc2}h at zSAyX|tVW|pEs!_sFbJYXZQfKD4XwlK
zeHK65L_2Na_agABJ6V|6T~0sG<#l`m{;?T;{Q>qIFa2YG5?6><r&l*-)AaB2R=}HV
zVck3fuZ-Zc?nw*Z6H9)>wtcdWeWUYP90kS65J;FuR?FkR+DX*#Ih5ru?7%k=b85II
z4zjCEwd-2oCNDUCW)-tuhlf|z-%+oSRJ3As)n0AbI`62BYpAiu`<$P_w{hU0Y&kbD
z2*UKAmHms1L5d;ZSZg(Hp9PH2!MI~eR9GODaxZ at b_8rWgBKT=LIZN>7$P-;CbbKdI
zLD6IgAGTHCt5Va8`so7a at WS*^&a4HP`fqu3BmJ|PK3_lm>Y9ignhSE<SeqB4ZnBxc
zLqAZ2K)C3GoW_gv5wap&NITeA*7OM#*6&=_Dz_pDT=oN}jp;wlR`fX&mJG%z))wlk
zM^W`$lf{EmDStLkRj-4uK=FdG3Ee>)KHQcu))TFjc;dH3v5f4DMZwGAJApXGQy#%I
zMb>#i91d(vUi;!vuWr0V&{~8E3JW#s2WO%=PrFXT%O;PaF(|kPJIZwkhderjPGRv{
zo%0xcPSfN6EMO5*KqZ4tRu8C`&Tg)4lZ{^>BD)JNa~)jCj~WWwSDSe{Wj;LNF`0Gj
zbOKTQ;v1tVJaQ;Co;i%fH>468XNuAdZjXe#{DV?o+2rn1 at c-`M(}L+KOe7`}BqjD2
z-5Jl#nmNV~96LY%%(#jkS;6{g<Fw_oBJYGA`k(INd_l0d-3e at z*xVGl-gPI)tds;T
z;p_l$du{$%Jm3uS`CQTWr|AwlW&-06XZ3$w%he1G4GTD)>32|nv4Aglu^!sQQqGpp
z8Wu2Sjw8GQ8y9Tm+C099p at r6IgOF&78)gC7r6d7fc%ATBMK=-R!rvjmKE7EpJ*bU|
zwUc^y at e|qkFbWjQjv)G3V^du^zAP6#R)wd=`Xhbb6a~gN&q58bYQ^i=kX=q*U4olo
z39K*$?aWwhTM;}2`!qx}?J%nj&v5S2X^uVFBZ}pif&>JBCU%-2i2i0VFV4az0eDyq
z1Hzyf>BjyAZ6CgC at MRO1#z1Im8+2Zdk*(K1VV|2b_|eQwA%PnwnuGYN_?$GC%A)6W
zV1&_Pj}h9}U_PgPLFa{m@$RLl-RBcImt*r9 at d<IdQ;73I%dCBcr(1ZUV|Ia&Il`bX
z2^Y&PA>{Fxx*HwT8?3z#nB~hsASB%C1WWD3E_2fdtF+W)??d$>&Ta|AsRIucn-i?r
zMr~v{jhDksgK=u{dOtn!9N6i=0kD?^ggnmLAKK{J45BftHptl}s0w at -GOLC{NTE+Q
z3~U0#EzD=gX?Mm9&?g-OeglgnDG+d3R#+!dtjV<8k!_vK$<EN6$8vg59aJ+&jV2j8
zncp8JhCS&caX{j8R93fs^6Em)W_`gu&ABE4sN{7CcP#6JMs0SA9tlg_EPM_PJ3nZ_
zRU+UmIZYl|6vgN7DPWw>R`Fy}PVQP6q4!iY1jP!o+}pTyX!yk>u9J03t`_bK??i)g
z(C7>}ybBGtM?(lUyu6@*?O!}s^tJ{Mi>hP&b|yhT=D8!`BqZt+Q28ynN>Fa1f}&jI
zgmhd)LXDKabyjeN;>qzJtadX^Vv!Zz{FuE|XCPGS%>?EF+5>M+%~sZIz&{$)GQ0K(
zdmdZY7s?&!R57%RWQHAmbl0?kEe&;7uwbD$^IS!IXy5TjWAzUINSH75DiS}`jvg~A
z;|Xqr%KS1QiHJqY6JQ0sr)>(8?L!Rr<FHwE^0GPj(kQ9RCn#^i6#Jh&AQ!nT0e-n<
z+!W&8N7+Uc0`U}okSX!rUPl&P6AgV}7_Nn-Lhf$U$&;RDHc-~-bbU3n>jc?|!`H0^
zyQLfw9J!<K^P)uhz at q4AV>8pyqEpXcNVj4Y0?Y*jo+o+lpz|2}%mlr#KCv7RvOh`n
zzQJPgKlX`g7=L6rxXWaB_urk9Zd40f^S(y3aLLnzVQV at -2US|-wB?`_Ju+hKD_-0R
zJ`LaHn1qyZ!xIqG6H&*GtDC<XGkjKXDehFVy);`IhgAdlSt$@K|D1d+9EXv at JXLUW
zc0K%dm-7uFOT<63DqFB>27xkhdfJ at wV{J#3jG6Tk2UEhwV>u+Yc-o(y5U;Ee<Gtza
zku?kr)aVB|7&<Pk5Nc;kMSA3X>J$`ofZmeUd*zIWfq4ePg8h&<;UFUvBsK78bi<&f
zXx|C1HG$e4Lkb{kim~{8c+dSo$WT3W7 at F=nT(N1_bx0Tvb1__N)ae85-6SuQE($~$
zCqARD1jIaZS#IQT)1l8F?S*$cL1fWjU*xXUfqb{V;*0KL3j^Jr{u+fq at Hy%U at tG{^
zG7Dp;RmNt*aHn_o)My=7`kLxFWS@<U_`5d8H%nvc$(PnWpw0fvW^>Syk|`ynfqW8w
z$=On2I6l1b at G}>QM;gq2qlE+8yQ#hEnFc#3Fqn7BKT<WTIWx!bA2RFRW)GVTaNpnz
z&S_Y4_uwoMISG*Rf`Y$Jy3r`&+au<6MnIr1K9f$(1C6PHgF+J^PQCTCt^k))ofH;9
zWYT&WsuvyzDh+$gEa!cy=!j8<KE at -L9fR=D?)Bh8rbBbTVDnG7`43InwA((-I3p6J
zL#HM*-q1%8{WY_`DV3VElFql#u6?c^FNNG_T?}JE58xq<Bv=*~j5f<Ne>~E_O``!r
zLVL6_3l)XXR^2G2rI0vK49?4^4bF>eida3LfJn&7LvBpqpWtpNU<iWnR?}TOf-}XR
zukJMFmSuIub%O44MrY}7Aj-o$jN&_WA&r7eV at F-A{>%t)&p^)`3u6MF98R7?g9FOj
z4seqF6C;q+qoM;3Gy-4HA$mhy2Hz#>=g5&zmfPj$VFdRqaFO*;vcd-%Xj9Zn;IiOa
z^*CDGoZSKS8z;<Y1B>j^C^!wy{@3r#<6+=a!ypi~lcWVEU7poG34smU5^t~Ukc=-n
z#v1pc5g}Mn>_oI9Uw{g2AIcw|74&VN0_3zk+F*;{f!r_4Dw{+mEvncgX2sieD{@Bg
z#UM^|M-iv+-90!VuSI5&oIAoZ8*#Bs9RC%XNl98JB>cZW%vGb2)(c-P<63p{hHIC6
zS?4T$B4>=>scdRbgqdb$l|w~)my^$$%3`oNc*4!UWtl&{q==!N1rxwUn}j&w#JQdK
z<zTn?&~UE`OAzJ()N>o3)k)F<13SR+Y9P7Kw^hMl18%hwL=o8DV01UOeoNnA)%?Q#
z)ocOjLv0>$0v%xtiW9yTW4rpP*f9q${HlHf^%e at 8((Xi?&k65#bI!!~>Br)Vl^tp{
zDwEIG!H}W$y6uro3{qEZZX#|5?7yn`6Ge!SIGc9-!2A?c%6-lOj89vSXv&<E9J#AR
zeCfB6d419C5~;G!UnF^jopp3Gv)@d`Hsn1wVezW?DfsC6QWx(fUg~G}ek_o)eG}&`
zvoQ&#uZ|&2RIUyeG$|MVT}_2LY;WB7V}E2zYPEt4GDAs}+peV_%6r<1AMQW!%+9FK
z?i|wIKU<4k9h<XCd-_AlePv8+WICo5ES#BW>nF^vh9q1bcM~eDU)tGlCn1McT$*Er
zD^<40@(}^|6yL(>x3Im6)Yk>Ard;-iE*}W`<0e`UVVT62tVJ=b*NEX$AD~HN=5ds;
z+g`B+aDm4lp_+`semv(IV6i8gCVHAo6ogA5&ij3{5ut7xsCd(s_0dFb-4S^+iuF&_
zOs6@&muWbn{fW{COK$;#ZmEcPJ_s1X)<;-NA3EKA=(T_OVFH=)t|o22%k^o!0#8+q
z=%lz at gJu8Hp9yLnFwk=zS*ccNf!@@X$Wcb$hY!bM+|~N`gbSK~(Bf+?Oqc`i;8B*h
zb&BcjM4iDbLGXLS&E|Z$&p2n^X;><ZM1W&jk<O2iT^^-VdHwO^rh;$S^Wk^~cKo^*
zBB~N0%S{|&EtaBbs|DzQ#@GNkJHv=8 at h)xQYEqYjV~iB4pBwTBOBFQtf)sxXP;`2Q
zMeU50zQJEzePzYVlc^^40>iQo+Uf&Ro>A>6goisbtKi)@ZHZ!#c!ttAyH6(=j-<wW
zHxX*TEY3g=HHky;rR-4gcUMyYawv-Rc8B+a2`{R}{O0IIDcUfmtouxFIkVTxv at Qd_
zi)AvW10UKyS1c#{B4EscTX!BoYj6MfqP#a|M<47-+to485qT0;ivcNiEm*N?AkoY9
zjpsDY)mONYnGA4G?@PIESgIV(U?wJJB`?o4;!?~+ at 5O66{CPSLz#p1DdeF-<earBH
zQSFlhrdmu7O7yg6K*aC)TmJhS;Qnl0HKF)*k)@NKy_IPgBo{h+I(200zgm0uy8FG6
zsHS5pD*5AbK0y_8<4+UK(XA6Sp-E89Tf5U?Ik4vFCq<-6Lbvudy2O^t+aQi=IpBa7
zx$G_-O8I(j2_JT_v{bm6gj&q5k>8}OSTL1*^(8DEAGSBI0UQSL(48;({6&kGC`Hw~
z>RS4yLYWK7WA1HPgo%M*LR1RJw}qfHrN5<kIq)sHUX*h6^d#})ml9{%kdG)y1x%%5
z_h_>^7HIJ#x=Eckbu%{nKD!8Wm<F#tplU8Rsc14y;_iNnl!@MGaO3_sAt at f0KYkod
z6rvLELU`y7Z(`eMgQCh_0S|qk3#V<zw`c4 at 3``s|u|}U at rns?X4>Z!1 at n(N4e?G$w
zxD>(s(0C$3O{!;t0;ql9c}Z6=g8mGWq&ERYE+3>dxaVno;KAzO7s6xgDA&eRWxpYt
zV_OFxk?>19_fNl+msrctuBdFKm_ITPxT?ak6R=mtBg$2S6d{gxG*g_C5$##EL#(t}
zc at g$MI<uxA){3GK&?PkSKCKgG{@1Y_0Y4W?Zino&#*Bu^vA#nt%1|-dgU-Cp%{u+E
z&0I^IUIsS^tYer58{-t!p?H2doG1CeKyPk-7x)Qrqyd7fUzO~AJez#nI=rriScw>z
zebKuuX*^?4-~5GN3;M`!D*0aUSp_K|yo)6L*p at ffrZT&d19~M#W*tOf14tW+;F)Xy
zUxzgBvvY5DCXUk=!AG3eEf$t0)!70Tn$xrV4FZ31bm}x6go^C_zQU|cq{PTHUrP()
zFub!{b9tU<@s-=jwlKW~#~TQ{|8w3jOSryt^~+hG5`R$aIi^*4F-Nkq15dK4>_h&E
zQ|uTUX1jlDB>t9HChba3dRG2$P#>3oR!6By-#>c+j+eeI`6@)zo(d><o<mbStlf7?
zco<d_{Y|;XBCo7=5rT6Um%F;CL&u$biO5gj-l}l=EV`CJr1IT0CeeEzZ^t+n at zWWY
znVa at _SMsgrr+Vyc1Sqz>`+aW-DOY5VS5A@^edp_pPVJlr-#4eaH{Gh?(X?LEsZTb&
z#F-qJrJH_DIVr2Vh6bB9v4};=hvpVbDaOR9Z4L5tCG#if*#(HmCbahbxf4^{>n42I
zmi468oM9_xVPD{ltH^rIoAeH8V#V2rQO(PZNO at n$;?4pJgZ3c!<5RVYy83`hnoq){
z+37b<x&1jxR2GJgDWhioG@`$;RUFjL=gXD;Iaa>m6N-S}y4B|tVSat-<wR$$vl(z{
zBA#KBx at q~^OY3$@xfce?==o%Lvqb+HMrNvIv|FRFys7ZRb0f(yuY@`rfAd5Xv;`Si
z36I^cC`8}~K3;8Itx^##9LAJwP4@=!7 at OsXLr~$6th4oq6;Ss&Y=ag-cY4c{;9tQ}
z_#v6V>Q{nCj6_NV?|Qf5Z=h8}K+&OUTTzoO0#$!pbE|^#5E?6Zdo$PW;8J74hO`#$
zrM-Dgp7$s(;^fx6IRchLCUZcRa%6wba3Q}a0paU^kYr at QC|^7#J8_ at 8jp~}|Z);`^
z_+{FjS8JiKEqVj$=I>0!SSqR?hT2leSz4T+Kk2*|?6cWMXP)dQ9cYQ}Yi#DpbRxea
zQ(St5+=7F`JI>X!ur~AioHBezcYDZFJ<n{2ne{mFg2-3Tijl1z%M&pg`V=;KonN$`
zY4FaF(RXOF2Y-spAp1>jW4d)R&>`{Snd~{z_Emu9l1Eb^7Qc`^8 at 5BNi)=)p{B~|`
zTg_PB at S-~sJ1gv0Q*HL5+(tZVeo@=l7xHm3@%}uVNe=J1vufan__~vq;vnp$At#l5
zQlFRdKx&I%D*hN3>IkTe!o#0-l=l<v*S0>oofSV5_n`^;coD7_(ah6nZaSqwd7sd@
z*4?I*c0>&%=!fmCYB2cf-s|<MrG*xElcY;${ur;XY4d&gg~4NVa8AeZa~stR=0TL%
zk7pbuBfPAvoF<a7h^)Yp3Hx?u3|TOK1shkssqP}&`MtnheptZAY|{gu-RNB)tr&&H
ztybxuV?mqyH4q-)$=!tRl~o(!kn_SdU?C-9R}J3IIw(BTB0#+)^Qt>IaU7-CCcsIL
z`kKhHc at H|1J)0kcJ?yPeHo`R?CEGke>tZ&*z9bKWi2!m{fSHkKp at X1pP12BC^Z at zg
zE<Eww4vN{mUY32gU^-A1)B8}Hi1?da&4|s%l3{660#>h<KCw=@$GFbi3=8RA<IDl4
zjW*nl?$mr)2DiK$9<IrF1Fn3e=&Z9nf!ZTK`dWqLtc=H_Johx>z*o at hx>?)RHc3+W
zQ;p;MxXe4qQ!l)Ea*U<W9!CO*$A1ilU#0bw7wU}#F*w0XI*x<%*&|(4w<0B`Fx-77
zo|`sdTtd)#teAUj;z%40EuYgkb<<z6Xc~_S4!fb0>~gwD?a?%V$rD9lps&64cu|XD
zGnR1p*R%3<ssy)%Me5pL at GxfrnJG7>q6_$$=WJV6&2uy-6e<bX74 at m}PLT9 at 3yZ1s
zbo4m}X*sQtRWGR6n1eZdia4)PO)*c}7c{j3)g<;=xCSyu^50t(1+Tbk##~`FKg)vc
zjRia$=zXw{5k#K1q_0PSc>S=tm9nvi^~go)4g5SZ{MJGW$EjpdDV{dXUEja2RZ=Aw
z9c-8zq*y%ET*FY0tMEEtCw$S at Eu2;;UuF~Vz(80x0{p!;m~;x^5b9}$Kxsd9!(=}|
zo`Xe`?|uC7CeDFSt1xMpP3TkPL#N7fWpP4^;_&`~)h7yUeijnV^Ti7DM`-PR*4Jw}
z=$sl#;B(TJuUx-$L4Y5hw^%{ct+*ABCq+ at u3VYrdaPS<kOA#pr=?4INt>~c|zpy|R
zz2UT!)ivskxkhvI6Ib*2<_M|Z8iExwztB%N?;Q;O79J?vIUF`fQp?DcQH<gYqGciv
zS*AE7T2N{|^`xy$0=-Ox6uAl-Lu)|6+Pa0SJj at D=q`-GswmsLLuO&Vs#)0Sk4X5WB
zHG>U)VV761lp};BU_-K0_e<;H5qPN=WwwD)CpqVs4~gCmPLs-ZtMC9x;)Geg2Wd^i
zvix3eCoS1Evs$2 at JNK@fL7W(1_~?9z1M9e<&Jki~V at mM50mOJO!e6RXRV{*U#uUlv
zakj`JgY#ndlp9|@?9vWL5$uSWPbyeasJidxQdEUI!;>O|GVM|<E!!WW&!z#^L<a<i
zgD;OOV6`z#(%*UFdM(QPNaJ<|@KM<UZG40GM81&&WT^1@)ly4)k3Y)UR2YVY*D}hB
zZT!lvDL$X=T|onwgMCoEa5ev-pf at g}|1wh9gtD2i8uw>)#KxC8>8`G!W~}A5z=(OW
z2g;Ri(ER#NwUR)ZK1>&Jp8pj2R*e at CtFHJ^n6=ZYj0S}9B7AXmue4RAZExUDi~14S
zeL##Et^F!v>HL>_*f*>OYz*or?-}&#OCye2#Nt^{>Dty(($dFqD$LBpH??`Ne6#O4
z`}bR;BO9m*rpc^69)lnAeYQ4eq1V`n;smo{@1An6-U(>L7n_-K<y{7;;K6h>cDj<0
zgsPZdFSz79VaxACgQ9shSr#|v6~FXWTGQ`*BVKRfQbC||9j8(}CZLi744&>DE!gsh
z)CLn&8R?S5lybNn9b2~ycbOz~_~V8fn6+=9vX%&5s9)|0 at G;OwW}!M{SvovpK6!Vw
zutOpLo-lcYRAGRzzUQAS35A;JL!ldDKLZX9BrgE!3GBHcUbaIwZ=JnYKi`HQef%-y
zQdv9?YPyJQt653&KaLN|eG&{ywKRm`Ph;`l6iKZ6xqW}r-V7U>L%yO{S{lUP%p`L?
zk>uXUAS!QD$?!fm=|oB74eq<ayVRVTsZm>Qi|uZ1Em^4Gw>Rnx26-Q*P2~Da+;g{I
zkO-^_Ymcld8mit^sKp<Cm+o%o6>>En2$8#jNy9N%8N7RE8(@0+x{oj2yoLpAR6!K9
zq+);Gp*_^#*Cgk(I)(zh59s6bl`1 at G0uee;t~RG0<I5+*1n!57>%+Ucj}g}wa^vT4
z4^GfMhhLgZ3bUx*pD09YkC$|9R-wL~t at Erht!v{T_mVh6jzU;DOO3*z^0kD44h7zK
zOx<USQ0#{^JhXY$J5bHk8P at dt(>R6GE`J82ZWflpGvrYb_MN#uuVN|MAjc)+v8kr)
zxj(FCu-=;*ce212*io6gs72eoYQ`)dNjp9pQB5(i(2)uolH#M``SStxsQ}di;e_p1
z746q}745YS;1i2bwpaWmwz79x$D~UgqqhRJAttfoXo&+s4;%`)|KUOYV1*U;vkxwd
zh6&P#4u#j4_*{getPUVH?Am>ZtjnjSi~|i*!YE2F)B;~^76zmlxsGR8N4*Ztt;B1u
zMhXMK{q-T?PKZJ&Vm#YrE+}f*-#y{rTxaV%X<|3CS1|%hkoq-CGl95__MtJ<Hv%E2
zy#$i4F at mh6HkF}WxV-5aQb0wRsR6e>(H+7TU+%m+w&ZS{0jkz8UkrMCfBj at 3;X<D$
z3V}z52?yWrB=jW`6N-B{(=QR$11&XHxv%BM=dYmVg*%r&DZequk$L{rM8 at FyDvm8E
zjpGITz(K$0@!8OM_TWne+y3~FaW70x)e#!nwv3;t9~(3w1-do%%Sp`{U>2oZK(RRi
z)w5SBSb)^@4}xL!Ji>0*fKdYp3P2lT7QP!x`z>G7=YFs2m`}YkD9NNe%M&rt-Md at w
z^{{@pJm$!NP+J3&|9-R3dmP_}A2C=k0xQ-BpOg1Ppq%p)aHahH;L`vxrD}>Mvfdho
zi4MCu)ipD%=qSeIw$n^<cS2w4qt8d*(>gV4ISs<B4o*Dh;W>88Va$n~lr^~xyUItn
z?Jt;TWu2qUUF7dY(moGob>ywTOQwi7`#fU)B$n&c*$?f=nKki=F1kLs&teVZHgq@~
zaPXa(Wcy?QCyD|Z_mxk3??Kk~&zNG&dYTY?@-pwr_9V{SVzQKxT@*uttFRS!8w<*c
zKMljBIKwA3#iuE?=Tj#IQAK*juS5km&4NfYn at +kztYt@V1XEv%)_m}^Qy(SFtXq}K
zU+6trB17}rw0%+uDtBKnxz=A2cclxmLixwpm(rlk%Hqz~hV*j*9{Bv{budY()>Bz)
z(QDhVN&8)PKg?!U)VeO&&Yk-qK!TbPp#@Ojz}mDbfhc-8clCY`?>CeNZ>{QX#1jep
z;Hup__gSfYm}xq9H?FDF5#JeK^m^xNM7^Y&Fd?ef$kuHa)^D6mfjlNk{z&8qdFa02
zzH8R5HvtrEH)$%=`ReU7{5}Sm at kAlOH*654CK2;Bp2#nn at t0kan;5kTZ()OWA$33c
z@#F?J*-lR^?M3t;vXX6m!o66mOHnpey>?eJI7d9DPDd0OdUM>_g--%Z7EVW}k@%-^
z_ at in4|G-M7>z4pR<qE)Z3HYp$24puEDg(Zp^@#DD-d~Jn at 2d{%Hs42LOVf|d2#4!?
zrS94$+T;xgFgPUDHOVMe at yEL5b$}myBzjF9mQ_1+*3Gl=vhFbVWrrA0PC|J-2Jc{+
z_Q$chp>veVHYlGi at MQ-6Wei1^o{8P3gXRbhcUgy*za938poFooZdq-nkLxD-M(@Pn
zU_KuE&{K-<-#71ldbrZrhMxa;BIpq)6d<(tL$9qRV8b8d(-yY7vc6#xKUKkX{mI#o
zaIisTqiQ^Uq;^=AZ=K&k==IZQCgd_x>bKv+zOveO(PPI(qLx8oI37KB^;N5-t!s#U
z$f!H-$3#*~TN+oJC3uwYWx!VCU`ghU{66cR5m4}4leTF31G7PCbG4;hc9fa3TJR4n
zYDYHwf&R4&R+^B3m8Gj&n|?90+J&Ff9zAp}8tI!^^#&Ewe7Bkcalvur{b2r5v()Ez
z-%?$*!{1Ej_d*Ps at l+<U7M84>SQ_$k!qS%Q77Wa^pLTuo!dlI!&dIzPbAeUy-?QOL
zao6+<JILzho>{GwF~{p+yr~v>M)ws#N44H#CGD&8Hvl8e4?B&M$J&lQBNSN%qn*_H
zW^Znce?u9-+~xCR>{HZZkTa>#pt)vM{^^=@#hK=4(7>42w`L9o!L)R^&+96KvG;aD
zuL=!*4s5RNs4g2MX%l;5UIP>QE-U^EzCyuXXv;0AVO`#79{ALh-#u<lC&S9jD|~=<
zlV#AxFb({7S&k4`l-=lo+rpi_SA92`+slh-i9=TIq+WnY9yo1j+7K%ahiLkU_U0vP
zS>4+#LK(P$9E0*!jSBWrQcitJsgMWofEpegEUT+UySR2QVP_+#5p#+Wc7=s!84lr>
zMi^j7u)8erpJtz>)1pIxhQ at fs*x<5Y%+|Tz<E_xKP}g?j)65_a62&shg|U33A*N}`
zo!NJP^V>fB1)6Dj%WkR1iBnU)Z0AW+5WMK&cF=&rOAH2l;&-dbAWLoF>Xwq3f>*PK
z44xBgu3&&MMo_P2X@?6`#S;C<c)7(<wo7i_R|VN+s^Q+-I^2*fR)xJsy9Z-g(jB%a
z0P6 at vQ)4v9F at UdqTjKFtb&>}z$q}DnnUStP)-7m;UqQ4UYD9sIp8~I!Xtlf7b#e}i
z^)TVnNvIr&jm_&s3jvUo9eD4yLI2s1N%%6T4}m8<C0-4^wgVksR>Zb6=|cxf_5KM2
ze_3o8aMLgH?- at Go80VJb*^b?F at dcWxX|ofIybGI0jNx^Q!M1+Tt%hMl(EHiX*x5Se
znY<od2fv^tyC_94y3{UH4Sr=H7ez*x_U#5O`W-dz>1n~h6CB_X&hQ(Oy7C+5k^7LN
zWpGj#a_;PY`n>0p4I`?XC%v$jdKhCE9^*9aRnE4=N!YHw-DKdZi-~VTLnGW((;vzN
zuY6 at 7G;jAuPjKU)^Y{{3Fn8%NJ4r~lG}q!y;$TG#4j^t7`Bo#%?I6aeEJ7CoN2=YV
zdn8`{<>>Q=$8D6SB$R4x4`pf$OAW;Zx;E8rGCvkDdS$xL+eVZV*VYQW{j^ci$D0;&
zi|x;t?sp~mJ680h#C0A_MG-Gr`1?81EJ*h+BeETj=>|G?X-VlLJA306tAFTsRx?Gf
zOq+<XDVqvG#&6%Op#ZwR^>~V2jTJ2D>tfg>rE4Cm79R7I{-7lC*1mG^k;E93X14Ed
zIcJ(43ce|Zf|_rAR`4kXrOKw{B~H2YOo5u at O}Yxd)J$(a$6SZb??d;9%7KsUO7N#K
z;5<%zgE&q{MC$rc*9K^)s%>dvS`qRr at i`_ZMCs18KFI8kQ;@PNfTR*?`gIV8f9i(!
z?*Myf5kA|q&t~^_QegY!EN-;uh+-lnplz=t+w8^Lti at XG#ap%xZgK3lxk at _b+g0ZX
z>U23*mfbXFixpwyOX_?t34Y`Wf1Soo9;QQ>?^A}gUUo}Yn_Pa|`7<N4pzKnp at 4gtB
zyr8`R9TV)vD<?;lN7uf04h`GC4K3iQXkwS+R4r;Z{*^i1&ealiwph8Qy>-itDQ11O
zfUGeUBl at Vx)lic>wvy_Xj7e{5sQ2b^3kOIs)p>fS-@^4#fHXOjAAHwJ%if@`(zR at -
zjHXhewRmct%HG*gO<*@{)tk7*n$$%|R+D^3TDt$kW3?-9%U(FB4w-YY7tN7 at E9pM=
zLZ2C?oA1fdf{S!7DUVg$G}ts8O}zwc6{V7dloUb3A)Lm#)w1L3iQDT>hkx4oj|tIs
zYVX63_gO*htGeLMRXDU-Y#Fo(!wbbip=VUK#3acwXd?fY78v8rV<^vPw{@t@(0yDp
z92~MyKs)HxXtuBT_6ibvX$Tq^a%JtS9|rlxj~6FlZ)VmDh{SoTDO|s2UqPZQF&gP`
zWWhI5ov74WuG%ET+ at lFwI$GI5dfB&#g)ttzn7ItSOK5vwBS_jfTHSK(Ig&GM<O^-+
zA3ykN{@9vJALre|S4p5t`c=S9JHnReuo5M9y<84b7>OWRD2-EzWcGXSG0h?t7i}5B
z5wxqLRb4*%#39|U1B`YaJ4S1nyL at 1zt=9iYL!o9OqR3u?c-KvnG=3Zr36+6;ll*Hv
z<R-APcdSyh|8<2T#pZ!6YG at LVi15%j at vK7|q-ITTVa9M#MlUee6$t{<{pSz=ecbq1
z`h3l5%_ZRO&`X-^!4Q?pls|(bj9NJ!l39fEaLPQA?~m%WaX-86VBZE2b9wVq`Qamy
z`LE?<3S^I>a|)Kk`Q#<N9~J6Rq<0q#UHipy+!7Y=pGXz^;2GIYVam&|(;Nebd-g;d
z9%j at 4vjhK?sKOl at -hj_{+e<W_=9lS{5%JeOOMZ7+<R#!ZMhYD3_Yt)~i|Z-oDGXX0
zp3Q*dYmLo=j~5($IZf{fuVSONK?R2gR?Q>gCht9ZbQe$lZ+@<WcVPG=ebh#fNw5iE
zF^b^D(9PM0&Aqh#osmIgZJfX?BEJ)3%fIby68h>Rn{+9?G8yk4!-k7>NZt at lL{r(#
zJ%>wc?>QMGK;(wSiCpbBT%yFzQZG{pN*G!ANLy4~50M{dw4Hq84%myNTJRaFZF}1$
zOGF?qd!Jj{jEB;{Ok=MmZjX8p7uIBU$*xG3R=rY^kq at eKH^6G&yx_rwX%tSJoW6Ey
zHFtVk!QdUyv>@^(Zn+QuqAMkG$-E=jUwVf6-=CyU9Eogu{xkjY6=!c*7Qt{_q{UmF
z`bU8M>zl?UR?pl2_Dmd5RGKvOL?N9}1QV<ffNd+Jns*8q6f}?ghUobh?ld7 at c56VA
zOKS|z^LqYE?|(@RQhOQ?M{6~?^}3M&F>M9M7H*ZT5ML%ksuD at TpY3w9PDD!k%4QF~
zi(G<epv`;)?1$gIw553KZgV!r(yl{YUHy5l*V^foe>Fp- at Jl&`V-eWTfjlD3So`Re
zgW>mLk86YKPDx6t-&%BRUh17uZPZHrSReq{yFN_b?7Tr+?bv=jmwO`jm+>*3%LHjJ
zd6C9Yz^C}LSNuSv^<RRTJdyJ*k+ccXkmwkP5C04bbfpKnuv)2`#`;amZK?9xRANf}
zN7}?D(V$Py{y^kOO@<PxM-?v%c-NZD432L-)(H6J2>X`!_j)1bunFFh<b<>d<g94a
zKF)a0X_07bTQfA>JbG at T1sV3`4UWoM%0IpL_a7Vs6Fv)xeNQkCeTtCjkdScwV(!$Y
zkUv_ at -z<J_(b#|g`Y2jIcm31Uoj*~961Rx$LbW}`E<x9-an|(7R=@7G(hY=ZJ06RR
z<(QGC8(&jPPQ#=g7gm*Y-f=0S21;Cy(ZiJiW;a}R{LUPXgL_vEC;>;R?p41>^2Wbl
zq;AFa$8 at iqj(_VO6Mr?eU at juPu&1$U^A}F+6i(4y0sFq at 0nE+Bz+L+IPP%9qz3>LJ
z<$-gpd#&Kv8SC{X5l at GPK9-PyYh(kk#bLwzF&e*2waU3tcY!~3)i3ur$=K4jCIG#C
z8J*t0&_oLaqqFu=6wR^1yG#N>I5Y`apkhTM=y;9<-Ua8ZO){D<Ixl5QnuebGOTPD5
zDtHs{e~BwN3VO1HKdiwUA!iN>Nm`P%bJycluh3D_RIi|B?>}f%<=9T)c*Ez^rj|e{
zXK9S|yx%@I9#=j7va-ijC7{8C_3j7xh028_Q`_*W)^yVMm3Oa+PR-f7Ia&3LL{(RN
z*SfHTs6=Vq=PdE(Gv^pLR`Hl(u0muFKDzWu+;KF&mlNVBZ~wJ>Ti|G3(uMNQn5x7`
zq47+#lU9_~`<j;TeC|+wML|X&QMNlyIrV`-16KU(&@OV#k7NG{u;b!lpD;U34!&)4
zlbvLiEMkJ(Vyu?NSL5irgabQ-&z!<>>TmC)y^G~ZHwmJZb803VNOfC0lt^#9uCSiS
z;cn(yP!+V>;4#iWqPJF%0UbV at DH<^_NdayCFK8LZ;VZ^a3kd;u^}nR0q$Q$9m%jJG
ziAY5^0k~Jmu^nrC?a7myN<}a;Zen!~QMXlLEQFLMCH*V0Qb|exf2AqYG%y&z5Bwrs
z88t at kF%ol6BS(r{<?XfQbg9PeVRWiF>duLYFOR1)*S_EQ!KLC~)lb0)Fm67`Pl>Rl
z?Pvqavn2*bEH~|IOwN4myIwtVl2$Bn{4YjzX-iu3i*{Sri|%;-`P}|s|FCWh^&!hs
zqh#kReD3|x`0KhmXroV$`<*$Q=Y5JB|A#9klt1w!`ly9b6{n+SL5K`M<=7bT=jW8{
zv)8lvLrw&<HKsjL4OLs at 2uqc}mUOxRQo!)h0B(M3=2rV0AwC=cBRMxmfP&5iQ?zc9
zwUrSt#`v662Ytv+XXSjF0o4aJ<EY9T%}VhPse7C3tEz=(xoff$lqV&oofh9z!ueBK
zElYyt*K6=w|HaiVell_y6-<&<a(-9A<X9`+Dsf#8?ogswbDlZtaV*~^<8JiQ|Bu2n
z8qO^|HIOCh5cu-8yy^{!gMpd<_6`?L0`z<zzdG-hjaKyDB19Zke}et4k8ZQ`7&cI3
zSG=Zec^V++ZtH8+C at Hrn%^X9{OqJK?-WdTnsf1d#l(bmiODF0Q>#-7fz3 at k?_cFkU
zxRpPaTRMF_SSqUgc*s0}r9C~b{->?6zEc2wY^1tt0Yx^X{8mdUFj#zPI;wu@&C^Pg
zzRWfnEfM2Bgp%N2v-k%<vij{oe|(MmN*dm9 at 5hrxbn_>Zc@%Z!eT~IKsnu0GlsbCl
z#El8%X0XGbm;YOZ8!A^+J)n_wMwsmXPaXC|;(trw=}Ty5qcyp5P%eJQaH5~09sPro
z#;?(@O>loIJK;oz);}$3CBP at f1rcAyA5lNf7g2r^UP=S343&~~CXzBGQUG6g+`2tU
zy<<~6(mD)_^l7K}>h=QAm3J$DA0J$lwwwYOnn^@%@b1$nWvU6Vg$y7gpxHrt6m3hg
za#jA1Sq86;2m63VXGjx<NGqlUCatgAU5Rs~LQ7^>Dapujjwd_RbvRFlx7ag4NUEIw
zwa8^5nWkDi6QMGzxHyQ%DxMz7<3DI4v3BW#3n%F2Tf+Zd)g;t at IVzl!svBa@{+${9
zEeIb2Ox8Sl;IC&@@F at HO9ZLIy7y4tL?Qydp^nOCf^>^2&m7ea38ZNNgR9FA9olm_#
z!s6L<iGS1U`f*i at t53@!opX)UEjr=!ffs;<P1BuRd-t`T<=2x#ql~<t2Qnx^!fm_9
zGH=KjG&_!|v}7peP{Aa)vcJZyS<`I`w2WyKIl2fJNZfe5XcQvPl2G)M$iha*y}7XX
zcwVi6=f!PymzKh_)Q}ehQlcuNCPIz>DRy_ovi`QMsLf1O1&t_IDxk#`W`8l3qLFtJ
zx-WLo+)Z%m=X5oU9=FSSOt`^RyN at faZ;9}bKRnTZ9dJaAFSZz&`l%c=YB9!A1pMI9
zX;r_hX-~~(#}Vsab(4r9TK1-Et~`Bs>(;|Z)NE}oEN9bnj1vY|fV=I2XYz~>NKEHH
z at MTC(v!D4%R=<y4$)x~REGnz`0(3hAQwO8&Pg)xqR{8S+OD-hUgoCpG)gyrFWzA)B
z)xqzgPLOXxgmA|&lQ|yK&1M(U3z2*O>0yG|>{Vce-j%S`lm~WWa7A|={@tCBaKuL;
zB>Zt6=|oyv)y&6^nsRNegOiCfKdu6XomS8P72jxp`9?q8_aRrVTuIK#g3ZpdiKS3o
z$l*d9rk<H;Y3&${93vy6^{LO{+TUr>D91Rz^1XnBE3Q7*ihp1tUN5$0-VidiOnedD
zN0ih{)}VhSYDMLjwV~AuQhLqFbfL=1+E+D>VI^$NMI6A&*=^&J>0^t^$puG;(1vcB
z3Pzn(XHB<;RT6;g)G~Br^>IS(a}wgn<ARM&qY{7KbQ-(L7Tb!}UEVLx&R{<dE|NuG
zEknM^S^Ka)TS9(1Sym?j{616`XZ!;v@`+}Rd$^w4+1Iit;!HLyYP9pZs&>e_hVg^G
zglR3;U%da5DH0Qteo<OjTH-3768JaM73QX<Us~ZFA>fuBq7XUGFpcF5`#hKD4~wn>
zzrF|xfz78HJ6rT`v2I7rE02+c$em6OTUOSnJzdEq9Dw~xp~!%?@#N7B2E*q}gvrZO
zm-uzRN~b?RO{?8*00$o&Xu1V$5 at ylb&tQ=KxHhqLRB88RA`6Ll)snwTMCt&qdOZ=>
zKX5d7o0Q;63#_yr($`)-&K?e|t!^tKCaoa`VoxO9mx!wp_N1%cb1;?P*r8utA=M`f
zk&CzfZswV6r3 at _D3v+YYetvhkmm9bmi#pIJ1B at 4*bFLSTg^~VDBu}i|`bLNwxjUEQ
z+H49IW-ZOg2to{hf67=+?+QKnF7zBy^!AOkVVd~7R4plB*ktuQ?XR4O1^E2r_SMKo
zT!h|sL2uAN_JUHwl|<t9pa*dzb|S62jspRT7OfNk6<3A~0UC`QbDg`=CWisIRU#@d
zKTBVy|BJ}gr)$U}GHALDiBj%~bAC6aaYpqw`TiJ2*=ds1H7nJdkZt3c8-w5cv$zHh
zDIFUTu^HR9pfptW2d9IU!c_X2v09XgsY;89TesGIC$9vwN?L~W?Wl+^2qC0j-Y+q6
z33vco^qRRcp3rI?Cd{H5&2pVFmEGrF9Qi^yLzq3eA-f=DlFV8eVCt>$oX(!l`wxE#
z*=aRf^z?ngs+cP9 at h|2sc+ at wmVFjMXsc}=DHtzXiDaixd#I6bsYCwL6$&Xa<a8S1+
zkK2~_TbB3RIAgABYqxhBUMGTTYv!_Z#50AyUft9iP=C};blS+_E5}h;6R>bhMi)7!
z+7$m;^c_iXj!;;zZxim$7pTlJUHtn+l)6g?3Fv0b>D5=y2#K2cOf>h^qjvtp?&V`{
zwmypb8k8 at Lo@S+Ia9(Ist9ZCxy^H=5`NFa90xkLCq3^;KQu<gpt{RFdB{{!96BqF0
zLP>w=s<2d+3`knJL%qXI0M|iD^8fr@=)X1+66%-#JoiMO>A$wX5SG3F(f#*ACnG{a
z%k)DI*ci+dd3WJ7^hN)d_<C7 at E|S-h#zXcMtpp<;pCr^c_?P^XqA#57Bq4odAX54p
zOjjfIyab*8wJAf^l at PC@fSdn<8R3S)dcxQjUP<DA4MC^{60ZOGUmX9xa}*8Syzm1?
z7pq95fcifue=$aY#07uFgt7}iamYW{uNG_(M10{a$Nv{21QA{svD5z-Y&cx1_d8r;
zKa6FS+O-evox5P5UiQ&{m?}yo4N1`?&(Wcro15D^3na)haH77V;#!W*2e!+%*l4Vr
zov98F4 at rsDZx4Ug??put?xPHU_}f~{-{3y*FX+7d%YzYet#0cD6xw~YhvCnkKLmji
z)aId|@#OZx;n at lzjx=|Y!*LAIlX9EyAh_OdL-zBi8gA&*9({G(7$34PP3qILd{G63
zxVpLrZwaC<uvAAyUb}XU5V!rA^1l;e5#IqJCcP-Q?(grPNJe`5KN`5Glj!iiD>8sA
zogX6z0ZmOZjS$&a3S|<yTh<TtgFYY$5;#y077$q28Y`-?c~T|=^_YM=p4V*Y at r8GH
ztIyWDt01%3u13B|x_ABZD@)6VNXsuJPl*=V+KAt_-i+f^jML%$?z2x=A0jB%=+)mz
zm5+}Ufu4&ab%ibyp!(dV!ss+m;l}H)2ZWP#8?6<SD&Pc?OHJ!uc$?RJhR<0R7_1O@
zKPD!a8ACxs1MAfG0rHGT{jGoGqi at bL&XSWm-fw(-5N3gYOZLKA3m*U*hi4*$Lw<ck
zpWJ>ytw9`e)uO?y-?k!|5T-XaHe3b}u7?{Nyo6|WVN-;Tpc7KF)W(D(Af}vqxnBO4
zeUIG+8q;tU8eE at t71V)WgLJPh&6nNOHhx)-B```z0SInm=vMbw4`lY%VBQII?5MX)
zkLSW7UfeOJ(J8+AFLZkdru^HBFg&FOm>3yX?x5 at F8u_Z4j{JgyIVK<=*zeyT*3KQ*
z4R+68l!{~XzW7*Mzq_#OLc?C7D1EMfQB`{9-zHb^kU-I-K+N#P7S23dPivxuoqmXp
zf8L336}F^wLhORK%Iks at ye|nyv3~CLWVx?9A)+ApzO2mMG%Z!x7$x?J0J!FVo2p*U
zZ9rN|Dt}Y+?#1LKyjnQ%nM?+uvAj?{xay!N(XC2ub(@nWf}qnU-=nJ7vJLNW0m(>f
z at sMgpsdO5ObS<IE>HvDJExb-qQa(&52hvNCrM+6JV9Js<+;m|o|K)lZo)U+I17BGz
z^c}rHjKKUZrts_h4k7&{(5&}2&3x?p(yi|4 at B8*19fN;0jbt{m{iXo(Q3!!Xn$iic
z6S$D7 at pC{#bT~c^N3X|8Yb!bo4{eRCE6msA`jnV;8}P-RAD5?hTd!Oc-3>JqKj-ND
z+;04Gru7X`k#M>YPq8-x$1!pS9!Z&|3#5apisMih7Ew1Fej-eqT=Ig0VAsG+hfW8_
z?-X|0Z0(CG5$;Em4o5MXqD~deH#R!x=Ay6bcj^eFb&Y+Zd&q6@=?OpbW`*ab+-YK|
z$MH45I{m1fi&!zNfW9=5v6fJ2e?s{1 at NwV`x!L)9`FDlyXG16!H*UX>qs`QQCC2iY
zmV`*yOk>mBoRDO%`4NZsJE;=2;MN3xLKHtd8uQf3t!w5urf4Y26pMUh9Q=YrDRX`G
z4*Kl;ShTVUuOPQrYZ)ZA9o{?k{>l7F&(ZLv_~-814+#g$pJOn|#}!1ARCV+82P9Wf
z(h4^+OXcKko2IvRs+86ypb{a=+swLobzhGBG70<rj9>M9Ti;`~x3^bPQ6Z^zb@`|W
z^|O33dpEY7n%Z7^G}lQzsev!l(v#cnS1y617!(^aX at ZtxD#y?O1d2Zo8f#*@4g8i~
z3s=VoIyqDK!YO8BMVP5Yj7>l6%MlAoCTrfEoDFtQlb+swnXGABixuq%EBTfD=ht-l
z>j$i_#F;Hbn1?1uX`nE&idG=3709il&wTyjcWx(n!W30eA5p^?DT!T3t9|GULM^R=
zo?MhVx{2(0T_chBlz<3J_z~4(ZUITAx9%K)Vw4e`R27|Z-rD>uTI8?cXdg_A^ZTjk
zcfa01>72tm3I98X33rXFT~0!KhPe4^^4eK?uq{u#gP*QUzNVo&F=Jf32zQ8!80ARN
zM=SS?4s?~W5D(oKk8>`9Rda{wYo|Qo5>!+NL^7UnXFLmA_w!3ZvxWC^Dc9J&w&W$s
zT>nH>(@iUqer9IMFk&H?mqQ-XdDvS54aUmUr~X-xronsKQhIuNUd%2!7C`${u+V_U
zOJ!V}1trg*dN at ZAG??A2AJ%$<#-g5bqv$r6IOO}+ at 7o<l;^N{K>$r+1Pimw+4cw3V
z$i>B-)wGF$Vd?rNqM3La2K7iih3gGbLC42GA at EpXwI3fdFE9SyB|r)S+yC?c at RY79
z;y4a?_R4yR at A2cuB4StD#tPo(_i6wi-G^!K%WhBDzn|ND5956Nna~bhJak!_ncaN9
zfjRy0E6xb1sN|YK5liZ{R64t10T`nXAjcWn&KqPGGUfbbf|cEz?9UhMpyXKvKOK{m
zXmpv3hsCG$*8Hv^9 at HM9t#e2;26QP`10$5W(#lgR(ga|cL9Ix2LPpRFBV-C=mq|io
zb)Yu13JM33)gSN$b7kn8=lLEp+SHkCyX-R^_!ZaIxH$?@Uhf;4 at A_ZGSGx8}ZqNH%
zZYw1Qis3<YeQwB)6G&NArH_vaRSSr+6M1CV{g6B|{`IP7du{H&va)!SAM<^E$n~kE
zGny%SEpHV<D at PKyytmnrKI`e~>Po{74rI4A;a_S5M!C$T1RjU!aD?6HuT~Pm?{hR-
zN%S^RP(Qv;lLe*9Tp#j0qE2Qp+pCm$b)B>DGrjP3qMZk=+)EyeWqkN9$w0_`jMTha
zdG}_ at ye|`z-3yQ6uN^-7OR5A-GUOh$ydr3FK_}mXs(tpi!}ctWQ6|6qBVf^<7V+8_
z`79 at 5VSHy2oJ#aIk}j_Kn7lfwiNdGZkCH^!2=F`&#6R1f4S0#;+5A0)ovg=diMjxu
zx3=e+8PEf9D_ at 1*_zQdQ%7<nS#9IcakkHWHE=-!3rHtG8Iy at D%<F>83KK8)9Vq~(;
zOZFs_@~c^rjY`=YsVxMe3=&pw*pW2(0u;Z7BQ)69E`q=^Jq?I}8pQF4BjCHxLWF5o
z#HeJ_vPtWpfsgC-`{JVV(?)3vC#tQ75A1C%0gHr4qL5}bpt2_XQ;h$suXxe*N75<p
z;5J{u4NdOk9XE>i9w$)N%y_myy02u?w%=NNb(JWq(;{TZUfJXkZ$QHwuS%!kZ0{^>
z^5E!N=m0!2$b&^;FHrOShw;Sha-r+M$12Vwm|e at ETq)H#1N_=WKH1y)H+mXYZn3y=
zK8RaZn`guavvL~&y6lrL2 at cAoVSm3s_w;nZb#!9F%EVJqM2eS+WU88iGfO6XO`dq;
znm;ygf1k#E16Ez*j``!>D2NNPeS7!ztxt|xR{_nu7i1aze->6s>%TRTZg~g2O^Nx1
z-QF&4gd9Cc(X{mUXKA(2DQo^RvMDZvJM*eTEt(*!7Xk<9x_CU1z|*`J$y at H1X5?@(
zG?;zB9Bdk>Bm-tB7`;7fOSFPL^5I<2=EOYPkpJBj7y5|BY`Fa+C5_ at Hq7}h)itY?m
zT+Ag={2Czm$TxFpJ_H`P$Aj5t5+>|sBrFp6ttMG!WMt?E+SXhm4<n=^{A!yV+h5*e
zb`_%z<yDfO{Dj^A?(Uo~E$)jpPnQlL4(NmqJhKknraXD-z$O!A6#>5*K at W`_WE=Ff
zmt|p at Zy96*{wyA)wN(cwX3 at Ril#U|w at k?(`1%vLt5tovydxc<?X5}b-VeXLbs{(-0
z at tG}=xoB0oTFz_0unIBroN?=~_3|7;@5}7#GA)>R=4<Qk&|Pad at sGO$tQ?It6Uv0T
z4N0~wt&#+(^&+T*M5$HOcV_mNC_ekMMTW3B5g<O<kyGvN*VMg9GI00-on|e)9x3V&
zg*dC#CiQLe&s<-0d$Gz&o7>b$7EwZPyUFRoM$x~a2Pk<<d;aR=!+XEyb`dE&_?W>K
zp-7AKx+T^bwr=;jOqi1@?yvl;x8(vYQKTUhvL3>HnOoAlK&z+0Cl0x{=jZIdu at zFW
zYl2+Bb+;pLaC!i$w=Srm45>${#G>Xsnj1W$toi#=1^&+6Pfx0DUjm+nJe|4sNBGBU
z57f2PJ!Iru*3ByEc)d^Jqrk7Lhk;k;z&LgegH@;LI;M5uftz1bJD%UC=-<0yn#i+L
z`xdUyA9}w|L}KjH71-jj;_BU-H!#ch7iwXPDZhzYvTy~Q7n$N75Akcv4ji@`srV2a
z%+7|QY82%#qaa;CDT5zoX0L>VhP5u1NLNoy8D036{6`y}+jDgi6w at p$gTJs^=^KrF
zuAjPwGN|n*gFn<UJ%}%{jBhNmBct@$z&sM_%gkL0AXQ1e!mdIH{c$vXM9i%w!)S6;
zCIvvnHZK$=RdpMvMO6-7gZTU1d1oFwL%Ud*-Y?p?zxJGx&4VVg;F6}k$YIxuoXJNh
zSlh-Ym%e1;kGpP+E%3M?>4~AxWr|L)n49d2F&`}^7GeQqB?(NC4Z!T|+2SnOZt3zF
zp3{3MS}A3;0v4$vO`s}H04$ij!^i>g2lUrQ>@5S3`*I^1gQRYnBz!%9w&B2Gq02XO
z)p&5lSSss55pl at yYf$ETD@<<5o7_-f>6ev8wB?8U1BVME36%Cn!1mUrvUbwTffnHI
z$hqR_#oUuHQLbtO7HCE%ko5j&^;Fglq5nhPSN_$}Wa~EW8r&^F2*KSGoZwDyC%C(8
z0>L$cYw+L}+}$C#yL)iI&HK*GIrq%D^AFtq at c}k_ at 2={qWzVx}tpYI9)%uo!Z<wT~
zxyB8p2 at 2GOS#{*SQ7bk#Esfe`cZUHy)2R)+LKVei^GS)6El$uZV1Pw6nMMPEuFZRQ
zJg0bVrFaBj|D?~9tn%fh0u6RZ&pH7S5d(E;iW6pxB<<Js>rIsFgAIi1u4pp+v*oa}
z^>zCs9{ZpkL#|{4wnPK2_o68WwJ9=`scDeq at i4a~PZ+bW6JD!?Dd|#K12?EVM|p^6
z at 9f@{j>AUXVckpX9ToR9S1Qara)*Qn--CeMnZv5C6!t+;C%BN$ia^;Z^cCtwN>90{
zU0;XQReCz)9=)|=FlM<9>HthA8ZA$?u$Xxr!14CQ%={?iFc<;Q>C#3+oAKa)l}!~F
z?T{zozr-UVx->@qNU}HwDGsjonnNSS{T*ko&v~}T+o%GcHoxqSBB|iU;JK;xv)>#l
ztv%6)e?y7P5v*$Q3iUF$)%AK`xB}(kVt!PqOS{GB7?}9vSB(l7FD(>u5-kc5hQWOx
z>N*B7*)5Tj%yP9EjU(wiXh`=w0^nqd8-#f#fDyfz4Fx#u!_kcyDJ`+j2r3=k*6xh#
zZ*r%twdMWsLbweE8$s;Qf$IwTvH3OX6u?5>{jm#I;35?ui$NA2>~P?FM<Jie8%2sr
z0=va>z4?m7+pFdtz3p}}FD4Gkpu~-0>$W at +482spD#NsjQBi`y(CKQ+kIWTJ at boT5
zXFM!`vKg-}?7!Z!6!vsmhF at 7(8P><cly?951apHh=!_73fnB(r+4mIX#{ZPN<&N~=
zlJ;Cdud}qv4TJDaq&-LV%7~x0E<8ji4=bfD)WN~scAKBpeu3FuiKL!Ur1zsv16P!$
zz$<y^wa)7UM(j{nGxMHRjxB&f`%zh*2K#v}WnOG!7;kI${PBvDOYIpBg0~i42p|DS
zdW+MEW0w2y`F_1XLknifkrJ6PFRWGAek`__ at j!(!zxrXg&nhdIDk<8b?kz;K;l!9N
z*zB^i<H}(z$k0({x&57Bx2?S6u3RPU!QK4G#~=466 at A=J583V{E4drJfj$?1Fs~X`
zMP~HpSlY$OhN~=T5rUqFI=73^rVZ3V>#LNpQ2LR^(&+V8Le#M3rFX!nmJQI`Xg+G>
z_M^{M=^J})dCNwAuupIq?&CXAxACvF8AQ<D4$dU&8cb|o{S=Rd*%BKYWx-Rr#VkPW
z`;?|PHA4JUA}zY)!D1q{!~uV#upJOjV&4u%rnDU`A|x&aXnEJ!5%2BSWb(^_faC}1
zFTl#+AgY;}S&S6TM$SR6xqEZ(-4hMsj1U`jUY5L_nHju_iV6V<iK=&ABKf+BBaRoh
z{R&rOs39(WL?{Lx`Y}sV+G=al3Dg&F+uX%gI at d;z9VZ>Z7X2NMQL^t)Mk_v*0Fd{4
z$D0lT_}aG+Q%LPIo{*UMmMu~2dSj%`fg}n;Vf$BlY8Tk=7-ZPLN)KJ<I2P`M7>0qp
zeav$>DYaub4S7L1sW@$oXxHDgCj%v7m~a$|MH?AfIWsp3NnIOk`)xw4y~*)e&kJpy
zcy#n6&Jp(W4{u9AGpBLu9nX1pG7oD^LwwR64xQMp*4%^IjUuD}mQ6cjD=E>j(~)p3
z+{Hyhn|vsnqvaLpAyn-eKrs>!eQQudaOSHZr%ng0tWckT5s6B`k?>|t5ZI(_1*w1d
zuCi5<R`%CG#%uvRWQzpA38q5%*g0xxY>v(aYUjQi3C_#-)bqZM&ykmxYZt8SLB2zM
zA~aXjd|#&?{L?|`?=O7fH8wCcecYY+h$(S9VmK1#d1F at GqD8Rga3aesA#v+qGJ<#d
zz%&$s8r}rs#+l{C5~%pZ+t^f0c5&fl&j|(|;3|T#ZFOE=9_#GBx<Jar;VtZ|>_4>d
z4hXbidF;HQA{3C_-Q6Ga((iYjp2|~=6auDCR{NMo$Hx3y9(Mh at f+^Vf=zb%n`ii=@
zy02q4?;Up4Mf;&et(UD9kFd@<Nx8>-bY3l7((|6Xck&3C9E&R4nPCQ+Sg}}gnbNWK
zx|<E@<b5}Tk1MYN5fae6Sd(P8pju5FW#J*%3t#(7xrnniL?}dnm at 3C_JDsi$cnc47
zLOmd+mYFuPDJ}F(6jBXkU`rL7%H!Y*z at +A#N{GS`5&c?koKUlq2g1;P3jxE&xJ&%C
zE>Aa~y1+KVdz;@|SBvYMB_x9EJ)h)HAN)UN2Rk0)GHPtTE9WieUXBwa&uX}PpTh4Z
zf0F1#kka3O9J5rhPr(N-y2Img64eZ2-vuo))@MR8CI!1{4_of8?3Ap@@kxp!cR#?E
z4NsJVXuvNxJ$L=&SMAt_^|xazokw at VyO%7kH&nL|f+sF6nS}$vOn$;a%#yJgX?`Yb
z9*O_NSDd}UV8G3Ad7eK(Yu<Imy~Uk7X$RjwV~5mkeI?E2Ig)HXf`uO;8AN+1E|q+U
z)8*kz062mHluCH=f=g$68f<Ad5Us*2OG-=YmSqSick(j5=59!MYsBY2xW*_n`$nX-
zX<H&T at eOM8+9^+oZUZe$tK*yVvgDu<8;zluUVnDZwe!($JhE;?X|#n#O%B_XI<;Kk
zv$Iw|mrx`)xMVthF1@=0m1wscrW_56pkSm4TWCn0^pPoLYY+Fy?g=N&S82nLG9 at 5r
ze0*Gr=7)PvZ`%$}bYOzSOIi at __$U)B)T2G0h$JGG;d<><fRTg;khIHV#UXu6=_1yi
zeOPYYrF6}(#Y;b41pVLC9V|P2+Tmk-3f)*TH&IEqABJ~IU6`|$o8QTJ)A6sgd-zxp
z449mu!S;DGecd|mHs7%t8r6Erp@@1{?g%$C+u^N1XJyATLPK8nDe>U6Ov at Qzh=Z6<
z3F$Mw_Zk_f=pW9BmCDYnHswn0N)gD?!TZ?ds^!3=bHhFizCQN_7Fa)ZSE9RtGf{cP
z$Y{nw?I#={>k3t%iihHjed?|g<imKK3_k6N2^^zx0(f|MnXN891Ss=Zc{+O+6WGjH
zELmAu%9o(S0I^5PR(_RjM$5{{`T6ve at W#jc_ao at V=``{A6FMkIcTV8s=3 at U5qyFuM
zoI}~Y>kRz at 1djKvd6WyjrNo`<wSrCB>LQehln1}N8yG-9{U&b7l-fGciG%&|&@183
zZ_J>J<#rt+H-XZ+y1i at _ANn|P(26+UUQW<LwSM2Axwm;^U$<!S at r>%j&LX(+620-C
zvk^X&gNguz at feT*c{w>lOH1UhU%&qO@*n^X^ZJ})ZOygrFpou$bb2A}!TWHIGa@=V
ztEENX$tUySWzYI)<JF!tAUCJ?DN31H;A2x&6sc=r&^Kj1>m}<Czg?BJvPTYn9dK=S
zbMx|sK0f+BvlRtK|3phcudpue*$Dl`@MI&ugc3ngEbsyE;!$Agnrx&F)2iK9id{HB
z-`4ARrqSb8xL+;%Jlr?p{{gMVv=8qx0%xFOac8s}5gD0TQ&Y3^2%^Vd9B~JZ)dy6D
zADfz*{(_IY{-5wMh-PQh>!u|nh;R^nhgwPf)7cpaLg&kUY~TI|<omBlfb}j8j*cW~
zzm7E!fU^vGo=uFJC8wea40qr9`g*PB1;f4X)0eZKG%XEX#>U1w`}@?-oEU?;o7<J{
zMf6$@v`E8Z)X|Y`Q at Fz4YzXo{P7sM^Vs`iRTrk0dNVOr at z5DvQwoxZ+mSbiF{GM9J
zO=OUL;F#9n2l)eyB)#eyjL+|C-A}3h0^ZBtWnzLY{mz*rW<O|ZwkEQhZ|M1K-d>-s
zgOrIUe)``m6Ijvsui^z}Y=m_+gNx_ndLZp^B?S!uZ$Lmy-0^%zkUD5+#<0eY{%0;g
zOx75^grp=`tf1knL1j0-U%}>Msw#e-d}{l_0VBvj{EcEe*DTVhBR?Iu@`IE`v$aGg
z=6}&q;8AA^iiHKRc_2tJbZno2X!#%A-Qi(*?~6$d9)~s9n@*(ri&DR?X??%Q-QABS
zm0Ew(BE;bM at PEb~zi4P^z(W2U2X_ziHz%j{@tFsqg?eV|7MT_sJzj)|hiif}2T2dG
zuV74{iEVPJehYfqwgZS;&nJyIUV)hg;D10egSkU^??Dpe8wQ>acl}Q={S%0{UH;OB
zjsz1F+-O=hkGi_VKly?5m2<ol*f<5O+P&u3ZdlW?>YO=5Eapfk0PJsq!2P8wxzRud
zBdF_5|BDrTKMHb7#|bZ2#G9p8qCp8fqS{3Qn&i~&N$6$_dVRR~vGm|E+P?F{*GwW7
z4zz4=80qozL<P{PcVG5V9MHbdd7NPjNtLCY4*M6k at HbCfu=g7UkeIUu;ZBJ{lr~M}
zdm;Ez?fa$Gu?Nap$DT2h4Fmh at xD<)s$FMzwt8Y+%TZ0WA9`93AOny)`;{J>J_?zrh
zp3K1jP=CaNp5{TwMsawD4QIQ7%Rq+#H3-zvX3eOKhDewvHx3`$1{RFLDHN(e443Gy
z6UgNYwGNalAYDtJ^38aS?6rr=>OQPgA at 35Sn$-&UR`C`)j)+x8E(%9o(h^6&XV&}}
zvkst3fhE7n95V at g%a}E0 at tL`Mz?3zli5SHGz(f_DAOr0egA$onS#1-Dc^%ME?0o>s
znz7L~DvQ>^iMU7SgKa{>(pTC-lya*1eKee2lRt~b|HgMZLqS-XWl0dSI<y_<6H286
zwP<;gbjq~FG^b|5Xhu4=IoLZwhAfcI+i2UFlPi&;B)*n470azJeq!ZF?DUc2s?~`i
zQC*j{uU#n9hE157!Gi~rr+EU;Wh2o!cx|X=DqDr|AeCdtS+#aqi=XY;&}+2l-)D8e
z)uc4z`qM<`_fT$_R{iKZ4C=7_c6QnAeiG|SDVPN(XUm;*fLHF8jelxDOe9`r!J)ls
z?-k2f(X=GuFH5^D_$;2_{{An%`#nBDfDdF83o0AU^XQnNlbD+Yb<&QRv42`e1=D*0
zgDh?LW4$u*ow{vwnoZ|>IWQ^0()c;{r43$q!Maib0pEudc1P#K@?P{ymt%4Ysv^qs
zVO>q_fR!7XqzIA-c?U%M1q76ywmtOzd4wd{6&`8<)>m98-lsa&#gXuYK)1KNeG1ay
zn2rZ2Jl at WY;TjK57iDWs4Hy`1{Qmb5D*zS_2prRNS%$D3N+7uCo|mS3Bh*@}zk|DT
zBDU(3)anrVC!10)Z)SbOBxu&;Q=c`S*Jfx(0Io;Ziitnz2=&p6<u-f`oAr}0NMwML
z%slumnsX_RIl(ZSS%LdBb)Lh>Kfj<?Ui?z)!8?1k43!W8H at 39)sd$X4$MDPVXfLOZ
zv>Ucx&%<N;m)-dXf36mv2E<hUvOpb>3+pf|MvQ}oEYW+*Q}YC<_|jznu#shR)@9Pa
z_*cs2$M6(K;*v2ACIERTph?~#zZ}k$*N2}3oj+;r6VdKxL+-F+<SLH#v58M{v|ysn
z&lR1NKH)8=zK-NKkznStPJiY&1EA^X1^OaP9sfqw at 3JFFk-SldQmwmZpvV7+zmm}v
zS$iHO6rg*w+H)pw&lJux$PMB|Ih2hy2c7t<TpS-#5osqk^HG66tQZj_2v+YCq^XfL
zjHwrz=_dq{Um950ja-bP)DA)e5%0mO4X=#O_+<ZJ8bFy<hz531HvPdgh5}?nA at 6M!
z!1Mvrzvx|QfJaz3`t;O6r`{Q9)gFXfo<ST?L3rqcFM#F@<WQ#XTuC5$K#U~Y41;`z
zA!KM0-j4#XOGYs(M at Z(U5Gl5|%3{f$J`iab3I3HU;qW_(w$oh*0~}>EfQg1z<@tc<
zu5HL^zfvm!d)BW+0C=hbiaP~#O*PR0i-&Jnb^_j~m}K{n$JcB|sMl%>5*%4#)1f-F
z;Ui`&n!fPbAzZx_-<*k<qP>QOa$orE2?cm|AxR#*A%lh1<0)RlH2MnD#={IF{k0g$
z=Fs=PY2tDKV2lB4Y}ozHlxHk)>pjoud1 at 6)dgz#n%wW=yfRR6!W at L(hwOUf&^dZ>P
zL%Mz6Qq|g+g?|MfDs|)|w7Cfw=27oCu~*)Nv9Q=(Ge at _B>7F~{+Z>K84S~`U*X{s%
zxRMfC^89NIQ}n7i)86gSt}#n?)_J0_8Tz3Q){@^8+Q&`QvQ61GX`xoL^sw|~*m1er
znTBz!&&1l!lxnjR10v- at zAxzcm5I=Pjc at tud<`rloB#DsCooy!1Md&3W}zRRbZS4u
zsQke-Y6{PM4SXYsmVl)v3bkx}q3FyOrO6SdDWGLmFWqUx+G+G*<#;MJq6afl0&9d=
zUB_ZRfkc~)Ofn^snvgk39gL|3 at J712vehCFpI7-GSuM^3KltcCKlnR!{nkG9PdAWm
z*U{<Bc^`ky)LjAmRq0Dl=pSNktEIXPN>Y`h*tEBg*oFL0)q%{R|7PdG?3vv-aTj^e
zw!W5h9-5X^J<gV?CYeM1zw>$iKmD4OA-L?X;~;h!qCjWw<9m9EQxsH9V$1TJ^y6&)
z|9GU9a4 at ZKolFR;XE%QiFalWw-Bi444p2Rt at 3BcqNj=b`hE?C7ze;CrIS_HD)oyaO
z3yAALqkT5(M-e+oV27h6>F<`jRfPX76{A=Y;E9&<6S`KJiw at l<!ep8Br{h7_ff7F5
zSBNc;peR5GPgy<IXN4J at a^)BC>B}0MxD%|}YhK#B!>aUsp4V at Mmg$jT at ir}RX$YC=
zWsxx2{TcUs$G8R=y)*oA0zxuId!NCT{u7oGS+&jhFMW2feMHBt`ongIMrO#Xt7U67
zTmo#L$_r at vOUQl+J%0k-IJZ~9g^%mgYOLnXF0<O}4IT}ZzrC}@g})#yDS*ePjvL|D
zGZ;%@1m!i}HjBfnR*_c24Z&s;&yz2(_i6K=o4l@!j+gY;bLvT8y at eC%FGMP`t~Vas
zPLCSMDK$|90d_+Uavlf_(c_5;f|+w|CizEx2n at p9pXl;jwjI8uh;>rqwdIc~y!HTs
zJo<7oG-!%{v#EXr2t)_`VR%lC>Kga=*HrP*Nq8Vz%s<`N<B`@|{b4LnrZ0s}`frMd
zB2vchQw8l;fF;2twIyNt+1tUu(<AVsD%rM@!%g8Z2*clQv^`NiQ1;X%{hi3Qv1#^9
zhHpZ(e*Spg4`GJT00vln?j)}qX6zVu;wcSSTy^V&VSr^cGn{2%I^QSx=!rtcfGCB_
zwK}>zMGcK$x- at sB<8<SJ_^#GIx05f8kGu!IS0sT=rK?%`$K55Q4fbpa?`XZT`P00R
z8hjtnmu at c5CnhH|OOB8ZJhxRg?2QZV9g~nSRtA{Qf?3_1!RiFe{47Zf<a}{10d*{&
zFfd3&&Jqn78JQ@)_EDs!v}asppV<G2t>F`-dp&Bz7i2%%gon3cBLs09*<?~@*Jz)B
zi8+6o^;%As_`<P#6&?0u at b!vGZ^`;*(!Dcz|NE$Jbl{O^G|zf0(=;{d!fP}M{!5am
zI*S8dHthx$r^X3Sp4{Do%Y^R9$h_{!?~8Dgt}e>8I-z}z+`0Q+`eGZ*{14&eru1p0
z=lMD&W+t64Vh#UvoQcIqUCCz+-i*{tmo=uezMa;0)1xOGN!ORAl9A)TD--RIfQB%;
zmNhm;3<bQ<Nts`+_DZ(W)YA)6Ca2t6+EqARY<g&Xa?|xOM;i!DO at 2aep?mO71(yjV
z^Cev8BY+hXmt$b%CfV)~vBeR0E}1)D_)g~jfLI5x5O`=8+Lk6Q5i>vls@{^@H at 1Kc
zte6g+XlfdG4ijk`YrRmxqHn1e0z#ZEpXCS8aI_IZA3yelH&8E*j3E}?-sQ1IC%X!u
z13L4*OHMmo^6+4P_ZbgLJ at Pr11A)Pi{Lioz(PZ<naN9)RhETEBW at OA>C at 37@C*^(+
zbA8#CMT%`Tqnfrx(kgxiBvzA5+^TF$#g#Yy3c&Z`EwT}kAQthldto&zNq=M=RuNww
z=M%Vn3upfboow~`emfMms7RnQ+?6<*n|)@XQ2S~s{g|@hSNnddX4}^Ai~Y}1UMU at O
z9i${UPU;O)T;D^*gq|fsjYFB?XE*f&TUY&h9v|7u>-%|l_`wSsoJvBR^y$-UC2$Ue
z0(SZ<9;aAS*i=b2rfBmBKMv0L9IdoSG?(FQ1k at ZgSx0mSeq5h-^8LDE36S(cnDMX}
znXYS^e+u8>0Y-0yICEY_rKhh`)NF-VAlU2mm>I!!dCnh>oNa45K((?9EcsgaD401S
ze;b00(`W=TG=z;#+yv&_D=I%;EcSoE^BQp}jB;(-o6*sJ%N1YQa;CwiSmX;2ahm4Q
z?Ayp#s$|v$b>s6 at GlU4pt6!l5%@2<S+aN3JeSvoF1ROi74n!Gm+MQ-q0_MnN at k1q9
za2YDg*jCqaluoUNbInNixi2hSe<t8gU&p(SLD^STQ}icxKfdO+aE5N}I-~|j4?u)A
zeQ4#hM)YX<FvJ!2OyvQxcB$#tNB$am6b49oWq1#_4$FJ095b&}_T~p3b{$=9D{mO#
znI=|OYKl8jUnbIBmpO0j=ZczOn^VX5S5srY&FfO1Whm};faRki1KzgzTO;!!zUDd=
zF$YO8S|+=9R#r2!-t@`|(`7gLAzR|a{I3V3LN2TH>DTT#tzU}^^oQYp8G_NN?N?Y)
za=?&@YPmQ0<{2#v#vZ#|Rvh^h2Fv|XaBfWUWX2vIgc#)M1}8cr+Zs;tdVK=#E+9{*
zCY!5VmzOvuU8hEiL8{TP*`Bu{BM+g2wBOdy*?y$hT%d{&_b1VN*}UlL5w{L|5^mnK
zw;%x$`199g?S9NoI4JvtNhX>yGMl&684&X$-QA%;h|hT+cA+8oJTtN(IsCuMYia^y
z+s|{jLCmG+_9nv at A#F>&$k(?qkK%Q|pSR<fN-1aMLU1F~R$Uk*eeW_!O{449hcaC0
z6NNAi2scrKSA&fNU|&)12AuRvFP}rVGN(E8x?MI=3toQ#>}_Az0L4BpX5<X#j<?NH
zw|nUHi?!3k)zR$`dM^0(dWzGez|tJ@%(E<|YB)-t#;;W#_2HLFcd8jP5nxmFX1Z%%
zqwC=UYxkeO8#({Eri_b^FVCB0Hgb6xzPX7jV3&RxANpOA<*C~*m!a3h&EC-=O7IM>
z=XO)CamO^w-MGCig6em(KR*9!^|>#EpRaccY!@~BZhK{NpqVm?c&3Zjn86Mtv<Wz4
zXaEF7ps(1#gV&#~Ue~wWRx<y*5dvmR|0W&HSIk`cel#%dr;(9n*sEjruAWl>Yg!1O
zr6<g~A)h+_G(_3z>^P~jqo=GHd3fKwwlQLp6K>nW*gVoNT5~z)_61E)cHI(uBn%+<
zrjjnM(cae&$pdIj8?pI*=X%!a(6LQYb{YD-2>uVgw~aOTm2{d~dfi)ZEA#a9T(q?H
zx*c6Hw#}y6qOu}sAwu>NNWL at wrZqo5wzET*=`gLMl&1TQ+vBgmf-OF)e?>kFrogTI
z+9TEIO!G5?XZIBb=_Xcg?%>2(IGpgUQ^Eu77EZTO0io_w2b5G_U^KmK`re9sW*^J;
z(QM at b{r2$v8UzyW at 0WE=(rN(A2$WF)>ETj!ogd&6t2v8I*`~HA=SN10T6WGXJ_XOr
zdNH`d;$V41H|`rX<JimxmY at J7h8{PR9Ogjp4T?z-pIZwH at 6+<uK8)+)U1N!+5?$lH
zWZCJD9u$ISs0k_(6}NLC?TsZc>@H?thOylmQ`g+KeU{>r?i8!s2%477 at 2HO8AzPN3
zTo(wXQ_1mCReRd{P~G%t_%`DH!s7E&o_0-J6D!QpD_!q8%bW42-3sArAptn3cWWBF
z3x#CPwP4B?$D;#oAB5lEq#b{Z7XS>d>J-RdmZi){h+Z3ZHI9Ij<0NaU{k?q^h at k|!
zNxk4 at n~Vjd6djQQuuE&Z_)SW__`tbc%N`Vj`GfAOw?0$A!4hn?uI^!EvlSUdc`YPI
zcC5O4xt&V^#zn7k`5+!z;PVi5)NYg;e({;`GPz^RTc(c%Gjnq-=g><Ua1b-G*2}YB
z?$X+A9XjZ|<776*cVpB7WA11p9Ju|i!yiyAJv`79E-IJe`G8uUo|~J`?yuHj>2f`x
z42Dw~e3T?F`GA!(_UR_i(&uoaA!{u2Q^=g&>v#ApELVX~geE6CPu*U=*6AzK4hR_R
zukla^NmJaRTNlQefczpu58eR$ZPAtKH&frIfKI|+8t!8Eb#y=#^=UA4>-M63_1)dj
zPq`5v_=~&vO`DN={gks~hY?SgRI91YAtx{C7|E$7GDELBtZ#HUP}f3Wc6|hR4Ss|L
z=nB0M0sk}ZVBJ@(3K>lvk@!)Ie(!Uz`xW#r^aKE)-fu~)ea^y|$mz_<C{ie>;Il4Z
zV?E4 at vNtq5^r2_=!0ZW8WdEM<?&(pjDro6=i(`tGg8wM^;m3_w(RxSLag|YA-Von1
zbCN>YjXeV0As?A(1wEgh(0SfG)m(sN1S4IFk}Lkq0FyCq`5R at 3#tJIli3}7I-#dW0
z%E+!W5HvbcPBH?HP at SHvua#4W|H4}_B-TYfe{Bl(UYtA#1MKg&VYY9>mu{52?h$7t
z6%L%{U96dyjZL*(0w`mLlO1w>lTNHm5e^N<>}oXEp;}8mA9a#f#gPmBn$mPWvONCe
z_3#5~B+baQ&WpX2R)4%y0oh(b7=7>RE6kEx7(1WJ=9TJR8WyAkN57KEir=E<#s!0%
zzvcUg;=)4bQuzGh$aDb)2C$dU0JnhxheMM4t)FM&JhWwEuNoQoMgaMx%Ma6-*x1-b
zGircGYw<nUT-1D7_)He=7Z;qzpZ2E9^j8Q8+Af=uzlu^_9zuOivl!yc7WmI at x7C$u
z+E1fm6R#SkSCZdn%sDR8so3xWD;#F#xg;keu}l2tzT8={-nJz}l@*~)J<;Vg8lCb?
zR^ko<o>acl_*STI=qh;J^@1<&0gM;k>`^aL4EfurAHx*VM91|En9WO3at=@bsB?wq
zr(3xH5UApYBE$lin9WaTT$XW9M6k;fZu&(JNb^S<^c0g3l8wf0Yy^Bxp%rk-Lwl2`
z`oR=ms#qb^NH|<r4mNJ_3J&`cH at gbh8RA!h3%nw_;~7Fr673PAu22F_a_YWE;rI-$
zow>5Jf at q@S`gY~rP>@7PWHRBUj- at 3s(3}e3Bs*-Rajfbj+bI-hmEaYlal%831lu`v
z<&9S1D-Nc9n|2-DZ(8ytxg>3&<}&d(*X#<tB$+2%azhweLKJawieFe#v7lpC#32ql
zkuy7}7n)OXSmP;K$kG)N5&-fkX)pAH`M)uWq_4a$&J`2a1)I(}%fZxHU<##2sA at Hs
z5I(y?ZUcY0LU;glYXiA+qx&W7CUZ09$}x&SiGcXS#YHo$^V}Pb=;$%)D at up0Q}rhr
z9WS(2wJNBpWH}P<Cj3ic&lamG3oHoLZL29#k*O0;{(gzdh~9w~GqoA=h`-d6jg>+X
zKH)eSgF=_l at wR(Kstc+1z~S2#7X7d(9YAq at z%>UjkD1qT(rF1=b84`iYok6r!_7B}
z^}Kue2YMttxx|Z(Z9YHzu4zVVKP-mgc@>Uwy91E7XI=odc_?KU>H9bL39tBErCTgM
z06iZNxL$9~9C6+cE0lfJ-8~Z=6Mm at Xwz+iOl}U!sOr7kMQ?HdaoBPjhZkn2qnH`>M
z=Lvgx7iuXEGjdlNJ(U+0ay31Kv at M_Vc=<0RW!-PW{=(?IAiMaW*B7$rQ)lXy#>eG1
zR<_8A?&vk*&~WA1tmhK~u)IQ9q3c704?u)9!G}f7?SJ7_FgXeR<&@{kE;JFf?s(bU
z3uaCxEqFpg!r4VOXvo*eCU}UObn(N>$AO`VFJ7tj+8N2GH*j- at Tyr+Z_!VbPzJq7@
zH{njchc`PdTP-tMZGZaFhoN**Y8+gr@(wa5g(U9|tc$$9g06w??~CD^fbH9*@tb>J
zp>~pi?LX|^^y8-&e$#r7cYAC1B-;<o0g|r`Pu#q{q?SW1T2pU%nXOvu$me(nBx_dP
z){>zij*TWyjY at Aj&EK^GGH9nx#h*-g5YuViexd1YqeuRk$WSCIElGLj9YcfkWkZw#
zM^cNuXg$Xo6^guNYWpiz)V8~7nw~f#fd~bGcypP58KXbkm;3_WK+(5>S;V77PVFH*
zSuvz8is&u`^<gHx=Kk-c<FF!37EMDgKYk}^htir*c}IaG{&usqOsS8G9sx6qHa6^Y
z(Jy$ak6{#`i`Ve|*}<a%+$AS?mwG&D11?@$PdTXEVtPLsdBF{Y+C<~ff^ZrY?*--H
zjhoVjTksqS;Cg&1>$uMqkw^>!VeN7$QfE;y_nA?2A at GDV98p~baE4k9g)ARr(P3BE
zqwm)83E^e>GR%|8ah4z at uVNaarC9~k)?5kowl(o2a*iByqSlGc34@@Tk`7gZBJMMx
zigAvUu}Nh$XdizlfU)D04QOUwgBgUc_eD?YE_s4wkAN$4Qwnfg^(jJuyiZJF_eY~1
zq;-R$0+Yvvn#%<BXvSMUP$Er9pJ`e(iWEg(z5&vhKgo1J4D&<6=-WhoqQ0cnrYKfq
zH<&;Ufek<mTFd9^M at +J3i3_$R$hQ?^Y|STmg~%hK!=@oppd;R7(!pPBm`?rq_b4h%
zwQ_$+mU4jM1ZI5dlN%tYPm(ky!e{WQkKQg={hek}z)m<G3845+nKv-AFy!JC>v?n9
zuz;HrJUI9JySUJ^{l244I-{fh!~aodF^Ki78Dt_-DyWvfn4-bGIFT0WW#cx-S>}!c
z6_Q+=J;!IqA(5;vzg9D-UtTM!Ws+I4kk~Uf8Xiv-dO(XH&HhYuT at Ya~$Ypt5a_J5u
zG6WqMd!Ol&?#O14dNv`TAGTJu&jTWeY!&ks|9p<&-p?T8l_bZug2aZ~@7m|*)l>v!
zK|tRHgIA@((E$&Mpu|KJiGx85dWZP=6Jn6Km>zGmJB>x&Qy9)_>SFDM7VGp24(ADU
z3<vl8w{AeIYL4M#8!>PjQ#xyE9r%*03Ev5(wf4tF+$sPWdpA_C at X}O*yW1L|?<wYl
zkpo-RK5xFrzc-&$eMRpxGU^Q0eR?zz^QDU{oM$n!MFwu$wNxh=7{0S{eK90nfm601
zK&K#(6~&(}{LJwqmi~7?W&bWBv_D|POV*b6ecaX4R>-b+1Rtx1crzP~V4rru3A)`E
zh at p(Zp^$eHL*G)>@EW{x2K%qn;`E2PPGDjr2+!N+k%oKzJ)EKcG at KG*APLK1X{$p*
zO>Cop7;n_r5py+z6pMg)QZX#~DIPP54hv=83YsAjzJk(>6eH-9t5#bPHFS(5ani*;
z0zhaS6F}MfMOT3gS5tJ*{CPL=>_K}D56NVUAimXd%;B^8%N0FJcy>fV9;<}$5AU<n
zOg@$(Oc=W?y}k!ZoK-Y{>h3R$<Zn;XpLxXBlABFB8kvqSom|inEF}rO10QngJ;|4b
zJW#UUtVm)yWM2eDZ~_mh0PTw+&rZE$g+b}I#!#1a?T*g)NbGOzVTnVh`n>{=RAyI}
zt$kGaN7M9wI(C0a-2b*yJfT)LWeX?m-8Dr!_G_0Q>V=uPAJu=B4G<Ao1_$SVj66Ns
zhXlS%jUTT;4}#LQ6PZT%UXZ2E-)UH^Ao%QTABFs<Db51`olz1M7yc=)D>m(O6#DG+
zfB~tl*2XimUoZTF*N=^=<!kq(4FUTV9<ay21*VPs<|RRoICy?{gZ_V7$D=oYhqh-N
z&-MZV>2LS{IRxlEYLNTzk8mL6`73TIpeS}9!v0-Yf&dCostFUvpY1%DCZU0Mlk$ui
zM_UZ1NAw<NJAkcnpHX}8%HL>o`e!ZxTi$<|_cO-)e98Z(+5Y#@fidF$DmUQP0bRvd
z-bfH|108i|)7TLZBj0 at t*}CrwxtAx>s4*P;Yrj)dI}t&(_C3=M{Z#4CChq}j=;kZd
zO)5u;ZASv--^kt8^K<&2sw>Ok{_$v$zXD^%)@X3y8!Z~ZSsiH2 at He9pnxg#qk?gqC
zN)6`^91ikgT(GiGqgWyzgAAFBT0^%d*su&v)zWj>$r2aNBgavC8I5__!&a at 2k}#T*
zD3UU*|3|i-xi*4!@ec}pWxH#k9~iHzuck`0?L5(B^x86ghqm=p^uJGZZ}^-;5&ka|
z7^C;~yE-EEy+4(l*mueQ8D>6`7V9ID`;%esf)9MPCst&|#$6punsmYW@|LB$R{G0>
zR#fJ#-ikkzT<Gl8VL82}aeM(~H-ToAedGnlfa+~pR%iD6DYvRWXdRGD4J?$I$5@&>
zCwetc=7$_H0)lXziqx+M9rNaqGI$j@@1%)Wy^Dcv0;<ng89O}NdOz%bQ<A?c_|vpk
zc=az^_TMF|<FBWAf6{^Be)H$$@bIwCn9*YTa(s8wlgsp#sMQnLRo33sH7K50e=V5Y
zmtZb#{-j7A8Bnh at Wa(Z($y1yh?5%{CnMDki at yDsUQp706K`=&Ljbu2NfJw^bJz!H3
zCt4GN*T3iU*MyNK4`7}mAN{`0mVnceJrWdeM}U?cKyoQw at sgu+#0B(FVmjtccDJaZ
zE<V70elN)vH5&}`;BY0!+|!nT(ci1&LoE>+<#aUD-SZQNJ-sy9eW~|<lY^j}hrD#(
zcJOfTsAYA at o5^$VuZl+(U$Tp9wSn}i#i`4h4{sVhFOY>F&d0xZ58jQ60U3I4Ls(h#
z2id<Arl3MtgH&^%vXmq=FDVH^DR$N~r2oLh3~J~qQlv+;(oy~P_D4i!2*!wXB&uMJ
z&=CrU5Y}y>7-qE_en$e<eOA8*InzU=7{c9q>8O^WrEvRuyF}H`jVQk0+N_Fvf};uv
zGQpzU7N!5S`pGF+X3i4hD|E;<!xXFT8w%{I(#YJ(ka~zJ+N>tx7YhZ7FJf$r{x{Zu
zd-WeLxzgO5rbdx)b&(j>z{)kUYPPjZh?+1j!Dq+(a4$Ow3Q0x!ZLC<r1d?E`jHmkI
zFHs`s=HmP=^ab=LeFqwZ<&lo*TpWs05){d?xnD3c-It&f7k!SPAxRB_Uzj1^91%Ns
z#MpL3DdOCq`ji<^rK2)_mz8cd$6-dyt<&J5QsjJ#jf8L21i~a~(tPtNEHAzXiqJ<@
zm`#uGa!aFAnF`{2FG!3NPt}@!!HDHJZjs?Ks*(H>%kVM4XM&!Z3ZY!d2KCLn$5GjK
zX-y=XQ2|bSMTBbIexmg^%s8LMr7svl`iL*(1nk=AjSTB*n7T8BPLA$$1gxXQc|)q!
zG?7=}doFFB{q29#3vd4tJtih5MbJPvI2c0Z7 at DPdIXJA|3hZ6DEgo6krTPfcBcE^y
z6uy9hR10`VP{tg<SfM+`5QtJ}eHv4w2#>eXrw?-Gi^_0M<f0x%W_?^^4mOtRmMg;&
zt22ZVdhsnsMd_NL(jd`8ph8LFQ1SE6Idv<0ikNRh6B~%i1qo{8=&yf=!1KZ)ZL410
zC}Z|H6R|=`dyfgAc8Fx9to8U%c7AmT^uE7OP!7n9$HK{=`XWn>i=llHZ;Xs8+9RP^
zF_$dggT<oaV7ioB`2Bd%+%ihiEcdnO52_2~_8*M~98o5+BFdG*I1R!)5wopXP!H3(
zzORm8z8Z~^xU8*Hg=Sco|6I`Su}qp4MehQ;gkvH}wbSXXOd|orQV8z49pyN`)t`bD
z$6Pkru?bKzOeWRD16j*P;Zd{th1ro}-G4)?D$^h=!gg)Vpo at 9UTYYk*rNmaCwz>Sy
z93<KyBE$f3rid_Mu!Z`inK{L2+aYDDf*Af}u15MjlIIiDEMK$IN7PFtQU7RGvG1#<
z{3E27_k^Caw#ICcCKGyi6uHhhnA{8@!J_w`wA3VWZzoAzPCX_}4am=<O1(SHBMYqg
zJ`Qot{`6fpzT^5|6)X!dv+Hc{>}=A;Sb;Gg6%{qQ>x>9^YG$=(_5E06zMcyAMPhpa
zNB|<Q8V$*(VR2A%$1r;~Yhm=%D!p~<BY(nCKu4{AS8e^oB`-2&g9W9$#-<;CGFmT$
z*iC~DhYAy<_YT5(Z3Krvg2a~*6XhHd>V=#^BcAcWMo4V1r*#9T855IsOH=reg}fRn
zRsG~#vh@>#24jmty4vrzEVQD8&`dwI^n5wY?Ix67+mj=xn9eWz(_C%GJf6WrNXTA6
zmuQY9dlJS%2y>=fblCt}y2B9RHyC{=Y=rPSK$+4zP_Tcy>M}?ZM%*ZlqH-{h{F3++
zY-F8R#FyACrEw5a>d1!J?XAe+l+xRK5sJuO>UN3yl!&@Xe5w;z;hIbYo!ckPG3c-#
zKDRCcaj6^<fYX$aCU293-s{5YVIM2C?y2iY6Ltv at 9jeVD|K{FG41}4#+LgH>)roKO
z85KNsALOhi0fnP6bLo1fS?<{zsgDQB3XY83^u at R5j+gxFTfzf8@8;e&4-sAA56Y`_
z9bGd0<lf19{_RL8X?nS at MqSQ@yaB=GF<t(}T|<N79Umlm(x>`nY0piA)1tYyu5JUb
zaJ=*JNGR%9ElXNHl6|`-*+sQbEnm_lf^D69pW){u0|?`@T28c$wL$F_AHAKGc#!%w
z-FUY=kOj1Mbcj0hr8c{QV*apy at 2$HX?e(BGKt3&$eVObd2b4`apJJ07U12lorKAF7
z{K~J%zqe)+q=m)Xrjv+>#8D1F!J0^mE#L~McoXN;!r2e5I|@Ww=0rGZX%?WWjjvXB
zCwMfWb);Y!-&amlzw%dKiFu>-7zBgT7c3$Y#5jNmE9UtFrz?GpEgI9YWFR*l&Oo(@
zK1*{N9_4dBO>2T{&Y#F2Bk?bZN>O2E87asg(wj15<%-u7$CYII4HzSS?$?HuY5A?%
zRSH*AK1};C(*YcB*`gnjDX`z8EudYN{h&yVpft%zjsk$Lr-9FComqy3w!fIsvA*&|
zaG}D;3?g*5E26>3=!hjJ+MvLSofC=5di3{5XFqM>hH2<0u1jCPnd3y4anKT at OR}-g
zZvQZ%Jfsvv9C&e|#0`+Bf)%3<uI?TDJ}Wv at Dd9ixSuUgg99R*`_qd(lXPBrxE%!<O
zi#272T6z49L!jMxkrj;>M*ySEsOQyJqqY9{sZLP1i|!$DP>MM)UdhT2DT0;p(61I!
zSZv!a%oz-Gn%3CT+BySGK3z<eOVD9du77vDt=SX-KZMWC9lu~y9cB<=n0Y+onC}!Q
z-a?+Z$HTH6<U+jf+{3Y#($c~=k9*1%aOg?yxKKdNI*v=p{#B%9Je6-Q1z|twnD4 at 7
z&{=$bkT%SXXet^SNEh~tIy-Yh!A?vc85z+{zk8cw2yO}Qgh=g2(2HTJdAd2<h6V1l
z0wf1n&9fsrEI%heh=aLgcRpl|z`k8h_~@pL37#2<eg45I*Tm`5nLJgtZ8_j?>!G&-
zT<s9YP~<^8{L0gF%eI4cvmk^XHLTt-yxS;5;_G#d-z5Z<3U>ky_-=c$4#uAE<Lq|S
zvcbfjb%*C4qgSe=v0u!xlN*FR$jdFDHnUN?f2dbwj|+c+llG>ckZnOdY9T{h2OvR)
zt)oACbJh^yyj?eP5j457`V(+OXyU}Uh|kWA?fia*gsJN4vqWgJg<G?2e99DXQJ0Wb
z!7 at dyfOL^`-(WhPi_#E at G7^cG{23aJl(@bamXe1F%FG%YwLedsCD&c2con|G7wxd~
z$-QaaJtJBG${@W$5HM)jj;<LKBpagdKLs+}bm6c3?-IFtjIMMtxQQ${&WXwAYx at 4e
z6|n&_n%uTrY;GX^gOn`0EFF4D)5d&Jxo?{_Igeg{Zn=*)yNe|$O)G)u+RBln&$&uo
z5 at 0+&gKt-rnj7|mFmh_C=e+eYyu7~ZDb3Q$O-=3^{I-*J at hu(4Qbpyw(1*n}$d2-M
z9YTT`>ie2q-o{9mdSfEf;bW5G09N>?cG|sSyuHacLRWVhf-PR*@5f2jY{)Vu`6O67
zGM5G|T}~pSYFJ-3t6)!&dw<Zpa9XMLP?RiG>zP_ZB`}^L`b at v14DvX4v(dtj77zQT
z!%h<AM}LBJg%9ov$;fM(-Rd4-0ffXT>--T<8&6!UKG}HA#_^p&m#GaNj$(k^7|~R%
z=afi!mF0KND$ouOd7$d)Mu14y at xx6=Z2ieJ$n}L+F5&EDn5C!cgT7R5BWu}#4(Vm>
z`XD@(TJrjSbsad7*}U3kXCKlGa~2nw<>!-h{OJXQe at 4QIA`K}gTSnV$Ir8LzGI&WW
z&XVLbQO@|IygsY2)6)y9r;an0b`Qz- at R5U3egbOF9l4O2^h35O!aD&@Z&A*X^{0_Z
z64OEupmR`lu~R&-eSMX~?sK77<W+kbFZ{=aO?N~*GS4&IfrSCsc-1QE?JNq6S~Y%y
z&js8hH_%H!@!w(4UM!m?tL|T0SCNmi^R`~5{R{P10d^3QlR7MomOLF!MwpD2W5->+
z%c8WNssJ?=@P##zMs1El?F9B{IXPojL*48Shx~Rk{Bn-tnkeQXzZntx6n&O`?K6^l
zH8<7{0yFj0=8uLxw(#Nm+ERmZ(JL+Jm+avu3a3ITNtebS!&?}W0DCh-ET_j;4&Lb6
zdj_iGAVRoSw7hqfSO=Tp|E}jQ%7K+L@}~0_oZrL{+_iapS)x{1N&0*1tPg{lE-9BI
zS at hjnE<R+Bv*IR9tmu<NaQjIGuY}nU-sJD2oQ&B0xvjcdHAfwHLP at Be6AqYMq#l^I
z1!lUB_MmfzJck)Gcvi&g^ac%FJ^SmQ?)OU8bDB39tont+Bi5Vuo!B*dtv~pHXD|X}
z%fk*kQ%?4A%<#CxRTpcwF??OYn_X{X&p4jP`uR>`nND<W{Z84OPXvqK4lDS}f!b=G
zzJ#e&nA0>ex-M`xe${wh at bX@>--LykYI1JU<vMRc$?A|A3u=yR$u=YOjbwuvJ|3$u
zd*n?7l1BH=lPfODqn0&kwMSF#c6n37M}MC)UMr31Rc^zl37mT;!lOKO+|WA0!nDe8
z*JZWo?bY;=jN0!jF}6?qMI(2t4P}8{yyM*C3EFcNw^>(7X3Jg?`gwS4mF&F-8s&97
zFx_Tlex(+rH4=$u(Z9A at XK*fyLo+)v7bd<)c3OXxq#3d0^PTG6bG{m>cZukF6;uE=
z4m}JxrhQ^cn|D<8#B~#7 at Wui1e=>l`x9{~Tf&zPV^}NmWw(s_Gm2S1ry519IwZ0ly
zoIBuvg--dDMofkG+iTo!e?A6w{<xcps)+hFA;lLhQyutCvsd_AaXSl<6x{WxMLp!_
zx_iaKNkqc9fHDMTjHY6i<M+pL<=(B=X^=LLrWfy|<bhs-Y(;FDoKNrK@}4S0WUTet
z{1cf|#QGd`!tg-6wVnB`$#*se8FlM9LukH+rdU<7?=nczPIT(LQFGr1j+f0%p)eAe
z1D%@#WpX0WoQ#oQxFZvECq$^q`+rdge>|gf+ksO+xYB3Fsf03+&UOo0Bc|72pf at p&
zNx)ZqVgDYPQsZZaPMKRaS`JS15XFIz-M6m`+^aY;-;w_mgk0-(ZbNu3yBQf{oW<yn
z^`+ig)0?V(Lt}03$gl5~eKHR`cDI`1f7u_NxpksV-|Vkk0CA6*rcAgbs}Teg#d0K+
ziRsCw5bky=0Q=svZIbBS#!o4m%WXi+%{wVO9Qz$O<y05K8H7dCY4>wR;}A2He07}8
zP6>MA|8l7J(x6)j_gB*uOk$)5!=FY(4*{N~E)HXZ at k&iy{hmE41>+>WIfOZcdpJi=
z^uqmpO>E{IfxVFkJ_CdCvtDa67UstmkKioyppWPJEM4ytg#*wb7g|SW^)3sm!cX>3
zlQq1ZiD}yHx3>&tc{g>5mh;dM+D@$z#xNmL%;HHURyv^doe}B&R&9b_J1b<W?I)VK
zI=f~HE at 178LW)?%2#8aCZEFPVB3K8RN~kJnAm9CP-%Q`EM~k|=_Mate*(`ih{l;M8
z3mhOv(ed!LwFtsri15Z4rgaUQc|f=&a54}H-(2YeakAW-pYwGZ6nd%|tn8dFPKK=+
zSz%(JT6B(4WnnaaOdsQ{NYG9BH?5vE#ui`S2BF8BfHd9sk-V}5t)4yTbQJe*N(kCi
zf{Vf<K3wdkOI|#Hz=!RJ{d90{X7DKND$qPtLD7fulVo0nu1#_VhPMky%pVZm8(0%{
zO|6teJC`*X{Ce&05{&T>zvIVV?>wf&T)KTQImWfMZN}0?kZZnGR at EGh9#v)_Xk0i&
zE|ZJ*tBc)aWXReQK6&pojckicWX*1u?ij-2wD;l_S#kM3&11f?(0lgqC80WVBAemk
zj7jY4yV|I=tsewVdIRXr8F)42$2$1G)HeJ&2{3aS(-Yv0QFts*dmXpWlyuhCjVLR_
zEnV<YeBrydj+~#KEg at 8n?FvVUuA2w94Y}hT5`fMPVh~2f1!hSR?j>uUiSdLmXK<b9
zNeiD&8;#Ebkd5A^7p6!h1*8V`cpBY{`&`pfkW`(+K!#KGZ+QJx3Gsk$0aGPa5v)@F
z^!<1Qqe at aiI#+)_f5{K~W0_NBoM)KkNfbi at DN!nKg)PmCfJFQE(R$Y#-M|!mi>$x(
zk0+JvDvwH0AD-iX!4BUIEftSW+Pweay}ihj%W}&X^to59^_Eb$4R2V3(`{7F95k9>
zR?ANO1HDIX8Zm}+A>35MUe}oD;i_7A;zQPzNaKz_3yW;^*<Xc3hD~vr-QL}m#Z*ld
z8AtfvwD%_OlW_eEal3i*jUyd}nWdY1x?EWY<7|qlX6&6!S#(s&J_7oy`EvN>vh5KT
z)SbzcY86gn?DjGH5zZ3UGOX&`9~o$N=1)Q=CmzKUoOIG5HZwlXU;h!g?&-m_cIomz
zox8`kqzu}ThQ at yob}e=b#f!`B43`R*R39ptV}7ZPQmLs~3T<&3Ke;PTY#Dl<-9X~P
zBAfO2X_j|x!xw*_qxwoN-|)xx)B76c4Dogy*ix0QcGPHDkT`qcDqKKF);7+3c5Lw#
zCgo)hpYpxA??KI6?;uMpHH2?Q4_tng86mFK-#A>+utnC6^y_XDhHn0nUpXDR91z*z
zW};yn_%%3^LV%PcH?h``@&U8yF;{32hmy)POdrk~7ucFP&Gc3K-peeAHalTer(o_D
z*I`KOFNpS|ny<bv%$ZYu|DEa7VGX)pV!9p!v~im7pn2{HJ06?`C2JQ;b(I}dux<KK
z+2hL0?peSjp_`|%)ikRsLbMGT;l8XP?4`Kw9gIjU^iunZYq;<S**DhO)2^zqX}qpa
z9ng?r&kMidpC|16xQpK1Q)<LJ8XD%st_ct9Ew&Q0Nh=_2$fucZJSA9PO6VGWx at WSq
zyzF;a at 0EWV=QC47rJ#FuLBWZ^!rZ#Q6?+wE^Z3 at RdaiuDo^(V~a_GF-`fghIniEJD
z^a`r6TaL0mbe+GQ9!S|vaP_>$;lCk0IN&*`967n(#gdn7y81|(zA4-hu1;*Huz!6&
zlD;yZd-br?>=W*}$-W_67 at _z0a{lR0Y5Mwz*D|{GliZSD%AKIsB^X16OpRJ9s^JC)
zS1;ikV-3Av<~AVUtNMV37A=Q`+5uS_RV23ern0f($oS~<!{<DR=cpQm(avhw3ay+g
zG4~=E3B(p!I2HK?Hhj2NZi8~)605fC?+G_S$&HU%xF6?QrRQZ)PC2bVO)C<YKQ!99
zYCD_r1|=Tt2e#`r<2BbV at T~c$?K?eGN8P=?-eH@{-@*#d(E$>VQ5h-S+*7ZJN->D$
z4APrx$^|L^<?I<dDW=*%+q|Gcto_Z`egvw!vr2&<UEW$p`3W_8^tmkjEg{85ZXa@}
zP1PE8UI0~D5xLv(V6lO+Dheu_Ev~Njv+j>pC?RbGFv)3c?aJMA{<C^8qp at tSAkyWV
zA>EGWhraC?-DXM`-lEoqE=h(zt;Qo<T_!&T3GTOPxzz02uV^Y9$*g1A0-Xa#aFF-9
zH(?FoDpYVI at Q~cn+z0lA)4SEH5d#S^X89{??Do?A%K#VEZ<9?oA&XN>E^I at -vu=Pm
zKcB<G8Nyw}v at sT!qsw(0>~CEcW+wT_M);NT`sj<vmxEdbjpzW6f%P%7+*JhJi{BS8
zki(M4<LM(;&T+UosEp9g3DaBhG+^|O*C`!EM8FtTWvj`|tf-#pkX!tzHtSPUw{~GI
z{fa{2c9P*0L8<)m=^gW^8LxaK3T{%5Oa7f%lKYczI{>L~GJ)!tG)fmYnpYcSgKyzw
zcIMgmHSHpRy*%z)bfm5%%-8xegd}xHmMla^Jquc-gN0Gb#Fxu&*Y$C5- at V2q{ps>h
zyYcpZU9Xlw_EsFebnY;7vs&K=x|_iFqVIhb_**FJ{q5KIv<siR%Qr%In$X5A5;lXk
zQS*- at RHzZ+ipPAeUmu<4cs5 at EjkM!DU{=}Tw}=C-1Yb=NM(j_Wo^HOh#BF|-Q(^t@
zZ8l=$!oE4i4h!wxE^7R>D~y5K756^a(N$)g`_D5`Bnhedowpz~iCYjEaOlD~JTe!H
zR=IECVN*1EQE@|QnXS)KeEwl81fEsJ<Y8rS6Z_GM)R6yc>%w5wq&bTExlT(+0asWe
zY#cTcI#qmJnVOAfG>Y at 6ZO!NrDiq{y2`FngDhVln9o1n7#Mn8nbgN(THm!uq4H<#R
zE_lKdJTlt(`!|((O#^kSfCwJoJZDkEAGeI}+5oKl)Nj1Lx^!^k7l2v`*~U22I?g2}
z1MFLf^)8opIy?p=W{g$XHUAH9Zy8lrx2)?9+%32hh(Ln7yM^GvgF|p95NzV^Bm{SN
zcY?dSySuxek at c;8 at 7ZUsbAR5}Mnfkw7*f4g)%(1qrqQ*XWB-1?&0xV-P1d at 0D%7EA
z#)*Gf8;FqYYIRKH(Ql+GO;GV&b$Y^(17;bR%O40=kCM8R98%#xNxhz_E!KjWx$X<+
z*5X#<!#|gw!L*VDBkYo|u{wNk+Uw(biSp)C%|0RAZ1=Rc8o#b1(iBwUVBFJ4&f}?^
zoPo={ww0dMRckPN>WbZP2?_G at Rx=3#kdmCdc6c~=Z}B{S^f*V|(|B~WP|LZzK@;|}
zC0Bquls=WR=J6aG0Vdh!X9ww9i3%RS?`f8spHaz~{38SkH^7&dT%h^Dl$OQ_K>v!d
z<poN#av)1RatF9>=XW~kH)ldOcdAV<bz3}Or;bfMGgOko_i-(9m!7!-NewJiCki at Q
zeh^~+In_ at b2>UI{o%S_>jL21J)*IJ<^*0-G0r at N_?sl*UlO8`+;Pm=?E+ at Ur8Ff}o
zL(trum_$~1JbXVDs6=uZkhYZhewR)+US~9;9Et)=4T%lX&zpvsD0iV~+j7R8Msm?7
z<$Lz%C$|;5e4*6^vt`Gr!J at hx2om6QXS-`Ll7^$Js_}l`t(c{S7|2lWWHpFe_+C>K
zH2BCnjnVK#KP{SQCqCwI>k|Iuvq at 0ZG~o;+Q7wUe!o(U6K);w1Y&FcWU~s;*FhMRm
z4WSyslZjeCDBq?8W^VIJ5)9Ihs260RYIM_Jk}O8#)BzjaMzK`Rg()tLS`T)WmkmW=
zRJxXJqP8}<Yr2+6AhuPZr_tlqeg}T*0eT+yYtsyBV~>+V#!^KSYk!iCW)if4eTh5E
z&V)lmm9{;-)+~v(<AVut2ug^WhUQ-fTRi;E`@~9nwIvlgfO7}hlh<X1rQj;u1P8di
zn$fxO`#huPueUn2%uHaQ_PpNtyW+m%*NPWYGyVA79MbbsEVFPvvqmvqOAXkWI)AM^
zeR_Rm at VKAZ($hUL<MeRP!mEo)?(wX+nCWjpYgmkXb)oZw-tzDs=@1IR)5v+TS>gkM
zpcD-iF`8%jU#U#`Pw~<B)9OE=rxUEV+3KALFgm$E^K%8Rc-)it>!tk+TFpG=X6<O5
z>*H^)z-W_%ZA17&+lMc>F7RTs)H3Db=f(`3s;;scOU>)*qf+>7YC>z}Y*1bNhqI2y
z6Wc#s=n5X=e at Qjb0K&wsZFk)LXT0qk0)oVDs|oF|R<@Oh%1aXZvZDC6v8P8mVp&6j
zuYwVjm2PS~HN@<f8A4zIsH)C;=VQe8^yR?IBxQIHtmn2rx_uCxk}__WObYijLqg$}
zw9MsC;H`xj`U1j-m8MuG^BF1o<eL2Ww})gTx~|G#zGt~_%LO>a+d56wWa{EEf6XKN
z;R2-9-*va&(@$o?7<O*M+b2rcz|h!3MEtw1D8os1N?eNKN=rh}-fgqwk>$^7Z!xU6
zVPiHH)pz2dqX$a{4k_LXEib!cnWl;WX)|{nZtR at xgC!5bM)(D0xoFHD?FKuF7=TF_
zsjKQ@{a|x-yy!~#5^ZqRgnH4*vBAQ8_N?sJs}N^noodK%9C_DtS^2uf4Eyzu8K#f@
z+n!E;o_|2K>W##EhCKTzTb!tjVI9y`<f~iMck`wa-$M&_GqTkNLzJu8f9bLip6pol
z@^u&fvZwti9d;p+x>xVJ%fV8udMP5&^%#AJFhO2E at LyU0q^JrWzKG%_EemT)z0b49
zP%mG6kP?lHlM6{-(X=9kc+M2#taeWGPnuzc=zmG^J90U>`XLHd-OZ|lCnmn25QLd;
z|MjIQ85y=8L~QL9CtTt4 at Got7#+$MuYkB5^G4P1^Y1GQd+W8iKZ)1ek<Qppvuddsg
z1NOa`K;c(`m)lD2;o)VqMlJVCIr0q*54G-*A-FLC4Syp7EeH3YTNoa=yS5RJun_^d
zvloF|xEPPxP at TYya=Dg{xjDk;i&(d|ON5qN<HrMX_kb4sE#tz5S*S|`HxEbu=|Z`)
zDD`88XF`wLjtYlk>kx)9vugRkJ{2vG+Q*MjbUw2l4qPu022*Cg|4~xRCA0ihV>H2f
z@{a3*`<!cTt<bxuIeaFWAy6!8LQldUAqEAF7c4_!LEnJKX8eVPQnCBs?TQ-{q2AgB
zPeD4rwX;~}Tm{vMcGymf>=HC?j?4&s`h3L<!XX^C&rB*eeTl|_2h*8wgZYv4T${Vm
zvO`Ngp}W8`dJB)@puv;y4i|~8wmZqX)6D$bkMh|~T~OLCJ2KqRy>FqfYN6QH7QA&(
z6P!I~s=9zTee*yYx6*w*UUZ=O(#{<|^lL#v^80VLTC<fI;@zRTjG0#x at 8n4?9`#17
zevmuFuBeo=8suVE&<GgiSoSW^<&GRQBE^;(Z|`(jHGY}B3PpE}I2s01(jrphT*em8
z6M_!X!%}Vtf0&;ip_+n6M>le~)=032I~2>Xv0c*hkI;j)5p`@r><n3Za(0YqQXVdp
z(;Pc;r>l{IRIfYZVy)&o``X!;dSW|pN4`lC^5#qCF|?+p!$|DlNu1n}OweQD^tRAo
zM-KiS0ozQ)rE8m7M19Sd6$f6q#ch_S?W)FfTVPd2y>N=?PvPDOixXAGVGKDV at 9ixM
z3S~;No0%8?`%8OwtER`5+dwACmrDuP%uv<Tjh#?0KDF)}W8;$hq-03M3Z%1jR^m3o
z`m58!HQP88{JSUQ6^%r*Kdn6&1aV32eSNtZk1~yqu`gZ-e_LJp49|dc at Ww+W3jtbJ
zK}fYwPvHm`*gHIv0@@>D1ZoHF?{(S;K%dWrUr|qcutiINW8{B<Dk1-Fk&WidHu at P=
zZrv$@J;_n4xzpS&?oujuJz~LM$3gF&QH*lKR0{nZ9~!iexJ}p+O=|817i5Wxjj)S9
zE}u{^p|K|m5~~shP)Sbyh~7VU33V*lyK#3XC at eCcR)$QQ){a?)?HRiplqY7^i`b$J
zVQmLqkI~1(Fw2vQgi9oyljdk$nbkhrPgX7+Q5nX>l+~Y5OCDMs%GJ%-xp_dQ%e9>l
z2AYth8<)rohDoo;V)<U4&5F2Q61E2h`rTsQe}6Eaq6TMtdpr<-*CL;jm6I#>NKQon
z^MKZfnA)=|otDm69rqxH;03j3I31W%<CdjbAdMj>ZOTk&#-U0Z0&;T+jEvWNKdz0l
z;bqpoc|7)gM)4)|_mXp`^ZGR4MAOea^e5u7P);;!?Q^GqzV0{-EHtyBx;O>qs*Pgs
zdTGWnxrgJSR3V#=loKokLYOf$Uc!#us*}H)67(<qyk|d&HG$jR9mHN{LoUx$kIqbd
za?u~+=R3;x8-M at m|GwT}fZ8bhyGJ{2wS=1SkWV*XlkanIonz+ayK{bPA1Ax;rX=w4
z#WT?sS?T}ap&I|SWOL?N;Ma+hy}Hc)SN5g_4>UVpbl=b1IZtl*0J?4`b>@&(qKK-8
zxtG?yxtl-%-P11quDv}Pa4d??bRi}GzQ4N`aQYw at Tl8J4QWgx5(1TrP6;pOor99(h
zQ!YVU5d^am9uYcE`>KJWl;ClD)k982B(u)&k~jm|V_5lm#m&bjCNg2;_Bh`Vfdr5<
z`p0pqg6CF)4(n}QsI>rgROI*y)rVv3Aknk4o)&Rt)#`roo|dJZABh(v{}yrm82f(}
zF^_hN9QcftWpKf-LBE^I20uUb7D=j<_QQ4V{TVh+jStKr_HlTo?Gr30ZW4=MOYzuu
zj2T;GY3gb}{nclJA^*Kx$|`7uV#1yX9 at 9JSg82(cGfwd(2TtmbXaokgGH1UJ=2h&;
zg}PgX)mgtXVBIiDmj8q+)^@)qcBSKon!yuz8V*L)e7xkTYIgNS2o(y4AZyKZ at ujZE
zf;E`+ypYuR=~p*rT{uu<`;zXRt?th+Lih|s#>U2ZMG|KNqEHPDP+($nSSv=HW9s1_
z!PMLG1l_fQIO^mQ3<mqxEbw<6sT%xTe2`#716 at 0k1eI2p?$Z#Dr)enR7Lk4O7pxWr
z_nD0eg~uhxbK0}h`6kl;exLjgr6Kq~g9T*JV)O>iX}cVJ at 0xHy!r*$b9R>$@T)#Zy
zf$Iv<^z?LD%{9X<0{II}2gAz@%dQJ4QoI)vp}7Zr`sL0Gx_S}zEX)&0s+?RzInnCQ
z)6B~=Idv at V<G at Q7#}W8f20;7AUrk+cuk-u2e0`h at 4t2e5dBzH5x_v&Yy*)fLuy~Pc
z&L3Z)v)H)2gp<QELVXz_e-16ZM!B^Xc;I2|K0VztfBe>m2Eb$tzc^T;Y{9^N1g9%O
zbrT5BwWLqEe4BF6I~vJT;;#&U`Mmc)mZ}rL^^m8Sj|u$wl9QQ%BcH!_vgIDI1zoYn
zYM0&db at ci{|6d}xY)6!RyLzVd{I`Z*Y&$a)I at dpKMi*T5MBnID2Yb6UdkUuyoX5I3
zUJ^ySJ!_=$G^q&j>v*%<kZ5kHlW(|;H7h!FGUd*sZQ_#b{~`r<Z~v&L|98dN2GE*V
zVN at 9un+jq>FqogjS-(~&>gXK5kn#7N2~ty2BIvANI^i=Ls4YVDJn&3gjNc;!!o5+g
z7w~9p-F#zay<E3%0NtAU6akTlUN*=1`C4_!?d9~V5^IXl!hK0#;30MDC$+~~NK#75
zdg01Ts_v@@R$jj4En;_G#MKj$Z*UvVB#AU_rOm>$yY@>5u`Mq+Xj&~}?i9dnvy2G$
zrU<oivmzl=cWXvJBEz1t=r_Xr3dej`whuJsy!~fb$3J$CxbJtki~Ok#bk`o~PW$Q%
zge6`RejjWM=TZd4d?}t$uP&TDS{VH$*Iwx=e-zY59UIVG=wW?}+)aS2(PH22G+pY_
zWRi+Qclv^n$Wzt61#u4hPr^}FWPq2GQ!sO^j@|X?zWS;ZZRxxD2I>xxr?Gy3HjD5P
z_-JzS at U-2mKmtzWmeqFR@@u!ZDYkbwppVsG1i0GzZdO9H{EjM;uQpmEIym2F at qz)S
z at D90DyQzI3Rz|gHu=-K9`Gsr+azm=k_BH&w!IE~P+yg8Ifym>TIe~xpNy`KJd+T9P
zMyF}H>2O3hFyJwqsx^g<j*bX4bC^@mD9)E^_%pC01GH^D1p3+C*~i(j8 at huC*$ip7
zqle&ma*?LPwfY9TTE?U><bOy0xt&Idjpe+^OOd at DN|S<(V*Tj82q(5p4R*>u9IS5H
z&t_9%5hH{86ZbyjJ?3VT1ND~uD>Od_WxW(0i{nvqd3s`*|LfU$+%GIW-JklHl$5l(
zx!HOD2!1?ceBo3ZX4i~e<xu)%#)P%VTzYm(dX6n3H7Uu-Tl|6>`#4^Hl(wUAc-VZ%
z^+)a!_lc{W-Fm#nLD4{8AJX!q<EjBFiU+ at 4aUVDs!F)hqn{C_HSWCRz>Lq+aM+X8<
zrD<)>c}<E;@w1<jY#mGNCyro&yf{5s1!WR+6s=i!?D5|;=}m?>3>J<Osd%Pu*`ZG-
zLENU#2)^(q7G0BXogz at r_T3bB(2_KcX4xfpm`MGUE`0$e+#z`z+0SLs;_~d7$$zO0
zDK?leyLqWt<Dalxoo%06E*clKWdn)>X+D7pyEDl&kuKY&O%cwNN>5oXQhyTJ^fIiS
zQ^7N6H6pvSvLkX(L1$8$5YmqS9h#E#P7O#`>Z^QwsX23n-9$v*;-#!m`!Z3KDJPop
z398c`m%#rt=&!cXJbUYNGbZ~7jhAQJOLKNwk#LK&HIs-}81oKz5Yu~hg6bZ>SZlK_
zG+&ZtRPk}jY()`v5<yO_8n<ndFF#2{Kj=7wjhVP~5M at fAzy4YC+UVuMNo|OaY)coX
zKb_x3dR9Kq8`D6yIc~$*CN%%ejZDF~=NL5=?E_}0Xi at V|H>fwoj%e4$Z;8D~f(@u}
z%X{oNk(8?j76bFiEm(Wn#rZA6;B*+_vok30PSq_#EtNDq2l0a`sBiMETa0x`O1FO^
z###RE2<-9Jm97C+%ZwpvcO9kV=m3N%`($yAza=z~q*J^as$(=gD<g8~Z0{G=f|Gzk
z)&C`SxjVYKS^PiJfj=cbpo{f(bgpjeu8wA&fBnK{ZFxa)zpM0U^~kdl<hFX~;qpk@
z07V5btyva14C0YeU5EGv at 2Fy=s6Hsxc5vZ>c{b(-!>S#pzacNBpcLko3*4EFWLD(>
zqQn>ZEBJ9JbcXi7s=d3{O5Z_o+BWezBT|$hQGOko?q(eH2II)U1zePLZdB;`<Yyge
zq09skHBS;93STu1FaFiX;~G_aTVGg2B-oDGJd;tWPmM=?I2l4vEbYXjXfWAMtp()2
zpnFwZG6T-Bv~w76MA(x><pq5#ly^)M6$hb+|K at O?CQBP1s}BVl6;FM}&?W~c#isCu
zc?l&Xi)e_xm`x9FgfhWWe#-iyuoeM!#8hAE4zvUBTjMNpEs$5=id`^<eps0e_!QXr
zE70$bGm?_add00RmR7eJ^XDF`{%iMU2JQ8u>$#(03AjjP-ze!WI$hk4lMUS_1o;-o
zdS@?1z{u0d1l#go1?1sh1>~S6^y@&o4p-^Awb$f2UWVki_Hp0?1>N@(E@`klQnshK
zJd)Ow>h?>`Jzs(p72(=5+lf~2fUY9!R)<Jl!G4(tD{2QDp7&VR6|LHc3wO9 at r-k5*
zyoLO(`U=#Ddxu~#W at Y!=69nw`kn;e(1Cf66t@|jbw3)><+vdNzMxsg0&b8P#-s|z7
zf0r_7fL^;tIR6J<lc at l#ZuCT?n`-E^ej{V~QjjFjh(zqzQaEkAc+kVO5_)LPN>p3%
z6hSWV4&VfU?r+VGbLqG0Z*gG_UR5Y#IcLUV>Y_HQwaI4MmxQSdc{BNsisSmHUqtg_
zH?vA1GW*NVhf@~3`Np^{BE%y9DS#v`fLvfuqBzzCoyl<1+!12%6MOgfYZe|$+uJ)U
zmM=J;8=yK&C~$RkX;&rHC!<1cTjP8e)6wb=d)cgeDf~D{MyU}%d5d)(nZnnEYMxqb
zAYtn(=KDyTCo0bZ951uqwt;bAua1T!=mIAEIX??pm)29UWA`Z4%0p>FH}o~7u61To
z73F+^`m*X?Flm&sEWBQh)Ag<RMl<5OqXr96 at 4&2qW5<w-EcxkhUW;hwtmGuo4wB5~
zyd@*3d3`C%UdZAR%K|3u5eo=9LEos$7lrJSVOyCi)p=y3M5X$}Q9+oxTxkOvDs+i-
z!gu9}nbADEv|?rs%dw?@A09wZrGqs_8ge>|9?%M{4OS~(vYi~g^^?xZYp`Ny0nS5p
za`sx(Cihv*9l%rDK49j~=uIJItKniO;?zJO?BH%|Vsa+vviU!l3J~->8EAfac0JJ9
z*||{<NMy!_Zg#oaSE)$_Rw=M4x}kiD-j-XbW*(5B^fKLU0?-wx>gW^{<8Y8M=mxJC
zXGndSmlLZ+vbiwSTlxz`^7j^F1JIo3%- at TH-PrvkIZZ5M44O`Pw8!ZJ*>)f4C!~hi
z`dOR#Q|do??qNW+>H8%F_9OGGCaOB4f+xVhYYiCHa<_Jd_W#8H at AQd6FcPOrr|ZsE
zV!vQ66|VTky-7txdcC!WaWJqI5go0vl;BO}2 at KRg3sYAIN4N=3_Z!gS%>t)@?}&Y2
zw&@O*fx$P}D&@d4270?QdOq^u`<+1FfttgUrr0dg@}fbzWdoqNhIVqU71>vi=}Nnq
z`6>>l!y|N4j(FNR;y1<l7IObq#kXubxCE;RQde3;fS{a1+qT+45|WDUc5Tm_QF$<D
z8zb<qYY at t;idtm_?1FwZsn%p1Z441MsG#aGJ!_fwkp&ej#o+yiXX$U^>C$8cm2X>2
ztm^<%g0XZg^>A>--TZj|8QK$4jE{H)jfqgCAS#-GBg*<p=*{0lj22IfS at nuqPHfV+
zL;z2mHeQUKumVU!3eyx6&q}tV);;MZLY0Ub&Vg_4#NcZg=!W)`vfOPj&+%B-GVj?7
zgC{~;!Uo=H$@f4Oi*(ws#(JsPecEppGs+1v#@;+v5ZCU{mxlR3rFltlBX&bmn}5g%
z6_Sl1Y3&P$+-Qz6K`l4IsSlp+;XsSFGZpO+G9Ti at lNPxEJfqz30qK59yRpn+zSEo)
z$fD)P_l at ZZN7x|MZo=xsN^39P$2BPJ6NZO=#O)XcHzDU&{xpXMKy;hy%$vHG%a1O{
zB8?%EkQTz*!;?lg6F#2s^8o$>k?k108I0tE5&-y1izr8Zo}*b0WfHyjS~dTVEDac@
z{yKMpl!|)V?$$u;bW1FgF`@Pr8V|pf^U1?w<NP!Dy|shVmUqDHOgD_DzlvuBlW#>q
zX6Qd6IHCqB<e}L6JecFtXeC0a4nZ#5L-o&}OS6jd_*nY$Hv`2(KMms;+ze-njNJIX
zK?kTWB)N@!Q`LLEXEWgdMEm|t at JVp5>P9vV<4d8aDfe$}Ia+rSfMiHiG@%;BmPTdK
z&oIiLv}wyQkb9t&|CtdLMw|{KhzXWTkMW(Jh()_ at j{i;)aY5d{bZ=M74ICfTVSN;u
zr!)0hWpl67)3~~$>#b5)t|s!%s*H3N;ZT}Z2Uj2J7PjZJI?P1yUKvCVG4UV*MBEkW
z{0A-IcK;3h$EEp?*;Dd&4IXwRT})4)^Jn$}oTtxzA)4EDYOn(lRf%yx?y%kLKR5Kh
zg31g65dITdvril=bo<aiLtQis&wu46_&;vyQ2}sl=<4Mqj>r8(YFSH5L}n({AGf<#
zS1wD?QrkN&O~?0(C%24^d*=a5r3)a4qh<aQg3s{xl>$$Da-4j8U0q#pP=ay?7;wm1
zpuyiw+`%T3=meZn;oGdvZMZ(W4(`~0DS}SFM at WqH{i8pc4$t97M>U6wx+V}+p~=iJ
z>=J%?%wE=X{g^<Prl^345rm`9<!{zemgYtBi87X9<Cor!tMDu0>pWsN11K6yk!B at f
zdKz}3$X}zOYdoby;$afILEK6ok at cap1JIOfr_)e!&)4I4#GE++*0gP>WVf|9pzaA-
zy%{|Lhfb|^3I*W);yLtuwoEf~Y*4vG;(~MQVxx#jEJcX>4d!)_x`O(W1IHRFN~b*a
zZv_>0%<D5W-GT=D#km`lE)Mw*xS05frLYsYBTW0gEIua_Q|y&!(&8U-1<M_KuU`L{
zUD=`M84P0j_&T9KT{Ax|S`I~r(YF$}Fnl|QDC#>IZcpW_ewCi<+#kp`K;L(~z3=lC
zN*~a~ES*CA*1*0GB!Kr}yK)01$Tprm)u9}z7ks{U7nu)Tn!L+8i;^o`?`4XNP1 at Q^
z>N8i~Q8;q5lc#P;!TDK)T2nA1JAqTya{o`@%_I(NqwKx^&Q1Eq{fQ{m<C*LEwnt!n
z<>hImkDuaUgZw3MMBs%4G`khgooJI2cmkh at 3;yqofNm?U82$|tZ09>9 at l0>EQCXjj
z*4AaQ$_lJ%3LPPHT`EeR;j7mq>>Lb%8Ab$ozsJLq1Dp$N1Ya at ivvom#B$4#P!fgx@
zM`j}sN29T?RnU1gKYGywq#e#*ihT0Zvit?j6y0^EsEMaw3gf2n at wI-jL$8p6g~+XJ
zDdjt!ef&TQyq}BmJu_&)7Ck|BW+ZC;{w~T}1<Tn)rAyEQSzzgDV+r2g-p^(_d3|<C
zRT^1?XUpX-Cpv7Nrasi`6VyjVRvMnna!^?lmM_oDkg at Ow(EVhwnub;{XT4Bmr*i0S
zt^w?guX!?!nKx+c?i-*ttk(ylP at F9V!IU(B+4)B^YhDi*Yl4k$&3Wrgc=vn<$6B6{
zHr<tbboXo5o^0CB^g8Hn(-LuC;kB);)Yg5cWwH0#9jkO_7RMmX=E<L?yrZt0j-0)K
z)qwv|;Q0r5LxFz2-H5nd3m^x{H-WSzt6vbn=z8a`EV!*jXv`xsH2x;N4`>}o1O*y}
zQ=_M$lo#BpmD-y_Y-fk|-%YBCSciB><z^gMiww9~CDdnZ-5F?2PVejXIaAoGo}W!k
z*d|#|!i2l?4Kl|(bF`YnV_B9o9_;^I1Xw394#ze0Lk6G6s+fBGBm at cyf;&1iRuC(k
z>Y?nxIUMGi9?b~Y8!b8lsE6;Hn6fYs1P(fS+D;FwCm9l^*?ue){U??)Z2bo|G#FUY
zCiWsBo*)^)^y-n=VQ{hPnCLHcN~}wS;JMUD{3|NV;6G+Iw@*urKMcvsmOA6=Y5tbB
zA3Tc`#NS{FKc7M*OnyQn|5GgcFJSur5AgH9n01l=%>m|rT-|>o<^PS6C4ch|cKa95
zrD{B3H~n|v{$B{{z7Oc!dGql<@Xiacfcala6ng1VQ}Mkjc at z9w9nX2El^ZJx@(9Xe
zlIES7ZH4?j)jALiwQ6Pjt`yB1EoGVI-t6+k7JW`EnOjM%Q}Y~Kb;B->5GEFTB7jP~
zsrt8GR+`4H at 9Iz-EDToDgw*&Wg!9K;AtGY0ciiDGHE`=Kh|bhd%hgEc+z7!%TyOVZ
z&Me_}$uSIR8WYYu=S at 8W%B994690`_HN!rD`43Rsf1NXX&`kc-uU0i2whqr%db+gU
z^P>l>St9(tidzT85h|XY1Q~wM6bJ8$R06%3km@^b5GzaORsI1<iBLsELYc};^uT}3
zZ0WNtA@~XLN#U|B`#nKZ+q3Q6GhbLNF?+1e)rSm_<%{oNlnGjUF+PEKV1FKW8xi>M
z?BjLwrc~u~u&NA_X?2yaBQ?^|D3#ThaXT8**AixuG9pV&WySsp=0?Vc$F>jQ3mf!5
zr4y|3KJ1oE#2XhJ(%b02|Fmu(Z4?#10>QF%x4YdU4`O+8%a-U)S{3cYwhf2y^UA>*
zpyuz}ffSHjB1}-&y%N_{PqNFhl8Womr#0P4k#4;ovOaIG6=dp-$Zp=$H~{?7k>|TT
zB>wgYc9o@>2jKST;4e~`{f|q+0#(CKsRVd86*M5(Z-XBFM%^&my=fflQTz{|#e%M)
z?3p+fuL>>YT98MO)7H!m0VD(;19aX-yaUxWebjiD7yVRxEHhr0f`HJFw%-NxY{RkU
z517svFeo^s)Co2zG9#5+JG)yw#@m{#ch985@#d_*bOIde2t=d?hqU=%YT7lG2PD|v
zqCP+_UHE#BAX(5P`+n?izHl8I at CU?G`9jo-b0f@{+S4`5!^R?03unlMm*s3t7;Z*S
zuBvXhlEQ`dF}lDX=C<4vCPCd^fP{+kZ9<@RttZ8NUq@&ThS){P>?KD)LA74}#jwZ!
z!LX08mM&)g-ZjcgzFd|3z-*iN2iSnX?`K_hy<#M~^yvQcT?D*QXi!1^dE3~hfxQF)
z13r^R*qQF6SP>zq9c$hLxWY{{BK)f&&GVh&?Fij&dDr5cd3ac-fq^6eC{csgZou2L
zICQQ1*`co0SC%$+`m?cc-}h?4lvGrQ#O982_V;~Agu0&CZ;`-^to9_b8WyZ3S-I9o
zqQxF}diaQr^edX^Ib0w;K)*LY)D}BFav3xfgnxtU*@qkades(@{2_ATcU1$s0hxXD
zx0ay5jxMUodznsNC<`fwG)(K=2JcjiHuz(5A5U!VB5P#=_yy at V$L_c7{7zSeu*d?)
z=-7$EMq}AmZGGiWB1V at 3+pzm}S;!|S8+oHh3`Mx}{-jE at zI9tYrTDoZw&IwgzO(zt
zRa18C{FIUqLN&pe*L=bea#}|@yGYmmes}{pOWsm7>b$;+Kbw7Feg|XUpPdDP*9&%^
z^yzWj3Y~w7JOweBnDAEE**;ZkpXBm&<x&mdM}80RB%|3>bLiXDLC-2vX+6k at YNB_t
z&nM_$B#Jpr=5YnUq{x%K&<G|o#0W|z7QVKqIhy#!rmI#>wo{f|j+hk%2cRzmGQw|H
zdVfPgN<~0IiQGtaNS|k!3F>;Q^Iuv3t&zGzp&vXw2lFRsE1RVdu13Udm at G}yP`^?4
z9-3uXVCHX#{rpe;zE<M<h)x7(GN9~$y*=mxtYRi&J)a&2Wy#YTt$vvR6F9GU0p8qE
z;xGzpdy{qKY<b#kOq;WcyLs}cAm3Ge)KF*4Pn)kX#4f{;1>KN%^ENwA$g=F5--upD
zP*rg8xC}sRU4J1fZmO4-_Dld0o|*$!Z7E{<s7gsggvf??*tLxLwxA7=NCH=W7|<85
z5O<M4w at VO@V=6LrE?`Tg*F{MT?qC9$0b_XqNePO(K@=@f5~7dIuNOpvuL`*tk<ZTL
z5BjI>?wHZx1DFa%cFE7U^#W7Y0h=?<uR;n6w;zA at XU54P0fsPw_m+l~{I>MultH}B
z?k1t at ifhuyq4i}eEIBAVk-hj)A$QWJVt#^ySb`;LqEfA2bgTx9QsQ?^O8Gs)he}<A
zT6UlXmu at s32t_EOMCh>?vr4)nXC6=1%Jy|*Z~D3(3S(5)ijlM8Kl(n3V=-an=d>@l
zvy_sKY%(JT9SoNwKOo@~T%<4KZ;<FxHps9~DM$N*mp<E46c)z;+}q<8?h at VahHS|X
zz857w^s3;h7(w3UonK^(B{n;<ccSdIKF**cAN-?Q1PcT(pJU+@*z4A2*6P(7cv!hF
z`aGpP*+P4g=YZ=rJ>5TRAK4h62Onr{p)w^C$6^lU*#vQdB^g`6#_azF>-p%Q+*&KG
zC3=RM7<e}sSozwH9$r;E%<9WpEW*M$CKX!y9V*7Ih(*t>$nAC8D-c%bb!LVK-dUdF
zv=6P=ukK0-zUtwA;JSq-l<XKzGMI2U?naHW&5->S!M$LEWTH57*UHO9mti)!;MWn?
zzPom1mUgDQVB^+M>bS9{$J<n69Xo9f1AI{d>N+_S7ZfBsnS6s?e3f}}MH2RGnIoD=
z51HEIUHnCA-M)mivU<zlw!^_ at F%Q1gA#2KaHcHA2*_mBzz`t at u0^*o~Rzd9+Jf{zZ
z=)dnYek_vz`O^cWx=3<O+NwO at 2!BZ|WR6I%KjX)TpbqN!&Qa<Q{hHayW at H-=%RR2a
zQluiKS|A7$*Kgu=r)S|bZ|}H_)~Sx*@2H*~en7Puvj~Ao>sdt+sc-iE<5|^EkJ)D_
zSA54w3=j#NFeVSY at 6Jov_*P>Kw9a9L&Y1syJz(5G8qv|O3JcA$R2vhFXK}<)Yy7JK
z<5-MxB{GLOKvCKz_~kh8$h>7obK+n>Uy!o;1)ontHtxN0HQYz~2n_xR1Tye#l>4sK
zq4}7XwCIO#!Hx4JMHk`mGN8HxOCbk3Xb$5U;pjtfJ&rI`6FQ48OV;D?R|#1jqY`tD
zHNZY=w4MUcG)l^Sm=dw~z>XIcy(q^kH~KO?OV2Yq!2u;0LDN3|=*(noRMNtE1Oo}D
zPcTS^b70uL2?pe0wmtx%NBc7=a4Kl7uN*nf1I3^z+Z6^qrpRNeNx~q*PEG}tBRgI_
z8(t&tJ!3m&<)+^F68OBI=-kzX33ZMf at M~3*UQp_Yny;N?TDsZe-#4&82-<;eO_B>K
zNmRF*^_eWvr%D~qRHcjRsDz?G2rU-{C#pk(N0evae%P6e;B72%<@OEYkv?K*y^)84
z?O&L=>92W7)jy^`uA(=OS0=bEEs%$pLztR_IF_00YG}cMj+(PJj}MTN_j)|3LcO^s
zMT85{7DB;SH}y6-_o=fZ#*zJo;G~jBsqC^jRuMWn+;J>HN<0x- at Q4xo@LSL-QNq$;
z{-HNpf1cYf)Vb<vXq$9m2pTAyNHbt1(wjZWTp`aW5Xa|o3(U5gon<@@ZvbY8yd`5A
zq|1!=-5f}%>7hOCyXO}12$5nN9JOHc7vb6M(mzAB`W(ew-|e~NLZuBf#1BS3JSYNX
z^Xl?9-tOT1i7UGaOZN7H6usO9!8cy(;whzY^~k^_Z0A)gU6j=8sNQr-?66v5drxOO
z&}pibgo}j4!iNcg{b1pg(LYJ8(UuV4{Mc{5ug!uDTt{MKr4FUnFUl{A^=@>CFEpqa
zW849W!R(sR&=%qTN)sWFyz8kuF0?-74VueJs5J+W*Z&_|iOg at 0&wqu>px4Hd6 at CTn
zM&GaZhUAfb6`@wOA*!X?ba2qt?bQu2IIHM7u7d{ND9rjSik=I^NU*OKT;{Z~vAS2K
zjt(NJ3}jtdp#(7^q?k(@X9h2>hJ(Lg+)e0yn_LJ8Ve(}+6p2Sak3tN_a1Zch at ce_t
zePl-vdz)$>KF51{@(z`z_52-4Xj?3c_}Q7GlO2YrVQkxb(x~;qlDS$+AW6zrrKckk
zMsNeY?p+<nM>wY-TlO|0+u_cVW$~2dJ)tRhYW0UXYx}fsu<;9^qY)~=Dp880wjsHP
zImr&^bVib>deiQ%gAHtAnQce!M2j3{CP-P!o=tu6yt*_oVAXV`@=~)}actsEaUZ-*
zaEEpiCxEH6_^yWl6w|a8LJJ<0v>l<LFOyJmkD~${Ipd*M=969NYskPT_sG^zAky)9
zv=byAn5tsK6Cpm)jWw^t0yO^)9Qkj-TVwMEBpKGhG9D*4cl+F2JdMWS{k at jy)O~3~
z6S>CA3WzIIR<e+glCFWTL3yylE}6QrfX*mk=*Ap4$yh3($~{&&=u2a%5QjO(nUOcb
z9&#jpAf|y4#a!*i6}Gh}N9fq=ef!)xw0fFd_O;Z22OrB}%jg8w!kga36}t-}sYrT<
zX#J(+E>$up4EKCNxoW`y$6!Cf&m-R6g1fpl8H2#{bAW^zlYeJ7f0iRIP5D?)&LVEv
z2j3$X;-M!rOY8{w=HN9rAnpE6%@*HM<VBeHCltK1{GxS6ed>&(aWV=JOJK}$x{76=
zB1v}TNZdFdUQds6;E1Id<BlBJ=SHKnU}>=<tkJpkEDUf8H&U~=1#XT-UyeMS%OpA*
z at vmfXv6mkEJ!#_svSOOU2%h`%2|;0yss&|3Valu7U*3~551Yu}%5;`ENbn)ccs*2H
zlM9xI)^F-CjItGO5)lb at h9u#tP|;xq+3%!Uf5_1W94)<TU{}a)daLLO2_j)<52oI>
z54 at ekIRFYs?YSJ#cRK%Ei89X?bBtN2M9JM+cr6wHWeofCn2nHHj!sQ*let)&xn!l!
zlRCP6e63W)2-S+A1sXfW{$uQ96|tMrLPmG~kjP<eV`m2~rcgpVbqV(U=jApIzD4L<
zKOWR1&U=U{fZz1yuwK?Q8~%e*3|1o<_iNeGy2#!6PV2wxj?=?m2JEC4LD5+9H3=fi
zoV6}3OPjPBw)CVU1hAVyM3gSDCU!{qpDrqaG}EC!?!@_?1K-2d%7fQTe6?M_E<h<)
z%Uj_;!Sxh5pucUN*3%A?I-JD1AmG5Tp{VYAcza^h8Q!k{#Y<9DkPE at lwepMOQEMhL
zpylPcm*f??Jgi-rSB%v|;KP73DwNZwN`kj9Z}ki=<l{X?gPg<kqLaz)>iWn81&w|C
zPb3)$C~^GcA$L{OwJzNTLA+J>`4LA-t*k03Y6 at Q~$9P9*?Z3B?B<g at skD=P#K;r91
zdnN#9%sBajFnY)0rD!CkC;K}}r9@&Rh- at 9S8-i8r@(u*8BKUwg+Q*Q%xNo44ruakA
zFH1$;A@?JSQegvC^nfoAr3Y3IY|LL=nuu at DO>S}q@=bd)n|+hEQaT8HMi|L0AZAV;
zE`#;?QIPK4<!eWApZ)vCAiWi<nd2Y2|7jWDzIy_N_)bsvY~0D{+AZ$IP}yQRF%VG4
zv3FIG>alVJIcl*j+7W|V_BD5~1myj+pZM>amhEV)I{00hQq+DOL0_Rg>^gAoYF%Dr
zV);LjfxqXTo!I&Ef$!4j^4l`gl2OsynM8#hn?U!L(g%ZCkz5X{Y-cg at xhredhPoFO
zLgQnDro++Mo^J>HH^!HGcg~LK&UQguj&trhll~pA at 8|yzX1t%LINFZtC!TQTvPt&V
z5IH{4w&p9_*C<};X!8p7 at ll`YRG!C7_JQd=Z`&%}_ze1X{m&>b2G}siub!UD`=}d|
z*N~Et=`+WJMqgk1Zn;gb_d*Q~PsS6RQzg%abnSl-6JiD7Q`gKavsWCjfm!!dF{~#{
zy_b|o_h!F&s-Tt9=ze(V;~<B6;j<4HVQ=1{GKE%V>N^<1-%>C>h2)#Wg<gw-*;89B
z((ooqA0mypJx8Yed7X at pTy@w^+-)H at KZ%R_fG{bTp4x(mH<|RXxZPS+8qCr47e?M2
zB7{HRWV#m7^6wY|>OU#^0tjYPoI*v^g+KosCDnX984~5%zLE?ue at X<SJgB{C1?R1p
zf+gB%cOo4f<vV2okGYFdGjhe3sd8{;VokzTIUx!~^~chBQbR+C5{KexJ&DG>qgm$j
zFh>@J>&@T&M#FEQEXvWl{7nfNgj$jXKBh?PF5bFA<q5%_VSkgu#RF-^5BM!k6v~uE
zOisT_H1PG5yTc at CXHz`MtDG}+MhZ=~JF;kK|K%vD5P$5?L)X>PXRESkA_9ZJk)*Hi
zGU!p4E($+mJh at J!ILc*C;#C5Wk)=SwGbwM#?qL)2Q>inA$hgdNL)|#K-{$LdWl+r9
zrq(q7v at NHyNsaQQ)-~<%3h at Zyujek!n_uAp_nW03f9s;Gl3C5q;Cty(W1(!ZEmgke
zUKPF<<=Pv_ at ym}Dh{QitxWgt;J^imsSX at Lr7~cecn?-S8WMi!A(d(32JuVQpf%oW-
zkl&;(_aioXydUgiTO4$Rbtg%xGj5BEh-OK{Gn<*Q&euWREIx<SCs_T-oNjLUS)t8n
zjOVy0+!VX`A)1viO(B0Mh at LIRvTcZ9oMVssPmra{NYw|W$N at duk(&&r4SiF?rpM2T
zd`SIHp5k1?LKoUIIhU{3L%p~<@<`FsPz`a~W!;~dfKUbW^A at ITaeRX<%<MAaP$mn~
z63q5o*41yQgNdRCYHj6zdS2YQCRo}w9n5e6&H?Qvm+Yr17K8Y2gD%ZtsX9u}6+Nn!
zCl8Ar|5jU`Wd2==t!RKtZ>|n%!%Q1wf-SUnV~m?sq_zEsE=%j_T}al9K{1F<gpxdn
zg*{1Dup8f^(0kI6QQk#`yHszSod=-7s@@?~HezqB$`!PZ5In+VTH{1_xW5_T>Gfaw
zd~5A3PJ>kXMKq+YN%G_r5fc}<-}vMU4z}VAC3WU6h$rEQM0KgQy$PsfghwXjK)q<+
z6K8GAZ6kO7h;GdoR;;M`;KtdAkgqa6zk4mNfPEqTL1GQ<okBw^Z*=YYym68&gA^T{
z9T&Rw_mEoSL2}KdHBN7hmnUi^bT*wts8xdB!X#GJ$<Lf-OLG|gOBzT*wO<MaH1Y^M
z8}zwjCx}J+<gK|5CH_=phm}w4N#wuNWB5qnHG$;e_E~hQSi}9f`lEH%8k%vr0RfeD
z70^@&W0BpFVEuFkjjZrK&K2BqiWg%B%<N5WOK=w6e>+=bAK_yd&wiCbsc1?2d(9ys
zbGkc#68ig}x|LRd$KM at p<CEx<mFQ=)&Pn7Aff&pi_;P#B?ISyha at D!<)@GOFux#dl
z_xhoK)?VHGqI^w!ZGMFM?yCG(zk*Zd+eya?l5w_X39fxH#uRbpqWkVJ8y5-Uh`kY1
zqv>*&M4V`E_h_P5H9y at Mw^NbItbVD~@5rIoa`t}q-vI>AYFYjmIF)vt=sD^rQloLw
zDdb7fA$2eEw#zTR{OM-ch$dQ`zM-`&3wPLpig>fa%-AdR7QH)Z=6Y+2mktK_rrzzu
z+dUA=U at 61LP8K0kYW%y!s?ow#<>@hC(nCE4GzkCepV;){UvVQFkcW(d6#r-HZ<*^i
z)SF128_05Wb_fd8u?mv#cOte8P@#7sNcI8X7ozYmKuTXuNJvJ{PC{Y+!|M<3D+w at P
zmVeN_U~GE|Y&w6A11N>5ke}xIR|QV=UmR{YJ8c6dsAEwO8=U8UvQ7hO$hQ62Sp*YY
zV;b0mdQian9CQEvADaskjBMr6HR*I;LwTTV7yTWkt~wBGk?))Lm(Yj(1s6RIt>%m(
zFTJIj8gMR)C)A>PF%`~>$M~TbN)Wf#=EV>T$0m1FQ5Vj$npGf{BSHLiVS5+Fn?wql
zq1xfJI(W|S=O}SXpOEEuA~NLr&5k5z;A5D=GnJ$c1pS?(=zm9{o{vb}G!(|B{y0i-
zI~J`_5`R5>0{83<tLse~m2wOk+TA6aErmd>rU%-c`%h3?|Hizzu+Jv$U$5tjx~x|n
zT`0~eFXZRQsrp!4h0eQu?dsiBH(yHI4^QsG!1!$T-E at 4EzVYC2(*|R#j9j*R^*SJm
zo`X?=sx}V$%tGiPqmyt2dnVG|+DKNQW)s^`xkY_Dkw+cNK=)~IBi at 1fW9=tTnk$X-
z_eT)BfvQKomJm(@n;c^KO=tr95%@d<xPAiQ9l`gv(HT}p?p8XQYc`Og)w1f22}tt#
zGR?NhywV(Cy7MP*XRmy@;lz(jnObU2Gvq|75NK5w>_bjcsV?MSaaaiWKVuFXAgyv)
zdK&T3Eje{}IQ<r3B_#Ozr71&zGcY<$SI8r9HV6TW;WL2qT(&Q}FMr^KG0etC`{yIw
z14a%JQbx&V4y!y2#eI=^vuATelPG2UwnWLm2WP{dcu;XuJ)h{$^1{{QJp#V!!Q?SF
z?}&*IhOiZdVhLg&b}ebJA_jbx<?FJL$HIE=Lj1v&OoqMn?au2-99;&D4DK%=QSNCg
zj)ui%#{IP{v>XdC8)NoIFkn(yOBRV^6Q3Jdi#(Qqs(pM*oq=xb^f>~N1f_0^?$o6T
zb+9mZv at bht&Kf)A-LdS9C++~ldHlXT=?CgwZmu*>#mcLA4|GoU`#;L3A^ZiY#RS{O
zkM%=T280#<&dZpV$!I_&k$n7u^;xzbOLH#7kuuf+s2jiS094^WYZ|}$BP}PUT3TLF
z1Ov&(oV-sDk7$lbM3xP^u=KWzGj&iCsLTtWn$Ma(=~_m3d^=pAah;;`iMve=CjjX7
zzvGsZ>Zse+#$;z1RU=Z*ML$wY64BcrVf&rjc-VHSR_I}H9hzItchfk=44i_AE;yr4
zXTE!*{CZ+I^qUe7-!qDP?E}x_ at eg>=qd at 0*3p00M8ZzJ2u at rDy$lQHriXY+r0M|@9
zJM+WcJ>2TywIg{=tiTK0gU4mA#O)DzbMnH=K at rG$rtmro|F`9r4$f1X5zpVkErqxc
zQ>Ybp3-fpJtM#$8n$bFrCEy)%#(YN*cALp79yW80?AKkAydbhYnHjn`##%8)J8p|*
zioN`*F|TC1rQDN%S861}sUhpAwWt)zL^2)+BaN*KGwd6|*JgNS%%4a0&EDRLZKiXq
z2DG at WCY;q|Nz;x^XmlMecCiToj4%}L$EHAB4X>r at PgzD|BAAYjvi*;>GZ-y1D5c=r
zK<)2xmap0cjIVqgm68S;?gE!*_8gem7<GZ*d!PG)t(}L^S}IeumVs3ST*<HV+Ml^&
zwP8-xtkN_ksfx1CiGbCl`X$N6+-+~<JtHW=kMi+TC*?{No{j(k#lfH6+YUTnUdK4j
z`|UorwQMzgi;lT at 0~6+kK{#?vqBZZ*uXGBUFRAKEJ!Y2oDKq4`Lw2DW+bIH=#7z0R
z4z%i}3xq@%qeo;J8993h1NJiqq$EGa_$*BGuloAS`Mc>hl6G!vHj-vu+zr$7?1vbq
zNq`0!;@I7pi6J=8%rQwH(S7r)RI3eF$DU#%IuGzF{*t&Ed}fK;*mxz|z2Ub*oazQ@
z^!e}B5jTD at tm>ksy4xBqEQ8i%ynl88gVc;leOJ|^mkt6L1E%kEJtY&V;$OEO|LwfH
zEI|d-X)oym1OcX|XF<LcU&zs=<^?Lj>$+9^^BY|TlZNZJH<?0~GIV&f<`|ech(2uM
zDB$ycg^?4ZJ at 7r1iA`)8WmuDbRbUI#HJi5Gy_Vg`md?dWrE`*?S`ly0BF3lpI}y)#
ztGl+Y_nBIoQw0F9A3~*7ALRs=e;)1tH~IHavuZ{}ZcN6Q;Gna!zsIY+ at 2~v$%pb$h
zdZ9i02sX|{FI at lVLwUlL2F@ms8JG)LK&}4V!oRa{nLsB7X3N?K=7=E#5&2lIgL at LZ
zTCLMDw(s}v?7#Y{iCaf}BW0Z(+SzF0oMfBYzWTa^#k0T+BgiIfQ+*ad2PEOfn>4{Y
z2`nL+Uv*;1<wVK8D}VpdzNd$JgMMXtgtow-nw at mah>KmrZDeM`G+CQr(TZbne?D%I
zF6K3($#|D+x^M8eu<0ghY#lYVU~*7Ya at dL!onPW=7C0GkOmJMXZXL<9)LQpdh<m6d
zu-|AxGWNrEo=J7;)}8}O&xcFx4*f_lDuXqYq~v7N(kYLIuoF7_MYElq9nNPF_)w<D
zr_yhs{vwxu+ir5FavmP|p-h|2Zq28UW|KONuE7^O7`CxYi>|X>cX##qk0za7Gcz|Q
z-dx8UPUxDAk}pL)a*dX5XS;F)!>3-=kKYb-t{%my0H-N-QCAQ0BUubZ2lAs~o9%~j
zNBAJOtK=H%SyO`_wc*S2PgSk{q)I;uISH0MYY2)aO7v^zyHDY(wsNY at jBX7B9Ubr;
z>IH6`s+ZIsZX>ml|GjI)G4=GfNeptDy~clYCTJpSE6wAKGp at EQ%oxWix}Rs7##<2z
zq%}=WP8W4y7?hW2m(dz11Ju at Uv84A+!{pzH#xvo5M~^Fu;${f_2jfmY_LM;5{`F4x
z{crDemJJl3HDpA at z+*cbNF3+xa?y0-<MAo&TEErXkh&pA!wJh+thm?Wo#hEr_>SG2
zlF5Q5mQ{T(bA=x1n3!n+f{^s*bDFJLITpE=ZZ(W>YPVgHMj>93XVvQVSe~Ztl5h_6
zp=dkPUp(0eOn~>U3c2v_x39m329 at jl>Zo{LmfDCwff8g}Qju9<&sK80!9+8*<t!&B
zcVCJZa;7SjFjD^~;)^zZTQEK2^9YrC9c0KIX2=`_9(8IA90aoZay6ZoK at Y!U+CL7b
zFRSJp3scI>Rt?nGxi9S{T#E&pe!*fZhM21?<o0MhdG`>E4VEg~E3Gz;gKNOqMi0x{
zxbmzCYkMF0u at 95~gNK`ulse>YX9R at zbCyAzmF4k3jt_AwQ69(7qh>|4b4|E;uH){4
z;jC|o+~9&?#P<2|^)aKrYecvxDXB%4uuUKX8~^<#i`z9e!YnB|Fm++;8tm2@;8q<J
z=8FMZh8~64$kS1-+S%+Lo`Su^ZWGpV{>tQ_)o`EGl`W*zSd8Wl6IS6yoQ@?)!lp4q
z;}N1jCr!joeZ<AJ9lJWW-scAnji+Ec?<GxC`YX-mRQ;De6zbrN>WRhWsX-_7gF7+-
zcWKbYt~dbJAkfmPy at NpiA$jhE+ycz)^j-0)>Rb+#u|aRgmYd at zMbvuCeva6WD+>rL
zcPB<_Y+HZ<(swJtuO%5_PuK9g;h6ieaTpvO at A<L_U_Kv?a4rjZGnMro&-WM~u}4Rq
zIz?JvPp`!MtLCt;0wdV%J!>WzNz8-D<7_DWEv at w7*J6QC3~{f&*rqo}nDxsWO3O#n
zNsU)o-RK!s at ZIg#7$AWJMXmqzCvV6_Rv*gU_*KtGXh8>&02 at bypR}1ZzqdmkMgq4L
zL-T_iU#0nSb<CRgx!q{z2zVA8RB=6-DrwLi;&$ec&gYQf!+7Gy2Lu at KA%D=G_xjEo
z5AC_XO?+ktcdm!>w!B`*=>T&(K+6H7#|`WKMMUPjhoB$r)GZjX=!CeV%T-s+^T3A0
zrM+Jzk4d#zZ}5<!k<jv<Empo03XrCCC&r&hu9s8Gr(GZz^OZV}=h~(63uZfS$_E1F
zo$%(5R&|r3?7!l;Y7y9?9En8h$6HfsK9{G|?Bm`f`xiYVF)^6+XVmK-&X5uPW)7et
zqR_T{lmTqU9CD8T5HaYMQtDAos~ZkeI7-{6tPmT4 at c1e!{%GX4$(l|g+vlH84z+3E
zzQ-^r#3k5Oeu3}Kai3CNk21cctW{KeGT;3*Q=9Cp+tKe%c)opjrgtla2l2tKxz9i1
zOvn88yE)G6&;snlNPc88U&xg^7frFB_c{pFXfSKIsy}nI>m($`xM^v?15!VIL3|vI
zpxA8RSWZq(rZnu^Bx38V5%!A54QvFt2TFc at h#ZK89`>wzRRx6lwAr4d!xxJ`eE{!&
zrRq$fmd=in>*uBbt)%3pRwLhznnr>8fDwU~hzM9sgC8fE97O8#ZoY%0d~kQe5~=HB
znY=Gg!##B`a}YP$@LV#t2rzIzKFDePIqZ4y^mu+`c~ndC5FyG)vGw9QUfY`^jQ)jC
zSD13M;nBL2x-!%M{KpYiOrb3G+{E(f at cBKo2K*>zecX#G)2E+^fOh^FSK|D#uiW5-
z^NF<tLEQU at XCAYavUn&1dZiUE;E-xZ-zIB+;5WIW{1ThE{4(msjN`VrgnY at kxFx?P
z<#<K>*&>j78EMN@$6UD+tGSYk*gA%osYgoR9a+%Q$Us&C8fcWL*1iJH^XLTD6(Gs<
z-G8XrM5QOvUXuZS&Y6<Pn3$z#qw`Wk<7&?R<Pp*3uD#Yla62=Y^rzufqdUP`tO at jd
z=f{R at FER~8dGbS~(jtnNS5Ucaorf}lz-pb!==2M at 6F7whpa4FJ3MuJ_devv<eV at XR
z9;FtOx#D{I!@rDC%B47H^dxLRh|b8sk727h=6EeL4No$t4y5rAuntY>)=-jZa;c5E
z at x?@;H^@LjVu{OEu66$xb8j6LW#9Jw4vjPd(jXzBv@{4vE8Sfp-O at FHq_mQPG}0m6
z4MQ_ at r!+%%^PYHJ_ukKQ-`D%>_m92y+Ou4;WX5yO^B2djKF9YP-sCi_I!Vg9s>v)U
zBtH46#QtsR6vft++=!J{4H`b6X|y$475Vk-)|l9$rP=efqsNLXEPCo?7PKL*sCVk#
zTvY^({$=$@+eY0RzIidtxxn!+<{XxZ9eA8*l4%XNQ8yV9cg#tzc)9gnEt->oSGnr?
zE=f1ee#5MNzo98D%m at 3c&-{w10NGKWjoEsk=_7AoS~hr{z*zWh>U9)>`5(uSg!dhf
zW9-)6m_#~!8eve%PqmO-eI0JcVM<o3uMqX6SEKRGGBveyqXI!La#({?9FEjF?5u}|
z78w>rRjx1k=k2A+N)Arc;e4k|LNn7fpox&)kCbtTqT(|PEgkloi(;76sc$^f{e);v
zUpK2q-XpjY`>)csjPmsHx(7rNAv8ErDnN&1_xJ=nL!tW|Y%YW?SL$t7SC06=$@9^Z
z<_YeJ%UAmgE59~oDo}pk>Rew%f&B%-smd8wvA+u#Mq;F<rWlQvTH1_oZ}GZ!W*DZ2
z;K89DEc#@p!H$H1;ily-L6~(<fyS^3e%f6UbXX7}b^U^yXW0nji40=;*&RR}_!-Zg
zoF(-HcxlrXcC3pvd-#r+2b at b{q$(mOUnSPMkR6JDipFG<njLDR&(tJOMdio`5uFSm
z`W}Pz!#tdM1w+<cFzw6DLRFpJ;Cl|<&zAj-<=_Ob4y=e4X?EusNOi9M_O`EG{`4iJ
zg3p`uEIGs-emeGg>n}`Zalu#N6=}PvPJ|&zW|Bf{R(1dSTT4fm?3K4wA-+;}#<Ug1
zZG{p-YAf1OvjNZ*(Gp9<_b5G=x~S`WRO3Y<AF6zk8zhQ-N<`2mfHS2u8Pc%voQ%c}
zvbKo?aasc(5)j2W=A8+a8~l at TfyUCL19FNrSX15JnrURw`QKQRCusVS^N}{{ScWQ^
z0%uW;-1;mEh&L!5fhXR;iLINW1oiUB&^o%wuxbm_C-z?=@cAL#f)Aay^C6cwjNF at 0
zwSMQ^Njz!mfk^vZfMv?FacNx-Gt~HPFSjV)O3*{<^}5rxkA6cMyDJ36PZRA+^ejE0
zXue#rR|SzDeYA)W-iX)lC$x%h*ydUJP1A^@u-D}-1=)9bTyam>*jzymVb`vcE57ux
zEhB86U;oVBUVu0)In>#R7^<=BV|o#dC4z-R^XJ8HJE|jjeUpDyJpjAsVoLbo-5OOg
zn}~gezJ44Cv+ at u{WCVtUqS83PA-IBQmE*+z$(M7MG2O+;^}Ygd+In!@kaJgk5tMF~
z9nu#H-XI8DAe$f$CBTTUl?umxC7mn7#^MK|k-x$k%W;Y5e(h~JcW^}Yew(wJBna=z
zLPV3+iFV|H?Eu{@!hzR!9zWu!?pO1U3B{|K>vp9jC#j_i=m|gkjV1gzQs2-+(1e%P
z at 0AOE@Fs6Az{H at -L7pW;UNRONAbI}re9L`Z4dixlPeJjp{mScXLgUid2Kz#I!wPi2
zwTX!ds#jKH2>rZbkGj6*_Y5wty>;CG;B0CF%R>#k?`c40@!Xn|WF<_2+%WQn_vxmx
zTyghNFCq2lA?o)Ai~$D}p)`Px0RDC(a-uz?A368Lj*_#e+7Wx=1KLbKl5G{OVnT^D
zo0j8kC1aFs*;Kl8-3KG4bt6P|2S at E62OkK0Sz=y?_J?=#EP06mGa{Ri^L_4}ZvhJt
znB&;jCrgyoxP};hALcf6y|FUCBLHfnU0!GukXB99y%khIc|-K+74;`}At`S at tQP(o
zM({j==p#!MNd6j>j=W9|rvjXq%q_^F60L_lPk@^LdRev9W<D-9MAQ12{`0LQ1 at 6%e
zB&}JT?&)Wlaq>s5YV*QoytKWG=;=h{c0arUQ}73&Ht37=n8v}CZ?9rS%M!&}yZSeh
z$8hDFJmgQ_zD$s!er{;?5wBz9Lz<<%&9t~LU<D9VeXiFsXk`20!LUG|;FLoH^}8-I
z)d(c^r;ndFR-L%W14k#GSaYHuG$SfmTgb#Ws>$OI8C3yl_19Z at C6u#Mr<eb7HklaF
zi^67rd+x4ok1Qfc`(qXTH&G=kLWGlP1d)X_mXF8o;(}Nz1}FK^mtI&+NI*ZcrlEz<
z#WQ9mehI10u{ZqT!_t2n6RZfAL8F!;tg%idN%MrgIQ0iIK6#l<vNP6A&&_zb``YW5
zsu6D~A{6E7fO_(`6IX38my)yzUQcp-;lg}x9P;tFr_kFJcaR=;FpYRk)u$W)%f6o1
zD5i`(=&ZF+GZ|*|6N(mSHjTivo`M=@>dye<8uzbI)*SU&n}%kB?Q at IKbyy6r<o%ff
zYz1tupXYZMTBO_b;ILX}lxsZQ?lrA-d;Rk{tTNl=+a${)HcANR%c|cv3>+D;dU{cS
z25wiT%Y_VsrDpH8T2^OfR6g#r)hc7#dw7Hrvg(WQ<*$?wTx)@r$56-$eo}aqR&Af2
zs(P{sDdVf$6nzZ}{S<KHN<6(lxf-J&^!AZ4dDfA8u at B%JD;E!KbE)@tD#dz0huOOD
z;1vRwOk}~g0%OFBKCECdhEVEE#Dmqj;FnHU>`yaOHJSW8FN7p)bw-C;LVb$Yi%prt
zK=zSm1 at I!%-(jJXBd{;yn#qGA*UpGUVtEV}2UU&~2wO*5A_=%Gd4|-!9tLl6(d>7D
zy<&s#btHzP^%1;g`vC6KkXCRE0<i*?H-TyG)98s+lsS8%Wu>9S%(`^Dmmp4f4g<*x
zB?0KvPSJ%_UMT)`c!(h>CP0$8ou<DjIwHOn?sOSIf{;xMX|Acf)?GcjRwTGD$kF95
zDnBWv$+<Cg@{J9X!lw+qM>_VX)P{7mSo7knd#Yhwnj(n2shXRXyl+NnAorG4!NLMb
z(QqM6`(N8T2;4Mz3!zXa=U8=``Ib%c4Zy{VMcMD!Ki_5#U$+gH!f|;v at Wg`VBWUQB
z*9YovX*Y6<$Jj1;$emTBtx#4hHN)iyH=R4=dZ}6WG`iC><&MnD4<kE6kH5N(oJ>5a
zbmT*bg`-YN)E7PSmz2B5&Vn?_-zFzJtBc4Fb_-AP^E*ro<dbExl<+7Z(HZ!Lqc0v4
zL at a=YMF$+r_;{HyTfO^gn~FS&_4{q9G>r>&B2$*9T8!9NrT0NA&lqEDeSRE-c&`35
ze6=H0>D4eb-(ZpHdGAq)0lGa&dk6<wjv*Tn at W;H=4DLlCv9PgO#|n;ARhl1rP}+pN
zY?>M}CUd!II at y=Jh<fDWNQzrof6te?GD4U7VHmPPmlS;$4|uKsZgmFgSWz6mBD_@<
z%ya4TEMUx}&?tEMT$`}20b at 7oK_e^@P#6$v_|d9RaYNLXY|j=%dDocJQMqV$<-Z4g
z2$_W<nhU-O{B#VWfGl6lAPmyy=K8GQ(xqZ}G<nY(VNgDt)F9(rzd81~aJ at 9yyJ1XY
zS+%pea$h~#6n^*)T4o}3`PI at Cv9PefIJdail1Xlf6n?m7n*IB1cz#Ko4%bg1EcF<5
zcook0Nr!(E(x+M?vUoY%@O1M6a_;rPwAVSDj;l7P8E;f!+}TR!e4Ia!*}`s2Q9xX+
zJR}*c*JVqj8A~iXhLh`JOmS&tq(#2P at j~axe3(pw7x~0n80(m95S%%oR&!b!NYPzI
zcv%M*Pp0NU8pyXy4=^@CXuZb(@sdQa?Y^5{=%IP`B!od0Im$fOU5Lp%H-t_`Yoit1
z&hCiW$_UCC{F0gx?ts}g<CvLrblAf^2eXa4;%Tu~6JOvH6rzaRJFx)EsO3)Ks7~3N
zP#3VM%unoNhJn)exay&B1|>7Ebq#{}Z=5eXbqhBI4Vg0Aq-;5;f7c3Wc;qzKo1U(F
zKOVLI2czB(YISLd*o3A*5#4smfS+?oW#K7JZbzaBzQWg~!rhx`5AZFQU95*;2Ddc#
z>e)Z;PM1;*d3UK{E7-m*mp0^QOZPm?)K+NM#QJHe6j{rw>-YUWH<(F-FYk{Y>@D&w
zQQ(8}_sFptdTNR8>8?b=!aa}ee7Y&O?)Nv{F4q&LZ|EPzN;)s>J+3uUsRxMeOQAkt
zrKC5PEk36_hT$s at H~o&cLN>_0mIZ4*S6x_1#V_yE9!`9aj4?7I?9v(NwRKio0Kba8
z;MpUeBH@(dE44(2a6msCuC*!&4YUUe4G*ZL(Dg%AuEVrm6CH+Iern$apM4FiocrtF
zb^nS2`{elrOqU>mHUz1)dyx;ni};^i-Zsy`wQAwoWdW<I)POxNWU4e7fA%sti-IUe
zIK!%n)?D?purhS(Od3PO5f^5_cmzS4(*cOD)N#LYy9lfva=hzMK@`^A)|(QgsZ+PO
zA+(C~JsrlNxN4BSy1;{R{h~!$_y%Q#pMuACiIW8ct}69XV*tenzPEp at cc#+r!00v<
z07}dkho7^#NpTd|^IlVCx6u=W2u{BtnjOlWZ*&PCH&-y$Ve)>qy;-74F!+N&6L!*_
z0VhIuE|5hG*1EVm`1H at vBFIgTn+U`Hbj$2KKMo7~DXBB_*;(F^4D<D8c4PyF=hP at s
z_8z)^!R)lJd?pOSDwitEn6tgG#@vPLJ7|jeS at jcVfsump?jnfl{Q=*(BbCaWuFs8Q
zrKjMa`c-pKqS2dI5Hjg|83bTxxx7wz5J>cwB1xstxD29n^|~bOsDuBmM^?z#MsGkv
zVE=vRdYhFpU6 at QC#)|{eHEi;>F}kyG)U`nSrMH$?57uZ0Ex7FzqNpVgQtXbQ4<7pF
z7SH|!DdeU^N{ZnlgqIr8Dbq$+)MhCK=LXkvY%%-3oYd1MJhLGHCg#%5qo=vUbyUPf
zw6cf;708~%C?s9^N?+{)1e{cK4Gq~dBr?O2@$d-hQ&r1V539Wh#1D1ePPx}Sl%N7D
z%p45duX91;w#K9|YRjR-$&^n-kheb)azRkLO+~pSu0b`5D_#L4H+Rrw8v14f_T>0H
zLfQRl&U_OGXnF{xH4$M>(wxqY=IL*XrW_!2NMFMDkQ(jUz7LCEw^(8C;Od%U=hVx>
z>gP%-dw0Tf>dpXJO0dfOt`bE`4P?^t0x?#lChC&F`zJ66nEX8myaR0U&O`REV8Bt)
zuL;YHr2~WSZ+z}`Z}P=zGO8Vd957p7mx+~<WSsx*LjRHSreo}&rF+bbwUWbfr?{Rk
z<oY_$*K_s&$jzM@%l)8XbT<z<cUbN=`hlyQnwly~{3w5dC?$oU(lB0in+k{{9ke`9
z&?9t3+X{|P?ZdqNfGNVsx?{McnBd*Lr=X_;vV at YX_nJ+L5MV7DexNrAs7%7OexDR;
z(3e`6Oxn_uKsy{pMI7iJ at 8MLSjq+%S(6gaeBMd$38nHa4TViV^=*w8NHEziRFM{!+
zU6ibGaC@^DtI7bG%Oyl{J>e*-*ctJr=BV&#5q~?wax&1z5}eTFo6CO6jf+7<P+<k!
zGFV}W;qg<zp5?t{sNE;SRh0>PECaNLGyZDF4=PAsKR3MusZMdM;WkZ%h>11LePE*g
zz{KsAluJ`)H`a0mQk2s$X~r+G@%}+{B5MP1jZuly(^3t35_Gi9m515S&(6#%G{Ja-
z{wwn?B%2~kEnzMVk-E}RMb-Xkz_xw|(utm4ZWN#BbV<#Xe0w;;&QLkX;|YlOsTDbg
z6exLuZgxU0fXr(Z6Nn(>*`3JDS9^fT0e>jFx7>T at h-PUpp>jiLEHv?Rv7O{^)OAI!
z%jB!$4?+b3xG2AjEW^S|VR_YR;|3Eh-&~At3?=(~?9%+_HL>Oz<S>G5#K|f$qwT8y
zk?RDYoV&9rUOv9I3Nz^8?#%1Gv)<k>+f^R(mi at 6jpSfZD&Uavgn{c#-aK?t6BOqgY
z=CkCP<I8!KjC2pI25wT}!buys2Cm5);Q!8zYa8nT+Y&*9DNAi#M88|!a00?Mw^xpX
z!aHW;tB`6YWA%p;4*fq0o~>L-B!eb3#(U=D-KMez2I1_4)VKtww1;!y-A~<3kVrf7
z8Puc90N?b+W`NMs6;dCc;@_3&(WF)rtJ5oE3?Wy|4;w^w%hvXMopEN|!qZ|$-jQUz
zL*g?AsQSjTk at WRQ3Ff%e!83B&-0+HXQL at K5U!InqAqm+KBB*Sac)5OrehwMlF0&8(
z6n#yTd_M^6y4GSU4I;@lhjn>rXQ$;yq!fT8+XZoH5i7&?T-o at iB}B+JVFE+8^ps=g
zsvoPMT%MTyj6O+|>lN`@Z1j>eWV at TPxGMt$Z6)&tAMPEdxdC_8P0L(;PCL*Vs-dIg
zwOwgb at m{>3vmVBaY{4MoW+G*(U_SU^ykVD;jT3gG)Tn{rL<_KIbm>m==hGz8YukZv
zKX%H{GlXRKENv8bg8BMSv&g~~Q&dfL|C`Xw+aDPfRh8yq%2W}q1vR^Hry17%8!alj
z7xp~I at Xu}OR`5Bkxs0$z&MrLni90SNqX$m^R!JFXO|v6Ek)C^QIeBPnZ~THzt?SgM
z8d0XmquiO$JPUrz7CSW^Z=0)VzbdJ)<KENXIRSXWl%WA37CY*4_DZAo$tfCkElX0R
zt}`BL24 at K*!7Bhjs1P_Hc8Vd?A}tX7h#?|v)>iYei<geQ%{9YbD;Wy9<<~4v1*auc
zoxE!?o6>jG7QCpr3iI`VAZ_%e+pQ*S^P5gRWc(u>XaZV()Njx)<-xPh?;a1PS at oPU
z3fuXMdwID&(bEiW at u9hSSWhr`3ervZqS`pU-*!DGT3z0IBhe`?{;|Y;fh}~mqk at 7X
zay!B!TwS3~JoKb~&f_(pUhMH70re&5P!9--3RP*4se^LNDU+9of_!{+U+;hd6pG=-
zJCxvFY^W6AupQL(&0X3sLm=ZQpPB5C><pGJ<ExPMq(L^YR>_`;(fY@$1E)HLfO1&P
z+=TCVfhm%vdh1!n+|B3%fU}o2UjvzRfH^DijHlT at 5ux#LzJTBhB!*srQ_;!EDf_N5
zgcxe%+APtn at n)%k<)Qif0iXulZZFyYmZ-ZJdfWp34;UEU7a$TLfbt;t4rY)wVh(_p
zI8stlTP_VGipmDA4SHiRt!}~@=QJNBZ*`rj`-|cSAK;TC=A4Hxg9j2|K!2oC|MeYx
z|M(q$fMd4rvWGxq5cD`jZMmK(JuH2=E(Pd)K)|r2JxeO;@jY2Oyhitv4Q0m-y^z1H
zX#oMkf4J%6o4Fc0F4Rjvk?T?HfYqS6(@l`>1|&-k1 at Zta4(;?$mpJ|(ud?b&0N)Ix
z)5r7%>>^YG at _ejF5Ai9lr<nid at qp9PTKz}EUhTgOd*A$7Glebz?7Pf4+??~kci7Xv
z9-QM3x%cl3{l5~R{yuXL|ECTNIN55e at fZ#L?PUA<pBnwYQYinGtPJ>H|8Fzt{<iD=
zKfj?zbKu8j_UAQYQ{x==UrYWm-MLBUFX!DqQw+dWx3a*t{m0*~x~BhAs_VZJr~k1I
z0Vn9f9l8PH|Ea8jjPT-uWHvLPU>{L7;(zKy|DWDa<^Or*YeNp~mYTaBZDaRbsQNh`
zIh%91?@awb&vHB4nNWUyNT*x)KQ#^Wua7M)?9nWDYYP<+vCJ`NhrwKbs=-=z&cWt)
zK7ceo;IRw%R|Wu|VcG4Mt5yFS`uoR{8li4!aX&$(r>9rMU++_vTWWOAy5nrtKfg4A
z0_0%+od!M<@TS|z#^BG5fd-uasc9!|{z(rxgH3HY at dE*%3OV-KckOfF-#JtL;Ct_y
zi>e1mSt=ot8(s-u&-BL;`k%WKATUaYM at 9j-!H4a3R0Cd&KoIyB4;%N_3}$Eo at l)1k
zbyvaF!#^l?OqUsnt4`kdM<%7yrZLepg-3Qf?_GC%jfv{{%V-qSQZgB?acw<t<7lg4
z{8-80gV#Liv0?t`!TU!xys+QrJH~L{_%ONg3*n*yAQ!@JV_G-x+0X_0mS%xbp)N!p
z<_3Pd>gACuq;DV9lpep&WBZ$|<w|?~VE5y2Anm(o>;@v%m9 at 7TLA39-C|*^dGwM}l
z?-!F+0Hae|8ysCsuk545;`!L+bwOY0^;LhWkJ?T2b!p`P6(<1)yvMM%`TlJZ`>&5S
zkd;RQ8_+jp;2D)?i|-5$W{y9)0$I=}@AxopBO7DvJ9QlHvws61<O*KP>^35?diD;h
zsf`CXJF&`g)omDnS$v)%mXr}h;rWdb-sMgiOY$R}N{dwUHa(rpg+}*VNzRbW;9P%I
zmwsVHM3wM?GCC}kjC%VlllBO{FY~JT)7=X;NGp*)&s?IxG;i9og$tG!uphP8_0P_3
zEH^Lr#>;)obbkKgem37Y{mo1lCx)dQY|3%~%@mNhf-s=uKBUeg15j$q&Az~+|1$}#
zvcUuJGiRzIeKhm9kiy_&Vd_J{+>Ox1L&HHc&0n6}=Zk-(c`fTQ_S6&4&&1yu;c^*A
z7*?pff+0JaI#fBZ at QC$aHpZR#v-3EqyM|Zl2(GzTT>H<bBl8#^64EjhGZ7j0RBuQa
z>PI~^6wl6P4bUk+3$Gi&SxCnCI8H*XY%%Yv5hy_?9Ij;lns at B=#%`#yzU`uZ33Ekd
z-?Zk<2}{+l{defLkmzS8o-1B0=6C(A3aehq2cFwV!-t~fLtl_CrqRunT1s6am*klp
zp=muP_ectr0UdsyZLQG3kk%jXrn^igM{m(H*3{8M0R)T at jqd&#s5N^|gfUriy6|B^
z6Jg4r5IESY*qtcUm{kyX9j^r`+SEC{l2`|}bSKW6p}=fHS`v7j3q6MaopU&mpMiOE
z5l#}`h)Rl)9xGT0mBC-$W`Sy6hsU>5%4 at NGaT@QZ<o{vY+5g+fnTcv2^TTGeFu!~x
zsWh?#-$sD&k3iJ at x36GGj*?0*J6BY*R5Fp0w}LJd`fvU7E73N#a#r8)5{t3zq8RIA
zVqjScq7~3a0qU7i^tk8zZAAWK<d8^`x1Vh8HGUDC(P(dAry^LO7?tXfJ{UF%3M{C9
zjmEsG0={1OJ?0H(=f3{aeZ$^E9D%nl_M~dZKR5oY8QVV199MpxuzDz216VKkcVt0C
zE;?3)pYJ%IK=~Hz8#*p)9&m%l$b&zolM2H36-%V%mlrygEkW`KejoCuB>A+ at pg~qA
zRdsS`RxYau!*jo46s~Sa at -}5%i37xWM7-i$Z|FVPj))X#{TF5LF;=<J#rT=U6lJ&x
ze&)_4 at 5;H965o#qa3rY-BBn9r;J$^8j`M9eiHwQc1Ot68-lF{zsj!WPS&Et+E8%j_
z^QlzTNJ}Nv#(TWo&ZZ6XfwF)+e(dlQ3l@;BplRVC&<ZpKFbAd*c at o9Nbfd@anv?kS
z89P^8j*V at 7$f~ecAl^@a#$lJeU^wt4Y32AE+V8ORe9tytsn5tY7zYlTMNO`{V&ex=
zyd;53gRS$3pa^BSbf$iysBXY1{bzB0H$Zl7pA{WX*(BHi;^z<1*R1^<|C&_&nYh(p
zgMQ;EL0a1d1i!t{|AOLBdahVb==!;gw_Z_EF$;5EDYp83Na#{cJ>Fgh-wYAx5xgdN
z1h2J at p6|%75?LaW38yl}DTUm~jbI*B#9yO0&VOEt{^r_9h-7Rey?}OM6d}ezf%G&;
zaD*n47oRa*_kH^y1~zzV!w2idk8NZ&+oP)$tSm(q8s_w1 at 6J&o6X8;tB$f=__hEHi
zH^yo-d&rJCnAl}#<?{Na?KF-g|6&0eV<d)IeM5Lc$=#W#<3_nbikB-&cr)gSHzDr0
za`A_o{3rzlK2;vymk^QQ2J#%6m$3Q;yP%}<S&eF<^Uw^1>yarHoA0J{XyrR+>lkPc
zp_PZU3P%&L%~mTJp^<Kgo3}@9DRlcDL-DxKF*`t69ZAT+Y0uQpcQPEHzGI^?&=?5U
zFCx{tp`0pM7dQks{d?FndbWnY44b1~e4X9FqS5K0W}-IVQx3wuC`Y}iW4&u*a9N`%
zw(+3J*&OBo;FrW=Zu)2Q#>GiJxA%iYpL?0mEV#NjQ7x>e?9f4ttz at M?o8ZxMl!iBC
z?RT#0<Q_rL=$F$oR>ah=CdL<@XXj_6h?MMQ80n%b-`Z3s2P?OsZ_t9wV+lY*@bA@^
zD+~0_u1e;F*6#8C(wFh1e4Ok!qr;`wpX(Am62rm!PGWGw61tvSIM at yQ*;uIJYe{Dr
zSN37TAvu_^k)w-7a|Zq%1`CCVzEgxN&w};)Hhk>sMR*A4yd7h}06G2n-bZ_g)ooSC
zWugd*FSvtW|5GnE<kmdGA>y6~gcF!6iHz=1m*R$VRF26 at R)g~qW92wwaq+XOWM^2a
zhdI17@?pCQL6f<hbssc<2M=GCG0sb<;xJy5E$v}He6BQuM{m=sr3wvfBYU+H3ig(*
z>Uv3VkC<WBB(I3|+9rJBI?Kd+kas}}y#$(nkKtDNUEqmx0CE-lZ5tDo%_Q;auVFjs
z7b%9ULs?1Zks6dO7Vi!@-mJUcdlA~tSOmmTM=a`;%NeMt=(*o<D;|6X*{>uPbJ9PH
z%23*IPMsfXV#{-AL6UIFs#~hKEng!e%pb|ALd32C=s34c`<?k3i9)eJ_VaJAytcW_
zsa}FE;^hMNPpe!7fMXCZK+1av3Qed!aw~ew(IK9Yk9zpLw093Uo}{!<2z4g- at O5sN
zJEyrE*<VoI7lb>2XS=eNz<zcp=VvKtX<2jNkcHsAb*N9<J>}gtF8C(cZu9(sA7=2g
z8IV2ydv@=60C;$LIKP5h))YUtcBUsAMy%*T?y6Vyf78*Ce*N4UL<FfS$G{$pC~}qj
zh at b&PaAQbSREc9sv1_5pL)+T6!CUD*AQy>Bb0cjP*TRDAmEbH(V;5!78P^C#Z(wl|
z);KWR2{H}}p at IBBm5iCrAM`xbcs}70Eho7`Xz}A^zz^FoFW>CS0juxKD4^V%uDg8+
zV+;}NXvJ at P9SJ!w-Q61FI=@d;5x?TWO}pBks7FW3;R2Lp03Po%?dWT*aZnQz$bRw6
zVvLe2DeOy6gLNGTO^VKn)r8h8cRU)2xxVvl&PS3Oi4#3vj$Bf33!#1~A-E+(H at Pe)
zsqVfI!8Z(op=lz|L?M=?jU+ at lpkYX;RNc6w at qKkCv9<|(*`)8*1m3H6G3cjbJP20z
zLtC|#^LJldTWqg-w%$}3AF7u(!<r at nve%Y;JW6>?EK`5j=597~owuAkeuQV;ofM)5
zs{h}lq~C)=zA#Z&Su$J^-|BE+)qFNwgeMVDV&=Dx3pTySv5<T5!%$G2EtM(g4G>rF
zP*nWs*O`6<;R~PnHL7ml7<HdE6C);4ES3&FOd1<kp7%*h`p^0^qQ~1%2sKEDqUgD@
zg*q9b>ma>B8+qBlO;7>{D!^4cnq^l=F+OiKH%j4dw#eI#kr)2G4PRXyE-=Fa<a&2U
zG^`Aj`m{Y(1&FAJ3xCwXEoDcnkT8xBtri3tGM{TaN(M5(&4rhcK&QyKQQcfJIb+gv
z=)YF$!r%=1&-=qCN-&Q~j0V(`@xr=?8E&quq-WB0E~r}u(pKM#iH8XIOIv~!s8i%K
ze at Wr`hK(0zS6LO!|B|WXu?$b)RakOC9*f?v-WLbzLLKDh;t~WPaeGzQ3N=SfCXqUO
zx3^^7K0UqwIP_2zKJu7W8l}Ja<bM0$0BB6}2~fgRgNSP at SA{=NDo2nfb_0;&z!OIq
z!FzapeXqyX?M(*tvm)G1JG-=~iD0F;d(uHH^eeu_`mQi_30MO6_5iQHId*vvsv+wR
zqOm+KCK5A8pT+wqT_n(P at M5`9S<PxwEpjC)NL1$QI`%lSCjBHzWpfJ&sPX*+tQ&It
z>~mYT5vDK~rW1d$Mj%pe=%RjVJ7eYn)9<fQ4hRFwFd}WZQA<YPSgauQRLKqp3|VF!
zly6Jc*^FK4M8-OLbBBoVwRuL_w6aT;RDs?(sf{^mW9=T;U7k(?5y?nj`!f)4j5$c?
z(Tt!ak5|8tvx#~CmK_Rt6}1#At^;K3SAY!L`de>b5Gl|DBsA-|p++D%h;zTEXlM%k
zCkRSbp|;ss02&r1Z<}5C9K-I`#g_nB*bO=a9=xYm<T!WnRpt!+WYyFVP^u!c2S2~C
z;-k{>f at ziUY&O)6xuQ at IPNYy3ba{ES`rUr}<s-wghJ68;kK73hz5ZF$e0yRB=<TW;
z03Kn)_h-2j0mpI-q3yzRcGSP^sg`zEZm$w9*Y=~zt`atReeQ8wi8`93q%tG1xRt4R
zJ0FlJy^o27ZoVMwVgcFjSG8{>{!^;Sp6~L30E?1i&L&)v1`y at _j=Il#d8L;M0$(i)
z0Kck~VV{qP9U+adKQHnN=?)ZO3Th<>vjq1C at 3#14O_VawKWaNEL)UK@&(j)xGa0l6
z2KV#^!#97W9so%6zuJMopL_;wP~JXw;m-(pT1<J9D*A4M(GBrf0>_}Tsc%#h at 4XOE
zfh-b5#ODe1B_#f1sHn0BFsrfepup?JaQx-Mvlg&5bt~IRu9DTeXc7VH6lTFH+aDz4
z8xirt-%M2BJFs`pSN{^xgEDCsEGybRXZBiFgZmaz5SrlfoLoU2-gkgp(mgllXU)#Z
zLPXz>+ at m^Y`762cpI2To2z4vU2r<Mq?AKZgpmt)GbgKS5n-_sCSNrt|fC=IKkLP=9
zBho*ckU!Q1ewr7Eb15un=-~P0a6Oh+sXhHFB*LT-iGh%)#lp<7b}fSNm&R8%O}3>5
z&qlCorEh$j#w3FT%uEf`<Gm+QN4GuIEdjSYz^>ygUxW;bNal_^Coxy;`+aM>OFnlt
zw}Jm^(BW<|mTAh~ZCdo*uDWh*SA#E86}o-=4P#wZaNi<@i;GLG8ZA~4Jx8WI^2VU3
z63-@(5vh`IsKDG%;s4%>UtenhXS<qe+60tN`wq|$o$wtg$N`_9o{pc+YDz|c!fm*Z
z?pzfPFOO=XlNv5hX^<h{a1XlxKuhWW=P2%f&6%tMDTYa+$9E-(?_dQQb?|?x7~3dk
zHnA)&Sk->JYoC8$sfF7>QeCd^eKD)G30A1;6Hff}j_J3Z)?DxYU72nwocO7nNJ;kt
z*{8g2ZJl>-&JvEsC2zLU*j;{KCz*xU;YJh)gwy3xs?!Hcdtz>$b$`VYIO8VQz`?gD
z=$!?9;xmW$g`CP|QLd$AtG7`6WN>*mxp9M`wWGUMWBbDDI6|0&z!&l*l%tT at RQR<W
z&f6L=R<7`q-ddsLpI~q6XS!+JcS>t-Y%X*s+5`JA(*CfxCMoxolhtb7cG?KBomlk)
zdab>gSCLOF1Apbe*|&$|_M{~eD$GrLr99*0ecADr9GtWf?S5a%|F{f#0U4f!w?GHy
zI$+!}kUsxfwWOl$5NXUrL++G(OTo%xoyB4o_H5~-n*nKX>O1%We_7u8S0~VRcdSSq
z>2o)YfEmq6JOljj^H-oo78QJ?CJzYMni%0GFMyD`Z~vY=NZ^9P66a`l1_ASwI3w+-
z>eDG at Z9fs2@Ks#15~P>LtCMIt<;Km!#nciCz)xN-34Ub_mxDEEL(sIWEn~w-g~Q_N
ze29U=0T#l^+T(Q`?wRjyrCQp^AviO!N5KQ+Y*NSoD9g5^QB`eD>hweKw<4Qj=NC|b
z>w)kn^z1SX2#!nl{b>p3xwyZy;dTZ8wO8@?+8n;sYU~dH`N at +)Zt}n}tEB${?+E+)
zcV1erW}9KUxvwDyg|T321UjToAdz)}ycx^TWOBzRVfZ7p3md-o4+bKp6?!ZFEjK~^
zz7~y)qeNkAW+VqXV+Mb?SYqQ#c?firV!tr#dES+`R?&;@-FC+h?h$bWkVCZ2QWzY|
zZaua%4=mNk^AX<JNVa1m!%C<IQ24#vqqD~2m!L*ZAMB`yQ-bE}omaPI)xkHECtM((
z(~}@%5J1x5OSIYZ27Ede2?MDb8Sb=QT*E9;nqCTDG_gi<;s9E8hh4c?k3;Vl$NZeh
z)yp+>Tno2=fd}Z~++Ckd%66*H_%*h6V~rahhZ_NLBcFwDqCDsWzjrGh3Q;5i#@=gG
z8>hq{+xDM at 2KbDi+p41rT=e<!%J+G+gVQ-NY}{X+Bv`b5+Qd~desN*A`5so)^TC_Y
zb+7naWg4Z(?riefwcAvK=I^WvJ(xS3!}`k-gO(txsgjlJGnn#^#^a~ptl9g%<gviY
z+3TO;lA!k)N6k;sVOBqv-6(~@+i0C}319C-CGiZr?~!y{Trj6f^t#cZ{aamytasL|
zo)jDuEjJ4XsU&cRi%p(VJ}YZ&{wUZK3J`~b#W!faQUUPK`G{t3-<gJjm-Eew*B4Zx
z<oraE?G{B+k$Fu6ptr^j&)^RC7a9hk=bPS8J3NrV-Gq~ccPq9 at _5$HO7X5{Ad!YtW
zs^^vSqhAd0K?YmkV55Aih86 at qtzXK9P1*piOls}(g|%Av=zBVmoJ^s~ZhP)<N4EyQ
ztqg8R^u3NG8ZUo`U0%N`UH+NS9B6P`Xx;D-7M0|Z0$g!br-m(M(PAebskKma*~EFT
z$@2n8_6dFJh3Vs_A|a}OCDWL_<9^hYaM<_Cpu6Ut&#Ld>!_qn|A?ln<Aq?aOn`8#;
zOvvs6V}R!tbQ2`*23$#O7wVmNOLJw=kwiYRRbJuAes7;d<XjMC^&HJqMn5IPlW%la
zd3v1P#!ln4K^f+a*t&FoUQ_FN!D3oLY+9jp;vSP;=~a24<vQQsip?Xn<ckBpM6{q^
zTa)<WG7|^K;9AJEORn+yM{8Vy&rFCqkHG`Pi&^MJiF at giIW<DllwEr5(ZfmsPVM<I
ztk(4)wczC9vH%AM+7$ZbTE`o|Aazq8EcV45&kJZ2N9_;(o;wn&_jfmLtl%dGnBY*)
zD{OlSRIe4l%Pi3aM(-w%s(Z81Vswi6f-^NWv-Xa^<cXivl3P<*@Ame=5pY9O`d!63
z!d+ at qhwDC<Vlt>reh0T_2CD~BJnGi<QB4V at OWYJKcYAheXmE#P3c_6xq&$Ek4)xS$
zFL-?+_rv8j|L#@c(9G7yvYW5<1LT%ZrwtSmo}u}!8JataqSgr>e)l0e#|15U9=w^a
zb2Q8H)kte_+#H(C@*b>T1=>Xf=rZtOHTiP!qB-mUe9>^Z at A~k}=j?|r%3<NdDct at -
z^7C4{=bc<$7xXQitUkvE_HxB|wba*DLTRb;xcUiGcexM8te0n{OF&(eej3Aa*i*Z0
zc-paZzSzLiRtSA^8+hS?M|{yHe8&}l<F;Sg@`Yy!OzQtY$Fp{g?&>=>Cfti}M0MEW
zb3pILbH#WMWxYiTz`6AC at j+=hBt&Y36%0OXH+bLjdm{i|Q0FZosD7;853UTMb8<Qh
z2lt2vO&6w)_jW#4BcX%PRr9D3PvAGIsJ_1VaCQszfsfkaf^I-btv;o!v0cc#bp6Nx
z`sSZ8_=IZhxYg|5VT&51KhB;!Xn#^{SF{9L>*H!Xy))p>FXf48>2 at qWnQA$eAmDSu
z%N?UCc>-s5nR{gxckcN>+toi+$`pIkt_J6 at r*jGP#lZ7%_+`R-77K~(g*Jtjv!8+0
zZ!R>JIz4MXCfPU`2N0H4^$}_;-$fxl9#vi(JRo!u5L>wMllNf?m*{sJRQ6r}E)<4T
z%0FqoW6{6=?TGH|eRg2b-F>mIx5X=H1OJ>V07o<x<G<hjv=m5o44=~H_Nb2Bb${Lh
zJS0)$IS3)%;{qKNl6$~Vs~TJne&65Wc{!~j3-Q;@>8j)|PA2=0ryaa>D80H{L!_tl
z22`t36BcaK at Nct;rk*hZX-rB3wyWoRbG7b{)x#wo%q=ldLhX-@&r`i}G~!@zYQN#k
zQI`O|wAmZzzVjVYJhsbg``-8xWy4Z4lN05WGo^PmVo{uOjG(8Ys8rc__ at Lgl;f(;C
zPwvaFA9#0ZK+QM%4Yl4k-174BK#LyrY6kqB+c&RokISHEHW at bVDfNJAb!}blvxZs5
zhO?`fn3yV2V{ZfI{fSINJxD!w%|S6tU%tU+3UD<l=dP+=hzDG1=I;*8fKFE{Ow3x;
z>$*9V0uefUb9UvTbIupPH)qng=zXDw<_nY}>Net^5W`0mpi6N%AdIDl*eciU#BT#G
z5tyCYb!1AY*}tz&uYz5RL0xSQa_#|FCByR(*24+bTY~!+2Kdqq=PmtbdP6E8THtch
z8vju#UN?I+4zS7M2zU+e{mEh-^fVqlpRKaOX0f at kvwN1QsjuFTm4-L-P_qP1{;O{J
z- at -+c4VaW)F)6Ugeo{?l$upG>qLJ+jvytNJXD6dew6X4a`;$f?NE*@=7?-loHq7~D
zIWVhB_!(aIjQC7*XRGT-KTBqWp3- at rS#oLOIuVwN;FDtSQ3iU(pe$y`9r(Iw_tUjc
zdBXZRX7 at 4Tgm8xr<doj0N+%U}R}R%HnUUIvjX*u%&G`IXN@$Ozq);_j$S&9+Qkfea
zdr1;-_)BSrQF1uImuHp<IVF(epl#SXyWqRTZ!uIjVLqKV{p-xit%UIHq{Ra6&pl)H
zOxXf`32N>N#I3&|&24^tLZvIqnjW_>y^u?N^gN(-i%}U=bJKHG<|v;+FLQD??0#Aa
z+ at a6}^fosUi14n9?kF+6*|^#D6#ej%<*jE$lnOEr^f6Bs-8aeqYh^y(CVoB6;n<z%
z`KU<nFuZkRy{w_GZ at QuhT)^<xJn5g*n9l=5ewj76#??ssi4YF^pAPIT4D6Rz4Ey46
zLqG-ZJ~JE|k;03jqS7QvF{|-0Q5jx92#1GQ@`SE>A+Jb0g(cvZT`2j4U54^cK3X(W
z@<*krW1V&9UVneUuZRL&-rpRo`eO^32V??gdECO#PnG?e8jB?-di|dBQ^Lh}56k}8
zhroyaZZ-6et!8F!Ln5e^`)4!_r>4Gw<ejRqTMkwSRx(362dr(Jlh>j8PT&2hf2&`~
zyRXtbOr5=|ad;iW&uDJ@%EGO$Cj{6rG6G)6`5Q?w0D*ugK7+ at ZI6hcaEgl&;z?24q
z%zQ_`<2YJ2?!7XdvSA)ltIZyZV?bnn-$;5gR?w;%74<=#oL-XY^Y>wrwQPFW)fv5x
z^$}qGi;7MLCnNKuoir=~qD(+8aa4qA7%5=8y#jN>g}i#n?k9#V3nj=@i_*nLOfGmG
z5>2OUqC?@;Z9ddc_7pKL&n#f)VjDHmqTPiovEFysKd`c^bBaeiDsHO*86$V9lJTH!
z*a^MEw1|VZ9=V48&NZnLqBpjJ=$}*4+v;yCQC$BD!yC^f_CpGYmm+}8nTsXJzqRIh
zK$(*LcRF^ars|(x45JI_AZ(oEwr{XOv>6C;uSZA|K<_ccT=#Es!bU!pOskC{rkZfx
zo6W-Q<o_yGNcQ at uB7j}i^g{(J(_TM!B_Pq&*pafIDJVmL2*Z;NcFr;Y*gcm|T!9 at o
z1=}Od6q4b~j9Wk5y&g(Nd$-m$yaOgWyg9426Q}_=!8->+fI!4*Kx~zYqF4cJFNCj0
zqM~V^Kvvmp7aPCyejG)8f415CvHZ||>`Jd&BB7<Qc|FVOPC at 74;WSs6>fO`ZEh*u4
z0C%By;~@?g4a6iWPqD}T59X%qP-D%t#o_)PwSlDw*Ykl?6jf6R%Me2f6?Nr#smqdp
z(@*oPIUx at RRGB8)3y2y`Y!%IM=y)&=KlpwQj!Xy5zTToE3Qu*6%8BZ^6S@%@%_);s
z^;6f;ba3x8`_HIK%Xv#`I)sRijRE)jSskj9Vi+Y0UH|zW$}ia$3`AJh?lY${p at dYw
zdsOz~;b$~w#(sHsHldc}GYa5a_3LDdXiCjnjAAtxTkm47o7*x{n!F5rwxE8|SO0O`
zpwN2Z?RXgQ6`nC at CeQLiiquS~(J at hNlt4^lAW?IoqFw|Fcm4o2D*uKZ{10%stjxN!
zqd`ZtqF;mhQju at jKASO?b#7;UeoDgCqUP!+f;W7N*bl#Ky;gWXgI+yHTRZOktUls7
zh9N9-y+Q>s=rraYKaXQZej#p^?HKb#;uR_>WqEWQsDR96)rbA}tcEk?7`eChCe7TO
zyUQGOGZvXO6u17^_4R<uxx<v8=C2bs=VqwOV$0o3g>(jBPkds^VV}IINf!Jo);p_c
z-osXdwBdSH=+N_=cenh;EX_Nppum1}h`jM^Qs;67+b6{5w%cdz2!mYsb_M%rQpav(
zC`BNz04>e?eCDl?7%EjjbU)H#AibIPnvY>^b`bKh84^W5;jDc6^=D?RDy at 7`Kz{MX
zVmxC_(pZ`XH>rrmhYk<8Un%$TZ8#_RBJM-2zv>!&ON-Hb7wt=U<$_b6@<7nxm(PWu
zA8CK=XUH3-M2IG;`yM65%6u<3d#?8$j@#dT{JSomLMV%cxhT<!U~xH-sMU;7U898M
z*P(X7*X5$tVRwD3Yl)gGjW*s>%1YMnX-AsshWW at jFD8vEY;DT<)hfLUNG`ZT6 at NbM
zUz?u%km$RC0U96iXQ7KAvZ_Y>iiV(J*V#2uKbL86<ES^8xpy5|{nnllHyK{k3cW?;
zvfh`C+G1%&`bj~~Z9d~%zLR6tI)dW)ubWlK!|kL;?6F-r`P at zAE{$j9iEMQml#$Ui
z-(~#wPNdL&5=voF@<H;!(%rnJ<8<S@*x{LwB{k%!%3;a`9jJ|+v4+n)HW*3~tmpD@
zdjciJ{WCYFPxJb$AasRjqIK+s9O)ql%!S7!Z|9!f)kHxbd)L~hKf|jKw*ovt+=oOq
zOoSkdKI!CYH<cVYk~Cry&jr}s#e)@vdv%aAyy46<P=bmJoN5<Qhd$y|S&|0;O~t~-
z)@@c~t8_FzOXw|@2u*#J6P2JvI>H&lgcUP~#_v`2Yxf4q{GQ=dzzG(zw$fKvfUY0M
zTZ*Nlo696?<I^xY1-%S*GQLtPq2^WN&s at zACSi>&zA5Gc>A>jZuZJX!fN-ZNMOtFu
z=zyVvO7s?4))S{)glIOJG<ckP3{}L>Ue3n~x1Vy5AJv!Cx at KhYJ<fzvVh&sfn_<#R
zYWb5SO!*u!Lg)ASXqi at CBBgizY@|oJ7m|GsOdm<TEE7Pr(;IiQGYjWuKP(g2?Yc{Z
z_FrQ^LveO!KB)I8-JDczfb!e*3EF}Q>z_<TB`uWKq|7ZsNXhRUgfHKClAV`%GQ$f2
z*qoZ$ksERp5cu|9-0#6&KTfFX1QkKFC>2qIfUP3dob$?L at Mgz_AjZyFb&kJj1j}G*
zDP{HEBIVsO=_}SlkYe16zE9q0hfd2w5;+8KpIhozGIxv3hZ%;rAg24paW1^{uaX4K
z=RzyI0)}0atC|AXHelIR)3hMlP;1$p%J+i-u;8t;XRZPZQXt*M at ysUUoswg}r`yki
zHZ=$9ZQDbYie5FCyk>MNw$pHh!y&3C3BaY^=EKnr*>(a^ah|GdTPerRP=V-RNUiqC
zpxTcOpAtaknvRqXdT!0wP;@0Tv(1;zs;F>wzY-;1aiZ%xmZB_O;9x;u-UI}F<sw?e
zgrE*R_~l3!mzp~ls!tk}u2PpQWp6?AP7nIfVy->?OREHTm2mbD`01R*@R~VFyEipW
z5j+CdtKi2#;#79CndURJN-V_EZU#gMoa5a;!C#0QN`npr$x7#>UQnc7ZexLys8K%B
z4iZ^a18mZ>+uK~U6=M$9gl0>$74>y&9scQUya=y(ZVThvbonQ;YUAUAdh$O(g?d)W
zPF?D#hCg at MI;`IsPS5UB`<rQp%(ky7hQckHs|^%Ld|Ag|K5Gx0HSZuFKu^r))G-Nu
zY^*W);j@`;u?!hTm07pI<gUC?J@#XYyg-X<3`nySS_?shsrb_0VUB1P(7*Q at A;EQ}
z&cbsZ30*6?fia)*gk at 7g+-I_jhO)*#YQy;96m$GoW`=mU#kmV$gXTtZb&Z>Cm{NHl
z)tFT47QEKiCiu(t$m!8w+lyJQK^#7;-%gX4mI7Q(1(V-k3I#yiKL5I~Cz!nFDo(w>
zwW@{G3f#5a#R1rs`Sdc~J?27CQy- at LwG9`(UU(L4YxNkZ{}k}>e)g+VVxZdxRAzvr
zu}oQ$2`$M(CbTR6#R9w at 6cz4`ruUvsnin+2sN#;#n|f79I5x$es4B3Z!i9d|*@O#m
zhc{p at T1r!u^T=oOrge{et0|>S%psxp1S5#_1KYr%Ok6zdOtR+$(XZGA#_1K_e@^%O
znFqR!Ql_jxySY?@w_G(132n~_epy51kj9+Xds&App>m4}amivl7Lts&73|WEAG5Bo
z@?B!nwN)0CZ3ZRDlgO!i9m731B9s!9 at VaX9Z?&BWa-x)ysAR6~W4B(HRHOTvBQ~j#
zN at w&KOfOVEv-gO>bT9cCK4d-j9<B9LOaRGu52p0*LO~XxZ}YeZ*hK5{L$%EYzXbJl
z&*ra$c^CAL?%`OZ8sj%aK#TEo=@6WovPv|n<8i;>xh2h>X2P?@eXe1HA4obwMrw2m
zIO3Ja=JrLcDA&?)5R(6TEM?KL=dFGAb#G6wVXr2a+U{WW-2GRMoXm-LHSC at oTKuye
zJBi1xP*q=Gi>4oV5HL+ at j?U1Y<zv)F0irg_Y>HFhU&A8z<Fatq>O_l#hq2jN+d!CA
zF#?8~doTFSd^7>3`Tdi>pWH>k=amBIwjJlqTX0j5VIXa#_NG&9$xP^RGF5?V*SHvd
zg?N)-VTb*4{>i?1PG-AoZRE(yF_G9j-hxRFm$_>Ukc5!Ai*hlx09lE39tf0(l?)_w
zk9alxQd<$V<z^#BJ{i}cGUSi63=T3X(_W;0-@{g9TBF1m>8_}iEYPpux!CTW at jXQ4
z#eNB at Z~kmz28b<?9`W=%2RoFL?RmI46}<gkQaJhmk6<2BhKH1zPsS3#w;nAb^ug2Q
z`%ID!KzW8;@3OiY=Zxn-B~ZznHP(b^j$2Q&Nxw!cyq_Olu9b3d^|V}C-|7M)^1Y+x
zG|+Q_*J5MD37;F*_Kwn(P1UN~<^XT<vS-7E;=>ImTfEDj-tkvv?|Ck4b*&!<H5au$
zunIFjgv~+g(U9Z_Z{~IXiFikWx#<Z?*N%gkRgs36lHos5W;6)cSWL9#E>*-w3jNJw
zmpXUA90p%8gRx$(=LAbR<wlc`nbIKW%T&jCiC^*I#bDV>^nuCSCdURDcUx%Ao`PEb
z0)kqvnx9sgQt^zmRy at PxLQTbO{nEk?S@*MmUsK|m#k!0<NvIVm8vAl;nTdmn*7mXG
ziAL3>2kPsRKJ!jZmCmjT(ap8_C1_pNjtv55+pR7X?dL-JZhM}BHL>>j@#wrKjrs5K
zCD?^q><{7{8)kvWsA>Jr#~_;h@#B>mmJBMdfA3`f$M*$(*$p}GdXN+kY#T|Mu8Z1$
z&7JgxcN$xN#wUx%@QPt0Ka{*Z9K3yAqpOs;nRtlYu!{J^T at ZhZkM74M8I5w9;^SsO
zrNB0tchKXU!REiO>;Lm|s8k6kLMKrOd-C<7X^;Ce(xm@=@6FtGl;9fU at txVn0a7d(
zPqb&<4|@CWl>$5sjwlN at u&w#;{p0`MHu<-h7Q_umLk&h_NF~OSvWldJM?(uRH-n^k
zmTui1Hx4>5ZD{9axSON0_JK{pb=ofb*j3pkYv|XMlXbVpZNdMzwU{P`KkND=z!|d{
z2S>kreSV8tr#3mo+s%XFgaTtwQd_Wuq$c9vYKmZvf0se0;O6%o{Sg=H%8D$-=y at sq
z^wd8VU$1`b6AY?l`eek2rx`5iH^7+tXZ8JfZ4N&c#LuTsF#30-<B)JfrH-fJkE<gN
zx`5Nlsun?^hj$3%qUiQ?*cSiW`>seB?8k`A==h|kS&vKwY!{33k`<z(iN}9o=p8<h
zMKz*k1PyQ?RzHzLMWr&-r1-Y2Tb7seM6e&&92O-y%tDPcdftbo8Y3jz(ZxX8&V?9&
zn=bN2X{&wsBWXZR2UZXRT&xzbsvM?-u&H_1uhaD6UFNXN6%ilaz;1Mwgo)0RZnzdC
zg-gYXxTlzD;$>@<u>JI=OsGjrh!Csm_5HWcH at ->)Rz~bLAop9PymAbXx8cF8-!|mc
zr+J6ZNTwGo{DXTHM*!JLKy+b8>#3+6br%|j7-4<RwV7r}5<Am~YlQlE9Eq!(R4hS+
zn>sql#7D#$VgYjfdH)(Q5Pm$$5<AIF-I4C__Z)U6F}qzOO^Q)s-x<{E92z3I%`P=Q
zK{2aYe!1Te)<9EgBI`qo7kyjR=>3|T-J at 7Gq}z{c<^76e*f*i&t~&@y{7tQ8{Gd?u
zg)WhcFL-Up=667%>ap&dT+Ts}>~>I1mCeHKylIW?>MPjvt`51iN{&5--nqh928?_3
zL(Ri3Nlh0&H?$OpjGQP+yfqFs7b$0zn?0jm?%$R#cK^Lc4uIj)@#O<>hHWSv$Xb<I
zTaC2Saou*TWU;lrb||&z==%<9h$jAeT+U%sd%(GN5M`KgUEK6yNId0ik#We5x-ixX
zGP()z#MM<%nIdEuy*i60WQnE6AXFl29nT(4EP9u0y<}GpEM@&!5CbUEL2Qf4Jc`db
zwVfrv#;lCikV7U$FJAvAzU=e$2XCiCNRk9Z0-t`>N(;k5s=`_MP(Hd-R#~=?U=>e5
zqgLwob!WA8BFPh2g3-&N7~yk@<_ahEvX3KHR<~BX8_wg<EG`R!&n-&<W`fqcSpp#*
zxMXLZcFJ&L8Rb=hY^gV&@sm|42W!9d6?DIpMUU0W?yJHLfV1}A7lYl_;s#G$vp=q3
zuP;$a=Va0r^fl&CCQls(r)|#RUWn(P=;PBk{Zup$B0dI#`Z<&8uifh^Z2C`5Qe3Nb
zm)yNvZzdP3866QLneW~b**BubSO!1r64m at fs~!UCgJ;&;><uvBKKr+RKPCYh|8ak7
z7x)yZn8 at Vhvz=kOeoyxs#zc4jI%_V{cPo%k4%usERa9-(o-ZC(=P@(7(XYkE%MAWn
zTD~bI64j|+41G3+9Js-CLHGrm>a-X>op=B#Qt;b|vPE6f|Dx`_qv34Z_R-NNN)QqR
z5hSAb7SV!`qDG6}yHTP?8KOpwL=d94=%S3?qZ33KjNW@^FvILyp7(vf{XO6F+iUH$
z_g;JN|FEok=DzOxy3X at B&f`2zhjeLUFu2`uv-di+U61<GqLu at 2g1a$y5kJrM(cLny
zsvs<gV(;%ud6rpZxwnlQ<Q47$3_%$mzA8*kkxfx~eq1K$F3-U307{jed>pJcZWHef
z_OHDqdpUk#Ig(MW2_hz*%<H7h4b1r=!22y!p$)zYi8Y<juleHZ&iC}g1SOfS9$iWs
z950BxIM;di(9CVt`W)0L0UQX(xj8lXsU&yB48f|5#whEX2<&1-Ea8t at AonQ~FF%Lo
zD-nY(4~Dr-W7_mj8=X(>xE<@ETQyM$y|a?duqj{d|HYafC&X1`<UO^Pw0tT4d-|N|
z(#BdEOb}5zM<M$1<4Yel{i<V94X*|!5I6ks0L9M?()t%F`VBy)@=O&w{fYhV7q~qY
zC~&-lFsH65Iv1gVtP|?p^!{9HIsvx-5Wf4Hm?GDtg;(kJ!GpfStVr|9_^A8$OzYT^
z`ACwVe-{_LUjz!s8COXrxyzTeJ9n6i`&z#uRvSg+Uw(O~+&#HK at y0j3anP|ITk<Qr
zY|Ve6+`D?Crs_hmOc75KGY>NEKV>Gi5mOxTH=zbTr*-U>pZ1piUYAH*)bTrg;NxH3
z9&d!ssKIw7VUsI3Z}q2q-_WH!Gnxf(#Ch%I1%n6O+ at -Ib6oM1!mVlwu>w>r~eS{p@
zCC_+_1Hsrn!2OXy#vf#!P4b5wA at m2>+XNV0F;zd$xLl0I!eNA<YO|u9U#4Lt6<!;E
zOgydxJwz!Znv62(2Ap(w>)Z~veNx6?M|g)B1T&gIz#R*{o9kBL-A!9%22>8do{~O;
zz})l4qJ0WrU#bvcm529A)UgWb;>pUE$eGkzwpXZ;oM2|T-yTWpEp^acrx)2bNN%sx
zD1#KKgoTEve&#=PuI at G2qXfYtBA(q9dLOys8Ri|UUszge_zW`XOKHY-tFOCP?C^II
zV%TlrTvD7zu89u2rai`S+-5Bauas>taL*e|&<rfnO)R$$29msKdRvehEzop51W}5~
zg9BEZlRkFI(y$kx>3Jz&i5_FCmfQG2Dp0 at P0jUSq-y(kQE8KaR&E%InUy at ylC_tL*
z2719?kJE2pF+Yc=s%XFV*TxfExVgGApmEn&SHBEY)3{rLZJcsX+}aN3GZx*GmYVMQ
zuXi%Fp5)3xAwil0EyMSNa<^|t-^foQ8`=av|H5y>9l4;G>$`cxH>#_qRW<*E)7m_?
zDvsrbM!~NrwiZ3yZyL|O<rG`LFw%?s9>-RJudk=AmUmb;L`G&A1QSd`iq|ZFIo at t?
zOL5B&1^ds~mBK`2mqo)yXrF9uvb=?y1Q2=?`Sas>CeUl)RYBm*a5o?1aq%x~<FZPk
z{ajRaG~)I7%ISI4*lztM0Nh}I&s}}-THdKaMeZ>%<b{pq;<-CUx|<ux+R27nf4pzw
zzBa~}h at BXv(VG?QnP at z;?OrDf8nq|>O*d)Xq*qG+F!3P)p+5(5u$198V$1N+73Hgq
zb|T>dNS4m}Bbvi(QauXxO<R1UWCYis`p=RdpHinSg%7{%XiQmFd<c{ta)r&JrCV-Z
zJRc#)eia^~_06nFEik|{j*<4+fIJJwdwIL<cP~Q3H-t`7o`DoKUgpAS83!qFVN+kn
z_lNEM#A$_gek|1vD&xQ9dNFe&cJ;BmM6Ff|jOE0onqd&K+`$~Fx7J=Xt){IIYgb6R
z4bT&B`)9t#*z4|$!A{ZB?|jz|W_I+f$U(sl%)2qXGhb4h%%<;50_PCISK%MeAsZ^=
z8I5|w0 at nfK?{_W}czP`3xTdwtC8~}bd=tY)yk0vA-4m>jA<Sq!`1TOX$+>H`hxg6*
zIaj)egf?eA^+zW-!?q&@tkr&0^ZZ6l%}s_5*yY8$CO`7IT^I|BfpxoE?M|pA^YJBy
z>kwuTS9a^Bwn&xr-L#hhodq7fT;zJ#G7}M7HDAndZABK{R_^Fb7s);f^0(1*S#Y))
zfUTTv#p9 at NF@buI7w>cV>tz1qaihK|t_K@|WZrvqY)=xA91N1a#!SaAs at rRwYK$MT
zfi~l-T4S){9-|-9);ec0t-!{rvSREeR&i{M1)r#vRxP+rY#Vbj%X(Bpoc$cC^{Nj#
zZq98wBsc8kzg@*fk6*uJOo&yua=l|=o`eFd#Mx8-n%??*T(lr*xzB;6!D=ZGM=PB3
z#@kyhot2Q&R!#QIFQ|cQ|AZc#(F1N((g64%IUSL7c3uwQmu72ywQz$BRhW)~PRZ1c
z`1fAyiYT);*Fb1nsO2|RxJx-yQ<F8h9Dr9heM?`)S$xQxIEpTq-t5wYj8>KGkW6mk
z%tUNCgbu)gptIBDcHo+i`FQTO?RO8m+3J4)jni^3M!Xg!yP=fecUIaNI$;+$$1)1f
zpm?5#rj`KbIq5%F(e*!0+Gik3CnfJo?n(mQz6&QV*&H+5vIgqUU6lO_0H7iN2ax`M
z1VR9M8z=4je|$>ie~PRB58^48uMo*T3gXXnW3hdr-w3_<<;2)TzNIqKuq3)e%!Oq6
z>6p^!t39k7Fq7;EhgWaK3urzqfT at H9^)9z34<h=|{ZcG{`+8pP_J;RiZWC%SB>jid
zr(n_wf!Su=&Lz{@Vmu$l`whb(eF|hUE%a{o7JTnna2raHDI!)7j9;)v#frMjSERAE
z at bAS5uEz@8Qw&t-?a5=Jd7XEwQU-rJ%U36VczsZ%8bZ77J^53vq_k>a0F}2`e>tdm
z<6!rvK1l-1*i=tpKJUe?BLn|tR**=ky7V3%j#s&%c}E&d-xC`sGWdl*fDsqH{2sRj
zPs&^P65BIA^<0JOZ}&9Ww`zgkHDprD&1n!whMnZVL>E1VhsV?>7iYfi#S+9DO9`^1
z!A1nJ;0BTLa*}@NE#;`74%tnYiZm%W`Zwm;8X`XPoowQC2T)XIiw;+*;sSLYx;|GH
zj*RfJ#cgTaOUqb8C|%~#GPw$ZeYru(pQ+;+5j=wQ%DivL2=ZP`PpDe6ynhP8{Hdn}
zm6u{QH?!PzhUn#pGIEkOnF+epJ5NQX*}Ykh$@wVKcTuJXshsxooyxkU?}`YvD2n!;
zb;;P^E{~UFWgc{un=HqAb!=e9*H+#?F9>(oz{sG8e!_0>>@t^~j5T3jgS=OhPyd2=
zMX(J{7_Ps}MHQz};K~V1-rwQwk(%+-5iVku-m@|4CcvV^Y(t=95k2fmp~esCO^M7r
z_ZcM?T_CfN;69N^3b0NQNO&xh$E_FWAVwX%6~M_yXh5Abemr;6e9~YI;^7S`slStL
zhvl>;>gaV<<ZC&j<#!6m6;T~ux68L5*=$WR3R1_10^NfagOBS8uB(TCe at ZH#IGK-R
z*mXP1(Kv5je!nq-?dBT!y_8SF{Mk)~O9wA3nK`XBF7t<~*-u>>SAxM3h35v;+?k^O
z`8`yqY|!r(>t9cv2C+Jg?%h0OQkb6@`a(AENzUTkKsSij;=5Zq<dMy4BKjLYSF2i^
z(Er)pUmaoB<u>QejVx?c%UJPJ1h@?ZEB~6-&r4Iog$gMft!32<Z_-1IV`pScW&Q`w
z2(^7k==bOUVwR5pFHtvf?bHdE=PRz7b|yKeJ(LV0+n0AyV?S^Mo0!&4O8=?gnP>R;
zrd?GdVzi8+gnWznCtgZBw|lmhYB6>FGJO at fFup=y!i;aTYrG@&5z*O at bez+jjba5w
ziW^M2<EP8n_r9Z(lA$}dy*brgIF26X6pB7H6zKhk#CelDJn=n^hgAMUcM*z=k<hkv
zr~|h}G~Q+GUnR?YVXBlhh_*MR&>LXqg?^2lt_ at CEjVqo{>NW3fQ_bv@|8!*q3Ok<T
z$SuF$kYBr4|8UIKf&GEf9Hv+`GyQg!y&O%}2g|$2Wuj`4M8WEQ`NM~k;pMBrli_#N
zw}VzqrZg60!3H<{`QLZb{_4ox82bF)7)qQjGr{-Fkq^(a>$1bTm_(6L1J{_VAhDPV
z4OG%X$?oE-KU}wdZLTKaUrGdKZqsY>$tT^kE at lt3`;~QiM+Z0&TFA)iM0mW#{Iwz&
zAq#R*$+v$6*EHF+M!}!a?%qXyp!C>Iz2&mJm-Iy6O8Toz?Ng8<>;%eqXy<M8$d`?n
zfa?d3T2qCjTV*nrU32tNt<RTWt);wI_|sym5B*;l-AH>`CV*p+#vl9;ciVG%`fDhD
z&=4QHt at BWu_!GT>rvfqoVt5nMbz0!Gp4wdR at 2}GSR2`l1vNLX&1SL{Q*k8=K&AL~>
zPwS{~m*|%ow$1~E28*6aZLLxn?370~%(awlC}SC^ALaCYo5A^qAmd67y37%Q|Am at 1
zEwo+Mh?es*uo&qgsdf`v)YQ06h+LS at MtS<V4xSrk0W%IQjz<~{*!sm at TBfvA20p`b
zLR~&%LTvFsq<IeoHRT!M#ClT?()(rH=1AD?TmKu%e7TeFb*6rAkU7MaqJ#l5>Fiot
ze6q)NP~K=bC9^y#&i at ij5`SHrD=oG_*5K$^_kPd4CC!~RlldjAg5(rZRX9D4vA}YA
zWn_W7n3<+guziAUETYH4eoIq8F);+IT~IT7qV6!F*o-?kgU~lm8Kpm~m at 6&3$-GaO
z$d0Ec|1tj at W+5AXI<3>you)9lnF~NS?(8__BV6b8cGxPsD!9aV4I<(VDfL$4ot6Am
zpDOj{s9$%_3U&TWyS^xky_5QssU~`CqI>_dgNr-qKO`>|rJ(ObSWp|TAGQ84_FZ#e
z6<3FOZk_y|xdmEdYO$p$#5R8NiBS4W>$_>}`A^ovuvRTBUN!7=lUBEx)qNj^R4OJO
zEJ`!tOb{$zq%9O-gv at My@$C&y30G+fe%x~cKJhNwaRmykhPv3EU(N~?cq`Glw4FZc
z$-~*g!aGx=nBum6Q=^<TPC}`iTP*cA{1Lrylj_c)6Q8rx(5FrIt)|GtENSzxMdc^&
zT(MP3;h$XQLnV%7fK57 at AX1e7GA>8sr~3yb5brg3tJd*Q1LL#<g_GYm{wn>UZ)24q
z8fM^z6S^J=&a)@z$;Vb=7r^pxs%H<22TvT3A(?8gEL||E|GYpW53z^9Q;Uf&F at nN3
z{8w!SC$b3uQ_`pJ at EJ3>9q%2g=TrF!^sge*9$)WRfm->5h0-4ZCAiYE^6pj7dO6EA
z2$y$Qo>kEQO#Fj+n)kfQ8d}kEvH8|HZfb^okQpNo=g~dRKD%eiV>Z2F@*F7l?Ykc7
zFI<E;6J<)CR;TLvd_`1q6|5pI=AMG|*E}}HDd!zv{mid&U8^IKi03ExecfxfA!ddq
zy9^HB$IsN+8mb at -UdpV8-=ksrN<4V%KjZy}e5&r{e0yT2?%zk8YQtzdX(m<#cWKCA
zg6o>`spps2413MGSHWR*^^r#<YlE}c^QnH$-$8&Xz9Y`T=<|t3Qib<FaO;WJFiQaZ
zFPLR|1;DJ1?z_Rd0xDpf;rma2Z%5~w at fuL6Ri}YigMtk|F{)gY3F)McK9BQEM}(o6
z74>KzzM+-N2MXz^tB1_rg|2X?t;57s$j9r4?qXR=S8#u|yr9ly!_S!d{u8VQN+e$1
ztD|5V0Ln#gNn{6Tg_6HbJY~>HH5)z3xbcIL$+ at -|pf0Mc*%cYG1ZCro7uMgpe7OD8
za;@f-C9_df)U0m1ebvB8lHCETtZ;Zzl*KB!0qym={<P2j{fO&lJ8odNfg-cSXnd8C
z-JJ^}znX6j?32Q)ZoRgRou(x}rJwvt?pAC6 at NxBVh?11+&kbU)BH<5COy)~;fvP25
z+C*i+Q|TR17u{Olya0GOH~`#A{mI=(kuNpYW*=9(<r_N*wpm+?mKt^}OHJ)&G=W$0
z0Ih at S*IlwgT|9%YP4b`IO*C{25?3LcU|&J(AB4`iCjRr%E7yazR>dzB!EahsxyE^n
z+!L~z!;3`b*tBy*JM$xT*tN$k5XWuPvv?ChThzse#Bx32`0RV$QP26=SD%#KwR<M0
znQKVoUx+N7VhnY(J-QIW$(5u!^9Pcy%Be>kEk#vq-K>>VzqZ`NoNuHj2`=io{IZ>^
z?>5yF$%Eswzb#0yO+IZ1cBV}FAZoxI&4#5~T|}}pTPeTWZQC(XY0C(r1YjJ5<r>CW
zk1HX at F~O&M>m2^J;@0kn+cJSmkM(d{qG7naua at K+D649!SW-00ZTiRL>4?;f1aNbY
zw}y-4<{${!(4|qPnoydT#6ETz`t4C`Z6^S7o7j%hLK!SWXxU=9;+Di{@QIcnV$qwW
zA!!W=$Y1YrXf at TPCtTFg`#Q_w8u-lZH+<p+YvWXF`z}UIka|Ii?;(hQ{x2eV5f-)i
zLw}(76jCm`{6dG4H5}UttYz~Ys56kNVqfF6Ns|?N8O?as>XSTnwSG%hVVZn)wfKkO
zrUT~%a%z+Vx(-wd!I`Y8l!yoQrz<O~&S}RhV*c$Xg&3}KgmCC_GacyyihSzgQ)K_B
z#xmSX4dFOQ*AFpkI)ObiD(!tcEZl2IyHgujKFupqNN7=CQqW>=WTf+oz<WmxILjns
z)&`d{3)th7j5sKX25X~T+;RRXS?pU428gL=w<Ne<8#%hCK2#x8KgJ=AZ+eV(>a4Ex
zPAN`jlp!6SZ9;IIVg-&qnq2rN_MP0HMt`K!$<3spOMceHr0%kqEq9quJ-18<OR0JY
z5m)Gg3uydGEWXFRAc?0klj-tWofl0b`G?^B|5bztl!pod%tv-!B!;{w)QMi;ZN;Nh
z0yCcCcdGtd3t)cZA8u&d;>Z+N3GA6QSqnFMaGlkDKH^Cxlj&yq=ci$TZ2-o#@!CD1
zvH>|iwV;pz>jeE1_$KrZ0m>az at flCSSV|(~H at lAP!ifVQG8CDQ86K*;mCM}n;;p>+
zhSi+bgNOrJ*WKIBwWqyo5XJnuCDZ*d^q()8d+XE{p+HAa7MDnsi|2pq2iyH1{H_=>
z1xaGY`$16+*ep2JZjRtr2}pUJNwEKGTw-#Cdw at Fd7!(Hrl<+?P at Ny_7fTagE1~FRQ
z%{MsYb#lvs{OJdov5x?;te8CB$Fq=^N1C4uzqAT*9e2544H17jZv at 1>io6_&WHP^~
z{$W9{(>rrM7RPlPvLw=4UxfhsQHA-(yqfH#WcZ)3S&wQy98z5Cjy@`9*NGV6I2pQs
z#gFoQ4zL*Lf2bTOCMZdxUDaY=T^9&djj>g7PB!Clq_#7trlLS#5Njv39G1Ph<4@^o
zDF at t^Q|^}FTOf*Sz3|(TYXQ#R&^W-XrVqay!DDd>_UFZ(R?H4tBUxigRa_GK7$-e@
zWb74qUi=JS0la<{cCFPGm;Z;HYs8I$?5~JPS6h-cLz~qPRFI8D$$yJ?@xIlJON$mw
zVI&!?`cGWLno&`Gkc`)&#-~CK%iP8;mIla||3zNx*7shkbmb9lkukXTlhKDJyMFjN
zg&19zMw&!_!3$>U at lc2JZrv@M5<>sC6d(B`vTN2KCF=rgj=9P|ebdQR%@3x+vO2|2
zG>wHhRE3%oSP at iO55qIxplJcQVi*2DV4(l%C;1yu_J4Ct`~OWk>Hp-d3}%D6ulu(C
zG?)Z-Sx8+gxnyipUtoO{H~jzcddX7NL$A))#8VfRn0)>SAqFM?*1=(h9F)S)rTJa3
zv3$O9DBeZD;M1~1BL at 6r&fl7s=2w?M)?NGZTKoD(<nv$A0g%uF%D3oir6w at g`{yMJ
zNtM|VFD1oYHx8ZM at g2XwoUf%_H&xYm9kEEBFMm$)UC at 8{56TMn$;*mC$#!5GwHjqd
zZBCNk>7><P?QjgbS3hDNRbif~%>z9wXWJEnHxK_v!SuQRyPjjh^3Pqw+>>YvW$+6F
z1dT%Pf0tx6oepOy5Tzj-F*Z`E<5$&P at AN3|ud)Awh@<QksHlK&>7a(Z!c!d4<tZ+&
zsYwYOs6k}qB9x%&*Ni}~#-o*x5rGHoxFfb6FaD at 7%wk at piMdZTBr($5<m=6S1^vZG
zM;tqNr<i|0o;ruZ%P-Lw)?-a&34Of#LK3mH+0}8~5Ax_R!8XKPv at Kii(G%B|o+HE~
z7yDm<DOY~@xs%{V(a!rR4$WmdDluc7Pf~waneX{6y*NI2l*T<*F=qdsv+rZfBUYr)
zTfV1BO5 at Ql_~;7{a}yl;fzB|@<s61yQxhT%=+H;e_E5>vt@>H0^|?WeRX*nA&0nnw
z-A$^X>6chWV6bE5!ZBC|T$44!)BA at V9Za?V5i?-5FZAO#CN>Y~0hv+Jg{HJoU<0xZ
zfdj at M|1|ruso+T{3u2xaS$C27FCj_y9EG+tSo<`C`Y8qWtToI$6#GYUdvy6x{?Ywr
zi6XA84PoKFORsO+MfG>v1&HOoHl$Ci?4 at kQ+z$eD8}c9Rn`?Gd>QlW5er!{$8No~Z
z(n at 2Dlus{Hm6+>kh`gxRSL#{JK1}FdHi0a|Aih7uXJq}FrVc0uB(diiFlP$r^FgSC
zT;>JfI*(op9!!?YF at SqWG;gizUU^j`ZFVu&|8yNL{`3m96jOp-u_T_u)3nqC`pE6K
zuG2-Lea@!BZL=dmUdEv4S}l>_(!vB$=EUapf$P#2jV0 at EkPH}i0|xGo_<?yqPcPA1
z)Qb(yU{;$cw0tc8AzXu<g1YKWrE%!BDCV5j2WFNMdcI=<nUqWTp|d-<WNtO1NoW8*
z>uvV9K<RAFDWL69>X*|;9$_I?rjw7{#mxp={(awGtJ+?in82<Nys5Vnvn3K`q^<9b
zcUWkB##Nhd7hats+F_(aW+$%8G53dKpYsAdZ{)sD8jlM9pT;L(zfPg`Jt|8l*WPeD
z!Y}Jfq>g=nqWHjN9teoPK_5%>C9%q$FRY89O)d#v-*+cocOPxA at Bc(rXUWX9+?QV_
zeiqGW^b+XBC^8i7B`z_^kcuyj9uo|(%HImYAGw+S-uolakg|H8(7 at WwHJrlqka(GQ
z=ZLhQiG(UEITr^|wU#S^O$6KK?H^>NXExa5l8>Ai)7}MyA+EHSV(*vRwvE!)5}izG
zas&Zdn52;g+7~5~hqwc9*7lo20ApJ&N#e}EpRT92^{~2aNW?^e?Qpgs<+`zjX!!?G
z`$o at JpIo>?kG(@E5{lO~wBnm|)1dl51v3+zTi>m_84~ILJGr|e$<1vSruRquQ`sr$
z&MT*r%K_1e3i|9a_}16cUBW at kzIkrqK?FUua*&#o>Sg2bU7$$>(iVXN+xuGhm28pr
z(q*W}#Nf}k^3plR`{lkME)+Ud=Cz(0cSBDBGNP<#)8B&B?m@}*=thSaL&TIE?;9y(
z`Gieow)tf>p!Dgm?&l9wM?FQP!3h29yNZ%kwmmyb%wVEj#C@`vEX%gdgI!&r8AJx3
z*IY+B)^$9c7+NF;(LdpgK_O~(?<_JdV$$6fw_S0&1WlgYR5XxYkH9v*Mg8ji1ul$i
zi2K3o6JVMX7Vn at 7P<aB*VDlZdG>*Qv3rD$IJQt#s5(azF_=~i)$9U4$(plHV!yEq8
z?c~^PyM50KOtTGtMy=+U&)br<b>QN)iQRqbL3Y9<x`~|4wlz#@G{@I?Z2yqG=4qs;
zDo<uz4BIAH)N3}vG^hkULp&%TaVWZdLfX$CJo&OG`6eCMggKcwheYA^1KM*y>k+Gc
z6voOH9u&q*T4&uzZJ2nO!<un^LpArelq;<XUAuN>*F{(kkk at WGp~23}9CM#8byxt3
zdBCx8`3_i6$8na_`0GnDKDy(h*U#7iWq`CrXtiHd%a5F>Agr#4eT31=r&TaV^-^9c
zxu+o7&1r{fXU?p*#0Z7yi20<~#|LxoJaV`SlU at X*ry3>YY#07+llZ#$q|}Jeun~Rg
zV?T8?@+Kv%@bW7oza7H|KpQl_WLo}<D9)NI2umt*Ugu?;%W_55))|*)uO~?1!<#=H
zIQ{Nt-e2=awPxhW at XIuDck1F64(|IyUg{;q2m1L{*dQ9n3neRKKs9##b>}~$t+x3!
zxzpxkS`M*;{8CJ989Cr5-Y-DnfiW>YvLD_{wsl$+eK~jeI<fXusxM at n^tYC|Maq;N
zBO)WsG6O4vi_qVKUd=l6`603I+$TSwsm5PR6*5#<PC!#Mr>L96ulj}v$<&prfA=hM
zX8?k32`e+=bo)kE)C(+QZ0%8=W`K7^u3`s->+AX1l#F}^S~Xk`9q~Vza+}Ky=$ZYv
zkhzL0pOfMpi)bRx#N{o+3!=ecowvhIdh#jF4a?+2)r1?ARP5Gp*d0X1^7|H*H6|YP
zx_k6F$2TLm2UpF(-GwqmlN(r1?hPVn at 6s|GZjQF&VdXz;=+=0KV^g(y5w)lk?8KP!
z`l6!D+qTu`yneOBNY=6H*N*!u*$NtUuXmzp48WGmy#wX!uQ25J3A663DVh7QX4g3Y
zsWkH|IksZS8gL~&0T0MCDsr at VKKsb}<&8D$^$QMSeVQ at BM0bW}O at 3<A)WiCjxi2+E
zRUI$C$UDl}jc9LaXzO6^s_jK$&;R1vTBfM)DpQgeY;2t-tca~l&dH>uLN)eqdtcPN
zj52)l%4r%Xqq##HUY}ZI)PGkso!`Nv85X(_eP_Okhf_{-bX?MyFktNi&44ZKp`=L3
z-g5gtt)-(~8^_4A$rxxz+GUYj!#T_B)g^TvYTQ?>HCf7!0?PhUTs&pII1Nn)O)M_m
zTWAkWY(TR3p;x_83DC}~IrM<uSx at OzSrvv#2byppc{Y#puORg^hZ6Ma_T)&i#_RMS
z*tqe!3AV!4jl|<TZCqGcjaph;IXbzIAkp^Ead2cR;gWUTZm at eis4E=xT&PZWIG;YF
zamS$~P3)?fZnyQ5`bS1ZYj&AcpNK|`xxX7EUh1vsk}Jqqm(h`44#TK0*puI5T3n0^
z1b-><<k#b7Ga2aj*-K$LRT=%>#s756f9gKtRN31r+m!kp;eUynnt`e9k8j)5#<gij
zih~)+EZHU0MY)FU0OgCY6#O_Zdi56jA$M3P?eAKmTCJJah+a<npw*J4>bAC;okNd@
zasMSns)d;-RdrkpssQyIOKGaK35gKMZ`F(TMdEKQ<S0aAL=4<4la at uX-QOf}pkbUx
zZF7U)KrZ+#|NE>=O%lg4xNbzDOX2I-b8PpaE>HeW*0-7utUPVT9jCQHKKt`enQx7y
zF^GGXUAOM7n4MpQk}@ow>XmZd_;Iw<o4`EH-IucRr5bvZ5x42|D4Ep}L#G|o0*Cs!
zK)e|weZoYHYOxucqDh~?s_igyK5EioRD3#O9<itP3<kab38*iz$bdGWD)}%)tcnD)
z>5BW2WH07yGI8n~1p5-YS2WrPEp*b0+#@7Z1c0YhL9Vh0(&gwV^<#`NWn(&~x at uy@
z<!op$O1w-M{PHh49!#MXsp)Hit<t#uFDU#gi!4D0p1Y5Y+ai|PORr>MoAQQ-dZ)-G
z3i3(J_qD*n1>?KMQ)L+HhJW80qJF`l6xxN>2YkE|SD1sEh-8x$$Vs#{TIjLoLtqfv
z=G($x|E)`)v=xE}cS~+R^7S;Vaep*AgKb=QDkV at iKym^fPjox_Fk?1h*@%I?KGnWx
z?BhoGHayn|s<CXf+um(ON(AA^gLX~%kCPwYd9-zF2VP;L7*tEW!=81n^lhZ+v5Gj5
zlAw@#*AQS}O;^<x14%pT>jHKW-{n{#nasS at 6>C?ZH*)`=i(zRzlwrR4vTKbosHJ+g
zsiFccwz=2X!**}hi(-%{KzsJvJg|d^;PChG`cer}=M^Ev>M%R2jk&|~ksj}}bG_!)
zMiSvSO;<w~_3?9(tbaADb0nyPaCw~s!5R71tb(y>Q!?+&sjyU=jysDxW^-|>$tzhw
znJ;3$@QiZ(P%b8|K_eZo=e?$&ekJ|hWt^o|Ax0_qbxGrT5qPssvxZ;W at -z41KgPy5
zyz2kBMa at n0eCD-3e5at`w*m=KE*Wpu0Gp at Ymi~|AcWfR6N7$C^z5-mrl@=MoUzH2E
z2&+#_F<GX~7f5o at 2%+ at XRsk+KE@;xtEumWp9l3RoSs6rm_iH~b_j}E^HS`kH{Y7s0
zXE5S at ba(a|45W=ND+vb}cyEQ(DWkzS>;~ulx(hjNtRej<<CNoNhq8ixfaY)XY4}+G
z3DM~8Xcb0B;QVgdpe?4yupXpxark5`dT8u*p&7p&ZVRlG)PO!>V|`E<1@;HVZd}Pb
zZ-_?&*mwT4)DSoeOD_>UGQFFRnlFU`n}?HxYA4LqjjMw~_<qhF`tCEeZf~h8p{BPh
zkA2qQ)%*Lu5NA_I&<_mgtDDykOFOuQ!*NE#%_nTH8U0XS4a4oZU^mxUjaeo9smTT!
zU+Gz5_F0R7AEb!*MeQ}a(#z;~(N^D^pPM@?JzI3qUT)?n(eEn6pbcMnqQDsRrnb{b
zI47po&gkb{^OXXC&p~_7coxq~f7YDLW9_CrIP0xi+wY(<`bkyVTV5jWLEnl&8>mCo
zraNPrPnc2*`|7SV(Z_-Hz>Hv<HB;|;`W^oGK5xt=^52FA30j~ck7USi`NAUdy!WdE
zKV+xAg_qw-ih7#FO#AFD4tSu8I1&^$x>az)8WLc<uy<6oaR)d2!jbm1{~-M8$mPqe
zkl+ooILq!&O)sq~w8x_gv)YLt$t0~&kF(jz7;)Sg-TL}?m~2Trpw!-Y6#G+n!P`Hr
zLoYy-bx}1^w!ih(u1d^mRv<orrrcfKO-Oi8NT!7T;dkN69LU-`;0xT0T?PbZDwBG<
zCEkD*a3~G2FGLeXNpfr1D||vo>$ig)i*Idg<i83rBiVF!tf-qc&0ab8ILQ)+&{#e}
z`|^K0*-{Rxv?x at nPv<7`|2>Yss3x4oV09ZL60M`1w$1{Ai9o{fZ+tQ->IFKdO16+m
zOk(F}=*ep>TNfKsm7cTb2M?@CJF0o<sh%woUOM8TJ>&{se|DJmijyFg31{hv_MkWP
zsVLpMw=PtDdyIVo$2e73ij5iYhsHpj+Q$$0*9gB?gJ(4%kB?m!Tu at 13*!vv}=({3U
zXIQgP3~9IDrJ2tq9v0)(t>%Uk5a31uIN#uwG#pwo>q?xRkpM0gJk19t%omNvtJ&u$
z4o79+%``yIbG)|qzH&5dMK&St8mcZPd0q)kzuPy?9}qd%9P=VP9HVNAuAaS!Mqh3w
z986UkwI__7Cm1ycTpvwPzmvyaI|&$ps|D}5PNRau=Cql19wXnIi at h9Y>sP*%)ka-M
zZnZ{NgMhD!p<T)4>N*SH(xPJ2G+udvDD_qP5N{;+7G;0B_tsoT{;%fml$uIxV~Qxt
z4)&byvl&AU#mv=@A>7X+zEl<DW~uHtJ)RqTD;k at V7r-~y=&nAg!e($4 at KwQ<9Fvnm
z3%_ifJ#p3~`|61OmhUuyNx_$U$Lna+h*6yuu7HVKuRjtR3>sPxJ-L}RYfGsp6yjLf
zD+IJ82|JFsf?wt2zssUIoX{l$AvTgBPnLa4^P%^0zPrD0K>Omna@#FOm{W63bOM^d
zA#3V8$y4RlRwi%Cj=gA-HW=+n2Voi*AA9%yL7_{w!>1MA4!#o$PJv474`M5viY+gc
z5OvXW>;iJO1O^$QHI039Y9^FZL_5PfWJ at GC?0YGBX;eB5yi$sYq=+;k$;x$%!5_ at S
z7t+Vo{f at WllsYMFWSr3N)umxZR!mm^g5JgZnHkYq!ORgccd4USa^s8Q$x>2Z%JPKY
z6yTi*+Zanz5C5La3o~#T#uOW8VWc7e+L>n)sPa_%oo`<JxQ)FS4EE5Bo3YczD`^5=
z5~f)xuSW8Vsp~do=Od$o2C|w%5vgyEan2~NhWofb$Kd<Jmnfp0S}2Cu2jzvunA+8h
z&H%DHkA0(3qA(7lc7`M+p{pS662dUMxz?VZtpfCH13DS=9xz7Ykm^1FjQ3^qy>2ti
zG{+DyG!IwiOr|fL>b<5!FG4#Y56L7kQ+h|`vls#}<Gwa#soEP+!BxghRED_uuf(o*
z<u-^X^15K9<Lm`v5pNnm=*L}hoRA*RI3{cA0Q~LUfOPg(aVwU!>74fhn-wqK(zh(+
zj$v-57mVHvDTvVwn7rq%t4zSv_m&5hN?^fe1UtRuTyP7xqG>y|Wc-1iZA|5u&V%ne
zzLNu~X6}}06KUn^ydi7;-{1n at CS3=~6ns~;Z-+0EG5EckQ~;r8_WVM<k-Iy-*Lzb6
zkydSBMC3o%EZl->_9ED8IJ$WS5p1zDinjy#EhN8S21z0hX at LiT+?|niMxC%=m)*fJ
z^1JLrAJH-_j?<QJYXew_ybWMc{nMbAfOQt!N&Sl^gPVkQ)2YjC8&8T-NuK*9`W=9$
zzthf?kbbkDLHK8F!!}0^gprp^-A66G(!xi~pqwF3qYuF+Rj-{IVi=lT at fLggy8Rfl
zK9ovguuF{Uuid+rg4ZmL7snF(U<neWG%<6RyB>eBb-!=?>DoGa^p))*ATP5j-a|z~
z7!MoL<b~sPcRrCEXz}XM!EFJobgu6gDbcJ1@;T8S$vMH2ii>qOI(zbM8ncdZ-1CFZ
z!1lz42QkN&q`5w+hXD+%IGLo=cxr&Vrn3aqeTP)1&se?Yd<pdS19wOwAl#02PMgD)
z6}E4+2eiH#c;&tvSG2V>s|uwt8skXoel-4LgFZFRW)9_V^m>%%rMMVu+hvwVIt=n*
zIf23Nh31}L^8>$qrGSJc4~pv{EC&aCp9pZ!9j5EmWT1Pqu6-MI&ys=B_MCyW4D)`U
z`l}qBvrRrtcadUbq|qJCokkeIZK?`x*lt(a7y?CALnB0H&-f(K_Z{m|3nr5#T`>$x
zeLPJq=7(j|%H$wFb+C_$-!(h>{F7YtEi~iRdD`;xZb!6T17r2kl%3<eBj$8&u?sU-
zrVssm!R_aFpm|A*BhAFbWE+lke<xB18l6L~_)J=j#5H6P at qHAR{#EFhAx8DqyV?Cj
z^3rouxf1AX(kgA??2LM3gK}h}5`9!BZF8V$U^%u0d~A(W4bb9MLUOO4D_Kz%okK<j
zJwYb2AP)i)aGMSqV|s at +uLkTYybpSu25P-Z>1fuc8$y?7c at C5q_YaW{!1Q#5x5>>N
zg)-6&$2gHI&9_VC9M*F7F0+V-JI at Y`z+uo6%%a*#PkkC}uBC8RYF-VUwok(7bUx6^
zsfb$C_Iv?uK(BHUm-M6`9GE>Iby&0jE?kvtp>$8`ip!7!dvS$fK7!{8YmO2dvj#m|
zdr9_=6f+1|s9ns at zE-NvM=q{yMRx%n5}lxrVPRo+O+e3|m<@ag<GyKlgfvSA{c$n?
za$PvSXNNZ_gQWg>fgf<|XJ<9UAfDzcmaE-8zworH<GiyC6=+Z)&k7RD=cExw{GDJ3
zvfQ7HXDP4w0?cr^Ik#ltmDZ9oRC>7974vAnIR&~qhelx{0aGOf^g5=SVT#f43hN3=
z6LNdU_t-j;q2a;)+OL7P=F_d-rGUj&f}s}$=D6q4`lUGZK0FN}A?}Ap`Gl8|o$bzD
z5>~fETQI)ogFxDiX!Z>wojC{XBgzLbt9b at KbeGJ2htMj(*~jSelKw$YV0rPW3N#q7
zCd)g#Wbk#Z(KxE`)QlMhILF?9Sc9w=ptDLt;MpUgzK|0f>81nz*)vp3Z+<DVeakcd
z at TwZK$+Obkit-fSSh8T8KZZ)7D!!efmRZ}7O_x!%Cs&1zgkcHLNQ{?{I6RdJ)PUA{
zLz9Cf!|X3LC)puh0ghaGM$04ipS^J!PTyKwF48&y<8-fI^wSd#vbk=ByOOELM+AO8
zM~Jhd-ny$p0u0_~)0g{!h_hLvCc)}r?b5lQ2|&qUY^mkX_g4=5^JYI{suT4bn2Uj6
zx3Grq15=+;C$|9bu>!TqKx7 at Z(u{e7Bx6<9x#YjoGcYXmd}gMbtq*O_S~?Wy7)2~D
z-0w(>v8d6$x?Be<goYmGw^g`lBN7Pwyr{KF*Z at nxNb?IIw-Il-M2*zC-$ouj5flFj
zc<${RCu!u;N+r$I??qrj90>y$d=AMlTTqF%g+^~tF~9c at UaX$-Ic^=+X^oX$IMz31
zvYLXP%gM<_ at q)5beyqyLQ4s*!?uQb{6Lku?&Xa+WOQK?8>=-m)E>|l>wa3#0JNFT?
z)@x9i0p?xlaH|IyjIq^spn(752<$YiWt!%YX*H!UoYFUdO`I-PA~xM)qNBBxi;H0^
zz_gey%u(~=Lq=nat)PcW6M&@SPuSwwW=mlf$#7HOWV%vdev$y_0TWZEJT>U|uQx7C
znGu0-^riJJP>Ht^%jd)9Lc_5^`y*Zbxq_9#fbrbHy$ipQ(-H(GD~nl?RO)A8Lg}JZ
z*AbS@$fe`qIm_N(7t8%`7n@)Kp_f0aTqpcRBsJm4CcxORR;m<*E-6()AgUyY)TI>v
ztp!j at 04`%{J_p?Fx&AH&a209$uh+Exxlmds<Aq72{R}}lTiX?A>39RioZPvNlvRWa
zo99(A-$a2GderqiDl?=%^ZGB5u44FTnD0hg?5H2>)21wpSevPr8y>h`KFa00xC9T%
z+NFtXh{`}!U6duBsUXGQ`Rz<G at cb6Sc>R6=^3f`7Z*M<r9+Q&l6BaMlCdZZpoa}0+
zq4 at s56C9<)k)E0)GB~owRTv?&r+E-ug3U-*6!q>C7A506 at p$Odyx2~9>+lcHg#~UH
zfEnjQ@({lkFIFD{C2lAD!rAHJJ6p=3K&4{1<g}0yBHKSEdD9haVs=QWJK4YL`%;EL
z225<2j$76g^DQN6ZB$2Bbk0K}#!#dFw2SH at 34@IQR&~J9FYv%qAOE$IQ3TewX^Y#e
z5l`<`OqUsYRiqg>-2VNhH4X_4GJTh6iGtCVQ+crmEt>4)jgU>LgDJ~12pBbj-e$kP
z<prqf5#=+<<03o(d4%5$T{llls=a1pjRMJ7<U!@mVJ$8uw%6`l1Ibaky{6PME!&Z)
zGEb5}qLxGKq}0Yyc!Z!WRQKehr*cXTFyS74wEnEh4(gLpdd^b at Y|HC#FDfd^8kh;>
z at Cg`+fx^0I%`L>S-^hu?)?o8 at 6x7Md|N5VZK_9}xzLVqoS5_3;r4lcEeRppej2AM}
zqi|`?ELul6aNMURy-|i^pk`bZdeXP*n7O8-`bGS~YayH+CnoqvNN#`3{wsy^?p(}O
zvaldy;KOGDmiW&>ikZU1N?g at BG&h-Qe{_%Br=)1IdK%kj8xrWmr2a{;A18zfRAlFI
zx4qi6_8wk=Lxz;@O{T?Y1BX{?g1Bn0 at u})|T1Mm05 at T{A+@}H^E!7!p;nPyLbKweg
zmcB#;gsJTJU1_89dtimUGY%HL^A{&LEv^&6I-{y;CKHh5ho82D>1yJ&njEVw?z75D
z3?x9)h>bVI6#L$n5Q4{&lVQ|#n at PiFY;`dFfz3Eb_!D8uG3jP;E!j5(*!7>0b1&XJ
z-VG=0+xmjIi=_K5uR7 at -(p1<^%v3}OQjlP%V~>fjY;_?4XB3m at vzX9^=#IV)g-2LW
zAciP!yF1?lfqjX>GqVI<Vr8$RPK)-ogz=YjOcRu3L_ at SrrDl#*zY)5jDobLD?AExe
z1_#-Q0;CYRmgk8(ofp1}p%CkWV8dpdM(e$4FIAf{r*og?<^%Dz5IYsk_pqGSvKjSM
z5t_D^fLuycM(fU<uEyQQ0f_w+g9xB(@v|ocHD6uW0WpkvuL;H7#{1J+unnj@^WBT-
zlg>Xo@)S=+9n~R48dFa%L?Dg_W3DKksVmGCvRQ#T#1lE=ad373fXoy4pEtwWju>QP
zg&6a})w>d{l4vG|Qr3qOx0FF-z*x*-SdqpzuoyXiPOe&@-0w|&&y7$<gfc=Oc*yI}
z#AzxlKa3?})Ie7czANh&_g8nLaCjmoydirVTSjQU8nI8$Y*bC`!Blz{%Vq3^g+2HQ
zngB^50&PvDFbzc at v2hK_{U)e+#;dnlhb+?5b=Es=YK^=+7qaL@%V)f#g+HB)DpKtz
zgY>k`=|6qhN=|6uk)LMsqSsd+pV(MasIa_zo+WOrrc`U+RO~ZqWHD0^oKDg53Az_4
zklijF-L0$464Hd9(NExSv-}i{*LeHLpCFo$(RDenKAi0*ww6e#)2&q@`xyQQu{>M(
zttU95A;hnWxcR%&)tosH%JXd4;k2fFpl>(zYoV+9JL7oV9g;+2L2KT;nra&r6rQ at X
zDs>e1X;*hNcF>~4`bzkg+~{&r8tPn7Ikn{^X3Cn%SJRDevP`A$;<@h=6(iK-<D8Zo
zQ~NvUy*jDsnwaEYfwf{W at q@^X&XuiFiKAOyMamwtk>2iJ^mf(0)a6aByv4qb>a at wH
zU66fmcPZhq%NQt{xty~d$f*vl#{~YF8U5?Y-o9J3;h&$c{|F>na`6^tOAMGA^)yBx
z7DWUDG2K2nDMsv^bk1EIH7R~f(x01=115g_@<sGdn?B<L_ep~DIK7U|Ux3{C=@*ms
zO;DNGB?PS0p9@;uvsq7IP?=}%!%81Xd#L=miMc&$SReGJd2qz%!MDxy#1=97vmp}F
ztlR3`M{M4AGlSV$>O^SW;^!!MNDY{bLWj_kmA%=dIj=)IP6jw+#BeIU#?nmXPB>h?
z at KYp)j>AeI-D>vy57bh0h8}Nx>ATZqIo8+{o}W2ZU9M&Y0e|T&<CKCuqh?8eBLV7I
ze at eT=A34Sm at H`~7IDTRA5LTFBbTZgcw`vEkiW3TW6%OORA7{J&B%qKG%+<a1guYu^
za}ZP5J=L?Zs+&V9J>I?@-FvmBwX5(Iqc<CU;j6pNtXFxYQI(dW?v?lup%zp~d+I#m
zRc1eS-sE>a052|>`IW4SpJH*ALSnLoUzb&R+IRshR1D(Jb}T?$r?C9E=*_}X!2R<*
zVBMK*(+hv>dAsWfm_y0l-dr~fMI6%rxS{UNbtH%7d#(4Vu>m#Pk at SsslD~8B&StAU
zj#42F(c{{hKJ%!Ewc-Fyp%Gh9ji?2cbbRE{9&Q;|)^xNMzW at 2<#-gng&|u!%lKEyX
z*Oyyf_{L+V9y=tTj!SdZ`B3 at 0z4G4Ww%~pHTcOq{ZbdU#im4P8yt+)tv%tT6Up2z~
zBSA{jH`zM(OC3%Hr{0aQ_`qFb!D@%G;%S_+w{t(8;kvYnz^6wHhZOGBioR#V6?6nE
zijm0#?j?6K(7g^)!~xwv-$v;Lz1cOMx)0J<udh0Z5BQ!b0~fMR!Z%1 at UZl+PY3a#!
z%u0OCPB8q%SDNc0Ava;6c9Yl~BfzUak|&Jke*~E=Ng1#+`ldeS)<5;bhN1c~=_=_a
z`n<{JytqV<Xh(9#>vQMM;hxNxN&VCF%I!MjCc?AS1Uh}Q*$RLbbySS=a3g3GXWyAv
zXlZHl)w{xdM}(v-5TU6Et}_W?p+V?!Auoj1{ot*BO?054b93>F(guYD(_gy`TGiY2
zn2o95q at JMe-;_3W?+Ev^tp;UsbENOHLak}z1Kl6_vlK9cggBK(210nXaQzY6M}qfS
zJa!Ie4P~q=P}!PAL?C#SJ#mE1m++g2li`hisU6p3kkdiNov}x`4!TkwnKr8y-pG3y
ziI`Nz7U_EASb7ar)fo)nNT)k;kR`>GnLTBdWchqANOdUcuqi&2pBB5t$qlp)$MYwu
zdL at GApTxJt3?u1sTM(5DpPc;hO^iLre<V3go`VucxwZ%g?lzB<FGR8PXWP6N)T0Mo
zBxARb?ARNkF7Ce_k#xAXP;aaRs&TkpOpYlDWU11xWb+`y`PR{~Lr=tv+K%@Lq+za1
z$^lSdqK30~p%)`*XJTEYdBau!kXuKa0Z0y!yXtH#4V;^{$^yHs{1I%WZ^bfrmq|A9
zIL}?-Qx*yatTNKbLgrq4)nNZs(%4R~^ffK)Hbb|IWMbTKwt!eVA)#dMM|q&Wyz%&v
z+Z?hWfm)IohF^HZRXfTdPOdmlg%Y>dO#B7j+^h&!HFYN3-<+3`v~J%W(Bl0vVsAlz
z2Y79(eAu)28SVx1TT|P=f!_5nrdGCyGv`Zjhi%t^%4(#R!fzF&VvFyV&_q2%%7yT}
zq*;tU8vao5J#v}z6#f-4XYvu*?*1)aUCSzK^w6fb5WB_a?z+s5K4hR<{@hC<u|7|K
z+SwR|V-DnGj~ts<T8EF+{4d%3AMCAJ=GEn}VfV>ANs9Na5)*P|+ItA6x1v3@`4MC9
zu(n~_Z1P|+#8(^wY*ReXnZx8#Js0nW5ibf4I%?&WMsx5h at b}&HtH!DS92I4|qm(FO
za&mG_J^-&kG>_zFyA=6`NJ7KfxfLHmJv+gNvu`qMjC7m at d~Y{8!%QY^yq0|P1X@^c
zF7(oFd35PKZq!)kZWEOs<dJ`Eb58k`hSwSvV+ak4S+3O26Og70-B&!XR37MHEtbUn
zDQ#84#UGa+%{w*ZpxuKYKbHCF90Y50N-MQJH%~MrFd%-U^O)aO(@71VB>aORrI~1=
z1mhU7j5)_Ru<(aZ>BBdeBh84#&IRQ&2v%5|+_rdRv@`0d<z$K5xjAVrBFis8WESbw
z`hnuCZ`V>Cba6#f4wAe|Y$U}hbPL5nzZgELcIVwAVy%ntqs&<ABe1mgyHdUFl_tco
z-Y2P*a#ylh1(?z_qCnY2UAa>}SWKwjDRJ)g%Fl3Ij3HJuB&$2r&>Y0#HP0nTI&$b2
zh^_4HKg=p~p8>Q0{5~6Au|(N at l?X5MON&SS6<{y&yH8MWp!bTbN7~LMXDZPlTjOoL
z9%7D?vFct*r4c4{W<$<>`+@~t|GTjI#=|z;Hw1X?3;rC=#pi;y3F<x(Hoh~WPleg#
zMcu5JKXlHZCAHpN`3Jc5_1<oeN8)kpK3Q{*@CI9geX|Zz2@&HQS?FAFc%Es2<R=?e
zsCZw3WozsnA~2usc5XYYvR6z9H-k<=vo_6OMiNK*7P9wI{vDo?Jst^FED-NTf{KVc
zeg!I+i-7999lz7pQTRj)ydM7$k&&LpS?ZWd%rBVbGi7}*`tipKVUZH4O;MLUqGt+E
zJ}vCN22uAA2s{9>I0gCZ`mP63dfg4W(;o%W_fqM6TtRS;GC=h}PSeAoSs*At$b*w|
zh6_nG2`<r^WS9xDV|U5AvP8w1%qP2S{jRJF<>rJM3i(F<HpNZyf07tALW_THHSi1k
z+^i-<th#9CX5W!D|9&5;b;WmD#%T5lpw}wPj45&iQrsAE$U=T2k#DvogGdTN-|8Te
zK#$YNd*^G#l9vE|!h)rak?d(}(Q0GVpFDO6$YcNeZV)Q;0>*xRe2{m(qSI`j^dM0=
z at 42?bvue*zvs3BT3r9L3f^4^fh<gNel2#LQZsc-YH9FUipc}c8VU3)hRY>FPe%(_1
zTxBz$Ym>yJQ#IXrLWP>KPtJm2G4|hPE{d1 at DrMcq;DBBpFQ at Er4L4U(c=4Gn7jZhn
zX at FpW`%0F&9i at ImcDNyWKPtkj>xU(GCVm-=?k%a$UEG0l(dhRg at V;F%^t^uXg5MkJ
zFqwoDuKHmEEo$AHyfmK4XFI(P?*#xG0T5stiWYptjK(LORSbQ3*|y+ht0Xy<rw6V}
zE5n6rBmhCtTBokQEdazSjSkR9_s*mdo#bPKb@%F33O2F$n|ak<-|i1r#HO2VlucQQ
zGMzl`u)F%(YW;`n`1_?O$PMTkR`&?Dl$CxAl97|E-3Fo|jh(WbtMh(RGegl6p^iUM
zQu8|NFM3Qq+|l}f{o;B(xnLAd<VY2RG~G=yl?tJ~6Y^rCv&nAY&zC}w?00TmNF96B
z<Z+rSU4~Scb3tQKDl_e1!sUVxRO-KPzc(&ZFZunMaKE*>&JfHKVl4y-?UAHf5{V#c
zNP$@zyVB~4ay=DOrZWc;C`gskZA)JLiPMoisf<Fvk0x)EaqQ}Z4k-lCkAZG^xf9pH
z?E7C_ZC-IUqaZ*VY+*-HHnFGI72-&%+*WN|w}ClT2nMm^HmpCUiyu=JKE59mzW<e^
zyYNYqij`it-f at Bz9Ll5;tSbJkAXH;8HfpW!>VK}J-k3Oj+iwkO7>TSVpy|xq+($8=
z2jB)|FoQ$aMa6=K$XP(SvVa%%Gr+bho#tj+59g0=7DhT*px7*9?Gy-#&t;@$>FzXG
zPl{?S1Drd^l0tFW at S8}KdJy+1uR$^4eR^0%{++r at Vb@xTF(>j)Mty?;M3J>qeIc^?
zO%r at Cu8*VOgM&Wt58dV+pP!#@K3Q)Oh=6Q>@nw(2)%^?u96T(UBR(|<pEq&ve(UwN
zA)aI3%#|MFI#%Fd`taa=PJt8Z^Py-Z7fAt4y7h_RaYj6I$E{;u+5#q|iU3($7w<Fp
zID1yfva_}ZZhJQIV7N3hEva!rmvZpPZp$PYh_F4t&c@<$`;>F&s~m(nNq1aUfKE;w
zG=io0ELbG5Un`-*NifHL>w$g3<!e^4hS?-ZE?JtfN)zkC3unVn+bE5hPGj+{immD|
zNUXdWE>z2+BzJ;^FGJW9VZjkukuocxA3l*4=*GowuPI3a=<wgbVVY}J1~W<Yb3U|N
zD6PP$Y;sPe0i=prMgdEvxeI2}b$Ye>#}ztUoJ8ga*;&P1Dz~|sl+DNGPEF!KBSHP&
zb^`*>-^+<9$ltckx>|zzkf4m=AuCSmqCj1s$*uNJP!T%PCXPT}6XQhe?hxJ;QYVCC
zyGP_(FOhFdHyRK3yhML@>`k4E364Cgr)U|!eSVJnLJ-xkaOSc_krb7_^HlpVoll<+
zQeM~KfU+jIslj+(gY<^K+5jv7w at GVKYd-#@H*i3hj+s=lXqLJK?EYgf)hOg{_>61_
zWq at G=)&2eO`)!?``D0lPot7faRyzD25o5d`Q4<yaTX)|X7R9!-+XF~Yq98fT7L<(S
zFk~<hl$^ts3`0(m28j|?BnXmJK*>30HbF8XAPgCX%#gznZv*?B?|R(#$M@?z&+Q*P
zJ<W8lnqIYPt+(o}TCq-}AS8P@@sh#Atbds>6V0oR_0GDngsUHv^IkjGW^S?DSRzoE
z8*R<BgjF~{B{qkjuxpk_aJa5x)X{RMD*8nYZL9_ at yX2$SgqT%^q$wLs>J~nh8j at Ts
zGqI<Xl$DA2KKh4d>pM`rhCFKq?V at P*sEH#eV*nevp0soZ;i>xNSoSXiqTu{k#7f(8
zTRCS+Y6DuSXOV_ss>jD>b?h^*cvtsvK)<mFq-`|#tYoH=(>84%>=z%q2_aYrgmLIs
z6KZo4xTop9Z~qGaTBP9jZJhexloM&_%Dn&k!K7BrL23GN$|mAD82vquScZ=DldbjO
zK^?}dW41P5`Fg^1bjh;kLx#@g#Ykh{u{6~WPG}Yvra)a9U}chHIyAt$RQ=tsJ<Wq@
zD-0RuF1uEL2osr$0^f88^OB5|D~_4n*cQhL<x#LLg5SPkC5=*2;BRy*^1bmXQ{XES
zc<D{kg{FB*H<Hia<}wnJN1>nj0*AamxAJ#!Vl-+8r^AqE<}vkZG{6hpdKEMKgkAEe
z<lr+~4;Fp1;W%;pq-zyuD1!2~ydDMdBLUjvMvZHM<Qyt<<3FO2#~?s8{^3uIVSeCF
zQ?Ahv9lmnh$Ps$I6Uzpg){_O;gz^D2tA!rE!+vLe{1Wwu-8}3vNU?Wyk(NmOYFvQ?
z>{F2INUBkp>r^QnHeCHzE13HbSmI)_0F#we^`Dq|eEwOIw5wQ;&BW1tenQ{!)?a;T
zp-JP9b1CwQc#OtYJLOqoyQv@@Wt9)-wOY_y(%5jf27STvCqBTEMoRYU&OVAy%fohF
zLlT`~W-U6V+Ss<~v=bSYqAp4SnX68Jsnyq;zIzJQ?Ft-0{aFkX{Bu73cDkui0FSsw
zaIN21sa7ym>lr8X9V5}mlfOpyA;y!wm at U>x#p(FMHYmuFW~MFI_-)R|3QO)7KjWSb
zf5c5HcBC)<S%=pNoeyFQV3H5Yx9R66sOD01(0Dn8w97}eA3TrzF<S{rAfln|3jJA_
z*K at 30_LXS9J)@dvr`@8S+djKx7OiuRKL5UX2%D-X&*_=1hpk9HTzAy-b$Bp=*3deL
zM1Y=NfnR5(asohuX_`yiskG9>x7c*|XTQ-269JiI<}IOjlBJ87&HRMq7!tRJo}^PU
zv60c0uYMYI)WQlLtg_QUlqvz*r%i^Z-V@~&h~c&S==%Q)mZsD$PG0~^JIhYndyak@
z*ArTK0^y_djQ!Vkl_Q?EgDKI02065J+H0v3Mz~hqN>NVww*UoaA_3LK=C45xLg6Mb
zd_XHC{2|#p{|FNiOZS&2hCawe<QLA8 at aOMB{z7+jn$BnN=6teiaWoK)iuQ2CoeuW(
zZb)#;r*!Dt6LB!W@!cpPK#UQmasB*(W4<`NLY<EfRKWC37pIO*O6I((>oq7|=Yeo{
zH+5{TTo{9=0(Fv|bKJHL#$2d>T~8<}0KG~+F at ukHLYzSt0#d!&`ucs86bVKmMV_~$
zZX!l4Z5m#UklvKKGG at fvELvdLzQzjBenN!ODDihBid!~$hd;A~{qm969UpfjZjMaf
zGsZyXRXi!|uVKWhVI;4eIzL0*@w3pSDz0w$v7Kx=%$wTy{K5W3JW4k^<^@NTA^CU?
z%p$WK*%5Irv1pQ5^gA7b@~@pwv(Ss)N>WRZ>;cP5w8zn!k#yw92fv5at-J>dSHp at 6
za&xh7DNhX2FY{q+8HN}`uX(7^#bK6J_xX+O9>PW|sBz$v&1&!wP9v{z^5N9s|JNY1
zMS!^UYr_QUHoZLVyzGtcUfiKKJ{g^ucV8NY7J7>ogiT^Kx-e#mQ(GR$?sjG+!*GFH
zq;+g<4m at 7E1yq3v!D86($6b9;$p<SHb at xsll4lb24So3%X_`huND^X at 5cc|0ex^gL
z&cv*+3}QGglT}LzCqFm&L%9z0FX={h_i~RzfB3R1i9Du<0zEbLI%NrtfTbl-FeTy3
zZRtCY{S}ZuU7ML^3)Ns7{19WdtmmT1kXhkCi%!--Yp%`^1{EALukQWaz9=tr9g9ZS
z1v+!t_8Pj&p6LriwU<zftV0xH4^B<0P4oz4^T(it@&M&R`#51WrE+oJn5KlJjpWqf
zAq=ILg$D##f1IE*F1C7c6g($baCVYia2)&(iW8ZFk-M_}HQuQ at b0l8qw9k)awaEci
z^!(==l}S!R(Xj#BXAXiZu__F=Wc-oZHz3m|q+s=Md)RTc**Db(O$D$%6hr8vq&V5C
zAr*-7Tq`oXZ;=S{72zhSQ^Dy2Q`aj~82n=3`K%EC<^1jxOa8DtHoLDMI-T5X?vr>L
zZx|~w(-Pb&C1K~l at v-9O{9ve7o)A at e*Kt1{Q(96RhlhTp1;X at Lqvd5jKOV5N+-mp^
z7*q{5+Ro5%=&nt66ItPvZ&&9zFC+#!cs6^ge4Z)!k<<1L-6aAvTC at kFA)k52gQ!Q>
zRiobJAcli|^waZ+<We-D{x8f3SWma{+Rz>SJ$4}TXLWUW?a)+q%Gxlga<yZx8{=>c
zX%mg8t=_Tub7HkzO+wLn!?DunBxQnVI62Yu(z|=_BC>Pm0N4$_3&#hMjZ2U0T}`eO
zmIrUKc68Jk@@W|JvAqp$$grVtn_P?WL3G4P{rZoDJ2sz+N?aEZy{|jQa^Gflxr*J;
zNd%d%l$j4Q)mZfCrfa!bEY#1zT&uWM5E9X>dBrg+sj+;Ed;HwWPBK65>7d<^(C2a@
zej|e&(cE+IojJX!ij?|0h$-aB*nuzVCFofC6`Yi7^u&k*`tC&4gKQ~l_sB4%D?*~|
zzYQ4Cr!??_XlM}=bnX2*VcFJ at z-50{R~_9g6-ywjDI`!*ZdW%Jwu?v|FouGT?a<#E
zX-oXCAfSJQR}@tXgTiu>5pUK#>1w)&Lww}sTzU{{fv3bVnUUQfHuCvv at Dw%i72#JM
zIW+QipEZejjcD at +p^}}XnB?g!v(e7Mt6xye+Q|=bX at t57c1vD7uE8}K;e-??G}2X^
zJ={*|0xRJUdwT;+SZmTPns+eSWE!oi$92T)jw|#$OLXfQzgJ=^@sj*;4Esj)V(ip0
zKQ+0}7xE#?<}5tuw^o7*uCu{P_inz)l3}BNtHwnH$g1Sz&gtmb+F)G3CIP$n+ga4n
z^N(f0FlhL`_{wtW`qZNqu$8L_s26>$XXba}L}G`QEHa>XuViPG8@}Vx<5%=6>IZ#b
zAZJg_<fkCM2Ds`8%Wm0-p2xX~6&%G#`*CgwETNnLmN=hzFG>a`e#6a$agit0E<b}a
zb(i)L{mA3&8RiJt%IZXW*@0=doqYlXIe&}vv`*LR<J;PaiRU#RWi%>i(CXN5J#I<)
zc7d+-)pDY#XN*5|0AV}?PigI`%u^H3x+({Uo8?{9*X2V-*jG}Sz- at -YUhfS}yJ<xz
z=#LJIe;^LV9Qod9hgkn2?pto2Ce|5HyIgpq<hw!(tRQ8d4U^&m#B{Ywpnj^V)3iK-
zCPa&?k>FF at Ncd=DvvZqckSTY&MBrF*<P6JBEo2bYe18b(bM5s-s4zF6e;OOYp`-^J
zw6ewn9!?hQ?1AV^c^$XkwcUG~N>v at Ru86}|@MTVpYLDBb#ar}_;!{_wna}zg9>m?f
zit+)-gE!>u8QKa1#JMZo7np81?-J9s`aj{_w6kQ&nPLV2>WPPP(&}N)Pz}q-RoIJ3
z!Ge(^I|_f0O9&J16&Oj49m&NhPCZ362%#vlvb#(rU)>uaOqT-T+n}jdxwyqe!Ses`
zav->X?f^z6EOij>tT(-ujs(GyLVM^hXvwDYfB;{O at m1~iPVgLvl|XNP2}!BM(xbB$
z=o5IyVCMlRx74)G_6GSZOR&XzRWsrXfS`9GoN^70;7CokL8b?qBL(_nKh}8y336u~
z5t|nwItwsF2Q2e+Olc{3)Z?fPcN1h$9;`j`@uA$VGp^)0f|==&9wyp`{~PV(;wyh}
zxc>R6FNX%HZw<jn_iDA%b2aMT=7?MEKGfA<pq{E*=4-zOnE2Rgj)^BO4_5Q4+RH(#
z`IVi1S<5LmH7a3xLY4N@*DK$MGm=(JiIexGLGIK}7teztFZK;g9rx}MM<Js3>J)fz
z|4*G`%8<{Nt7tb4At^Bjq=+SR at 4dxn(~h|W?i`%IVUoZ~TR6^b`80}SVi4Cg_P0?s
zegX5b5|=+t;2E!m**bqethLiEsJ83722YA|*7Q5o@$5<L^xa>Lra1^-aMj^iUPP$v
z%;|6xRGXAIyWRMQ83B at J>S}Qw*P+^Pc^d at Ud9*$JEAx_-$&;1(&qX`@SZJCGPnvA8
zcEBoMv&PS0%|XQ3_`nW{oU$Lepwf{tJ+7M~z;{THwbY{mnJo0?)7HT>z!kwL#MRjC
zBs#&D&<i5I4(^4x#OB$-d;sL%V=M(4+;$lD40(0gX_|*EKJ71XmJ9f2;o%Ow&-3~o
z at GOvNXj+b5s3rB9qX7awVJI->FzCpzI1 at Gc#zgtdy%kk(&lnoyqy$h7ub+>16dd``
zx$hYN%n9^KUlYs8iW1B*8z?|*anw^EDU7O6T-WyMRs-hp at u6nMSzg6ZD=b;ug!QLY
z&(~~-Wm*~UHcMlcjE-*8{=j5m%LIXwCicwWiM|>gnN2F8_fl}kQ*5~lu$YinZG`e0
z+$q<oTd9zsptKk6P0E+lcI-*qu;@9GAFSr+j34Rec4zg^>DbBmCQ at _Fw-5EJdrc<>
z=r=e-j=7WJwzjID{nS_+CD^_V5<SQjoF7M+e0$2-O0>YYdDoXmtNGK(eQPr;W9X69
za6aw}-bdydjipWAU at +DD=EAxw1-%rH16frROM}JFW?78y>D=)(@i at 3)*9}I}tf*ZK
zl*83&PoS_q1^lm~wnAS#XO~R%!W*=jyH-xWFDNMYC at A2iHx|;m;CzbJ8}%OdPcK;f
zl=uvAgpP4)Q#+Pt*2lVKxE?o90>f)IPz=ZV)aOnUIhc*+W%$Sk>hgo>Hq`uJ0IyXu
zPx7n8f+x?rbemg)Pzr`SF~-76&CVQ4PS at R_FQ25?3lM$&k|LIaKRz0&t06Q~cI>S7
zh}AK)e50A)JT(W~0FhGBv!c<kj&7_x6Sl8DGj0{Iag{{m8}a9L-P7Td0ryHNk0 at 41
zq!ASRN8=(0s0YDo9Jq^g;N`R^d>;atZiR;V`DoN5K==kEZls77&{TW|0sR{(u0SQR
zuDXpX4G_!+{J{TNZctA<5;S)hss?<+t!oVUnq#(U;;wbtZ$zP-OE^Nlk&OL0^o5;p
z+|x-0CCYUq&U;&N6q};-Xu!9`KkM^**s=uU)^#h+%bL1R>K9I*Lk}OC at r-f+xq1!P
zOPuiS+Jjbwms-PbJrQJZX2FeM9{(CePuKD^-0Pc;!zrO?y$A)69Zr<{?b&Cmlu*0t
zNq{jm(R7WQ=af9SQ4bhzd8^DOYCEEsHOF-g-qVY)TMZhs6B4=5Ihwxr!KWXs49Nd@
z%9A8xdx_=Fl91baDJ6Pf$&ml>01Hq-zIYBfJW)RXF?<bvv~5}Fh!aNKU%NymEmKrK
z`a1Q=+4RWij4fL2V)&l$Hz>w0<bUzMhbhI$FseatH^iSQOA5-CWvPk7+eU{|F4<@=
zMu?v!<aL{>bKp^qf+uIW>oLF+DaM1J#pjfrkeO>*xH}%D)K15iRb`Fs@@6UkR>ti8
zeyD;vyUq1 at 3XB8~ZG0TN+t_1Gg`)t?sHx5d5#4*0R0DnY3En=QRfclzjV;!!P4Y5F
zb7vV6oL0*&<Z^~oa5)nrnbu at 9pQO8{GDJD#A}*LgALHvN+3w{uuZz at vf>a-2v+|x4
z%+s1EPoiB^8cEH=Y~(y{&4(D%TlT6fyTy7RNA`|#UQi@{gYDrV(m&Usvrhx1CcCHB
zB6uW=72Y0nlgh~U-yn%oX;&Xe%B6l<VE`8X@>dp?qjfX6hd$blkPF7ie&yy4e~6UE
zYfDtM)&R5(eA98a>HWYYJ4IT>&G4*#Yx+znPa{5g_kn2UU2k;S%^pPz<MFQZd|l{A
z;kLAxsTNg7Y^1F6lfT1G>9|Gaa<is-6+}RIKN!Ws9w2Thyz#h)fvbqD1JuE)<;K`{
zg}m_=+p3;ciIK4Yrr>}y at 4{|dxsk+Edt$&;^z|SsLFqBm3x5g8NS6^^@>5;j{^Zq=
z at IfVK*Y?_kV%_mSdE-pdMx(mkd`i5<820CG*Qx42RAwk*n~6jdKEtNa*SF!Rg;n^<
zTPmE+g;#&2TdlHlZ9HNQ*RG}#XU>O;D{)DlH#k6f6sMc<uhJP$M6Th(_41NC?Vc at r
z7Dxdbc}YaM5r16@=RK7FvI}<T9C6CsEN>gGGqfMS at IQ@Yn_V(vjZ`H`QjA~_*sb>Y
zt#L)2Jqk`9jd4PfwY$BG)_D|<>MBR!IPcwU6t#VvldB?2+}kGAYLJEh5c}I2UhY^Y
zu~NPo=vYG{<5!7WhGIweZxK|B-Z+Hgn;2`1#fSK}bjnI&*NYs~TOUzofKgnk{MZeu
zA+yDv3fI$JU6rU0*~(>+qP^peWMNTmrOdQ3kTh#bn<%f*#FJOK3N))IU0mQ>p}{2L
z30UrdUv*L_4|cvd)?i`;dH%@|U24EYrX8h03JB)@0k`_W)$;ghpdNc>$-*$5Gnz4~
z>Zy^M$BW4VoIx^!8eO7WaT<ZsgqaTpoI&!gwVM~YzRD4jG%2}h+n3d`Oo8wD&d!`D
z%FDT3uY#kh;kvJD&8R1$)X)`yl1$iW2dDap%lAAZZuOlz(XcP>i7Zt_=S3*-949~`
z0p`~W^ZyO<4A0ZUCwZ>DW_qvuMv&6;?H#<gEKPT at bKYG<EhIhz#r#b!)rcdvHyL-o
zSD%6rtiii)UFADL0~N-iv*jDd{P69zAxuT(GW_QH#$a!58QdTcwQvAgE2ux7s_iKo
zH9H at C3L?q0L~i8m`?o~4S98hs5Ke^V6TAfmw)F)TR-#5UIt68W<BUopACh!}ORMuZ
znp_a|#m at p>*cGkcX-9M9OZGjAGkehG)APF9V39hd#O5EyYqsZG9C(hxO$qilIdLi}
z8H=r027UhN`KcJkxn^_9BApyd`~7#bOuW{_7IC9 at mbZQ%@-z_Pz`Ud-?kUQR_pihR
zU262iTHmD<@xT0v%a-lmTV2)Z#Y5+2LX-G`?`xyO7-h-a2Ql&9EO2L`|5)Mvo5=nv
zB#jXGn;ZQr0>3}}A#`bW`XAz1e^Y>e^>F|19$u1XouWjte;k at M`rcmhlAtRdq(MqD
zfbrW}WK>f?1zR-`em@}v+}xr+h!_LrvA=qU`J?CWOGNOg!60>mBEzEolx3SS<$Lw3
zP)qvXK{x_XCB?|LYUw8fV^?29PtGj&-#^Fg`;m_Ow4Nc56m1^N<B)c@)r)!@#bfjY
z8x9gXIY#V0(y&@Ilz at C3+JAgvd{fF*poOn{=M$FH1!*e~ql=)QP~TEU3YXLo8|1;6
z=`aK*a?{`s@&VnlQVi>j{`ar~SNusBNd`t||8Yjto)~TT1Koi4DUv_Z7#C6^K|?}$
zOdY7o`vBfQG|z8DwQL6Z6Z}z@<iLudu%2K)Qy^jQ^*hX>dcVJ(JCHP*-so?uV%Gy_
znf<&KU(Tf6=qpO=`dTYviA%~Di9oVRrmqxE00Y7*2j&OBhdi;!T0U_W=8q-6Ym?13
zF|kmh%KT*{k%hA5&EN~rowVxSztzJBU;!+*cQJ at E^Fix9K^F@#294n>d_eYs8Ep~v
z`+$Frm8SVV^G1Zp4M at 6YCBp(!%3x}c2b$lIz~uU0bU49-Nt}uJU|oVCIv$XW{v!DI
zSeFt5hH1rds3HjldqY9$C>0ak5wVO^35J|wgs*YeQ{Q`I17vSlC0AW}F9;x9WK3z*
zOm7{00O1GbYJri)hh#ZYaxT2TkKjZsc(#euT at +Z{3%?-xMA;Xl-wM|BrK+0fRG*Xt
zSP61rw#;Twa|Op9V{+lZ(XvwCO<sqD!z%M#<>X5L_)VR4<`OOLzFj7>DqqRN8nk+u
zd*T&Vdep=r|CVLvTtQB*5C1pi`fm)-|HbGRb%#t}l#G%*+loGhwFNbw`#=26d$h;}
z)cT!6&yYrEW>Y<ts)v$1e`nQz#^_Ex$o};PD_R}Hut6 at 7gkrA&aCkxK-D;({d?Ldi
ze<wnK{x{P0_V!A@^RxOSX^?Nw_r{q5 at ZB5I0xv-`2k#bhAl#j~u+G?+uJS!Vn^wNH
zH)1pgW-PgHOtxwn`IK!efHZ;u=lSt#@J0 at -6L5=Cl6GFBi^l%`lYBgK at q<7b`u&sJ
zAl>wjMZSv^h^ylx?PbE$<%f^X5fDaD;>%+|<SJ<hjL?IGGg^>v2FiDNxJ2>(&;6q9
zl)%k at -IM(1C1v^Yme5|_%fx}Jdlo7Ge{80j=R1FEQxgO>Q5_TwJzCPQyEqF7!2E1g
zy}?I%(JjGOZ`1(SDsgr$TC#0shUv0X1&>-7&ia?Yt~LU9XAU&!Ail`ZTDY(WU>Dt(
znVtqhLP9`w8BWB8`yIA0 at X!)&?IY~xrl*akdRW2lEaG0h(rRL`(LI at n6Lzxn$*rxe
z;eruEF9Q48Eo|^Qs2!JL1pZ45a0B*%`lS92E6hglYwJM>EwH^8)mNQ35VZL*$n>%g
zmva9tiu{e%%YP5(T%}mZQ8b5>hh6Hx$C9gbl~Arg3Qn>s9kBq}%ohq_fXl7RcBMnT
z*Dpo=NYOYjLA=r6jA>toCeNSpAex!@)LBD?Qec?vo%uF7cED^&8)l~Buz`XQq9$9m
zVr<XyVpt!~AY$%wNnSoel>JJ>Qf#Q2D-5M`hGcSvnvq?3+kFM~&WgSZc$3y;{V(p1
z+dNKnSCT1;sc8swT)xSrVL0V;?1nzGki5SzS>pm;@i`xUUmkxcY4WWrMeQqE+w>{b
z<<zg+hem}<Te2QFoDPxe=CR{OL#FZajjU!m_rwHjKCa6ac^#f*Jg#*4CUcG=Nui~i
zwivE(SpNP;t<M2gBi^I{_sn<qsn&@WuS%~2F4Uw%W8EiKi!sB?W?VF{-nB$~ikyA=
zko8OtQS{>3={(A-@&(e>+v8n2E}&OX|El6c4j2&V(sEd at d&KDB4PPy2c-iH&J3XW|
zCFk-EBHV;Cl0Tch0}Z3fb)RYo?$R=hUBz~A0v0>X^u5ke&yEQvogIceab|Ev95aTR
z^#-;^?N;ZxV8X30xaK<938A&_%#!=``G)lvi^&0bHdU@{`}5>n2GxNZME3+FQFD6n
zTr;c{(Gc3%WALn|&I^EZ=+z|}aALzRx1P4}+qZaJz;L!1a at i$c$glc%aWsZlEBtN)
znEz_-ffLdmE|lc;l12;pW15|C(({~7cza`m!CcCXLb)hPs9>&5ub|87uY%cWEZnKu
zmzt}$#zi1-(%J*-Go8hN7Vq@|SFlHF-R(t|tDSuWC8}J}w`v*A_an;pur_Mn;`oi^
zHw3un8^uUZ3(#VCII$8ba0?~u*SfOB(V6tqOn)h^38`yn%6J^V8G}%PvsT1s;`nu)
zkU+%{5IDOcz!eN1+Kj$bgS?i@%&R34ckfNehn#o|X}z4F;aIJ$-jIWN)|BZZP#3f&
z|1v4+A5hYdyS<I7OAT?bpA`R)cfXcv<F*GpCV<AWOt;c^5v$Rl)^OauzX}fsoveO_
zZ66*6^m}qMymEI#i1sQ9fZ2`*oqOYr>;;C3DY7ZkhfBnY1Sz$SW2$SL!+l$MkK-Md
z#Uz_ZKym%RpV)RVK!d-zAKiVjF@>gz63VypTFnGNg0<;k`=!XkSL1T`rLYLJIeGIA
ztQP%3q;7w#NA}$T;GM&VJYZ?opaLeV9B<{tsbO1H$qMI@=hxnXRECV`f$HuH(AGt3
zuHJ)<d(h<#3((Gh$_|^^*2_^Go2W`Ds0lspb<&&B)9Py6>0~dMJMv=ajqJ3^MytW2
zH at h~vLVUaz?agnWC`WCMu4Ag>oJ^d(fAu)NKA?%}4&3zs(7$zdWh`9(rTK*R^+7oW
zQ`+=8ZZ4!+pa`Dqe{ld2<{PPUNC`9{OkX}{?@rW$=4)<e9j=|3vMx)5I{zgfoV+d}
z2NxI8ykRqM2iB?H$bg|8y$$__m&3?aGfKB%glIj at Y@6PQLz(x{*3jrF28}gY7~NEx
zJ92lj0gX21TI(t%{lLM`Bz7orq38?~qBU5ri69p_7=IhGC6T!3LYtZ7fS|AWqYy(*
z#UZ=vzz%55$MbUMHhuJAWeyrpkxGxB9Z08S^q0EfSkOR>IJzq>l+yw!1Lewun+xm(
zv&oj^U+8?;7(#ERa6Lyr$;8 at J>SH9Yc{o(o&Q<vBa_Uz<Pd|F_u4Y5G&jpL|a^P6M
zywt*howY+*{WmI2b^E<ImCg=uu^AksEOa3YC?EtZh;CMexx*Afq25FVrMi}7`P1gS
z>KiOXWO}W908A9^gTrl9Q&sL64w(i=JEgrrO5P%BLd;`hOvCfMk=4V=!p*43&W<K5
zxnsb4>Il{6xT?ueXUOe$S{%|B#Yaovs}4Q<b8{4ey>YhmeiHNbrAz`K3-V$SAaXE2
zjaloPu?-MYeW}}%=Eb(t06cKC%(UYQ=6q_Ms;W=eJvNkGKf;2EK6HW7F~75#oawRg
ze4urI7S+3#V`)$Y6_Vf2E#I3*^<<oaS@|Kt5C^ACLS0ZFH4i)k>|~2rQ%`MCcnw2Z
z&{m<A^@@guU9xF`lFurUzu0Q-&=}TsVNvnstr%9}^%5TC6!E4Qy11$Ka%JUSa|sKE
zFtd(gQgP31m+Wts!v8%5F;^2Cma1MYbN*%bU6^Vu)34Si|C(NwWIP6BuGTOAve*AS
zHxB3Nbrf4{9mbS6jscsILX(YodKLQ<-WQW<)W2uY|C!7|YbiM$-*93kl5LL|LD)A$
z1_T872&ICrH|6%#)V3t^V33T#?}V3-h{!1P4P2?EL1 at wg(;lpKbFsSMS33BQ$KO^`
zqot*t21Pks`V`$ev<jYqnTN)Qis0Jo at zt2ST%r9}mS;uh1X?-aP7{`bqyTt4lvkF^
Jmoa|%e*hJg%a{NF

literal 0
HcmV?d00001

diff --git a/documentation/mega-manual/figures/set-variable.png b/documentation/mega-manual/figures/set-variable.png
new file mode 100644
index 0000000000000000000000000000000000000000..d36b52754e22c7779ccc2a58ae4a513f03d7ba85
GIT binary patch
literal 111430
zcmd?Qhg(zG+CCh_G9tyX3<v_20R*H-ktU#`p!D9GBE3p)Avg{&h=9@}AOu8OXd+E&
zP=wF}1PDDq=mA22B#@Bgw{_lgzB%uE{)3NeU1VK5D|@f~to5{e-A}xsz7_`?FB=F1
z;&}Y%fiVbl0_d{t{Bjcb at F_x%f<RY5k00DK4Sl~kON%(an#p|5h^E_+<IEZ&KE$O-
zxHr2$nf7i7nwpK`Ylyfuxm`bKJNuO2vlaX@>-fxB_IyRTr1QwrvEQ%0J1+8-<<uWv
zd2AeC{&Mm)>Xg+f&u2Z1NC=Pn%^qI<NX- at pOpt@(xZ6sjtL8Q8&TE&{lztRy8Y0YW
zF{;=PU57C&{J~|3jCFOQ2ptXCCEWf-HRl6*iw4wU<`UNXPg2Egp!XfNZ@}z9^g*!%
zhhb8MP!e+&+3c<){z&j{cwtr5&~kvcZzJAeoAV=tTKwM{LXc{3JetdcIXO<bvX3Zz
zbFqA%({78ke&m!}L1Hokn8|->>M)XPHp{`4eP*5 at Q}6J$j?smO|8BFe^gFC?!goB-
zGc)hsdqhReF=P*2i;-w?@S!apMLM#@S^0#iw-y%oHr)9{S6 at T^w`c4L8u)iUy+uRm
zrnl%8X+xr at yN%<BnclkA`$&X2o!kHQd6p}y%$JkQqWk7wW?0I}EH?w`@yHLuB~e5y
z;w`?aexn+4n0%^|d5V63R;T~(28rrJKD`yw at q~kub7N&7dpEpwRC#nDTR~n?@djFs
zn_spVmkGSc9`h?+9nao=s<4P2)p*-C-7|m;dh_ANtN&>NquPH$G&D5WPQDC2FzgOV
zuc*D>fEdBqRWVjqS1+=kl$VqH=%@G|<JImZ3o2c#(koM1t{Wmrg!KC6<8;z|!<C&t
z2YEk4`QH`@H4BmB9h;bVckD$pf2c&m%8Ie8<Z{+z8soqpgP5zEVX(f4?&|8gkf<3T
zz<dDeK4dzQ5u(%Q*=Aq#1eGz9a?1|EgD0c5D$TJZKAG!pA96gn_Uk}@zuOc6Gn!`b
z)$q~VM<4U}c at j09vx;0?z5(yS7IPo?FRGrLlsL^YpUgNc2Cf7vRj6OSeUUvzPDx1!
zp<a^dXIWEIb0WtuCO5iI^~o94d}zSYf7vUDP-?Pf!K(+?nnDP3pT|ws6t^kXTMVb_
zciXeg#gmhhX=kO;!DljAx(^*9>At;V-;H at Aw@6OJyIXzAQHyD~J=U*zjQukXZ}9;(
zq#Ve>^Ij(~#&=_n%NGMv-8TcT>~Zzgg_Wt%I;%FS7*xE!dQFJYM20=LRLHs(lM18G
zbWD at D9jJWtNp3_DDr!MIDg76a9i&cvnetMjBVn9=fMV)Es+WHSlM@`$J@?Fi+!BvM
z>?=@b#=UtjU9#I{v|!;w=j$h4{U2?Bv?A*=0Lg97G}dh6@{I9=IVv)GCc|!Wc>f+*
z(3y%;^dqTQ2J|9GIbHqikOQ5hur$?TmK=$v$qYQ|T4wC@;)A2fQPY=z-5#T7BGqD9
ztezMbrBC{ff|T+p_)1t8yJv;(LJ=dbYEb&&p}9ZkV7(%Wz9VAr at eV`8y$`b8haK8(
zJvB~m?*bI2Q!r7}B+8!feE9$Fc_w`fvbfPS-QYVt-EF!)ttW`_hf3`q_Sr%5>jdc7
zHn7ctpCUfose1WDG+%2deRUgx*3J#>AuSC$Oy*CFdA25ut1BvcsWbYRhw8L21Hz;$
zGindoux??XS~l2c$IH)eV%PC2cq<#*AjrhPc!PWS6E!b##+gxlnNQRihj9(~LvH)g
z$z+tL<9x1*i;K+o+Qh^+p?2o3AX{7q(6TZ!t1<lSv8KBPkUA)hOwk#e*v}{`Djth!
z(=bq_y;q~fR87_Vf>j5*bUI9w*_ElP{U77TByDFiptsv5C#?V#Cs8QV&}`u-*n#Zf
zsu#YeJ~BUf6 at DM{LroJHG#c$<5=6qP-YNGNkP=g{pP^8((#u at 2F}I|wa)I^ohje?L
z3{>~t^B2vwj8(bG!QBxK5Na6Se+DtL+x_9ViV^cLfmscsl`$i_7<3g88}2CPXiZph
zK<}zf<LO65&Wv at UOho2+LT>LDU1^?C7?|kk?>z at sk680$i at lEz_Y?h>Il18>B&G at q
zgg^TIDKoP)1=>?Qf`Q@>8#5fXaWP3D5>y9m&?D8*I#JB&6x+rW@{%)P@$6N0i}<tZ
zqJ~`5)$ZK+FyJsJj9ICmHZTuj=<ksXlKR%Az}3MJMPY0d<gP>Lfp3LXlud*9*<U<@
zgUzQA6y}dD$ptJLuzY<HEse+SqUA`dL`On`1HI^e{u>;Xd<W8Qj}cGQyM#oH(sLL`
zUdaabV6ElY{M}vuW-;*)cT8n(8a5ruClib)ST|E-G<G4f=u*xtfP?zq4HgED&kmex
z2{T#nvn+CVDgW*iFOE-vGziqq5HC=VNNY^MAOrj0`5kh+lhq@@sQoYvVoRqR#lRpF
z6E$yo7xstFx6wKv=2y;|0v1w=NntKxVHD>do&{KSz`{*@orJbgE8cTt9PPkxed^`$
zJ)*Nmwb-brNhxMS9&3gGs7Q)3JQ+a7HRpy&;;CIC!kYxan}-l)3MrbC=CU7*c~{AC
z(tHUd!t^=vh|`CumhG*gY=Vd_N!w*_o@}DmzY_*wn8O;^pn6>F{W8C!fSjR)W<uW$
z-=XhpIrDvBR!cnN3_ofS32q8oe$~{}G&(j`C{Bb`0c*D#ut<#A?X|c-$3l?ma)Bmx
z&~wOzlqTx7*b#{Izx)A{*2vrk4T;WcbG5Toq}yXXFq&%+QI`3sT;`KmQsf5%$sp&W
zqwsZYnD93~8enrU%%Z~E*}g&c>-8NquDL3CfK<GbuveDOI7~{S<>XaV%GTWxtuqP;
zO2K=4#axK=y2?qK@%<)htO6S^ZfSJ%TL_4;XTYt>h=V%R2&!YBi>^}JxVc2s0R?oi
z+b&HFAw3$9S2Ygs?xaM>)gL6uHDt}oh-F>Wr`mb>=m%6!z;jvkmz$|s>;;d}_)p%=
ze`rvbW>0Qa-h at 8kF;BPf at ZHMZ*nn9go-doUNty|D*&3#o^+6-(1#^;iO-sWM6iJlx
zbOF2Feew6?0P0?iYKDQ{eneoYZ#R{&^XDCCliY<sYqjzy11MGG8y;eNSuC<a0!N$x
z&op1dqgF$g=aR*3M3MjFuA8dFe+7lN+9L at VlxaKxBiIyfPl)of*Kl7LdkryMRX at 19
zdgtYdiiV*r5eNpdh;mK`uFk0!t1!OR!|cUx<$k}_6XgE<8pswOAhM>KyBDxgX$wpE
zc78X|uJ<4l3D2XdP6{|QTW`BAjKR}DevOzWS2*A)9VQue_>q~aNR#GZbwNZwrEg=q
zt;z4&$z#FY<Zdke$|{-JJmM_{Ssk>q+pzwHmus}mbchGd+P=?l at D1;aYB at aUd5@>{
zk_nxzGEuU4|G4Q>KZFma7-Cb%ko-PMtC>*2qQv24j6#9qQ1RU>Zvwyzj)rP5gEmKL
z&*TL^!>^9gxOl;qx!*h7jEC|CJ^5IW+ynk7%xTo~^wse5a23yF- at 3ASoM4Msi2VzP
z^ej|J502O!P;C`!RJhH~;@C at e^>Oz-I+Us}KB;JtoYp5 at o|)aFUR)(L?R2;gAvtTr
z8o8=sLmmQFA-3{#+%j1CDUS?q__!C7+nP>LBltxImsRwo%IMS-Q<A<lCNa+?SrpN~
zWYKMqJIgJDFUqI6ux1^VcHtPjO&zh4OmtY^`e)cy6~uhoeILZb7PGk{N({JhLHkgN
zL^RsMZm0Au8 at q2kjF>dM at iB8axwd