File hijri-converter-2.1.1.obscpio of Package python-hijri_converter

07070100000000000081A4000003E800000064000000015EC9613100000031000000000000000000000000000000000000002200000000hijri-converter-2.1.1/.coveragerc[run]
branch = True
source = src/hijri_converter
07070100000001000081A4000003E800000064000000015EC96131000000C4000000000000000000000000000000000000002200000000hijri-converter-2.1.1/.travis.ymllanguage: python
python:
  - '3.6'
  - '3.7'
  - '3.8'
  - '3.9-dev'
install:
  - pip install -q -e .
  - pip install -q pytest-cov codecov
script: pytest tests/* --cov
after_success:
  - codecov
07070100000002000081A4000003E800000064000000015EC9613100000D0C000000000000000000000000000000000000002400000000hijri-converter-2.1.1/CHANGELOG.rstChange Log
----------

**2.1.1**

- Added ``dmyformat()`` to return dates in DD/MM/YYYY format.
- Deprecated ``slashformat()`` method to be replaced by ``dmyformat()`` method.
- Fixed PyPI package not including a required file. Issue `#3 <https://github.com/dralshehri/hijri-converter/issues/3>`__ by `@PureTryOut <https://github.com/PureTryOut>`__.
- Fixed some typos.
- Updated tests.

**2.1.0**

This version has more accurate conversion and better internal code.
Details are as follows:

- Dropped support for the years before 1343 AH because the Umm al-Qura calendar
  was not established then.
- Added ``validate`` parameter to Hijri object for optional disabling of
  Hijri date validation and improving performance.
- Verified conversion against original references and updated the
  ``month_starts`` tuple for more accurate conversion.
- Improved ``Hijri`` object rich comparison methods.
- Improved date validation methods for better performance and readability.
- Made the ``Hijri`` object hashable by adding a custom ``__hash__`` method.
- Refactored many internal methods (not affecting the API).
- Other minor fixes, enhancements and performance boost.

**2.0.0**

In short, this version supports only lunar Hijri calendar on Python 3.6+, and
the conversion is in complete agreement with the official Umm al-Qura calendar.
Details are as follows:

- Renamed the package to ``hijri-converter``.
- Dropped support for the solar Hijri calendar.
- Dropped support for Python 3.5.
- Refactored localization and ``ummalqura.py`` module.
- Updated ``month_starts`` tuple in alignment with the Umm al-Qura calendar.
- Added ``fromdate()`` classmethod to ``Gregorian`` object.
- Added ``notation()`` method to ``Hijri`` and ``Gregorian`` objects.
- Added more methods to ``Gregorian`` object including ``slashformat()``,
  ``month_name()``, ``day_name()`` and ``to_julian()``.
- Renamed ``month_days()`` method of ``Hijri`` object to ``month_length()``.
- Changed formatted string to use f-strings.
- Improved documentation and examples.
- Updated unit tests.
- Fixed other minor issues and typos.

**1.5.0**

- Added ``fromisoformat()`` classmethod to ``Hijri`` object.
- Added support for rich comparison between Hijri dates.
- Updated documentation and testing code.
- Other minor fixes and enhancements.

**1.4.0**

- Refactored conversion methods to improve performance.
- Changed date validation back to be the default and removed optional parameter.
- Added ``to_julian()`` method to ``Hijri`` object.
- Updated documentation and testing code.
- Other minor fixes and enhancements.

**1.3.3**

- Fixed a bug in range validation for the Gregorian date.
- Changed generic typing to built-in types.
- Added more tests to cover the solar calendar.
- Improved code structure and documentation.

**1.3.2**

- Improved documentation and changelog.

**1.3.1**

- Fixed README file.

**1.3.0**

- Added documentation directory with an online version.
- Changed date input validation to be optional and disabled by default.
- Improved code readability and performance.
- Other minor fixes and enhancements.

**1.2.0**

- Added ``slashformat()`` method to ``Hijri`` object.
- Improved date validation code.
- Fixed some typos in documentation and docstrings.

**1.0.1**

- Improved examples and documentation.

**1.0.0**

- First release.
07070100000003000081A4000003E800000064000000015EC9613100000AD3000000000000000000000000000000000000002700000000hijri-converter-2.1.1/CONTRIBUTING.rstContributing
------------

Contributions are welcome, and they are much appreciated! Every
little bit helps, and a credit will always be given.

Reporting Issues
~~~~~~~~~~~~~~~~

An issue may be a simple comment, question, feature request, or bug report. When
`reporting an issue <https://github.com/dralshehri/hijri-converter/issues>`__,
please make sure to provide enough information to understand it. Depending on
the issue, you may want to include:

* Package version.
* Information about the operating system.
* Any details about your local setup that might be helpful in troubleshooting.
* Detailed steps to reproduce the bug.

Don't forget to apply relevant labels to the newly created issue.

Development
~~~~~~~~~~~

You may want to make some changes to the code base (for example, to fix a bug,
to add a new feature, or to update documentation). The steps below explain how:

#. Announce your plan to the rest of the community **before you start**
   **working**. This announcement should be in the form of a (new) issue.
#. Wait until you get feedback about your idea being a good idea.
#. If needed, fork the repository to your own Github profile and create your
   own feature branch off of the latest master commit. While working on your
   feature branch, make sure to stay up to date with the master branch by
   pulling in changes, possibly from the 'upstream' repository
   (follow the instructions
   `here <https://help.github.com/articles/configuring-a-remote-for-a-fork/>`__
   and `here <https://help.github.com/articles/syncing-a-fork/>`__).
#. Before coding on your local machine, make sure to run ``make install`` to
   create a virtual environment and install development dependencies. Then
   activate the environment by running ``source .venv/bin/activate``.
#. Make sure the existing tests still work by running ``make test``.
#. Add your own tests (if necessary) and check the code coverage by running
   ``make test-cov``.
#. Before committing changes, make sure to apply code styling by running
   ``make format``.
#. Update or expand the documentation.
#. Push your feature branch to (your fork of) the Hijri Converter repository
   on GitHub (you can follow the instructions
   `here <https://help.github.com/en/articles/pushing-to-a-remote/>`__).
#. Create the pull request (follow the instructions
   `here <https://help.github.com/articles/creating-a-pull-request/>`__.

In case you feel like you've made a valuable contribution, but you don't know
how to write or run tests for it, or how to generate the documentation: don't
let this discourage you from making the pull request; I can help you! Just go
ahead and submit the pull request, but keep in mind that you might be asked to
append additional commits to your pull request.
07070100000004000081A4000003E800000064000000015EC961310000043F000000000000000000000000000000000000001E00000000hijri-converter-2.1.1/LICENSEMIT License

Copyright (c) 2018 Mohammed Alshehri (dralshehri)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
07070100000005000081A4000003E800000064000000015EC961310000004A000000000000000000000000000000000000002200000000hijri-converter-2.1.1/MANIFEST.ininclude CHANGELOG.rst
include LICENSE
recursive-include tests *.py *.json
07070100000006000081A4000003E800000064000000015EC96131000008F5000000000000000000000000000000000000001F00000000hijri-converter-2.1.1/Makefile# Makefile config
SHELL := /bin/bash
.DEFAULT_GOAL := help

# Python environment variables
VENV=.venv
PYTHON=$(VENV)/bin/python


.PHONY: install ## Install development requirments
install: clean
	rm -fr .venv
	python3 -m venv .venv --copies
	$(PYTHON) -m pip install -U pip setuptools
	$(PYTHON) -m pip install -U pytest pytest-cov black wheel twine
	$(PYTHON) -m pip install sphinx==1.8.5
	$(PYTHON) -m pip install -e .

.PHONY: install-pkg ## Install the package only
install-pkg: clean-build
	$(PYTHON) -m pip install -e .

.PHONY: test ## Run unit tests
test: clean-test
	$(PYTHON) -m pytest

.PHONY: test-cov ## Run tests with code coverage
test-cov: clean-test
	$(PYTHON) -m pytest --cov --cov-report term --cov-report html
	$(PYTHON) -m webbrowser $(PWD)/htmlcov/index.html

.PHONY: test-more ## Run unit and other tests
test-more: clean-test
	$(PYTHON) -m pytest tests/*

.PHONY: format ## Format code with Black
format:
	$(PYTHON) -m black -l 79 -t py36 src tests setup.py

.PHONY: docs ## Generate html documentation
docs: clean-docs
	source $(VENV)/bin/activate; $(MAKE) -C docs html
	$(PYTHON) -m webbrowser $(PWD)/docs/_build/html/index.html

.PHONY: build ## Build and check the package
build: clean
	$(PYTHON) setup.py sdist bdist_wheel
	$(PYTHON) -m twine check dist/*

.PHONY: publish ## Publish the package to PyPI
publish: build
	$(PYTHON) -m twine upload dist/*

.PHONY: clean ## Remove all artifacts
clean: clean-test clean-pyc clean-docs clean-build

.PHONY: clean-test ## Remove tests artifacts
clean-test:
	rm -fr .pytest_cache
	rm -f .coverage
	rm -fr htmlcov

.PHONY: clean-docs ## Remove docs artifacts
clean-docs:
	rm -fr docs/_build

.PHONY: clean-pyc ## Remove python artifacts
clean-pyc:
	find . -name '*.pyc' -exec rm -f {} +
	find . -name '*.pyo' -exec rm -f {} +
	find . -name '*~' -exec rm -f {} +
	find . -name '__pycache__' -exec rm -fr {} +

.PHONY: clean-build ## Remove build artifacts
clean-build:
	rm -fr build
	rm -fr dist
	rm -fr .eggs
	find . -name '*.egg-info' -exec rm -fr {} +
	find . -name '*.egg' -exec rm -f {} +

.PHONY: help
help:
	@echo "Please use \`make <target>\` where <target> is one of:"
	@grep -E '^\.PHONY: [a-zA-Z_-]+ .*?## .*$$' $(MAKEFILE_LIST) | \
	awk 'BEGIN {FS = "(: |##)"}; {printf "\033[36m%-15s\033[0m %s\n", $$2, $$3}'
07070100000007000081A4000003E800000064000000015EC9613100000C1D000000000000000000000000000000000000002100000000hijri-converter-2.1.1/README.rstHijri Converter
===============

A Python package to convert accurately between Hijri and Gregorian dates
using the Umm al-Qura calendar of Saudi Arabia.

|travis| |codecov| |docs| |supported| |version| |license|

.. |travis|
   image:: https://img.shields.io/travis/com/dralshehri/hijri-converter.svg
   :alt: Build Status
   :target: https://travis-ci.com/dralshehri/hijri-converter
.. |codecov|
   image:: https://img.shields.io/codecov/c/github/dralshehri/hijri-converter.svg
   :alt: Coverage Status
   :target: https://codecov.io/github/dralshehri/hijri-converter
.. |docs|
   image:: https://img.shields.io/readthedocs/hijri-converter/stable.svg
   :alt: Docs Status
   :target: https://hijri-converter.readthedocs.io/
.. |supported|
   image:: https://img.shields.io/pypi/pyversions/hijri-converter.svg
   :alt: Python version support
   :target: https://pypi.python.org/pypi/hijri-converter
.. |version|
   image:: https://img.shields.io/pypi/v/hijri-converter.svg
   :alt: PyPI Package version
   :target: https://pypi.python.org/pypi/hijri-converter
.. |license|
   image:: https://img.shields.io/github/license/dralshehri/hijri-converter.svg
   :alt: License
   :target: https://github.com/dralshehri/hijri-converter/blob/master/LICENSE

Features
--------

- Accurate and tested conversion.
- Optimized code performance compared to similar packages.
- Intuitive, clean, and easy-to-use interface.
- Most of methods and formats are similar to those of standard library.
- Multilingual representation of weekday names, months, and calendar notations.
- Easily extendable to support other natural languages.
- Rich comparison between dates.
- Validation of input dates.
- Works on Python 3.6+ with zero dependencies.
- Thoroughly tested on all supported python versions.

Installation
------------

.. code-block:: bash

   $ pip install -U hijri-converter

Basic Usage
-----------

.. code-block:: python

   from hijri_converter import convert

   g = convert.Hijri(1403, 2, 17).to_gregorian()
   print(g)
   # 1982-12-02

   h = convert.Gregorian(1982, 12, 2).to_hijri()
   print(h)
   # 1403-02-17

Online Tool
-----------

The following is a simple online conversion tool that was developed to convert
between Hijri and Gregorian dates using the latest version of *Hijri Converter*
package:

https://www.dralshehri.com/hijri-converter/

Documentation
-------------

Please see https://hijri-converter.readthedocs.io/ for full documentation of
this package, including overview, benchmarking, usage examples and API
reference.

Contributing
------------

Contributions are welcome! See
`CONTRIBUTING.rst <https://github.com/dralshehri/hijri-converter/blob/master/CONTRIBUTING.rst>`__
for more info.

Authors
-------

The main author is Mohammed Alshehri —
`@dralshehri <https://github.com/dralshehri>`__.

Acknowledgment
--------------

Thanks to `R.H. van Gent <http://www.staff.science.uu.nl/~gent0113>`__
for inspiration and help.

License
-------

This package is distributed under an MIT license.
See `LICENSE <https://github.com/dralshehri/hijri-converter/blob/master/LICENSE>`__.
07070100000008000041ED000003E800000064000000035EC9613100000000000000000000000000000000000000000000001B00000000hijri-converter-2.1.1/docs07070100000009000081A4000003E800000064000000015EC9613100000245000000000000000000000000000000000000002400000000hijri-converter-2.1.1/docs/Makefile# Minimal makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS    =
SPHINXBUILD   = sphinx-build
SOURCEDIR     = .
BUILDDIR      = _build

# Put it first so that "make" without argument is like "make help".
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
0707010000000A000041ED000003E800000064000000025EC9613100000000000000000000000000000000000000000000002300000000hijri-converter-2.1.1/docs/_static0707010000000B000081A4000003E800000064000000015EC9613100000544000000000000000000000000000000000000002E00000000hijri-converter-2.1.1/docs/_static/custom.cssdiv.body {
    min-width: auto;
}

div.body p, div.body dd, div.body li, div.body blockquote {
    -moz-hyphens: none;
    -ms-hyphens: none;
    -webkit-hyphens: none;
    hyphens: none;
}

a.reference {
    text-decoration: none;
    border-bottom: none;
}

a.reference:hover {
    border-bottom: none;
}

@media screen and (max-width: 870px) {
    ul {
        margin-left: 30px;
    }
}

div.contents {
    padding: 7px;
}

div.contents ul {
    list-style-type: none;
    margin-left: 20px;
}

div.contents ul ul {
    margin-top: 5px;
    margin-bottom: 5px;
}

div.contents li > p {
    margin-bottom: 0;
    margin-top: 0;
}

dl.class {
    margin-top: 60px;
}

dl.classmethod,
dl.method,
dl.staticmethod,
dl.attribute {
    margin-top: 30px;
}

dl.classmethod > dd > p,
dl.method > dd > p,
dl.staticmethod > dd > p,
dl.attribute > dd > p {
    margin-bottom: 5px;
}

dl.class > dt,
dl.classmethod > dt,
dl.method > dt,
dl.staticmethod > dt,
dl.attribute > dt {
    background: #EAEAEA;
    padding: 4px;
}

dd.field-odd {
    margin-top: 0;
}

a.footnote-reference {
    text-decoration: none;
}

dl.footnote {
    margin-top: 70px;
    font-size: 0.9em;
}

dl.footnote .label {
    line-height: 0.9em;
}

dl.footnote p {
    line-height: 1.0em;
    margin-top: 5px;
    margin-bottom: 5px;
}

dl.footnote a {
    text-decoration: none;
}
0707010000000C000081A4000003E800000064000000015EC9613100000E97000000000000000000000000000000000000002300000000hijri-converter-2.1.1/docs/conf.py# -*- coding: utf-8 -*-
#
# Configuration file for the Sphinx documentation builder.
#
# This file does only contain a selection of the most common options. For a
# full list see the documentation:
# http://www.sphinx-doc.org/en/master/config

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('../src/hijri_converter'))

# -- Project information -----------------------------------------------------

project = 'Hijri Converter'
copyright = '2018, Mohammed Alshehri (dralshehri)'
author = 'Mohammed Alshehri'

# The short X.Y version
# version = ''
# The full version, including alpha/beta/rc tags
# release = ''


# -- General configuration ---------------------------------------------------

# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.intersphinx',
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'

# The master toctree document.
master_doc = 'index'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = None


# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'

# Theme options are theme-specific and customize the look and feel of a theme
# further.  For a list of options available for each theme, see the
# documentation.
#
html_theme_options = {'show_powered_by': False}

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

# Custom sidebar templates, must be a dictionary that maps document names
# to template names.
#
# The default sidebars (for documents that don't match any pattern) are
# defined by theme itself.  Builtin themes are using these templates by
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
# 'searchbox.html']``.
#
html_sidebars = {'**': []}


# -- Options for HTMLHelp output ---------------------------------------------

# Output file base name for HTML help builder.
# htmlhelp_basename = 'pydoc'

# -- Extension configuration -------------------------------------------------
autodoc_member_order = 'bysource'
autoclass_content = 'both'
autodoc_default_flags = ['members', 'show-inheritance']
intersphinx_mapping = {'python': ('https://docs.python.org/3', None)}
0707010000000D000081A4000003E800000064000000015EC9613100002DE2000000000000000000000000000000000000002500000000hijri-converter-2.1.1/docs/index.rstHijri Converter
===============

A Python package to convert accurately between Hijri and Gregorian dates
using the Umm al-Qura calendar of Saudi Arabia.

|travis| |codecov| |docs| |supported| |version| |license|

.. |travis|
   image:: https://img.shields.io/travis/com/dralshehri/hijri-converter.svg
   :alt: Build Status
   :target: https://travis-ci.com/dralshehri/hijri-converter
.. |codecov|
   image:: https://img.shields.io/codecov/c/github/dralshehri/hijri-converter.svg
   :alt: Coverage Status
   :target: https://codecov.io/github/dralshehri/hijri-converter
.. |docs|
   image:: https://img.shields.io/readthedocs/hijri-converter/stable.svg
   :alt: Docs Status
   :target: https://hijri-converter.readthedocs.io/
.. |supported|
   image:: https://img.shields.io/pypi/pyversions/hijri-converter.svg
   :alt: Python version support
   :target: https://pypi.python.org/pypi/hijri-converter
.. |version|
   image:: https://img.shields.io/pypi/v/hijri-converter.svg
   :alt: PyPI Package version
   :target: https://pypi.python.org/pypi/hijri-converter
.. |license|
   image:: https://img.shields.io/github/license/dralshehri/hijri-converter.svg
   :alt: License
   :target: https://github.com/dralshehri/hijri-converter/blob/master/LICENSE

.. contents::
   :local:
   :backlinks: none

.. module:: convert

Overview
--------

The Umm al-Qura calendar is the lunar Hijri calendar officially adopted by
Saudi Arabia for administrative purposes. It was originated from Umm al-Qura
newspaper, the official newspaper of government of Saudi Arabia. The newspaper
is published weekly and its first issue was on Friday, 15 Jumada al-Ula 1343 AH
(12 December 1924 CE). However, the calendar has been printed and distributed
separately by the Saudi government since 1346 AH (1927 CE).

The calendar is widely used in Saudi Arabia, especially by the governmental
sector. Official documents, political letters, health care records, and
education certificates, are just examples of many other documents that are
dated by the Hijri calendar.

However, the Gregorian calendar is the calendar used in most of the world,
and it has been implemented as the default calendar in nearly every computer
and database.

Therefore, a valid converter between Hijri and Gregorian dates is a necessity,
especially when conducting research, analyzing data, or building applications
that may have Hijri dates. Even though similar packages exist and try to fill
the gap, `Hijri Converter`_ comes with a pythonic code, more accuracy, and
better performance.

Benchmarking
------------

Similar Python converters have been mainly derived from or using the
`Umalqurra`_ package by Khalid Al-hussayen, which was ported from `Hijri.js`_,
a Javascript tool published by Suhail Alkowaileet. The last goes back to
`R.H. van Gent`_, who built the original converter partly based on his
astronomical calculation for years after 1420 AH and partly on a comparison
calendar prepared by KFUPM in 1993 for the years 1356-1411 AH.

In contrast, the *Hijri Converter* package was written in Python from scratch.
Although it was inspired by R.H. van Gent's work, it is mainly based on the
Umm al-Qura newspaper issues published weekly since 1343 AH, one that is in
complete alignment with the official printed Umm al-Qura calendar. However,
other sources was also used to build the package including the comparison
calendar prepared by KFUPM for the years 1356-1411 AH, and the official website
of Umm al-Qura calendar for the years 1431-1500 AH. Both sources were also
verified using the dates of then-published issues of Umm al-Qura newspaper.
That makes *Hijri Converter* package more accurate and broader in terms of
years included, 1343-1500 AH.

When it comes to performance, using *Hijri Converter* package to convert from
Hijri to Gregorian and back is seven times faster (or five times faster, with
Hijri date validation enabled) than that when *Umalqurra* package was used.

.. code-block:: bash

   # Hijri Converter with Hijri date validation disabled
   $ python -m timeit -s "from hijri_converter import convert" \
   > "convert.Gregorian(1982, 8, 4).to_hijri()" \
   > "convert.Hijri(1402, 10, 15).to_gregorian()"
   50000 loops, best of 5: 5.4 usec per loop

   # Hijri Converter with Hijri date validation enabled
   $ python -m timeit -s "from hijri_converter import convert" \
   > "convert.Gregorian(1982, 8, 4).to_hijri()" \
   > "convert.Hijri(1402, 10, 15).to_gregorian()"
   50000 loops, best of 5: 7.6 usec per loop

   # Umalqurra without Hijri date validation
   $ python -m timeit -s "from umalqurra.hijri import Umalqurra" \
   > "Umalqurra().gegorean_to_hijri(1982, 8, 4)" \
   > "Umalqurra().hijri_to_gregorian(1402, 10, 15)"
   50000 loops, best of 5: 37.6 usec per loop

The above code illustrates the execution time of both packages compared
*(tested on Macbook Pro with 2.9GHz Intel Core i5 processor and 16GB memory)*.

Beside packaging and maintenance issues that *Umalqurra* package
has, the following table summarizes the main differences:

+---------------------------+-------------------+-------------------+
|         Item              |  Hijri Converter  |     Umalqurra     |
+===========================+===================+===================+
| Years included            | 1343-1500 AH      | 1356-1500 AH      |
+---------------------------+-------------------+-------------------+
| Accuracy [#]_             | 100%              | 91.6%             |
+---------------------------+-------------------+-------------------+
| Performance [#]_          | 7x (faster)       | 1x                |
+---------------------------+-------------------+-------------------+
| Python 3 support          | Full              | Limited           |
+---------------------------+-------------------+-------------------+
| Rich comparison between   | Yes               | No                |
| dates                     |                   |                   |
+---------------------------+-------------------+-------------------+
| Hijri date validation     | Yes               | No                |
+---------------------------+-------------------+-------------------+
| Code testing              | Yes               | No                |
+---------------------------+-------------------+-------------------+

.. _Hijri Converter: https://pypi.org/project/hijri-converter/
.. _Umalqurra: https://pypi.org/project/umalqurra/
.. _Hijri.js: https://github.com/xsoh/Hijri.js
.. _`R.H. van Gent`: http://www.staff.science.uu.nl/~gent0113/islam/ummalqura.htm

Features
--------

- Accurate and tested conversion.
- Optimized code performance compared to similar packages.
- Intuitive, clean, and easy-to-use interface.
- Most of methods and formats are similar to those of standard library.
- Multilingual representation of weekday names, months, and calendar notations.
- Easily extendable to support other natural languages.
- Rich comparison between dates.
- Validation of input dates.
- Works on Python 3.6+ with zero dependencies.
- Thoroughly tested on all supported python versions.

.. note::
   The conversion is valid for dates from the beginning of 1343 AH
   (1 August 1924 CE) to the end of 1500 AH (16 November 2077 CE).

Installation
------------

.. code-block:: bash

   $ pip install -U hijri-converter

Usage Examples
--------------

To import the package:

.. code-block:: pycon

   >>> from hijri_converter import convert

To convert between Hijri and Gregorian dates:

.. code-block:: pycon

   >>> convert.Hijri(1403, 2, 17).to_gregorian()
   Gregorian(1982, 12, 2)

   >>> convert.Gregorian(1982, 12, 2).to_hijri()
   Hijri(1403, 2, 17)

To convert from/to ISO format:

.. code-block:: pycon

   >>> convert.Hijri.fromisoformat("1403-02-17").to_gregorian().isoformat()
   '1982-12-02'

   >>> convert.Gregorian.fromisoformat("1982-12-02").to_hijri().isoformat()
   '1403-02-17'

The :obj:`Hijri` and :obj:`Gregorian` objects have some useful methods. For
example:

.. code-block:: pycon

   >>> hijri = convert.Gregorian(1982, 12, 2).to_hijri()

   >>> hijri.datetuple()
   (1403, 2, 17)

   >>> hijri.dmyformat()
   '17/02/1403'

   >>> hijri.month_name()
   'Safar'

   >>> hijri.day_name()
   'Thursday'

   >>> hijri.notation()
   'AH'

You can also construct a :obj:`Gregorian` object from :obj:`datetime.date`
object:

.. code-block:: pycon

   >>> from datetime import date
   >>> my_date = date(1982, 12, 2)
   >>> convert.Gregorian.fromdate(my_date)
   Gregorian(1982, 12, 2)

The :obj:`Gregorian` object inherits all attributes and methods of
:obj:`datetime.date` object:

.. code-block:: pycon

   # To get today's date in Hijri
   >>> convert.Gregorian.today().to_hijri()
   Hijri(1440, 10, 13)

   # To format a Gregorian date
   >>> convert.Gregorian(1982, 12, 2).strftime("%A, %-d %B %Y")
   'Thursday, 2 December 1982'

Rich Comparison
~~~~~~~~~~~~~~~

Rich comparison (==, !=, >, >=, <, <=) for :obj:`Hijri` objects is supported.
Comparing :obj:`Hijri` object with different type object raises a ``TypeError``
exception that can be caught and handled in ``try`` and ``except`` blocks:

.. code-block:: pycon

   >>> convert.Hijri(1403, 2, 17) > convert.Hijri(1402, 2, 17)
   True

   >>> convert.Hijri.fromisoformat("1403-02-17") == "1403-02-17"
   Traceback...
   TypeError: can't compare 'Hijri' to 'str'


Internationalization
~~~~~~~~~~~~~~~~~~~~

Representation of weekday names, month names, and calendar notations is
supported. Currently, Arabic and English translations are available, but it
can be easily extended for other natural languages.

The English is the default language, and following is an example showing how
to use the Arabic language instead:

.. code-block:: pycon

   >>> from hijri_converter import convert

   >>> hijri = convert.Hijri(1403, 2, 17)

   >>> hijri.month_name("ar")
      'صفر'

   >>> hijri.day_name("ar")
      'الخميس'

   >>> hijri.notation("ar")
      'هـ'

Date Validation
~~~~~~~~~~~~~~~

Date input values are by default checked if valid and within conversion range.
Invalid date raises a ``ValueError`` exception, and out of range date raises
an ``OverflowError`` exception. They can be caught and handled in ``try``
and ``except`` blocks:

.. code-block:: pycon

   >>> from hijri_converter import convert

   >>> convert.Hijri(1403, 1, 30)
   Traceback...
   ValueError: day must be in 1..29 for month

   >>> convert.Gregorian(1882, 12, 2).to_hijri()
   Traceback...
   OverflowError: date out of range

Online Tool
-----------

The following is a simple online conversion tool that was developed to convert
between Hijri and Gregorian dates using the latest version of *Hijri Converter*
package:

https://www.dralshehri.com/hijri-converter/

Source Code
-----------

The source code of this package is available on
`GitHub <https://github.com/dralshehri/hijri-converter>`__ where you can
contribute and report issues.

Authors
-------

The main author is Mohammed Alshehri —
`@dralshehri <https://github.com/dralshehri>`__.

Acknowledgment
--------------

Thanks to `R.H. van Gent <http://www.staff.science.uu.nl/~gent0113>`__
for inspiration and help.

License
-------

This package is distributed under an MIT license.
The license is as follows:

.. literalinclude:: ../LICENSE
   :language: text

API Reference
-------------

This section documents the API of `convert` module, which is the main module
of the Hijri Converter package.

.. autoclass:: Hijri
.. autoclass:: Gregorian

.. [#] Verified with the years 1343-1355 AH included, which are missing from
       *Umalqurra* package but can produce wrong dates when used.
.. [#] Hijri date validation was disabled in *Hijri Converter* package; to be
       comparable with *Umalqurra* package.
0707010000000E000081A4000003E800000064000000015EC9613100000021000000000000000000000000000000000000002100000000hijri-converter-2.1.1/pytest.ini[pytest]
testpaths = tests/unit/
0707010000000F000081A4000003E800000064000000015EC96131000006B7000000000000000000000000000000000000001F00000000hijri-converter-2.1.1/setup.pyimport pathlib
from setuptools import setup, find_packages

here = pathlib.Path(__file__).parent
readme = (here / "README.rst").read_text(encoding="utf-8")
changelog = (here / "CHANGELOG.rst").read_text(encoding="utf-8")

setup(
    name="hijri-converter",
    version="2.1.1",
    description="Accurate Hijri-Gregorian date converter based on the "
    "Umm al-Qura calendar",
    long_description="\n".join([readme, changelog]),
    long_description_content_type="text/x-rst",
    url="https://github.com/dralshehri/hijri-converter",
    project_urls={"Documentation": "https://hijri-converter.readthedocs.io/"},
    author="Mohammed Alshehri",
    author_email="",
    license="MIT",
    classifiers=[
        "Development Status :: 5 - Production/Stable",
        "Intended Audience :: Developers",
        "Intended Audience :: Science/Research",
        "Intended Audience :: Healthcare Industry",
        "Intended Audience :: Legal Industry",
        "License :: OSI Approved :: MIT License",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
        "Topic :: Scientific/Engineering",
        "Topic :: Software Development :: Internationalization",
        "Topic :: Software Development :: Localization",
        "Topic :: Utilities",
        "Typing :: Typed",
    ],
    keywords="hijri gregorian date converter ummalqura saudi calendar",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    include_package_data=True,
    python_requires=">=3.6",
)
07070100000010000041ED000003E800000064000000035EC9613100000000000000000000000000000000000000000000001A00000000hijri-converter-2.1.1/src07070100000011000041ED000003E800000064000000035EC9613100000000000000000000000000000000000000000000002A00000000hijri-converter-2.1.1/src/hijri_converter07070100000012000081A4000003E800000064000000015EC9613100000000000000000000000000000000000000000000003600000000hijri-converter-2.1.1/src/hijri_converter/__init__.py07070100000013000081A4000003E800000064000000015EC96131000029A0000000000000000000000000000000000000003500000000hijri-converter-2.1.1/src/hijri_converter/convert.pyimport datetime
import warnings
from bisect import bisect

from hijri_converter import locales, ummalqura


class Hijri:
    """A Hijri object represents a date (year, month and day) in Hijri
    calendar.
    """

    __slots__ = "_year", "_month", "_day"

    def __init__(
        self, year: int, month: int, day: int, validate: bool = True
    ) -> None:
        """
        :param year: Hijri year
        :type year: int
        :param month: Hijri month
        :type month: int
        :param day: Hijri day
        :type day: int
        :param validate: Whether to validate date or not (default is ``True``)
        :type validate: bool
        """

        self._year = year
        self._month = month
        self._day = day

        if validate:
            self._check_date()

    def __repr__(self) -> str:
        class_name = self.__class__.__name__
        return f"{class_name}({self._year}, {self._month}, {self._day})"

    def __str__(self) -> str:
        return self.isoformat()

    def __hash__(self) -> int:
        return hash(("Hijri", self._year, self._month, self._day))

    def __eq__(self, other: object) -> bool:
        if not isinstance(other, Hijri):
            return False
        return self._compare(other) == 0

    def __gt__(self, other: object) -> bool:
        if not isinstance(other, Hijri):
            self._compare_error(other)
        return self._compare(other) > 0

    def __ge__(self, other: object) -> bool:
        if not isinstance(other, Hijri):
            self._compare_error(other)
        return self._compare(other) >= 0

    def __lt__(self, other: object) -> bool:
        if not isinstance(other, Hijri):
            self._compare_error(other)
        return self._compare(other) < 0

    def __le__(self, other: object) -> bool:
        if not isinstance(other, Hijri):
            self._compare_error(other)
        return self._compare(other) <= 0

    def _compare(self, other: "Hijri") -> int:
        x = self.datetuple()
        y = other.datetuple()
        return 0 if x == y else 1 if x > y else -1

    def _compare_error(self, other: object) -> None:
        """Raise an error when comparing Hijri object to non-Hijri object."""
        raise TypeError(f"can't compare 'Hijri' to '{type(other).__name__}'")

    @classmethod
    def fromisoformat(cls, date_string: str):
        """Construct Hijri object from an ISO formatted Hijri date
        'YYYY-MM-DD'.

        :param date_string: Hijri date in ISO format ``YYYY-MM-DD``
        :type date_string: str
        :return: Hijri date object
        :rtype: Hijri
        """

        year = int(date_string[0:4])
        month = int(date_string[5:7])
        day = int(date_string[8:10])
        return cls(year, month, day)

    @property
    def year(self) -> int:
        """Return year as an integer."""
        return self._year

    @property
    def month(self) -> int:
        """Return month as an integer."""
        return self._month

    @property
    def day(self) -> int:
        """Return day as an integer."""
        return self._day

    def datetuple(self) -> tuple:
        """Return date as a tuple of (year, month, day)."""
        return self._year, self._month, self._day

    def isoformat(self) -> str:
        """Return date in ISO format i.e. 'YYYY-MM-DD'."""
        return f"{self._year:04}-{self._month:02}-{self._day:02}"

    def dmyformat(self) -> str:
        """Return date in 'DD/MM/YYYY' format."""
        return f"{self._day:02}/{self._month:02}/{self._year:04}"

    def slashformat(self) -> str:
        """Return date in 'DD/MM/YYYY' format.

        This method is DEPRECATED and will be removed in a future version,
        use ``dmyformat()`` instead.
        """

        warnings.warn(
            "slashformat() is deprecated, use dmyformat() instead",
            DeprecationWarning,
        )
        return self.dmyformat()

    def month_length(self) -> int:
        """Return number of days in month."""
        month_starts = ummalqura.month_starts
        index = self._month_index()
        length = month_starts[index + 1] - month_starts[index]
        return length

    def month_name(self, language: str = "en") -> str:
        """Return month name.

        :param language: Language for localized translation which may be
            ``en`` or ``ar`` (default is ``en``)
        :type language: str
        """

        return getattr(locales, language).hijri_months[self._month]

    def weekday(self) -> int:
        """Return day of week, where Monday is 0 ... Sunday is 6."""
        jd = self.to_julian()
        return int(jd % 7)

    def isoweekday(self) -> int:
        """Return day of week, where Monday is 1 ... Sunday is 7."""
        jd = self.to_julian()
        return int(jd % 7) + 1

    def day_name(self, language: str = "en") -> str:
        """Return day name.

        :param language: Language for localized translation which may be
            ``en`` or ``ar`` (default is ``en``)
        :type language: str
        """

        return getattr(locales, language).weekday_names[self.weekday()]

    @staticmethod
    def notation(language: str = "en") -> str:
        """Return calendar notation/abbreviation.

        :param language: Language for localized translation which may be
            ``en`` or ``ar`` (default is ``en``)
        :type language: str
        """

        return getattr(locales, language).hijri_notation

    def to_julian(self) -> int:
        """Convert to Julian Day (JD) number."""
        month_starts = ummalqura.month_starts
        index = self._month_index()
        rjd = month_starts[index] + self._day - 1
        jd = _reduced_julian_to_julian(rjd)
        return jd

    def to_gregorian(self) -> "Gregorian":
        """Convert to Gregorian date.

        :return: Gregorian date object
        :rtype: Gregorian
        """

        jd = self.to_julian()
        n = _julian_to_ordinal(jd)
        return Gregorian.fromordinal(n)

    def _check_date(self) -> None:
        """Check date values if within valid range."""
        # check year
        min_year, max_year = [d[0] for d in ummalqura.hijri_range]
        if not min_year <= self.year <= max_year:
            raise OverflowError("date out of range")
        # check month
        if not 1 <= self.month <= 12:
            raise ValueError("month must be in 1..12")
        # check day
        month_length = self.month_length()
        if not 1 <= self.day <= month_length:
            raise ValueError(f"day must be in 1..{month_length} for month")

    def _month_index(self) -> int:
        """Return month's index in ummalqura data"""
        prior_months = ((self.year - 1) * 12) + self.month - 1
        index = prior_months - ummalqura.hijri_offset
        return index


class Gregorian(datetime.date):
    """A Gregorian object represents a date (year, month and day) in Gregorian
    calendar inheriting all attributes and methods of `datetime.date` object.
    """

    __slots__ = ()

    @classmethod
    def fromdate(cls, date_object: datetime.date) -> "Gregorian":
        """Construct Gregorian object from a date object.

        :param date_object: Date object
        :type date_object: datetime.date
        :return: Gregorian date object
        :rtype: Gregorian
        """

        year, month, day = date_object.timetuple()[:3]
        return super().__new__(cls, year, month, day)

    def datetuple(self) -> tuple:
        """Return date as a tuple of (year, month, day)."""
        return self.year, self.month, self.day

    def dmyformat(self) -> str:
        """Return date in 'DD/MM/YYYY' format."""
        return f"{self.day:02}/{self.month:02}/{self.year:04}"

    def slashformat(self) -> str:
        """Return date in 'DD/MM/YYYY' format.

        This method is DEPRECATED and will be removed in a future version,
        use ``dmyformat()`` instead.
        """

        warnings.warn(
            "slashformat() is deprecated, use dmyformat() instead",
            DeprecationWarning,
        )
        return self.dmyformat()

    def month_name(self, language: str = "en") -> str:
        """Return month name.

        :param language: Language for localized translation which may be
            ``en`` or ``ar`` (default is ``en``)
        :type language: str
        """

        return getattr(locales, language).gregorian_months[self.month]

    def day_name(self, language: str = "en") -> str:
        """Return day name.

        :param language: Language for localized translation which may be
            ``en`` or ``ar`` (default is ``en``)
        :type language: str
        """

        return getattr(locales, language).weekday_names[self.weekday()]

    @staticmethod
    def notation(language: str = "en") -> str:
        """Return calendar notation/abbreviation.

        :param language: Language for localized translation which may be
            ``en`` or ``ar`` (default is ``en``)
        :type language: str
        """

        return getattr(locales, language).gregorian_notation

    def to_julian(self) -> int:
        """Convert to Julian Day (JD) number."""
        n = self.toordinal()
        jd = _ordinal_to_julian(n)
        return jd

    def to_hijri(self) -> Hijri:
        """Convert to Hijri date.

        :return: Hijri date object
        :rtype: Hijri
        """

        self._check_range()
        jd = self.to_julian()
        rjd = _julian_to_reduced_julian(jd)
        month_starts = ummalqura.month_starts
        index = bisect(month_starts, rjd) - 1
        months = index + ummalqura.hijri_offset
        years = int(months / 12)
        year = years + 1
        month = months - (years * 12) + 1
        day = rjd - month_starts[index] + 1
        return Hijri(year, month, day, validate=False)

    def _check_range(self) -> None:
        """Check if Gregorian date is within valid range."""
        min_date, max_date = ummalqura.gregorian_range
        if not min_date <= (self.year, self.month, self.day) <= max_date:
            raise OverflowError("date out of range")


def _julian_to_ordinal(jd: int) -> int:
    """Convert Julian Day (JD) number to ordinal number."""
    return jd - 1721425


def _ordinal_to_julian(n: int) -> int:
    """Convert ordinal number to Julian Day (JD) number."""
    return n + 1721425


def _julian_to_reduced_julian(jd: int) -> int:
    """Convert Julian Day (JD) number to Reduced Julian Day (RJD) number."""
    return jd - 2400000


def _reduced_julian_to_julian(rjd: int) -> int:
    """Convert Reduced Julian Day (RJD) number to Julian Day (JD) number."""
    return rjd + 2400000
07070100000014000041ED000003E800000064000000025EC9613100000000000000000000000000000000000000000000003200000000hijri-converter-2.1.1/src/hijri_converter/locales07070100000015000081A4000003E800000064000000015EC961310000002B000000000000000000000000000000000000003E00000000hijri-converter-2.1.1/src/hijri_converter/locales/__init__.pyfrom hijri_converter.locales import ar, en
07070100000016000081A4000003E800000064000000015EC96131000003A4000000000000000000000000000000000000003800000000hijri-converter-2.1.1/src/hijri_converter/locales/ar.py"""Localized Translation

This module contains localized translation for week day names, month names,
and notations.

Note: months tuple must starts with empty string
"""

weekday_names = (
    "الاثنين",
    "الثلاثاء",
    "الأربعاء",
    "الخميس",
    "الجمعة",
    "السبت",
    "الأحد",
)

gregorian_notation = "م"
gregorian_months = (
    "",
    "يناير",
    "فبراير",
    "مارس",
    "أبريل",
    "مايو",
    "يونيو",
    "يوليو",
    "أغسطس",
    "سبتمبر",
    "أكتوبر",
    "نوفمبر",
    "ديسمبر",
)

hijri_notation = "هـ"
hijri_months = (
    "",
    "محرم",
    "صفر",
    "ربيع الأول",
    "ربيع الثاني",
    "جمادى الأولى",
    "جمادى الآخرة",
    "رجب",
    "شعبان",
    "رمضان",
    "شوال",
    "ذو القعدة",
    "ذو الحجة",
)
07070100000017000081A4000003E800000064000000015EC9613100000320000000000000000000000000000000000000003800000000hijri-converter-2.1.1/src/hijri_converter/locales/en.py"""Localized Translation

This module contains localized translation for week day names, month names,
and notations.

Note: months tuple must starts with empty string
"""

weekday_names = (
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
    "Sunday",
)

gregorian_notation = "CE"
gregorian_months = (
    "",
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December",
)

hijri_notation = "AH"
hijri_months = (
    "",
    "Muharram",
    "Safar",
    "Rabi’ al-Awwal",
    "Rabi’ al-Thani",
    "Jumada al-Ula",
    "Jumada al-Akhirah",
    "Rajab",
    "Sha’ban",
    "Ramadhan",
    "Shawwal",
    "Dhul-Qi’dah",
    "Dhul-Hijjah",
)
07070100000018000081A4000003E800000064000000015EC961310000564E000000000000000000000000000000000000003700000000hijri-converter-2.1.1/src/hijri_converter/ummalqura.py"""Umm al-Qura calendar specific constants."""

"""Range of valid Gregorian dates (inclusive) supported by the converter."""
gregorian_range = (1924, 8, 1), (2077, 11, 16)

"""Range of valid Hijri dates (inclusive) supported by the converter."""
hijri_range = (1343, 1, 1), (1500, 12, 30)

"""Total Hijri months before the first month."""
hijri_offset = 1342 * 12


"""Reduced Julian Day (RJD) numbers for the beginning of Hijri months.

Years 1343-1355 AH were calculated by Mohammed Alshehri (dralshehri),
    based on the issues published by Umm al-Qura newspaper at that time:
    http://ncar.gov.sa/OmElQuora/List
Years 1356-1411 AH were calculated by R.H. van Gent, based on
    the comparison calendar prepared by KFUPM Research Institute:
    https://www.staff.science.uu.nl/~gent0113/islam/downloads/ksa_calendar_1356_1411.pdf
Years 1412-1430 AH were calculated by Mohammed Alshehri (dralshehri),
    based on the issues published by Umm al-Qura newspaper at that time:
    http://ncar.gov.sa/OmElQuora/List
Years 1431-1500 AH were calculated by Mohammed Alshehri (dralshehri),
    based on the tables presented by the website of Umm al-Qura calendar:
    http://www.ummulqura.org.sa/Index.aspx
"""
month_starts = (
    23999,
    24029,
    24058,
    24088,
    24118,
    24147,
    24177,
    24207,
    24237,
    24265,
    24295,
    24325,
    24355,
    24384,
    24413,
    24443,
    24472,
    24502,
    24531,
    24561,
    24590,
    24620,
    24649,
    24679,
    24708,
    24738,
    24767,
    24797,
    24826,
    24857,
    24886,
    24916,
    24944,
    24974,
    25004,
    25033,
    25063,
    25092,
    25121,
    25151,
    25181,
    25210,
    25240,
    25270,
    25299,
    25328,
    25358,
    25388,
    25417,
    25446,
    25475,
    25505,
    25535,
    25564,
    25594,
    25624,
    25653,
    25683,
    25713,
    25742,
    25771,
    25801,
    25830,
    25860,
    25889,
    25919,
    25948,
    25978,
    26008,
    26037,
    26066,
    26097,
    26125,
    26155,
    26184,
    26214,
    26243,
    26273,
    26302,
    26332,
    26362,
    26392,
    26420,
    26451,
    26481,
    26510,
    26540,
    26569,
    26599,
    26628,
    26657,
    26687,
    26716,
    26746,
    26776,
    26805,
    26835,
    26865,
    26894,
    26924,
    26953,
    26983,
    27012,
    27041,
    27070,
    27100,
    27130,
    27159,
    27189,
    27219,
    27248,
    27278,
    27307,
    27337,
    27366,
    27396,
    27425,
    27455,
    27484,
    27514,
    27543,
    27573,
    27602,
    27632,
    27662,
    27691,
    27721,
    27750,
    27780,
    27810,
    27839,
    27868,
    27898,
    27927,
    27957,
    27986,
    28016,
    28045,
    28075,
    28105,
    28134,
    28164,
    28193,
    28224,
    28252,
    28282,
    28311,
    28341,
    28370,
    28400,
    28429,
    28459,
    28488,
    28518,
    28548,
    28577,
    28607,
    28636,
    28665,
    28695,
    28724,
    28754,
    28783,
    28813,
    28843,
    28872,
    28901,
    28931,
    28960,
    28990,
    29019,
    29049,
    29078,
    29108,
    29137,
    29167,
    29196,
    29226,
    29255,
    29285,
    29315,
    29345,
    29375,
    29404,
    29434,
    29463,
    29492,
    29522,
    29551,
    29580,
    29610,
    29640,
    29669,
    29699,
    29729,
    29759,
    29788,
    29818,
    29847,
    29876,
    29906,
    29935,
    29964,
    29994,
    30023,
    30053,
    30082,
    30112,
    30141,
    30171,
    30200,
    30230,
    30259,
    30289,
    30318,
    30348,
    30378,
    30408,
    30437,
    30467,
    30496,
    30526,
    30555,
    30585,
    30614,
    30644,
    30673,
    30703,
    30732,
    30762,
    30791,
    30821,
    30850,
    30880,
    30909,
    30939,
    30968,
    30998,
    31027,
    31057,
    31086,
    31116,
    31145,
    31175,
    31204,
    31234,
    31263,
    31293,
    31322,
    31352,
    31381,
    31411,
    31441,
    31471,
    31500,
    31530,
    31559,
    31589,
    31618,
    31648,
    31676,
    31706,
    31736,
    31766,
    31795,
    31825,
    31854,
    31884,
    31913,
    31943,
    31972,
    32002,
    32031,
    32061,
    32090,
    32120,
    32150,
    32180,
    32209,
    32239,
    32268,
    32298,
    32327,
    32357,
    32386,
    32416,
    32445,
    32475,
    32504,
    32534,
    32563,
    32593,
    32622,
    32652,
    32681,
    32711,
    32740,
    32770,
    32799,
    32829,
    32858,
    32888,
    32917,
    32947,
    32976,
    33006,
    33035,
    33065,
    33094,
    33124,
    33153,
    33183,
    33213,
    33243,
    33272,
    33302,
    33331,
    33361,
    33390,
    33420,
    33450,
    33479,
    33509,
    33539,
    33568,
    33598,
    33627,
    33657,
    33686,
    33716,
    33745,
    33775,
    33804,
    33834,
    33863,
    33893,
    33922,
    33952,
    33981,
    34011,
    34040,
    34069,
    34099,
    34128,
    34158,
    34187,
    34217,
    34247,
    34277,
    34306,
    34336,
    34365,
    34395,
    34424,
    34454,
    34483,
    34512,
    34542,
    34571,
    34601,
    34631,
    34660,
    34690,
    34719,
    34749,
    34778,
    34808,
    34837,
    34867,
    34896,
    34926,
    34955,
    34985,
    35015,
    35044,
    35074,
    35103,
    35133,
    35162,
    35192,
    35222,
    35251,
    35280,
    35310,
    35340,
    35370,
    35399,
    35429,
    35458,
    35488,
    35517,
    35547,
    35576,
    35605,
    35635,
    35665,
    35694,
    35723,
    35753,
    35782,
    35811,
    35841,
    35871,
    35901,
    35930,
    35960,
    35989,
    36019,
    36048,
    36078,
    36107,
    36136,
    36166,
    36195,
    36225,
    36254,
    36284,
    36314,
    36343,
    36373,
    36403,
    36433,
    36462,
    36492,
    36521,
    36551,
    36580,
    36610,
    36639,
    36669,
    36698,
    36728,
    36757,
    36786,
    36816,
    36845,
    36875,
    36904,
    36934,
    36963,
    36993,
    37022,
    37052,
    37081,
    37111,
    37141,
    37170,
    37200,
    37229,
    37259,
    37288,
    37318,
    37347,
    37377,
    37406,
    37436,
    37465,
    37495,
    37524,
    37554,
    37584,
    37613,
    37643,
    37672,
    37701,
    37731,
    37760,
    37790,
    37819,
    37849,
    37878,
    37908,
    37938,
    37967,
    37997,
    38027,
    38056,
    38085,
    38115,
    38144,
    38174,
    38203,
    38233,
    38262,
    38292,
    38322,
    38351,
    38381,
    38410,
    38440,
    38469,
    38499,
    38528,
    38558,
    38587,
    38617,
    38646,
    38676,
    38705,
    38735,
    38764,
    38794,
    38823,
    38853,
    38882,
    38912,
    38941,
    38971,
    39001,
    39030,
    39059,
    39089,
    39118,
    39148,
    39178,
    39208,
    39237,
    39267,
    39297,
    39326,
    39355,
    39385,
    39414,
    39444,
    39473,
    39503,
    39532,
    39562,
    39592,
    39621,
    39650,
    39680,
    39709,
    39739,
    39768,
    39798,
    39827,
    39857,
    39886,
    39916,
    39946,
    39975,
    40005,
    40035,
    40064,
    40094,
    40123,
    40153,
    40182,
    40212,
    40241,
    40271,
    40300,
    40330,
    40359,
    40389,
    40418,
    40448,
    40477,
    40507,
    40536,
    40566,
    40595,
    40625,
    40655,
    40685,
    40714,
    40744,
    40773,
    40803,
    40832,
    40862,
    40892,
    40921,
    40951,
    40980,
    41009,
    41039,
    41068,
    41098,
    41127,
    41157,
    41186,
    41216,
    41245,
    41275,
    41304,
    41334,
    41364,
    41393,
    41422,
    41452,
    41481,
    41511,
    41540,
    41570,
    41599,
    41629,
    41658,
    41688,
    41718,
    41748,
    41777,
    41807,
    41836,
    41865,
    41894,
    41924,
    41953,
    41983,
    42012,
    42042,
    42072,
    42102,
    42131,
    42161,
    42190,
    42220,
    42249,
    42279,
    42308,
    42337,
    42367,
    42397,
    42426,
    42456,
    42485,
    42515,
    42545,
    42574,
    42604,
    42633,
    42662,
    42692,
    42721,
    42751,
    42780,
    42810,
    42839,
    42869,
    42899,
    42929,
    42958,
    42988,
    43017,
    43046,
    43076,
    43105,
    43135,
    43164,
    43194,
    43223,
    43253,
    43283,
    43312,
    43342,
    43371,
    43401,
    43430,
    43460,
    43489,
    43519,
    43548,
    43578,
    43607,
    43637,
    43666,
    43696,
    43726,
    43755,
    43785,
    43814,
    43844,
    43873,
    43903,
    43932,
    43962,
    43991,
    44021,
    44050,
    44080,
    44109,
    44139,
    44169,
    44198,
    44228,
    44258,
    44287,
    44317,
    44346,
    44375,
    44405,
    44434,
    44464,
    44493,
    44523,
    44553,
    44582,
    44612,
    44641,
    44671,
    44700,
    44730,
    44759,
    44788,
    44818,
    44847,
    44877,
    44906,
    44936,
    44966,
    44996,
    45025,
    45055,
    45084,
    45114,
    45143,
    45172,
    45202,
    45231,
    45261,
    45290,
    45320,
    45350,
    45380,
    45409,
    45439,
    45468,
    45498,
    45527,
    45556,
    45586,
    45615,
    45644,
    45674,
    45704,
    45733,
    45763,
    45793,
    45823,
    45852,
    45882,
    45911,
    45940,
    45970,
    45999,
    46028,
    46058,
    46088,
    46117,
    46147,
    46177,
    46206,
    46236,
    46265,
    46295,
    46324,
    46354,
    46383,
    46413,
    46442,
    46472,
    46501,
    46531,
    46560,
    46590,
    46620,
    46649,
    46679,
    46708,
    46738,
    46767,
    46797,
    46826,
    46856,
    46885,
    46915,
    46944,
    46974,
    47003,
    47033,
    47063,
    47092,
    47122,
    47151,
    47181,
    47210,
    47240,
    47269,
    47298,
    47328,
    47357,
    47387,
    47417,
    47446,
    47476,
    47506,
    47535,
    47565,
    47594,
    47624,
    47653,
    47682,
    47712,
    47741,
    47771,
    47800,
    47830,
    47860,
    47890,
    47919,
    47949,
    47978,
    48008,
    48037,
    48066,
    48096,
    48125,
    48155,
    48184,
    48214,
    48244,
    48273,
    48303,
    48333,
    48362,
    48392,
    48421,
    48450,
    48480,
    48509,
    48538,
    48568,
    48598,
    48627,
    48657,
    48687,
    48717,
    48746,
    48776,
    48805,
    48834,
    48864,
    48893,
    48922,
    48952,
    48982,
    49011,
    49041,
    49071,
    49100,
    49130,
    49160,
    49189,
    49218,
    49248,
    49277,
    49306,
    49336,
    49365,
    49395,
    49425,
    49455,
    49484,
    49514,
    49543,
    49573,
    49602,
    49632,
    49661,
    49690,
    49720,
    49749,
    49779,
    49809,
    49838,
    49868,
    49898,
    49927,
    49957,
    49986,
    50016,
    50045,
    50075,
    50104,
    50133,
    50163,
    50192,
    50222,
    50252,
    50281,
    50311,
    50340,
    50370,
    50400,
    50429,
    50459,
    50488,
    50518,
    50547,
    50576,
    50606,
    50635,
    50665,
    50694,
    50724,
    50754,
    50784,
    50813,
    50843,
    50872,
    50902,
    50931,
    50960,
    50990,
    51019,
    51049,
    51078,
    51108,
    51138,
    51167,
    51197,
    51227,
    51256,
    51286,
    51315,
    51345,
    51374,
    51403,
    51433,
    51462,
    51492,
    51522,
    51552,
    51582,
    51611,
    51641,
    51670,
    51699,
    51729,
    51758,
    51787,
    51816,
    51846,
    51876,
    51906,
    51936,
    51965,
    51995,
    52025,
    52054,
    52083,
    52113,
    52142,
    52171,
    52200,
    52230,
    52260,
    52290,
    52319,
    52349,
    52379,
    52408,
    52438,
    52467,
    52497,
    52526,
    52555,
    52585,
    52614,
    52644,
    52673,
    52703,
    52733,
    52762,
    52792,
    52822,
    52851,
    52881,
    52910,
    52939,
    52969,
    52998,
    53028,
    53057,
    53087,
    53116,
    53146,
    53176,
    53205,
    53235,
    53264,
    53294,
    53324,
    53353,
    53383,
    53412,
    53441,
    53471,
    53500,
    53530,
    53559,
    53589,
    53619,
    53648,
    53678,
    53708,
    53737,
    53767,
    53796,
    53825,
    53855,
    53884,
    53914,
    53943,
    53973,
    54003,
    54032,
    54062,
    54092,
    54121,
    54151,
    54180,
    54209,
    54239,
    54268,
    54297,
    54327,
    54357,
    54387,
    54416,
    54446,
    54476,
    54505,
    54535,
    54564,
    54593,
    54623,
    54652,
    54681,
    54711,
    54741,
    54770,
    54800,
    54830,
    54859,
    54889,
    54919,
    54948,
    54977,
    55007,
    55036,
    55066,
    55095,
    55125,
    55154,
    55184,
    55213,
    55243,
    55273,
    55302,
    55332,
    55361,
    55391,
    55420,
    55450,
    55479,
    55508,
    55538,
    55567,
    55597,
    55627,
    55657,
    55686,
    55716,
    55745,
    55775,
    55804,
    55834,
    55863,
    55892,
    55922,
    55951,
    55981,
    56011,
    56040,
    56070,
    56100,
    56129,
    56159,
    56188,
    56218,
    56247,
    56276,
    56306,
    56335,
    56365,
    56394,
    56424,
    56454,
    56483,
    56513,
    56543,
    56572,
    56601,
    56631,
    56660,
    56690,
    56719,
    56749,
    56778,
    56808,
    56837,
    56867,
    56897,
    56926,
    56956,
    56985,
    57015,
    57044,
    57074,
    57103,
    57133,
    57162,
    57192,
    57221,
    57251,
    57280,
    57310,
    57340,
    57369,
    57399,
    57429,
    57458,
    57487,
    57517,
    57546,
    57576,
    57605,
    57634,
    57664,
    57694,
    57723,
    57753,
    57783,
    57813,
    57842,
    57871,
    57901,
    57930,
    57959,
    57989,
    58018,
    58048,
    58077,
    58107,
    58137,
    58167,
    58196,
    58226,
    58255,
    58285,
    58314,
    58343,
    58373,
    58402,
    58432,
    58461,
    58491,
    58521,
    58551,
    58580,
    58610,
    58639,
    58669,
    58698,
    58727,
    58757,
    58786,
    58816,
    58845,
    58875,
    58905,
    58934,
    58964,
    58994,
    59023,
    59053,
    59082,
    59111,
    59141,
    59170,
    59200,
    59229,
    59259,
    59288,
    59318,
    59348,
    59377,
    59407,
    59436,
    59466,
    59495,
    59525,
    59554,
    59584,
    59613,
    59643,
    59672,
    59702,
    59731,
    59761,
    59791,
    59820,
    59850,
    59879,
    59909,
    59939,
    59968,
    59997,
    60027,
    60056,
    60086,
    60115,
    60145,
    60174,
    60204,
    60234,
    60264,
    60293,
    60323,
    60352,
    60381,
    60411,
    60440,
    60469,
    60499,
    60528,
    60558,
    60588,
    60618,
    60647,
    60677,
    60707,
    60736,
    60765,
    60795,
    60824,
    60853,
    60883,
    60912,
    60942,
    60972,
    61002,
    61031,
    61061,
    61090,
    61120,
    61149,
    61179,
    61208,
    61237,
    61267,
    61296,
    61326,
    61356,
    61385,
    61415,
    61445,
    61474,
    61504,
    61533,
    61563,
    61592,
    61621,
    61651,
    61680,
    61710,
    61739,
    61769,
    61799,
    61828,
    61858,
    61888,
    61917,
    61947,
    61976,
    62006,
    62035,
    62064,
    62094,
    62123,
    62153,
    62182,
    62212,
    62242,
    62271,
    62301,
    62331,
    62360,
    62390,
    62419,
    62448,
    62478,
    62507,
    62537,
    62566,
    62596,
    62625,
    62655,
    62685,
    62715,
    62744,
    62774,
    62803,
    62832,
    62862,
    62891,
    62921,
    62950,
    62980,
    63009,
    63039,
    63069,
    63099,
    63128,
    63157,
    63187,
    63216,
    63246,
    63275,
    63305,
    63334,
    63363,
    63393,
    63423,
    63453,
    63482,
    63512,
    63541,
    63571,
    63600,
    63630,
    63659,
    63689,
    63718,
    63747,
    63777,
    63807,
    63836,
    63866,
    63895,
    63925,
    63955,
    63984,
    64014,
    64043,
    64073,
    64102,
    64131,
    64161,
    64190,
    64220,
    64249,
    64279,
    64309,
    64339,
    64368,
    64398,
    64427,
    64457,
    64486,
    64515,
    64545,
    64574,
    64603,
    64633,
    64663,
    64692,
    64722,
    64752,
    64782,
    64811,
    64841,
    64870,
    64899,
    64929,
    64958,
    64987,
    65017,
    65047,
    65076,
    65106,
    65136,
    65166,
    65195,
    65225,
    65254,
    65283,
    65313,
    65342,
    65371,
    65401,
    65431,
    65460,
    65490,
    65520,
    65549,
    65579,
    65608,
    65638,
    65667,
    65697,
    65726,
    65755,
    65785,
    65815,
    65844,
    65874,
    65903,
    65933,
    65963,
    65992,
    66022,
    66051,
    66081,
    66110,
    66140,
    66169,
    66199,
    66228,
    66258,
    66287,
    66317,
    66346,
    66376,
    66405,
    66435,
    66465,
    66494,
    66524,
    66553,
    66583,
    66612,
    66641,
    66671,
    66700,
    66730,
    66760,
    66789,
    66819,
    66849,
    66878,
    66908,
    66937,
    66967,
    66996,
    67025,
    67055,
    67084,
    67114,
    67143,
    67173,
    67203,
    67233,
    67262,
    67292,
    67321,
    67351,
    67380,
    67409,
    67439,
    67468,
    67497,
    67527,
    67557,
    67587,
    67617,
    67646,
    67676,
    67705,
    67735,
    67764,
    67793,
    67823,
    67852,
    67882,
    67911,
    67941,
    67971,
    68000,
    68030,
    68060,
    68089,
    68119,
    68148,
    68177,
    68207,
    68236,
    68266,
    68295,
    68325,
    68354,
    68384,
    68414,
    68443,
    68473,
    68502,
    68532,
    68561,
    68591,
    68620,
    68650,
    68679,
    68708,
    68738,
    68768,
    68797,
    68827,
    68857,
    68886,
    68916,
    68946,
    68975,
    69004,
    69034,
    69063,
    69092,
    69122,
    69152,
    69181,
    69211,
    69240,
    69270,
    69300,
    69330,
    69359,
    69388,
    69418,
    69447,
    69476,
    69506,
    69535,
    69565,
    69595,
    69624,
    69654,
    69684,
    69713,
    69743,
    69772,
    69802,
    69831,
    69861,
    69890,
    69919,
    69949,
    69978,
    70008,
    70038,
    70067,
    70097,
    70126,
    70156,
    70186,
    70215,
    70245,
    70274,
    70303,
    70333,
    70362,
    70392,
    70421,
    70451,
    70481,
    70510,
    70540,
    70570,
    70599,
    70629,
    70658,
    70687,
    70717,
    70746,
    70776,
    70805,
    70835,
    70864,
    70894,
    70924,
    70954,
    70983,
    71013,
    71042,
    71071,
    71101,
    71130,
    71159,
    71189,
    71218,
    71248,
    71278,
    71308,
    71337,
    71367,
    71397,
    71426,
    71455,
    71485,
    71514,
    71543,
    71573,
    71602,
    71632,
    71662,
    71691,
    71721,
    71751,
    71781,
    71810,
    71839,
    71869,
    71898,
    71927,
    71957,
    71986,
    72016,
    72046,
    72075,
    72105,
    72135,
    72164,
    72194,
    72223,
    72253,
    72282,
    72311,
    72341,
    72370,
    72400,
    72429,
    72459,
    72489,
    72518,
    72548,
    72577,
    72607,
    72637,
    72666,
    72695,
    72725,
    72754,
    72784,
    72813,
    72843,
    72872,
    72902,
    72931,
    72961,
    72991,
    73020,
    73050,
    73080,
    73109,
    73139,
    73168,
    73197,
    73227,
    73256,
    73286,
    73315,
    73345,
    73375,
    73404,
    73434,
    73464,
    73493,
    73523,
    73552,
    73581,
    73611,
    73640,
    73669,
    73699,
    73729,
    73758,
    73788,
    73818,
    73848,
    73877,
    73907,
    73936,
    73965,
    73995,
    74024,
    74053,
    74083,
    74113,
    74142,
    74172,
    74202,
    74231,
    74261,
    74291,
    74320,
    74349,
    74379,
    74408,
    74437,
    74467,
    74497,
    74526,
    74556,
    74585,
    74615,
    74645,
    74675,
    74704,
    74733,
    74763,
    74792,
    74822,
    74851,
    74881,
    74910,
    74940,
    74969,
    74999,
    75029,
    75058,
    75088,
    75117,
    75147,
    75176,
    75206,
    75235,
    75264,
    75294,
    75323,
    75353,
    75383,
    75412,
    75442,
    75472,
    75501,
    75531,
    75560,
    75590,
    75619,
    75648,
    75678,
    75707,
    75737,
    75766,
    75796,
    75826,
    75856,
    75885,
    75915,
    75944,
    75974,
    76003,
    76032,
    76062,
    76091,
    76121,
    76150,
    76180,
    76210,
    76239,
    76269,
    76299,
    76328,
    76358,
    76387,
    76416,
    76446,
    76475,
    76505,
    76534,
    76564,
    76593,
    76623,
    76653,
    76682,
    76712,
    76741,
    76771,
    76801,
    76830,
    76859,
    76889,
    76918,
    76948,
    76977,
    77007,
    77036,
    77066,
    77096,
    77125,
    77155,
    77185,
    77214,
    77243,
    77273,
    77302,
    77332,
    77361,
    77390,
    77420,
    77450,
    77479,
    77509,
    77539,
    77569,
    77598,
    77627,
    77657,
    77686,
    77715,
    77745,
    77774,
    77804,
    77833,
    77863,
    77893,
    77923,
    77952,
    77982,
    78011,
    78041,
    78070,
    78099,
    78129,
    78158,
    78188,
    78217,
    78247,
    78277,
    78307,
    78336,
    78366,
    78395,
    78425,
    78454,
    78483,
    78513,
    78542,
    78572,
    78601,
    78631,
    78661,
    78690,
    78720,
    78750,
    78779,
    78808,
    78838,
    78867,
    78897,
    78926,
    78956,
    78985,
    79015,
    79044,
    79074,
    79104,
    79133,
    79163,
    79192,
    79222,
    79251,
    79281,
    79310,
    79340,
    79369,
    79399,
    79428,
    79458,
    79487,
    79517,
    79546,
    79576,
    79606,
    79635,
    79665,
    79695,
    79724,
    79753,
    79783,
    79812,
    79841,
    79871,
    79900,
    79930,
    79960,
    79990,
)
07070100000019000041ED000003E800000064000000045EC9613100000000000000000000000000000000000000000000001C00000000hijri-converter-2.1.1/tests0707010000001A000041ED000003E800000064000000035EC9613100000000000000000000000000000000000000000000002200000000hijri-converter-2.1.1/tests/other0707010000001B000041ED000003E800000064000000025EC9613100000000000000000000000000000000000000000000002700000000hijri-converter-2.1.1/tests/other/data0707010000001C000081A4000003E800000064000000015EC96131000059D4000000000000000000000000000000000000004600000000hijri-converter-2.1.1/tests/other/data/kfupm_comparison_calendar.json[
  ["", [[1356,1,1],[1937,3,14]]],
  ["", [[1356,2,1],[1937,4,12]]],
  ["", [[1356,3,1],[1937,5,11]]],
  ["", [[1356,4,1],[1937,6,10]]],
  ["", [[1356,5,1],[1937,7,9]]],
  ["", [[1356,6,1],[1937,8,8]]],
  ["", [[1356,7,1],[1937,9,6]]],
  ["", [[1356,8,1],[1937,10,6]]],
  ["", [[1356,9,1],[1937,11,5]]],
  ["", [[1356,10,1],[1937,12,4]]],
  ["", [[1356,11,1],[1938,1,2]]],
  ["", [[1356,12,1],[1938,2,1]]],
  ["", [[1357,1,1],[1938,3,2]]],
  ["", [[1357,2,1],[1938,4,1]]],
  ["", [[1357,3,1],[1938,4,30]]],
  ["", [[1357,4,1],[1938,5,30]]],
  ["", [[1357,5,1],[1938,6,28]]],
  ["", [[1357,6,1],[1938,7,28]]],
  ["", [[1357,7,1],[1938,8,26]]],
  ["", [[1357,8,1],[1938,9,25]]],
  ["", [[1357,9,1],[1938,10,24]]],
  ["", [[1357,10,1],[1938,11,23]]],
  ["", [[1357,11,1],[1938,12,22]]],
  ["", [[1357,12,1],[1939,1,21]]],
  ["", [[1358,1,1],[1939,2,20]]],
  ["", [[1358,2,1],[1939,3,22]]],
  ["", [[1358,3,1],[1939,4,21]]],
  ["", [[1358,4,1],[1939,5,20]]],
  ["", [[1358,5,1],[1939,6,19]]],
  ["", [[1358,6,1],[1939,7,18]]],
  ["", [[1358,7,1],[1939,8,16]]],
  ["", [[1358,8,1],[1939,9,15]]],
  ["", [[1358,9,1],[1939,10,14]]],
  ["", [[1358,10,1],[1939,11,12]]],
  ["", [[1358,11,1],[1939,12,12]]],
  ["", [[1358,12,1],[1940,1,11]]],
  ["", [[1359,1,1],[1940,2,9]]],
  ["", [[1359,2,1],[1940,3,10]]],
  ["", [[1359,3,1],[1940,4,9]]],
  ["", [[1359,4,1],[1940,5,9]]],
  ["", [[1359,5,1],[1940,6,7]]],
  ["", [[1359,6,1],[1940,7,7]]],
  ["", [[1359,7,1],[1940,8,5]]],
  ["", [[1359,8,1],[1940,9,3]]],
  ["", [[1359,9,1],[1940,10,3]]],
  ["", [[1359,10,1],[1940,11,1]]],
  ["", [[1359,11,1],[1940,11,30]]],
  ["", [[1359,12,1],[1940,12,30]]],
  ["", [[1360,1,1],[1941,1,28]]],
  ["", [[1360,2,1],[1941,2,27]]],
  ["", [[1360,3,1],[1941,3,28]]],
  ["", [[1360,4,1],[1941,4,27]]],
  ["", [[1360,5,1],[1941,5,26]]],
  ["", [[1360,6,1],[1941,6,25]]],
  ["", [[1360,7,1],[1941,7,24]]],
  ["", [[1360,8,1],[1941,8,23]]],
  ["", [[1360,9,1],[1941,9,21]]],
  ["", [[1360,10,1],[1941,10,21]]],
  ["", [[1360,11,1],[1941,11,19]]],
  ["", [[1360,12,1],[1941,12,19]]],
  ["", [[1361,1,1],[1942,1,18]]],
  ["", [[1361,2,1],[1942,2,17]]],
  ["", [[1361,3,1],[1942,3,18]]],
  ["", [[1361,4,1],[1942,4,17]]],
  ["", [[1361,5,1],[1942,5,16]]],
  ["", [[1361,6,1],[1942,6,15]]],
  ["", [[1361,7,1],[1942,7,14]]],
  ["", [[1361,8,1],[1942,8,13]]],
  ["", [[1361,9,1],[1942,9,11]]],
  ["", [[1361,10,1],[1942,10,11]]],
  ["", [[1361,11,1],[1942,11,9]]],
  ["", [[1361,12,1],[1942,12,9]]],
  ["", [[1362,1,1],[1943,1,7]]],
  ["", [[1362,2,1],[1943,2,6]]],
  ["", [[1362,3,1],[1943,3,7]]],
  ["", [[1362,4,1],[1943,4,6]]],
  ["", [[1362,5,1],[1943,5,5]]],
  ["", [[1362,6,1],[1943,6,4]]],
  ["", [[1362,7,1],[1943,7,3]]],
  ["", [[1362,8,1],[1943,8,2]]],
  ["", [[1362,9,1],[1943,8,31]]],
  ["", [[1362,10,1],[1943,9,30]]],
  ["", [[1362,11,1],[1943,10,29]]],
  ["", [[1362,12,1],[1943,11,28]]],
  ["", [[1363,1,1],[1943,12,27]]],
  ["", [[1363,2,1],[1944,1,26]]],
  ["", [[1363,3,1],[1944,2,24]]],
  ["", [[1363,4,1],[1944,3,25]]],
  ["", [[1363,5,1],[1944,4,23]]],
  ["", [[1363,6,1],[1944,5,23]]],
  ["", [[1363,7,1],[1944,6,21]]],
  ["", [[1363,8,1],[1944,7,21]]],
  ["", [[1363,9,1],[1944,8,19]]],
  ["", [[1363,10,1],[1944,9,18]]],
  ["", [[1363,11,1],[1944,10,17]]],
  ["", [[1363,12,1],[1944,11,16]]],
  ["", [[1364,1,1],[1944,12,16]]],
  ["", [[1364,2,1],[1945,1,15]]],
  ["", [[1364,3,1],[1945,2,13]]],
  ["", [[1364,4,1],[1945,3,15]]],
  ["", [[1364,5,1],[1945,4,13]]],
  ["", [[1364,6,1],[1945,5,13]]],
  ["", [[1364,7,1],[1945,6,11]]],
  ["", [[1364,8,1],[1945,7,11]]],
  ["", [[1364,9,1],[1945,8,8]]],
  ["", [[1364,10,1],[1945,9,7]]],
  ["", [[1364,11,1],[1945,10,7]]],
  ["", [[1364,12,1],[1945,11,6]]],
  ["", [[1365,1,1],[1945,12,5]]],
  ["", [[1365,2,1],[1946,1,4]]],
  ["", [[1365,3,1],[1946,2,2]]],
  ["", [[1365,4,1],[1946,3,4]]],
  ["", [[1365,5,1],[1946,4,2]]],
  ["", [[1365,6,1],[1946,5,2]]],
  ["", [[1365,7,1],[1946,5,31]]],
  ["", [[1365,8,1],[1946,6,30]]],
  ["", [[1365,9,1],[1946,7,29]]],
  ["", [[1365,10,1],[1946,8,28]]],
  ["", [[1365,11,1],[1946,9,26]]],
  ["", [[1365,12,1],[1946,10,26]]],
  ["", [[1366,1,1],[1946,11,25]]],
  ["", [[1366,2,1],[1946,12,25]]],
  ["", [[1366,3,1],[1947,1,23]]],
  ["", [[1366,4,1],[1947,2,22]]],
  ["", [[1366,5,1],[1947,3,23]]],
  ["", [[1366,6,1],[1947,4,22]]],
  ["", [[1366,7,1],[1947,5,21]]],
  ["", [[1366,8,1],[1947,6,20]]],
  ["", [[1366,9,1],[1947,7,19]]],
  ["", [[1366,10,1],[1947,8,18]]],
  ["", [[1366,11,1],[1947,9,16]]],
  ["", [[1366,12,1],[1947,10,16]]],
  ["", [[1367,1,1],[1947,11,14]]],
  ["", [[1367,2,1],[1947,12,14]]],
  ["", [[1367,3,1],[1948,1,12]]],
  ["", [[1367,4,1],[1948,2,11]]],
  ["", [[1367,5,1],[1948,3,11]]],
  ["", [[1367,6,1],[1948,4,10]]],
  ["", [[1367,7,1],[1948,5,9]]],
  ["", [[1367,8,1],[1948,6,8]]],
  ["", [[1367,9,1],[1948,7,7]]],
  ["", [[1367,10,1],[1948,8,6]]],
  ["", [[1367,11,1],[1948,9,4]]],
  ["", [[1367,12,1],[1948,10,4]]],
  ["", [[1368,1,1],[1948,11,2]]],
  ["", [[1368,2,1],[1948,12,2]]],
  ["", [[1368,3,1],[1948,12,31]]],
  ["", [[1368,4,1],[1949,1,30]]],
  ["", [[1368,5,1],[1949,2,28]]],
  ["", [[1368,6,1],[1949,3,30]]],
  ["", [[1368,7,1],[1949,4,28]]],
  ["", [[1368,8,1],[1949,5,28]]],
  ["", [[1368,9,1],[1949,6,26]]],
  ["", [[1368,10,1],[1949,7,26]]],
  ["", [[1368,11,1],[1949,8,24]]],
  ["", [[1368,12,1],[1949,9,23]]],
  ["", [[1369,1,1],[1949,10,23]]],
  ["", [[1369,2,1],[1949,11,22]]],
  ["", [[1369,3,1],[1949,12,21]]],
  ["", [[1369,4,1],[1950,1,20]]],
  ["", [[1369,5,1],[1950,2,18]]],
  ["", [[1369,6,1],[1950,3,20]]],
  ["", [[1369,7,1],[1950,4,18]]],
  ["", [[1369,8,1],[1950,5,18]]],
  ["", [[1369,9,1],[1950,6,17]]],
  ["", [[1369,10,1],[1950,7,16]]],
  ["", [[1369,11,1],[1950,8,15]]],
  ["", [[1369,12,1],[1950,9,14]]],
  ["", [[1370,1,1],[1950,10,13]]],
  ["", [[1370,2,1],[1950,11,12]]],
  ["", [[1370,3,1],[1950,12,11]]],
  ["", [[1370,4,1],[1951,1,10]]],
  ["", [[1370,5,1],[1951,2,8]]],
  ["", [[1370,6,1],[1951,3,10]]],
  ["", [[1370,7,1],[1951,4,8]]],
  ["", [[1370,8,1],[1951,5,8]]],
  ["", [[1370,9,1],[1951,6,6]]],
  ["", [[1370,10,1],[1951,7,6]]],
  ["", [[1370,11,1],[1951,8,4]]],
  ["", [[1370,12,1],[1951,9,3]]],
  ["", [[1371,1,1],[1951,10,2]]],
  ["", [[1371,2,1],[1951,11,1]]],
  ["", [[1371,3,1],[1951,11,30]]],
  ["", [[1371,4,1],[1951,12,30]]],
  ["", [[1371,5,1],[1952,1,28]]],
  ["", [[1371,6,1],[1952,2,26]]],
  ["", [[1371,7,1],[1952,3,27]]],
  ["", [[1371,8,1],[1952,4,25]]],
  ["", [[1371,9,1],[1952,5,25]]],
  ["", [[1371,10,1],[1952,6,23]]],
  ["", [[1371,11,1],[1952,7,23]]],
  ["", [[1371,12,1],[1952,8,22]]],
  ["", [[1372,1,1],[1952,9,21]]],
  ["", [[1372,2,1],[1952,10,20]]],
  ["", [[1372,3,1],[1952,11,19]]],
  ["", [[1372,4,1],[1952,12,18]]],
  ["", [[1372,5,1],[1953,1,17]]],
  ["", [[1372,6,1],[1953,2,15]]],
  ["", [[1372,7,1],[1953,3,17]]],
  ["", [[1372,8,1],[1953,4,15]]],
  ["", [[1372,9,1],[1953,5,14]]],
  ["", [[1372,10,1],[1953,6,13]]],
  ["", [[1372,11,1],[1953,7,12]]],
  ["", [[1372,12,1],[1953,8,11]]],
  ["", [[1373,1,1],[1953,9,10]]],
  ["", [[1373,2,1],[1953,10,9]]],
  ["", [[1373,3,1],[1953,11,8]]],
  ["", [[1373,4,1],[1953,12,7]]],
  ["", [[1373,5,1],[1954,1,6]]],
  ["", [[1373,6,1],[1954,2,4]]],
  ["", [[1373,7,1],[1954,3,6]]],
  ["", [[1373,8,1],[1954,4,4]]],
  ["", [[1373,9,1],[1954,5,4]]],
  ["", [[1373,10,1],[1954,6,2]]],
  ["", [[1373,11,1],[1954,7,2]]],
  ["", [[1373,12,1],[1954,7,31]]],
  ["", [[1374,1,1],[1954,8,30]]],
  ["", [[1374,2,1],[1954,9,29]]],
  ["", [[1374,3,1],[1954,10,28]]],
  ["", [[1374,4,1],[1954,11,27]]],
  ["", [[1374,5,1],[1954,12,26]]],
  ["", [[1374,6,1],[1955,1,25]]],
  ["", [[1374,7,1],[1955,2,23]]],
  ["", [[1374,8,1],[1955,3,25]]],
  ["", [[1374,9,1],[1955,4,24]]],
  ["", [[1374,10,1],[1955,5,23]]],
  ["", [[1374,11,1],[1955,6,21]]],
  ["", [[1374,12,1],[1955,7,21]]],
  ["", [[1375,1,1],[1955,8,20]]],
  ["", [[1375,2,1],[1955,9,19]]],
  ["", [[1375,3,1],[1955,10,18]]],
  ["", [[1375,4,1],[1955,11,17]]],
  ["", [[1375,5,1],[1955,12,16]]],
  ["", [[1375,6,1],[1956,1,15]]],
  ["", [[1375,7,1],[1956,2,13]]],
  ["", [[1375,8,1],[1956,3,14]]],
  ["", [[1375,9,1],[1956,4,12]]],
  ["", [[1375,10,1],[1956,5,11]]],
  ["", [[1375,11,1],[1956,6,10]]],
  ["", [[1375,12,1],[1956,7,10]]],
  ["", [[1376,1,1],[1956,8,8]]],
  ["", [[1376,2,1],[1956,9,6]]],
  ["", [[1376,3,1],[1956,10,6]]],
  ["", [[1376,4,1],[1956,11,4]]],
  ["", [[1376,5,1],[1956,12,3]]],
  ["", [[1376,6,1],[1957,1,2]]],
  ["", [[1376,7,1],[1957,2,1]]],
  ["", [[1376,8,1],[1957,3,3]]],
  ["", [[1376,9,1],[1957,4,1]]],
  ["", [[1376,10,1],[1957,5,1]]],
  ["", [[1376,11,1],[1957,5,30]]],
  ["", [[1376,12,1],[1957,6,29]]],
  ["", [[1377,1,1],[1957,7,28]]],
  ["", [[1377,2,1],[1957,8,27]]],
  ["", [[1377,3,1],[1957,9,25]]],
  ["", [[1377,4,1],[1957,10,24]]],
  ["", [[1377,5,1],[1957,11,23]]],
  ["", [[1377,6,1],[1957,12,22]]],
  ["", [[1377,7,1],[1958,1,21]]],
  ["", [[1377,8,1],[1958,2,19]]],
  ["", [[1377,9,1],[1958,3,21]]],
  ["", [[1377,10,1],[1958,4,20]]],
  ["", [[1377,11,1],[1958,5,19]]],
  ["", [[1377,12,1],[1958,6,18]]],
  ["", [[1378,1,1],[1958,7,18]]],
  ["", [[1378,2,1],[1958,8,17]]],
  ["", [[1378,3,1],[1958,9,15]]],
  ["", [[1378,4,1],[1958,10,15]]],
  ["", [[1378,5,1],[1958,11,13]]],
  ["", [[1378,6,1],[1958,12,13]]],
  ["", [[1378,7,1],[1959,1,11]]],
  ["", [[1378,8,1],[1959,2,10]]],
  ["", [[1378,9,1],[1959,3,11]]],
  ["", [[1378,10,1],[1959,4,10]]],
  ["", [[1378,11,1],[1959,5,9]]],
  ["", [[1378,12,1],[1959,6,8]]],
  ["", [[1379,1,1],[1959,7,7]]],
  ["", [[1379,2,1],[1959,8,5]]],
  ["", [[1379,3,1],[1959,9,4]]],
  ["", [[1379,4,1],[1959,10,3]]],
  ["", [[1379,5,1],[1959,11,2]]],
  ["", [[1379,6,1],[1959,12,1]]],
  ["", [[1379,7,1],[1959,12,31]]],
  ["", [[1379,8,1],[1960,1,29]]],
  ["", [[1379,9,1],[1960,2,28]]],
  ["", [[1379,10,1],[1960,3,28]]],
  ["", [[1379,11,1],[1960,4,27]]],
  ["", [[1379,12,1],[1960,5,26]]],
  ["", [[1380,1,1],[1960,6,25]]],
  ["", [[1380,2,1],[1960,7,25]]],
  ["", [[1380,3,1],[1960,8,23]]],
  ["", [[1380,4,1],[1960,9,22]]],
  ["", [[1380,5,1],[1960,10,21]]],
  ["", [[1380,6,1],[1960,11,20]]],
  ["", [[1380,7,1],[1960,12,19]]],
  ["", [[1380,8,1],[1961,1,18]]],
  ["", [[1380,9,1],[1961,2,16]]],
  ["", [[1380,10,1],[1961,3,18]]],
  ["", [[1380,11,1],[1961,4,16]]],
  ["", [[1380,12,1],[1961,5,16]]],
  ["", [[1381,1,1],[1961,6,14]]],
  ["", [[1381,2,1],[1961,7,14]]],
  ["", [[1381,3,1],[1961,8,12]]],
  ["", [[1381,4,1],[1961,9,11]]],
  ["", [[1381,5,1],[1961,10,11]]],
  ["", [[1381,6,1],[1961,11,9]]],
  ["", [[1381,7,1],[1961,12,9]]],
  ["", [[1381,8,1],[1962,1,7]]],
  ["", [[1381,9,1],[1962,2,5]]],
  ["", [[1381,10,1],[1962,3,7]]],
  ["", [[1381,11,1],[1962,4,5]]],
  ["", [[1381,12,1],[1962,5,5]]],
  ["", [[1382,1,1],[1962,6,3]]],
  ["", [[1382,2,1],[1962,7,3]]],
  ["", [[1382,3,1],[1962,8,1]]],
  ["", [[1382,4,1],[1962,8,31]]],
  ["", [[1382,5,1],[1962,9,30]]],
  ["", [[1382,6,1],[1962,10,29]]],
  ["", [[1382,7,1],[1962,11,28]]],
  ["", [[1382,8,1],[1962,12,28]]],
  ["", [[1382,9,1],[1963,1,26]]],
  ["", [[1382,10,1],[1963,2,24]]],
  ["", [[1382,11,1],[1963,3,26]]],
  ["", [[1382,12,1],[1963,4,24]]],
  ["", [[1383,1,1],[1963,5,24]]],
  ["", [[1383,2,1],[1963,6,22]]],
  ["", [[1383,3,1],[1963,7,22]]],
  ["", [[1383,4,1],[1963,8,20]]],
  ["", [[1383,5,1],[1963,9,19]]],
  ["", [[1383,6,1],[1963,10,19]]],
  ["", [[1383,7,1],[1963,11,17]]],
  ["", [[1383,8,1],[1963,12,17]]],
  ["", [[1383,9,1],[1964,1,15]]],
  ["", [[1383,10,1],[1964,2,14]]],
  ["", [[1383,11,1],[1964,3,14]]],
  ["", [[1383,12,1],[1964,4,13]]],
  ["", [[1384,1,1],[1964,5,12]]],
  ["", [[1384,2,1],[1964,6,11]]],
  ["", [[1384,3,1],[1964,7,10]]],
  ["", [[1384,4,1],[1964,8,9]]],
  ["", [[1384,5,1],[1964,9,7]]],
  ["", [[1384,6,1],[1964,10,7]]],
  ["", [[1384,7,1],[1964,11,5]]],
  ["", [[1384,8,1],[1964,12,5]]],
  ["", [[1384,9,1],[1965,1,3]]],
  ["", [[1384,10,1],[1965,2,2]]],
  ["", [[1384,11,1],[1965,3,3]]],
  ["", [[1384,12,1],[1965,4,2]]],
  ["", [[1385,1,1],[1965,5,1]]],
  ["", [[1385,2,1],[1965,5,31]]],
  ["", [[1385,3,1],[1965,6,29]]],
  ["", [[1385,4,1],[1965,7,29]]],
  ["", [[1385,5,1],[1965,8,28]]],
  ["", [[1385,6,1],[1965,9,26]]],
  ["", [[1385,7,1],[1965,10,25]]],
  ["", [[1385,8,1],[1965,11,24]]],
  ["", [[1385,9,1],[1965,12,23]]],
  ["", [[1385,10,1],[1966,1,22]]],
  ["", [[1385,11,1],[1966,2,21]]],
  ["", [[1385,12,1],[1966,3,23]]],
  ["", [[1386,1,1],[1966,4,21]]],
  ["", [[1386,2,1],[1966,5,21]]],
  ["", [[1386,3,1],[1966,6,20]]],
  ["", [[1386,4,1],[1966,7,19]]],
  ["", [[1386,5,1],[1966,8,17]]],
  ["", [[1386,6,1],[1966,9,16]]],
  ["", [[1386,7,1],[1966,10,15]]],
  ["", [[1386,8,1],[1966,11,14]]],
  ["", [[1386,9,1],[1966,12,13]]],
  ["", [[1386,10,1],[1967,1,12]]],
  ["", [[1386,11,1],[1967,2,10]]],
  ["", [[1386,12,1],[1967,3,12]]],
  ["", [[1387,1,1],[1967,4,11]]],
  ["", [[1387,2,1],[1967,5,10]]],
  ["", [[1387,3,1],[1967,6,8]]],
  ["", [[1387,4,1],[1967,7,8]]],
  ["", [[1387,5,1],[1967,8,6]]],
  ["", [[1387,6,1],[1967,9,5]]],
  ["", [[1387,7,1],[1967,10,4]]],
  ["", [[1387,8,1],[1967,11,3]]],
  ["", [[1387,9,1],[1967,12,2]]],
  ["", [[1387,10,1],[1968,1,1]]],
  ["", [[1387,11,1],[1968,1,30]]],
  ["", [[1387,12,1],[1968,2,29]]],
  ["", [[1388,1,1],[1968,3,30]]],
  ["", [[1388,2,1],[1968,4,28]]],
  ["", [[1388,3,1],[1968,5,28]]],
  ["", [[1388,4,1],[1968,6,27]]],
  ["", [[1388,5,1],[1968,7,26]]],
  ["", [[1388,6,1],[1968,8,25]]],
  ["", [[1388,7,1],[1968,9,23]]],
  ["", [[1388,8,1],[1968,10,23]]],
  ["", [[1388,9,1],[1968,11,21]]],
  ["", [[1388,10,1],[1968,12,21]]],
  ["", [[1388,11,1],[1969,1,19]]],
  ["", [[1388,12,1],[1969,2,18]]],
  ["", [[1389,1,1],[1969,3,19]]],
  ["", [[1389,2,1],[1969,4,18]]],
  ["", [[1389,3,1],[1969,5,17]]],
  ["", [[1389,4,1],[1969,6,16]]],
  ["", [[1389,5,1],[1969,7,15]]],
  ["", [[1389,6,1],[1969,8,14]]],
  ["", [[1389,7,1],[1969,9,12]]],
  ["", [[1389,8,1],[1969,10,12]]],
  ["", [[1389,9,1],[1969,11,10]]],
  ["", [[1389,10,1],[1969,12,10]]],
  ["", [[1389,11,1],[1970,1,8]]],
  ["", [[1389,12,1],[1970,2,7]]],
  ["", [[1390,1,1],[1970,3,9]]],
  ["", [[1390,2,1],[1970,4,8]]],
  ["", [[1390,3,1],[1970,5,7]]],
  ["", [[1390,4,1],[1970,6,6]]],
  ["", [[1390,5,1],[1970,7,5]]],
  ["", [[1390,6,1],[1970,8,4]]],
  ["", [[1390,7,1],[1970,9,2]]],
  ["", [[1390,8,1],[1970,10,2]]],
  ["", [[1390,9,1],[1970,11,1]]],
  ["", [[1390,10,1],[1970,11,30]]],
  ["", [[1390,11,1],[1970,12,30]]],
  ["", [[1390,12,1],[1971,1,28]]],
  ["", [[1391,1,1],[1971,2,26]]],
  ["", [[1391,2,1],[1971,3,28]]],
  ["", [[1391,3,1],[1971,4,26]]],
  ["", [[1391,4,1],[1971,5,26]]],
  ["", [[1391,5,1],[1971,6,24]]],
  ["", [[1391,6,1],[1971,7,24]]],
  ["", [[1391,7,1],[1971,8,22]]],
  ["", [[1391,8,1],[1971,9,21]]],
  ["", [[1391,9,1],[1971,10,20]]],
  ["", [[1391,10,1],[1971,11,19]]],
  ["", [[1391,11,1],[1971,12,18]]],
  ["", [[1391,12,1],[1972,1,17]]],
  ["", [[1392,1,1],[1972,2,16]]],
  ["", [[1392,2,1],[1972,3,16]]],
  ["", [[1392,3,1],[1972,4,14]]],
  ["", [[1392,4,1],[1972,5,14]]],
  ["", [[1392,5,1],[1972,6,12]]],
  ["", [[1392,6,1],[1972,7,12]]],
  ["", [[1392,7,1],[1972,8,10]]],
  ["", [[1392,8,1],[1972,9,9]]],
  ["", [[1392,9,1],[1972,10,8]]],
  ["", [[1392,10,1],[1972,11,7]]],
  ["", [[1392,11,1],[1972,12,6]]],
  ["", [[1392,12,1],[1973,1,5]]],
  ["", [[1393,1,1],[1973,2,4]]],
  ["", [[1393,2,1],[1973,3,6]]],
  ["", [[1393,3,1],[1973,4,4]]],
  ["", [[1393,4,1],[1973,5,4]]],
  ["", [[1393,5,1],[1973,6,2]]],
  ["", [[1393,6,1],[1973,7,1]]],
  ["", [[1393,7,1],[1973,7,30]]],
  ["", [[1393,8,1],[1973,8,29]]],
  ["", [[1393,9,1],[1973,9,27]]],
  ["", [[1393,10,1],[1973,10,27]]],
  ["", [[1393,11,1],[1973,11,25]]],
  ["", [[1393,12,1],[1973,12,25]]],
  ["", [[1394,1,1],[1974,1,24]]],
  ["", [[1394,2,1],[1974,2,23]]],
  ["", [[1394,3,1],[1974,3,24]]],
  ["", [[1394,4,1],[1974,4,23]]],
  ["", [[1394,5,1],[1974,5,22]]],
  ["", [[1394,6,1],[1974,6,21]]],
  ["", [[1394,7,1],[1974,7,20]]],
  ["", [[1394,8,1],[1974,8,19]]],
  ["", [[1394,9,1],[1974,9,17]]],
  ["", [[1394,10,1],[1974,10,16]]],
  ["", [[1394,11,1],[1974,11,15]]],
  ["", [[1394,12,1],[1974,12,15]]],
  ["", [[1395,1,1],[1975,1,13]]],
  ["", [[1395,2,1],[1975,2,12]]],
  ["", [[1395,3,1],[1975,3,13]]],
  ["", [[1395,4,1],[1975,4,12]]],
  ["", [[1395,5,1],[1975,5,12]]],
  ["", [[1395,6,1],[1975,6,10]]],
  ["", [[1395,7,1],[1975,7,10]]],
  ["", [[1395,8,1],[1975,8,8]]],
  ["", [[1395,9,1],[1975,9,6]]],
  ["", [[1395,10,1],[1975,10,6]]],
  ["", [[1395,11,1],[1975,11,4]]],
  ["", [[1395,12,1],[1975,12,4]]],
  ["", [[1396,1,1],[1976,1,2]]],
  ["", [[1396,2,1],[1976,2,1]]],
  ["", [[1396,3,1],[1976,3,1]]],
  ["", [[1396,4,1],[1976,3,31]]],
  ["", [[1396,5,1],[1976,4,30]]],
  ["", [[1396,6,1],[1976,5,30]]],
  ["", [[1396,7,1],[1976,6,28]]],
  ["", [[1396,8,1],[1976,7,28]]],
  ["", [[1396,9,1],[1976,8,26]]],
  ["", [[1396,10,1],[1976,9,24]]],
  ["", [[1396,11,1],[1976,10,24]]],
  ["", [[1396,12,1],[1976,11,22]]],
  ["", [[1397,1,1],[1976,12,22]]],
  ["", [[1397,2,1],[1977,1,20]]],
  ["", [[1397,3,1],[1977,2,19]]],
  ["", [[1397,4,1],[1977,3,20]]],
  ["", [[1397,5,1],[1977,4,19]]],
  ["", [[1397,6,1],[1977,5,19]]],
  ["", [[1397,7,1],[1977,6,17]]],
  ["", [[1397,8,1],[1977,7,17]]],
  ["", [[1397,9,1],[1977,8,15]]],
  ["", [[1397,10,1],[1977,9,14]]],
  ["", [[1397,11,1],[1977,10,13]]],
  ["", [[1397,12,1],[1977,11,12]]],
  ["", [[1398,1,1],[1977,12,11]]],
  ["", [[1398,2,1],[1978,1,10]]],
  ["", [[1398,3,1],[1978,2,8]]],
  ["", [[1398,4,1],[1978,3,10]]],
  ["", [[1398,5,1],[1978,4,8]]],
  ["", [[1398,6,1],[1978,5,8]]],
  ["", [[1398,7,1],[1978,6,6]]],
  ["", [[1398,8,1],[1978,7,6]]],
  ["", [[1398,9,1],[1978,8,5]]],
  ["", [[1398,10,1],[1978,9,3]]],
  ["", [[1398,11,1],[1978,10,3]]],
  ["", [[1398,12,1],[1978,11,1]]],
  ["", [[1399,1,1],[1978,12,1]]],
  ["", [[1399,2,1],[1978,12,30]]],
  ["", [[1399,3,1],[1979,1,29]]],
  ["", [[1399,4,1],[1979,2,27]]],
  ["", [[1399,5,1],[1979,3,29]]],
  ["", [[1399,6,1],[1979,4,27]]],
  ["", [[1399,7,1],[1979,5,27]]],
  ["", [[1399,8,1],[1979,6,25]]],
  ["", [[1399,9,1],[1979,7,25]]],
  ["", [[1399,10,1],[1979,8,23]]],
  ["", [[1399,11,1],[1979,9,22]]],
  ["", [[1399,12,1],[1979,10,22]]],
  ["", [[1400,1,1],[1979,11,20]]],
  ["", [[1400,2,1],[1979,12,20]]],
  ["", [[1400,3,1],[1980,1,19]]],
  ["", [[1400,4,1],[1980,2,17]]],
  ["", [[1400,5,1],[1980,3,18]]],
  ["", [[1400,6,1],[1980,4,16]]],
  ["", [[1400,7,1],[1980,5,15]]],
  ["", [[1400,8,1],[1980,6,14]]],
  ["", [[1400,9,1],[1980,7,13]]],
  ["", [[1400,10,1],[1980,8,12]]],
  ["", [[1400,11,1],[1980,9,10]]],
  ["", [[1400,12,1],[1980,10,10]]],
  ["", [[1401,1,1],[1980,11,9]]],
  ["", [[1401,2,1],[1980,12,8]]],
  ["", [[1401,3,1],[1981,1,7]]],
  ["", [[1401,4,1],[1981,2,5]]],
  ["", [[1401,5,1],[1981,3,7]]],
  ["", [[1401,6,1],[1981,4,5]]],
  ["", [[1401,7,1],[1981,5,5]]],
  ["", [[1401,8,1],[1981,6,3]]],
  ["", [[1401,9,1],[1981,7,2]]],
  ["", [[1401,10,1],[1981,8,1]]],
  ["", [[1401,11,1],[1981,8,30]]],
  ["", [[1401,12,1],[1981,9,29]]],
  ["", [[1402,1,1],[1981,10,28]]],
  ["", [[1402,2,1],[1981,11,27]]],
  ["", [[1402,3,1],[1981,12,27]]],
  ["", [[1402,4,1],[1982,1,26]]],
  ["", [[1402,5,1],[1982,2,24]]],
  ["", [[1402,6,1],[1982,3,26]]],
  ["", [[1402,7,1],[1982,4,24]]],
  ["", [[1402,8,1],[1982,5,24]]],
  ["", [[1402,9,1],[1982,6,22]]],
  ["", [[1402,10,1],[1982,7,21]]],
  ["", [[1402,11,1],[1982,8,20]]],
  ["", [[1402,12,1],[1982,9,18]]],
  ["", [[1403,1,1],[1982,10,18]]],
  ["", [[1403,2,1],[1982,11,16]]],
  ["", [[1403,3,1],[1982,12,16]]],
  ["", [[1403,4,1],[1983,1,15]]],
  ["", [[1403,5,1],[1983,2,14]]],
  ["", [[1403,6,1],[1983,3,15]]],
  ["", [[1403,7,1],[1983,4,14]]],
  ["", [[1403,8,1],[1983,5,13]]],
  ["", [[1403,9,1],[1983,6,12]]],
  ["", [[1403,10,1],[1983,7,11]]],
  ["", [[1403,11,1],[1983,8,9]]],
  ["", [[1403,12,1],[1983,9,8]]],
  ["", [[1404,1,1],[1983,10,7]]],
  ["", [[1404,2,1],[1983,11,5]]],
  ["", [[1404,3,1],[1983,12,5]]],
  ["", [[1404,4,1],[1984,1,4]]],
  ["", [[1404,5,1],[1984,2,2]]],
  ["", [[1404,6,1],[1984,3,3]]],
  ["", [[1404,7,1],[1984,4,2]]],
  ["", [[1404,8,1],[1984,5,2]]],
  ["", [[1404,9,1],[1984,5,31]]],
  ["", [[1404,10,1],[1984,6,30]]],
  ["", [[1404,11,1],[1984,7,29]]],
  ["", [[1404,12,1],[1984,8,27]]],
  ["", [[1405,1,1],[1984,9,26]]],
  ["", [[1405,2,1],[1984,10,25]]],
  ["", [[1405,3,1],[1984,11,23]]],
  ["", [[1405,4,1],[1984,12,23]]],
  ["", [[1405,5,1],[1985,1,22]]],
  ["", [[1405,6,1],[1985,2,20]]],
  ["", [[1405,7,1],[1985,3,22]]],
  ["", [[1405,8,1],[1985,4,21]]],
  ["", [[1405,9,1],[1985,5,20]]],
  ["", [[1405,10,1],[1985,6,19]]],
  ["", [[1405,11,1],[1985,7,18]]],
  ["", [[1405,12,1],[1985,8,17]]],
  ["", [[1406,1,1],[1985,9,15]]],
  ["", [[1406,2,1],[1985,10,15]]],
  ["", [[1406,3,1],[1985,11,13]]],
  ["", [[1406,4,1],[1985,12,13]]],
  ["", [[1406,5,1],[1986,1,11]]],
  ["", [[1406,6,1],[1986,2,10]]],
  ["", [[1406,7,1],[1986,3,11]]],
  ["", [[1406,8,1],[1986,4,10]]],
  ["", [[1406,9,1],[1986,5,9]]],
  ["", [[1406,10,1],[1986,6,8]]],
  ["", [[1406,11,1],[1986,7,8]]],
  ["", [[1406,12,1],[1986,8,6]]],
  ["", [[1407,1,1],[1986,9,5]]],
  ["", [[1407,2,1],[1986,10,4]]],
  ["", [[1407,3,1],[1986,11,3]]],
  ["", [[1407,4,1],[1986,12,2]]],
  ["", [[1407,5,1],[1987,1,1]]],
  ["", [[1407,6,1],[1987,1,30]]],
  ["", [[1407,7,1],[1987,3,1]]],
  ["", [[1407,8,1],[1987,3,30]]],
  ["", [[1407,9,1],[1987,4,29]]],
  ["", [[1407,10,1],[1987,5,28]]],
  ["", [[1407,11,1],[1987,6,27]]],
  ["", [[1407,12,1],[1987,7,26]]],
  ["", [[1408,1,1],[1987,8,25]]],
  ["", [[1408,2,1],[1987,9,24]]],
  ["", [[1408,3,1],[1987,10,23]]],
  ["", [[1408,4,1],[1987,11,22]]],
  ["", [[1408,5,1],[1987,12,21]]],
  ["", [[1408,6,1],[1988,1,20]]],
  ["", [[1408,7,1],[1988,2,18]]],
  ["", [[1408,8,1],[1988,3,19]]],
  ["", [[1408,9,1],[1988,4,17]]],
  ["", [[1408,10,1],[1988,5,16]]],
  ["", [[1408,11,1],[1988,6,15]]],
  ["", [[1408,12,1],[1988,7,14]]],
  ["", [[1409,1,1],[1988,8,13]]],
  ["", [[1409,2,1],[1988,9,12]]],
  ["", [[1409,3,1],[1988,10,11]]],
  ["", [[1409,4,1],[1988,11,10]]],
  ["", [[1409,5,1],[1988,12,10]]],
  ["", [[1409,6,1],[1989,1,8]]],
  ["", [[1409,7,1],[1989,2,7]]],
  ["", [[1409,8,1],[1989,3,8]]],
  ["", [[1409,9,1],[1989,4,7]]],
  ["", [[1409,10,1],[1989,5,6]]],
  ["", [[1409,11,1],[1989,6,4]]],
  ["", [[1409,12,1],[1989,7,4]]],
  ["", [[1410,1,1],[1989,8,2]]],
  ["", [[1410,2,1],[1989,9,1]]],
  ["", [[1410,3,1],[1989,9,30]]],
  ["", [[1410,4,1],[1989,10,30]]],
  ["", [[1410,5,1],[1989,11,29]]],
  ["", [[1410,6,1],[1989,12,29]]],
  ["", [[1410,7,1],[1990,1,27]]],
  ["", [[1410,8,1],[1990,2,26]]],
  ["", [[1410,9,1],[1990,3,27]]],
  ["", [[1410,10,1],[1990,4,26]]],
  ["", [[1410,11,1],[1990,5,25]]],
  ["", [[1410,12,1],[1990,6,23]]],
  ["", [[1411,1,1],[1990,7,23]]],
  ["", [[1411,2,1],[1990,8,21]]],
  ["", [[1411,3,1],[1990,9,20]]],
  ["", [[1411,4,1],[1990,10,19]]],
  ["", [[1411,5,1],[1990,11,18]]],
  ["", [[1411,6,1],[1990,12,18]]],
  ["", [[1411,7,1],[1991,1,16]]],
  ["", [[1411,8,1],[1991,2,15]]],
  ["", [[1411,9,1],[1991,3,17]]],
  ["", [[1411,10,1],[1991,4,15]]],
  ["", [[1411,11,1],[1991,5,15]]],
  ["", [[1411,12,1],[1991,6,13]]]
]
0707010000001D000081A4000003E800000064000000015EC961310000703E000000000000000000000000000000000000004700000000hijri-converter-2.1.1/tests/other/data/ummalqura_calendar_website.json[
  ["", [[1431,1,1],[2009,12,18]]],
  ["", [[1431,2,1],[2010,1,16]]],
  ["", [[1431,3,1],[2010,2,15]]],
  ["", [[1431,4,1],[2010,3,17]]],
  ["", [[1431,5,1],[2010,4,15]]],
  ["", [[1431,6,1],[2010,5,15]]],
  ["", [[1431,7,1],[2010,6,13]]],
  ["", [[1431,8,1],[2010,7,13]]],
  ["", [[1431,9,1],[2010,8,11]]],
  ["", [[1431,10,1],[2010,9,10]]],
  ["", [[1431,11,1],[2010,10,9]]],
  ["", [[1431,12,1],[2010,11,7]]],
  ["", [[1432,1,1],[2010,12,7]]],
  ["", [[1432,2,1],[2011,1,5]]],
  ["", [[1432,3,1],[2011,2,4]]],
  ["", [[1432,4,1],[2011,3,6]]],
  ["", [[1432,5,1],[2011,4,5]]],
  ["", [[1432,6,1],[2011,5,4]]],
  ["", [[1432,7,1],[2011,6,3]]],
  ["", [[1432,8,1],[2011,7,2]]],
  ["", [[1432,9,1],[2011,8,1]]],
  ["", [[1432,10,1],[2011,8,30]]],
  ["", [[1432,11,1],[2011,9,29]]],
  ["", [[1432,12,1],[2011,10,28]]],
  ["", [[1433,1,1],[2011,11,26]]],
  ["", [[1433,2,1],[2011,12,26]]],
  ["", [[1433,3,1],[2012,1,24]]],
  ["", [[1433,4,1],[2012,2,23]]],
  ["", [[1433,5,1],[2012,3,24]]],
  ["", [[1433,6,1],[2012,4,22]]],
  ["", [[1433,7,1],[2012,5,22]]],
  ["", [[1433,8,1],[2012,6,21]]],
  ["", [[1433,9,1],[2012,7,20]]],
  ["", [[1433,10,1],[2012,8,19]]],
  ["", [[1433,11,1],[2012,9,17]]],
  ["", [[1433,12,1],[2012,10,17]]],
  ["", [[1434,1,1],[2012,11,15]]],
  ["", [[1434,2,1],[2012,12,14]]],
  ["", [[1434,3,1],[2013,1,13]]],
  ["", [[1434,4,1],[2013,2,11]]],
  ["", [[1434,5,1],[2013,3,13]]],
  ["", [[1434,6,1],[2013,4,11]]],
  ["", [[1434,7,1],[2013,5,11]]],
  ["", [[1434,8,1],[2013,6,10]]],
  ["", [[1434,9,1],[2013,7,9]]],
  ["", [[1434,10,1],[2013,8,8]]],
  ["", [[1434,11,1],[2013,9,7]]],
  ["", [[1434,12,1],[2013,10,6]]],
  ["", [[1435,1,1],[2013,11,4]]],
  ["", [[1435,2,1],[2013,12,4]]],
  ["", [[1435,3,1],[2014,1,2]]],
  ["", [[1435,4,1],[2014,2,1]]],
  ["", [[1435,5,1],[2014,3,2]]],
  ["", [[1435,6,1],[2014,4,1]]],
  ["", [[1435,7,1],[2014,4,30]]],
  ["", [[1435,8,1],[2014,5,30]]],
  ["", [[1435,9,1],[2014,6,28]]],
  ["", [[1435,10,1],[2014,7,28]]],
  ["", [[1435,11,1],[2014,8,27]]],
  ["", [[1435,12,1],[2014,9,25]]],
  ["", [[1436,1,1],[2014,10,25]]],
  ["", [[1436,2,1],[2014,11,23]]],
  ["", [[1436,3,1],[2014,12,23]]],
  ["", [[1436,4,1],[2015,1,21]]],
  ["", [[1436,5,1],[2015,2,20]]],
  ["", [[1436,6,1],[2015,3,21]]],
  ["", [[1436,7,1],[2015,4,20]]],
  ["", [[1436,8,1],[2015,5,19]]],
  ["", [[1436,9,1],[2015,6,18]]],
  ["", [[1436,10,1],[2015,7,17]]],
  ["", [[1436,11,1],[2015,8,16]]],
  ["", [[1436,12,1],[2015,9,14]]],
  ["", [[1437,1,1],[2015,10,14]]],
  ["", [[1437,2,1],[2015,11,13]]],
  ["", [[1437,3,1],[2015,12,12]]],
  ["", [[1437,4,1],[2016,1,11]]],
  ["", [[1437,5,1],[2016,2,10]]],
  ["", [[1437,6,1],[2016,3,10]]],
  ["", [[1437,7,1],[2016,4,8]]],
  ["", [[1437,8,1],[2016,5,8]]],
  ["", [[1437,9,1],[2016,6,6]]],
  ["", [[1437,10,1],[2016,7,6]]],
  ["", [[1437,11,1],[2016,8,4]]],
  ["", [[1437,12,1],[2016,9,2]]],
  ["", [[1438,1,1],[2016,10,2]]],
  ["", [[1438,2,1],[2016,11,1]]],
  ["", [[1438,3,1],[2016,11,30]]],
  ["", [[1438,4,1],[2016,12,30]]],
  ["", [[1438,5,1],[2017,1,29]]],
  ["", [[1438,6,1],[2017,2,28]]],
  ["", [[1438,7,1],[2017,3,29]]],
  ["", [[1438,8,1],[2017,4,27]]],
  ["", [[1438,9,1],[2017,5,27]]],
  ["", [[1438,10,1],[2017,6,25]]],
  ["", [[1438,11,1],[2017,7,24]]],
  ["", [[1438,12,1],[2017,8,23]]],
  ["", [[1439,1,1],[2017,9,21]]],
  ["", [[1439,2,1],[2017,10,21]]],
  ["", [[1439,3,1],[2017,11,19]]],
  ["", [[1439,4,1],[2017,12,19]]],
  ["", [[1439,5,1],[2018,1,18]]],
  ["", [[1439,6,1],[2018,2,17]]],
  ["", [[1439,7,1],[2018,3,18]]],
  ["", [[1439,8,1],[2018,4,17]]],
  ["", [[1439,9,1],[2018,5,16]]],
  ["", [[1439,10,1],[2018,6,15]]],
  ["", [[1439,11,1],[2018,7,14]]],
  ["", [[1439,12,1],[2018,8,12]]],
  ["", [[1440,1,1],[2018,9,11]]],
  ["", [[1440,2,1],[2018,10,10]]],
  ["", [[1440,3,1],[2018,11,9]]],
  ["", [[1440,4,1],[2018,12,8]]],
  ["", [[1440,5,1],[2019,1,7]]],
  ["", [[1440,6,1],[2019,2,6]]],
  ["", [[1440,7,1],[2019,3,8]]],
  ["", [[1440,8,1],[2019,4,6]]],
  ["", [[1440,9,1],[2019,5,6]]],
  ["", [[1440,10,1],[2019,6,4]]],
  ["", [[1440,11,1],[2019,7,4]]],
  ["", [[1440,12,1],[2019,8,2]]],
  ["", [[1441,1,1],[2019,8,31]]],
  ["", [[1441,2,1],[2019,9,30]]],
  ["", [[1441,3,1],[2019,10,29]]],
  ["", [[1441,4,1],[2019,11,28]]],
  ["", [[1441,5,1],[2019,12,27]]],
  ["", [[1441,6,1],[2020,1,26]]],
  ["", [[1441,7,1],[2020,2,25]]],
  ["", [[1441,8,1],[2020,3,25]]],
  ["", [[1441,9,1],[2020,4,24]]],
  ["", [[1441,10,1],[2020,5,24]]],
  ["", [[1441,11,1],[2020,6,22]]],
  ["", [[1441,12,1],[2020,7,22]]],
  ["", [[1442,1,1],[2020,8,20]]],
  ["", [[1442,2,1],[2020,9,18]]],
  ["", [[1442,3,1],[2020,10,18]]],
  ["", [[1442,4,1],[2020,11,16]]],
  ["", [[1442,5,1],[2020,12,16]]],
  ["", [[1442,6,1],[2021,1,14]]],
  ["", [[1442,7,1],[2021,2,13]]],
  ["", [[1442,8,1],[2021,3,14]]],
  ["", [[1442,9,1],[2021,4,13]]],
  ["", [[1442,10,1],[2021,5,13]]],
  ["", [[1442,11,1],[2021,6,11]]],
  ["", [[1442,12,1],[2021,7,11]]],
  ["", [[1443,1,1],[2021,8,9]]],
  ["", [[1443,2,1],[2021,9,8]]],
  ["", [[1443,3,1],[2021,10,7]]],
  ["", [[1443,4,1],[2021,11,6]]],
  ["", [[1443,5,1],[2021,12,5]]],
  ["", [[1443,6,1],[2022,1,4]]],
  ["", [[1443,7,1],[2022,2,2]]],
  ["", [[1443,8,1],[2022,3,4]]],
  ["", [[1443,9,1],[2022,4,2]]],
  ["", [[1443,10,1],[2022,5,2]]],
  ["", [[1443,11,1],[2022,5,31]]],
  ["", [[1443,12,1],[2022,6,30]]],
  ["", [[1444,1,1],[2022,7,30]]],
  ["", [[1444,2,1],[2022,8,28]]],
  ["", [[1444,3,1],[2022,9,27]]],
  ["", [[1444,4,1],[2022,10,26]]],
  ["", [[1444,5,1],[2022,11,25]]],
  ["", [[1444,6,1],[2022,12,25]]],
  ["", [[1444,7,1],[2023,1,23]]],
  ["", [[1444,8,1],[2023,2,21]]],
  ["", [[1444,9,1],[2023,3,23]]],
  ["", [[1444,10,1],[2023,4,21]]],
  ["", [[1444,11,1],[2023,5,21]]],
  ["", [[1444,12,1],[2023,6,19]]],
  ["", [[1445,1,1],[2023,7,19]]],
  ["", [[1445,2,1],[2023,8,17]]],
  ["", [[1445,3,1],[2023,9,16]]],
  ["", [[1445,4,1],[2023,10,16]]],
  ["", [[1445,5,1],[2023,11,15]]],
  ["", [[1445,6,1],[2023,12,14]]],
  ["", [[1445,7,1],[2024,1,13]]],
  ["", [[1445,8,1],[2024,2,11]]],
  ["", [[1445,9,1],[2024,3,11]]],
  ["", [[1445,10,1],[2024,4,10]]],
  ["", [[1445,11,1],[2024,5,9]]],
  ["", [[1445,12,1],[2024,6,7]]],
  ["", [[1446,1,1],[2024,7,7]]],
  ["", [[1446,2,1],[2024,8,5]]],
  ["", [[1446,3,1],[2024,9,4]]],
  ["", [[1446,4,1],[2024,10,4]]],
  ["", [[1446,5,1],[2024,11,3]]],
  ["", [[1446,6,1],[2024,12,2]]],
  ["", [[1446,7,1],[2025,1,1]]],
  ["", [[1446,8,1],[2025,1,31]]],
  ["", [[1446,9,1],[2025,3,1]]],
  ["", [[1446,10,1],[2025,3,30]]],
  ["", [[1446,11,1],[2025,4,29]]],
  ["", [[1446,12,1],[2025,5,28]]],
  ["", [[1447,1,1],[2025,6,26]]],
  ["", [[1447,2,1],[2025,7,26]]],
  ["", [[1447,3,1],[2025,8,24]]],
  ["", [[1447,4,1],[2025,9,23]]],
  ["", [[1447,5,1],[2025,10,23]]],
  ["", [[1447,6,1],[2025,11,22]]],
  ["", [[1447,7,1],[2025,12,21]]],
  ["", [[1447,8,1],[2026,1,20]]],
  ["", [[1447,9,1],[2026,2,18]]],
  ["", [[1447,10,1],[2026,3,20]]],
  ["", [[1447,11,1],[2026,4,18]]],
  ["", [[1447,12,1],[2026,5,18]]],
  ["", [[1448,1,1],[2026,6,16]]],
  ["", [[1448,2,1],[2026,7,15]]],
  ["", [[1448,3,1],[2026,8,14]]],
  ["", [[1448,4,1],[2026,9,12]]],
  ["", [[1448,5,1],[2026,10,12]]],
  ["", [[1448,6,1],[2026,11,11]]],
  ["", [[1448,7,1],[2026,12,10]]],
  ["", [[1448,8,1],[2027,1,9]]],
  ["", [[1448,9,1],[2027,2,8]]],
  ["", [[1448,10,1],[2027,3,9]]],
  ["", [[1448,11,1],[2027,4,8]]],
  ["", [[1448,12,1],[2027,5,7]]],
  ["", [[1449,1,1],[2027,6,6]]],
  ["", [[1449,2,1],[2027,7,5]]],
  ["", [[1449,3,1],[2027,8,3]]],
  ["", [[1449,4,1],[2027,9,2]]],
  ["", [[1449,5,1],[2027,10,1]]],
  ["", [[1449,6,1],[2027,10,31]]],
  ["", [[1449,7,1],[2027,11,29]]],
  ["", [[1449,8,1],[2027,12,29]]],
  ["", [[1449,9,1],[2028,1,28]]],
  ["", [[1449,10,1],[2028,2,26]]],
  ["", [[1449,11,1],[2028,3,27]]],
  ["", [[1449,12,1],[2028,4,26]]],
  ["", [[1450,1,1],[2028,5,25]]],
  ["", [[1450,2,1],[2028,6,24]]],
  ["", [[1450,3,1],[2028,7,23]]],
  ["", [[1450,4,1],[2028,8,22]]],
  ["", [[1450,5,1],[2028,9,20]]],
  ["", [[1450,6,1],[2028,10,19]]],
  ["", [[1450,7,1],[2028,11,18]]],
  ["", [[1450,8,1],[2028,12,17]]],
  ["", [[1450,9,1],[2029,1,16]]],
  ["", [[1450,10,1],[2029,2,14]]],
  ["", [[1450,11,1],[2029,3,16]]],
  ["", [[1450,12,1],[2029,4,15]]],
  ["", [[1451,1,1],[2029,5,14]]],
  ["", [[1451,2,1],[2029,6,13]]],
  ["", [[1451,3,1],[2029,7,13]]],
  ["", [[1451,4,1],[2029,8,11]]],
  ["", [[1451,5,1],[2029,9,10]]],
  ["", [[1451,6,1],[2029,10,9]]],
  ["", [[1451,7,1],[2029,11,7]]],
  ["", [[1451,8,1],[2029,12,7]]],
  ["", [[1451,9,1],[2030,1,5]]],
  ["", [[1451,10,1],[2030,2,4]]],
  ["", [[1451,11,1],[2030,3,5]]],
  ["", [[1451,12,1],[2030,4,4]]],
  ["", [[1452,1,1],[2030,5,3]]],
  ["", [[1452,2,1],[2030,6,2]]],
  ["", [[1452,3,1],[2030,7,2]]],
  ["", [[1452,4,1],[2030,8,1]]],
  ["", [[1452,5,1],[2030,8,30]]],
  ["", [[1452,6,1],[2030,9,29]]],
  ["", [[1452,7,1],[2030,10,28]]],
  ["", [[1452,8,1],[2030,11,26]]],
  ["", [[1452,9,1],[2030,12,26]]],
  ["", [[1452,10,1],[2031,1,24]]],
  ["", [[1452,11,1],[2031,2,23]]],
  ["", [[1452,12,1],[2031,3,24]]],
  ["", [[1453,1,1],[2031,4,23]]],
  ["", [[1453,2,1],[2031,5,22]]],
  ["", [[1453,3,1],[2031,6,21]]],
  ["", [[1453,4,1],[2031,7,21]]],
  ["", [[1453,5,1],[2031,8,20]]],
  ["", [[1453,6,1],[2031,9,18]]],
  ["", [[1453,7,1],[2031,10,17]]],
  ["", [[1453,8,1],[2031,11,16]]],
  ["", [[1453,9,1],[2031,12,15]]],
  ["", [[1453,10,1],[2032,1,14]]],
  ["", [[1453,11,1],[2032,2,12]]],
  ["", [[1453,12,1],[2032,3,13]]],
  ["", [[1454,1,1],[2032,4,11]]],
  ["", [[1454,2,1],[2032,5,10]]],
  ["", [[1454,3,1],[2032,6,9]]],
  ["", [[1454,4,1],[2032,7,9]]],
  ["", [[1454,5,1],[2032,8,8]]],
  ["", [[1454,6,1],[2032,9,6]]],
  ["", [[1454,7,1],[2032,10,6]]],
  ["", [[1454,8,1],[2032,11,4]]],
  ["", [[1454,9,1],[2032,12,4]]],
  ["", [[1454,10,1],[2033,1,2]]],
  ["", [[1454,11,1],[2033,2,1]]],
  ["", [[1454,12,1],[2033,3,2]]],
  ["", [[1455,1,1],[2033,4,1]]],
  ["", [[1455,2,1],[2033,4,30]]],
  ["", [[1455,3,1],[2033,5,29]]],
  ["", [[1455,4,1],[2033,6,28]]],
  ["", [[1455,5,1],[2033,7,28]]],
  ["", [[1455,6,1],[2033,8,26]]],
  ["", [[1455,7,1],[2033,9,25]]],
  ["", [[1455,8,1],[2033,10,24]]],
  ["", [[1455,9,1],[2033,11,23]]],
  ["", [[1455,10,1],[2033,12,23]]],
  ["", [[1455,11,1],[2034,1,21]]],
  ["", [[1455,12,1],[2034,2,20]]],
  ["", [[1456,1,1],[2034,3,21]]],
  ["", [[1456,2,1],[2034,4,20]]],
  ["", [[1456,3,1],[2034,5,19]]],
  ["", [[1456,4,1],[2034,6,17]]],
  ["", [[1456,5,1],[2034,7,17]]],
  ["", [[1456,6,1],[2034,8,15]]],
  ["", [[1456,7,1],[2034,9,14]]],
  ["", [[1456,8,1],[2034,10,13]]],
  ["", [[1456,9,1],[2034,11,12]]],
  ["", [[1456,10,1],[2034,12,12]]],
  ["", [[1456,11,1],[2035,1,11]]],
  ["", [[1456,12,1],[2035,2,9]]],
  ["", [[1457,1,1],[2035,3,11]]],
  ["", [[1457,2,1],[2035,4,9]]],
  ["", [[1457,3,1],[2035,5,9]]],
  ["", [[1457,4,1],[2035,6,7]]],
  ["", [[1457,5,1],[2035,7,6]]],
  ["", [[1457,6,1],[2035,8,5]]],
  ["", [[1457,7,1],[2035,9,3]]],
  ["", [[1457,8,1],[2035,10,2]]],
  ["", [[1457,9,1],[2035,11,1]]],
  ["", [[1457,10,1],[2035,12,1]]],
  ["", [[1457,11,1],[2035,12,30]]],
  ["", [[1457,12,1],[2036,1,29]]],
  ["", [[1458,1,1],[2036,2,28]]],
  ["", [[1458,2,1],[2036,3,29]]],
  ["", [[1458,3,1],[2036,4,27]]],
  ["", [[1458,4,1],[2036,5,27]]],
  ["", [[1458,5,1],[2036,6,25]]],
  ["", [[1458,6,1],[2036,7,24]]],
  ["", [[1458,7,1],[2036,8,23]]],
  ["", [[1458,8,1],[2036,9,21]]],
  ["", [[1458,9,1],[2036,10,20]]],
  ["", [[1458,10,1],[2036,11,19]]],
  ["", [[1458,11,1],[2036,12,19]]],
  ["", [[1458,12,1],[2037,1,17]]],
  ["", [[1459,1,1],[2037,2,16]]],
  ["", [[1459,2,1],[2037,3,18]]],
  ["", [[1459,3,1],[2037,4,17]]],
  ["", [[1459,4,1],[2037,5,16]]],
  ["", [[1459,5,1],[2037,6,15]]],
  ["", [[1459,6,1],[2037,7,14]]],
  ["", [[1459,7,1],[2037,8,12]]],
  ["", [[1459,8,1],[2037,9,11]]],
  ["", [[1459,9,1],[2037,10,10]]],
  ["", [[1459,10,1],[2037,11,8]]],
  ["", [[1459,11,1],[2037,12,8]]],
  ["", [[1459,12,1],[2038,1,7]]],
  ["", [[1460,1,1],[2038,2,5]]],
  ["", [[1460,2,1],[2038,3,7]]],
  ["", [[1460,3,1],[2038,4,6]]],
  ["", [[1460,4,1],[2038,5,5]]],
  ["", [[1460,5,1],[2038,6,4]]],
  ["", [[1460,6,1],[2038,7,3]]],
  ["", [[1460,7,1],[2038,8,2]]],
  ["", [[1460,8,1],[2038,8,31]]],
  ["", [[1460,9,1],[2038,9,30]]],
  ["", [[1460,10,1],[2038,10,29]]],
  ["", [[1460,11,1],[2038,11,27]]],
  ["", [[1460,12,1],[2038,12,27]]],
  ["", [[1461,1,1],[2039,1,26]]],
  ["", [[1461,2,1],[2039,2,24]]],
  ["", [[1461,3,1],[2039,3,26]]],
  ["", [[1461,4,1],[2039,4,24]]],
  ["", [[1461,5,1],[2039,5,24]]],
  ["", [[1461,6,1],[2039,6,23]]],
  ["", [[1461,7,1],[2039,7,22]]],
  ["", [[1461,8,1],[2039,8,21]]],
  ["", [[1461,9,1],[2039,9,19]]],
  ["", [[1461,10,1],[2039,10,19]]],
  ["", [[1461,11,1],[2039,11,17]]],
  ["", [[1461,12,1],[2039,12,17]]],
  ["", [[1462,1,1],[2040,1,15]]],
  ["", [[1462,2,1],[2040,2,14]]],
  ["", [[1462,3,1],[2040,3,14]]],
  ["", [[1462,4,1],[2040,4,13]]],
  ["", [[1462,5,1],[2040,5,12]]],
  ["", [[1462,6,1],[2040,6,11]]],
  ["", [[1462,7,1],[2040,7,10]]],
  ["", [[1462,8,1],[2040,8,9]]],
  ["", [[1462,9,1],[2040,9,7]]],
  ["", [[1462,10,1],[2040,10,7]]],
  ["", [[1462,11,1],[2040,11,6]]],
  ["", [[1462,12,1],[2040,12,5]]],
  ["", [[1463,1,1],[2041,1,4]]],
  ["", [[1463,2,1],[2041,2,2]]],
  ["", [[1463,3,1],[2041,3,4]]],
  ["", [[1463,4,1],[2041,4,2]]],
  ["", [[1463,5,1],[2041,5,1]]],
  ["", [[1463,6,1],[2041,5,31]]],
  ["", [[1463,7,1],[2041,6,29]]],
  ["", [[1463,8,1],[2041,7,29]]],
  ["", [[1463,9,1],[2041,8,28]]],
  ["", [[1463,10,1],[2041,9,26]]],
  ["", [[1463,11,1],[2041,10,26]]],
  ["", [[1463,12,1],[2041,11,25]]],
  ["", [[1464,1,1],[2041,12,24]]],
  ["", [[1464,2,1],[2042,1,23]]],
  ["", [[1464,3,1],[2042,2,21]]],
  ["", [[1464,4,1],[2042,3,23]]],
  ["", [[1464,5,1],[2042,4,21]]],
  ["", [[1464,6,1],[2042,5,20]]],
  ["", [[1464,7,1],[2042,6,19]]],
  ["", [[1464,8,1],[2042,7,18]]],
  ["", [[1464,9,1],[2042,8,17]]],
  ["", [[1464,10,1],[2042,9,15]]],
  ["", [[1464,11,1],[2042,10,15]]],
  ["", [[1464,12,1],[2042,11,14]]],
  ["", [[1465,1,1],[2042,12,14]]],
  ["", [[1465,2,1],[2043,1,12]]],
  ["", [[1465,3,1],[2043,2,11]]],
  ["", [[1465,4,1],[2043,3,12]]],
  ["", [[1465,5,1],[2043,4,11]]],
  ["", [[1465,6,1],[2043,5,10]]],
  ["", [[1465,7,1],[2043,6,8]]],
  ["", [[1465,8,1],[2043,7,8]]],
  ["", [[1465,9,1],[2043,8,6]]],
  ["", [[1465,10,1],[2043,9,4]]],
  ["", [[1465,11,1],[2043,10,4]]],
  ["", [[1465,12,1],[2043,11,3]]],
  ["", [[1466,1,1],[2043,12,3]]],
  ["", [[1466,2,1],[2044,1,2]]],
  ["", [[1466,3,1],[2044,1,31]]],
  ["", [[1466,4,1],[2044,3,1]]],
  ["", [[1466,5,1],[2044,3,30]]],
  ["", [[1466,6,1],[2044,4,29]]],
  ["", [[1466,7,1],[2044,5,28]]],
  ["", [[1466,8,1],[2044,6,26]]],
  ["", [[1466,9,1],[2044,7,26]]],
  ["", [[1466,10,1],[2044,8,24]]],
  ["", [[1466,11,1],[2044,9,23]]],
  ["", [[1466,12,1],[2044,10,22]]],
  ["", [[1467,1,1],[2044,11,21]]],
  ["", [[1467,2,1],[2044,12,21]]],
  ["", [[1467,3,1],[2045,1,19]]],
  ["", [[1467,4,1],[2045,2,18]]],
  ["", [[1467,5,1],[2045,3,20]]],
  ["", [[1467,6,1],[2045,4,18]]],
  ["", [[1467,7,1],[2045,5,18]]],
  ["", [[1467,8,1],[2045,6,16]]],
  ["", [[1467,9,1],[2045,7,15]]],
  ["", [[1467,10,1],[2045,8,14]]],
  ["", [[1467,11,1],[2045,9,12]]],
  ["", [[1467,12,1],[2045,10,12]]],
  ["", [[1468,1,1],[2045,11,10]]],
  ["", [[1468,2,1],[2045,12,10]]],
  ["", [[1468,3,1],[2046,1,8]]],
  ["", [[1468,4,1],[2046,2,7]]],
  ["", [[1468,5,1],[2046,3,9]]],
  ["", [[1468,6,1],[2046,4,7]]],
  ["", [[1468,7,1],[2046,5,7]]],
  ["", [[1468,8,1],[2046,6,5]]],
  ["", [[1468,9,1],[2046,7,5]]],
  ["", [[1468,10,1],[2046,8,3]]],
  ["", [[1468,11,1],[2046,9,2]]],
  ["", [[1468,12,1],[2046,10,1]]],
  ["", [[1469,1,1],[2046,10,31]]],
  ["", [[1469,2,1],[2046,11,29]]],
  ["", [[1469,3,1],[2046,12,28]]],
  ["", [[1469,4,1],[2047,1,27]]],
  ["", [[1469,5,1],[2047,2,26]]],
  ["", [[1469,6,1],[2047,3,27]]],
  ["", [[1469,7,1],[2047,4,26]]],
  ["", [[1469,8,1],[2047,5,26]]],
  ["", [[1469,9,1],[2047,6,24]]],
  ["", [[1469,10,1],[2047,7,24]]],
  ["", [[1469,11,1],[2047,8,23]]],
  ["", [[1469,12,1],[2047,9,21]]],
  ["", [[1470,1,1],[2047,10,20]]],
  ["", [[1470,2,1],[2047,11,19]]],
  ["", [[1470,3,1],[2047,12,18]]],
  ["", [[1470,4,1],[2048,1,16]]],
  ["", [[1470,5,1],[2048,2,15]]],
  ["", [[1470,6,1],[2048,3,16]]],
  ["", [[1470,7,1],[2048,4,14]]],
  ["", [[1470,8,1],[2048,5,14]]],
  ["", [[1470,9,1],[2048,6,12]]],
  ["", [[1470,10,1],[2048,7,12]]],
  ["", [[1470,11,1],[2048,8,11]]],
  ["", [[1470,12,1],[2048,9,10]]],
  ["", [[1471,1,1],[2048,10,9]]],
  ["", [[1471,2,1],[2048,11,7]]],
  ["", [[1471,3,1],[2048,12,7]]],
  ["", [[1471,4,1],[2049,1,5]]],
  ["", [[1471,5,1],[2049,2,3]]],
  ["", [[1471,6,1],[2049,3,5]]],
  ["", [[1471,7,1],[2049,4,3]]],
  ["", [[1471,8,1],[2049,5,3]]],
  ["", [[1471,9,1],[2049,6,2]]],
  ["", [[1471,10,1],[2049,7,1]]],
  ["", [[1471,11,1],[2049,7,31]]],
  ["", [[1471,12,1],[2049,8,30]]],
  ["", [[1472,1,1],[2049,9,28]]],
  ["", [[1472,2,1],[2049,10,28]]],
  ["", [[1472,3,1],[2049,11,26]]],
  ["", [[1472,4,1],[2049,12,26]]],
  ["", [[1472,5,1],[2050,1,24]]],
  ["", [[1472,6,1],[2050,2,23]]],
  ["", [[1472,7,1],[2050,3,24]]],
  ["", [[1472,8,1],[2050,4,22]]],
  ["", [[1472,9,1],[2050,5,22]]],
  ["", [[1472,10,1],[2050,6,20]]],
  ["", [[1472,11,1],[2050,7,20]]],
  ["", [[1472,12,1],[2050,8,19]]],
  ["", [[1473,1,1],[2050,9,17]]],
  ["", [[1473,2,1],[2050,10,17]]],
  ["", [[1473,3,1],[2050,11,15]]],
  ["", [[1473,4,1],[2050,12,15]]],
  ["", [[1473,5,1],[2051,1,14]]],
  ["", [[1473,6,1],[2051,2,12]]],
  ["", [[1473,7,1],[2051,3,14]]],
  ["", [[1473,8,1],[2051,4,12]]],
  ["", [[1473,9,1],[2051,5,11]]],
  ["", [[1473,10,1],[2051,6,10]]],
  ["", [[1473,11,1],[2051,7,9]]],
  ["", [[1473,12,1],[2051,8,8]]],
  ["", [[1474,1,1],[2051,9,6]]],
  ["", [[1474,2,1],[2051,10,6]]],
  ["", [[1474,3,1],[2051,11,5]]],
  ["", [[1474,4,1],[2051,12,4]]],
  ["", [[1474,5,1],[2052,1,3]]],
  ["", [[1474,6,1],[2052,2,2]]],
  ["", [[1474,7,1],[2052,3,2]]],
  ["", [[1474,8,1],[2052,4,1]]],
  ["", [[1474,9,1],[2052,4,30]]],
  ["", [[1474,10,1],[2052,5,29]]],
  ["", [[1474,11,1],[2052,6,28]]],
  ["", [[1474,12,1],[2052,7,27]]],
  ["", [[1475,1,1],[2052,8,26]]],
  ["", [[1475,2,1],[2052,9,24]]],
  ["", [[1475,3,1],[2052,10,24]]],
  ["", [[1475,4,1],[2052,11,22]]],
  ["", [[1475,5,1],[2052,12,22]]],
  ["", [[1475,6,1],[2053,1,21]]],
  ["", [[1475,7,1],[2053,2,20]]],
  ["", [[1475,8,1],[2053,3,21]]],
  ["", [[1475,9,1],[2053,4,20]]],
  ["", [[1475,10,1],[2053,5,19]]],
  ["", [[1475,11,1],[2053,6,17]]],
  ["", [[1475,12,1],[2053,7,17]]],
  ["", [[1476,1,1],[2053,8,15]]],
  ["", [[1476,2,1],[2053,9,13]]],
  ["", [[1476,3,1],[2053,10,13]]],
  ["", [[1476,4,1],[2053,11,11]]],
  ["", [[1476,5,1],[2053,12,11]]],
  ["", [[1476,6,1],[2054,1,10]]],
  ["", [[1476,7,1],[2054,2,9]]],
  ["", [[1476,8,1],[2054,3,10]]],
  ["", [[1476,9,1],[2054,4,9]]],
  ["", [[1476,10,1],[2054,5,9]]],
  ["", [[1476,11,1],[2054,6,7]]],
  ["", [[1476,12,1],[2054,7,6]]],
  ["", [[1477,1,1],[2054,8,5]]],
  ["", [[1477,2,1],[2054,9,3]]],
  ["", [[1477,3,1],[2054,10,2]]],
  ["", [[1477,4,1],[2054,11,1]]],
  ["", [[1477,5,1],[2054,11,30]]],
  ["", [[1477,6,1],[2054,12,30]]],
  ["", [[1477,7,1],[2055,1,29]]],
  ["", [[1477,8,1],[2055,2,27]]],
  ["", [[1477,9,1],[2055,3,29]]],
  ["", [[1477,10,1],[2055,4,28]]],
  ["", [[1477,11,1],[2055,5,28]]],
  ["", [[1477,12,1],[2055,6,26]]],
  ["", [[1478,1,1],[2055,7,25]]],
  ["", [[1478,2,1],[2055,8,24]]],
  ["", [[1478,3,1],[2055,9,22]]],
  ["", [[1478,4,1],[2055,10,21]]],
  ["", [[1478,5,1],[2055,11,20]]],
  ["", [[1478,6,1],[2055,12,19]]],
  ["", [[1478,7,1],[2056,1,18]]],
  ["", [[1478,8,1],[2056,2,17]]],
  ["", [[1478,9,1],[2056,3,17]]],
  ["", [[1478,10,1],[2056,4,16]]],
  ["", [[1478,11,1],[2056,5,16]]],
  ["", [[1478,12,1],[2056,6,14]]],
  ["", [[1479,1,1],[2056,7,14]]],
  ["", [[1479,2,1],[2056,8,12]]],
  ["", [[1479,3,1],[2056,9,11]]],
  ["", [[1479,4,1],[2056,10,10]]],
  ["", [[1479,5,1],[2056,11,8]]],
  ["", [[1479,6,1],[2056,12,8]]],
  ["", [[1479,7,1],[2057,1,6]]],
  ["", [[1479,8,1],[2057,2,5]]],
  ["", [[1479,9,1],[2057,3,6]]],
  ["", [[1479,10,1],[2057,4,5]]],
  ["", [[1479,11,1],[2057,5,5]]],
  ["", [[1479,12,1],[2057,6,3]]],
  ["", [[1480,1,1],[2057,7,3]]],
  ["", [[1480,2,1],[2057,8,1]]],
  ["", [[1480,3,1],[2057,8,31]]],
  ["", [[1480,4,1],[2057,9,30]]],
  ["", [[1480,5,1],[2057,10,29]]],
  ["", [[1480,6,1],[2057,11,27]]],
  ["", [[1480,7,1],[2057,12,27]]],
  ["", [[1480,8,1],[2058,1,25]]],
  ["", [[1480,9,1],[2058,2,24]]],
  ["", [[1480,10,1],[2058,3,25]]],
  ["", [[1480,11,1],[2058,4,24]]],
  ["", [[1480,12,1],[2058,5,23]]],
  ["", [[1481,1,1],[2058,6,22]]],
  ["", [[1481,2,1],[2058,7,21]]],
  ["", [[1481,3,1],[2058,8,20]]],
  ["", [[1481,4,1],[2058,9,19]]],
  ["", [[1481,5,1],[2058,10,18]]],
  ["", [[1481,6,1],[2058,11,17]]],
  ["", [[1481,7,1],[2058,12,17]]],
  ["", [[1481,8,1],[2059,1,15]]],
  ["", [[1481,9,1],[2059,2,14]]],
  ["", [[1481,10,1],[2059,3,15]]],
  ["", [[1481,11,1],[2059,4,13]]],
  ["", [[1481,12,1],[2059,5,13]]],
  ["", [[1482,1,1],[2059,6,11]]],
  ["", [[1482,2,1],[2059,7,11]]],
  ["", [[1482,3,1],[2059,8,9]]],
  ["", [[1482,4,1],[2059,9,8]]],
  ["", [[1482,5,1],[2059,10,8]]],
  ["", [[1482,6,1],[2059,11,6]]],
  ["", [[1482,7,1],[2059,12,6]]],
  ["", [[1482,8,1],[2060,1,5]]],
  ["", [[1482,9,1],[2060,2,3]]],
  ["", [[1482,10,1],[2060,3,4]]],
  ["", [[1482,11,1],[2060,4,2]]],
  ["", [[1482,12,1],[2060,5,1]]],
  ["", [[1483,1,1],[2060,5,31]]],
  ["", [[1483,2,1],[2060,6,29]]],
  ["", [[1483,3,1],[2060,7,28]]],
  ["", [[1483,4,1],[2060,8,27]]],
  ["", [[1483,5,1],[2060,9,26]]],
  ["", [[1483,6,1],[2060,10,25]]],
  ["", [[1483,7,1],[2060,11,24]]],
  ["", [[1483,8,1],[2060,12,24]]],
  ["", [[1483,9,1],[2061,1,23]]],
  ["", [[1483,10,1],[2061,2,21]]],
  ["", [[1483,11,1],[2061,3,23]]],
  ["", [[1483,12,1],[2061,4,21]]],
  ["", [[1484,1,1],[2061,5,20]]],
  ["", [[1484,2,1],[2061,6,19]]],
  ["", [[1484,3,1],[2061,7,18]]],
  ["", [[1484,4,1],[2061,8,16]]],
  ["", [[1484,5,1],[2061,9,15]]],
  ["", [[1484,6,1],[2061,10,15]]],
  ["", [[1484,7,1],[2061,11,13]]],
  ["", [[1484,8,1],[2061,12,13]]],
  ["", [[1484,9,1],[2062,1,12]]],
  ["", [[1484,10,1],[2062,2,10]]],
  ["", [[1484,11,1],[2062,3,12]]],
  ["", [[1484,12,1],[2062,4,11]]],
  ["", [[1485,1,1],[2062,5,10]]],
  ["", [[1485,2,1],[2062,6,8]]],
  ["", [[1485,3,1],[2062,7,8]]],
  ["", [[1485,4,1],[2062,8,6]]],
  ["", [[1485,5,1],[2062,9,4]]],
  ["", [[1485,6,1],[2062,10,4]]],
  ["", [[1485,7,1],[2062,11,3]]],
  ["", [[1485,8,1],[2062,12,2]]],
  ["", [[1485,9,1],[2063,1,1]]],
  ["", [[1485,10,1],[2063,1,30]]],
  ["", [[1485,11,1],[2063,3,1]]],
  ["", [[1485,12,1],[2063,3,31]]],
  ["", [[1486,1,1],[2063,4,30]]],
  ["", [[1486,2,1],[2063,5,29]]],
  ["", [[1486,3,1],[2063,6,27]]],
  ["", [[1486,4,1],[2063,7,27]]],
  ["", [[1486,5,1],[2063,8,25]]],
  ["", [[1486,6,1],[2063,9,24]]],
  ["", [[1486,7,1],[2063,10,23]]],
  ["", [[1486,8,1],[2063,11,22]]],
  ["", [[1486,9,1],[2063,12,21]]],
  ["", [[1486,10,1],[2064,1,20]]],
  ["", [[1486,11,1],[2064,2,18]]],
  ["", [[1486,12,1],[2064,3,19]]],
  ["", [[1487,1,1],[2064,4,18]]],
  ["", [[1487,2,1],[2064,5,17]]],
  ["", [[1487,3,1],[2064,6,16]]],
  ["", [[1487,4,1],[2064,7,15]]],
  ["", [[1487,5,1],[2064,8,14]]],
  ["", [[1487,6,1],[2064,9,12]]],
  ["", [[1487,7,1],[2064,10,12]]],
  ["", [[1487,8,1],[2064,11,10]]],
  ["", [[1487,9,1],[2064,12,9]]],
  ["", [[1487,10,1],[2065,1,8]]],
  ["", [[1487,11,1],[2065,2,6]]],
  ["", [[1487,12,1],[2065,3,8]]],
  ["", [[1488,1,1],[2065,4,7]]],
  ["", [[1488,2,1],[2065,5,6]]],
  ["", [[1488,3,1],[2065,6,5]]],
  ["", [[1488,4,1],[2065,7,5]]],
  ["", [[1488,5,1],[2065,8,3]]],
  ["", [[1488,6,1],[2065,9,2]]],
  ["", [[1488,7,1],[2065,10,1]]],
  ["", [[1488,8,1],[2065,10,31]]],
  ["", [[1488,9,1],[2065,11,29]]],
  ["", [[1488,10,1],[2065,12,28]]],
  ["", [[1488,11,1],[2066,1,27]]],
  ["", [[1488,12,1],[2066,2,25]]],
  ["", [[1489,1,1],[2066,3,27]]],
  ["", [[1489,2,1],[2066,4,25]]],
  ["", [[1489,3,1],[2066,5,25]]],
  ["", [[1489,4,1],[2066,6,24]]],
  ["", [[1489,5,1],[2066,7,24]]],
  ["", [[1489,6,1],[2066,8,22]]],
  ["", [[1489,7,1],[2066,9,21]]],
  ["", [[1489,8,1],[2066,10,20]]],
  ["", [[1489,9,1],[2066,11,19]]],
  ["", [[1489,10,1],[2066,12,18]]],
  ["", [[1489,11,1],[2067,1,16]]],
  ["", [[1489,12,1],[2067,2,15]]],
  ["", [[1490,1,1],[2067,3,16]]],
  ["", [[1490,2,1],[2067,4,15]]],
  ["", [[1490,3,1],[2067,5,14]]],
  ["", [[1490,4,1],[2067,6,13]]],
  ["", [[1490,5,1],[2067,7,13]]],
  ["", [[1490,6,1],[2067,8,11]]],
  ["", [[1490,7,1],[2067,9,10]]],
  ["", [[1490,8,1],[2067,10,10]]],
  ["", [[1490,9,1],[2067,11,8]]],
  ["", [[1490,10,1],[2067,12,8]]],
  ["", [[1490,11,1],[2068,1,6]]],
  ["", [[1490,12,1],[2068,2,4]]],
  ["", [[1491,1,1],[2068,3,5]]],
  ["", [[1491,2,1],[2068,4,3]]],
  ["", [[1491,3,1],[2068,5,3]]],
  ["", [[1491,4,1],[2068,6,1]]],
  ["", [[1491,5,1],[2068,7,1]]],
  ["", [[1491,6,1],[2068,7,30]]],
  ["", [[1491,7,1],[2068,8,29]]],
  ["", [[1491,8,1],[2068,9,28]]],
  ["", [[1491,9,1],[2068,10,27]]],
  ["", [[1491,10,1],[2068,11,26]]],
  ["", [[1491,11,1],[2068,12,25]]],
  ["", [[1491,12,1],[2069,1,24]]],
  ["", [[1492,1,1],[2069,2,23]]],
  ["", [[1492,2,1],[2069,3,24]]],
  ["", [[1492,3,1],[2069,4,22]]],
  ["", [[1492,4,1],[2069,5,22]]],
  ["", [[1492,5,1],[2069,6,20]]],
  ["", [[1492,6,1],[2069,7,20]]],
  ["", [[1492,7,1],[2069,8,18]]],
  ["", [[1492,8,1],[2069,9,17]]],
  ["", [[1492,9,1],[2069,10,16]]],
  ["", [[1492,10,1],[2069,11,15]]],
  ["", [[1492,11,1],[2069,12,15]]],
  ["", [[1492,12,1],[2070,1,13]]],
  ["", [[1493,1,1],[2070,2,12]]],
  ["", [[1493,2,1],[2070,3,14]]],
  ["", [[1493,3,1],[2070,4,12]]],
  ["", [[1493,4,1],[2070,5,11]]],
  ["", [[1493,5,1],[2070,6,10]]],
  ["", [[1493,6,1],[2070,7,9]]],
  ["", [[1493,7,1],[2070,8,8]]],
  ["", [[1493,8,1],[2070,9,6]]],
  ["", [[1493,9,1],[2070,10,5]]],
  ["", [[1493,10,1],[2070,11,4]]],
  ["", [[1493,11,1],[2070,12,4]]],
  ["", [[1493,12,1],[2071,1,2]]],
  ["", [[1494,1,1],[2071,2,1]]],
  ["", [[1494,2,1],[2071,3,3]]],
  ["", [[1494,3,1],[2071,4,2]]],
  ["", [[1494,4,1],[2071,5,1]]],
  ["", [[1494,5,1],[2071,5,30]]],
  ["", [[1494,6,1],[2071,6,29]]],
  ["", [[1494,7,1],[2071,7,28]]],
  ["", [[1494,8,1],[2071,8,26]]],
  ["", [[1494,9,1],[2071,9,25]]],
  ["", [[1494,10,1],[2071,10,24]]],
  ["", [[1494,11,1],[2071,11,23]]],
  ["", [[1494,12,1],[2071,12,22]]],
  ["", [[1495,1,1],[2072,1,21]]],
  ["", [[1495,2,1],[2072,2,20]]],
  ["", [[1495,3,1],[2072,3,21]]],
  ["", [[1495,4,1],[2072,4,19]]],
  ["", [[1495,5,1],[2072,5,19]]],
  ["", [[1495,6,1],[2072,6,17]]],
  ["", [[1495,7,1],[2072,7,17]]],
  ["", [[1495,8,1],[2072,8,15]]],
  ["", [[1495,9,1],[2072,9,13]]],
  ["", [[1495,10,1],[2072,10,13]]],
  ["", [[1495,11,1],[2072,11,11]]],
  ["", [[1495,12,1],[2072,12,11]]],
  ["", [[1496,1,1],[2073,1,9]]],
  ["", [[1496,2,1],[2073,2,8]]],
  ["", [[1496,3,1],[2073,3,10]]],
  ["", [[1496,4,1],[2073,4,9]]],
  ["", [[1496,5,1],[2073,5,8]]],
  ["", [[1496,6,1],[2073,6,7]]],
  ["", [[1496,7,1],[2073,7,6]]],
  ["", [[1496,8,1],[2073,8,5]]],
  ["", [[1496,9,1],[2073,9,3]]],
  ["", [[1496,10,1],[2073,10,2]]],
  ["", [[1496,11,1],[2073,11,1]]],
  ["", [[1496,12,1],[2073,11,30]]],
  ["", [[1497,1,1],[2073,12,30]]],
  ["", [[1497,2,1],[2074,1,28]]],
  ["", [[1497,3,1],[2074,2,27]]],
  ["", [[1497,4,1],[2074,3,29]]],
  ["", [[1497,5,1],[2074,4,27]]],
  ["", [[1497,6,1],[2074,5,27]]],
  ["", [[1497,7,1],[2074,6,26]]],
  ["", [[1497,8,1],[2074,7,25]]],
  ["", [[1497,9,1],[2074,8,23]]],
  ["", [[1497,10,1],[2074,9,22]]],
  ["", [[1497,11,1],[2074,10,21]]],
  ["", [[1497,12,1],[2074,11,20]]],
  ["", [[1498,1,1],[2074,12,19]]],
  ["", [[1498,2,1],[2075,1,18]]],
  ["", [[1498,3,1],[2075,2,16]]],
  ["", [[1498,4,1],[2075,3,18]]],
  ["", [[1498,5,1],[2075,4,16]]],
  ["", [[1498,6,1],[2075,5,16]]],
  ["", [[1498,7,1],[2075,6,15]]],
  ["", [[1498,8,1],[2075,7,14]]],
  ["", [[1498,9,1],[2075,8,13]]],
  ["", [[1498,10,1],[2075,9,11]]],
  ["", [[1498,11,1],[2075,10,11]]],
  ["", [[1498,12,1],[2075,11,9]]],
  ["", [[1499,1,1],[2075,12,9]]],
  ["", [[1499,2,1],[2076,1,7]]],
  ["", [[1499,3,1],[2076,2,6]]],
  ["", [[1499,4,1],[2076,3,6]]],
  ["", [[1499,5,1],[2076,4,5]]],
  ["", [[1499,6,1],[2076,5,4]]],
  ["", [[1499,7,1],[2076,6,3]]],
  ["", [[1499,8,1],[2076,7,2]]],
  ["", [[1499,9,1],[2076,8,1]]],
  ["", [[1499,10,1],[2076,8,30]]],
  ["", [[1499,11,1],[2076,9,29]]],
  ["", [[1499,12,1],[2076,10,29]]],
  ["", [[1500,1,1],[2076,11,27]]],
  ["", [[1500,2,1],[2076,12,27]]],
  ["", [[1500,3,1],[2077,1,26]]],
  ["", [[1500,4,1],[2077,2,24]]],
  ["", [[1500,5,1],[2077,3,25]]],
  ["", [[1500,6,1],[2077,4,24]]],
  ["", [[1500,7,1],[2077,5,23]]],
  ["", [[1500,8,1],[2077,6,21]]],
  ["", [[1500,9,1],[2077,7,21]]],
  ["", [[1500,10,1],[2077,8,19]]],
  ["", [[1500,11,1],[2077,9,18]]],
  ["", [[1500,12,1],[2077,10,18]]]
]
0707010000001E000081A4000003E800000064000000015EC9613100003C1D000000000000000000000000000000000000004700000000hijri-converter-2.1.1/tests/other/data/ummalqura_newspaper_issues.json[
  [1, [[1343, 5, 15],[1924, 12, 12]]],
  [5, [[1343, 6, 14],[1925, 1, 9]]],
  [9, [[1343, 7, 12],[1925, 2, 6]]],
  [13, [[1343, 8, 10],[1925, 3, 6]]],
  [17, [[1343, 9, 15],[1925, 4, 10]]],
  [20, [[1343, 10, 15],[1925, 5, 8]]],
  [24, [[1343, 11, 13],[1925, 6, 5]]],
  [28, [[1343, 12, 18],[1925, 7, 10]]],
  [32, [[1344, 1, 16],[1925, 8, 7]]],
  [35, [[1344, 2, 8],[1925, 8, 28]]],
  [40, [[1344, 3, 14],[1925, 10, 2]]],
  [45, [[1344, 4, 19],[1925, 11, 6]]],
  [48, [[1344, 5, 11],[1925, 11, 27]]],
  [52, [[1344, 6, 11],[1925, 12, 27]]],
  [56, [[1344, 7, 8],[1926, 1, 22]]],
  [61, [[1344, 8, 13],[1926, 2, 26]]],
  [65, [[1344, 9, 12],[1926, 3, 26]]],
  [68, [[1344, 10, 10],[1926, 4, 23]]],
  [72, [[1344, 11, 9],[1926, 5, 21]]],
  [77, [[1344, 12, 7],[1926, 6, 18]]],
  [84, [[1345, 1, 13],[1926, 7, 23]]],
  [88, [[1345, 2, 11],[1926, 8, 20]]],
  [92, [[1345, 3, 10],[1926, 9, 17]]],
  [96, [[1345, 4, 8],[1926, 10, 15]]],
  [101, [[1345, 5, 14],[1926, 11, 19]]],
  [105, [[1345, 6, 11],[1926, 12, 17]]],
  [109, [[1345, 7, 10],[1927, 1, 14]]],
  [113, [[1345, 8, 8],[1927, 2, 11]]],
  [117, [[1345, 9, 8],[1927, 3, 11]]],
  [122, [[1345, 10, 13],[1927, 4, 15]]],
  [127, [[1345, 11, 11],[1927, 5, 13]]],
  [131, [[1345, 12, 17],[1927, 6, 17]]],
  [134, [[1346, 1, 8],[1927, 7, 8]]],
  [138, [[1346, 2, 7],[1927, 8, 5]]],
  [143, [[1346, 3, 13],[1927, 9, 9]]],
  [147, [[1346, 4, 11],[1927, 10, 7]]],
  [153, [[1346, 5, 23],[1927, 11, 18]]],
  [156, [[1346, 6, 15],[1927, 12, 9]]],
  [160, [[1346, 7, 13],[1928, 1, 6]]],
  [164, [[1346, 8, 11],[1928, 2, 3]]],
  [168, [[1346, 9, 10],[1928, 3, 2]]],
  [172, [[1346, 10, 9],[1928, 3, 30]]],
  [177, [[1346, 11, 14],[1928, 5, 4]]],
  [182, [[1346, 12, 26],[1928, 6, 15]]],
  [184, [[1347, 1, 11],[1928, 6, 29]]],
  [188, [[1347, 2, 10],[1928, 7, 27]]],
  [192, [[1347, 3, 16],[1928, 8, 31]]],
  [196, [[1347, 4, 14],[1928, 9, 28]]],
  [201, [[1347, 5, 19],[1928, 11, 2]]],
  [205, [[1347, 6, 18],[1928, 11, 30]]],
  [209, [[1347, 7, 16],[1928, 12, 28]]],
  [213, [[1347, 8, 14],[1929, 1, 25]]],
  [217, [[1347, 9, 13],[1929, 2, 22]]],
  [221, [[1347, 10, 11],[1929, 3, 22]]],
  [226, [[1347, 11, 16],[1929, 4, 26]]],
  [230, [[1347, 12, 17],[1929, 5, 26]]],
  [234, [[1348, 1, 14],[1929, 6, 21]]],
  [238, [[1348, 2, 12],[1929, 7, 19]]],
  [243, [[1348, 3, 11],[1929, 8, 16]]],
  [247, [[1348, 4, 9],[1929, 9, 13]]],
  [252, [[1348, 5, 15],[1929, 10, 18]]],
  [256, [[1348, 6, 13],[1929, 11, 15]]],
  [260, [[1348, 7, 12],[1929, 12, 13]]],
  [265, [[1348, 8, 10],[1930, 1, 10]]],
  [270, [[1348, 9, 8],[1930, 2, 7]]],
  [275, [[1348, 10, 14],[1930, 3, 14]]],
  [279, [[1348, 11, 13],[1930, 4, 11]]],
  [284, [[1348, 12, 17],[1930, 5, 16]]],
  [287, [[1349, 1, 10],[1930, 6, 6]]],
  [291, [[1349, 2, 8],[1930, 7, 4]]],
  [296, [[1349, 3, 14],[1930, 8, 8]]],
  [300, [[1349, 4, 12],[1930, 9, 5]]],
  [304, [[1349, 5, 11],[1930, 10, 3]]],
  [308, [[1349, 6, 9],[1930, 10, 31]]],
  [312, [[1349, 7, 8],[1930, 11, 28]]],
  [317, [[1349, 8, 13],[1931, 1, 2]]],
  [321, [[1349, 9, 11],[1931, 1, 30]]],
  [324, [[1349, 10, 9],[1931, 2, 27]]],
  [328, [[1349, 11, 9],[1931, 3, 27]]],
  [333, [[1349, 12, 13],[1931, 5, 1]]],
  [337, [[1350, 1, 11],[1931, 5, 29]]],
  [342, [[1350, 2, 17],[1931, 7, 3]]],
  [345, [[1350, 3, 8],[1931, 7, 24]]],
  [349, [[1350, 4, 7],[1931, 8, 21]]],
  [354, [[1350, 5, 12],[1931, 9, 25]]],
  [358, [[1350, 6, 11],[1931, 10, 23]]],
  [362, [[1350, 7, 10],[1931, 11, 20]]],
  [366, [[1350, 8, 8],[1931, 12, 18]]],
  [370, [[1350, 9, 7],[1932, 1, 15]]],
  [375, [[1350, 10, 12],[1932, 2, 19]]],
  [379, [[1350, 11, 10],[1932, 3, 18]]],
  [384, [[1350, 12, 16],[1932, 4, 22]]],
  [387, [[1351, 1, 7],[1932, 5, 13]]],
  [392, [[1351, 2, 12],[1932, 6, 17]]],
  [396, [[1351, 3, 11],[1932, 7, 15]]],
  [400, [[1351, 4, 9],[1932, 8, 12]]],
  [404, [[1351, 5, 8],[1932, 9, 9]]],
  [409, [[1351, 6, 13],[1932, 10, 14]]],
  [413, [[1351, 7, 12],[1932, 11, 11]]],
  [417, [[1351, 8, 11],[1932, 12, 9]]],
  [422, [[1351, 9, 17],[1933, 1, 13]]],
  [425, [[1351, 10, 8],[1933, 2, 3]]],
  [430, [[1351, 11, 13],[1933, 3, 10]]],
  [434, [[1351, 12, 11],[1933, 4, 6]]],
  [439, [[1352, 1, 17],[1933, 5, 12]]],
  [442, [[1352, 2, 8],[1933, 6, 2]]],
  [447, [[1352, 3, 14],[1933, 7, 7]]],
  [451, [[1352, 4, 12],[1933, 8, 4]]],
  [455, [[1352, 5, 11],[1933, 9, 1]]],
  [460, [[1352, 6, 16],[1933, 10, 6]]],
  [464, [[1352, 7, 15],[1933, 11, 3]]],
  [468, [[1352, 8, 13],[1933, 12, 1]]],
  [472, [[1352, 9, 12],[1933, 12, 29]]],
  [476, [[1352, 10, 10],[1934, 1, 26]]],
  [480, [[1352, 11, 9],[1934, 2, 23]]],
  [484, [[1352, 12, 8],[1934, 3, 24]]],
  [489, [[1353, 1, 13],[1934, 4, 27]]],
  [493, [[1353, 2, 11],[1934, 5, 25]]],
  [497, [[1353, 3, 10],[1934, 6, 22]]],
  [501, [[1353, 4, 8],[1934, 7, 20]]],
  [506, [[1353, 5, 13],[1934, 8, 24]]],
  [510, [[1353, 6, 12],[1934, 9, 21]]],
  [514, [[1353, 7, 10],[1934, 10, 19]]],
  [518, [[1353, 8, 9],[1934, 11, 16]]],
  [522, [[1353, 9, 7],[1934, 12, 14]]],
  [529, [[1353, 10, 19],[1935, 1, 25]]],
  [532, [[1353, 11, 11],[1935, 2, 15]]],
  [537, [[1353, 12, 17],[1935, 3, 22]]],
  [540, [[1354, 1, 8],[1935, 4, 12]]],
  [544, [[1354, 2, 7],[1935, 5, 10]]],
  [551, [[1354, 3, 19],[1935, 6, 21]]],
  [554, [[1354, 4, 25],[1935, 7, 26]]],
  [556, [[1354, 5, 9],[1935, 8, 9]]],
  [561, [[1354, 6, 8],[1935, 9, 6]]],
  [566, [[1354, 7, 13],[1935, 10, 11]]],
  [570, [[1354, 8, 11],[1935, 11, 8]]],
  [574, [[1354, 9, 10],[1935, 12, 6]]],
  [578, [[1354, 10, 8],[1936, 1, 3]]],
  [583, [[1354, 11, 14],[1936, 2, 7]]],
  [587, [[1354, 12, 11],[1936, 3, 6]]],
  [591, [[1355, 1, 11],[1936, 4, 3]]],
  [595, [[1355, 2, 9],[1936, 5, 1]]],
  [599, [[1355, 3, 8],[1936, 5, 29]]],
  [604, [[1355, 4, 13],[1936, 7, 3]]],
  [608, [[1355, 5, 12],[1936, 7, 31]]],
  [612, [[1355, 6, 10],[1936, 8, 28]]],
  [616, [[1355, 7, 9],[1936, 9, 25]]],
  [620, [[1355, 8, 7],[1936, 10, 23]]],
  [625, [[1355, 9, 13],[1936, 11, 27]]],
  [629, [[1355, 10, 11],[1936, 12, 25]]],
  [633, [[1355, 11, 9],[1937, 1, 22]]],
  [637, [[1355, 12, 11],[1937, 2, 22]]],
  [3364, [[1412, 1, 8],[1991, 7, 19]]],
  [3369, [[1412, 2, 13],[1991, 8, 23]]],
  [3374, [[1412, 3, 19],[1991, 9, 27]]],
  [3377, [[1412, 4, 11],[1991, 10, 18]]],
  [3381, [[1412, 5, 9],[1991, 11, 15]]],
  [3386, [[1412, 6, 14],[1991, 12, 20]]],
  [3390, [[1412, 7, 13],[1992, 1, 17]]],
  [3394, [[1412, 8, 11],[1992, 2, 14]]],
  [3400, [[1412, 9, 23],[1992, 3, 27]]],
  [3403, [[1412, 10, 28],[1992, 5, 1]]],
  [3405, [[1412, 11, 13],[1992, 5, 15]]],
  [3409, [[1412, 12, 25],[1992, 6, 26]]],
  [3412, [[1413, 1, 17],[1992, 7, 17]]],
  [3415, [[1413, 2, 9],[1992, 8, 7]]],
  [3420, [[1413, 3, 14],[1992, 9, 11]]],
  [3424, [[1413, 4, 13],[1992, 10, 9]]],
  [3430, [[1413, 5, 26],[1992, 11, 20]]],
  [3432, [[1413, 6, 10],[1992, 12, 4]]],
  [3436, [[1413, 7, 8],[1993, 1, 1]]],
  [3441, [[1413, 8, 14],[1993, 2, 5]]],
  [3445, [[1413, 9, 12],[1993, 3, 5]]],
  [3448, [[1413, 10, 10],[1993, 4, 2]]],
  [3452, [[1413, 11, 9],[1993, 4, 30]]],
  [3457, [[1413, 12, 21],[1993, 6, 11]]],
  [3460, [[1414, 1, 12],[1993, 7, 2]]],
  [3465, [[1414, 2, 18],[1993, 8, 6]]],
  [3469, [[1414, 3, 17],[1993, 9, 3]]],
  [3472, [[1414, 4, 8],[1993, 9, 24]]],
  [3477, [[1414, 5, 14],[1993, 10, 29]]],
  [3481, [[1414, 6, 13],[1993, 11, 26]]],
  [3485, [[1414, 7, 11],[1993, 12, 24]]],
  [3489, [[1414, 8, 10],[1994, 1, 21]]],
  [3493, [[1414, 9, 8],[1994, 2, 18]]],
  [3496, [[1414, 10, 13],[1994, 3, 25]]],
  [3500, [[1414, 11, 11],[1994, 4, 22]]],
  [3504, [[1414, 12, 24],[1994, 6, 3]]],
  [3506, [[1415, 1, 8],[1994, 6, 17]]],
  [3511, [[1415, 2, 14],[1994, 7, 22]]],
  [3515, [[1415, 3, 12],[1994, 8, 19]]],
  [3520, [[1415, 4, 18],[1994, 9, 23]]],
  [3523, [[1415, 5, 9],[1994, 10, 14]]],
  [3527, [[1415, 6, 8],[1994, 11, 11]]],
  [3532, [[1415, 7, 14],[1994, 12, 16]]],
  [3536, [[1415, 8, 12],[1995, 1, 13]]],
  [3540, [[1415, 9, 11],[1995, 2, 10]]],
  [3543, [[1415, 10, 9],[1995, 3, 10]]],
  [3548, [[1415, 11, 14],[1995, 4, 14]]],
  [3552, [[1415, 12, 20],[1995, 5, 19]]],
  [3555, [[1416, 1, 11],[1995, 6, 9]]],
  [3559, [[1416, 2, 9],[1995, 7, 7]]],
  [3564, [[1416, 3, 15],[1995, 8, 11]]],
  [3568, [[1416, 4, 13],[1995, 9, 8]]],
  [3572, [[1416, 5, 12],[1995, 10, 6]]],
  [3576, [[1416, 6, 10],[1995, 11, 3]]],
  [3580, [[1416, 7, 9],[1995, 12, 1]]],
  [3585, [[1416, 8, 14],[1996, 1, 5]]],
  [3589, [[1416, 9, 13],[1996, 2, 2]]],
  [3591, [[1416, 10, 12],[1996, 3, 1]]],
  [3595, [[1416, 11, 10],[1996, 3, 29]]],
  [3599, [[1416, 12, 23],[1996, 5, 10]]],
  [3603, [[1417, 1, 21],[1996, 6, 7]]],
  [3606, [[1417, 2, 12],[1996, 6, 28]]],
  [3610, [[1417, 3, 11],[1996, 7, 26]]],
  [3614, [[1417, 4, 9],[1996, 8, 23]]],
  [3618, [[1417, 5, 8],[1996, 9, 20]]],
  [3623, [[1417, 6, 13],[1996, 10, 25]]],
  [3627, [[1417, 7, 11],[1996, 11, 22]]],
  [3631, [[1417, 8, 10],[1996, 12, 20]]],
  [3635, [[1417, 9, 8],[1997, 1, 17]]],
  [3638, [[1417, 10, 14],[1997, 2, 21]]],
  [3642, [[1417, 11, 12],[1997, 3, 21]]],
  [3646, [[1417, 12, 25],[1997, 5, 2]]],
  [3648, [[1418, 1, 10],[1997, 5, 16]]],
  [3652, [[1418, 2, 8],[1997, 6, 13]]],
  [3657, [[1418, 3, 14],[1997, 7, 18]]],
  [3661, [[1418, 4, 12],[1997, 8, 15]]],
  [3665, [[1418, 5, 11],[1997, 9, 12]]],
  [3669, [[1418, 6, 9],[1997, 10, 10]]],
  [3674, [[1418, 7, 14],[1997, 11, 14]]],
  [3678, [[1418, 8, 12],[1997, 12, 12]]],
  [3682, [[1418, 9, 11],[1998, 1, 9]]],
  [3685, [[1418, 10, 16],[1998, 2, 13]]],
  [3688, [[1418, 11, 8],[1998, 3, 6]]],
  [3693, [[1418, 12, 20],[1998, 4, 17]]],
  [3698, [[1419, 1, 26],[1998, 5, 22]]],
  [3700, [[1419, 2, 11],[1998, 6, 5]]],
  [3704, [[1419, 3, 9],[1998, 7, 3]]],
  [3708, [[1419, 4, 8],[1998, 7, 31]]],
  [3713, [[1419, 5, 13],[1998, 9, 4]]],
  [3717, [[1419, 6, 12],[1998, 10, 2]]],
  [3721, [[1419, 7, 10],[1998, 10, 30]]],
  [3725, [[1419, 8, 8],[1998, 11, 27]]],
  [3730, [[1419, 9, 14],[1999, 1, 1]]],
  [3732, [[1419, 10, 12],[1999, 1, 29]]],
  [3736, [[1419, 11, 10],[1999, 2, 26]]],
  [3740, [[1419, 12, 23],[1999, 4, 9]]],
  [3743, [[1420, 1, 14],[1999, 4, 30]]],
  [3747, [[1420, 2, 13],[1999, 5, 28]]],
  [3751, [[1420, 3, 11],[1999, 6, 25]]],
  [3755, [[1420, 4, 10],[1999, 7, 23]]],
  [3759, [[1420, 5, 9],[1999, 8, 20]]],
  [3764, [[1420, 6, 14],[1999, 9, 24]]],
  [3769, [[1420, 7, 20],[1999, 10, 29]]],
  [3772, [[1420, 8, 11],[1999, 11, 19]]],
  [3776, [[1420, 9, 9],[1999, 12, 17]]],
  [3779, [[1420, 10, 14],[2000, 1, 21]]],
  [3783, [[1420, 11, 12],[2000, 2, 18]]],
  [3786, [[1420, 12, 4],[2000, 3, 10]]],
  [3791, [[1421, 1, 23],[2000, 4, 28]]],
  [3793, [[1421, 2, 8],[2000, 5, 12]]],
  [3798, [[1421, 3, 14],[2000, 6, 16]]],
  [3803, [[1421, 4, 19],[2000, 7, 21]]],
  [3806, [[1421, 5, 11],[2000, 8, 11]]],
  [3810, [[1421, 6, 10],[2000, 9, 8]]],
  [3814, [[1421, 7, 9],[2000, 10, 6]]],
  [3819, [[1421, 8, 14],[2000, 11, 10]]],
  [3824, [[1421, 9, 19],[2000, 12, 15]]],
  [3826, [[1421, 10, 17],[2001, 1, 12]]],
  [3829, [[1421, 11, 8],[2001, 2, 2]]],
  [3834, [[1421, 12, 21],[2001, 3, 16]]],
  [3837, [[1422, 1, 12],[2001, 4, 6]]],
  [3842, [[1422, 2, 17],[2001, 5, 11]]],
  [3845, [[1422, 3, 9],[2001, 6, 1]]],
  [3850, [[1422, 4, 15],[2001, 7, 6]]],
  [3854, [[1422, 5, 13],[2001, 8, 3]]],
  [3858, [[1422, 6, 12],[2001, 8, 31]]],
  [3861, [[1422, 7, 4],[2001, 9, 21]]],
  [3867, [[1422, 8, 17],[2001, 11, 2]]],
  [3870, [[1422, 9, 8],[2001, 11, 23]]],
  [3875, [[1422, 10, 27],[2002, 1, 11]]],
  [3878, [[1422, 11, 18],[2002, 2, 1]]],
  [3881, [[1422, 12, 24],[2002, 3, 8]]],
  [3884, [[1423, 1, 15],[2002, 3, 29]]],
  [3888, [[1423, 2, 13],[2002, 4, 26]]],
  [3892, [[1423, 3, 12],[2002, 5, 24]]],
  [3898, [[1423, 4, 24],[2002, 7, 5]]],
  [3900, [[1423, 5, 9],[2002, 7, 19]]],
  [3905, [[1423, 6, 14],[2002, 8, 23]]],
  [3909, [[1423, 7, 13],[2002, 9, 20]]],
  [3913, [[1423, 8, 12],[2002, 10, 18]]],
  [3917, [[1423, 9, 10],[2002, 11, 15]]],
  [3921, [[1423, 10, 23],[2002, 12, 27]]],
  [3924, [[1423, 11, 14],[2003, 1, 17]]],
  [3928, [[1423, 12, 13],[2003, 2, 14]]],
  [3933, [[1424, 1, 18],[2003, 3, 21]]],
  [3937, [[1424, 2, 16],[2003, 4, 18]]],
  [3940, [[1424, 3, 8],[2003, 5, 9]]],
  [3945, [[1424, 4, 13],[2003, 6, 13]]],
  [3949, [[1424, 5, 11],[2003, 7, 11]]],
  [3953, [[1424, 6, 10],[2003, 8, 8]]],
  [3960, [[1424, 7, 29],[2003, 9, 26]]],
  [3962, [[1424, 8, 14],[2003, 10, 10]]],
  [3967, [[1424, 9, 20],[2003, 11, 14]]],
  [3969, [[1424, 10, 11],[2003, 12, 5]]],
  [3974, [[1424, 11, 17],[2004, 1, 9]]],
  [3978, [[1424, 12, 15],[2004, 2, 6]]],
  [3982, [[1425, 1, 14],[2004, 3, 5]]],
  [3986, [[1425, 2, 12],[2004, 4, 2]]],
  [3991, [[1425, 3, 18],[2004, 5, 7]]],
  [3996, [[1425, 4, 23],[2004, 6, 11]]],
  [3999, [[1425, 5, 14],[2004, 7, 2]]],
  [4003, [[1425, 6, 13],[2004, 7, 30]]],
  [4007, [[1425, 7, 11],[2004, 8, 27]]],
  [4012, [[1425, 8, 17],[2004, 10, 1]]],
  [4016, [[1425, 9, 15],[2004, 10, 29]]],
  [4020, [[1425, 10, 13],[2004, 11, 26]]],
  [4024, [[1425, 11, 12],[2004, 12, 24]]],
  [4028, [[1425, 12, 10],[2005, 1, 21]]],
  [4033, [[1426, 1, 16],[2005, 2, 25]]],
  [4036, [[1426, 2, 8],[2005, 3, 18]]],
  [4042, [[1426, 3, 20],[2005, 4, 29]]],
  [4045, [[1426, 4, 12],[2005, 5, 20]]],
  [4049, [[1426, 5, 10],[2005, 6, 17]]],
  [4053, [[1426, 6, 9],[2005, 7, 15]]],
  [4058, [[1426, 7, 14],[2005, 8, 19]]],
  [4062, [[1426, 8, 12],[2005, 9, 16]]],
  [4066, [[1426, 9, 11],[2005, 10, 14]]],
  [4070, [[1426, 10, 9],[2005, 11, 11]]],
  [4075, [[1426, 11, 14],[2005, 12, 16]]],
  [4079, [[1426, 12, 13],[2006, 1, 13]]],
  [4083, [[1427, 1, 11],[2006, 2, 10]]],
  [4087, [[1427, 2, 10],[2006, 3, 10]]],
  [4091, [[1427, 3, 9],[2006, 4, 7]]],
  [4096, [[1427, 4, 14],[2006, 5, 12]]],
  [4100, [[1427, 5, 13],[2006, 6, 9]]],
  [4104, [[1427, 6, 11],[2006, 7, 7]]],
  [4108, [[1427, 7, 10],[2006, 8, 4]]],
  [4112, [[1427, 8, 8],[2006, 9, 1]]],
  [4117, [[1427, 9, 13],[2006, 10, 6]]],
  [4121, [[1427, 10, 12],[2006, 11, 3]]],
  [4125, [[1427, 11, 10],[2006, 12, 1]]],
  [4129, [[1427, 12, 8],[2006, 12, 29]]],
  [4134, [[1428, 1, 14],[2007, 2, 2]]],
  [4138, [[1428, 2, 12],[2007, 3, 2]]],
  [4142, [[1428, 3, 11],[2007, 3, 30]]],
  [4146, [[1428, 4, 10],[2007, 4, 27]]],
  [4150, [[1428, 5, 8],[2007, 5, 25]]],
  [4155, [[1428, 6, 14],[2007, 6, 29]]],
  [4159, [[1428, 7, 13],[2007, 7, 27]]],
  [4163, [[1428, 8, 11],[2007, 8, 24]]],
  [4167, [[1428, 9, 9],[2007, 9, 21]]],
  [4172, [[1428, 10, 14],[2007, 10, 26]]],
  [4176, [[1428, 11, 13],[2007, 11, 23]]],
  [4180, [[1428, 12, 11],[2007, 12, 21]]],
  [4184, [[1429, 1, 9],[2008, 1, 18]]],
  [4188, [[1429, 2, 8],[2008, 2, 15]]],
  [4193, [[1429, 3, 13],[2008, 3, 21]]],
  [4197, [[1429, 4, 12],[2008, 4, 18]]],
  [4201, [[1429, 5, 11],[2008, 5, 16]]],
  [4205, [[1429, 6, 9],[2008, 6, 13]]],
  [4209, [[1429, 7, 8],[2008, 7, 11]]],
  [4214, [[1429, 8, 14],[2008, 8, 15]]],
  [4218, [[1429, 9, 12],[2008, 9, 12]]],
  [4222, [[1429, 10, 10],[2008, 10, 10]]],
  [4226, [[1429, 11, 9],[2008, 11, 7]]],
  [4231, [[1429, 12, 14],[2008, 12, 12]]],
  [4235, [[1430, 1, 12],[2009, 1, 9]]],
  [4239, [[1430, 2, 11],[2009, 2, 6]]],
  [4243, [[1430, 3, 9],[2009, 3, 6]]],
  [4248, [[1430, 4, 14],[2009, 4, 10]]],
  [4252, [[1430, 5, 13],[2009, 5, 8]]],
  [4256, [[1430, 6, 12],[2009, 6, 5]]],
  [4260, [[1430, 7, 10],[2009, 7, 3]]],
  [4264, [[1430, 8, 9],[2009, 7, 31]]],
  [4269, [[1430, 9, 14],[2009, 9, 4]]],
  [4273, [[1430, 10, 13],[2009, 10, 2]]],
  [4277, [[1430, 11, 11],[2009, 10, 30]]],
  [4281, [[1430, 12, 10],[2009, 11, 27]]]
]
0707010000001F000081ED000003E800000064000000015EC961310000049D000000000000000000000000000000000000003000000000hijri-converter-2.1.1/tests/other/test_other.pyimport json
import pytest
from pathlib import Path
from hijri_converter import convert


def load_params_from_json():
    data = []
    files = Path(__file__).parent.joinpath("data").glob("*.json")
    for file in files:
        file_content = json.loads(file.read_text())
        file_data = [[tuple(i) for i in x[1]] for x in file_content]
        data += file_data
    params = [tuple(x) for x in data]
    params_reversed = [tuple(x[::-1]) for x in data]
    return params, params_reversed


hijri_gregorian_params, gregorian_hijri_params = load_params_from_json()


@pytest.mark.parametrize("test_input, expected", hijri_gregorian_params)
def test_convert_hijri_to_gregorian(test_input, expected):
    year, month, day = test_input
    hijri = convert.Hijri(year, month, day, validate=False)
    converted = hijri.to_gregorian().datetuple()
    assert converted == expected


@pytest.mark.parametrize("test_input, expected", gregorian_hijri_params)
def test_convert_gregorian_to_hijri(test_input, expected):
    year, month, day = test_input
    gregorian = convert.Gregorian(year, month, day)
    converted = gregorian.to_hijri().datetuple()
    assert converted == expected
07070100000020000041ED000003E800000064000000025EC9613100000000000000000000000000000000000000000000002100000000hijri-converter-2.1.1/tests/unit07070100000021000081ED000003E800000064000000015EC96131000015FC000000000000000000000000000000000000003100000000hijri-converter-2.1.1/tests/unit/test_convert.pyimport pytest
from datetime import date
from hijri_converter import convert


@pytest.fixture(scope="module")
def hijri():
    return convert.Hijri(1410, 8, 13)


@pytest.fixture(scope="module")
def gregorian():
    return convert.Gregorian(1990, 3, 10)


def test_hijri_representation(hijri):
    assert hijri.__repr__() == "Hijri(1410, 8, 13)"


def test_hijri_string_representation(hijri):
    assert hijri.__str__() == "1410-08-13"


def test_hijri_hash(hijri):
    assert hijri.__hash__() == hash(("Hijri", 1410, 8, 13))


@pytest.mark.parametrize(
    "test_input", ["__gt__", "__ge__", "__lt__", "__le__"]
)
def test_test_hijri_comparison_exception(hijri, test_input):
    with pytest.raises(TypeError) as e:
        getattr(hijri, test_input)("1410-08-13")
    assert str(e.value) == "can't compare 'Hijri' to 'str'"


def test_hijri_equality(hijri):
    assert hijri == convert.Hijri(1410, 8, 13)
    assert hijri != convert.Hijri(1410, 8, 14)
    assert hijri != "1410-08-13"


def test_hijri_ordering(hijri):
    assert hijri > convert.Hijri(1410, 8, 12)
    assert hijri >= convert.Hijri(1410, 8, 13)
    assert hijri < convert.Hijri(1410, 8, 14)
    assert hijri <= convert.Hijri(1410, 8, 13)


def test_hijri_fromisoformat(hijri):
    assert convert.Hijri.fromisoformat("1410-08-13") == hijri


def test_hijri_year(hijri):
    assert hijri.year == 1410


def test_hijri_month(hijri):
    assert hijri.month == 8


def test_hijri_day(hijri):
    assert hijri.day == 13


def test_hijri_datetuple(hijri):
    assert hijri.datetuple() == (1410, 8, 13)


def test_hijri_isoformat(hijri):
    assert hijri.isoformat() == "1410-08-13"


def test_hijri_dmyformat(hijri):
    assert hijri.dmyformat() == "13/08/1410"


def test_hijri_slashformat_deprecation(hijri):
    with pytest.deprecated_call():
        hijri.slashformat()


def test_hijri_month_length(hijri):
    assert hijri.month_length() == 29


def test_hijri_month_name(hijri):
    assert hijri.month_name() == "Sha’ban"
    assert hijri.month_name("ar") == "شعبان"


def test_hijri_weekday(hijri):
    assert hijri.weekday() == 5


def test_hijri_iso_weekday(hijri):
    assert hijri.isoweekday() == 6


def test_hijri_day_name(hijri):
    assert hijri.day_name() == "Saturday"
    assert hijri.day_name("ar") == "السبت"


def test_hijri_notation(hijri):
    assert hijri.notation() == "AH"
    assert hijri.notation("ar") == "هـ"


def test_hijri_to_julian(hijri):
    assert hijri.to_julian() == 2447961


def test_hijri_to_gregorian(hijri):
    assert hijri.to_gregorian().datetuple() == (1990, 3, 10)


def test_hijri_month_index(hijri):
    assert hijri._month_index() == 811


@pytest.mark.parametrize(
    "test_input", [(1410, 9, 30), (1356, 1, 1), (1500, 12, 30)]
)
def test_hijri_valid_date(test_input):
    year, month, day = test_input
    try:
        convert.Hijri(year, month, day, validate=False)._check_date()
    except (ValueError, OverflowError):
        pytest.fail()


@pytest.mark.parametrize(
    "test_input, expected",
    [
        ((37, 12, 30), "date out of range"),
        ((1342, 12, 29), "date out of range"),
        ((1501, 1, 1), "date out of range"),
        ((1410, 0, 1), "month must be in 1..12"),
        ((1410, 13, 1), "month must be in 1..12"),
        ((1410, 8, 30), "day must be in 1..29 for month"),
    ],
)
def test_hijri_invalid_date(test_input, expected):
    with pytest.raises((ValueError, OverflowError)) as e:
        convert.Hijri(*test_input, validate=False)._check_date()
    assert str(e.value) == expected


def test_gregorian_fromdate():
    test_date = date(2014, 12, 28)
    assert convert.Gregorian.fromdate(test_date).datetuple() == (2014, 12, 28)


def test_gregorian_datetuple(gregorian):
    assert gregorian.datetuple() == (1990, 3, 10)


def test_gregorian_dmyformat(gregorian):
    assert gregorian.dmyformat() == "10/03/1990"


def test_gregorian_slashformat_deprecation(gregorian):
    with pytest.deprecated_call():
        gregorian.slashformat()


def test_gregorian_month_name(gregorian):
    assert gregorian.month_name() == "March"
    assert gregorian.month_name("ar") == "مارس"


def test_gregorian_day_name(gregorian):
    assert gregorian.day_name() == "Saturday"
    assert gregorian.day_name("ar") == "السبت"


def test_gregorian_notation(gregorian):
    assert gregorian.notation() == "CE"
    assert gregorian.notation("ar") == "م"


def test_gregorian_to_julian(gregorian):
    assert gregorian.to_julian() == 2447961


def test_gregorian_to_hijri(gregorian):
    assert gregorian.to_hijri().datetuple() == (1410, 8, 13)


@pytest.mark.parametrize(
    "test_input", [(1990, 3, 10), (1924, 8, 1), (2077, 11, 16)]
)
def test_gregorian_valid_range(test_input):
    year, month, day = test_input
    try:
        convert.Gregorian(year, month, day)._check_range()
    except OverflowError:
        pytest.fail()


@pytest.mark.parametrize(
    "test_input, expected",
    [
        ((1924, 7, 31), "date out of range"),
        ((2077, 11, 17), "date out of range"),
    ],
)
def test_gregorian_invalid_range(test_input, expected):
    with pytest.raises(OverflowError) as e:
        convert.Gregorian(*test_input)._check_range()
    assert str(e.value) == expected


def test_julian_to_ordinal():
    assert convert._julian_to_ordinal(2447977) == 726552


def test_ordinal_to_julian():
    assert convert._ordinal_to_julian(726552) == 2447977


def test_julian_to_reduced_julian():
    assert convert._julian_to_reduced_julian(2456087) == 56087


def test_reduced_julian_to_julian():
    assert convert._reduced_julian_to_julian(56087) == 2456087
07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000B00000000TRAILER!!!285 blocks
openSUSE Build Service is sponsored by