diff --git a/docs/source/about.md b/docs/source/about.md
index abbeccc97..1314edd2e 100644
--- a/docs/source/about.md
+++ b/docs/source/about.md
@@ -10,10 +10,18 @@ function (PSF) modelling technique. The code has been designed to facilitate
the inclusion of new or improved processing steps to adapt to advances made
in the coming years.
+```{figure} https://www.skysurvey.cc/wp-content/uploads/2022/04/UNIONS-Logo-TextBlack-1K-300x82.png
+---
+figclass: margin
+alt: UNIONS logo
+target: https://www.skysurvey.cc/
+---
+```
+
The primary application of ShapePipe so far has been to the Ultraviolet
-Near-Infrared Optical Northern Survey (UNIONS) data (see {cite:t}`guinot:21`
+Near-Infrared Optical Northern Survey (UNIONS) data (see {cite:t}`guinot:22`
and Kilbinger et al., in prep).
We plan to add features and find new applications for ShapePipe and will update
this documentation accordingly. For more details on the first public release
-of ShapePipe please see Farrens et al. (in prep).
+of ShapePipe please see {cite:t}`farrens:22b`.
diff --git a/docs/source/basic_execution.md b/docs/source/basic_execution.md
index fade00674..9e7ca63b4 100644
--- a/docs/source/basic_execution.md
+++ b/docs/source/basic_execution.md
@@ -5,14 +5,14 @@ ShapePipe pipelines are launched and managed via the `shapepipe_run` script.
A list of command line arguments can be displayed using the `--help`
option:
+```{seealso}
+:class: margin
+The `shapepipe` environment will need to be built and activated in order to run this script (see [Installation](installation.md)).
+```
```bash
shapepipe_run --help
```
-```{warning}
-The `shapepipe` environment will need to be built and activated in order to run this script (see [Installation](installation.md)).
-```
-
The options for defining a pipeline are managed via a
[configuration file](configuration.md).
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 8ea294407..a191341a1 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -25,7 +25,7 @@
# The short X.Y version
version = '1.0'
# The full version, including alpha/beta/rc tags
-release = '1.0.0'
+release = '1.0.1'
# -- General configuration ---------------------------------------------------
@@ -113,7 +113,12 @@
'use_issues_button': True,
'use_download_button': False,
'use_fullscreen_button': False,
+ 'use_edit_page_button': True,
+ 'path_to_docs': 'docs/source',
+ 'extra_navbar': "
",
}
+html_collapsible_definitions = True
+html_awesome_headerlinks = True
# The name for this set of Sphinx documents. If None, it defaults to
# " v documentation".
@@ -153,4 +158,5 @@
# -- BibTeX Setting ----------------------------------------------
bibtex_bibfiles = ['refs.bib']
-bibtex_default_style = 'alpha'
+bibtex_default_style = 'unsrt'
+bibtex_reference_style = 'author_year'
diff --git a/docs/source/contributors.md b/docs/source/contributors.md
index d1f850450..a9ab324ec 100644
--- a/docs/source/contributors.md
+++ b/docs/source/contributors.md
@@ -7,6 +7,34 @@ possible applications of the package.
Below will list the individuals who have contributed to the development of
ShapePipe so far.
+```{figure} https://avatars.githubusercontent.com/u/6851839?v=4
+---
+figclass: margin
+alt: Samuel Farrens
+width: 25%
+target: https://github.com/sfarrens
+---
+Samuel Farrens
+```
+```{figure} https://avatars.githubusercontent.com/u/39480528?v=4
+---
+figclass: margin
+alt: Axel Guinot
+width: 25%
+target: https://github.com/aguinot
+---
+Axel Guinot
+```
+```{figure} https://avatars.githubusercontent.com/u/4549196?v=4
+---
+figclass: margin
+alt: Martin Kilbinger
+width: 25%
+target: https://github.com/martinkilbinger
+---
+Martin Kilbinger
+```
+
## Maintainers
- [Samuel Farrens](https://github.com/sfarrens) : Development lead, core package developer, performance and debugging
diff --git a/docs/source/index.rst b/docs/source/index.rst
index b70f77905..8a030bfe7 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -4,6 +4,12 @@ ShapePipe
.. Include table of contents
.. include:: toc.rst
+.. figure:: img/cosmostat_logo.jpg
+ :figclass: margin
+ :width: 100%
+ :alt: CosmoStat Logo
+ :target: http://www.cosmostat.org/
+
ShapePipe is a galaxy shape measurement pipeline developed within the
|link-to-cosmostat| lab at CEA Paris-Saclay.
@@ -13,9 +19,7 @@ we invite you to |link-to-issues| on the GitHub repository an we will do our
best to help you.
We kindly request that if you use ShapePipe for your academic work that you
-cite :cite:`guinot:21` and Farrens et al. (in prep).
-
-|CS_LOGO|
+cite :cite:t:`guinot:22` and :cite:t:`farrens:22b`.
.. |link-to-cosmostat| raw:: html
@@ -25,8 +29,3 @@ cite :cite:`guinot:21` and Farrens et al. (in prep).
open an issue
-
-.. |CS_LOGO| image:: img/cosmostat_logo.jpg
- :width: 45%
- :alt: CosmoStat Logo
- :target: http://www.cosmostat.org/
diff --git a/docs/source/installation.md b/docs/source/installation.md
index 2c9873b49..bfe4e8096 100644
--- a/docs/source/installation.md
+++ b/docs/source/installation.md
@@ -1,6 +1,6 @@
# Installation
-```{important}
+```{attention}
ShapePipe was not designed to be a stand-alone Python library. Instead users
are expected to install the full ShapePipe environment on the system(s) where
data should be processed.
@@ -8,19 +8,24 @@ data should be processed.
## Standard Installation
-The standard installation of ShapePipe manages [dependencies](dependencies.md)
-and scripts using a [Conda](https://docs.conda.io/en/latest/) environment.
-Therefore, to follow the standard installation Conda must be available on the
-system.
-
```{tip}
+:class: margin
Check out [Miniconda](https://docs.conda.io/en/latest/miniconda.html) for a
light weight and easy installation of Conda.
```
+The standard installation of ShapePipe manages [dependencies](dependencies.md)
+and scripts using a [Conda](https://docs.conda.io/en/latest/) environment.
+Therefore, to follow the standard installation Conda must be available on the
+system.
+
The ShapePipe package should first be cloned (or downloaded) from the
[GitHub repository](https://github.com/CosmoStat/shapepipe).
+```{note}
+:class: margin
+Developers should simply clone the repository as usual.
+```
```bash
git clone -b --depth 1 git@github.com:CosmoStat/shapepipe.git
cd shapepipe
@@ -32,10 +37,6 @@ where `` is a
[latest release](https://github.com/CosmoStat/shapepipe/releases/latest)
unless you want to reproduce an older set of results.
-```{note}
-Developers should simply clone the repository as usual.
-```
-
Then, the entire ShapePipe environment, including dependencies, can be built
using the `install_shapepipe` script as follows.
@@ -93,15 +94,15 @@ entire ShapePipe environment.
## Installing the ShapePipe Library Only
-```{warning}
-Note, this method will not include any system executables or examples.
-```
-
The ShapePipe library, i.e. the core package not including module
dependencies, can be installed in the following ways.
After cloning the repository.
+```{warning}
+:class: margin
+Note, this method will not include any system executables or examples.
+```
```bash
pip install .
```
diff --git a/docs/source/module_develop.md b/docs/source/module_develop.md
index dd82d2e2a..3df8fe88c 100644
--- a/docs/source/module_develop.md
+++ b/docs/source/module_develop.md
@@ -67,6 +67,12 @@ def example_module(*args):
In the specific case of a module that executes an executable available on the
system, the module runner should also import the `execute` function.
+```{note}
+:class: margin
+If no `stdout` or `stderr` are provided by the given module, the module
+runner should simply return `None, None`.
+```
+
```python
from shapepipe.modules.module_decorator import module_runner
from shapepipe.modules.module_name_package.module_name import ...
@@ -84,10 +90,7 @@ def example_module(*args):
return stdout, stderr
```
-```{note}
-If no `stdout` or `stderr` are provided by the given module, the the module
-runner should simply return `None, None`.
-```
+
The module runner decorator takes the following keyword arguments:
diff --git a/docs/source/refs.bib b/docs/source/refs.bib
index f2f5c933d..7dcb046c5 100644
--- a/docs/source/refs.bib
+++ b/docs/source/refs.bib
@@ -318,11 +318,36 @@ @ARTICLE{farrens:22
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}
-@article{guinot:21,
- author = {{Guinot}, A. and {Kilbinger}, M. and {Farrens}, S. and others},
+@ARTICLE{farrens:22b,
+ author = {{Farrens}, S. and {Guinot}, A. and {Kilbinger}, M. and {Liaudat}, T. and {Baumont}, L. and {Jimenez}, X. and {Peel}, A. and {Pujol}, A. and {Schmitz}, M. and {Starck}, J. -L. and {Vitorelli}, A.~Z.},
+ title = "{ShapePipe: A modular weak-lensing processing and analysis pipeline}",
+ journal = {arXiv e-prints},
+ keywords = {Astrophysics - Instrumentation and Methods for Astrophysics, Astrophysics - Cosmology and Nongalactic Astrophysics},
+ year = 2022,
+ month = jun,
+ eid = {arXiv:2206.14689},
+ pages = {arXiv:2206.14689},
+archivePrefix = {arXiv},
+ eprint = {2206.14689},
+ primaryClass = {astro-ph.IM},
+ adsurl = {https://ui.adsabs.harvard.edu/abs/2022arXiv220614689F},
+ adsnote = {Provided by the SAO/NASA Astrophysics Data System}
+}
+
+@ARTICLE{guinot:22,
+ author = {{Guinot}, Axel and {Kilbinger}, Martin and {Farrens}, Samuel and {Peel}, Austin and {Pujol}, Arnau and {Schmitz}, Morgan and {Starck}, Jean-Luc and {Erben}, Thomas and {Gavazzi}, Raphael and {Gwyn}, Stephen and {Hudson}, Michael J. and {Hiledebrandt}, Hendrik and {Liaudat}, Tobias and {Miller}, Lance and {Spitzer}, Isaac and {Van Waerbeke}, Ludovic and {Cuillandre}, Jean-Charles and {Fabbro}, S{\'e}bastien and {McConnachie}, Alan},
title = "{ShapePipe: a new shape measurement pipeline and weak-lensing application to UNIONS/CFIS data}",
- journal = {Submitted to \aap},
- year = 2021,
+ journal = {arXiv e-prints},
+ keywords = {Astrophysics - Cosmology and Nongalactic Astrophysics},
+ year = 2022,
+ month = apr,
+ eid = {arXiv:2204.04798},
+ pages = {arXiv:2204.04798},
+archivePrefix = {arXiv},
+ eprint = {2204.04798},
+ primaryClass = {astro-ph.CO},
+ adsurl = {https://ui.adsabs.harvard.edu/abs/2022arXiv220404798G},
+ adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}
@ARTICLE{harnois:15,
@@ -437,33 +462,33 @@ @ARTICLE{jarvis:04
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}
-@ARTICLE{jarvis:16,
- author = {{Jarvis}, M. and {Sheldon}, E. and {Zuntz}, J. and {Kacprzak}, T. and
+@ARTICLE{jarvis:16,
+ author = {{Jarvis}, M. and {Sheldon}, E. and {Zuntz}, J. and {Kacprzak}, T. and
{Bridle}, S.~L. and {Amara}, A. and {Armstrong}, R. and {Becker}, M.~R. and
{Bernstein}, G.~M. and {Bonnett}, C. and {Chang}, C. and {Das}, R. and
- {Dietrich}, J.~P. and {Drlica-Wagner}, A. and {Eifler}, T.~F. and
+ {Dietrich}, J.~P. and {Drlica-Wagner}, A. and {Eifler}, T.~F. and
{Gangkofner}, C. and {Gruen}, D. and {Hirsch}, M. and {Huff}, E.~M. and
- {Jain}, B. and {Kent}, S. and {Kirk}, D. and {MacCrann}, N. and
+ {Jain}, B. and {Kent}, S. and {Kirk}, D. and {MacCrann}, N. and
{Melchior}, P. and {Plazas}, A.~A. and {Refregier}, A. and {Rowe}, B. and
- {Rykoff}, E.~S. and {Samuroff}, S. and {S{\'a}nchez}, C. and
- {Suchyta}, E. and {Troxel}, M.~A. and {Vikram}, V. and {Abbott}, T. and
+ {Rykoff}, E.~S. and {Samuroff}, S. and {S{\'a}nchez}, C. and
+ {Suchyta}, E. and {Troxel}, M.~A. and {Vikram}, V. and {Abbott}, T. and
{Abdalla}, F.~B. and {Allam}, S. and {Annis}, J. and {Benoit-L{\'e}vy}, A. and
{Bertin}, E. and {Brooks}, D. and {Buckley-Geer}, E. and {Burke}, D.~L. and
{Capozzi}, D. and {Carnero Rosell}, A. and {Carrasco Kind}, M. and
- {Carretero}, J. and {Castander}, F.~J. and {Clampitt}, J. and
+ {Carretero}, J. and {Castander}, F.~J. and {Clampitt}, J. and
{Crocce}, M. and {Cunha}, C.~E. and {D'Andrea}, C.~B. and {da Costa}, L.~N. and
- {DePoy}, D.~L. and {Desai}, S. and {Diehl}, H.~T. and {Doel}, P. and
+ {DePoy}, D.~L. and {Desai}, S. and {Diehl}, H.~T. and {Doel}, P. and
{Fausti Neto}, A. and {Flaugher}, B. and {Fosalba}, P. and {Frieman}, J. and
- {Gaztanaga}, E. and {Gerdes}, D.~W. and {Gruendl}, R.~A. and
+ {Gaztanaga}, E. and {Gerdes}, D.~W. and {Gruendl}, R.~A. and
{Gutierrez}, G. and {Honscheid}, K. and {James}, D.~J. and {Kuehn}, K. and
- {Kuropatkin}, N. and {Lahav}, O. and {Li}, T.~S. and {Lima}, M. and
+ {Kuropatkin}, N. and {Lahav}, O. and {Li}, T.~S. and {Lima}, M. and
{March}, M. and {Martini}, P. and {Miquel}, R. and {Mohr}, J.~J. and
- {Neilsen}, E. and {Nord}, B. and {Ogando}, R. and {Reil}, K. and
+ {Neilsen}, E. and {Nord}, B. and {Ogando}, R. and {Reil}, K. and
{Romer}, A.~K. and {Roodman}, A. and {Sako}, M. and {Sanchez}, E. and
{Scarpine}, V. and {Schubnell}, M. and {Sevilla-Noarbe}, I. and
- {Smith}, R.~C. and {Soares-Santos}, M. and {Sobreira}, F. and
+ {Smith}, R.~C. and {Soares-Santos}, M. and {Sobreira}, F. and
{Swanson}, M.~E.~C. and {Tarle}, G. and {Thaler}, J. and {Thomas}, D. and
- {Walker}, A.~R. and {Wechsler}, R.~H.},
+ {Walker}, A.~R. and {Wechsler}, R.~H.},
title = "{The DES Science Verification weak lensing shear catalogues}",
journal = {\mnras},
archivePrefix = "arXiv",
diff --git a/docs/source/understanding_api.md b/docs/source/understanding_api.md
index 47d4a7a9c..33719681f 100644
--- a/docs/source/understanding_api.md
+++ b/docs/source/understanding_api.md
@@ -1,13 +1,14 @@
# Understanding the API Documentation
-This page aims to help ShapePipe users and developers understand the
-Application Programming Interface (API) documentation.
-
```{note}
+:class: margin
If you are already familiar with this type of documentation you can skip this
page.
```
+This page aims to help ShapePipe users and developers understand the
+Application Programming Interface (API) documentation.
+
## What Are API Docs?
The API documentation is designed to communicate in clear way what each class
@@ -18,6 +19,13 @@ with three double quotes `"""`) written in the code.
## Standard API Docs
+```{note}
+:class: margin
+If an optional argument does not explicitly specify the default parameter value
+then the user should expect that this means the default will be `None`, `''`,
+`[]`, etc. depending on the input data type.
+```
+
All the classes/functions include a short description of what they do. This is
followed by a `Parameters` section containing a bullet point list of the
expected input arguments. For each parameter you will see in brackets the
@@ -25,12 +33,6 @@ expected input type (e.g. `int`, `float`, `list`, etc.) followed by a brief
description of what the argument is for. Parameters listed as *optional* in the
brackets do not need to be provided and will default to some predefined value.
-```{note}
-If an optional argument does not explicitly specify the default parameter value
-then the user should expect that this means the default will be `None`, `''`,
-`[]`, etc. depending on the input data type.
-```
-
For functions that return objects a `Returns` section will follow the
`Parameters` section. This will provide a brief description of what is provided
by this function. Following `Returns` you will always find `Return type`, which
diff --git a/example/cfis/config.mask b/example/cfis/config.mask
index a1f6fbb4b..9a147bdcd 100644
--- a/example/cfis/config.mask
+++ b/example/cfis/config.mask
@@ -1,4 +1,4 @@
-# Mask module configuration file
+# Mask module configuration file for single-exposure images
## Paths to executables
[PROGRAM_PATH]
@@ -51,12 +51,23 @@ SPIKE_REG_FILE = spike.reg
MESSIER_MAKE = True
-MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.npy
+MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.fits
MESSIER_SIZE_PLUS = 0.
MESSIER_FLAG_VALUE = 16
-# -------------------------- Missing data parameters ------------------------------
+## NGC mask
+[NGC_PARAMETERS]
+
+NGC_MAKE = True
+
+NGC_CAT_PATH = $SP_CONFIG/mask_default/ngc_cat.fits
+NGC_SIZE_PLUS = 0.
+NGC_FLAG_VALUE = 32
+
+
+
+## Missing data parameters
[MD_PARAMETERS]
MD_MAKE = False
@@ -66,11 +77,10 @@ MD_THRESH_REMOVE = 0.75
MD_REMOVE = False
-# ----------------------------- Other parameters ----------------------------------
+## Other parameters
[OTHER]
TEMP_DIRECTORY = .temp
KEEP_REG_FILE = False
KEEP_INDIVIDUAL_MASK = False
-
diff --git a/example/cfis/config_GitFeGie_vos.ini b/example/cfis/config_GitFeGie_vos.ini
index 40c98cd16..fd3207bb3 100644
--- a/example/cfis/config_GitFeGie_vos.ini
+++ b/example/cfis/config_GitFeGie_vos.ini
@@ -18,7 +18,7 @@ RUN_DATETIME = True
[EXECUTION]
# Module name, single string or comma-separated list of valid module runner names
-MODULE = get_images_runner, find_exposures_runner, get_images_runner
+MODULE = get_images_runner, find_exposures_runner, get_images_runner
# Parallel processing mode, SMP or MPI
MODE = SMP
@@ -146,4 +146,3 @@ N_TRY = 3
# Retrieve command options, optional
RETRIEVE_OPTIONS = --certfile=$VM_HOME/.ssl/cadcproxy.pem
-
diff --git a/example/cfis/config_MaMa.ini b/example/cfis/config_MaMa.ini
index 102a9aa5e..cc4b7f9c4 100644
--- a/example/cfis/config_MaMa.ini
+++ b/example/cfis/config_MaMa.ini
@@ -44,7 +44,7 @@ OUTPUT_DIR = $SP_RUN/output
[JOB]
# Batch size of parallel processing (optional), default is 1, i.e. run all jobs in serial
-SMP_BATCH_SIZE = 4
+SMP_BATCH_SIZE = 8
# Timeout value (optional), default is None, i.e. no timeout limit applied
TIMEOUT = 96:00:00
diff --git a/example/cfis/config_MsPl_mccd.ini b/example/cfis/config_MsPl_mccd.ini
index 495062878..ef8698e0f 100644
--- a/example/cfis/config_MsPl_mccd.ini
+++ b/example/cfis/config_MsPl_mccd.ini
@@ -1,4 +1,5 @@
-# ShapePipe configuration file for post-processing.
+# ShapePipe configuration file for post-processing
+# and validation;
# merge star cat and PSF plots.
@@ -76,7 +77,13 @@ NUMBERING_SCHEME = -0000000
FILE_PATTERN = full_starcat
FILE_EXT = .fits
+PSF = mccd
+
+# Options for focal-plane plots
PLOT_MEANSHAPES = True
+
+# X_GRID, Y_GRID: correspond to the number of bins in each direction of each
+# CCD from the focal plane. Ex: each CCD will be binned in 5x10 regular grids.
X_GRID = 5
Y_GRID = 10
@@ -84,17 +91,15 @@ Y_GRID = 10
MAX_E = 0.05
MAX_DE = 0.005
-PSF = mccd
PLOT_HISTOGRAMS = True
-REMOVE_OUTLIERS = False
-# X_GRID, Y_GRID: correspond to the number of bins in each direction of each
-# CCD from the focal plane. Ex: each CCD will be binned in 5x10 regular grids.
-#
# REMOVE_OUTLIERS: Remove validated stars that are outliers in terms of shape
# before drawing the plots.
+REMOVE_OUTLIERS = False
+# Options for rho statistics plots
PLOT_RHO_STATS = True
+
RHO_STATS_STYLE = HSC
RHO_STATS_YLIM_L = 1e-10, 4e-5
diff --git a/example/cfis/config_Rc.ini b/example/cfis/config_Rc.ini
index 024641a04..8c24d1e81 100644
--- a/example/cfis/config_Rc.ini
+++ b/example/cfis/config_Rc.ini
@@ -65,5 +65,3 @@ N_RANDOM = 50000
# N_RANDOM is per square degrees if True
DENSITY = True
-
-TILE_LIST = $SP_CONFIG/tiles_all_order.txt
diff --git a/example/cfis/config_exp_SpMh.ini b/example/cfis/config_exp_SpMh.ini
index c5057ac1c..76f87ddd7 100644
--- a/example/cfis/config_exp_SpMh.ini
+++ b/example/cfis/config_exp_SpMh.ini
@@ -45,7 +45,7 @@ OUTPUT_DIR = $SP_RUN/output
[JOB]
# Batch size of parallel processing (optional), default is 1, i.e. run all jobs in serial
-SMP_BATCH_SIZE = 4
+SMP_BATCH_SIZE = 16
# Timeout value (optional), default is None, i.e. no timeout limit applied
TIMEOUT = 96:00:00
diff --git a/example/cfis/config_make_cat_mccd.ini b/example/cfis/config_make_cat_mccd.ini
index eb3900fdf..b4d6d886a 100644
--- a/example/cfis/config_make_cat_mccd.ini
+++ b/example/cfis/config_make_cat_mccd.ini
@@ -73,7 +73,5 @@ SM_DO_CLASSIFICATION = True
SM_STAR_STRESH = 0.003
SM_GAL_THRESH = 0.01
-TILE_LIST = $SP_CONFIG/tiles_all_order.txt
-
SHAPE_MEASUREMENT_TYPE = ngmix
#, galsim
diff --git a/example/cfis/config_make_cat_psfex.ini b/example/cfis/config_make_cat_psfex.ini
index a3f4b763e..fdf5414b5 100644
--- a/example/cfis/config_make_cat_psfex.ini
+++ b/example/cfis/config_make_cat_psfex.ini
@@ -74,6 +74,4 @@ SM_DO_CLASSIFICATION = True
SM_STAR_THRESH = 0.003
SM_GAL_THRESH = 0.01
-TILE_LIST = $SP_CONFIG/tiles_all_order.txt
-
SHAPE_MEASUREMENT_TYPE = ngmix
diff --git a/example/cfis/config_tile.mask b/example/cfis/config_tile.mask
index d3eed92fb..4381d61b9 100644
--- a/example/cfis/config_tile.mask
+++ b/example/cfis/config_tile.mask
@@ -1,4 +1,6 @@
-# ----------------------------- Path ----------------------------------
+# Mask module config file for tiles
+
+## Paths to executables
[PROGRAM_PATH]
WW_PATH = ww
@@ -8,7 +10,7 @@ WW_CONFIG_FILE = $SP_CONFIG/mask_default/default.ww
# (e.g. no internet access on run nodes)
CDSCLIENT_PATH = findgsc2.2
-# ----------------------------- Border parameters ----------------------------------
+## Border parameters
[BORDER_PARAMETERS]
BORDER_MAKE = False
@@ -17,7 +19,7 @@ BORDER_WIDTH = 0
BORDER_FLAG_VALUE = 4
-# ----------------------------- Halo parameters ----------------------------------
+## Halo parameters
[HALO_PARAMETERS]
HALO_MAKE = True
@@ -30,7 +32,7 @@ HALO_FLAG_VALUE = 2
HALO_REG_FILE = halo.reg
-# ------------------------- Diffraction pike parameters ------------------------------
+## Diffraction pike parameters
[SPIKE_PARAMETERS]
SPIKE_MAKE = True
@@ -43,24 +45,33 @@ SPIKE_FLAG_VALUE = 128
SPIKE_REG_FILE = spike.reg
-# ---------------------------- Messier parameters ---------------------------------
+## Messier parameters
[MESSIER_PARAMETERS]
MESSIER_MAKE = True
-MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.npy
+MESSIER_CAT_PATH = $SP_CONFIG/mask_default/Messier_catalog_updated.fits
MESSIER_PIXEL_SCALE = 0.187
MESSIER_SIZE_PLUS = 0.
MESSIER_FLAG_VALUE = 16
+## NGC mask
+[NGC_PARAMETERS]
+
+NGC_MAKE = True
+
+NGC_CAT_PATH = $SP_CONFIG/mask_default/ngc_cat.fits
+NGC_SIZE_PLUS = 0.
+NGC_FLAG_VALUE = 32
+
-# -------------------------------- External flag ----------------------------------
+## External flag
[EXTERNAL_FLAG]
EF_MAKE = False
-# -------------------------- Missing data parameters ------------------------------
+## Missing data parameters
[MD_PARAMETERS]
MD_MAKE = False
@@ -70,7 +81,7 @@ MD_THRESH_REMOVE = 0.75
MD_REMOVE = False
-# ----------------------------- Other parameters ----------------------------------
+## Other parameters
[OTHER]
KEEP_REG_FILE = False
diff --git a/example/cfis/config_tile_Sx_exp_mccd.ini b/example/cfis/config_tile_Sx_exp_mccd.ini
index 6c287fcbc..66e041e10 100644
--- a/example/cfis/config_tile_Sx_exp_mccd.ini
+++ b/example/cfis/config_tile_Sx_exp_mccd.ini
@@ -21,8 +21,7 @@ RUN_NAME = run_sp_tile_Sx_exp_SxSePsf
# Module name, single string or comma-separated list of valid module runner names
MODULE = sextractor_runner, sextractor_runner, setools_runner,
mccd_preprocessing_runner, mccd_fit_val_runner,
- merge_starcat_runner, mccd_plots_runner,
- mccd_interp_runner
+ merge_starcat_runner, mccd_plots_runner
# Run mode, SMP or MPI
MODE = SMP
@@ -284,34 +283,3 @@ PLOT_RHO_STATS = False
# RHO_STATS_STYLE: can be 'HSC' or 'DES'
RHO_STATS_STYLE = HSC
-
-
-[MCCD_INTERP_RUNNER]
-
-# MODE: Define the way the MCCD interpolation will run.
-# CLASSIC for classical run.
-# MULTI-EPOCH for multi epoch.
-MODE = CLASSIC
-
-# Position parameter names
-# for multi-epoch XWIN_WORLD,YWIN_WORLD
-# For classical XWIN_IMAGE,YWIN_IMAGE:
-POSITION_PARAMS = XWIN_IMAGE,YWIN_IMAGE
-
-# Get PSF shapes calculated and saved on the output dict
-GET_SHAPES = True
-
-# Directory with PSF models
-PSF_MODEL_DIR = /Users/tliaudat/Documents/PhD/codes/venv_p3/MCCD_pipeline_integration/test_val_data/fitted_model/
-
-# PSF model patterns
-PSF_MODEL_PATTERN = fitted_model
-
-# PSF model separator
-PSF_MODEL_SEPARATOR = -
-
-# For multi-epoch purposes
-ME_LOG_WCS = $SP_RUN/output/log_exp_headers.sqlite
-
-
-
diff --git a/example/cfis/config_valjoint_Pl_mccd.ini b/example/cfis/config_valjoint_Pl_mccd.ini
new file mode 100644
index 000000000..65c5ae48b
--- /dev/null
+++ b/example/cfis/config_valjoint_Pl_mccd.ini
@@ -0,0 +1,94 @@
+# ShapePipe configuration file for validation of
+# joint catalogue;
+# PSF plots.
+
+
+## Default ShapePipe options
+[DEFAULT]
+
+# verbose mode (optional), default: True, print messages on terminal
+VERBOSE = True
+
+# Name of run (optional) default: shapepipe_run
+RUN_NAME = run_sp_Pl
+
+
+## ShapePipe execution options
+[EXECUTION]
+
+# MODULE (required) must be a valid module runner name (or a comma separated list of names)
+MODULE = mccd_plots_runner
+
+# Parallel processing mode, SMP or MPI
+MODE = SMP
+
+
+## ShapePipe file handling options
+[FILE]
+
+# Log file master name, optional, default: shapepipe
+LOG_NAME = log_sp
+
+# Runner log file name, optional, default: shapepipe_runs
+RUN_LOG_NAME = log_run_sp
+
+# INPUT_DIR (required) must be a valid directory containing input files for the first module
+INPUT_DIR = ./SP
+
+# OUTPUT_DIR (required) must be a valid directory to write the pipeline output files
+OUTPUT_DIR = ./output
+
+# FILE_PATTERN (opional) list of string patterns to identify input files
+FILE_PATTERN = unions_shapepipe_psf_2022_v1.0.2
+
+# FILE_EXT (opional) list of string extensions to identify input files
+FILE_EXT = .fits
+
+
+## ShapePipe job handling options
+[JOB]
+
+# BATCH_SIZE (optional) default is 1, i.e. run all jobs in serial
+SMP_BATCH_SIZE = 2
+
+# TIMEOUT (optional) default is None, i.e. no timeout limit applied
+TIMEOUT = 10:00:00
+
+
+## Module options
+[MCCD_PLOTS_RUNNER]
+
+# NUMBERING_SCHEME (optional) string with numbering pattern for input files
+NUMBERING_SCHEME =
+
+HDU = 1
+
+PSF = mccd
+
+# Options for focal-plane plots
+PLOT_MEANSHAPES = True
+
+# X_GRID, Y_GRID: correspond to the number of bins in each direction of each
+# CCD from the focal plane. Ex: each CCD will be binned in 5x10 regular grids.
+X_GRID = 20
+Y_GRID = 40
+
+# Optional: max values for elliptity and residual ellipticities
+MAX_E = 0.05
+MAX_DE = 0.005
+
+PLOT_HISTOGRAMS = True
+
+# REMOVE_OUTLIERS: Remove validated stars that are outliers in terms of shape
+# before drawing the plots.
+REMOVE_OUTLIERS = False
+
+
+# Options for rho statistics plots
+PLOT_RHO_STATS = True
+
+# RHO_STATS_STYLE: can be 'HSC' or 'DES'
+RHO_STATS_STYLE = HSC
+
+RHO_STATS_YLIM_L = 1e-10, 4e-5
+eHO_STATS_YLIM_R = 1e-8, 4e-5
diff --git a/example/cfis/final_cat.param b/example/cfis/final_cat.param
index 9bbbec7a0..6372a13e8 100644
--- a/example/cfis/final_cat.param
+++ b/example/cfis/final_cat.param
@@ -76,10 +76,6 @@ NGMIX_FLUX_ERR_2M
NGMIX_FLUX_ERR_2P
NGMIX_FLUX_ERR_NOSHEAR
-# Flag for multiple objects due to overlapping
-# tiles
-FLAG_TILING
-
# magnitude, mainly for plots
MAG_AUTO
diff --git a/example/cfis/mask_default/Messier_catalog_updated.fits b/example/cfis/mask_default/Messier_catalog_updated.fits
new file mode 100644
index 000000000..6a9f00096
Binary files /dev/null and b/example/cfis/mask_default/Messier_catalog_updated.fits differ
diff --git a/example/cfis/mask_default/Messier_catalog_updated.npy b/example/cfis/mask_default/Messier_catalog_updated.npy
deleted file mode 100644
index 2a59780e3..000000000
Binary files a/example/cfis/mask_default/Messier_catalog_updated.npy and /dev/null differ
diff --git a/example/cfis/mask_default/ngc_cat.fits b/example/cfis/mask_default/ngc_cat.fits
new file mode 100644
index 000000000..f51546da7
Binary files /dev/null and b/example/cfis/mask_default/ngc_cat.fits differ
diff --git a/example/cfis/tiles_all_order.txt b/example/cfis/tiles_all_order.txt
deleted file mode 100644
index 6641559b4..000000000
--- a/example/cfis/tiles_all_order.txt
+++ /dev/null
@@ -1,12621 +0,0 @@
-245.292
-230.293
-240.292
-247.291
-257.286
-245.290
-270.282
-271.283
-261.283
-264.286
-243.291
-249.289
-260.285
-253.289
-267.282
-251.289
-235.293
-268.284
-238.292
-256.288
-232.293
-253.287
-265.285
-262.283
-251.288
-242.293
-265.286
-266.283
-260.286
-258.287
-250.290
-228.294
-248.289
-266.286
-262.285
-246.288
-247.288
-239.294
-239.292
-275.282
-234.292
-266.282
-239.291
-261.284
-248.288
-267.285
-242.291
-241.290
-255.289
-267.284
-257.287
-255.286
-235.292
-272.284
-248.291
-256.287
-252.287
-267.283
-234.294
-252.286
-254.285
-244.289
-259.286
-242.289
-244.291
-242.292
-236.292
-262.286
-240.293
-251.287
-246.291
-241.293
-238.293
-247.290
-245.291
-247.289
-278.282
-236.294
-264.284
-237.294
-254.287
-231.293
-257.285
-249.291
-235.295
-271.284
-233.293
-256.285
-269.282
-234.295
-235.294
-246.292
-228.295
-258.285
-260.284
-262.282
-230.295
-240.294
-256.289
-264.283
-255.285
-261.287
-252.288
-268.283
-259.283
-258.288
-268.282
-234.293
-272.283
-237.291
-260.287
-224.295
-248.287
-231.295
-270.283
-259.285
-259.288
-236.295
-226.295
-245.289
-237.295
-243.289
-230.294
-261.286
-269.285
-236.291
-238.294
-258.284
-227.295
-263.282
-265.282
-240.291
-271.282
-241.292
-273.283
-232.294
-263.285
-259.284
-254.288
-260.283
-233.294
-251.290
-249.290
-243.293
-263.284
-231.294
-250.288
-240.290
-239.290
-274.282
-238.291
-247.292
-243.290
-254.289
-262.284
-244.292
-248.290
-252.290
-263.286
-232.295
-225.295
-243.292
-259.287
-261.285
-257.288
-237.293
-276.282
-264.282
-255.287
-265.284
-263.283
-244.290
-255.288
-246.290
-272.282
-229.294
-275.283
-266.284
-266.285
-250.287
-264.285
-258.286
-265.283
-227.294
-233.295
-269.284
-274.283
-233.292
-242.290
-268.285
-254.286
-252.289
-250.289
-273.282
-250.291
-249.287
-229.295
-262.287
-256.286
-270.284
-269.283
-257.284
-236.293
-253.288
-239.293
-241.291
-246.289
-249.288
-253.290
-251.286
-245.288
-237.292
-241.283
-239.284
-242.283
-234.286
-237.285
-240.284
-232.287
-243.283
-235.286
-238.285
-230.288
-241.284
-216.293
-219.292
-233.287
-244.283
-222.291
-236.286
-239.285
-242.284
-231.288
-217.293
-234.287
-220.292
-245.283
-237.286
-223.291
-240.285
-243.284
-232.288
-215.294
-235.287
-218.293
-246.283
-221.292
-238.286
-224.291
-241.285
-210.296
-207.297
-244.284
-233.288
-213.295
-216.294
-247.283
-236.287
-219.293
-222.292
-239.286
-242.285
-245.284
-208.297
-205.298
-234.288
-214.295
-211.296
-248.283
-237.287
-217.294
-220.293
-240.286
-223.292
-243.285
-246.284
-235.288
-265.277
-249.283
-212.296
-209.297
-206.298
-203.299
-238.287
-218.294
-215.295
-241.286
-221.293
-268.276
-224.292
-263.278
-244.285
-247.284
-266.277
-250.283
-236.288
-239.287
-269.276
-216.295
-213.296
-210.297
-207.298
-204.299
-201.300
-198.301
-242.286
-222.293
-219.294
-264.278
-245.285
-225.292
-248.284
-267.277
-237.288
-262.279
-240.287
-270.276
-243.286
-217.295
-214.296
-211.297
-208.298
-265.278
-246.285
-223.293
-220.294
-205.299
-202.300
-226.292
-199.301
-196.302
-268.277
-260.280
-249.284
-235.289
-271.276
-263.279
-238.288
-241.287
-266.278
-244.286
-258.281
-247.285
-224.293
-221.294
-218.295
-215.296
-212.297
-209.298
-206.299
-269.277
-261.280
-250.284
-227.292
-203.300
-200.301
-272.276
-264.279
-253.283
-236.289
-197.302
-239.288
-256.282
-242.287
-267.278
-259.281
-245.286
-270.277
-248.285
-262.280
-251.284
-225.293
-222.294
-219.295
-216.296
-213.297
-228.292
-210.298
-207.299
-273.276
-265.279
-254.283
-204.300
-237.289
-201.301
-268.278
-257.282
-240.288
-198.302
-243.287
-260.281
-246.286
-271.277
-249.285
-263.280
-252.284
-226.293
-223.294
-220.295
-217.296
-266.279
-255.283
-229.292
-214.297
-211.298
-208.299
-269.278
-258.282
-241.288
-205.300
-244.287
-202.301
-272.277
-261.281
-247.286
-199.302
-250.285
-264.280
-253.284
-267.279
-256.283
-227.293
-224.294
-230.292
-221.295
-218.296
-215.297
-270.278
-259.282
-239.289
-212.298
-262.281
-245.287
-242.288
-209.299
-273.277
-248.286
-206.300
-265.280
-203.301
-251.285
-268.279
-254.284
-257.283
-271.278
-231.292
-228.293
-260.282
-240.289
-237.290
-225.294
-222.295
-219.296
-263.281
-243.288
-216.297
-274.277
-246.287
-213.298
-266.280
-249.286
-210.299
-252.285
-207.300
-269.279
-255.284
-204.301
-188.306
-258.283
-272.278
-201.302
-185.307
-261.282
-235.291
-232.292
-275.277
-264.281
-241.289
-238.290
-229.293
-226.294
-223.295
-247.287
-244.288
-220.296
-182.308
-267.280
-250.286
-217.297
-253.285
-214.298
-270.279
-256.284
-211.299
-208.300
-273.278
-205.301
-189.306
-276.277
-265.281
-186.307
-268.280
-221.296
-271.279
-218.297
-215.298
-183.308
-274.278
-212.299
-277.277
-209.300
-266.281
-269.280
-206.301
-190.306
-272.279
-203.302
-222.296
-187.307
-275.278
-219.297
-216.298
-278.277
-213.299
-267.281
-281.276
-270.280
-210.300
-273.279
-253.286
-207.301
-276.278
-223.296
-191.306
-279.277
-220.297
-268.281
-217.298
-188.307
-271.280
-214.299
-274.279
-211.300
-277.278
-208.301
-280.277
-224.296
-205.302
-269.281
-221.297
-192.306
-272.280
-218.298
-275.279
-215.299
-189.307
-212.300
-270.281
-209.301
-225.296
-273.280
-222.297
-276.279
-206.302
-219.298
-193.306
-216.299
-190.307
-271.281
-213.300
-274.280
-226.296
-210.301
-277.279
-223.297
-207.302
-220.298
-194.306
-272.281
-217.299
-275.280
-278.279
-214.300
-191.307
-227.296
-211.301
-224.297
-221.298
-208.302
-273.281
-276.280
-279.279
-218.299
-195.306
-215.300
-228.296
-192.307
-225.297
-212.301
-274.281
-277.280
-222.298
-209.302
-280.279
-219.299
-206.303
-196.306
-216.300
-229.296
-278.280
-275.281
-281.279
-226.297
-213.301
-193.307
-223.298
-210.302
-220.299
-207.303
-279.280
-276.281
-230.296
-217.300
-197.306
-282.279
-227.297
-214.301
-194.307
-224.298
-211.302
-277.281
-221.299
-201.305
-280.280
-283.279
-231.296
-218.300
-208.303
-198.306
-228.297
-215.301
-225.298
-278.281
-195.307
-284.279
-281.280
-212.302
-222.299
-202.305
-232.296
-219.300
-209.303
-229.297
-199.306
-279.281
-216.301
-285.279
-282.280
-226.298
-206.304
-196.307
-223.299
-213.302
-233.296
-203.305
-220.300
-283.280
-280.281
-277.282
-230.297
-210.303
-286.279
-217.301
-200.306
-227.298
-207.304
-224.299
-214.302
-234.296
-197.307
-284.280
-281.281
-204.305
-287.279
-244.293
-221.300
-263.287
-231.297
-211.303
-260.288
-241.294
-257.289
-228.298
-254.290
-218.301
-201.306
-238.295
-208.304
-251.291
-288.279
-285.280
-282.281
-279.282
-276.283
-273.284
-248.292
-235.296
-225.299
-215.302
-270.285
-267.286
-264.287
-245.293
-198.307
-261.288
-232.297
-222.300
-205.305
-258.289
-212.303
-242.294
-255.290
-229.298
-239.295
-219.301
-289.279
-286.280
-283.281
-280.282
-277.283
-274.284
-252.291
-202.306
-271.285
-249.292
-226.299
-209.304
-268.286
-236.296
-265.287
-216.302
-262.288
-246.293
-259.289
-233.297
-223.300
-199.307
-243.294
-206.305
-287.280
-284.281
-256.290
-213.303
-290.279
-281.282
-278.283
-275.284
-253.291
-240.295
-230.298
-272.285
-220.301
-269.286
-250.292
-266.287
-237.296
-227.299
-203.306
-263.288
-210.304
-247.293
-217.302
-260.289
-234.297
-291.279
-288.280
-285.281
-257.290
-244.294
-224.300
-282.282
-279.283
-276.284
-207.305
-200.307
-273.285
-254.291
-214.303
-270.286
-241.295
-231.298
-267.287
-251.292
-221.301
-264.288
-238.296
-228.299
-261.289
-248.293
-211.304
-204.306
-292.279
-289.280
-286.281
-283.282
-218.302
-280.283
-258.290
-245.294
-235.297
-277.284
-274.285
-225.300
-255.291
-271.286
-242.295
-232.298
-208.305
-201.307
-268.287
-252.292
-215.303
-265.288
-222.301
-239.296
-293.279
-290.280
-287.281
-284.282
-262.289
-249.293
-229.299
-278.284
-259.290
-246.294
-236.297
-212.304
-205.306
-275.285
-219.302
-272.286
-256.291
-226.300
-269.287
-243.295
-253.292
-233.298
-294.279
-266.288
-216.303
-209.305
-291.280
-288.281
-263.289
-240.296
-223.301
-202.307
-250.293
-260.290
-276.285
-273.286
-247.294
-237.297
-257.291
-220.302
-213.304
-206.306
-270.287
-227.300
-295.279
-292.280
-267.288
-254.292
-244.295
-289.281
-234.298
-264.289
-251.293
-241.296
-224.301
-217.303
-210.305
-261.290
-203.307
-248.294
-271.287
-258.291
-238.297
-296.279
-293.280
-221.302
-214.304
-290.281
-268.288
-255.292
-245.295
-207.306
-235.298
-265.289
-252.293
-242.296
-262.290
-218.303
-211.305
-259.291
-249.294
-204.307
-297.279
-294.280
-291.281
-239.297
-256.292
-246.295
-266.289
-222.302
-215.304
-236.298
-208.306
-253.293
-263.290
-243.296
-298.279
-295.280
-292.281
-260.291
-250.294
-219.303
-212.305
-240.297
-205.307
-257.292
-267.289
-247.295
-264.290
-254.293
-237.298
-299.279
-296.280
-244.296
-209.306
-293.281
-261.291
-251.294
-241.297
-213.305
-258.292
-248.295
-206.307
-300.279
-297.280
-255.293
-294.281
-238.298
-245.296
-252.294
-210.306
-259.292
-242.297
-301.279
-249.295
-298.280
-295.281
-256.293
-239.298
-207.307
-246.296
-253.294
-302.279
-243.297
-299.280
-250.295
-296.281
-240.298
-247.296
-208.307
-254.294
-300.280
-297.281
-244.297
-251.295
-248.296
-241.298
-255.294
-209.307
-252.295
-245.297
-249.296
-242.298
-253.295
-246.297
-250.296
-243.298
-247.297
-244.298
-248.297
-000.239
-000.240
-000.241
-000.242
-000.243
-000.244
-000.245
-000.246
-000.247
-000.248
-000.249
-000.250
-000.251
-000.252
-001.239
-001.240
-001.241
-001.242
-001.243
-001.244
-001.245
-001.246
-001.247
-001.248
-001.249
-001.250
-001.251
-001.252
-002.239
-002.240
-002.241
-002.242
-002.243
-002.244
-002.245
-002.246
-002.247
-002.248
-002.249
-002.250
-002.251
-002.252
-003.239
-003.240
-003.241
-003.242
-003.243
-003.244
-003.245
-003.246
-003.247
-003.248
-003.249
-003.250
-003.251
-003.252
-004.239
-004.240
-004.241
-004.242
-004.243
-004.244
-004.245
-004.246
-004.247
-004.248
-004.249
-004.250
-004.251
-004.252
-005.239
-005.240
-005.241
-005.242
-005.243
-005.244
-005.245
-005.246
-005.247
-005.248
-005.249
-005.250
-005.251
-005.252
-006.239
-006.240
-006.241
-006.242
-006.243
-006.244
-006.245
-006.246
-006.247
-006.248
-006.249
-006.250
-006.251
-006.252
-007.239
-007.240
-007.241
-007.242
-007.243
-007.244
-007.245
-007.246
-007.247
-007.248
-007.249
-007.250
-007.251
-007.252
-008.239
-008.240
-008.241
-008.242
-008.243
-008.244
-008.245
-008.246
-008.247
-008.248
-008.249
-008.250
-008.251
-008.252
-009.239
-009.240
-009.241
-009.242
-009.243
-009.244
-009.245
-009.246
-009.247
-009.248
-009.249
-009.250
-009.251
-009.252
-010.239
-010.240
-010.241
-010.242
-010.243
-010.244
-010.245
-010.246
-010.247
-010.248
-010.249
-010.250
-010.251
-010.252
-011.239
-011.240
-011.241
-011.242
-011.243
-011.244
-011.245
-011.246
-011.247
-011.248
-011.249
-011.250
-011.251
-011.252
-012.239
-012.240
-012.241
-012.242
-012.243
-012.244
-012.245
-012.246
-012.247
-012.248
-012.249
-012.250
-012.251
-012.252
-013.239
-013.240
-013.241
-013.242
-013.243
-013.244
-013.245
-013.246
-013.247
-013.248
-013.249
-013.250
-014.239
-013.251
-013.252
-014.240
-014.241
-014.242
-014.243
-014.244
-014.245
-014.246
-014.247
-014.248
-014.249
-014.250
-015.239
-014.251
-015.240
-015.241
-015.242
-014.252
-015.243
-015.244
-015.245
-015.246
-015.247
-015.248
-015.249
-016.239
-016.240
-015.250
-015.251
-016.241
-016.242
-015.252
-016.243
-016.244
-016.245
-016.246
-016.247
-016.248
-016.249
-017.239
-017.240
-016.250
-016.251
-017.241
-017.242
-016.252
-017.243
-017.244
-017.245
-017.246
-017.247
-018.239
-017.248
-017.249
-018.240
-018.241
-017.250
-017.251
-018.242
-017.252
-018.243
-018.244
-018.245
-018.246
-018.247
-019.239
-018.248
-018.249
-019.240
-019.241
-018.250
-019.242
-019.243
-018.251
-018.252
-019.244
-019.245
-019.246
-019.247
-020.239
-020.240
-019.248
-019.249
-020.241
-019.250
-020.242
-020.243
-019.251
-019.252
-020.244
-020.245
-020.246
-020.247
-021.239
-021.240
-020.248
-020.249
-021.241
-021.242
-020.250
-021.243
-020.251
-021.244
-021.245
-020.252
-021.246
-022.239
-021.247
-022.240
-021.248
-021.249
-022.241
-022.242
-021.250
-022.243
-021.251
-022.244
-022.245
-021.252
-022.246
-023.239
-022.247
-023.240
-023.241
-022.248
-022.249
-023.242
-022.250
-023.243
-022.251
-023.244
-023.245
-022.252
-023.246
-024.239
-023.247
-024.240
-024.241
-023.248
-024.242
-023.249
-023.250
-024.243
-023.251
-024.244
-024.245
-023.252
-024.246
-025.239
-025.240
-024.247
-025.241
-024.248
-025.242
-024.249
-024.250
-025.243
-025.244
-024.251
-025.245
-024.252
-026.239
-025.246
-026.240
-025.247
-026.241
-025.248
-026.242
-026.243
-025.249
-026.244
-025.250
-026.245
-025.251
-027.239
-026.246
-025.252
-027.240
-026.247
-027.241
-027.242
-026.248
-027.243
-026.249
-027.244
-026.250
-027.245
-026.251
-028.239
-027.246
-026.252
-028.240
-028.241
-027.247
-028.242
-027.248
-028.243
-027.249
-028.244
-027.250
-028.245
-027.251
-029.239
-029.240
-028.246
-027.252
-029.241
-028.247
-029.242
-028.248
-029.243
-028.249
-029.244
-028.250
-030.239
-029.245
-028.251
-030.240
-029.246
-028.252
-030.241
-029.247
-030.242
-029.248
-030.243
-029.249
-030.244
-029.250
-031.239
-030.245
-029.251
-031.240
-030.246
-029.252
-031.241
-030.247
-031.242
-030.248
-031.243
-030.249
-031.244
-030.250
-032.239
-031.245
-030.251
-032.240
-031.246
-030.252
-032.241
-031.247
-032.242
-031.248
-032.243
-031.249
-032.244
-031.250
-033.239
-032.245
-031.251
-033.240
-033.241
-032.246
-033.242
-032.247
-031.252
-032.248
-033.243
-032.249
-034.239
-033.244
-032.250
-034.240
-033.245
-034.241
-033.246
-032.251
-034.242
-033.247
-032.252
-034.243
-033.248
-034.244
-033.249
-035.239
-033.250
-035.240
-034.245
-035.241
-034.246
-033.251
-035.242
-034.247
-033.252
-035.243
-034.248
-035.244
-034.249
-036.239
-035.245
-036.240
-034.250
-036.241
-035.246
-034.251
-036.242
-035.247
-034.252
-036.243
-035.248
-036.244
-035.249
-037.239
-036.245
-037.240
-035.250
-037.241
-036.246
-035.251
-037.242
-036.247
-035.252
-037.243
-036.248
-037.244
-036.249
-038.240
-037.245
-036.250
-038.241
-037.246
-036.251
-038.242
-037.247
-036.252
-038.243
-037.248
-038.244
-037.249
-039.240
-038.245
-039.241
-037.250
-039.242
-038.246
-037.251
-038.247
-039.243
-038.248
-037.252
-039.244
-040.240
-039.245
-038.249
-040.241
-038.250
-040.242
-039.246
-038.251
-039.247
-040.243
-039.248
-038.252
-040.244
-041.240
-040.245
-039.249
-041.241
-040.246
-039.250
-041.242
-041.243
-040.247
-039.251
-040.248
-042.240
-041.244
-041.245
-040.249
-042.241
-041.246
-040.250
-042.242
-042.243
-041.247
-041.248
-043.240
-042.244
-042.245
-041.249
-043.241
-042.246
-041.250
-043.242
-043.243
-042.247
-042.248
-044.240
-043.244
-044.241
-043.245
-042.249
-043.246
-042.250
-044.242
-044.243
-043.247
-044.244
-043.248
-045.240
-045.241
-044.245
-043.249
-045.242
-044.246
-043.250
-046.239
-045.243
-044.247
-045.244
-044.248
-046.240
-046.241
-045.245
-044.249
-046.242
-045.246
-044.250
-047.239
-046.243
-045.247
-047.240
-046.244
-045.248
-047.241
-046.245
-045.249
-047.242
-046.246
-045.250
-048.239
-047.243
-046.247
-048.240
-047.244
-046.248
-048.241
-047.245
-046.249
-048.242
-047.246
-048.243
-046.250
-047.247
-049.240
-048.244
-047.248
-049.241
-048.245
-047.249
-049.242
-048.246
-050.239
-049.243
-047.250
-048.247
-050.240
-049.244
-048.248
-050.241
-049.245
-048.249
-050.242
-049.246
-051.239
-050.243
-048.250
-051.240
-049.247
-050.244
-051.241
-050.245
-049.248
-051.242
-049.249
-050.246
-052.239
-051.243
-052.240
-050.247
-051.244
-052.241
-051.245
-050.248
-052.242
-051.246
-052.243
-053.240
-051.247
-052.244
-053.241
-052.245
-051.248
-053.242
-052.246
-053.243
-054.240
-053.244
-052.247
-054.241
-053.245
-052.248
-054.242
-053.246
-054.243
-055.240
-054.244
-053.247
-055.241
-054.245
-053.248
-055.242
-054.246
-056.240
-055.243
-055.244
-054.247
-056.241
-055.245
-054.248
-056.242
-056.243
-055.246
-057.240
-056.244
-055.247
-057.241
-057.242
-056.245
-055.248
-057.243
-056.246
-058.240
-057.244
-056.247
-058.241
-058.242
-057.245
-056.248
-058.243
-057.246
-059.240
-059.241
-058.244
-057.247
-059.242
-058.245
-057.248
-060.240
-059.243
-058.246
-060.241
-059.244
-058.247
-060.242
-059.245
-058.248
-061.240
-060.243
-059.246
-061.241
-060.244
-059.247
-061.242
-060.245
-059.248
-062.240
-061.243
-060.246
-062.241
-061.244
-060.247
-063.239
-062.242
-061.245
-063.240
-062.243
-061.246
-063.241
-062.244
-061.247
-062.245
-064.240
-062.246
-590.240
-587.241
-593.239
-594.239
-591.240
-588.241
-585.242
-595.239
-592.240
-589.241
-586.242
-583.243
-596.239
-593.240
-590.241
-587.242
-584.243
-594.240
-597.239
-591.241
-588.242
-585.243
-582.244
-598.239
-595.240
-592.241
-589.242
-586.243
-583.244
-599.239
-596.240
-593.241
-590.242
-587.243
-584.244
-581.245
-600.239
-597.240
-594.241
-591.242
-588.243
-585.244
-582.245
-601.239
-598.240
-595.241
-592.242
-589.243
-586.244
-583.245
-602.239
-599.240
-580.246
-596.241
-593.242
-590.243
-587.244
-584.245
-603.239
-600.240
-597.241
-581.246
-594.242
-591.243
-578.247
-588.244
-585.245
-604.239
-601.240
-598.241
-582.246
-595.242
-592.243
-579.247
-589.244
-586.245
-605.239
-602.240
-599.241
-583.246
-596.242
-593.243
-580.247
-590.244
-587.245
-606.239
-603.240
-600.241
-597.242
-584.246
-594.243
-591.244
-581.247
-588.245
-578.248
-607.239
-604.240
-601.241
-598.242
-585.246
-595.243
-592.244
-582.247
-589.245
-579.248
-608.239
-605.240
-602.241
-599.242
-586.246
-596.243
-576.249
-593.244
-583.247
-590.245
-580.248
-609.239
-606.240
-603.241
-600.242
-587.246
-597.243
-577.249
-594.244
-584.247
-610.239
-591.245
-581.248
-574.250
-607.240
-604.241
-601.242
-588.246
-598.243
-578.249
-595.244
-585.247
-611.239
-608.240
-592.245
-582.248
-575.250
-605.241
-602.242
-589.246
-599.243
-579.249
-596.244
-586.247
-612.239
-609.240
-593.245
-583.248
-576.250
-606.241
-603.242
-590.246
-600.243
-580.249
-597.244
-587.247
-594.245
-613.239
-610.240
-607.241
-584.248
-577.250
-604.242
-591.246
-601.243
-581.249
-598.244
-588.247
-614.239
-595.245
-611.240
-608.241
-585.248
-578.250
-605.242
-592.246
-602.243
-582.249
-575.251
-599.244
-589.247
-615.239
-612.240
-596.245
-609.241
-586.248
-579.250
-606.242
-593.246
-572.252
-603.243
-583.249
-600.244
-590.247
-576.251
-616.239
-613.240
-597.245
-569.253
-610.241
-587.248
-580.250
-607.242
-594.246
-573.252
-604.243
-601.244
-584.249
-591.247
-577.251
-617.239
-614.240
-598.245
-570.253
-611.241
-588.248
-581.250
-608.242
-595.246
-605.243
-574.252
-602.244
-585.249
-618.239
-592.247
-578.251
-615.240
-612.241
-599.245
-609.242
-589.248
-582.250
-596.246
-606.243
-575.252
-603.244
-586.249
-619.239
-616.240
-593.247
-579.251
-613.241
-600.245
-610.242
-590.248
-597.246
-583.250
-607.243
-576.252
-604.244
-587.249
-620.239
-617.240
-594.247
-580.251
-614.241
-601.245
-611.242
-591.248
-608.243
-598.246
-584.250
-577.252
-605.244
-588.249
-621.239
-618.240
-595.247
-581.251
-615.241
-602.245
-612.242
-592.248
-609.243
-599.246
-585.250
-578.252
-622.239
-606.244
-589.249
-619.240
-596.247
-582.251
-616.241
-603.245
-613.242
-593.248
-610.243
-600.246
-586.250
-579.252
-623.239
-607.244
-620.240
-617.241
-597.247
-590.249
-604.245
-583.251
-614.242
-594.248
-611.243
-601.246
-587.250
-624.239
-621.240
-608.244
-580.252
-618.241
-598.247
-591.249
-615.242
-605.245
-584.251
-595.248
-612.243
-602.246
-588.250
-625.239
-622.240
-609.244
-581.252
-619.241
-599.247
-592.249
-616.242
-606.245
-585.251
-613.243
-603.246
-596.248
-589.250
-626.239
-610.244
-623.240
-273.242
-256.253
-258.252
-275.241
-255.254
-260.251
-274.242
-271.244
-268.246
-277.240
-262.250
-257.253
-252.256
-245.260
-273.243
-270.245
-259.252
-254.255
-247.259
-276.241
-264.249
-249.258
-279.239
-261.251
-256.254
-275.242
-272.244
-269.246
-266.248
-251.257
-244.261
-278.240
-263.250
-258.253
-253.256
-246.260
-277.241
-274.243
-271.245
-268.247
-260.252
-255.255
-248.259
-265.249
-250.258
-280.239
-262.251
-257.254
-276.242
-273.244
-270.246
-267.248
-252.257
-243.262
-279.240
-264.250
-259.253
-245.261
-254.256
-247.260
-278.241
-275.243
-272.245
-269.247
-261.252
-256.255
-249.259
-281.239
-266.249
-274.244
-263.251
-258.254
-251.258
-277.242
-271.246
-268.248
-253.257
-280.240
-260.253
-244.262
-273.245
-265.250
-255.256
-246.261
-279.241
-276.243
-270.247
-262.252
-248.260
-267.249
-257.255
-250.259
-275.244
-264.251
-252.258
-281.240
-278.242
-272.246
-269.248
-259.254
-261.253
-254.257
-277.243
-274.245
-266.250
-256.256
-280.241
-271.247
-263.252
-268.249
-258.255
-279.242
-276.244
-282.240
-273.246
-270.248
-265.251
-260.254
-253.258
-255.257
-278.243
-275.245
-267.250
-262.253
-281.241
-272.247
-257.256
-269.249
-264.252
-259.255
-280.242
-277.244
-283.240
-274.246
-271.248
-266.251
-261.254
-254.258
-282.241
-279.243
-276.245
-268.250
-263.253
-256.257
-273.247
-258.256
-270.249
-265.252
-281.242
-278.244
-275.246
-260.255
-284.240
-272.248
-267.251
-262.254
-255.258
-283.241
-280.243
-277.245
-269.250
-264.253
-257.257
-274.247
-259.256
-271.249
-266.252
-285.240
-282.242
-279.244
-276.246
-261.255
-273.248
-268.251
-263.254
-256.258
-284.241
-281.243
-278.245
-270.250
-265.253
-258.257
-275.247
-272.249
-267.252
-260.256
-286.240
-283.242
-280.244
-277.246
-262.255
-269.251
-274.248
-264.254
-257.258
-285.241
-282.243
-279.245
-271.250
-276.247
-266.253
-259.257
-273.249
-268.252
-261.256
-287.240
-284.242
-281.244
-278.246
-270.251
-263.255
-275.248
-265.254
-286.241
-283.243
-280.245
-272.250
-258.258
-277.247
-267.253
-260.257
-285.242
-274.249
-262.256
-288.240
-282.244
-279.246
-269.252
-271.251
-264.255
-287.241
-284.243
-276.248
-266.254
-281.245
-273.250
-259.258
-278.247
-268.253
-286.242
-275.249
-261.257
-289.240
-283.244
-280.246
-270.252
-263.256
-265.255
-288.241
-285.243
-277.248
-272.251
-282.245
-274.250
-267.254
-279.247
-269.253
-260.258
-290.240
-287.242
-284.244
-262.257
-281.246
-276.249
-271.252
-264.256
-266.255
-253.262
-292.239
-289.241
-286.243
-278.248
-273.251
-283.245
-268.254
-259.259
-280.247
-275.250
-270.253
-261.258
-291.240
-288.242
-285.244
-263.257
-282.246
-277.249
-272.252
-265.256
-293.239
-290.241
-287.243
-279.248
-274.251
-267.255
-256.261
-254.262
-284.245
-269.254
-281.247
-276.250
-260.259
-292.240
-289.242
-286.244
-271.253
-262.258
-283.246
-278.249
-273.252
-264.257
-266.256
-294.239
-291.241
-288.243
-280.248
-275.251
-268.255
-255.262
-285.245
-270.254
-257.261
-282.247
-277.250
-261.259
-259.260
-293.240
-290.242
-287.244
-272.253
-263.258
-284.246
-279.249
-274.252
-265.257
-292.241
-267.256
-295.239
-289.243
-281.248
-276.251
-269.255
-252.264
-250.265
-248.266
-286.245
-258.261
-256.262
-254.263
-246.267
-244.268
-294.240
-291.242
-283.247
-278.250
-271.254
-260.260
-288.244
-273.253
-262.259
-285.246
-280.249
-266.257
-264.258
-293.241
-275.252
-268.256
-290.243
-287.245
-282.248
-277.251
-270.255
-255.263
-253.264
-251.265
-249.266
-295.240
-292.242
-284.247
-279.250
-272.254
-259.261
-257.262
-247.267
-245.268
-289.244
-274.253
-263.259
-261.260
-286.246
-281.249
-265.258
-294.241
-291.243
-276.252
-267.257
-288.245
-283.248
-278.251
-269.256
-271.255
-296.240
-293.242
-285.247
-280.250
-273.254
-258.262
-256.263
-254.264
-252.265
-250.266
-248.267
-290.244
-262.260
-260.261
-246.268
-287.246
-282.249
-275.253
-266.258
-264.259
-295.241
-292.243
-277.252
-268.257
-289.245
-284.248
-270.256
-279.251
-272.255
-297.240
-294.242
-286.247
-281.250
-274.254
-291.244
-261.261
-259.262
-257.263
-255.264
-253.265
-251.266
-249.267
-288.246
-283.249
-276.253
-265.259
-263.260
-247.268
-296.241
-293.243
-278.252
-267.258
-290.245
-285.248
-269.257
-280.251
-271.256
-298.240
-295.242
-287.247
-282.250
-273.255
-292.244
-275.254
-258.263
-256.264
-297.241
-289.246
-284.249
-277.253
-264.260
-262.261
-260.262
-254.265
-252.266
-250.267
-294.243
-279.252
-268.258
-266.259
-248.268
-291.245
-286.248
-270.257
-299.240
-281.251
-272.256
-296.242
-293.244
-288.247
-283.250
-274.255
-276.254
-298.241
-290.246
-285.249
-278.253
-263.261
-261.262
-259.263
-257.264
-255.265
-295.243
-280.252
-267.259
-265.260
-253.266
-251.267
-292.245
-287.248
-271.257
-269.258
-300.240
-297.242
-282.251
-273.256
-294.244
-289.247
-284.250
-275.255
-277.254
-299.241
-291.246
-286.249
-279.253
-296.243
-266.260
-264.261
-262.262
-260.263
-258.264
-256.265
-293.245
-288.248
-281.252
-270.258
-268.259
-254.266
-252.267
-301.240
-298.242
-283.251
-272.257
-295.244
-290.247
-276.255
-274.256
-285.250
-278.254
-300.241
-292.246
-287.249
-297.243
-280.253
-265.261
-263.262
-261.263
-294.245
-289.248
-282.252
-269.259
-267.260
-259.264
-257.265
-255.266
-302.240
-299.242
-284.251
-273.257
-271.258
-253.267
-296.244
-291.247
-275.256
-286.250
-277.255
-301.241
-293.246
-288.249
-279.254
-298.243
-281.253
-303.240
-295.245
-290.248
-283.252
-268.260
-266.261
-264.262
-262.263
-260.264
-300.242
-285.251
-272.258
-270.259
-258.265
-256.266
-297.244
-292.247
-276.256
-274.257
-254.267
-302.241
-287.250
-278.255
-299.243
-294.246
-289.249
-280.254
-282.253
-304.240
-296.245
-291.248
-284.252
-301.242
-273.258
-271.259
-269.260
-267.261
-265.262
-263.263
-261.264
-259.265
-298.244
-293.247
-286.251
-275.257
-257.266
-306.239
-303.241
-288.250
-279.255
-277.256
-255.267
-300.243
-295.246
-290.249
-281.254
-253.268
-283.253
-305.240
-297.245
-292.248
-285.252
-302.242
-270.260
-268.261
-266.262
-264.263
-299.244
-294.247
-287.251
-276.257
-274.258
-272.259
-262.264
-260.265
-307.239
-304.241
-289.250
-278.256
-258.266
-301.243
-296.246
-280.255
-256.267
-291.249
-284.253
-282.254
-306.240
-303.242
-298.245
-293.248
-286.252
-308.239
-300.244
-295.247
-288.251
-275.258
-273.259
-271.260
-269.261
-267.262
-265.263
-305.241
-290.250
-279.256
-277.257
-263.264
-261.265
-302.243
-297.246
-281.255
-259.266
-257.267
-307.240
-292.249
-283.254
-255.268
-304.242
-299.245
-294.248
-285.253
-287.252
-309.239
-301.244
-296.247
-289.251
-274.259
-272.260
-270.261
-306.241
-291.250
-278.257
-276.258
-268.262
-266.263
-264.264
-303.243
-298.246
-282.255
-280.256
-262.265
-308.240
-293.249
-284.254
-260.266
-258.267
-305.242
-300.245
-295.248
-286.253
-288.252
-302.244
-297.247
-290.251
-307.241
-292.250
-277.258
-275.259
-273.260
-271.261
-269.262
-267.263
-304.243
-299.246
-281.256
-279.257
-265.264
-309.240
-301.245
-294.249
-285.254
-283.255
-263.265
-261.266
-306.242
-296.248
-287.253
-259.267
-303.244
-289.252
-308.241
-298.247
-291.251
-293.250
-276.259
-274.260
-305.243
-300.246
-282.256
-280.257
-278.258
-272.261
-270.262
-268.263
-310.240
-302.245
-295.249
-284.255
-307.242
-297.248
-288.253
-286.254
-304.244
-290.252
-309.241
-299.247
-292.251
-306.243
-301.246
-294.250
-281.257
-279.258
-277.259
-275.260
-273.261
-271.262
-311.240
-303.245
-296.249
-285.255
-283.256
-308.242
-298.248
-287.254
-305.244
-291.252
-289.253
-310.241
-300.247
-293.251
-307.243
-302.246
-312.240
-295.250
-280.258
-278.259
-276.260
-309.242
-304.245
-297.249
-286.255
-284.256
-282.257
-274.261
-299.248
-288.254
-306.244
-290.253
-311.241
-301.247
-292.252
-308.243
-303.246
-294.251
-313.240
-296.250
-310.242
-305.245
-298.249
-285.256
-283.257
-281.258
-279.259
-277.260
-275.261
-300.248
-289.254
-287.255
-273.262
-307.244
-291.253
-312.241
-302.247
-293.252
-309.243
-304.246
-295.251
-314.240
-297.250
-311.242
-306.245
-299.249
-284.257
-282.258
-280.259
-301.248
-288.255
-286.256
-278.260
-276.261
-274.262
-313.241
-308.244
-292.253
-290.254
-303.247
-294.252
-310.243
-305.246
-296.251
-315.240
-298.250
-312.242
-307.245
-300.249
-302.248
-289.255
-287.256
-285.257
-283.258
-281.259
-279.260
-277.261
-314.241
-309.244
-293.253
-291.254
-275.262
-304.247
-295.252
-273.263
-316.240
-311.243
-306.246
-297.251
-299.250
-313.242
-308.245
-301.249
-303.248
-288.256
-286.257
-284.258
-282.259
-315.241
-310.244
-292.254
-290.255
-280.260
-278.261
-305.247
-296.252
-294.253
-276.262
-274.263
-317.240
-312.243
-307.246
-298.251
-300.250
-314.242
-309.245
-302.249
-319.239
-304.248
-316.241
-311.244
-293.254
-291.255
-289.256
-287.257
-285.258
-283.259
-281.260
-313.243
-306.247
-295.253
-279.261
-277.262
-318.240
-308.246
-299.251
-297.252
-275.263
-315.242
-301.250
-320.239
-310.245
-303.249
-305.248
-317.241
-312.244
-292.255
-290.256
-288.257
-286.258
-284.259
-314.243
-307.247
-296.253
-294.254
-282.260
-280.261
-319.240
-309.246
-300.251
-298.252
-278.262
-316.242
-302.250
-276.263
-321.239
-311.245
-304.249
-318.241
-313.244
-306.248
-291.256
-289.257
-287.258
-315.243
-308.247
-297.253
-295.254
-293.255
-285.259
-283.260
-320.240
-310.246
-299.252
-281.261
-279.262
-317.242
-303.250
-301.251
-322.239
-312.245
-305.249
-319.241
-314.244
-307.248
-321.240
-316.243
-309.247
-296.254
-294.255
-292.256
-290.257
-288.258
-286.259
-311.246
-300.252
-298.253
-284.260
-318.242
-302.251
-323.239
-313.245
-304.250
-320.241
-315.244
-306.249
-308.248
-322.240
-317.243
-310.247
-297.254
-295.255
-293.256
-291.257
-289.258
-312.246
-301.252
-299.253
-287.259
-285.260
-319.242
-303.251
-283.261
-314.245
-305.250
-321.241
-316.244
-307.249
-309.248
-323.240
-318.243
-311.247
-296.255
-294.256
-313.246
-302.252
-300.253
-298.254
-292.257
-290.258
-288.259
-320.242
-315.245
-304.251
-286.260
-284.261
-306.250
-322.241
-317.244
-308.249
-310.248
-324.240
-319.243
-312.247
-321.242
-314.246
-301.253
-299.254
-297.255
-295.256
-293.257
-291.258
-316.245
-305.251
-303.252
-289.259
-287.260
-323.241
-307.250
-285.261
-318.244
-309.249
-283.262
-325.240
-311.248
-281.263
-320.243
-313.247
-279.264
-322.242
-315.246
-302.253
-300.254
-298.255
-296.256
-294.257
-317.245
-306.251
-304.252
-292.258
-290.259
-324.241
-308.250
-288.260
-319.244
-310.249
-286.261
-326.240
-321.243
-312.248
-284.262
-314.247
-282.263
-323.242
-316.246
-301.254
-299.255
-297.256
-318.245
-307.251
-305.252
-303.253
-295.257
-293.258
-325.241
-309.250
-291.259
-289.260
-320.244
-311.249
-287.261
-327.240
-322.243
-313.248
-285.262
-315.247
-283.263
-324.242
-317.246
-319.245
-306.252
-304.253
-302.254
-300.255
-298.256
-296.257
-281.264
-326.241
-310.250
-308.251
-294.258
-292.259
-321.244
-312.249
-290.260
-328.240
-323.243
-314.248
-288.261
-316.247
-286.262
-325.242
-318.246
-284.263
-320.245
-307.252
-305.253
-303.254
-301.255
-299.256
-327.241
-322.244
-311.250
-309.251
-297.257
-295.258
-329.240
-313.249
-293.259
-291.260
-324.243
-315.248
-289.261
-317.247
-287.262
-326.242
-319.246
-328.241
-321.245
-306.253
-304.254
-302.255
-285.263
-323.244
-312.250
-310.251
-308.252
-300.256
-298.257
-296.258
-330.240
-314.249
-294.259
-325.243
-316.248
-292.260
-327.242
-318.247
-290.261
-320.246
-288.262
-329.241
-322.245
-286.263
-324.244
-311.251
-309.252
-307.253
-305.254
-303.255
-301.256
-299.257
-331.240
-315.249
-313.250
-297.258
-326.243
-317.248
-295.259
-293.260
-328.242
-319.247
-291.261
-321.246
-330.241
-323.245
-289.262
-325.244
-312.251
-310.252
-308.253
-306.254
-304.255
-302.256
-287.263
-332.240
-316.249
-314.250
-300.257
-298.258
-327.243
-318.248
-296.259
-334.239
-329.242
-320.247
-294.260
-322.246
-331.241
-324.245
-326.244
-313.251
-311.252
-309.253
-307.254
-305.255
-333.240
-328.243
-317.249
-315.250
-303.256
-301.257
-319.248
-299.258
-335.239
-330.242
-321.247
-297.259
-295.260
-323.246
-332.241
-325.245
-293.261
-334.240
-327.244
-314.251
-312.252
-310.253
-308.254
-291.262
-329.243
-318.249
-316.250
-306.255
-304.256
-302.257
-289.263
-336.239
-300.258
-331.242
-322.247
-298.259
-333.241
-324.246
-296.260
-326.245
-335.240
-328.244
-330.243
-309.254
-307.255
-305.256
-292.262
-303.257
-290.263
-332.242
-301.258
-299.259
-334.241
-325.246
-327.245
-297.260
-336.240
-329.244
-295.261
-331.243
-293.262
-333.242
-306.256
-304.257
-302.258
-291.263
-335.241
-326.246
-300.259
-289.264
-328.245
-337.240
-330.244
-332.243
-334.242
-294.262
-292.263
-336.241
-329.245
-327.246
-338.240
-290.264
-331.244
-333.243
-335.242
-295.262
-328.246
-337.241
-330.245
-293.263
-339.240
-332.244
-291.264
-334.243
-336.242
-338.241
-329.246
-331.245
-340.240
-333.244
-294.263
-335.243
-337.242
-339.241
-330.246
-332.245
-341.240
-334.244
-336.243
-338.242
-340.241
-331.246
-333.245
-342.240
-335.244
-337.243
-339.242
-341.241
-332.246
-343.240
-334.245
-336.244
-338.243
-340.242
-342.241
-333.246
-344.240
-335.245
-337.244
-339.243
-341.242
-343.241
-334.246
-345.240
-336.245
-338.244
-340.243
-342.242
-344.241
-335.246
-337.245
-339.244
-341.243
-343.242
-345.241
-340.244
-126.288
-120.292
-117.294
-128.287
-125.289
-114.296
-119.293
-116.295
-130.286
-127.288
-124.290
-113.297
-121.292
-118.294
-129.287
-126.289
-115.296
-123.291
-120.293
-112.298
-134.284
-131.286
-128.288
-117.295
-125.290
-122.292
-114.297
-136.283
-133.285
-119.294
-130.287
-127.289
-124.291
-116.296
-138.282
-135.284
-121.293
-141.280
-132.286
-129.288
-113.298
-126.290
-118.295
-140.281
-137.283
-123.292
-115.297
-143.279
-134.285
-131.287
-128.289
-120.294
-125.291
-139.282
-117.296
-145.278
-142.280
-136.284
-133.286
-122.293
-130.288
-127.290
-119.295
-114.298
-141.281
-138.283
-147.277
-144.279
-135.285
-124.292
-132.287
-116.297
-153.273
-129.289
-121.294
-143.280
-140.282
-126.291
-156.271
-149.276
-146.278
-137.284
-134.286
-118.296
-152.274
-131.288
-123.293
-155.272
-145.279
-142.281
-139.283
-128.290
-158.270
-148.277
-136.285
-120.295
-151.275
-133.287
-125.292
-161.268
-154.273
-130.289
-157.271
-147.278
-144.280
-141.282
-122.294
-117.297
-150.276
-138.284
-127.291
-160.269
-153.274
-135.286
-156.272
-132.288
-124.293
-119.296
-163.267
-159.270
-149.277
-146.279
-143.281
-140.283
-152.275
-137.285
-129.290
-170.262
-162.268
-155.273
-134.287
-121.295
-174.259
-158.271
-126.292
-169.263
-165.266
-151.276
-148.278
-145.280
-142.282
-131.289
-173.260
-161.269
-154.274
-139.284
-123.294
-118.297
-168.264
-164.267
-157.272
-136.286
-128.291
-172.261
-160.270
-133.288
-176.258
-153.275
-150.277
-147.279
-144.281
-125.293
-120.296
-171.262
-167.265
-163.268
-156.273
-141.283
-138.285
-130.290
-175.259
-159.271
-170.263
-166.266
-135.287
-122.295
-174.260
-162.269
-155.274
-152.276
-149.278
-146.280
-143.282
-127.292
-178.257
-169.264
-165.267
-158.272
-140.284
-132.289
-173.261
-161.270
-137.286
-124.294
-182.254
-177.258
-168.265
-151.277
-148.279
-129.291
-119.297
-176.259
-172.262
-164.268
-157.273
-154.275
-145.281
-134.288
-181.255
-160.271
-142.283
-126.293
-180.256
-175.260
-171.263
-167.266
-139.285
-131.290
-121.296
-163.269
-153.276
-150.278
-147.280
-136.287
-184.253
-179.257
-174.261
-170.264
-166.267
-159.272
-156.274
-144.282
-178.258
-141.284
-133.289
-128.292
-123.295
-183.254
-173.262
-169.265
-162.270
-182.255
-177.259
-165.268
-155.275
-152.277
-149.279
-138.286
-181.256
-172.263
-158.273
-146.281
-135.288
-130.291
-125.294
-120.297
-176.260
-168.266
-161.271
-143.283
-186.252
-180.257
-164.269
-140.285
-127.293
-185.253
-175.261
-171.264
-167.267
-157.274
-154.276
-151.278
-148.280
-132.290
-122.296
-184.254
-179.258
-160.272
-145.282
-137.287
-183.255
-178.259
-174.262
-170.265
-163.270
-142.284
-129.292
-189.250
-166.268
-134.289
-124.295
-188.251
-182.256
-177.260
-173.263
-169.266
-159.273
-156.275
-153.277
-150.279
-139.286
-187.252
-181.257
-162.271
-147.281
-131.291
-186.253
-176.261
-172.264
-165.269
-144.283
-136.288
-126.294
-185.254
-180.258
-168.267
-158.274
-155.276
-152.278
-141.285
-121.297
-191.249
-175.262
-161.272
-149.280
-133.290
-190.250
-184.255
-179.259
-171.265
-164.270
-146.282
-138.287
-128.293
-197.244
-189.251
-183.256
-167.268
-143.284
-123.296
-196.245
-188.252
-178.260
-174.263
-170.266
-160.273
-157.275
-154.277
-135.289
-130.292
-195.246
-194.247
-187.253
-182.257
-163.271
-151.279
-148.281
-140.286
-125.295
-186.254
-177.261
-173.264
-166.269
-192.249
-181.258
-169.267
-145.283
-137.288
-132.291
-203.239
-202.240
-201.241
-191.250
-185.255
-180.259
-176.262
-172.265
-162.272
-159.274
-156.276
-153.278
-142.285
-127.294
-200.242
-199.243
-198.244
-190.251
-184.256
-165.270
-150.280
-122.297
-197.245
-189.252
-179.260
-175.263
-168.268
-147.282
-139.287
-134.290
-196.246
-195.247
-188.253
-183.257
-171.266
-161.273
-158.275
-144.284
-129.293
-194.248
-178.261
-164.271
-155.277
-152.279
-124.296
-193.249
-187.254
-182.258
-174.264
-167.269
-149.281
-141.286
-136.289
-131.292
-204.239
-203.240
-202.241
-201.242
-192.250
-186.255
-170.267
-200.243
-199.244
-191.251
-181.259
-177.262
-173.265
-163.272
-160.274
-157.276
-146.283
-126.295
-198.245
-197.246
-190.252
-185.256
-166.270
-154.278
-138.288
-133.291
-196.247
-180.260
-176.263
-169.268
-151.280
-143.285
-128.294
-195.248
-189.253
-184.257
-172.266
-148.282
-194.249
-188.254
-183.258
-179.261
-175.264
-165.271
-162.273
-159.275
-156.277
-140.287
-135.290
-123.297
-205.239
-204.240
-203.241
-202.242
-193.250
-168.269
-153.279
-145.284
-130.293
-201.243
-200.244
-192.251
-187.255
-182.259
-178.262
-171.267
-150.281
-125.296
-199.245
-198.246
-191.252
-186.256
-174.265
-164.272
-161.274
-142.286
-137.289
-132.292
-197.247
-181.260
-167.270
-158.276
-155.278
-147.283
-196.248
-190.253
-185.257
-177.263
-170.268
-152.280
-139.288
-127.295
-195.249
-189.254
-173.266
-144.285
-134.291
-205.240
-204.241
-203.242
-194.250
-184.258
-180.261
-176.264
-166.271
-163.273
-160.275
-149.282
-129.294
-202.243
-201.244
-193.251
-188.255
-169.269
-157.277
-141.287
-200.245
-199.246
-183.259
-179.262
-172.267
-154.279
-146.284
-136.290
-198.247
-192.252
-187.256
-175.265
-151.281
-131.293
-124.297
-197.248
-191.253
-186.257
-182.260
-178.263
-168.270
-165.272
-162.274
-159.276
-143.286
-138.289
-206.240
-196.249
-171.268
-156.278
-148.283
-133.292
-126.296
-205.241
-204.242
-203.243
-195.250
-190.254
-185.258
-181.261
-174.266
-153.280
-202.244
-194.251
-189.255
-177.264
-167.271
-164.273
-145.285
-140.288
-128.295
-201.245
-200.246
-184.259
-173.267
-170.269
-161.275
-158.277
-150.282
-135.291
-199.247
-193.252
-188.256
-180.262
-155.279
-130.294
-198.248
-192.253
-183.260
-176.265
-147.284
-142.287
-137.290
-207.240
-206.241
-197.249
-187.257
-179.263
-169.270
-166.272
-163.274
-152.281
-205.242
-204.243
-196.250
-191.254
-175.266
-172.268
-160.276
-144.286
-132.293
-125.297
-203.244
-190.255
-186.258
-182.261
-157.278
-149.283
-139.289
-202.245
-201.246
-195.251
-178.264
-168.271
-154.280
-134.292
-127.296
-200.247
-194.252
-189.256
-185.259
-181.262
-174.267
-171.269
-165.273
-162.275
-146.285
-141.288
-199.248
-193.253
-177.265
-159.277
-151.282
-129.295
-208.240
-207.241
-198.249
-188.257
-184.260
-156.279
-136.291
-206.242
-205.243
-197.250
-192.254
-180.263
-173.268
-170.270
-167.272
-164.274
-148.284
-143.287
-204.244
-203.245
-187.258
-183.261
-176.266
-161.276
-153.281
-131.294
-202.246
-196.251
-191.255
-179.264
-158.278
-201.247
-195.252
-186.259
-150.283
-145.286
-133.293
-200.248
-190.256
-182.262
-175.267
-172.269
-169.271
-166.273
-163.275
-155.280
-126.297
-209.240
-208.241
-207.242
-199.249
-194.253
-178.265
-160.277
-147.285
-135.292
-206.243
-193.254
-189.257
-185.260
-181.263
-152.282
-142.288
-205.244
-204.245
-198.250
-174.268
-171.270
-168.272
-157.279
-203.246
-197.251
-192.255
-188.258
-184.261
-177.266
-165.274
-149.284
-144.287
-202.247
-196.252
-180.264
-162.276
-154.281
-211.239
-210.240
-201.248
-191.256
-187.259
-183.262
-159.278
-132.294
-209.241
-208.242
-200.249
-195.253
-176.267
-173.269
-170.271
-167.273
-156.280
-151.283
-146.286
-207.243
-190.257
-186.260
-179.265
-164.275
-134.293
-206.244
-205.245
-199.250
-194.254
-182.263
-161.277
-204.246
-198.251
-193.255
-189.258
-185.261
-175.268
-172.270
-169.272
-158.279
-153.282
-148.285
-143.288
-203.247
-178.266
-166.274
-212.239
-211.240
-202.248
-197.252
-192.256
-188.259
-181.264
-163.276
-155.281
-150.284
-210.241
-209.242
-201.249
-196.253
-184.262
-160.278
-145.287
-208.243
-207.244
-191.257
-177.267
-174.269
-171.271
-168.273
-206.245
-200.250
-195.254
-187.260
-180.265
-165.275
-157.280
-152.283
-147.286
-205.246
-199.251
-190.258
-183.263
-162.277
-204.247
-194.255
-186.261
-176.268
-173.270
-213.239
-212.240
-211.241
-203.248
-198.252
-179.266
-170.272
-167.274
-159.279
-154.282
-149.285
-210.242
-197.253
-193.256
-189.259
-182.264
-164.276
-144.288
-209.243
-208.244
-202.249
-185.262
-156.281
-151.284
-207.245
-201.250
-196.254
-192.257
-188.260
-181.265
-178.267
-175.269
-172.271
-161.278
-146.287
-206.246
-200.251
-184.263
-169.273
-205.247
-195.255
-191.258
-166.275
-158.280
-153.283
-213.240
-212.241
-204.248
-199.252
-187.261
-177.268
-174.270
-163.277
-148.286
-211.242
-210.243
-194.256
-190.259
-183.264
-180.266
-171.272
-155.282
-209.244
-203.249
-198.253
-186.262
-168.274
-160.279
-150.285
-208.245
-202.250
-197.254
-193.257
-165.276
-145.288
-207.246
-201.251
-189.260
-182.265
-179.267
-176.269
-173.271
-157.281
-152.284
-206.247
-196.255
-192.258
-185.263
-170.273
-162.278
-214.240
-213.241
-205.248
-200.252
-188.261
-167.275
-147.287
-212.242
-211.243
-195.256
-181.266
-178.268
-175.270
-159.280
-154.283
-210.244
-204.249
-199.253
-191.259
-184.264
-172.272
-164.277
-149.286
-209.245
-203.250
-194.257
-187.262
-169.274
-156.282
-208.246
-198.254
-190.260
-166.276
-161.279
-151.285
-215.240
-207.247
-202.251
-183.265
-180.267
-177.269
-174.271
-214.241
-213.242
-206.248
-201.252
-197.255
-193.258
-186.263
-171.273
-163.278
-158.281
-146.288
-212.243
-189.261
-168.275
-153.284
-211.244
-205.249
-200.253
-196.256
-192.259
-182.266
-179.268
-148.287
-210.245
-204.250
-185.264
-176.270
-173.272
-165.277
-160.280
-155.283
-209.246
-199.254
-195.257
-188.262
-170.274
-150.286
-216.240
-208.247
-203.251
-191.260
-162.279
-157.282
-215.241
-214.242
-207.248
-202.252
-198.255
-194.258
-187.263
-184.265
-181.267
-178.269
-175.271
-167.276
-152.285
-213.243
-190.261
-172.273
-212.244
-206.249
-201.253
-197.256
-164.278
-159.281
-147.288
-211.245
-205.250
-193.259
-186.264
-183.266
-180.268
-169.275
-154.284
-210.246
-200.254
-196.257
-189.262
-177.270
-174.272
-161.280
-149.287
-217.240
-216.241
-209.247
-204.251
-192.260
-166.277
-156.283
-215.242
-208.248
-199.255
-171.274
-214.243
-203.252
-195.258
-188.263
-185.265
-182.267
-179.269
-168.276
-163.279
-158.282
-151.286
-213.244
-207.249
-202.253
-198.256
-191.261
-176.271
-212.245
-206.250
-194.259
-173.273
-153.285
-211.246
-201.254
-187.264
-184.266
-181.268
-170.275
-165.278
-160.281
-218.240
-217.241
-210.247
-205.251
-197.257
-190.262
-178.270
-155.284
-148.288
-216.242
-209.248
-200.255
-193.260
-175.272
-167.277
-162.280
-215.243
-204.252
-196.258
-186.265
-183.267
-172.274
-157.283
-150.287
-214.244
-208.249
-192.261
-189.263
-180.269
-213.245
-203.253
-199.256
-177.271
-169.276
-164.279
-159.282
-152.286
-220.239
-219.240
-212.246
-207.250
-195.259
-174.273
-218.241
-211.247
-206.251
-202.254
-198.257
-191.262
-188.264
-185.266
-182.268
-166.278
-154.285
-217.242
-194.260
-179.270
-171.275
-161.281
-216.243
-210.248
-205.252
-201.255
-197.258
-176.272
-156.284
-149.288
-215.244
-209.249
-190.263
-187.265
-184.267
-173.274
-168.277
-163.280
-214.245
-204.253
-200.256
-193.261
-181.269
-158.283
-151.287
-221.239
-220.240
-213.246
-208.250
-196.259
-178.271
-170.276
-165.279
-219.241
-212.247
-207.251
-203.254
-199.257
-175.273
-160.282
-153.286
-218.242
-192.262
-189.264
-186.266
-183.268
-217.243
-211.248
-206.252
-202.255
-195.260
-180.270
-172.275
-167.278
-162.281
-155.285
-216.244
-210.249
-198.258
-177.272
-222.239
-215.245
-205.253
-201.256
-191.263
-188.265
-185.267
-169.277
-157.284
-221.240
-214.246
-209.250
-194.261
-182.269
-174.274
-164.280
-150.288
-220.241
-219.242
-213.247
-208.251
-204.254
-197.259
-179.271
-159.283
-218.243
-200.257
-190.264
-187.266
-176.273
-171.276
-166.279
-152.287
-217.244
-212.248
-207.252
-203.255
-196.260
-193.262
-184.268
-161.282
-154.286
-211.249
-199.258
-181.270
-173.275
-168.278
-216.245
-206.253
-178.272
-163.281
-156.285
-222.240
-221.241
-215.246
-210.250
-202.256
-195.261
-192.263
-189.265
-186.267
-220.242
-214.247
-205.254
-198.259
-183.269
-175.274
-170.277
-165.280
-158.284
-219.243
-209.251
-201.257
-180.271
-151.288
-218.244
-213.248
-194.262
-191.264
-188.266
-172.276
-160.283
-217.245
-212.249
-208.252
-204.255
-197.260
-185.268
-177.273
-167.279
-153.287
-224.239
-223.240
-200.258
-182.270
-162.282
-222.241
-216.246
-211.250
-207.253
-203.256
-193.263
-179.272
-174.275
-169.278
-155.286
-221.242
-215.247
-199.259
-196.261
-190.265
-187.267
-164.281
-220.243
-210.251
-206.254
-184.269
-176.274
-171.277
-157.285
-219.244
-214.248
-202.257
-181.271
-166.280
-159.284
-218.245
-213.249
-209.252
-205.255
-198.260
-195.262
-192.264
-189.266
-225.239
-224.240
-201.258
-186.268
-178.273
-173.276
-168.279
-161.283
-152.288
-223.241
-217.246
-212.250
-208.253
-204.256
-183.270
-222.242
-216.247
-197.261
-194.263
-191.265
-175.275
-163.282
-154.287
-221.243
-211.251
-207.254
-200.259
-188.267
-180.272
-170.278
-156.286
-220.244
-215.248
-203.257
-185.269
-165.281
-226.239
-219.245
-214.249
-210.252
-206.255
-182.271
-177.274
-172.277
-158.285
-225.240
-199.260
-196.262
-193.264
-190.266
-167.280
-160.284
-224.241
-218.246
-213.250
-209.253
-202.258
-187.268
-179.273
-174.276
-223.242
-217.247
-205.256
-184.270
-169.279
-162.283
-222.243
-212.251
-208.254
-201.259
-198.261
-195.263
-192.265
-221.244
-216.248
-204.257
-189.267
-181.272
-176.275
-171.278
-164.282
-227.239
-220.245
-215.249
-211.252
-186.269
-157.286
-226.240
-207.255
-200.260
-197.262
-194.264
-183.271
-178.274
-173.277
-166.281
-225.241
-219.246
-214.250
-210.253
-203.258
-191.266
-159.285
-224.242
-218.247
-206.256
-188.268
-180.273
-168.280
-223.243
-213.251
-209.254
-196.263
-185.270
-175.276
-161.284
-222.244
-217.248
-202.259
-199.261
-193.265
-170.279
-228.239
-221.245
-216.249
-212.252
-205.257
-190.267
-182.272
-177.275
-227.240
-226.241
-208.255
-187.269
-172.278
-225.242
-220.246
-215.250
-211.253
-204.258
-201.260
-198.262
-195.264
-179.274
-219.247
-207.256
-192.266
-184.271
-174.277
-224.243
-214.251
-189.268
-223.244
-218.248
-210.254
-203.259
-200.261
-197.263
-186.270
-181.273
-176.276
-229.239
-228.240
-222.245
-213.252
-206.257
-194.265
-227.241
-217.249
-209.255
-191.267
-183.272
-178.275
-226.242
-221.246
-216.250
-202.260
-199.262
-188.269
-173.278
-225.243
-220.247
-212.253
-205.258
-196.264
-193.266
-215.251
-208.256
-185.271
-180.274
-230.239
-224.244
-219.248
-211.254
-190.268
-175.277
-229.240
-223.245
-204.259
-201.261
-198.263
-195.265
-187.270
-182.273
-228.241
-218.249
-214.252
-210.255
-207.257
-192.267
-177.276
-227.242
-222.246
-184.272
-226.243
-221.247
-217.250
-213.253
-206.258
-203.260
-200.262
-197.264
-189.269
-179.275
-209.256
-194.266
-231.239
-225.244
-220.248
-216.251
-212.254
-186.271
-181.274
-230.240
-224.245
-205.259
-202.261
-191.268
-176.277
-229.241
-223.246
-219.249
-215.252
-208.257
-199.263
-196.265
-188.270
-183.273
-228.242
-211.255
-193.267
-178.276
-227.243
-222.247
-218.250
-214.253
-226.244
-210.256
-207.258
-204.260
-201.262
-198.264
-190.269
-185.272
-180.275
-232.239
-221.248
-217.251
-195.266
-231.240
-225.245
-213.254
-187.271
-182.274
-230.241
-224.246
-220.249
-216.252
-209.257
-206.259
-203.261
-200.263
-192.268
-229.242
-212.255
-197.265
-189.270
-177.277
-228.243
-223.247
-219.250
-215.253
-194.267
-184.273
-227.244
-208.258
-205.260
-202.262
-179.276
-233.239
-232.240
-222.248
-218.251
-211.256
-199.264
-191.269
-186.272
-231.241
-226.245
-214.254
-196.266
-181.275
-225.246
-221.249
-217.252
-207.259
-204.261
-188.271
-176.278
-230.242
-213.255
-210.257
-201.263
-193.268
-183.274
-229.243
-224.247
-220.250
-198.265
-178.277
-234.239
-228.244
-216.253
-195.267
-190.270
-185.273
-233.240
-223.248
-219.251
-212.256
-209.258
-206.260
-203.262
-180.276
-232.241
-227.245
-215.254
-200.264
-192.269
-187.272
-231.242
-226.246
-222.249
-218.252
-197.266
-182.275
-211.257
-208.259
-205.261
-194.268
-189.271
-230.243
-225.247
-221.250
-214.255
-202.263
-184.274
-235.239
-229.244
-217.253
-199.265
-234.240
-224.248
-220.251
-210.258
-207.260
-196.267
-191.270
-186.273
-179.277
-233.241
-228.245
-216.254
-213.256
-204.262
-201.264
-232.242
-227.246
-223.249
-219.252
-193.269
-188.272
-181.276
-212.257
-209.259
-198.266
-183.275
-231.243
-226.247
-222.250
-215.255
-206.261
-203.263
-195.268
-190.271
-236.239
-230.244
-218.253
-200.265
-185.274
-235.240
-225.248
-221.251
-234.241
-229.245
-214.256
-211.258
-208.260
-205.262
-197.267
-192.270
-187.273
-180.277
-233.242
-228.246
-224.249
-217.254
-202.264
-232.243
-220.252
-199.266
-194.269
-189.272
-182.276
-227.247
-223.250
-216.255
-213.257
-210.259
-207.261
-231.244
-219.253
-204.263
-196.268
-184.275
-236.240
-226.248
-222.251
-201.265
-191.271
-235.241
-230.245
-215.256
-212.258
-209.260
-186.274
-179.278
-234.242
-229.246
-225.249
-218.254
-206.262
-198.267
-193.270
-233.243
-221.252
-203.264
-188.273
-181.277
-228.247
-224.250
-214.257
-211.259
-200.266
-195.269
-183.276
-237.240
-232.244
-220.253
-217.255
-208.261
-190.272
-236.241
-231.245
-227.248
-205.263
-197.268
-185.275
-223.251
-213.258
-202.265
-192.271
-235.242
-230.246
-226.249
-219.254
-216.256
-210.260
-207.262
-187.274
-234.243
-222.252
-199.267
-194.270
-229.247
-225.250
-204.264
-189.273
-182.277
-238.240
-233.244
-218.255
-215.257
-212.259
-209.261
-201.266
-196.269
-237.241
-232.245
-228.248
-221.253
-206.263
-191.272
-184.276
-224.251
-198.268
-236.242
-231.246
-227.249
-220.254
-217.256
-214.258
-211.260
-203.265
-193.271
-186.275
-235.243
-223.252
-208.262
-188.274
-230.247
-226.250
-205.264
-200.267
-195.270
-239.240
-234.244
-219.255
-216.257
-213.259
-190.273
-238.241
-233.245
-229.248
-222.253
-210.261
-202.266
-197.269
-183.277
-237.242
-225.251
-207.263
-192.272
-185.276
-232.246
-228.249
-218.256
-215.258
-204.265
-199.268
-236.243
-224.252
-221.254
-212.260
-194.271
-187.275
-231.247
-209.262
-201.267
-240.240
-235.244
-227.250
-217.257
-206.264
-196.270
-189.274
-239.241
-234.245
-230.248
-223.253
-220.255
-214.259
-211.261
-191.273
-182.278
-238.242
-226.251
-203.266
-198.269
-184.277
-233.246
-229.249
-208.263
-193.272
-237.243
-222.254
-219.256
-216.258
-213.260
-205.265
-200.268
-186.276
-241.240
-236.244
-232.247
-225.252
-210.262
-195.271
-188.275
-228.250
-202.267
-240.241
-235.245
-231.248
-224.253
-221.255
-218.257
-215.259
-207.264
-197.270
-190.274
-239.242
-227.251
-212.261
-234.246
-230.249
-209.263
-204.266
-199.269
-192.273
-183.278
-238.243
-223.254
-220.256
-217.258
-194.272
-185.277
-242.240
-237.244
-233.247
-226.252
-214.260
-206.265
-201.268
-187.276
-229.250
-211.262
-196.271
-241.241
-236.245
-232.248
-222.255
-219.257
-208.264
-203.267
-189.275
-240.242
-228.251
-225.253
-216.259
-198.270
-191.274
-235.246
-231.249
-213.261
-239.243
-224.254
-221.256
-210.263
-205.266
-200.269
-193.273
-243.240
-238.244
-234.247
-227.252
-218.258
-215.260
-242.241
-230.250
-207.265
-202.268
-195.272
-186.277
-237.245
-233.248
-212.262
-197.271
-188.276
-241.242
-229.251
-226.253
-220.257
-217.259
-209.264
-204.267
-190.275
-240.243
-236.246
-214.261
-199.270
-232.249
-206.266
-192.274
-244.240
-239.244
-235.247
-228.252
-225.254
-222.256
-219.258
-211.263
-201.269
-194.273
-243.241
-231.250
-216.260
-185.278
-238.245
-234.248
-213.262
-208.265
-203.268
-196.272
-187.277
-242.242
-227.253
-224.255
-221.257
-198.271
-189.276
-241.243
-237.246
-230.251
-218.259
-210.264
-205.267
-233.249
-215.261
-200.270
-191.275
-245.240
-240.244
-236.247
-229.252
-226.254
-223.256
-220.258
-212.263
-207.266
-193.274
-244.241
-232.250
-217.260
-202.269
-195.273
-243.242
-239.245
-235.248
-209.265
-228.253
-225.255
-222.257
-214.262
-204.268
-197.272
-186.278
-242.243
-238.246
-231.251
-219.259
-188.277
-246.240
-234.249
-216.261
-211.264
-206.267
-199.271
-190.276
-241.244
-237.247
-230.252
-227.254
-224.256
-201.270
-192.275
-245.241
-233.250
-221.258
-213.263
-208.266
-194.274
-244.242
-240.245
-236.248
-218.260
-203.269
-229.253
-226.255
-215.262
-210.265
-196.273
-243.243
-239.246
-232.251
-223.257
-205.268
-198.272
-187.278
-247.240
-235.249
-220.259
-212.264
-189.277
-242.244
-238.247
-228.254
-217.261
-207.267
-200.271
-191.276
-246.241
-234.250
-231.252
-225.256
-222.258
-202.270
-193.275
-245.242
-241.245
-237.248
-219.260
-214.263
-209.266
-204.269
-195.274
-244.243
-240.246
-233.251
-230.253
-227.255
-224.257
-216.262
-211.265
-197.273
-248.240
-236.249
-221.259
-206.268
-199.272
-247.241
-243.244
-239.247
-218.261
-213.264
-188.278
-235.250
-232.252
-229.254
-226.256
-208.267
-201.271
-190.277
-246.242
-242.245
-238.248
-223.258
-215.263
-203.270
-192.276
-220.260
-210.266
-194.275
-245.243
-241.246
-234.251
-231.253
-228.255
-205.269
-196.274
-249.240
-237.249
-225.257
-217.262
-212.265
-198.273
-248.241
-244.244
-240.247
-222.259
-207.268
-233.252
-230.254
-227.256
-219.261
-214.264
-200.272
-189.278
-247.242
-243.245
-239.248
-236.250
-224.258
-209.267
-202.271
-191.277
-221.260
-216.263
-204.270
-193.276
-250.240
-246.243
-242.246
-235.251
-232.253
-229.255
-211.266
-195.275
-245.244
-238.249
-226.257
-218.262
-206.269
-197.274
-249.241
-241.247
-223.259
-213.265
-199.273
-234.252
-231.254
-208.268
-248.242
-244.245
-240.248
-237.250
-228.256
-220.261
-215.264
-201.272
-247.243
-225.258
-210.267
-203.271
-190.278
-251.240
-243.246
-236.251
-233.253
-222.260
-217.263
-212.266
-192.277
-246.244
-239.249
-230.255
-227.257
-205.270
-194.276
-250.241
-242.247
-224.259
-219.262
-214.265
-207.269
-196.275
-249.242
-245.245
-235.252
-232.254
-198.274
-241.248
-238.250
-229.256
-221.261
-216.264
-209.268
-200.273
-248.243
-226.258
-211.267
-202.272
-252.240
-244.246
-234.253
-218.263
-204.271
-247.244
-240.249
-237.251
-231.255
-223.260
-213.266
-193.277
-251.241
-243.247
-228.257
-206.270
-195.276
-250.242
-246.245
-225.259
-220.262
-215.265
-208.269
-197.275
-239.250
-236.252
-233.254
-230.256
-199.274
-249.243
-242.248
-227.258
-222.261
-217.264
-210.268
-201.273
-253.240
-245.246
-212.267
-203.272
-252.241
-248.244
-241.249
-238.251
-235.253
-232.255
-224.260
-219.263
-205.271
-244.247
-229.257
-214.266
-192.278
-251.242
-247.245
-226.259
-221.262
-207.270
-194.277
-240.250
-237.252
-234.254
-216.265
-209.269
-198.275
-196.276
-254.240
-250.243
-243.248
-231.256
-223.261
-200.274
-246.246
-228.258
-218.264
-211.268
-202.273
-253.241
-249.244
-242.249
-239.251
-236.253
-233.255
-213.267
-204.272
-245.247
-230.257
-225.260
-220.263
-252.242
-248.245
-215.266
-206.271
-241.250
-238.252
-235.254
-227.259
-222.262
-208.270
-195.277
-193.278
-255.240
-251.243
-244.248
-232.256
-217.265
-210.269
-197.276
-247.246
-229.258
-224.261
-219.264
-199.275
-254.241
-250.244
-243.249
-240.251
-237.253
-212.268
-201.274
-246.247
-234.255
-226.260
-221.263
-214.267
-203.273
-253.242
-249.245
-231.257
-205.272
-242.250
-239.252
-228.259
-223.262
-216.266
-207.271
-256.240
-252.243
-245.248
-236.254
-233.256
-218.265
-209.270
-248.246
-225.261
-211.269
-196.277
-194.278
-255.241
-251.244
-244.249
-241.251
-238.253
-230.258
-220.264
-200.275
-198.276
-247.247
-235.255
-213.268
-202.274
-254.242
-250.245
-232.257
-227.260
-222.263
-215.267
-204.273
-243.250
-240.252
-206.272
-257.240
-253.243
-249.246
-246.248
-237.254
-229.259
-224.262
-217.266
-208.271
-234.256
-219.265
-210.270
-256.241
-252.244
-245.249
-242.251
-231.258
-226.261
-212.269
-195.278
-255.242
-248.247
-239.253
-236.255
-221.264
-214.268
-199.276
-197.277
-251.245
-228.260
-203.274
-201.275
-254.243
-244.250
-241.252
-233.257
-223.263
-216.267
-205.273
-258.240
-250.246
-247.248
-238.254
-230.259
-218.266
-207.272
-257.241
-235.256
-225.262
-209.271
-253.244
-246.249
-243.251
-220.265
-211.270
-256.242
-249.247
-240.253
-232.258
-227.261
-213.269
-252.245
-237.255
-222.264
-215.268
-200.276
-198.277
-196.278
-259.240
-255.243
-245.250
-234.257
-229.260
-224.263
-202.275
-251.246
-248.248
-242.252
-239.254
-217.267
-206.273
-204.274
-258.241
-236.256
-231.259
-226.262
-219.266
-208.272
-254.244
-210.271
-257.242
-250.247
-247.249
-244.251
-241.253
-233.258
-228.261
-221.265
-212.270
-253.245
-238.255
-223.264
-214.269
-260.240
-256.243
-235.257
-230.260
-216.268
-197.278
-252.246
-249.248
-246.250
-243.252
-225.263
-203.275
-201.276
-199.277
-259.241
-255.244
-240.254
-232.259
-218.267
-205.274
-237.256
-227.262
-220.266
-209.272
-207.273
-258.242
-251.247
-248.249
-245.251
-242.253
-211.271
-254.245
-239.255
-234.258
-229.261
-222.265
-213.270
-261.240
-257.243
-224.264
-215.269
-253.246
-250.248
-247.250
-244.252
-236.257
-231.260
-217.268
-260.241
-256.244
-241.254
-226.263
-202.276
-200.277
-198.278
-238.256
-233.259
-219.267
-206.274
-204.275
-259.242
-252.247
-249.249
-246.251
-243.253
-228.262
-221.266
-208.273
-255.245
-235.258
-230.261
-223.265
-212.271
-210.272
-262.240
-258.243
-240.255
-214.270
-254.246
-251.248
-248.250
-245.252
-237.257
-232.260
-225.264
-216.269
-261.241
-257.244
-242.254
-227.263
-218.268
-239.256
-234.259
-220.267
-260.242
-253.247
-250.249
-247.251
-229.262
-205.275
-203.276
-201.277
-199.278
-197.279
-263.240
-256.245
-244.253
-236.258
-222.266
-209.273
-207.274
-259.243
-241.255
-231.261
-224.265
-213.271
-211.272
-262.241
-255.246
-252.248
-249.250
-246.252
-215.270
-258.244
-243.254
-238.257
-233.260
-226.264
-217.269
-261.242
-228.263
-219.268
-254.247
-251.249
-248.251
-240.256
-235.259
-221.267
-264.240
-257.245
-245.253
-230.262
-204.276
-202.277
-200.278
-198.279
-260.243
-242.255
-237.258
-223.266
-210.273
-208.274
-206.275
-196.280
-194.281
-192.282
-263.241
-256.246
-253.248
-250.250
-232.261
-225.265
-212.272
-259.244
-247.252
-239.257
-234.260
-227.264
-216.270
-214.271
-262.242
-244.254
-218.269
-255.247
-252.249
-249.251
-241.256
-236.259
-229.263
-220.268
-265.240
-258.245
-246.253
-231.262
-222.267
-261.243
-243.255
-238.258
-224.266
-264.241
-257.246
-254.248
-251.250
-233.261
-209.274
-207.275
-205.276
-203.277
-201.278
-199.279
-197.280
-260.244
-248.252
-240.257
-226.265
-213.272
-211.273
-195.281
-193.282
-263.242
-245.254
-235.260
-228.264
-217.270
-215.271
-191.283
-259.245
-256.247
-253.249
-250.251
-230.263
-219.269
-266.240
-262.243
-247.253
-242.256
-237.259
-221.268
-232.262
-223.267
-265.241
-258.246
-255.248
-252.250
-244.255
-239.258
-225.266
-261.244
-249.252
-234.261
-227.265
-208.275
-206.276
-204.277
-202.278
-264.242
-246.254
-241.257
-236.260
-214.272
-212.273
-210.274
-200.279
-198.280
-260.245
-257.247
-254.249
-229.264
-218.270
-216.271
-196.281
-194.282
-267.240
-263.243
-251.251
-243.256
-238.259
-231.263
-220.269
-192.283
-248.253
-222.268
-266.241
-259.246
-256.248
-253.250
-245.255
-240.258
-233.262
-224.267
-262.244
-250.252
-235.261
-226.266
-265.242
-247.254
-242.257
-228.265
-268.240
-261.245
-258.247
-255.249
-237.260
-230.264
-213.273
-211.274
-209.275
-207.276
-205.277
-203.278
-201.279
-264.243
-252.251
-244.256
-217.271
-215.272
-199.280
-267.241
-249.253
-239.259
-232.263
-221.269
-219.270
-197.281
-195.282
-260.246
-257.248
-254.250
-246.255
-234.262
-223.268
-193.283
-263.244
-251.252
-241.258
-225.267
-191.284
-266.242
-236.261
-227.266
-269.240
-262.245
-259.247
-256.249
-248.254
-243.257
-238.260
-229.265
-265.243
-253.251
-231.264
-214.273
-212.274
-210.275
-208.276
-206.277
-268.241
-250.253
-245.256
-240.259
-233.263
-218.271
-216.272
-204.278
-202.279
-261.246
-258.248
-255.250
-222.269
-220.270
-200.280
-198.281
-267.242
-264.244
-252.252
-247.255
-242.258
-235.262
-224.268
-196.282
-237.261
-226.267
-194.283
-263.245
-260.247
-257.249
-249.254
-244.257
-228.266
-192.284
-266.243
-254.251
-239.260
-230.265
-246.256
-232.264
-262.246
-259.248
-241.259
-234.263
-219.271
-217.272
-215.273
-213.274
-211.275
-209.276
-207.277
-205.278
-256.250
-243.258
-223.269
-221.270
-203.279
-236.262
-225.268
-201.280
-199.281
-261.247
-258.249
-245.257
-238.261
-227.267
-197.282
-240.260
-229.266
-195.283
-231.265
-193.284
-242.259
-233.264
-235.263
-220.271
-218.272
-216.273
-214.274
-212.275
-210.276
-244.258
-237.262
-224.269
-222.270
-208.277
-206.278
-226.268
-204.279
-202.280
-239.261
-230.266
-228.267
-200.281
-232.265
-198.282
-234.264
-196.283
-236.263
-219.272
-217.273
-215.274
-213.275
-238.262
-225.269
-223.270
-221.271
-211.276
-209.277
-229.267
-227.268
-207.278
-205.279
-231.266
-203.280
-233.265
-201.281
-199.282
-197.283
-218.273
-226.269
-224.270
-222.271
-220.272
-216.274
-214.275
-212.276
-230.267
-228.268
-210.277
-208.278
-232.266
-206.279
-204.280
-202.281
-200.282
-198.283
-227.269
-225.270
-223.271
-221.272
-219.273
-217.274
-215.275
-231.267
-229.268
-213.276
-211.277
-209.278
-207.279
-205.280
-203.281
-201.282
-228.269
-226.270
-224.271
-222.272
-220.273
-218.274
-199.283
-230.268
-216.275
-214.276
-212.277
-229.269
-227.270
-225.271
-223.272
-221.273
-231.268
-219.274
-217.275
-215.276
-213.277
-230.269
-228.270
-226.271
-224.272
-222.273
-220.274
-218.275
-216.276
-231.269
-229.270
-227.271
-225.272
-223.273
-221.274
-219.275
-217.276
-215.277
-232.269
-230.270
-228.271
-226.272
-224.273
-222.274
-220.275
-218.276
-216.277
-233.269
-231.270
-229.271
-227.272
-225.273
-223.274
-221.275
-217.277
-234.269
-232.270
-230.271
-228.272
-226.273
-224.274
-222.275
-220.276
-218.277
-235.269
-233.270
-231.271
-229.272
-227.273
-225.274
-223.275
-221.276
-219.277
-236.269
-234.270
-232.271
-230.272
-228.273
-226.274
-224.275
-237.269
-235.270
-233.271
-231.272
-229.273
-227.274
-225.275
-223.276
-238.269
-221.277
-236.270
-234.271
-232.272
-230.273
-228.274
-226.275
-224.276
-239.269
-222.277
-237.270
-235.271
-233.272
-231.273
-229.274
-227.275
-225.276
-240.269
-238.270
-223.277
-236.271
-234.272
-232.273
-228.275
-241.269
-226.276
-239.270
-224.277
-227.276
-000.238
-001.253
-000.253
-002.253
-002.238
-004.238
-001.238
-003.238
-003.253
-005.238
-006.238
-004.253
-006.253
-007.238
-005.253
-009.253
-008.253
-009.238
-007.253
-008.238
-010.238
-012.238
-011.238
-013.238
-012.253
-011.253
-010.253
-013.253
-014.253
-014.238
-015.238
-015.253
-016.238
-016.253
-019.253
-017.238
-017.253
-018.253
-018.238
-021.253
-020.238
-021.238
-022.238
-019.238
-024.238
-020.253
-022.253
-023.253
-023.238
-024.253
-025.238
-025.253
-026.253
-026.238
-027.238
-028.253
-028.238
-029.238
-031.253
-027.253
-032.238
-029.253
-030.238
-030.253
-031.238
-037.238
-035.238
-032.253
-033.253
-033.238
-034.238
-034.253
-035.253
-036.238
-038.239
-036.253
-037.253
-038.238
-040.238
-038.253
-039.253
-039.238
-042.239
-039.239
-040.251
-041.238
-040.239
-041.239
-039.252
-041.251
-040.252
-042.238
-040.253
-042.251
-043.239
-043.238
-045.239
-043.251
-044.238
-044.239
-047.251
-047.238
-045.251
-044.251
-046.238
-045.238
-049.251
-046.251
-050.238
-050.249
-049.238
-048.238
-049.239
-049.250
-050.250
-052.238
-050.251
-051.238
-051.250
-048.251
-053.249
-053.250
-055.250
-053.239
-054.239
-052.249
-051.249
-055.238
-052.250
-054.250
-054.238
-054.249
-053.238
-055.239
-058.239
-057.238
-056.250
-055.249
-057.239
-057.250
-056.238
-060.238
-060.248
-058.238
-056.249
-056.239
-060.250
-062.238
-062.248
-065.240
-057.249
-060.239
-062.239
-064.239
-072.318
-058.249
-075.320
-059.239
-059.250
-061.248
-058.250
-063.244
-073.321
-061.238
-067.321
-059.238
-060.249
-059.249
-061.239
-076.319
-063.245
-068.320
-068.321
-064.241
-063.246
-063.242
-062.247
-063.247
-069.320
-064.242
-071.321
-063.243
-064.238
-069.321
-070.319
-074.317
-073.320
-063.238
-065.241
-073.318
-070.320
-075.317
-074.321
-075.321
-070.321
-084.317
-072.319
-075.318
-071.320
-071.319
-087.317
-072.321
-073.319
-076.321
-074.320
-081.320
-072.320
-079.320
-083.318
-075.319
-074.318
-077.321
-110.299
-077.317
-076.317
-079.317
-086.318
-074.319
-078.317
-080.318
-084.319
-077.318
-081.318
-086.317
-076.318
-079.318
-083.320
-078.318
-080.319
-083.319
-077.319
-081.319
-111.299
-079.319
-085.318
-078.319
-080.320
-077.320
-082.318
-076.320
-078.320
-080.321
-119.298
-081.321
-112.297
-082.319
-111.298
-079.321
-078.321
-081.317
-117.299
-082.317
-082.320
-084.318
-080.317
-085.317
-088.317
-083.317
-118.298
-114.299
-112.299
-113.299
-115.295
-113.296
-115.299
-119.299
-118.293
-117.298
-118.299
-120.298
-116.298
-121.298
-115.298
-122.298
-116.299
-121.299
-124.289
-123.298
-122.291
-123.290
-120.299
-124.298
-123.299
-130.285
-122.299
-125.298
-127.298
-127.297
-126.298
-127.287
-131.297
-128.296
-129.298
-130.298
-128.297
-131.295
-132.295
-128.298
-132.285
-131.285
-131.296
-129.286
-129.296
-133.284
-133.298
-130.295
-131.298
-129.297
-132.297
-136.293
-130.296
-133.294
-132.296
-130.297
-135.283
-138.295
-133.296
-132.298
-133.297
-134.298
-134.294
-134.283
-133.295
-134.295
-134.297
-135.297
-135.293
-134.296
-136.282
-135.294
-136.298
-137.291
-625.238
-139.291
-135.295
-137.293
-136.294
-137.282
-138.294
-135.296
-137.298
-137.292
-136.295
-138.291
-138.281
-139.297
-138.297
-136.296
-139.290
-138.292
-135.298
-138.290
-136.297
-138.296
-138.293
-137.296
-140.280
-137.294
-140.290
-139.292
-137.295
-136.292
-138.298
-140.291
-139.293
-143.295
-139.281
-140.292
-139.294
-141.294
-143.294
-624.240
-137.297
-140.293
-139.295
-141.295
-141.291
-141.290
-142.293
-142.292
-139.296
-140.294
-141.296
-145.277
-144.294
-143.290
-140.295
-142.279
-144.278
-142.289
-625.240
-143.291
-141.292
-142.294
-627.238
-140.296
-142.290
-145.289
-143.292
-141.293
-626.238
-145.290
-145.292
-140.297
-627.239
-143.293
-141.289
-142.291
-140.289
-150.290
-628.238
-142.295
-144.289
-142.296
-146.291
-147.291
-144.290
-145.291
-143.278
-146.292
-151.274
-144.291
-150.291
-146.293
-143.289
-144.292
-145.293
-147.276
-148.289
-144.293
-147.292
-145.294
-149.289
-148.290
-148.291
-148.276
-146.277
-149.290
-147.289
-148.292
-154.288
-150.289
-150.275
-146.289
-147.290
-146.290
-149.291
-154.272
-152.289
-153.288
-152.290
-155.287
-151.289
-156.270
-153.289
-151.290
-157.287
-152.273
-155.271
-156.287
-161.267
-161.285
-157.270
-160.285
-162.266
-159.286
-162.267
-158.286
-160.268
-159.269
-162.284
-164.266
-163.266
-169.280
-167.263
-165.282
-163.283
-164.283
-167.264
-169.262
-166.264
-165.265
-166.265
-167.281
-168.263
-166.282
-168.281
-172.279
-175.294
-176.279
-173.259
-171.279
-174.279
-172.260
-171.261
-174.294
-173.279
-175.258
-175.278
-176.293
-179.292
-175.279
-179.256
-174.278
-176.294
-180.294
-177.257
-177.278
-178.294
-177.279
-178.279
-179.293
-177.293
-177.294
-181.254
-178.292
-182.279
-179.294
-183.253
-183.290
-178.293
-179.279
-180.255
-178.278
-181.278
-180.278
-181.279
-183.294
-180.279
-183.293
-181.292
-180.292
-181.293
-180.293
-182.292
-181.294
-183.307
-182.293
-184.278
-181.308
-183.279
-182.294
-182.253
-184.279
-184.252
-186.279
-183.292
-185.294
-183.252
-184.290
-184.292
-187.308
-184.293
-187.279
-188.250
-184.294
-185.289
-187.251
-213.238
-184.307
-185.290
-187.284
-185.308
-186.294
-184.308
-185.292
-186.306
-186.289
-187.285
-185.251
-185.293
-186.251
-212.295
-185.252
-186.308
-187.250
-186.285
-212.307
-187.306
-186.290
-187.288
-212.306
-187.289
-186.292
-186.293
-187.290
-187.292
-214.306
-187.293
-187.294
-213.306
-212.278
-214.238
-212.279
-214.239
-216.239
-213.278
-215.238
-213.279
-215.239
-214.277
-215.306
-214.278
-216.238
-214.279
-217.239
-214.294
-215.279
-215.278
-214.305
-215.305
-216.278
-217.279
-217.278
-216.279
-216.304
-310.292
-217.238
-217.304
-218.238
-218.278
-218.239
-218.279
-218.292
-218.304
-219.238
-219.239
-219.276
-219.304
-219.278
-219.279
-220.277
-220.278
-221.291
-220.238
-220.279
-220.303
-222.238
-221.238
-222.278
-222.276
-221.278
-221.303
-221.279
-222.279
-223.238
-223.255
-223.239
-223.278
-224.278
-223.290
-224.290
-223.302
-224.238
-224.302
-225.238
-225.290
-225.291
-225.301
-226.238
-226.277
-226.290
-226.289
-226.291
-225.277
-226.301
-227.238
-227.277
-227.289
-227.290
-228.291
-228.238
-227.291
-229.238
-228.276
-228.288
-228.289
-228.300
-229.288
-228.290
-229.289
-229.300
-229.290
-231.274
-230.238
-230.287
-229.291
-231.275
-230.289
-231.238
-229.275
-230.299
-229.276
-231.287
-230.290
-230.291
-231.290
-231.289
-230.274
-232.238
-230.275
-231.291
-231.299
-232.267
-232.289
-232.268
-233.238
-232.290
-232.299
-232.291
-233.273
-233.286
-233.266
-233.299
-233.268
-232.274
-234.238
-232.286
-233.290
-233.291
-236.238
-234.265
-235.299
-234.266
-234.273
-234.268
-235.272
-235.285
-234.299
-235.264
-235.238
-235.265
-234.289
-235.290
-235.268
-234.290
-236.285
-236.264
-234.291
-237.238
-240.239
-236.299
-238.284
-236.290
-236.268
-237.239
-237.271
-237.284
-238.238
-237.299
-236.272
-238.239
-237.263
-237.268
-238.263
-238.271
-238.289
-238.268
-241.263
-239.268
-238.299
-239.238
-239.239
-241.268
-240.268
-240.261
-241.270
-239.299
-240.263
-240.270
-240.238
-240.283
-239.262
-242.238
-242.269
-241.260
-242.239
-240.299
-241.238
-241.239
-241.261
-392.255
-242.260
-242.308
-242.262
-242.263
-243.238
-241.299
-242.268
-243.239
-241.308
-242.299
-340.279
-279.300
-300.238
-300.239
-342.243
-185.279
-279.299
-400.241
-392.256
-400.240
-400.246
-400.242
-400.243
-400.245
-400.244
-400.247
-400.248
-400.250
-400.249
-400.262
-400.251
-400.252
-400.253
-400.255
-400.254
-188.284
-400.256
-300.260
-300.278
-400.258
-400.260
-400.257
-400.263
-400.261
-400.259
-400.265
-401.246
-300.286
-401.239
-400.266
-300.295
-188.279
-401.245
-401.242
-401.243
-188.285
-401.244
-300.288
-188.288
-300.287
-300.294
-301.238
-300.289
-300.293
-401.241
-401.240
-188.308
-301.239
-401.253
-401.252
-401.251
-188.289
-188.292
-401.250
-188.293
-188.290
-401.247
-401.249
-401.248
-188.310
-401.254
-401.255
-310.285
-401.256
-401.257
-189.284
-189.285
-189.288
-189.305
-189.308
-189.289
-189.293
-189.310
-189.279
-190.249
-189.283
-189.292
-190.310
-190.305
-190.285
-190.290
-190.279
-190.288
-190.292
-190.283
-191.248
-190.289
-190.293
-190.308
-190.284
-191.278
-191.285
-191.288
-191.305
-191.279
-191.289
-191.308
-191.282
-191.310
-191.290
-192.288
-192.248
-191.292
-192.279
-192.285
-192.309
-192.292
-192.310
-192.289
-192.305
-193.247
-192.308
-192.290
-193.248
-193.288
-193.309
-193.289
-193.308
-193.281
-193.279
-193.285
-193.310
-193.290
-194.246
-193.305
-194.279
-194.280
-195.290
-195.289
-195.280
-195.285
-195.310
-195.302
-195.288
-195.305
-196.244
-195.308
-195.279
-195.309
-195.284
-196.290
-196.309
-196.289
-196.305
-194.305
-196.284
-196.310
-196.308
-196.279
-197.243
-196.285
-196.288
-351.276
-197.310
-197.305
-197.288
-197.308
-197.289
-197.290
-197.309
-197.301
-272.270
-198.242
-331.284
-198.243
-198.289
-198.308
-198.284
-198.310
-199.242
-198.305
-198.288
-198.309
-411.261
-199.288
-310.286
-199.289
-411.251
-199.305
-199.300
-199.309
-412.246
-200.300
-199.308
-199.310
-200.302
-200.241
-200.310
-200.283
-200.308
-200.309
-200.288
-200.305
-201.240
-202.282
-201.288
-201.309
-201.308
-202.309
-201.310
-202.239
-202.302
-202.299
-202.308
-202.310
-422.246
-203.304
-203.308
-203.309
-204.238
-266.267
-351.277
-411.252
-272.287
-411.262
-310.287
-412.247
-422.247
-582.252
-253.279
-332.282
-263.266
-301.280
-301.286
-301.259
-301.287
-301.278
-301.288
-301.289
-301.293
-301.294
-303.238
-302.238
-302.239
-302.287
-303.239
-302.280
-302.278
-302.293
-302.285
-302.288
-302.294
-302.286
-302.289
-303.258
-303.293
-303.285
-303.286
-303.294
-303.278
-303.288
-303.287
-303.289
-303.279
-304.238
-303.292
-304.279
-304.286
-304.285
-304.294
-304.239
-304.288
-304.293
-305.238
-304.292
-304.278
-304.287
-305.257
-305.239
-305.287
-305.293
-306.238
-305.278
-305.286
-305.288
-306.278
-305.284
-306.292
-305.292
-306.283
-305.285
-306.284
-306.287
-307.285
-307.293
-306.288
-306.293
-306.285
-307.286
-308.238
-307.238
-306.286
-307.288
-307.256
-307.287
-308.286
-307.283
-308.285
-307.291
-247.269
-307.284
-308.282
-308.293
-307.292
-309.238
-308.255
-308.287
-309.288
-308.283
-309.283
-310.239
-308.288
-272.295
-308.284
-308.291
-309.291
-309.282
-309.284
-309.255
-308.292
-309.287
-309.292
-194.308
-309.285
-309.293
-309.286
-280.264
-310.238
-312.238
-263.299
-449.240
-311.287
-411.253
-412.238
-353.239
-311.281
-335.283
-311.253
-280.266
-412.239
-311.282
-414.246
-311.290
-311.283
-310.288
-422.250
-336.278
-310.291
-412.248
-311.284
-311.285
-312.282
-353.240
-311.286
-312.239
-311.292
-311.288
-312.288
-312.283
-312.253
-312.284
-313.285
-313.239
-313.281
-313.280
-312.290
-312.291
-312.285
-313.286
-314.239
-313.282
-312.281
-312.292
-312.286
-312.287
-313.283
-313.287
-313.252
-313.238
-314.289
-314.288
-314.280
-320.279
-313.288
-314.285
-315.238
-313.284
-314.283
-314.291
-313.291
-314.282
-315.239
-314.284
-314.281
-314.286
-315.281
-315.251
-194.309
-316.287
-314.287
-316.288
-316.285
-315.290
-315.286
-315.284
-315.291
-315.282
-316.280
-314.290
-315.285
-315.280
-315.288
-315.283
-315.289
-316.281
-316.238
-316.286
-317.286
-316.290
-316.239
-317.284
-316.282
-316.291
-316.283
-317.238
-317.279
-316.251
-317.250
-317.290
-317.285
-317.239
-316.279
-316.284
-316.289
-317.280
-318.238
-317.289
-318.290
-318.239
-318.279
-317.281
-318.284
-318.250
-317.287
-318.283
-318.286
-319.238
-318.280
-319.290
-317.288
-317.283
-319.282
-319.285
-318.281
-318.287
-318.282
-319.279
-319.249
-320.280
-319.286
-318.288
-319.288
-319.280
-319.284
-318.289
-320.281
-273.302
-320.248
-319.281
-411.254
-320.284
-320.285
-321.278
-320.286
-320.290
-320.289
-319.289
-320.282
-321.282
-320.287
-321.279
-320.249
-321.248
-412.240
-321.283
-321.238
-320.283
-320.278
-320.288
-321.288
-422.251
-322.279
-322.287
-321.280
-321.289
-322.283
-321.287
-322.289
-322.280
-323.284
-322.284
-321.284
-322.238
-323.248
-321.281
-322.248
-323.238
-322.282
-321.285
-322.281
-322.278
-323.278
-322.285
-321.286
-323.288
-323.247
-323.279
-323.285
-323.289
-324.280
-324.238
-323.283
-322.286
-323.280
-324.285
-324.239
-323.286
-322.288
-323.281
-323.287
-324.286
-323.282
-324.278
-325.283
-324.282
-324.279
-324.287
-324.247
-325.280
-325.282
-325.278
-325.285
-325.239
-326.248
-324.283
-311.239
-324.288
-418.255
-325.279
-324.248
-325.281
-325.248
-326.247
-324.284
-325.247
-325.238
-324.289
-325.284
-327.238
-325.286
-328.279
-326.285
-326.282
-327.239
-326.280
-326.238
-326.239
-325.287
-327.284
-326.286
-326.283
-326.278
-326.281
-326.288
-327.278
-325.288
-327.279
-326.287
-326.284
-326.279
-329.238
-327.282
-328.283
-329.239
-327.285
-328.248
-327.247
-328.278
-327.280
-327.288
-328.281
-328.238
-327.286
-327.283
-327.281
-317.282
-328.247
-328.284
-328.282
-328.280
-327.287
-328.285
-329.285
-330.282
-328.286
-329.248
-329.286
-330.238
-330.248
-329.278
-330.283
-329.283
-330.239
-329.247
-329.284
-329.279
-330.278
-330.247
-330.281
-329.280
-329.282
-329.287
-330.284
-330.279
-359.278
-331.279
-331.285
-330.287
-330.285
-330.280
-280.267
-331.280
-331.248
-331.238
-330.286
-331.286
-331.283
-331.239
-331.278
-331.281
-331.247
-336.280
-194.310
-324.281
-197.284
-194.284
-401.260
-401.261
-402.253
-402.240
-401.262
-402.241
-402.246
-401.263
-402.242
-402.251
-401.264
-402.247
-402.243
-402.252
-402.239
-402.248
-402.244
-402.249
-402.245
-402.254
-402.257
-403.248
-402.250
-402.262
-402.255
-402.258
-402.263
-402.265
-402.256
-402.260
-402.264
-403.264
-403.241
-402.259
-403.246
-403.242
-403.247
-403.245
-403.238
-402.261
-403.243
-403.250
-403.239
-403.258
-403.244
-403.253
-401.258
-403.263
-403.251
-403.249
-403.240
-403.257
-403.252
-404.241
-404.249
-403.259
-401.259
-403.254
-404.263
-404.258
-404.253
-404.242
-403.260
-403.265
-403.255
-404.247
-404.250
-401.265
-404.243
-404.264
-404.246
-403.261
-404.238
-404.240
-403.256
-401.266
-404.251
-404.259
-404.248
-404.239
-404.244
-404.245
-404.254
-403.262
-404.265
-404.252
-405.242
-407.259
-405.247
-405.241
-404.260
-404.255
-405.251
-405.264
-405.238
-405.243
-405.248
-405.252
-404.261
-405.255
-405.239
-405.259
-406.244
-404.256
-405.244
-405.249
-405.253
-406.261
-404.262
-406.238
-405.240
-404.257
-406.254
-405.258
-405.245
-406.243
-405.246
-405.250
-405.256
-405.254
-406.239
-405.260
-406.249
-406.257
-406.245
-406.253
-405.257
-406.263
-406.262
-406.240
-406.250
-405.261
-407.240
-406.255
-406.258
-407.245
-407.250
-406.246
-406.251
-407.239
-406.241
-405.262
-406.260
-406.256
-407.242
-406.259
-407.241
-406.247
-407.261
-405.263
-406.252
-406.242
-406.248
-407.244
-408.243
-407.246
-408.242
-407.251
-406.264
-407.256
-407.254
-407.255
-407.260
-408.238
-407.247
-407.252
-407.264
-407.238
-407.257
-407.262
-408.251
-408.246
-408.239
-408.257
-408.240
-407.248
-407.253
-407.243
-407.258
-407.263
-408.252
-408.247
-408.244
-408.241
-407.249
-408.260
-409.249
-408.250
-408.256
-409.245
-408.263
-408.253
-408.261
-409.242
-409.253
-408.248
-408.258
-408.245
-408.264
-410.248
-410.253
-409.246
-409.250
-408.262
-409.241
-409.243
-408.254
-409.240
-408.249
-409.238
-408.259
-409.259
-409.254
-409.251
-409.248
-409.239
-408.255
-409.244
-409.263
-410.242
-409.247
-410.239
-410.254
-410.238
-409.260
-409.255
-409.252
-410.245
-410.250
-410.257
-410.240
-410.243
-410.261
-409.261
-410.252
-409.256
-410.258
-410.246
-410.251
-411.243
-409.262
-410.241
-410.262
-410.249
-410.256
-409.258
-411.238
-410.244
-409.257
-411.241
-410.247
-411.240
-319.283
-410.259
-411.250
-270.266
-410.255
-411.242
-410.263
-370.274
-410.260
-411.246
-411.247
-411.245
-411.249
-412.241
-411.255
-434.241
-248.308
-194.285
-411.248
-411.239
-411.244
-310.254
-413.243
-412.257
-412.254
-412.252
-412.253
-413.244
-412.256
-413.248
-412.261
-412.262
-195.245
-249.239
-413.238
-412.249
-412.259
-412.250
-337.238
-412.258
-260.273
-418.256
-413.240
-413.242
-412.251
-413.239
-413.245
-264.275
-412.255
-413.249
-413.247
-414.249
-414.247
-412.260
-413.253
-414.242
-413.246
-413.258
-413.250
-413.261
-413.257
-413.241
-413.262
-414.257
-414.243
-413.254
-414.240
-413.256
-413.259
-413.251
-414.253
-414.248
-414.238
-414.239
-414.244
-414.258
-413.255
-414.241
-414.245
-415.249
-413.260
-414.251
-414.252
-413.252
-415.238
-414.254
-414.256
-415.239
-415.242
-414.259
-414.255
-415.252
-414.250
-415.256
-416.242
-415.248
-415.244
-415.240
-416.238
-415.247
-414.260
-415.261
-416.243
-415.250
-415.257
-415.245
-415.260
-415.243
-415.255
-415.241
-414.261
-416.239
-415.253
-415.251
-416.240
-415.246
-416.244
-415.258
-416.248
-416.251
-415.254
-416.261
-416.256
-417.248
-416.245
-415.259
-416.252
-416.253
-417.242
-416.258
-416.249
-416.241
-417.259
-417.243
-417.238
-417.252
-416.246
-416.254
-416.259
-416.257
-416.250
-417.251
-417.241
-417.249
-417.244
-417.250
-417.253
-417.240
-416.247
-417.239
-417.247
-416.260
-416.255
-419.241
-421.244
-417.257
-417.260
-418.251
-417.245
-417.254
-418.239
-418.248
-418.243
-417.258
-418.240
-270.273
-418.245
-417.246
-418.252
-417.255
-418.242
-419.242
-211.279
-418.241
-418.246
-418.249
-419.243
-417.256
-418.259
-418.244
-418.247
-418.253
-418.238
-419.254
-420.242
-419.246
-419.255
-420.238
-419.259
-420.243
-420.240
-419.238
-418.254
-419.247
-419.250
-418.250
-419.244
-420.253
-420.244
-420.248
-420.247
-419.239
-419.252
-419.248
-419.251
-419.245
-420.239
-419.256
-419.258
-419.240
-420.254
-419.253
-420.249
-419.249
-310.282
-420.255
-420.245
-419.257
-421.255
-421.250
-420.258
-420.241
-420.250
-422.238
-420.246
-420.259
-411.256
-421.241
-420.256
-421.243
-420.251
-421.238
-421.240
-421.248
-422.239
-421.246
-418.257
-421.251
-421.256
-421.239
-421.258
-420.252
-420.257
-421.249
-422.240
-421.254
-421.245
-421.242
-421.252
-421.257
-421.247
-412.242
-423.247
-422.254
-424.241
-421.253
-423.243
-423.238
-422.256
-423.248
-423.241
-423.244
-422.252
-424.238
-435.251
-423.249
-422.257
-424.244
-423.252
-423.239
-422.255
-422.253
-423.242
-424.245
-422.258
-426.238
-424.246
-425.247
-424.247
-424.257
-424.239
-423.245
-423.253
-424.252
-423.240
-425.248
-426.240
-424.240
-423.254
-424.243
-423.250
-425.243
-424.256
-424.242
-423.246
-424.248
-423.255
-425.238
-423.257
-424.251
-425.249
-424.250
-423.251
-423.256
-424.253
-425.239
-425.242
-425.244
-426.250
-426.255
-424.249
-425.253
-426.245
-424.254
-425.245
-425.256
-425.240
-425.250
-426.241
-426.251
-426.256
-425.254
-424.255
-425.257
-426.246
-425.246
-427.241
-425.241
-425.251
-426.239
-425.252
-425.255
-426.244
-427.242
-426.252
-426.242
-426.247
-426.257
-426.243
-428.248
-428.249
-427.243
-427.247
-427.253
-428.250
-427.238
-426.253
-426.248
-428.244
-428.240
-428.245
-427.244
-427.246
-428.255
-427.239
-427.251
-427.248
-427.255
-426.254
-426.249
-427.252
-427.250
-427.245
-428.239
-427.240
-428.246
-428.241
-427.249
-428.256
-428.251
-428.238
-427.254
-431.239
-427.256
-429.242
-429.245
-428.247
-429.238
-428.242
-428.252
-429.246
-427.257
-429.249
-429.239
-429.243
-429.255
-428.243
-428.253
-430.241
-429.247
-430.251
-429.240
-429.244
-430.246
-428.254
-429.250
-429.253
-429.254
-429.248
-430.245
-429.241
-430.240
-430.242
-430.252
-429.256
-430.256
-432.247
-430.247
-429.251
-422.249
-430.243
-431.241
-430.253
-431.238
-431.254
-430.238
-431.250
-430.248
-429.252
-431.255
-430.239
-430.244
-431.244
-431.246
-431.242
-430.254
-430.249
-431.243
-432.248
-432.238
-431.253
-431.240
-431.251
-430.255
-430.250
-432.249
-431.249
-432.241
-431.245
-433.247
-433.242
-432.253
-432.252
-433.239
-432.239
-433.253
-431.252
-432.242
-431.247
-433.248
-432.254
-432.243
-433.254
-433.240
-432.240
-432.250
-431.248
-434.246
-432.244
-432.246
-432.255
-433.243
-433.249
-434.238
-433.241
-433.244
-432.251
-433.252
-432.245
-433.238
-435.241
-436.245
-434.254
-434.247
-433.255
-434.242
-437.239
-433.250
-434.252
-434.251
-434.245
-435.242
-433.245
-434.244
-434.240
-435.247
-435.252
-435.239
-434.248
-434.250
-434.243
-435.253
-433.251
-434.253
-435.238
-434.239
-433.246
-435.243
-436.242
-436.238
-435.240
-434.249
-435.244
-373.256
-436.246
-436.251
-435.248
-436.248
-436.243
-436.247
-436.249
-436.239
-435.249
-436.253
-435.245
-436.244
-435.250
-437.238
-437.240
-436.240
-436.250
-435.246
-436.252
-436.241
-255.305
-280.265
-189.290
-260.238
-593.249
-255.299
-347.274
-347.276
-255.306
-290.238
-392.257
-286.239
-392.258
-270.238
-392.259
-260.239
-280.238
-270.239
-350.240
-290.239
-270.240
-320.238
-270.244
-270.241
-243.261
-243.268
-243.263
-243.282
-243.269
-260.248
-260.249
-244.238
-204.281
-204.298
-204.302
-347.278
-204.304
-280.262
-270.264
-270.263
-204.308
-290.262
-194.288
-205.238
-204.309
-270.267
-243.308
-260.268
-260.267
-280.276
-290.283
-260.274
-280.269
-260.278
-244.239
-260.276
-310.283
-270.265
-260.275
-260.279
-280.263
-280.270
-270.272
-260.277
-270.270
-280.268
-290.288
-270.274
-290.282
-270.268
-290.265
-270.271
-280.291
-280.278
-270.297
-270.275
-290.287
-280.290
-290.289
-290.290
-290.297
-290.291
-280.289
-373.266
-290.292
-280.293
-280.292
-290.296
-280.299
-291.238
-260.303
-412.243
-291.239
-260.299
-439.247
-280.300
-260.304
-270.288
-261.238
-244.259
-244.263
-244.260
-260.292
-281.238
-260.298
-244.269
-260.305
-244.282
-271.238
-270.293
-270.295
-261.239
-270.296
-271.239
-270.301
-270.302
-271.240
-261.248
-261.250
-205.281
-281.262
-291.265
-291.278
-411.257
-205.308
-418.258
-281.269
-205.303
-245.238
-291.288
-205.304
-291.282
-244.308
-291.287
-291.283
-245.239
-205.309
-291.291
-271.264
-291.296
-206.238
-281.277
-206.239
-271.266
-291.290
-291.292
-281.268
-261.275
-261.273
-261.267
-261.268
-281.267
-281.278
-281.265
-271.265
-261.274
-271.272
-265.273
-281.266
-291.289
-271.263
-261.278
-261.276
-261.272
-245.258
-291.297
-271.271
-261.279
-292.238
-271.274
-328.287
-281.289
-281.283
-245.282
-261.277
-281.294
-282.238
-281.290
-245.269
-281.291
-281.292
-281.293
-282.239
-281.298
-245.262
-245.263
-245.267
-271.297
-271.296
-272.238
-292.261
-271.302
-261.304
-271.301
-261.299
-262.239
-271.293
-261.303
-261.292
-261.298
-271.295
-261.297
-292.290
-292.282
-272.243
-261.305
-272.239
-262.238
-292.264
-292.278
-245.308
-245.298
-292.288
-245.307
-292.283
-292.287
-246.239
-282.261
-292.295
-206.280
-262.247
-282.264
-292.291
-292.297
-292.292
-293.238
-292.289
-292.296
-282.262
-272.264
-282.266
-272.262
-282.267
-282.268
-194.289
-282.265
-282.269
-272.265
-206.308
-282.276
-206.309
-262.272
-272.263
-272.268
-246.259
-348.239
-207.238
-262.267
-272.271
-246.257
-272.266
-207.239
-272.272
-272.267
-262.268
-282.278
-272.274
-246.258
-282.288
-246.262
-282.293
-272.273
-282.294
-262.273
-282.283
-246.263
-271.267
-262.274
-262.277
-262.275
-282.289
-282.290
-282.291
-310.284
-282.299
-282.292
-246.282
-246.269
-282.298
-262.276
-293.264
-256.260
-283.238
-272.296
-262.299
-283.289
-283.239
-293.283
-293.282
-262.297
-293.288
-293.278
-262.291
-272.293
-272.297
-272.300
-246.308
-293.290
-262.304
-263.238
-412.244
-293.295
-262.298
-247.239
-262.303
-246.307
-272.301
-272.302
-294.238
-443.243
-293.289
-293.291
-263.239
-293.296
-263.246
-263.249
-283.268
-283.265
-283.269
-283.267
-283.266
-247.262
-247.257
-207.280
-283.264
-247.256
-386.271
-207.308
-247.261
-277.276
-294.261
-284.239
-290.278
-273.264
-247.282
-283.278
-273.266
-283.276
-247.266
-208.238
-273.265
-247.263
-247.280
-283.299
-283.292
-263.275
-273.274
-273.268
-273.270
-263.273
-263.274
-283.290
-263.267
-208.239
-283.283
-273.271
-263.276
-283.294
-283.288
-273.272
-294.278
-263.268
-283.293
-273.273
-263.277
-411.258
-263.272
-283.291
-294.288
-294.282
-283.298
-284.238
-294.296
-294.289
-294.290
-294.287
-294.291
-295.238
-294.295
-263.291
-422.241
-263.303
-273.301
-247.307
-248.239
-273.300
-247.308
-273.295
-274.241
-273.287
-263.298
-273.293
-273.296
-273.292
-263.297
-243.259
-264.239
-281.299
-264.238
-263.304
-248.255
-284.265
-295.263
-248.256
-284.267
-311.291
-284.264
-295.278
-284.268
-264.245
-248.263
-295.282
-248.258
-284.266
-248.261
-295.288
-248.262
-284.278
-295.287
-329.281
-274.266
-296.238
-295.296
-208.279
-194.290
-274.267
-248.282
-284.289
-274.265
-295.289
-295.295
-295.290
-248.280
-284.290
-274.271
-274.264
-284.288
-264.273
-296.239
-284.283
-274.268
-295.291
-264.272
-262.266
-285.238
-264.267
-274.273
-264.265
-264.274
-264.266
-284.298
-284.293
-284.291
-349.276
-285.239
-274.276
-284.292
-274.270
-264.268
-284.297
-248.307
-264.271
-209.238
-274.272
-208.308
-209.239
-284.299
-264.277
-448.240
-412.245
-248.306
-264.276
-274.286
-249.238
-274.293
-264.298
-296.262
-389.260
-274.291
-296.261
-296.282
-296.278
-274.296
-274.292
-274.295
-296.287
-296.288
-264.297
-274.300
-274.301
-296.289
-264.296
-249.255
-249.262
-265.239
-297.239
-297.238
-249.260
-264.303
-264.299
-296.294
-285.265
-285.264
-265.238
-249.257
-249.263
-285.266
-296.290
-296.291
-264.304
-249.261
-296.296
-296.295
-249.268
-265.244
-285.267
-285.268
-249.269
-249.279
-265.248
-285.278
-209.279
-249.280
-285.290
-297.261
-285.282
-285.297
-285.288
-275.267
-285.289
-285.293
-285.283
-209.296
-285.292
-275.264
-275.266
-265.268
-275.265
-285.291
-370.271
-275.268
-439.245
-265.267
-347.282
-275.270
-271.270
-253.280
-253.269
-275.271
-277.267
-285.298
-277.268
-265.274
-265.266
-253.277
-253.282
-275.272
-347.277
-277.266
-347.279
-286.238
-370.267
-265.271
-370.273
-370.270
-265.275
-209.308
-386.260
-277.270
-386.270
-337.246
-210.238
-386.264
-386.261
-265.276
-376.267
-439.249
-439.243
-370.272
-386.268
-439.242
-347.280
-348.240
-439.244
-348.243
-253.278
-371.253
-277.271
-387.247
-265.272
-386.269
-370.275
-347.281
-348.241
-411.259
-440.239
-371.250
-439.248
-387.248
-439.246
-348.242
-348.277
-371.251
-439.250
-387.249
-210.239
-371.257
-371.256
-387.254
-371.252
-439.251
-387.255
-348.278
-387.250
-387.256
-440.241
-348.276
-371.258
-439.252
-348.244
-440.240
-277.292
-440.242
-387.257
-371.259
-387.251
-583.252
-277.285
-387.252
-440.243
-253.305
-348.245
-348.279
-440.238
-253.306
-277.290
-254.239
-348.275
-348.274
-371.254
-387.259
-277.291
-387.253
-371.255
-277.293
-277.295
-371.265
-299.260
-299.261
-277.299
-277.300
-387.258
-348.280
-254.238
-299.278
-440.244
-371.266
-265.290
-349.239
-348.282
-348.281
-266.238
-278.239
-371.271
-371.269
-371.267
-440.245
-299.281
-371.270
-387.264
-387.260
-349.240
-387.261
-440.248
-371.275
-440.246
-265.296
-371.274
-388.248
-440.247
-371.272
-440.249
-372.249
-265.297
-387.271
-387.268
-299.293
-349.244
-387.270
-266.239
-299.290
-387.269
-388.247
-441.239
-440.252
-349.274
-440.250
-265.298
-349.245
-299.286
-441.238
-441.240
-584.252
-299.287
-372.251
-349.241
-388.249
-265.302
-372.250
-299.294
-349.242
-371.273
-265.303
-388.255
-299.289
-349.243
-440.251
-372.253
-265.304
-388.250
-299.288
-441.248
-441.241
-299.295
-441.242
-349.275
-372.252
-388.258
-293.287
-388.251
-441.243
-254.259
-311.238
-349.277
-349.280
-350.239
-441.249
-254.254
-254.260
-349.278
-388.252
-349.281
-350.242
-349.279
-266.244
-327.248
-372.254
-441.244
-372.255
-372.256
-328.239
-441.250
-388.253
-372.267
-388.254
-266.247
-313.290
-372.265
-441.245
-350.241
-441.247
-388.259
-441.246
-372.257
-350.243
-314.238
-372.266
-372.258
-254.261
-388.261
-332.238
-349.282
-331.287
-388.256
-388.260
-441.251
-442.239
-388.263
-388.257
-372.259
-442.241
-350.244
-422.243
-350.274
-372.269
-442.238
-372.270
-210.279
-372.271
-350.280
-442.240
-388.268
-332.239
-254.269
-278.267
-350.275
-373.250
-210.278
-351.239
-372.272
-442.248
-389.250
-278.269
-389.249
-278.268
-388.269
-350.276
-278.263
-254.277
-442.242
-442.247
-372.273
-373.252
-373.251
-388.270
-254.276
-350.277
-254.279
-350.281
-442.245
-389.251
-278.265
-372.274
-278.271
-442.243
-442.249
-372.275
-278.270
-332.247
-278.266
-254.278
-389.246
-332.277
-442.244
-389.248
-442.251
-254.268
-332.248
-373.257
-389.247
-266.275
-350.279
-443.240
-586.251
-373.258
-442.246
-351.240
-373.249
-254.280
-266.264
-351.242
-266.272
-373.253
-351.241
-278.276
-373.255
-389.252
-373.254
-332.279
-331.282
-389.254
-389.263
-442.250
-389.253
-351.244
-332.278
-443.238
-254.282
-351.280
-351.274
-351.243
-443.239
-266.265
-389.261
-211.238
-278.278
-373.272
-443.247
-332.283
-332.284
-373.270
-332.280
-389.256
-389.255
-351.281
-266.273
-389.259
-351.275
-351.278
-587.251
-266.266
-332.286
-373.259
-373.271
-443.241
-443.245
-443.244
-389.257
-352.240
-266.270
-389.268
-332.281
-390.250
-333.238
-443.246
-443.242
-352.276
-350.278
-389.269
-262.278
-351.279
-352.241
-266.271
-373.265
-352.277
-266.268
-266.274
-373.269
-389.258
-332.285
-210.307
-278.295
-373.273
-278.290
-389.270
-333.239
-352.279
-266.276
-278.292
-443.248
-352.242
-278.291
-278.293
-373.274
-352.274
-390.246
-352.243
-374.250
-254.295
-443.249
-333.247
-374.249
-278.300
-352.275
-390.248
-278.299
-390.247
-374.256
-443.251
-374.251
-352.280
-374.255
-443.250
-444.238
-374.252
-352.281
-390.249
-374.257
-445.245
-352.278
-333.278
-444.239
-374.253
-374.258
-444.242
-374.254
-390.253
-255.239
-254.306
-353.241
-254.305
-390.255
-255.238
-333.279
-390.251
-444.240
-390.254
-390.257
-390.256
-390.252
-333.283
-444.243
-411.260
-444.241
-444.244
-353.242
-444.245
-374.259
-333.280
-374.264
-353.243
-266.298
-444.246
-374.265
-390.258
-445.241
-444.247
-333.281
-266.302
-333.282
-333.285
-266.303
-353.274
-353.273
-353.276
-333.284
-266.304
-266.290
-374.267
-374.266
-374.270
-354.239
-353.275
-390.259
-390.260
-390.268
-353.280
-374.269
-266.296
-390.261
-444.248
-445.238
-444.249
-353.279
-390.263
-445.239
-333.286
-353.281
-334.238
-444.250
-353.277
-375.249
-353.278
-267.238
-391.245
-374.271
-374.272
-374.274
-445.240
-390.269
-374.273
-391.249
-255.251
-354.273
-266.297
-354.240
-375.248
-391.248
-267.239
-391.246
-375.250
-445.244
-391.247
-354.241
-445.242
-445.243
-267.247
-375.251
-590.250
-391.250
-354.242
-255.259
-446.238
-391.251
-334.279
-375.252
-446.239
-255.260
-375.259
-445.246
-375.253
-375.258
-391.257
-391.252
-255.261
-267.243
-445.247
-334.247
-354.278
-446.240
-354.259
-255.269
-375.264
-279.265
-267.246
-354.274
-375.254
-334.277
-334.276
-391.258
-279.263
-375.255
-391.253
-334.278
-354.275
-446.246
-354.276
-279.266
-279.269
-391.254
-445.248
-279.267
-375.256
-334.280
-354.277
-446.241
-375.257
-334.283
-279.276
-445.249
-391.255
-211.278
-391.256
-255.276
-354.279
-591.250
-334.281
-279.268
-375.265
-392.244
-354.280
-355.240
-334.282
-279.270
-391.259
-375.266
-375.268
-334.284
-355.239
-391.260
-255.277
-391.261
-375.269
-375.267
-355.241
-446.242
-376.248
-446.243
-391.263
-391.262
-375.270
-391.269
-355.274
-446.245
-446.244
-391.267
-446.249
-334.285
-447.238
-211.295
-355.276
-267.274
-255.278
-355.242
-375.272
-446.247
-255.279
-375.274
-355.259
-392.247
-392.246
-255.280
-447.240
-375.271
-376.249
-392.245
-279.278
-255.282
-447.239
-391.268
-376.250
-335.238
-334.286
-392.248
-446.248
-355.273
-355.272
-447.241
-279.293
-375.273
-278.264
-355.275
-256.239
-355.277
-279.289
-279.284
-376.251
-336.238
-279.290
-392.249
-356.277
-279.291
-267.264
-355.278
-447.242
-267.265
-376.252
-355.279
-279.292
-335.286
-355.280
-392.250
-335.247
-376.253
-356.276
-335.276
-356.239
-447.243
-376.254
-392.251
-448.244
-356.240
-376.270
-376.255
-392.252
-447.244
-356.278
-356.241
-376.271
-392.253
-447.245
-376.269
-376.256
-377.248
-447.246
-356.279
-392.254
-392.263
-448.245
-335.285
-392.262
-447.247
-392.267
-392.265
-335.284
-448.247
-448.246
-376.272
-267.276
-267.275
-376.273
-356.275
-356.280
-357.239
-377.252
-376.268
-392.268
-392.269
-448.248
-376.274
-357.273
-357.275
-449.238
-357.274
-357.240
-449.246
-594.249
-393.250
-357.276
-377.253
-393.244
-357.258
-449.247
-449.239
-357.241
-357.277
-377.249
-357.259
-393.251
-393.245
-377.254
-256.251
-393.247
-377.250
-336.279
-336.246
-393.246
-377.255
-449.242
-267.296
-449.241
-357.272
-336.281
-377.251
-377.256
-393.252
-267.297
-449.243
-393.254
-393.248
-256.259
-268.239
-336.277
-393.249
-393.253
-449.244
-267.303
-336.276
-358.241
-449.245
-267.298
-449.248
-336.282
-357.278
-450.238
-271.275
-357.279
-377.257
-268.242
-377.258
-393.255
-267.302
-358.272
-336.283
-393.256
-450.239
-286.278
-358.239
-596.238
-358.240
-450.240
-450.246
-377.259
-393.262
-268.243
-377.261
-268.238
-393.257
-256.276
-286.264
-377.264
-450.241
-393.263
-358.258
-256.277
-393.258
-336.284
-377.269
-377.266
-450.247
-393.259
-336.285
-358.271
-393.265
-286.265
-393.260
-450.242
-377.270
-286.266
-451.238
-337.239
-393.261
-358.273
-450.244
-358.257
-256.278
-358.259
-233.289
-286.267
-450.245
-358.274
-377.271
-377.265
-248.269
-377.267
-256.279
-393.267
-256.268
-286.287
-450.243
-337.277
-359.239
-377.268
-378.253
-451.239
-358.276
-358.275
-394.249
-286.282
-377.272
-378.252
-286.283
-337.275
-394.243
-393.268
-249.306
-337.276
-286.293
-358.277
-451.240
-394.244
-337.282
-358.278
-452.238
-377.273
-451.241
-394.250
-378.248
-451.247
-394.245
-597.238
-337.283
-286.297
-286.288
-359.258
-394.246
-359.257
-451.242
-358.279
-249.307
-249.282
-286.289
-451.243
-378.255
-378.249
-451.244
-337.278
-286.298
-359.259
-394.251
-394.247
-250.238
-378.254
-452.239
-250.239
-451.245
-337.284
-378.250
-394.252
-249.297
-286.291
-286.290
-378.251
-452.240
-337.280
-337.279
-256.305
-286.292
-452.245
-394.248
-378.256
-359.256
-359.240
-394.253
-337.281
-451.246
-359.271
-287.238
-597.248
-394.260
-287.239
-337.285
-359.272
-394.254
-338.239
-338.238
-256.294
-378.257
-452.241
-359.274
-359.273
-256.299
-598.238
-394.255
-378.259
-378.258
-338.245
-338.275
-452.242
-394.257
-394.256
-268.267
-246.280
-378.267
-452.244
-394.261
-452.243
-453.238
-359.275
-378.269
-360.257
-394.262
-378.261
-256.304
-453.239
-378.268
-338.276
-359.276
-378.266
-394.267
-394.258
-268.264
-268.268
-256.306
-453.240
-378.264
-360.258
-452.246
-453.241
-257.238
-394.263
-394.259
-257.239
-378.270
-268.265
-452.247
-360.259
-268.266
-338.277
-359.279
-359.277
-379.251
-394.265
-360.239
-268.270
-395.243
-378.265
-394.268
-250.260
-454.243
-360.240
-453.242
-378.271
-268.271
-453.243
-394.266
-338.278
-268.272
-598.248
-360.271
-268.273
-339.239
-338.279
-268.274
-453.244
-378.272
-250.254
-360.272
-599.238
-338.280
-378.273
-338.281
-453.245
-268.275
-379.254
-250.257
-379.253
-360.273
-360.274
-395.242
-360.279
-361.239
-379.248
-379.249
-453.246
-338.283
-395.244
-360.275
-454.238
-361.258
-454.239
-360.276
-395.247
-379.255
-361.255
-454.240
-379.250
-454.244
-257.250
-395.248
-250.261
-454.242
-338.284
-395.249
-257.259
-395.245
-257.252
-379.252
-250.262
-395.250
-379.257
-395.246
-361.256
-360.278
-360.277
-338.285
-379.256
-454.241
-250.269
-379.258
-250.263
-339.238
-395.257
-395.251
-600.238
-250.268
-361.274
-361.257
-454.245
-268.289
-395.252
-379.259
-339.277
-454.246
-395.253
-395.258
-268.295
-455.238
-250.278
-287.278
-600.247
-395.259
-395.260
-257.260
-455.239
-379.268
-250.279
-287.264
-455.244
-268.296
-339.245
-379.260
-361.275
-339.275
-257.268
-361.259
-601.238
-455.245
-250.280
-361.270
-395.254
-339.278
-361.271
-268.297
-379.261
-287.282
-287.265
-257.274
-379.264
-379.269
-455.240
-361.272
-361.276
-395.255
-339.279
-339.280
-339.276
-268.298
-395.256
-395.261
-379.265
-257.275
-455.241
-380.249
-379.267
-455.243
-361.273
-395.266
-455.242
-456.240
-379.266
-456.241
-287.266
-339.282
-339.281
-361.277
-379.270
-456.238
-287.283
-268.301
-361.278
-379.271
-395.262
-268.302
-379.272
-456.239
-395.263
-362.254
-287.287
-395.264
-380.253
-362.255
-457.238
-339.283
-257.276
-396.247
-379.273
-396.245
-362.256
-268.303
-269.245
-257.277
-380.252
-380.248
-287.288
-380.259
-257.278
-456.242
-269.238
-250.306
-395.267
-339.284
-396.246
-287.293
-601.247
-269.239
-362.257
-456.243
-250.307
-257.279
-287.290
-362.272
-287.289
-251.238
-456.244
-457.241
-269.241
-602.238
-340.239
-457.240
-340.238
-287.292
-362.271
-396.242
-257.280
-287.291
-287.298
-362.258
-287.297
-396.243
-380.254
-257.281
-362.259
-288.238
-380.250
-396.248
-456.245
-269.242
-380.251
-396.250
-362.270
-251.239
-396.244
-457.239
-457.242
-288.239
-362.273
-340.245
-340.274
-380.255
-362.274
-380.256
-396.249
-362.275
-340.282
-380.257
-340.275
-457.243
-380.258
-340.276
-362.276
-396.252
-362.278
-396.251
-362.277
-458.243
-458.238
-380.260
-457.244
-340.277
-458.239
-396.257
-396.254
-396.253
-340.278
-341.238
-363.257
-458.241
-458.244
-458.240
-363.254
-380.269
-380.268
-340.283
-363.270
-363.259
-380.261
-396.258
-459.238
-257.299
-396.255
-396.259
-396.260
-340.280
-380.266
-340.281
-340.284
-363.255
-341.239
-458.242
-396.261
-363.256
-257.304
-363.258
-459.239
-380.264
-459.240
-603.238
-257.293
-380.265
-269.263
-381.249
-396.256
-257.294
-459.241
-380.270
-257.305
-269.268
-396.262
-460.243
-257.306
-396.263
-251.253
-397.244
-258.238
-341.276
-363.271
-363.272
-459.242
-251.256
-380.271
-380.272
-258.239
-396.264
-380.273
-364.253
-459.243
-396.266
-341.244
-269.264
-269.270
-363.273
-460.238
-363.274
-381.253
-460.242
-341.277
-381.248
-363.275
-397.245
-341.274
-381.254
-396.267
-604.238
-251.262
-381.255
-363.277
-341.245
-397.246
-364.254
-460.239
-269.265
-397.241
-341.278
-381.251
-363.276
-251.263
-341.279
-251.264
-460.240
-381.257
-381.252
-381.250
-269.267
-364.255
-341.275
-461.238
-397.243
-397.242
-251.259
-363.278
-461.239
-341.282
-269.266
-364.257
-381.256
-460.241
-288.263
-251.260
-342.238
-251.261
-341.281
-397.247
-364.256
-397.248
-269.271
-381.258
-269.272
-461.241
-461.240
-397.249
-288.264
-364.273
-461.242
-341.280
-463.238
-604.246
-397.256
-269.273
-364.258
-258.250
-462.242
-464.240
-381.259
-269.274
-251.279
-381.260
-269.275
-381.269
-251.268
-397.250
-288.265
-251.280
-288.266
-364.274
-397.251
-397.257
-462.238
-258.259
-341.283
-251.282
-462.239
-288.278
-288.282
-463.240
-364.270
-364.275
-251.269
-463.239
-364.259
-251.283
-341.284
-288.283
-381.264
-381.270
-606.238
-381.261
-342.239
-397.254
-381.265
-397.252
-382.248
-364.271
-364.277
-364.272
-342.277
-251.278
-288.287
-397.258
-397.253
-462.240
-381.268
-342.244
-381.266
-462.241
-397.255
-463.241
-364.276
-288.289
-288.288
-258.260
-381.271
-342.274
-382.253
-342.245
-381.272
-397.259
-365.253
-258.268
-288.290
-365.252
-463.242
-397.260
-382.249
-288.291
-397.261
-365.258
-382.255
-397.263
-397.262
-342.275
-269.297
-365.254
-288.292
-465.240
-365.270
-464.238
-464.239
-465.239
-382.250
-398.241
-342.276
-269.301
-288.293
-342.281
-289.238
-397.264
-365.259
-365.255
-398.243
-607.238
-464.241
-382.251
-398.242
-382.254
-342.278
-466.238
-342.282
-397.265
-342.283
-269.288
-289.239
-258.274
-365.256
-397.266
-465.241
-365.271
-269.293
-365.272
-269.295
-465.238
-398.244
-365.257
-269.296
-382.256
-288.296
-382.257
-288.297
-258.275
-288.298
-269.302
-382.252
-398.246
-342.279
-272.292
-382.265
-342.280
-343.277
-397.267
-269.303
-466.239
-398.245
-251.306
-251.296
-342.284
-258.279
-466.240
-258.277
-365.273
-251.307
-273.267
-343.238
-382.258
-382.269
-258.280
-382.268
-365.274
-382.259
-252.238
-343.274
-275.276
-382.270
-382.260
-343.239
-365.276
-398.247
-343.245
-365.275
-398.248
-382.264
-467.238
-398.253
-382.261
-467.239
-398.250
-607.245
-343.275
-398.249
-365.277
-398.254
-608.238
-468.238
-571.250
-366.252
-366.256
-467.240
-252.239
-468.239
-366.253
-382.272
-382.266
-366.257
-398.255
-398.251
-382.271
-398.252
-570.251
-568.253
-398.257
-383.254
-398.256
-343.276
-343.243
-343.244
-608.245
-366.254
-366.255
-275.292
-258.304
-366.258
-571.251
-609.238
-366.276
-275.296
-383.248
-252.253
-366.259
-258.299
-398.258
-610.238
-398.266
-383.249
-275.286
-383.256
-571.252
-398.259
-275.300
-275.291
-275.301
-343.278
-258.305
-571.253
-366.270
-259.239
-343.279
-343.280
-398.267
-366.271
-366.272
-573.248
-259.238
-258.293
-366.273
-344.239
-383.250
-573.251
-383.251
-344.238
-275.293
-276.240
-383.252
-367.252
-398.260
-343.281
-366.277
-398.261
-383.253
-258.298
-252.259
-367.254
-572.250
-366.274
-398.262
-275.295
-383.257
-367.253
-343.282
-572.251
-573.250
-366.275
-344.242
-367.257
-572.253
-344.243
-398.263
-399.243
-383.255
-343.283
-367.270
-574.249
-398.265
-383.258
-399.240
-367.255
-383.259
-399.241
-289.265
-383.260
-399.242
-573.253
-574.248
-383.272
-289.278
-367.256
-344.244
-252.260
-575.248
-252.261
-344.277
-383.261
-611.238
-574.253
-344.278
-399.244
-252.262
-383.264
-575.249
-252.263
-252.269
-367.272
-344.279
-383.265
-344.245
-399.251
-289.287
-399.245
-611.244
-367.258
-252.268
-344.275
-367.273
-574.251
-344.274
-252.277
-384.249
-367.259
-259.249
-252.278
-384.248
-367.267
-383.268
-259.251
-289.282
-289.288
-383.270
-612.238
-383.269
-399.252
-399.246
-289.289
-344.276
-383.271
-289.290
-399.248
-399.247
-399.258
-367.271
-576.247
-252.282
-399.249
-384.254
-289.283
-289.291
-399.250
-344.280
-344.281
-252.279
-289.292
-367.274
-344.282
-367.275
-289.296
-252.280
-399.259
-384.250
-368.251
-367.276
-344.283
-399.261
-399.253
-384.252
-345.238
-368.252
-384.251
-575.253
-399.255
-399.254
-384.253
-368.253
-384.258
-368.259
-576.246
-289.297
-384.257
-399.256
-384.259
-399.257
-345.239
-345.244
-576.248
-252.283
-297.287
-368.254
-399.260
-399.262
-384.255
-399.263
-577.246
-576.253
-613.238
-345.245
-297.262
-297.278
-577.247
-345.274
-384.260
-368.256
-276.264
-368.267
-345.243
-614.238
-384.261
-368.255
-368.270
-345.242
-368.257
-384.271
-368.271
-384.256
-368.275
-368.258
-437.246
-368.272
-399.265
-297.288
-384.264
-276.265
-577.248
-345.275
-276.266
-399.266
-297.289
-297.290
-345.276
-252.307
-384.265
-345.277
-276.267
-437.243
-422.242
-368.273
-297.294
-384.268
-346.238
-297.295
-422.244
-368.274
-276.268
-385.249
-345.278
-422.245
-384.269
-298.238
-259.268
-437.244
-422.248
-345.279
-614.243
-384.270
-276.270
-345.283
-368.276
-385.250
-259.274
-577.253
-298.239
-346.239
-615.238
-259.280
-253.238
-259.275
-615.243
-345.280
-369.254
-252.296
-369.253
-276.271
-437.241
-437.245
-252.305
-385.251
-345.281
-259.276
-252.306
-616.238
-437.242
-369.255
-259.277
-385.259
-369.251
-385.252
-276.272
-345.282
-259.278
-578.246
-346.281
-276.276
-385.248
-346.240
-369.252
-259.279
-346.244
-578.253
-437.247
-369.256
-253.239
-346.241
-385.253
-276.292
-369.257
-437.248
-385.254
-385.255
-385.261
-438.239
-437.249
-346.243
-346.242
-369.259
-385.260
-369.258
-617.238
-276.293
-369.266
-438.240
-385.256
-346.245
-346.277
-437.251
-346.274
-259.293
-437.250
-385.257
-437.252
-369.273
-369.267
-276.295
-259.298
-579.244
-385.258
-276.296
-346.278
-579.245
-346.279
-437.253
-346.280
-346.275
-438.238
-385.265
-579.246
-369.272
-618.238
-438.241
-369.270
-385.264
-253.252
-347.240
-369.271
-580.245
-346.276
-253.255
-617.242
-385.269
-369.275
-276.291
-369.274
-276.300
-259.299
-370.251
-438.242
-370.250
-276.301
-385.268
-438.243
-618.242
-298.281
-370.252
-438.244
-619.238
-620.238
-385.270
-346.282
-579.253
-259.304
-386.252
-259.305
-298.287
-438.245
-370.253
-347.242
-253.263
-438.246
-370.254
-347.243
-582.243
-298.260
-438.251
-298.261
-347.244
-580.244
-385.271
-370.259
-347.239
-346.283
-386.253
-298.278
-370.256
-211.306
-386.254
-347.238
-386.249
-438.252
-253.259
-298.288
-370.255
-370.257
-438.248
-347.245
-386.248
-620.241
-253.261
-438.253
-386.250
-298.294
-438.249
-298.289
-621.238
-438.247
-299.238
-298.295
-347.241
-386.251
-267.267
-386.255
-370.258
-438.250
-347.275
-386.256
-370.266
-386.258
-439.238
-256.238
-335.281
-373.267
-439.240
-439.239
-299.239
-581.244
-580.253
-621.241
-277.263
-335.279
-622.238
-376.259
-447.248
-277.264
-622.241
-250.282
-333.277
-376.257
-212.238
-623.238
-211.307
-376.264
-624.238
-356.259
-279.295
-265.265
-376.258
-448.243
-356.272
-376.265
-267.270
-338.282
-267.268
-629.238
-253.260
-360.256
-267.266
-448.238
-267.271
-448.242
-335.278
-335.280
-630.238
-392.261
-448.241
-267.273
-335.277
-267.272
-448.239
-339.285
-256.280
-277.265
-439.241
-356.242
-356.273
-258.276
-298.290
-356.274
-386.259
-335.282
-258.278
-392.260
-000.254
-376.266
-318.285
-000.255
-386.257
-001.254
-356.258
-001.255
-002.254
-002.255
-003.254
-003.255
-004.254
-004.255
-005.254
-005.255
-006.254
-006.255
-007.254
-007.255
-008.254
-008.255
-009.254
-009.255
-010.254
-010.255
-011.254
-011.255
-012.254
-012.255
-013.254
-013.255
-014.254
-014.255
-015.254
-015.255
-016.254
-016.255
-017.254
-017.255
-018.254
-018.255
-019.254
-019.255
-020.254
-020.255
-021.254
-021.255
-022.254
-022.255
-023.254
-023.255
-024.254
-024.255
-025.254
-025.255
-026.254
-026.255
-027.254
-027.255
-028.254
-028.255
-029.254
-029.255
-030.254
-030.255
-031.254
-031.255
-032.254
-090.302
-091.301
-091.302
-092.301
-092.302
-093.300
-093.301
-094.300
-094.301
-095.300
-124.299
-125.299
-126.299
-127.299
-129.299
-130.299
-131.299
-132.299
-133.299
-134.299
-135.299
-136.299
-137.299
-139.298
-141.297
-180.291
-181.291
-182.291
-183.291
-237.265
-238.264
-238.265
-239.264
-239.265
-240.264
-241.264
-249.265
-281.270
-282.270
-283.270
-284.269
-284.270
-285.269
-285.270
-286.268
-286.269
-286.270
-287.267
-287.268
-287.269
-287.270
-288.267
-288.268
-288.269
-288.270
-289.266
-289.267
-289.268
-289.269
-289.270
-290.266
-290.267
-290.268
-290.269
-290.270
-291.266
-291.267
-291.268
-291.269
-291.270
-292.266
-292.267
-292.268
-292.269
-292.270
-293.266
-293.267
-293.268
-293.269
-293.270
-294.266
-294.267
-294.268
-294.269
-294.270
-295.266
-295.267
-295.268
-295.269
-296.266
-296.267
-296.268
-296.269
-297.266
-297.267
-297.268
-298.266
-298.267
-298.268
-299.266
-299.267
-299.268
-300.266
-300.267
-301.266
-302.266
-308.269
-309.269
-310.255
-310.268
-310.269
-311.254
-311.255
-311.268
-311.269
-312.254
-312.255
-312.267
-312.268
-312.269
-313.253
-313.254
-313.255
-313.267
-313.268
-313.269
-314.252
-314.253
-314.254
-314.255
-314.266
-314.267
-314.268
-314.269
-315.252
-315.253
-315.254
-315.255
-315.266
-315.267
-315.268
-315.269
-316.252
-316.253
-316.254
-316.255
-316.266
-316.267
-316.268
-316.269
-317.251
-317.252
-317.253
-317.254
-317.255
-317.265
-317.266
-317.267
-317.268
-317.269
-318.251
-318.252
-318.253
-318.254
-318.255
-318.265
-318.266
-318.267
-318.268
-318.269
-318.271
-319.250
-319.251
-319.252
-319.253
-319.254
-319.255
-319.264
-319.265
-319.266
-319.267
-319.268
-319.269
-319.271
-320.250
-320.251
-320.252
-320.253
-320.254
-320.255
-320.264
-320.265
-320.266
-320.267
-320.268
-320.269
-320.270
-320.271
-321.249
-321.250
-321.251
-321.252
-321.253
-321.254
-321.255
-321.263
-321.264
-321.265
-321.266
-321.267
-321.268
-321.269
-321.270
-321.271
-322.249
-322.250
-322.251
-322.252
-322.253
-322.254
-322.263
-322.264
-322.265
-322.266
-322.267
-322.268
-322.269
-322.270
-322.271
-323.249
-323.250
-323.251
-323.252
-323.253
-323.254
-323.261
-323.262
-323.263
-323.264
-323.265
-323.266
-323.267
-323.268
-323.269
-323.270
-323.271
-324.249
-324.250
-324.251
-324.252
-324.253
-324.261
-324.262
-324.263
-324.264
-324.265
-324.266
-324.267
-324.268
-324.269
-324.270
-324.271
-325.249
-325.250
-325.251
-325.252
-325.253
-325.260
-325.261
-325.262
-325.263
-325.264
-325.265
-325.266
-325.267
-325.268
-325.269
-325.270
-325.271
-326.249
-326.250
-326.251
-326.252
-326.260
-326.261
-326.262
-326.263
-326.264
-326.265
-326.266
-326.267
-326.268
-326.269
-326.270
-326.271
-327.249
-327.250
-327.251
-327.252
-327.259
-327.260
-327.261
-327.262
-327.263
-327.264
-327.265
-327.266
-327.267
-327.268
-327.269
-327.270
-327.271
-328.249
-328.250
-328.251
-328.259
-328.260
-328.261
-328.262
-328.263
-328.264
-328.265
-328.266
-328.267
-328.268
-328.269
-328.270
-328.271
-329.249
-329.250
-329.251
-329.258
-329.259
-329.260
-329.261
-329.262
-329.263
-329.264
-329.265
-329.266
-329.267
-329.268
-329.269
-329.270
-329.271
-330.249
-330.250
-330.258
-330.259
-330.260
-330.261
-330.262
-330.263
-330.264
-330.265
-330.266
-330.267
-330.268
-330.269
-330.270
-330.271
-331.249
-331.250
-331.258
-331.259
-331.260
-331.261
-331.262
-331.263
-331.264
-331.265
-331.266
-331.267
-331.268
-331.269
-331.270
-332.249
-332.258
-332.259
-332.260
-332.261
-332.262
-332.263
-332.264
-332.265
-332.266
-332.267
-332.268
-332.269
-332.270
-333.248
-333.249
-333.258
-333.259
-333.260
-333.261
-333.262
-333.263
-333.264
-333.265
-333.266
-333.267
-333.268
-333.269
-333.270
-334.248
-334.258
-334.259
-334.260
-334.261
-334.262
-334.263
-334.264
-334.265
-334.266
-334.267
-334.268
-334.269
-334.270
-335.258
-335.259
-335.260
-335.261
-335.262
-335.263
-335.264
-335.265
-335.266
-335.267
-335.268
-335.269
-336.247
-336.258
-336.259
-336.260
-336.261
-336.262
-336.263
-336.264
-336.265
-336.266
-336.267
-336.268
-336.269
-336.275
-337.258
-337.259
-337.260
-337.261
-337.262
-337.263
-337.264
-337.265
-337.266
-337.267
-337.268
-337.269
-338.258
-338.259
-338.260
-338.261
-338.262
-338.263
-338.264
-338.265
-338.266
-338.267
-338.268
-338.274
-339.258
-339.259
-339.260
-339.261
-339.262
-339.263
-339.264
-339.265
-339.266
-339.267
-339.268
-339.274
-340.258
-340.259
-340.260
-340.261
-340.262
-340.263
-340.264
-340.265
-340.266
-340.267
-340.268
-340.273
-341.258
-341.259
-341.260
-341.261
-341.262
-341.263
-341.264
-341.265
-341.266
-341.267
-341.268
-341.273
-342.258
-342.259
-342.260
-342.261
-342.262
-342.263
-342.264
-342.265
-342.266
-342.267
-342.268
-342.272
-342.273
-343.258
-343.259
-343.260
-343.261
-343.262
-343.263
-343.264
-343.265
-343.266
-343.267
-343.268
-343.272
-343.273
-344.258
-344.259
-344.260
-344.261
-344.262
-344.263
-344.264
-344.265
-344.266
-344.267
-344.268
-344.271
-344.272
-344.273
-345.258
-345.259
-345.260
-345.261
-345.262
-345.263
-345.264
-345.265
-345.266
-345.267
-345.268
-345.271
-345.272
-345.273
-346.258
-346.259
-346.260
-346.261
-346.262
-346.263
-346.264
-346.265
-346.266
-346.267
-346.268
-346.271
-346.272
-346.273
-347.258
-347.259
-347.260
-347.261
-347.262
-347.263
-347.264
-347.265
-347.266
-347.267
-347.268
-347.270
-347.271
-347.272
-347.273
-348.258
-348.259
-348.260
-348.261
-348.262
-348.263
-348.264
-348.265
-348.266
-348.267
-348.268
-348.270
-348.271
-348.272
-348.273
-349.258
-349.259
-349.260
-349.261
-349.262
-349.263
-349.264
-349.265
-349.266
-349.267
-349.268
-349.269
-349.270
-349.271
-349.272
-349.273
-350.258
-350.259
-350.260
-350.261
-350.262
-350.263
-350.264
-350.265
-350.266
-350.267
-350.268
-350.269
-350.270
-350.271
-350.272
-350.273
-351.258
-351.259
-351.260
-351.261
-351.262
-351.263
-351.264
-351.265
-351.266
-351.267
-351.268
-351.269
-351.270
-351.271
-351.272
-351.273
-352.239
-352.258
-352.259
-352.260
-352.261
-352.262
-352.263
-352.264
-352.265
-352.266
-352.267
-352.268
-352.269
-352.270
-352.271
-352.272
-352.273
-353.258
-353.259
-353.260
-353.261
-353.262
-353.263
-353.264
-353.265
-353.266
-353.267
-353.268
-353.269
-353.270
-353.271
-353.272
-354.258
-354.260
-354.261
-354.262
-354.263
-354.264
-354.265
-354.266
-354.267
-354.268
-354.269
-354.270
-354.271
-354.272
-355.258
-355.260
-355.261
-355.262
-355.263
-355.264
-355.265
-355.266
-355.267
-355.268
-355.269
-355.270
-355.271
-356.260
-356.261
-356.262
-356.263
-356.264
-356.265
-356.266
-356.267
-356.268
-356.269
-356.270
-356.271
-357.260
-357.261
-357.262
-357.263
-357.264
-357.265
-357.266
-357.267
-357.268
-357.269
-357.270
-357.271
-358.260
-358.261
-358.262
-358.263
-358.264
-358.265
-358.266
-358.267
-358.268
-358.269
-358.270
-359.260
-359.261
-359.262
-359.263
-359.264
-359.265
-359.266
-359.267
-359.268
-359.269
-359.270
-360.260
-360.261
-360.262
-360.263
-360.264
-360.265
-360.266
-360.267
-360.268
-360.269
-360.270
-361.260
-361.261
-361.262
-361.263
-361.264
-361.265
-361.266
-361.267
-361.268
-361.269
-362.260
-362.261
-362.262
-362.263
-362.264
-362.265
-362.266
-362.267
-362.268
-362.269
-363.260
-363.261
-363.262
-363.263
-363.264
-363.265
-363.266
-363.267
-363.268
-363.269
-364.260
-364.261
-364.262
-364.263
-364.264
-364.265
-364.266
-364.267
-364.268
-364.269
-365.260
-365.261
-365.262
-365.263
-365.264
-365.265
-365.266
-365.267
-365.268
-365.269
-366.260
-366.261
-366.262
-366.263
-366.264
-366.265
-366.266
-366.267
-366.268
-366.269
-367.260
-367.261
-367.262
-367.263
-367.264
-367.265
-367.266
-367.268
-367.269
-368.260
-368.261
-368.262
-368.263
-368.264
-368.265
-368.266
-368.268
-368.269
-369.260
-369.261
-369.262
-369.263
-369.264
-369.265
-369.268
-369.269
-370.260
-370.261
-370.262
-370.263
-370.264
-370.265
-370.268
-370.269
-371.260
-371.261
-371.262
-371.263
-371.264
-371.268
-372.260
-372.261
-372.262
-372.263
-372.264
-372.268
-373.260
-373.261
-373.262
-373.263
-373.264
-373.268
-374.260
-374.261
-374.262
-374.263
-374.268
-375.260
-375.261
-375.262
-375.263
-376.260
-376.261
-376.262
-376.263
-377.260
-377.262
-377.263
-378.260
-378.262
-378.263
-379.262
-379.263
-380.262
-380.263
-381.262
-381.263
-382.262
-382.263
-383.262
-383.263
-384.262
-384.263
-385.262
-385.263
-386.262
-386.263
-387.262
-387.263
-388.262
-388.264
-389.262
-390.262
-567.255
-568.255
-569.255
-570.254
-570.255
-571.254
-571.255
-572.254
-572.255
-573.254
-574.254
-575.254
-576.254
-584.242
-605.238
diff --git a/scripts/python/cfis_field_select.py b/scripts/python/cfis_field_select.py
index 71733cab0..efe961ca7 100755
--- a/scripts/python/cfis_field_select.py
+++ b/scripts/python/cfis_field_select.py
@@ -26,7 +26,6 @@
from optparse import OptionParser, IndentedHelpFormatter, OptionGroup
from astropy.io import fits
-from astropy.table import Table, Column
from astropy import units
from astropy.coordinates import Angle, SkyCoord
diff --git a/scripts/python/merge_final_cat.py b/scripts/python/merge_final_cat.py
index 7f62ae250..1b274deb0 100755
--- a/scripts/python/merge_final_cat.py
+++ b/scripts/python/merge_final_cat.py
@@ -28,8 +28,8 @@
class param:
"""General class to store (default) variables
- """
+ """
def __init__(self, **kwds):
self.__dict__.update(kwds)
@@ -49,10 +49,10 @@ def params_default():
Returns
-------
- p_def: class param
+ class param
parameter values
- """
+ """
p_def = param(
input_path = '.',
input_name_base = 'final_cat',
@@ -72,12 +72,11 @@ def parse_options(p_def):
Returns
-------
- options: tuple
- Command line options
- args: str
- Command line str
- """
+ list
+ command line options
+ command line str
+ """
usage = "%prog [OPTIONS]"
parser = OptionParser(usage=usage)
@@ -90,7 +89,6 @@ def parse_options(p_def):
default=p_def.input_path,
help=f'input path, default=\'{p_def.input_path}\''
)
-
parser.add_option(
'-n',
'--input_name_base',
@@ -99,6 +97,14 @@ def parse_options(p_def):
default=p_def.input_name_base,
help=f'input name base, default=\'{p_def.input_name_base}\''
)
+ parser.add_option(
+ '-l',
+ '--list_tile_ID_path',
+ dest='tile_ID_list_path',
+ type='string',
+ default=None,
+ help=f'tile ID list, default: Use all data in input files'
+ )
# Control
parser.add_option(
@@ -142,10 +148,10 @@ def check_options(options):
Returns
-------
- erg: bool
+ bool
Result of option check. False if invalid option value.
- """
+ """
return True
@@ -161,10 +167,10 @@ def update_param(p_def, options):
Returns
-------
- param: class param
+ class param
updated paramter values
- """
+ """
param = copy.copy(p_def)
# Update keys in param according to options values
@@ -194,10 +200,10 @@ def read_param_file(path, verbose=False):
Returns
-------
- param_list: list of str
+ list of str
parameter names
- """
+ """
param_list = []
if path:
@@ -250,10 +256,10 @@ def get_data(path, hdu_num, param_list):
Returns
-------
- data: numpy array
+ numpy array
data columns
- """
+ """
hdu_list = fits.open(path)
hdu = hdu_list[hdu_num]
@@ -290,21 +296,42 @@ def main(argv=None):
param.param_list = read_param_file(param.param_path, verbose=param.verbose)
+ # read (optional) input tile ID file
+ if param.tile_ID_list_path:
+ tile_ID_list = cfis.read_list(param.tile_ID_list_path)
+
+ # find input catalogue FITS files
l = os.listdir(path=path)
ext = 'fits'
lpath = []
for this_l in l:
- if this_l.endswith(ext):
- lpath.append(os.path.join(path, this_l))
+
+ add_this_l = False
+
+ # mark to add if correct extension, matches input pattern, not `.npy` file
+ if (
+ this_l.endswith(ext)
+ and (f'{param.input_name_base}' in this_l)
+ and ('.npy' not in this_l)
+ ):
+ add_this_l = True
+
+ # unmark to add if no in (optional) input tile ID file
+ if param.tile_ID_list_path:
+ nix, niy = cfis.get_tile_number(this_l)
+ tile_ID = f'{nix}.{niy}'
+ if tile_ID not in tile_ID_list:
+ add_this_l = False
+ if add_this_l:
+ lpath.append(os.path.join(path, this_l))
if param.verbose:
- print(f'{len(lpath)} files files found in input path')
+ print(f'{len(lpath)} files files to merge found')
count = 0
- # Determine number of columns and keys
+ # Determine number of columns and keys from first catalogue file
d_tmp = get_data(lpath[0], param.hdu_num, param.param_list)
-
d = np.zeros(d_tmp.shape, dtype=d_tmp.dtype)
for key in d_tmp.dtype.names:
d[key] = d_tmp[key]
@@ -312,12 +339,11 @@ def main(argv=None):
if param.verbose:
print(f'File \'{lpath[0]}\' copied ({count}/{len(lpath)})')
- for idx in lpath[1:]:
- if (f'{param.input_name_base}' not in idx) | ('.npy' in idx):
- continue
+ # merge remaining catalogue files
+ for fname in lpath[1:]:
try:
- d_tmp = get_data(idx, param.hdu_num, param.param_list)
+ d_tmp = get_data(fname, param.hdu_num, param.param_list)
dd = np.zeros(d_tmp.shape, dtype=d.dtype)
for key in d_tmp.dtype.names:
@@ -325,11 +351,11 @@ def main(argv=None):
count = count + 1
if param.verbose:
- print(f'File \'{idx}\' copied ({count}/{len(lpath)})')
+ print(f'File \'{fname}\' copied ({count}/{len(lpath)})')
d = np.concatenate((d, dd))
except:
- print(f'Error while adding file \'{idx}\', {len(dd)} objects not in final cat')
+ print(f'Error while adding file \'{fname}\', {len(dd)} objects not in final cat')
# Save merged catalogue as numpy binary file
if param.verbose:
diff --git a/shapepipe/info.py b/shapepipe/info.py
index 9be0577d6..d230bcd7f 100644
--- a/shapepipe/info.py
+++ b/shapepipe/info.py
@@ -15,7 +15,7 @@
# Package Info
-version_info = (1, 0, 0)
+version_info = (1, 0, 1)
__version__ = '.'.join(str(c) for c in version_info)
__name__ = 'shapepipe'
__author__ = 'Samuel Farrens'
diff --git a/shapepipe/modules/get_images_package/__init__.py b/shapepipe/modules/get_images_package/__init__.py
index 8544168ab..2c0b6b69c 100644
--- a/shapepipe/modules/get_images_package/__init__.py
+++ b/shapepipe/modules/get_images_package/__init__.py
@@ -44,8 +44,8 @@
INPUT_NUMBERING : str
Input numbering scheme, python regexp
CHECK_EXISTING_DIR : str, optional
- If given, check this directory for existing images, which will then not be
- downloaded
+ If given, search this directory (recursively) for existing images, which
+ will then not be downloaded
N_EXPECTED : int, optional
If ``CHECK_EXISTING_DIR`` is given, this option specifies the number of
expected images; the default value is ``1``
diff --git a/shapepipe/modules/get_images_package/get_images.py b/shapepipe/modules/get_images_package/get_images.py
index 52eae63b0..f0a4220c6 100644
--- a/shapepipe/modules/get_images_package/get_images.py
+++ b/shapepipe/modules/get_images_package/get_images.py
@@ -281,9 +281,25 @@ def retrieve(self, all_inputs, all_outputs):
f'{self._check_existing_dir}/**/{out_base}',
recursive=True,
)
- if path and len(path) == self._n_expected:
- self._w_log.info(f'{path[0]} found, skipping')
- continue
+ if path:
+ if len(path) == self._n_expected:
+ self._w_log.info(
+ f'{path[0]} found, skipping download'
+ )
+ continue
+ else:
+ self._w_log.info(
+ f'{len(path)} instead of {self._n_expected} '
+ + 'existing files found at'
+ + f' {self._check_existing_dir}'
+ + ', downloading images'
+ )
+ else:
+ self._w_log.info(
+ 'No existing images found at'
+ + f' {self._check_existing_dir},'
+ + ' downloading images'
+ )
self.retrieve_one(in_per_type[idx], out_per_type[idx])
def retrieve_one(self, in_path, out_path):
diff --git a/shapepipe/modules/make_cat_runner.py b/shapepipe/modules/make_cat_runner.py
index 4a993239f..8b6351e2e 100644
--- a/shapepipe/modules/make_cat_runner.py
+++ b/shapepipe/modules/make_cat_runner.py
@@ -8,7 +8,6 @@
from shapepipe.modules.make_cat_package import make_cat
from shapepipe.modules.module_decorator import module_runner
-from shapepipe.utilities.cfis import remove_common_elements
@module_runner(
@@ -76,12 +75,6 @@ def make_cat_runner(
else:
save_psf = False
- # Fetch path to tiles
- if config.has_option(module_config_sec, 'TILE_LIST'):
- tile_list_path = config.getexpanded(module_config_sec, 'TILE_LIST')
- else:
- tile_list_path = None
-
# Set final output file
final_cat_file = make_cat.prepare_final_cat_file(
run_dirs['output'],
@@ -102,11 +95,6 @@ def make_cat_runner(
gal_thresh,
)
- # Flag overlapping objects
- if tile_list_path:
- w_log.info('Flag overlapping objects')
- remove_common_elements(final_cat_file, tile_list_path)
-
# Save shape data
sc_inst = make_cat.SaveCatalogue(final_cat_file)
w_log.info('Save shape measurement data')
diff --git a/shapepipe/modules/mask_package/__init__.py b/shapepipe/modules/mask_package/__init__.py
index 88bcfd50a..af2dc5c5c 100644
--- a/shapepipe/modules/mask_package/__init__.py
+++ b/shapepipe/modules/mask_package/__init__.py
@@ -14,13 +14,17 @@
Description
===========
-This module creates masks for bright stars, diffraction spikes, Messier
-objects, borders, and other artifacts. If a flag file is given as input,
-for example from pre-processing, the mask that is created by this module
-is joined with the mask from this external flag file. In this case
-the config flag ``USE_EXT_FLAG`` needs to be set to ``True``. To distinguish
-the newly created output flag file from the input ones, a prefix can added as
-specificed by the config entry ``PREFIX``.
+This module creates masks for bright stars, diffraction spikes, deep sky
+objects (from the Messier and NGC catalogues), borders, and other artifacts. If
+a flag file is given as input, for example from pre-processing, the mask that
+is created by this module is joined with the mask from this external flag file.
+In this case the config flag ``USE_EXT_FLAG`` needs to be set to ``True``. To
+distinguish the newly created output flag file from the input ones, a prefix
+can added as specificed by the config entry ``PREFIX``.
+
+An NGC catalogue with positions, sizes, and types is provided with
+``shapepipe``,
+`source `_.
Masked pixels of different mask types are indicated by integers, which
conveniently are powers of two such that they can be combined bit-wise.
@@ -137,6 +141,18 @@
MESSIER_FLAG_VALUE : int
Messier mask pixel value, power of 2
+[NGC_PARAMETERS]
+--------------------
+
+NGC_MAKE : bool
+ Create mask around NGC objects if ``True``
+NGC_CAT_PATH : str
+ Path to NGC catalogue
+NGC_SIZE_PLUS : float
+ Fraction to increase NGC mask
+NGC_FLAG_VALUE : int
+ NGC mask pixel value, power of 2
+
[MD_PARAMETERS]
---------------
diff --git a/shapepipe/modules/mask_package/mask.py b/shapepipe/modules/mask_package/mask.py
index 5c5aaa528..572f91bad 100644
--- a/shapepipe/modules/mask_package/mask.py
+++ b/shapepipe/modules/mask_package/mask.py
@@ -12,6 +12,7 @@
import numpy as np
from astropy import units, wcs
from astropy.coordinates import SkyCoord
+from astropy.io import fits
from shapepipe.pipeline import file_io
from shapepipe.pipeline.config import CustomParser
@@ -30,10 +31,23 @@ class Mask(object):
Path to image (FITS format)
weight_path : str
Path to the weight image (FITS format)
+ image_prefix : str
+ Prefix to input image name, specify as ``'none'`` for no prefix
+ image_num : str
+ File number identified
config_filepath : str
Path to the ``.mask`` config file
output_dir : str
Path to the output directory
+ w_log : logging.Logger
+ Log file
+ path_external_flag : str, optional
+ Path to external flag file, default is ``None`` (not used)
+ outname_base : str, optional
+ Output file name base, default is ``flag``
+ star_cat_path : str, optional
+ Path to external star catalogue, default is ``None`` (not used;
+ instead the star catalogue is produced on the fly at run time)
hdu : int, optional
HDU number, default is ``0``
@@ -47,6 +61,7 @@ def __init__(
image_num,
config_filepath,
output_dir,
+ w_log,
path_external_flag=None,
outname_base='flag',
star_cat_path=None,
@@ -55,33 +70,51 @@ def __init__(
# Path to the image to mask
self._image_fullpath = image_path
+
# Path to the weight associated to the image
self._weight_fullpath = weight_path
+
+ # Input image prefix
+ if (image_prefix.lower() != 'none') and (image_prefix != ''):
+ self._img_prefix = f'{image_prefix}_'
+ else:
+ self._img_prefix = ''
+
+ # File number identified
+ self._img_number = image_num
+
+ # Path to mask config file
self._config_filepath = config_filepath
+
# Path to the output directory
self._output_dir = output_dir
+
+ # Log file
+ self._w_log = w_log
+
# Path to an external flag file
self._path_external_flag = path_external_flag
+
# Output file base name
self._outname_base = outname_base
- self._img_number = image_num
- if (image_prefix.lower() != 'none') and (image_prefix != ''):
- self._img_prefix = f'{image_prefix}_'
- else:
- self._img_prefix = ''
-
+ # Set external star catalogue path if given
if star_cat_path is not None:
self._star_cat_path = star_cat_path
self._hdu = hdu
+
+ # Read mask config file
self._get_config()
- # Set parameters needed for the stars detection
- self._set_parameters()
+
+ # Set parameters needed for the star detection
+ self._set_image_coordinates()
+
+ # Set error flag
self._err = False
def _get_config(self):
- """Get Config Values.
+ """Get Config.
Read the config file and set parameters.
@@ -110,6 +143,7 @@ def _get_config(self):
'HALO': {},
'SPIKE': {},
'MESSIER': {},
+ 'NGC': {},
'MD': {},
}
@@ -159,6 +193,7 @@ def _get_config(self):
)
if self._config[mask_shape]['make']:
+
self._config[mask_shape]['maskmodel_path'] = conf.getexpanded(
f'{mask_shape}_PARAMETERS',
f'{mask_shape}_MASKMODEL_PATH',
@@ -193,21 +228,27 @@ def _get_config(self):
else:
self._config[mask_shape]['reg_file'] = None
- self._config['MESSIER']['make'] = (
- conf.getboolean('MESSIER_PARAMETERS', 'MESSIER_MAKE')
- )
+ for mask_type in ['MESSIER', 'NGC']:
- if self._config['MESSIER']['make']:
- self._config['MESSIER']['cat_path'] = (
- conf.getexpanded('MESSIER_PARAMETERS', 'MESSIER_CAT_PATH')
- )
- self._config['MESSIER']['size_plus'] = (
- conf.getfloat('MESSIER_PARAMETERS', 'MESSIER_SIZE_PLUS')
- )
- self._config['MESSIER']['flag'] = (
- conf.getint('MESSIER_PARAMETERS', 'MESSIER_FLAG_VALUE')
+ self._config[mask_type]['make'] = conf.getboolean(
+ f'{mask_type}_PARAMETERS',
+ f'{mask_type}_MAKE'
)
+ if self._config[mask_type]['make']:
+ self._config[mask_type]['cat_path'] = conf.getexpanded(
+ f'{mask_type}_PARAMETERS',
+ f'{mask_type}_CAT_PATH',
+ )
+ self._config[mask_type]['size_plus'] = conf.getfloat(
+ f'{mask_type}_PARAMETERS',
+ f'{mask_type}_SIZE_PLUS',
+ )
+ self._config[mask_type]['flag'] = conf.getint(
+ f'{mask_type}_PARAMETERS',
+ f'{mask_type}_FLAG_VALUE',
+ )
+
self._config['MD']['make'] = (
conf.getboolean('MD_PARAMETERS', 'MD_MAKE')
)
@@ -223,10 +264,11 @@ def _get_config(self):
conf.getboolean('MD_PARAMETERS', 'MD_REMOVE')
)
- def _set_parameters(self):
- """Set Parameters.
+ def _set_image_coordinates(self):
+ """Set Image Coordinates.
- Set the parameters for the stars detection.
+ Compute the image coordinates for matching with the star catalogue
+ and star mask.
"""
img = file_io.FITSCatalogue(self._image_fullpath, hdu_no=0)
@@ -234,20 +276,29 @@ def _set_parameters(self):
self._header = img.get_header()
img_shape = img.get_data().shape
img.close()
- del(img)
+ del img
self._wcs = wcs.WCS(self._header)
+ # Compute field center
+
# Note: get_data().shape corresponds to (n_y, n_x)
pix_center = [img_shape[1] / 2.0, img_shape[0] / 2.0]
wcs_center = self._wcs.all_pix2world([pix_center], 1)[0]
-
self._fieldcenter = {}
self._fieldcenter['pix'] = np.array(pix_center)
self._fieldcenter['wcs'] = (
SkyCoord(ra=wcs_center[0], dec=wcs_center[1], unit='deg')
)
+ # Get the four corners of the image
+ corners = self._wcs.calc_footprint()
+ self._corners_sc = SkyCoord(
+ ra=corners[:, 0] * units.degree,
+ dec=corners[:, 1] * units.degree,
+ )
+
+ # Compute image radius = image diagonal
self._img_radius = self._get_image_radius()
def make_mask(self):
@@ -279,14 +330,6 @@ def make_mask(self):
mag_pivot=self._config[_type]['mag_pivot'],
)
- if not self._err:
- if self._config['BORDER']['make']:
- border_mask = self.mask_border(
- width=self._config['BORDER']['width']
- )
- else:
- border_mask = None
-
if not self._err:
mask_name = []
if self._config['HALO']['make'] and self._config['SPIKE']['make']:
@@ -307,15 +350,22 @@ def make_mask(self):
else:
mask_name.append(None)
+ masks_internal = {}
if not self._err:
- if self._config['MESSIER']['make']:
- messier_mask = self.mask_messier(
- self._config['MESSIER']['cat_path'],
- size_plus=self._config['MESSIER']['size_plus'],
- flag_value=self._config['MESSIER']['flag'],
+ if self._config['BORDER']['make']:
+ masks_internal['BORDER'] = self.mask_border(
+ width=self._config['BORDER']['width']
)
- else:
- messier_mask = None
+
+ if not self._err:
+ for _type in ('MESSIER', 'NGC'):
+ if self._config[_type]['make']:
+ masks_internal[_type] = self.mask_dso(
+ self._config[_type]['cat_path'],
+ size_plus=self._config[_type]['size_plus'],
+ flag_value=self._config[_type]['flag'],
+ typ=_type,
+ )
if not self._err:
try:
@@ -331,8 +381,7 @@ def make_mask(self):
final_mask = self._build_final_mask(
path_mask1=mask_name[0],
path_mask2=mask_name[1],
- border=border_mask,
- messier=messier_mask,
+ masks_internal=masks_internal,
path_external_flag=path_external_flag,
)
@@ -486,25 +535,28 @@ def mask_border(self, width=100, flag_value=4):
return flag
- def mask_messier(self, cat_path, size_plus=0.1, flag_value=8):
- """Mask Messier.
+ def mask_dso(self, cat_path, size_plus=0.1, flag_value=8, typ='Messier'):
+ """Mask DSO.
- Create a circular patch for Messier objects.
+ Create a circular patch for deep-sky objects (DSOs), e.g.
+ Messier or NGC objects.
Parameters
----------
cat_path : str
- Path to the Messier catalogue
+ Path to the deep-sky catalogue
size_plus : float
Increase the size of the mask by this factor
(e.g. ``0.1`` means 10%)
flag_value : int
Value of the flag, some power of 2
+ obj_type : {'Messier', 'NGO'}, optional
+ Object type
Returns
-------
numpy.ndarray or ``None``
- If no Messier objects are found in the field return ``None`` and
+ If no deep-sky objects are found in the field return ``None`` and
the flag map
Raises
@@ -517,41 +569,66 @@ def mask_messier(self, cat_path, size_plus=0.1, flag_value=8):
"""
if size_plus < 0:
raise ValueError(
- 'Messier mask size increase variable cannot be negative'
+ 'deep-sky mask size increase variable cannot be negative'
)
if cat_path is None:
- raise ValueError('Path to Messier object catalogue not provided')
+ raise ValueError('Path to deep-sky object catalogue not provided')
- m_cat = np.load(cat_path, allow_pickle=True)
+ m_cat, header = fits.getdata(cat_path, header=True)
+
+ unit_ra = file_io.get_unit_from_fits_header(header, 'ra')
+ unit_dec = file_io.get_unit_from_fits_header(header, 'dec')
m_sc = SkyCoord(
- ra=m_cat['ra'] * units.degree,
- dec=m_cat['dec'] * units.degree,
+ ra=m_cat['ra'] * unit_ra,
+ dec=m_cat['dec'] * unit_dec,
)
- nx = self._fieldcenter['pix'][0] * 2
- ny = self._fieldcenter['pix'][1] * 2
-
- # Get the four corners of the image
- corners = self._wcs.calc_footprint()
- corners_sc = SkyCoord(
- ra=corners[:, 0] * units.degree,
- dec=corners[:, 1] * units.degree,
- )
+ unit_size_X = file_io.get_unit_from_fits_header(header, 'size_X')
+ unit_size_Y = file_io.get_unit_from_fits_header(header, 'size_Y')
- # Loop through all Messier objects and check whether any corner is
+ # Loop through all deep-sky objects and check whether any corner is
# closer than the object's radius
indices = []
+ size_max_deg = []
for idx, m_obj in enumerate(m_cat):
- r = max(m_obj['size']) * units.arcmin
+
+ # DSO size
+ # r = max(m_obj['size']) * units.arcmin
+ r = max(
+ m_obj['size_X'] * unit_size_X,
+ m_obj['size_Y'] * unit_size_Y,
+ )
r_deg = r.to(units.degree)
- if np.any(corners_sc.separation(m_sc[idx]) < r_deg):
+ size_max_deg.append(r_deg)
+
+ # Add index to list if distance between DSO and any image corner
+ # is closer than DSO size
+ if np.any(self._corners_sc.separation(m_sc[idx]) < r_deg):
indices.append(idx)
+ self._w_log.info(
+ f'Found {len(indices)} {obj_type} objects overlapping with'
+ ' image'
+ )
+
if len(indices) == 0:
- # No closeby Messier object found
+ # No closeby deep-sky object found
return None
+ # Compute number of DSO center coordinates in footprint, for logging
+ # purpose only
+ n_dso_center_in_footprint = 0
+ for idx in indices:
+ in_img = self._wcs.footprint_contains(m_sc[idx])
+ self._w_log.info(
+ '(obj_type, ra, dec, in_img) = '
+ + f'({obj_type}, '
+ + f'{m_cat["ra"][idx]}, '
+ + f'{m_cat["dec"][idx]}, '
+ + f'{in_img})'
+ )
+
# Note: python image array is [y, x]
flag = np.zeros(
(
@@ -561,6 +638,8 @@ def mask_messier(self, cat_path, size_plus=0.1, flag_value=8):
dtype='uint16',
)
+ nx = self._fieldcenter['pix'][0] * 2
+ ny = self._fieldcenter['pix'][1] * 2
for idx in indices:
m_center = np.hstack(self._wcs.all_world2pix(
m_cat['ra'][idx],
@@ -568,11 +647,11 @@ def mask_messier(self, cat_path, size_plus=0.1, flag_value=8):
0,
))
r_pix = (
- max(m_cat['size'][idx]) / 60.0 * (1 + size_plus)
+ size_max_deg[idx].to(units.deg).value * (1 + size_plus)
/ np.abs(self._wcs.pixel_scale_matrix[0][0])
)
- # The following accounts for Messier centers outside of image,
+ # The following accounts for deep-sky centers outside of image,
# without creating masks for coordinates out of range
y_c, x_c = np.ogrid[0:ny, 0:nx]
mask_tmp = (
@@ -1016,8 +1095,7 @@ def _build_final_mask(
self,
path_mask1,
path_mask2=None,
- border=None,
- messier=None,
+ masks_internal=None,
path_external_flag=None,
):
"""Create Final Mask.
@@ -1030,10 +1108,8 @@ def _build_final_mask(
Path to a mask (FITS format)
path_mask2 : str, optional
Path to a mask (FITS format)
- border : numpy.ndarray, optional
- Array containing the border mask
- messier : numpy.ndarray, optional
- Array containing the messier mask
+ masks_internal : dict, optional
+ Internally created masks
path_external_flag : str, optional
Path to an external flag file
@@ -1045,8 +1121,7 @@ def _build_final_mask(
Raises
------
ValueError
- If ``path_mask1``, ``path_mask2``, border and messier are of type
- ``None``
+ If all masks are of type ``None``
TypeError
If border is not a Numpy array
TypeError
@@ -1056,12 +1131,12 @@ def _build_final_mask(
final_mask = None
if (
- path_mask1 is None and path_mask2 is None and border is None
- and messier is None
+ path_mask1 is None and path_mask2 is None
+ and not masks_internal
):
raise ValueError(
'No paths to mask files containing halos and/or spikes,'
- + ' borders, or Messier objects provided'
+ + ' borders, or deep-sky objects provided'
)
if path_mask1 is not None:
@@ -1078,23 +1153,18 @@ def _build_final_mask(
else:
final_mask = mask2.get_data()[:, :]
- if border is not None:
- if type(border) is np.ndarray:
- if final_mask is not None:
- final_mask += border
- else:
- final_mask = border
- else:
- raise TypeError('border mask has to be a numpy.ndarray')
-
- if messier is not None:
- if type(messier) is np.ndarray:
- if final_mask is not None:
- final_mask += messier
+ for typ in masks_internal:
+ if masks_internal[typ] is not None:
+ if type(masks_internal[typ]) is np.ndarray:
+ if final_mask is not None:
+ final_mask += masks_internal[typ]
+ else:
+ final_mask = masks_internal[typ]
else:
- final_mask = messier
- else:
- raise TypeError('Messier mask has to be a numpy.ndarray')
+ raise TypeError(
+ f'internally created mask of type {typ} '
+ + 'has to be numpy.ndarray'
+ )
if path_external_flag is not None:
external_flag = file_io.FITSCatalogue(
diff --git a/shapepipe/modules/mask_runner.py b/shapepipe/modules/mask_runner.py
index ce8c53dbd..3683076e4 100644
--- a/shapepipe/modules/mask_runner.py
+++ b/shapepipe/modules/mask_runner.py
@@ -102,6 +102,7 @@ def mask_runner(
outname_base=outname_base,
star_cat_path=ext_star_cat,
hdu=hdu,
+ w_log=w_log,
)
# Process module
diff --git a/shapepipe/modules/random_cat_package/random_cat.py b/shapepipe/modules/random_cat_package/random_cat.py
index f2c0277c9..2f24a3970 100644
--- a/shapepipe/modules/random_cat_package/random_cat.py
+++ b/shapepipe/modules/random_cat_package/random_cat.py
@@ -10,9 +10,13 @@
import os
import re
-import astropy.io.fits as fits
import numpy as np
+
+import astropy.io.fits as fits
from astropy import wcs
+from astropy.table import Table
+
+from reproject import reproject_to_healpix
from shapepipe.pipeline import file_io
from shapepipe.utilities import cfis
@@ -29,38 +33,79 @@ class RandomCat():
Path to input image file
input_mask_path : str
Path to input mask file
- output_path : str
- Output file path for random catalogue
+ output_dir : str
+ Output directory
+ file_number_pattern : str
+ ShapePipe image ID string
+ output_file_pattern : str
+ Output file pattern (base name) for random catalogue
n_rand : float
Number of random objects on output
density : bool
``n_rand`` is interpreted per square degrees if ``True``
w_log : logging.Logger
Logging instance
- tile_list_path : str, optional
- List to all tile IDs, to remove objects in
- overlapping tile areas
-
+ healpix_options : dict
+ Parameters for HEALPix output mask file
"""
def __init__(
self,
input_image_path,
input_mask_path,
- output_path,
+ output_dir,
+ file_number_string,
+ output_file_pattern,
n_rand,
density,
w_log,
- tile_list_path=None,
+ healpix_options,
):
self._input_image_path = input_image_path
self._input_mask_path = input_mask_path
- self._output_path = output_path
+ self._output_dir = output_dir
+ self._file_number_string = file_number_string
+ self._output_file_pattern = output_file_pattern
self._n_rand = n_rand
self._density = density
self._w_log = w_log
- self._tile_list_path = tile_list_path
+ self._healpix_options = healpix_options
+
+ def save_as_healpix(self, hdu_mask, header):
+ """Save As Healpix.
+
+ Save mask as healpix FITS file.
+
+ Parameters
+ ----------
+ hdu_mask : class HDUList
+ HDU with 2D pixel mask image
+ header : class Header
+ Image header with WCS information
+
+ """
+ if not self._healpix_options:
+ return
+
+ mask_1d, footprint = reproject_to_healpix(
+ (hdu_mask, header),
+ 'galactic',
+ nside=self._healpix_options['OUT_NSIDE']
+ )
+
+ t = Table()
+ t['flux'] = mask_1d
+ t.meta['ORDERING'] = 'RING'
+ t.meta['COORDSYS'] = 'G'
+ t.meta['NSIDE'] = self._healpix_options['OUT_NSIDE']
+ t.meta['INDXSCHM'] = 'IMPLICIT'
+
+ output_path = (
+ f'{output_dir}/{self._healpix_options["FILE_BASE"]}-'
+ + f'{file_number_string}.fits'
+ )
+ t.write(output_path)
def process(self):
"""Process.
@@ -89,6 +134,9 @@ def process(self):
hdu_mask = fits.open(self._input_mask_path)
mask = hdu_mask[0].data
+ # Save mask in healpix format (if option is set)
+ self._save_as_healpix(hdu_mask, header)
+
# Number of pixels
n_pix_x = mask.data.shape[0]
n_pix_y = mask.data.shape[1]
@@ -160,6 +208,10 @@ def process(self):
y_rand = []
# Tile ID
+ output_path = (
+ f'{output_dir}/{output_file_pattern}-'
+ + f'{file_number_string}.fits'
+ )
file_name = os.path.split(self._output_path)[1]
file_base = os.path.splitext(file_name)[0]
tile_ID_str = re.split('-', file_base)[1:]
@@ -183,35 +235,9 @@ def process(self):
)
output.save_as_fits(cat_out, names=column_names)
- # Remove overlapping regions
- if n_unmasked > 0 and self._tile_list_path:
- self._w_log.info('Flag overlapping objects')
- ratio_non_overl_tot = cfis.remove_common_elements(
- output,
- self._tile_list_path,
- pos_param=['RA', 'DEC']
- )
- else:
- ratio_non_overl_tot = 1
-
- # Compute area without overlapping regions (approximation)
- area_deg2_non_overl = area_deg2 * ratio_non_overl_tot
- area_deg2_eff_non_overl = area_deg2_eff * ratio_non_overl_tot
-
# Write area information to log file
self._w_log.info(f'Total area = {area_deg2:.4f} deg^2')
self._w_log.info(f'Unmasked area = {area_deg2_eff:.4f} deg^2')
self._w_log.info(
f'Ratio masked to total pixels = {n_unmasked / n_pix:.3f}'
)
-
- self._w_log.info(
- f'Total area without overlap = {area_deg2_non_overl:.4f} deg^2'
- )
- self._w_log.info(
- 'Unmaskewd area without overlap = '
- + f'{area_deg2_eff_non_overl:.4f} deg^2'
- )
- self._w_log.info(
- f'Ratio of non-overlap to total area = {ratio_non_overl_tot:.3f}'
- )
diff --git a/shapepipe/modules/random_cat_runner.py b/shapepipe/modules/random_cat_runner.py
index 8e5f52563..7aad692a6 100644
--- a/shapepipe/modules/random_cat_runner.py
+++ b/shapepipe/modules/random_cat_runner.py
@@ -31,7 +31,13 @@ def random_cat_runner(
input_mask_name = input_file_list[1]
# Set output file name
- output_path = f'{run_dirs["output"]}/random_cat-{file_number_string}.fits'
+ if config.has_option(module_config_sec, 'OUTPUT_FILE_PATTERN'):
+ output_file_pattern = config.get(
+ module_config_sec,
+ 'OUTPUT_FILE_PATTERN'
+ )
+ else:
+ output_file_pattern = 'random_cat'
# Get number of random objects requested on output
n_rand = config.getfloat(module_config_sec, 'N_RANDOM')
@@ -43,21 +49,30 @@ def random_cat_runner(
else:
density = False
- # Path to all tile ID, for overlap flagging
- if config.has_option(module_config_sec, 'TILE_LIST'):
- tile_list_path = config.getexpanded(module_config_sec, 'TILE_LIST')
- else:
- tile_list_path = None
-
+ # Get healpix output options
+ save_mask_as_healpix = config.getboolean(
+ module_config_sec,
+ 'SAVE_MASK_AS_HEALPIX'
+ )
+ if save_mask_as_healpix:
+ healpix_options = {}
+ for option_trunc in ['FILE_BASE', 'OUT_NSIDE']:
+ option = f'HEALPIX_OUT_{option_trunc}'
+ healpix_options[option_trunc] = config.get(
+ module_config_sec,
+ option
+ )
# Create rand cat class instance
rand_cat_inst = RandomCat(
input_image_name,
input_mask_name,
- output_path,
+ run_dirs['output'],
+ file_number_string,
+ output_file_pattern,
n_rand,
density,
w_log,
- tile_list_path=tile_list_path
+ healpix_options,
)
# Run processing
diff --git a/shapepipe/modules/setools_package/setools.py b/shapepipe/modules/setools_package/setools.py
index c6dc47286..78feae3d1 100644
--- a/shapepipe/modules/setools_package/setools.py
+++ b/shapepipe/modules/setools_package/setools.py
@@ -653,7 +653,7 @@ def _make_rand_split(self):
n_keep = int(np.ceil(cat_size * ratio))
mask_ratio = []
mask_left = list(range(0, cat_size))
- while(len(mask_ratio) != n_keep):
+ while len(mask_ratio) != n_keep:
idx = np.random.randint(0, len(mask_left))
mask_ratio.append(mask_left.pop(idx))
mask_ratio = np.array(mask_ratio)
diff --git a/shapepipe/pipeline/file_io.py b/shapepipe/pipeline/file_io.py
index ea0ad33b4..a768f0c06 100644
--- a/shapepipe/pipeline/file_io.py
+++ b/shapepipe/pipeline/file_io.py
@@ -10,6 +10,7 @@
import numpy as np
from astropy.io import fits
+from astropy import units
from astropy.table import Table
@@ -551,7 +552,7 @@ def create(self, ext_name=None, s_hdu=True, sex_cat_path=None):
self._cat_data = fits.HDUList([primary_hdu, secondary_hdu])
self._cat_data.writeto(self.fullpath, overwrite=True)
sex_cat.close()
- del(sex_cat)
+ del sex_cat
else:
raise BaseCatalogue.catalogueFileNotFound(sex_cat_path)
else:
@@ -1841,3 +1842,59 @@ def comment(self, comment):
@data.setter
def data(self, data):
self._data = data
+
+
+def get_unit_from_fits_header(header, key):
+ """Get Unit From FITS Header.
+
+ Return coordinate unit corresponding to column with name ``key``.
+
+ Parameters
+ ----------
+ header : FITS header
+ Header information
+ key : str
+ Column name
+
+ Raises
+ ------
+ IndexError
+ If key not in header
+
+ Returns
+ -------
+ astropy.units.Unit
+ Unit object
+
+ """
+ # Loop over column names to find key
+ idx = 1
+ idx_found = -1
+ while True:
+ ttype_idx = f'TTYPE{idx}'
+ if ttype_idx not in header:
+ # Reached beyond last column
+ break
+ else:
+ if header[ttype_idx] == key:
+ # Found correct column
+ idx_found = idx
+ break
+ idx += 1
+
+ if idx_found == -1:
+ raise IndexError(f'Column \'{key}\' not found in FITS header')
+
+ # Extract coordinate unit string from header
+ tcunit_idx = f'TCUNI{idx}'
+ if tcunit_idx not in header:
+ raise IndexError(
+ f'No coordinate unit found for column \'{key}\''
+ ' in FITS header'
+ )
+ unit_str = header[tcunit_idx]
+
+ # Transform to Unit object
+ u = units.Unit(unit_str)
+
+ return u
diff --git a/shapepipe/utilities/cfis.py b/shapepipe/utilities/cfis.py
index ec55cae74..8e763872a 100644
--- a/shapepipe/utilities/cfis.py
+++ b/shapepipe/utilities/cfis.py
@@ -1456,141 +1456,3 @@ def square_from_corners(ang0, ang1):
cyd = [getattr(y, unitdef) for y in cy]
return cxd, cyd
-
-
-def remove_common_elements(
- final_cat_file,
- tiles_id_file,
- pos_param=['XWIN_WORLD', 'YWIN_WORLD']
-):
- """Remove Common Elements.
-
- Create a mask for objects in the overlapping regions between
- neigbouring stacked images. The object furthest from its stack
- center is flagged.
-
- Parameters
- ----------
- final_cat_file : io.FITSCatalog
- Final catalog.
- tile_id_file : str
- Path to the file containing all the tile IDs.
- pos_param : list
- List with the column name for ra and dec positions.
-
- Returns
- -------
- float
- ratio of masked to total objects
-
- """
- key_id = 'TILE_ID'
-
- def get_tile_wcs(xxx, yyy):
- """Get tile WCS.
-
- Create an astropy.wcs.WCS object from the name of the tile.
-
- Parameters
- ----------
- xxx : int
- First 3 numbers in the tile name.
- yyy : int
- Last 3 numbers in the tile name.
-
- Returns
- -------
- astropy.wcs.WCS
- WCS for the tile.
-
- """
- ra, dec = get_tile_coord_from_nixy(xxx, yyy)
-
- w = WCS(naxis=2)
- w.wcs.crval = np.array([ra.deg, dec.deg])
- w.wcs.crpix = np.array([5000, 5000])
- w.wcs.cd = np.array(
- [[0.187 / 3600, 0], [0, 0.187 / 3600]]
- )
- w.wcs.ctype = ['RA---TAN', 'DEC--TAN']
- w.wcs.cunit = ['deg', 'deg']
- w._naxis = [10000, 10000]
-
- return w
-
- final_cat_file.open()
-
- # Get object coordinates
- ra_tile = final_cat_file.get_data()[pos_param[0]]
- dec_tile = final_cat_file.get_data()[pos_param[1]]
- catalog_coord = coords.SkyCoord(
- ra=ra_tile * units.deg,
- dec=dec_tile * units.deg,
- )
-
- # Get tile ID from FITS header
-
- # Format string to make sure trailing zeros are not cut
- tile_id_format = f'{final_cat_file.get_data()[key_id][0]:07.3f}'
-
- # Transform to strings (nix, niy)
- tile_id_str = str(tile_id_format)
- tile_id = get_tile_number(tile_id_str)
-
- # Get tile ID for entire survey from ascii file
- all_id_float = np.loadtxt(tiles_id_file, unpack=True)
- all_id_format = [f'{id:07.3f}' for id in all_id_float]
- all_id_str = [str(id_f) for id_f in all_id_format]
- all_id2 = get_tile_number_list(all_id_str)
-
- all_tile_ra, all_tile_dec = get_tile_coord_from_nixy(
- all_id2[0],
- all_id2[1],
- )
- all_tile_coord = coords.SkyCoord(ra=all_tile_ra, dec=all_tile_dec)
-
- ra_m_tile, dec_m_tile = get_tile_coord_from_nixy(
- tile_id[0],
- tile_id[1]
- )
- tile_main_coord = coords.SkyCoord(ra=ra_m_tile, dec=dec_m_tile)
-
- mask_tile = np.ones_like(ra_tile, dtype=bool)
-
- # Compute separation between objects and tile center
- sep_ref = tile_main_coord.separation(catalog_coord)
-
- # Find close tiles = nearest 9 neighbours
- close_tiles = np.argsort(tile_main_coord.separation(all_tile_coord))[1:9]
-
- # Loop over neighbours
- for close in close_tiles:
-
- ra_m_check, dec_m_check = get_tile_coord_from_nixy(
- all_id2[0][close],
- all_id2[1][close]
- )
- tile_check_coord = coords.SkyCoord(ra=ra_m_check, dec=dec_m_check)
-
- sep_check = tile_check_coord.separation(catalog_coord)
-
- w_tile_check = get_tile_wcs(all_id2[0][close], all_id2[1][close])
-
- # Mask objects who are closer to neighbour than tile center
- mask_tile &= (
- np.less(sep_ref, sep_check)
- | np.invert(w_tile_check.footprint_contains(catalog_coord))
- )
-
- # Add mask as column to FITS catalogue
- final_cat_file.add_col('FLAG_TILING', mask_tile)
-
- final_cat_file.close()
-
- # Compute ratio of masked to total object
- n_masked = np.sum(mask_tile)
- n_tot = len(mask_tile)
-
- ratio_mask_tot = n_masked / n_tot
-
- return ratio_mask_tot