------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------
----------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX----
--------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX----------XX--
------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX------XX--------------XX
XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------XXXXXX------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------