From ee42943cd03e0f64319f90444d0c1d0c71e07089 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 3 Nov 2016 14:44:15 +0100 Subject: [PATCH] score: Optimize self-contained mutexes --- cpukit/score/include/rtems/score/isrlock.h | 18 + cpukit/score/src/mutex.c | 99 +- testsuites/tmtests/tmfine01/tmfine01.scn | 4200 ++++++++++---------- 3 files changed, 2185 insertions(+), 2132 deletions(-) diff --git a/cpukit/score/include/rtems/score/isrlock.h b/cpukit/score/include/rtems/score/isrlock.h index 5eb6a46c43..7dd2f29000 100644 --- a/cpukit/score/include/rtems/score/isrlock.h +++ b/cpukit/score/include/rtems/score/isrlock.h @@ -150,6 +150,24 @@ typedef struct { { } #endif +/** + * @brief Sets the ISR level in the ISR lock context. + * + * @param[in] context The ISR lock context. + * @param[in] level The ISR level. + */ +RTEMS_INLINE_ROUTINE void _ISR_lock_Context_set_level( + ISR_lock_Context *context, + ISR_Level level +) +{ +#if defined( RTEMS_SMP ) + context->Lock_context.isr_level = level; +#else + context->isr_level = level; +#endif +} + /** * @brief Initializes an ISR lock. * diff --git a/cpukit/score/src/mutex.c b/cpukit/score/src/mutex.c index 719ae5bd4c..4700563bf6 100644 --- a/cpukit/score/src/mutex.c +++ b/cpukit/score/src/mutex.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. + * Copyright (c) 2015, 2016 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -71,14 +71,21 @@ static Mutex_Control *_Mutex_Get( struct _Mutex_Control *_mutex ) return (Mutex_Control *) _mutex; } -static Thread_Control *_Mutex_Queue_acquire( +#define _Mutex_ISR_disable( level, queue_context ) \ + do { \ + _ISR_Local_disable( level ); \ + _ISR_lock_ISR_disable_profile( \ + &( queue_context )->Lock_context.Lock_context \ + ) \ + } while ( 0 ) + +static Thread_Control *_Mutex_Queue_acquire_critical( Mutex_Control *mutex, Thread_queue_Context *queue_context ) { Thread_Control *executing; - _ISR_lock_ISR_disable( &queue_context->Lock_context.Lock_context ); executing = _Thread_Executing; _Thread_queue_Queue_acquire_critical( &mutex->Queue.Queue, @@ -91,19 +98,22 @@ static Thread_Control *_Mutex_Queue_acquire( static void _Mutex_Queue_release( Mutex_Control *mutex, + ISR_Level level, Thread_queue_Context *queue_context ) { - _Thread_queue_Queue_release( + _Thread_queue_Queue_release_critical( &mutex->Queue.Queue, &queue_context->Lock_context.Lock_context ); + _ISR_Local_enable( level ); } static void _Mutex_Acquire_slow( Mutex_Control *mutex, Thread_Control *owner, Thread_Control *executing, + ISR_Level level, Thread_queue_Context *queue_context ) { @@ -112,6 +122,10 @@ static void _Mutex_Acquire_slow( queue_context, _Thread_queue_Deadlock_fatal ); + _ISR_lock_Context_set_level( + &queue_context->Lock_context.Lock_context, + level + ); _Thread_queue_Enqueue_critical( &mutex->Queue.Queue, MUTEX_TQ_OPERATIONS, @@ -124,6 +138,7 @@ static void _Mutex_Acquire_slow( static void _Mutex_Release_critical( Mutex_Control *mutex, Thread_Control *executing, + ISR_Level level, Thread_queue_Context *queue_context ) { @@ -134,8 +149,12 @@ static void _Mutex_Release_critical( _Thread_Resource_count_decrement( executing ); if ( __predict_true( heads == NULL ) ) { - _Mutex_Queue_release( mutex, queue_context ); + _Mutex_Queue_release( mutex, level, queue_context ); } else { + _ISR_lock_Context_set_level( + &queue_context->Lock_context.Lock_context, + level + ); _Thread_queue_Surrender( &mutex->Queue.Queue, heads, @@ -150,22 +169,24 @@ void _Mutex_Acquire( struct _Mutex_Control *_mutex ) { Mutex_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; Thread_Control *owner; mutex = _Mutex_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( mutex, &queue_context ); owner = mutex->Queue.Queue.owner; if ( __predict_true( owner == NULL ) ) { mutex->Queue.Queue.owner = executing; _Thread_Resource_count_increment( executing ); - _Mutex_Queue_release( mutex, &queue_context ); + _Mutex_Queue_release( mutex, level, &queue_context ); } else { _Thread_queue_Context_set_no_timeout( &queue_context ); - _Mutex_Acquire_slow( mutex, owner, executing, &queue_context ); + _Mutex_Acquire_slow( mutex, owner, executing, level, &queue_context ); } } @@ -176,19 +197,21 @@ int _Mutex_Acquire_timed( { Mutex_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; Thread_Control *owner; mutex = _Mutex_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( mutex, &queue_context ); owner = mutex->Queue.Queue.owner; if ( __predict_true( owner == NULL ) ) { mutex->Queue.Queue.owner = executing; _Thread_Resource_count_increment( executing ); - _Mutex_Queue_release( mutex, &queue_context ); + _Mutex_Queue_release( mutex, level, &queue_context ); return 0; } else { @@ -196,18 +219,18 @@ int _Mutex_Acquire_timed( switch ( _TOD_Absolute_timeout_to_ticks( abstime, CLOCK_REALTIME, &ticks ) ) { case TOD_ABSOLUTE_TIMEOUT_INVALID: - _Mutex_Queue_release( mutex, &queue_context ); + _Mutex_Queue_release( mutex, level, &queue_context ); return EINVAL; case TOD_ABSOLUTE_TIMEOUT_IS_IN_PAST: case TOD_ABSOLUTE_TIMEOUT_IS_NOW: - _Mutex_Queue_release( mutex, &queue_context ); + _Mutex_Queue_release( mutex, level, &queue_context ); return ETIMEDOUT; default: break; } _Thread_queue_Context_set_relative_timeout( &queue_context, ticks ); - _Mutex_Acquire_slow( mutex, owner, executing, &queue_context ); + _Mutex_Acquire_slow( mutex, owner, executing, level, &queue_context ); return STATUS_GET_POSIX( _Thread_Wait_get_status( executing ) ); } @@ -217,13 +240,15 @@ int _Mutex_Try_acquire( struct _Mutex_Control *_mutex ) { Mutex_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; Thread_Control *owner; int eno; mutex = _Mutex_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( mutex, &queue_context ); owner = mutex->Queue.Queue.owner; @@ -235,7 +260,7 @@ int _Mutex_Try_acquire( struct _Mutex_Control *_mutex ) eno = EBUSY; } - _Mutex_Queue_release( mutex, &queue_context ); + _Mutex_Queue_release( mutex, level, &queue_context ); return eno; } @@ -244,15 +269,17 @@ void _Mutex_Release( struct _Mutex_Control *_mutex ) { Mutex_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; mutex = _Mutex_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( mutex, &queue_context ); _Assert( mutex->Queue.Queue.owner == executing ); - _Mutex_Release_critical( mutex, executing, &queue_context ); + _Mutex_Release_critical( mutex, executing, level, &queue_context ); } static Mutex_recursive_Control *_Mutex_recursive_Get( @@ -266,25 +293,27 @@ void _Mutex_recursive_Acquire( struct _Mutex_recursive_Control *_mutex ) { Mutex_recursive_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; Thread_Control *owner; mutex = _Mutex_recursive_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( &mutex->Mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( &mutex->Mutex, &queue_context ); owner = mutex->Mutex.Queue.Queue.owner; if ( __predict_true( owner == NULL ) ) { mutex->Mutex.Queue.Queue.owner = executing; _Thread_Resource_count_increment( executing ); - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); } else if ( owner == executing ) { ++mutex->nest_level; - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); } else { _Thread_queue_Context_set_no_timeout( &queue_context ); - _Mutex_Acquire_slow( &mutex->Mutex, owner, executing, &queue_context ); + _Mutex_Acquire_slow( &mutex->Mutex, owner, executing, level, &queue_context ); } } @@ -295,24 +324,26 @@ int _Mutex_recursive_Acquire_timed( { Mutex_recursive_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; Thread_Control *owner; mutex = _Mutex_recursive_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( &mutex->Mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( &mutex->Mutex, &queue_context ); owner = mutex->Mutex.Queue.Queue.owner; if ( __predict_true( owner == NULL ) ) { mutex->Mutex.Queue.Queue.owner = executing; _Thread_Resource_count_increment( executing ); - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); return 0; } else if ( owner == executing ) { ++mutex->nest_level; - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); return 0; } else { @@ -320,18 +351,18 @@ int _Mutex_recursive_Acquire_timed( switch ( _TOD_Absolute_timeout_to_ticks( abstime, CLOCK_REALTIME, &ticks ) ) { case TOD_ABSOLUTE_TIMEOUT_INVALID: - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); return EINVAL; case TOD_ABSOLUTE_TIMEOUT_IS_IN_PAST: case TOD_ABSOLUTE_TIMEOUT_IS_NOW: - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); return ETIMEDOUT; default: break; } _Thread_queue_Context_set_relative_timeout( &queue_context, ticks ); - _Mutex_Acquire_slow( &mutex->Mutex, owner, executing, &queue_context ); + _Mutex_Acquire_slow( &mutex->Mutex, owner, executing, level, &queue_context ); return STATUS_GET_POSIX( _Thread_Wait_get_status( executing ) ); } @@ -341,13 +372,15 @@ int _Mutex_recursive_Try_acquire( struct _Mutex_recursive_Control *_mutex ) { Mutex_recursive_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; Thread_Control *owner; int eno; mutex = _Mutex_recursive_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( &mutex->Mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( &mutex->Mutex, &queue_context ); owner = mutex->Mutex.Queue.Queue.owner; @@ -362,7 +395,7 @@ int _Mutex_recursive_Try_acquire( struct _Mutex_recursive_Control *_mutex ) eno = EBUSY; } - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); return eno; } @@ -371,23 +404,25 @@ void _Mutex_recursive_Release( struct _Mutex_recursive_Control *_mutex ) { Mutex_recursive_Control *mutex; Thread_queue_Context queue_context; + ISR_Level level; Thread_Control *executing; unsigned int nest_level; mutex = _Mutex_recursive_Get( _mutex ); _Thread_queue_Context_initialize( &queue_context ); - executing = _Mutex_Queue_acquire( &mutex->Mutex, &queue_context ); + _Mutex_ISR_disable( level, &queue_context ); + executing = _Mutex_Queue_acquire_critical( &mutex->Mutex, &queue_context ); _Assert( mutex->Mutex.Queue.Queue.owner == executing ); nest_level = mutex->nest_level; if ( __predict_true( nest_level == 0 ) ) { - _Mutex_Release_critical( &mutex->Mutex, executing, &queue_context ); + _Mutex_Release_critical( &mutex->Mutex, executing, level, &queue_context ); } else { mutex->nest_level = nest_level - 1; - _Mutex_Queue_release( &mutex->Mutex, &queue_context ); + _Mutex_Queue_release( &mutex->Mutex, level, &queue_context ); } } diff --git a/testsuites/tmtests/tmfine01/tmfine01.scn b/testsuites/tmtests/tmfine01/tmfine01.scn index e40ecf6f5b..9290ea972d 100644 --- a/testsuites/tmtests/tmfine01/tmfine01.scn +++ b/testsuites/tmtests/tmfine01/tmfine01.scn @@ -1,2440 +1,2440 @@ *** BEGIN OF TEST TMFINE 1 *** - 5081477 + 5402783 - 5002580 - 5002908 + 5350241 + 5350572 - 4905739 - 4906057 - 4906059 + 5214471 + 5214824 + 5214801 - 4878693 - 4879038 - 4879043 - 4879042 + 5226561 + 5226891 + 5226959 + 5226962 - 4851367 - 4851704 - 4858545 - 4858550 - 4858500 + 5188055 + 5188404 + 5188454 + 5188472 + 5188385 - 4787807 - 4788131 - 4795426 - 4795371 - 4792593 - 4792580 + 5136234 + 5136612 + 5136655 + 5136644 + 5136627 + 5136625 - 4825058 - 4825389 - 4825491 - 4825455 - 4824340 - 4824365 - 4825790 + 5129488 + 5129856 + 5129920 + 5129919 + 5129905 + 5129882 + 5129889 - 4789652 - 4789962 - 4790279 - 4790277 - 4790217 - 4790226 - 4790157 - 4790059 + 5086041 + 5086436 + 5086983 + 5086982 + 5086985 + 5087000 + 5086963 + 5086940 - 4792318 - 4792657 - 4793097 - 4793092 - 4793064 - 4793039 - 4792945 - 4792893 - 5074629 + 5093256 + 5093587 + 5093673 + 5093708 + 5093656 + 5093660 + 5093657 + 5093624 + 5395307 - 4795451 - 4795789 - 4796362 - 4796368 - 4796178 - 4796150 - 4796049 - 4795989 - 5015562 - 5015561 + 5103264 + 5103649 + 5104015 + 5103969 + 5104003 + 5103998 + 5103859 + 5103828 + 5366015 + 5365995 - 4765694 - 4766019 - 4766493 - 4766469 - 4766491 - 4766459 - 4766311 - 4766228 - 4902537 - 4902541 - 4902533 + 5068334 + 5068687 + 5068795 + 5068760 + 5068782 + 5068792 + 5068774 + 5068735 + 5210312 + 5210306 + 5210280 - 4799542 - 4799865 - 4800174 - 4800116 - 4800320 - 4800309 - 4799989 - 4799899 - 4890384 - 4890355 - 4890408 - 4890388 + 5106371 + 5106716 + 5106842 + 5106867 + 5106835 + 5106806 + 5106801 + 5106801 + 5240835 + 5240825 + 5240835 + 5240829 - 4777822 - 4778146 - 4778575 - 4778543 - 4778488 - 4778479 - 4778370 - 4778349 - 4847988 - 4847950 - 4848000 - 4847987 - 4847975 + 5078246 + 5078596 + 5078705 + 5078717 + 5078685 + 5078679 + 5078659 + 5078642 + 5184725 + 5184717 + 5184741 + 5184722 + 5184699 - 4775304 - 4775645 - 4775950 - 4775967 - 4775944 - 4775901 - 4775775 - 4775716 - 4811055 - 4811082 - 4811078 - 4811052 - 4811059 - 4811072 + 5078862 + 5079213 + 5079346 + 5079363 + 5079338 + 5079322 + 5079339 + 5079281 + 5141629 + 5141627 + 5141630 + 5141660 + 5141607 + 5141589 - 4780450 - 4780772 - 4781063 - 4781061 - 4781072 - 4781086 - 4780940 - 4780890 - 4827216 - 4827169 - 4827113 - 4827093 - 4827026 - 4826985 - 4827715 + 5086994 + 5087338 + 5087453 + 5087455 + 5087426 + 5087445 + 5087404 + 5087415 + 5128826 + 5128793 + 5128795 + 5128782 + 5128742 + 5128741 + 5128793 - 4761024 - 4761343 - 4761603 - 4761617 - 4761595 - 4761606 - 4761461 - 4761462 - 4773179 - 4773142 - 4772519 - 4772480 - 4771446 - 4771446 - 4772308 - 4772355 + 5064478 + 5064817 + 5064911 + 5064891 + 5064899 + 5064907 + 5064907 + 5064880 + 5061643 + 5061625 + 5061399 + 5061384 + 5061247 + 5061274 + 5061585 + 5061552 - 4805913 - 4806251 - 4806588 - 4806611 - 4806692 - 4806630 - 4806456 - 4806393 - 4814137 - 4814094 - 4813940 - 4813921 - 4813170 - 4813126 - 4813841 - 4813862 - 5090496 + 5112770 + 5113116 + 5113239 + 5113231 + 5113222 + 5113235 + 5113226 + 5113210 + 5112859 + 5112813 + 5112721 + 5112715 + 5112369 + 5112385 + 5112718 + 5112739 + 5412175 - 4796014 - 4796368 - 4796743 - 4796748 - 4796839 - 4796799 - 4796537 - 4796481 - 4797662 - 4797662 - 4797637 - 4797597 - 4797045 - 4797045 - 4797569 - 4797605 - 5010249 - 5010286 + 5104347 + 5104688 + 5104831 + 5104809 + 5104798 + 5104801 + 5104777 + 5104774 + 5102547 + 5102576 + 5102521 + 5102512 + 5102397 + 5102425 + 5102506 + 5102490 + 5374024 + 5374056 - 4790507 - 4790852 - 4791200 - 4791177 - 4791320 - 4791318 - 4790994 - 4790974 - 4788576 - 4788494 - 4788174 - 4788157 - 4787460 - 4787465 - 4787999 - 4788032 - 4918829 - 4918810 - 4918826 + 5082963 + 5083301 + 5083699 + 5083664 + 5083661 + 5083658 + 5083534 + 5083504 + 5080977 + 5080962 + 5080907 + 5080897 + 5080405 + 5080405 + 5080897 + 5080883 + 5229463 + 5229481 + 5229484 - 4804155 - 4804478 - 4804898 - 4804921 - 4805033 - 4805023 - 4804769 - 4804685 - 4812144 - 4812111 - 4811820 - 4811816 - 4811285 - 4811348 - 4811787 - 4811802 - 4900881 - 4900850 - 4900874 - 4900882 + 5105654 + 5106020 + 5106115 + 5106144 + 5106092 + 5106122 + 5106057 + 5106079 + 5103691 + 5103682 + 5103505 + 5103478 + 5102979 + 5102972 + 5103162 + 5103182 + 5234360 + 5234381 + 5234368 + 5234386 - 4792918 - 4793226 - 4793606 - 4793547 - 4793701 - 4793750 - 4793362 - 4793341 - 4798529 - 4798489 - 4797903 - 4797873 - 4796821 - 4796868 - 4797753 - 4797796 - 4873759 - 4873763 - 4874786 - 4874766 - 4874727 + 5096404 + 5096772 + 5096866 + 5096873 + 5096844 + 5096860 + 5096838 + 5096843 + 5093975 + 5093963 + 5093963 + 5093966 + 5093804 + 5093796 + 5093937 + 5093913 + 5202727 + 5202764 + 5202766 + 5202774 + 5202719 - 4794107 - 4794415 - 4794729 - 4794741 - 4794851 - 4794838 - 4794565 - 4794496 - 4808080 - 4808043 - 4807241 - 4807210 - 4806050 - 4806059 - 4807010 - 4807047 - 4826249 - 4826238 - 4826329 - 4826321 - 4828707 - 4828682 + 5101413 + 5101744 + 5101832 + 5101867 + 5101949 + 5101944 + 5101922 + 5101896 + 5100010 + 5100001 + 5100059 + 5100063 + 5099727 + 5099730 + 5099948 + 5099988 + 5172572 + 5172585 + 5172579 + 5172604 + 5172572 + 5172586 - 4801044 - 4801361 - 4801909 - 4801902 - 4802130 - 4802136 - 4801603 - 4801527 - 4808540 - 4808514 - 4808197 - 4808138 - 4806920 - 4806922 - 4808019 - 4808038 - 4832803 - 4832796 - 4832872 - 4832917 - 4832808 - 4832812 - 4833189 + 5097168 + 5097477 + 5098102 + 5098126 + 5098113 + 5098116 + 5097819 + 5097843 + 5100461 + 5100463 + 5100395 + 5100372 + 5099806 + 5099797 + 5100072 + 5100066 + 5142758 + 5142737 + 5142776 + 5142782 + 5142733 + 5142758 + 5142792 - 4765076 - 4765396 - 4765630 - 4765644 - 4765995 - 4766009 - 4765503 - 4765432 - 4774243 - 4774196 - 4773713 - 4773668 - 4772310 - 4772332 - 4773416 - 4773438 - 4766714 - 4766735 - 4767358 - 4767353 - 4767177 - 4767173 - 4767000 - 4766959 + 5066488 + 5066803 + 5067010 + 5066996 + 5067014 + 5067019 + 5066873 + 5066869 + 5068256 + 5068281 + 5068239 + 5068268 + 5068148 + 5068106 + 5068231 + 5068248 + 5069865 + 5069871 + 5070041 + 5070022 + 5070002 + 5069983 + 5069906 + 5069887 - 5072992 + 5225267 - 4962528 - 9925599 + 5166801 + 10334259 - 5038875 - 10078293 - 10078477 + 5068737 + 10138128 + 10138153 - 4932173 - 9864929 - 9967745 - 9967728 + 5038672 + 10078085 + 10078100 + 10078129 - 4906024 - 9826867 - 9888521 - 9888486 - 9898023 + 4966846 + 9934443 + 9929990 + 9930031 + 9934277 - 4850756 - 9702095 - 9750762 - 9750719 - 9746840 - 9746790 + 4916586 + 9833975 + 9825317 + 9825283 + 9823152 + 9823147 - 4852084 - 9705654 - 9709428 - 9709396 - 9709232 - 9709222 - 9714922 + 4924329 + 9849424 + 9797729 + 9797679 + 9777637 + 9777588 + 9851398 - 4755771 - 9514401 - 9511021 - 9510974 - 9517350 - 9517406 - 9514613 - 9514668 + 4805055 + 9606413 + 9509161 + 9509050 + 9501247 + 9501316 + 9509149 + 9509140 - 4790111 - 9580972 - 9581218 - 9581319 - 9583908 - 9583959 - 9584004 - 9583887 - 10398075 + 4833974 + 9665377 + 9584398 + 9584381 + 9584149 + 9584214 + 9586949 + 9586901 + 10401720 - 4768591 - 9539114 - 9537355 - 9537336 - 9537319 - 9537300 - 9538658 - 9538610 - 10279653 - 10279617 + 4820379 + 9638645 + 9552820 + 9552796 + 9558263 + 9558209 + 9560935 + 9560915 + 10305781 + 10305749 - 4796679 - 9596927 - 9594490 - 9594422 - 9594538 - 9594549 - 9596674 - 9596626 - 10130561 - 10130614 - 10130558 + 4840158 + 9676841 + 9586824 + 9586883 + 9582521 + 9582558 + 9592077 + 9592102 + 10150747 + 10150764 + 10150754 - 4784029 - 9568798 - 9568918 - 9568836 - 9566648 - 9566532 - 9570102 - 9569977 - 10017060 - 10017061 - 10017116 - 10017015 + 4825791 + 9649286 + 9547942 + 9547957 + 9552256 + 9552178 + 9552992 + 9553004 + 10038779 + 10038753 + 10038846 + 10038817 - 4764852 - 9530405 - 9532744 - 9532647 - 9532718 - 9532742 - 9533836 - 9533868 - 9926429 - 9926438 - 9926448 - 9926457 - 9926358 + 4817588 + 9629152 + 9531614 + 9531611 + 9548515 + 9548489 + 9535653 + 9535614 + 9920814 + 9920827 + 9920923 + 9920944 + 9920774 - 4783049 - 9566835 - 9565521 - 9565537 - 9565670 - 9565683 - 9570157 - 9570074 - 9900524 - 9900479 - 9897313 - 9897270 - 9900512 - 9900554 + 4837153 + 9666304 + 9559311 + 9559296 + 9581736 + 9581732 + 9567833 + 9567833 + 9905222 + 9905216 + 9898218 + 9898132 + 9901199 + 9901243 - 4780436 - 9561581 - 9561943 - 9561865 - 9561883 - 9561917 - 9563005 - 9562997 - 9828126 - 9828153 - 9828089 - 9828104 - 9828114 - 9828138 - 9828167 + 4837790 + 9662986 + 9553381 + 9553308 + 9572673 + 9572690 + 9560013 + 9560081 + 9796725 + 9796605 + 9796645 + 9796579 + 9796596 + 9796603 + 9807424 - 4764148 - 9530289 - 9529342 - 9529280 - 9531773 - 9531763 - 9530490 - 9530455 - 9621782 - 9621795 - 9616731 - 9616804 - 9617129 - 9617082 - 9617118 - 9617171 + 4819748 + 9630844 + 9521261 + 9521286 + 9538352 + 9538400 + 9528631 + 9528574 + 9599403 + 9599408 + 9593624 + 9593565 + 9598354 + 9598392 + 9590046 + 9590025 - 4778215 - 9558598 - 9556736 - 9556649 - 9556575 - 9556615 - 9562358 - 9562318 - 9684103 - 9684130 - 9685658 - 9685700 - 9684449 - 9684475 - 9682895 - 9682988 - 10382040 + 4843640 + 9677382 + 9574739 + 9574753 + 9613754 + 9613763 + 9585500 + 9585468 + 9633283 + 9633285 + 9623252 + 9623221 + 9639277 + 9639260 + 9617578 + 9617623 + 10385769 - 4778043 - 9557164 - 9557528 - 9557413 - 9556419 - 9556509 - 9560460 - 9560431 - 9671582 - 9671523 - 9665710 - 9665664 - 9676124 - 9676148 - 9666808 - 9666840 - 10336645 - 10336684 + 4838791 + 9669254 + 9528902 + 9528883 + 9552348 + 9552364 + 9534275 + 9534319 + 9634509 + 9634467 + 9633743 + 9633774 + 9628821 + 9628839 + 9631765 + 9631763 + 10325357 + 10325390 - 4763907 - 9528534 - 9528834 - 9528820 - 9528934 - 9528846 - 9531069 - 9531036 - 9618115 - 9618193 - 9610325 - 9610304 - 9612985 - 9613019 - 9611601 - 9611614 - 10068951 - 10068844 - 10068955 + 4825288 + 9639270 + 9508306 + 9508279 + 9540294 + 9540209 + 9514625 + 9514580 + 9589609 + 9589607 + 9589134 + 9589142 + 9596436 + 9596481 + 9586957 + 9586978 + 10079683 + 10079584 + 10079670 - 4791404 - 9583508 - 9582193 - 9582156 - 9585610 - 9585624 - 9586734 - 9586722 - 9680534 - 9680516 - 9680465 - 9680497 - 9686285 - 9686291 - 9686322 - 9686302 - 10036011 - 10035954 - 10036056 - 10036037 + 4836825 + 9664946 + 9559892 + 9559840 + 9589501 + 9589502 + 9570431 + 9570494 + 9658185 + 9658169 + 9644496 + 9644537 + 9651160 + 9651195 + 9651183 + 9651211 + 10033574 + 10033572 + 10033679 + 10033654 - 4754370 - 9509416 - 9510433 - 9510429 - 9510453 - 9510480 - 9510464 - 9510486 - 9637551 - 9637533 - 9630118 - 9630094 - 9637313 - 9637317 - 9633075 - 9633131 - 9906388 - 9906356 - 9906452 - 9906433 - 9906331 + 4816488 + 9622608 + 9503860 + 9503846 + 9527045 + 9527167 + 9504398 + 9504320 + 9567095 + 9567140 + 9571523 + 9571563 + 9592986 + 9593058 + 9566983 + 9566932 + 9906743 + 9906682 + 9906864 + 9906799 + 9906666 - 4793804 - 9588831 - 9592183 - 9592179 - 9589789 - 9589747 - 9594462 - 9594373 - 9689828 - 9689754 - 9687316 - 9687309 - 9692202 - 9692267 - 9687299 - 9687261 - 9908670 - 9908658 - 9908723 - 9908695 - 9908602 - 9908659 + 4850702 + 9689790 + 9583220 + 9583229 + 9617711 + 9617759 + 9585836 + 9585794 + 9659288 + 9659321 + 9654353 + 9654318 + 9656945 + 9656947 + 9653458 + 9653445 + 9943913 + 9943831 + 9943913 + 9943893 + 9943825 + 9943827 - 4767862 - 9536452 - 9536849 - 9536785 - 9536917 - 9536921 - 9537996 - 9537978 - 9652615 - 9652652 - 9643191 - 9643198 - 9648070 - 9648097 - 9643300 - 9643279 - 9800961 - 9800878 - 9801012 - 9801009 - 9804896 - 9804791 - 9804881 + 4836346 + 9661592 + 9520904 + 9520822 + 9554622 + 9554576 + 9527523 + 9527549 + 9641343 + 9641431 + 9642853 + 9642821 + 9642428 + 9642446 + 9630002 + 9630003 + 9837111 + 9837142 + 9837156 + 9837144 + 9837098 + 9837129 + 9837223 - 4765337 - 9531410 - 9530051 - 9530048 - 9530089 - 9530086 - 9533449 - 9533496 - 9636408 - 9636481 - 9631851 - 9631931 - 9629594 - 9629646 - 9631963 - 9631893 - 9674699 - 9674651 - 9668731 - 9668794 - 9680257 - 9680139 - 9677290 - 9677119 + 4819502 + 9625704 + 9513438 + 9513408 + 9559163 + 9559155 + 9523190 + 9523027 + 9598788 + 9598791 + 9591956 + 9591987 + 9605085 + 9605093 + 9586744 + 9586780 + 9623897 + 9623912 + 9621075 + 9621100 + 9613049 + 9613061 + 9621228 + 9621171 - 5111386 + 5341833 - 300708 - 300654 + 304631 + 304631 - 73042 - 73042 - 73042 + 73387 + 73387 + 73386 - 68210 - 68210 - 68209 - 68210 + 92247 + 92247 + 92248 + 92247 - 42402 - 42402 - 42402 - 42402 - 42402 + 67070 + 67070 + 67070 + 67070 + 67070 - 32188 - 32188 - 32187 - 32187 - 32188 - 32187 + 32566 + 32567 + 32566 + 32566 + 32567 + 32566 - 27557 - 27558 - 27558 - 27557 - 27558 - 27557 - 27557 + 27150 + 27150 + 27150 + 27150 + 27151 + 27151 + 27150 - 41806 - 41806 - 41806 - 41807 - 41806 - 41806 - 41807 - 41806 + 23327 + 23327 + 23327 + 23326 + 23327 + 23326 + 23327 + 23327 - 37737 - 37737 - 37738 - 37737 - 37737 - 37738 - 37737 - 37737 - 37737 + 20818 + 20818 + 20819 + 20817 + 20818 + 20818 + 20818 + 20818 + 20817 - 11603 - 11603 - 11603 - 11603 - 11603 - 11603 - 11603 - 11603 - 11603 - 11602 + 11624 + 11624 + 11623 + 11624 + 11624 + 11623 + 11624 + 11624 + 11624 + 11624 - 9960 - 9960 - 9960 - 9960 - 9960 - 9960 - 9960 - 9960 - 9960 - 9960 - 9960 + 30629 + 30629 + 30629 + 30628 + 30629 + 30629 + 30628 + 30629 + 30629 + 30629 + 30629 - 14725 - 14726 - 14725 - 14725 - 14725 - 14725 - 14725 - 14725 - 14725 - 14725 - 14725 - 14725 + 15150 + 15150 + 15151 + 15150 + 15150 + 15150 + 15150 + 15150 + 15150 + 15150 + 15151 + 15150 - 12346 - 12346 - 12345 - 12346 - 12346 - 12346 - 12346 - 12345 - 12346 - 12346 - 12346 - 12346 - 12346 + 7807 + 7807 + 7807 + 7807 + 7808 + 7808 + 7807 + 7807 + 7807 + 7807 + 7807 + 7807 + 7807 - 22716 - 22716 - 22716 - 22717 - 22716 - 22717 - 22716 - 22717 - 22717 - 22717 - 22717 - 22717 - 22716 - 22716 + 7226 + 7227 + 7227 + 7227 + 7227 + 7226 + 7227 + 7226 + 7226 + 7227 + 7227 + 7226 + 7226 + 7227 - 9648 - 9649 - 9648 - 9649 - 9649 - 9649 - 9648 - 9648 - 9649 - 9649 - 9648 - 9648 - 9649 - 9649 - 9649 + 9785 + 9785 + 9785 + 9785 + 9784 + 9785 + 9784 + 9785 + 9785 + 9785 + 9785 + 9785 + 9785 + 9785 + 9785 - 5448 - 5449 - 5449 - 5448 - 5448 - 5449 - 5448 - 5448 - 5449 - 5449 - 5449 - 5449 - 5448 - 5449 - 5449 - 5449 + 20042 + 20042 + 20041 + 20041 + 20041 + 20041 + 20041 + 20042 + 20041 + 20041 + 20041 + 20042 + 20041 + 20042 + 20041 + 20041 - 4569 - 4570 - 4570 - 4570 - 4570 - 4570 - 4570 - 4570 - 4570 - 4570 - 4570 - 4570 - 4569 - 4570 - 4570 - 4570 - 4570 + 4657 + 4656 + 4656 + 4656 + 4657 + 4657 + 4657 + 4657 + 4657 + 4656 + 4656 + 4656 + 4656 + 4656 + 4656 + 4656 + 4657 - 7239 - 7239 - 7239 - 7240 - 7240 - 7240 - 7240 - 7240 - 7239 - 7240 - 7240 - 7240 - 7239 - 7240 - 7239 - 7239 - 7240 - 7240 + 4382 + 4381 + 4381 + 4382 + 4381 + 4381 + 4381 + 4382 + 4381 + 4382 + 4382 + 4381 + 4382 + 4382 + 4382 + 4382 + 4382 + 4382 - 6038 - 6038 - 6039 - 6038 - 6038 - 6039 - 6039 - 6039 - 6039 - 6039 - 6039 - 6039 - 6038 - 6038 - 6038 - 6038 - 6039 - 6039 - 6038 + 3768 + 3769 + 3769 + 3769 + 3769 + 3768 + 3769 + 3769 + 3768 + 3768 + 3769 + 3768 + 3768 + 3769 + 3768 + 3769 + 3769 + 3769 + 3769 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 - 3505 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5562 + 5562 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 + 5561 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3075 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 - 3076 + 5568 + 5569 + 5569 + 5569 + 5569 + 5569 + 5569 + 5569 + 5569 + 5568 + 5568 + 5568 + 5568 + 5568 + 5569 + 5569 + 5569 + 5569 + 5568 + 5568 + 5568 - 5213 - 5214 - 5213 - 5214 - 5213 - 5214 - 5213 - 5213 - 5214 - 5214 - 5214 - 5213 - 5213 - 5213 - 5213 - 5213 - 5213 - 5213 - 5213 - 5214 - 5213 - 5213 + 2975 + 2975 + 2975 + 2975 + 2974 + 2975 + 2975 + 2974 + 2974 + 2975 + 2975 + 2975 + 2974 + 2975 + 2975 + 2975 + 2975 + 2975 + 2975 + 2975 + 2975 + 2975 - 4662 - 4662 - 4661 - 4661 - 4662 - 4662 - 4662 - 4662 - 4662 - 4662 - 4662 - 4662 - 4661 - 4662 - 4661 - 4662 - 4662 - 4662 - 4662 - 4662 - 4662 - 4662 - 4662 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4756 + 4755 + 4754 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 + 4755 - 2558 - 2557 - 2557 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2558 - 2557 - 2558 - 2558 - 2557 - 2558 - 2558 - 2557 + 2549 + 2550 + 2549 + 2549 + 2549 + 2549 + 2549 + 2549 + 2549 + 2549 + 2549 + 2550 + 2549 + 2549 + 2550 + 2549 + 2549 + 2550 + 2550 + 2550 + 2549 + 2549 + 2549 + 2549 - 4882349 + 5257548 - 4830466 - 4830801 + 5199971 + 5200293 - 4762690 - 4763010 - 4817829 + 5133900 + 5134258 + 5134217 - 4731164 - 4731483 - 4564347 - 4731582 + 5102483 + 5102845 + 4816857 + 5100989 - 4660954 - 4661297 - 4216911 - 4216948 - 4835704 + 5054105 + 5054381 + 4411752 + 4411819 + 5054558 - 4622566 - 4622880 - 4185957 - 4185913 - 4635274 - 4635290 + 4987762 + 4988068 + 4408549 + 4408641 + 4985405 + 4985439 - 4573546 - 4573891 - 4147486 - 4147531 - 4624745 - 4624787 - 4786073 + 4968832 + 4968572 + 4371725 + 4371801 + 4960839 + 4960790 + 5033473 - 4506068 - 4506456 - 4092937 - 4092962 - 4560721 - 4560685 - 4168112 - 4493324 + 4858643 + 4858836 + 4311523 + 4311452 + 4823809 + 4823841 + 4358684 + 4831042 - 4537571 - 4537941 - 4137750 - 4137765 - 4596934 - 4596919 - 4185219 - 2835926 - 3057505 + 4927299 + 4927240 + 4353676 + 4353662 + 4899096 + 4899085 + 4400264 + 2936864 + 3757231 - 4514820 - 4515188 - 4117947 - 4117966 - 4573928 - 4573938 - 4165301 - 2820129 - 3086981 - 4839254 + 4893144 + 4893469 + 4331260 + 4331222 + 4861815 + 4861857 + 4379044 + 2922886 + 3543811 + 4993679 - 4508313 - 4508667 - 4113148 - 4113185 - 4568540 - 4568516 - 4160465 - 2816040 - 3028537 - 4761666 - 4878903 + 4896798 + 4896728 + 4327381 + 4327398 + 4867391 + 4866892 + 4373940 + 2918654 + 3422682 + 4952001 + 5154678 - 4542098 - 4542475 - 4143724 - 4143760 - 4602012 - 4602017 - 4190148 - 2832717 - 3029594 - 4735994 - 4396533 - 4721989 + 4884474 + 4884414 + 4314847 + 4314843 + 4856054 + 4855604 + 4360775 + 2908813 + 3311073 + 4930336 + 4533752 + 5021378 - 4521330 - 4521686 - 4124320 - 4124323 - 4582198 - 4582176 - 4170536 - 2818740 - 3001307 - 4677837 - 4185718 - 4185643 - 4864109 + 4911154 + 4911081 + 4338761 + 4338763 + 4883124 + 4883129 + 4384591 + 2924687 + 3293462 + 4931268 + 4470695 + 4470730 + 5065865 - 4539029 - 4539404 - 4139986 - 4140019 - 4597587 - 4597604 - 4186201 - 2828901 - 3003126 - 4643326 - 4165105 - 4165021 - 4701713 - 4685522 + 4929539 + 4929454 + 4354469 + 4354473 + 4901767 + 4901737 + 4399845 + 2935009 + 3252387 + 4926826 + 4428270 + 4428318 + 4990668 + 4990644 - 4526957 - 4527319 - 4127948 - 4127957 - 4587145 - 4587118 - 4174751 - 2818427 - 2976730 - 4584077 - 4115490 - 4115171 - 4700728 - 4699314 - 4698548 + 4916844 + 4916784 + 4343694 + 4343679 + 4888227 + 4887772 + 4388919 + 2926405 + 3175836 + 4878666 + 4343875 + 4343884 + 4934011 + 4933955 + 4955575 - 4507322 - 4507674 - 4111240 - 4111250 - 4566906 - 4566936 - 4157178 - 2806301 - 2951744 - 4524611 - 4077697 - 4077350 - 4631444 - 4630772 - 4138793 - 4613463 + 4896457 + 4896353 + 4325340 + 4325336 + 4868496 + 4868486 + 4369321 + 2913860 + 3133505 + 4824685 + 4283415 + 4283404 + 4847929 + 4847909 + 4286927 + 4845277 - 4521772 - 4522113 - 4123993 - 4124048 - 4581945 - 4581968 - 4165298 - 2802720 - 2956098 - 4543990 - 4105130 - 4104676 - 4648153 - 4647960 - 4175102 - 2848662 - 3226520 + 4902667 + 4902690 + 4337758 + 4337700 + 4879699 + 4879669 + 4373012 + 2914711 + 3136292 + 4846060 + 4320555 + 4320609 + 4890469 + 4890443 + 4343241 + 2937324 + 3831072 - 4511810 - 4512183 - 4115450 - 4115472 - 4572220 - 4572211 - 4156322 - 2796812 - 2948327 - 4534303 - 4096307 - 4095853 - 4637814 - 4637601 - 4166098 - 2841750 - 3245175 - 4732628 + 4892016 + 4892023 + 4328488 + 4328489 + 4869400 + 4869397 + 4363378 + 2908289 + 3128285 + 4835739 + 4311626 + 4311628 + 4878044 + 4878019 + 4333484 + 2930101 + 3596473 + 4938496 - 4494518 - 4494876 - 4100456 - 4100482 - 4552968 - 4552969 - 4140182 - 2786006 - 2936579 - 4516298 - 4080539 - 4080110 - 4619739 - 4615851 - 4149824 - 2827911 - 3094830 - 4737845 - 4909994 + 4872971 + 4872990 + 4311072 + 4311039 + 4850667 + 4850686 + 4346385 + 2896983 + 3113972 + 4817933 + 4294170 + 4294199 + 4860042 + 4859993 + 4316524 + 2918167 + 3480053 + 4863065 + 5085765 - 4537926 - 4538297 - 4140151 - 4140214 - 4598260 - 4598281 - 4180931 - 2813327 - 2964938 - 4558534 - 4121850 - 4121458 - 4653022 - 4625071 - 4192564 - 2852273 - 3089570 - 4665486 - 4500078 - 4748717 + 4894225 + 4894229 + 4330591 + 4330543 + 4871718 + 4871672 + 4365453 + 2909659 + 3127620 + 4839252 + 4313555 + 4313593 + 4881294 + 4881275 + 4335579 + 2928350 + 3411761 + 4862813 + 4466183 + 4983876 - 4506238 - 4506585 - 4109690 - 4109729 - 4565633 - 4565659 - 4150836 - 2793178 - 2943733 - 4525822 - 4091904 - 4091471 - 4620995 - 4593422 - 4162306 - 2831267 - 3066943 - 4615680 - 4177490 - 4164639 - 4841804 + 4885343 + 4885384 + 4322681 + 4322665 + 4862749 + 4862765 + 4357529 + 2904362 + 3121191 + 4831048 + 4306261 + 4306280 + 4871980 + 4871978 + 4327732 + 2921120 + 3358065 + 4837694 + 4374223 + 4373167 + 5046876 - 4535348 - 4535717 - 4136921 - 4136922 - 4594637 - 4594640 - 4177849 - 2811314 - 2961372 - 4558287 - 4117777 - 4117356 - 4662354 - 4662161 - 4188050 - 2848771 - 3081546 - 4610526 - 4172361 - 4161409 - 4644681 - 4644681 + 4917373 + 4917455 + 4350935 + 4350914 + 4894201 + 4894213 + 4385936 + 2923334 + 3140251 + 4862799 + 4334358 + 4334385 + 4904387 + 4904330 + 4355889 + 2938856 + 3334707 + 4843815 + 4353751 + 4352957 + 5037615 + 5037607 - 4511813 - 4512190 - 4114974 - 4115003 - 4569626 - 4569635 - 4155888 - 2796819 - 2945300 - 4534228 - 4042891 - 4043219 - 4634303 - 4632688 - 4167588 - 2826061 - 3051661 - 4530039 - 4095261 - 4077873 - 4587395 - 4587374 - 4752621 + 4891201 + 4891259 + 4328060 + 4328002 + 4868075 + 4868054 + 4362662 + 2907808 + 3122748 + 4837883 + 4312307 + 4312307 + 4878818 + 4878785 + 4332238 + 2917748 + 3248956 + 4783436 + 4251175 + 4250434 + 4952144 + 4952132 + 5001587 - 4504620 - 4504991 - 4107496 - 4107535 - 4564882 - 4564899 - 4149509 - 2792657 - 2941266 - 4524475 - 4036120 - 4036487 - 4616878 - 4591854 - 4162953 - 2823165 - 3036543 - 4477200 - 4064699 - 4047385 - 4559065 - 4559081 - 4151114 - 4600953 + 4883756 + 4883800 + 4321380 + 4321323 + 4861589 + 4861564 + 4356491 + 2903739 + 3117123 + 4830847 + 4305790 + 4305824 + 4872584 + 4872526 + 4325830 + 2913830 + 3214721 + 4745806 + 4227730 + 4226117 + 4930236 + 4931632 + 4352739 + 4797551 - 3746153 + 3769434 - 3344488 - 3344692 + 3385095 + 3385285 - 3327136 - 3206108 - 3256843 + 3339239 + 3167823 + 3211955 - 3287967 - 3170712 - 3194293 - 3451498 + 3306779 + 3156979 + 3169396 + 3482933 - 3236460 - 3111433 - 3138761 - 3032560 - 3067160 + 3254085 + 3092427 + 3106808 + 3058558 + 3091783 - 3243635 - 3115097 - 3137713 - 3027752 - 2857631 - 3204949 + 3255650 + 3085739 + 3100795 + 3050525 + 2891481 + 3246992 - 3220427 - 3091000 - 3115755 - 3005334 - 2836181 - 3149587 - 3559245 + 3221364 + 3062670 + 3082448 + 3022200 + 2871363 + 3187577 + 3577767 - 3165843 - 3029598 - 3062458 - 2958661 - 2769177 - 3154374 - 3197750 - 3197458 + 3161735 + 2999307 + 3029482 + 2975119 + 2817730 + 3132065 + 3177437 + 3172276 - 3198006 - 3063414 - 3091015 - 2989311 - 2791770 - 3175297 - 2875644 - 1712071 - 1553165 + 3198007 + 3027496 + 3053006 + 3007006 + 2843266 + 3154052 + 2873918 + 1599417 + 1568203 - 3181341 - 3047433 - 3075315 - 2973609 - 2777603 - 3159104 - 2862823 - 1713462 - 1517397 - 3402781 + 3180947 + 3012982 + 3038317 + 2991312 + 2821662 + 3179096 + 2872104 + 1590835 + 1546797 + 3497342 - 3176624 - 3043019 - 3070564 - 2969149 - 2773521 - 3154642 - 2859136 - 1716890 - 1499918 - 3143909 - 3436830 + 3176460 + 3005994 + 3031401 + 2987554 + 2813677 + 3188886 + 2810694 + 1623349 + 1534724 + 3211665 + 3406831 - 3198274 - 3063859 - 3091361 - 2989592 - 2792472 - 3176532 - 2879997 - 1730824 - 1501013 - 3145968 - 3014305 - 3140519 + 3198351 + 3030701 + 3055653 + 3007809 + 2834949 + 3209918 + 2830122 + 1635407 + 1536703 + 3216021 + 2943044 + 3126263 - 3182167 - 3048430 - 3076189 - 2966893 - 2848982 - 3148364 - 2866325 - 1723446 - 1489224 - 3106020 - 2967732 - 3060913 - 3501367 + 3182429 + 3018335 + 3042276 + 2992793 + 2822946 + 3193772 + 2835847 + 1618322 + 1524838 + 3178023 + 2913816 + 3029912 + 3568471 - 3178501 - 3044604 - 3072402 - 2961271 - 2866201 - 3141549 - 2863667 - 1722793 - 1482601 - 3083683 - 2940072 - 3032846 - 3460354 - 3557416 + 3178357 + 3011279 + 3036707 + 2989550 + 2815828 + 3191277 + 2882510 + 1593406 + 1513141 + 3160226 + 2873992 + 2989764 + 3504693 + 3582013 - 3183750 - 3049728 - 3077563 - 2966205 - 2871188 - 3146783 - 2867093 - 1725323 - 1475169 - 3076943 - 2914598 - 3001757 - 3453483 - 3189637 - 3192959 + 3183698 + 3018071 + 3042371 + 2994325 + 2821014 + 3196236 + 2886229 + 1597501 + 1510005 + 3149666 + 2846258 + 2958741 + 3481974 + 3148039 + 3167968 - 3186698 - 3052302 - 3080167 - 2968899 - 2874005 - 3150583 - 2868580 - 1726947 - 1469534 - 3062004 - 2895714 - 2978341 - 3432041 - 3188518 - 2906973 - 2993042 + 3186316 + 3018484 + 3044234 + 2996310 + 2824552 + 3198307 + 2884231 + 1601966 + 1507804 + 3131206 + 2831464 + 2940736 + 3460619 + 3155850 + 2870289 + 3113742 - 3198040 - 3064304 - 3091853 - 2978852 - 2884118 - 3160527 - 2881496 - 1728014 - 1491461 - 3067842 - 2912051 - 2996007 - 3448011 - 3221944 - 2668691 - 2601892 - 3235558 + 3198056 + 3030086 + 3056824 + 3007264 + 2832279 + 3210618 + 2906594 + 1599854 + 1510617 + 3146581 + 2846267 + 2958482 + 3477194 + 3189754 + 2657508 + 2647012 + 3293936 - 3190067 - 3056078 - 3083768 - 2971426 - 2876717 - 3153276 - 2874361 - 1728766 - 1469002 - 3060775 - 2904081 - 2987946 - 3439080 - 3214220 - 2662523 - 2639795 - 2896924 - 3219820 + 3190252 + 3024080 + 3049573 + 2999589 + 2829922 + 3195389 + 2888563 + 1600137 + 1507433 + 3137657 + 2840688 + 2950241 + 3468218 + 3181779 + 2652786 + 2682737 + 2909275 + 3177474 - 3176453 - 3043220 - 3070717 - 2958731 - 2864704 - 3140096 - 2862066 - 1723012 - 1456441 - 3048014 - 2891575 - 2974972 - 3424349 - 3200672 - 2651647 - 2635696 - 2819274 - 2873016 - 3107013 + 3176661 + 3012400 + 3037556 + 2986391 + 2824347 + 3153245 + 2889323 + 1588672 + 1500238 + 3125218 + 2828045 + 2937731 + 3453155 + 3168493 + 2637931 + 2694095 + 2830483 + 2836443 + 3113924 - 3189412 - 3055665 - 3083220 - 2970754 - 2876191 - 3152268 - 2873773 - 1730132 - 1462174 - 3060590 - 2903398 - 2986952 - 3438360 - 3213754 - 2662331 - 2649781 - 2802967 - 2866463 - 3031396 - 3458367 + 3189595 + 3025773 + 3050985 + 2999022 + 2826150 + 3201857 + 2886401 + 1599415 + 1506463 + 3136934 + 2837263 + 2950592 + 3467171 + 3181457 + 2648289 + 2710813 + 2814766 + 2831495 + 3028834 + 3446279 - 3182453 - 3049186 - 3076793 - 2964302 - 2870203 - 3145592 - 2867188 - 1726361 - 1458605 - 3053848 - 2897101 - 2980729 - 3430751 - 3206817 - 2657046 - 2647356 - 2771157 - 2822154 - 3022680 - 3044376 - 3103862 + 3182439 + 3016351 + 3041304 + 2992119 + 2822421 + 3194329 + 2900045 + 1589831 + 1502025 + 3132118 + 2832957 + 2942419 + 3459914 + 3174499 + 2647046 + 2689219 + 2782923 + 2795683 + 2973589 + 3028641 + 3100674 - 3170078 - 3037153 - 3064765 - 2952682 - 2858828 - 3133158 - 2855855 - 1719330 - 1453240 - 3041766 - 2885730 - 2969070 - 3417330 - 3194302 - 2647195 - 2639118 - 2741933 - 2786643 - 2994265 - 2997005 - 2908098 - 3265213 + 3170057 + 3009447 + 3034606 + 2981002 + 2807260 + 3182798 + 2878032 + 1586564 + 1496911 + 3118512 + 2821648 + 2932625 + 3446386 + 3162339 + 2634829 + 2679131 + 2755022 + 2764529 + 2940773 + 2985684 + 2885674 + 3232768 - 3184153 - 3050424 - 3078063 - 2965952 - 2871372 - 3146882 - 2868629 - 1727341 - 1459126 - 3055071 - 2898435 - 2982072 - 3432491 - 3208568 - 2658776 - 2653808 - 2729120 - 2776466 - 2989442 - 2984471 - 2910362 - 3200833 - 3499204 + 3184217 + 3018376 + 3043274 + 2994175 + 2822448 + 3196186 + 2876625 + 1597999 + 1504184 + 3131575 + 2832523 + 2945528 + 3461485 + 3176252 + 2647238 + 2696639 + 2745802 + 2752234 + 2930202 + 2974472 + 2880123 + 3166815 + 3581146 - 3178282 - 3044974 - 3072611 - 2960372 - 2866172 - 3141359 - 2863295 - 1723864 - 1456804 - 3049538 - 2893111 - 2976701 - 3426147 - 3202916 - 2652516 - 2650420 - 2699240 - 2730310 - 2966197 - 2953594 - 2870352 - 3167559 - 3174731 - 3176479 + 3178290 + 3008119 + 3034629 + 2988650 + 2817171 + 3190030 + 2878939 + 1592450 + 1501010 + 3126600 + 2827082 + 2941213 + 3455213 + 3170615 + 2642501 + 2686327 + 2717129 + 2711596 + 2908706 + 2945763 + 2846716 + 3143228 + 3214780 + 3214956 - 3645894 + 3679180 - 2120655 - 4241764 + 2126901 + 4254365 - 1457766 - 2915850 - 2915867 + 1458523 + 2917434 + 2917346 - 1252758 - 2505822 - 2505810 - 2505794 + 1266192 + 2532659 + 2532704 + 2532696 - 983621 - 1967514 - 1967502 - 1967478 - 1967469 + 993162 + 1986551 + 1986569 + 1986577 + 1986566 - 886604 - 1773454 - 1773406 - 1773406 - 1773412 - 1773405 + 882623 + 1765442 + 1765448 + 1765457 + 1765469 + 1765489 - 736142 - 1472465 - 1472455 - 1472454 - 1472455 - 1472445 - 1472509 + 744852 + 1489839 + 1489824 + 1489833 + 1489807 + 1489821 + 1489951 - 671997 - 1344121 - 1344053 - 1344023 - 1344056 - 1344078 - 1344065 - 1344066 + 674425 + 1348991 + 1348900 + 1348894 + 1348909 + 1348906 + 1348901 + 1348897 - 225930 - 451834 - 451646 - 451651 - 451620 - 451603 - 451647 - 451863 - 451919 + 225093 + 450125 + 449997 + 449978 + 450052 + 450080 + 450007 + 449962 + 450230 - 196680 - 393358 - 393304 - 393306 - 393292 - 393286 - 393263 - 393380 - 393428 - 393421 + 196293 + 392574 + 392516 + 392492 + 392550 + 392570 + 392514 + 392504 + 392646 + 392645 - 177162 - 354320 - 354266 - 354260 - 354216 - 354229 - 354230 - 354341 - 354369 - 354375 - 354398 + 177342 + 354623 + 354608 + 354592 + 354634 + 354644 + 354592 + 354566 + 354723 + 354727 + 354735 - 166432 - 332858 - 332803 - 332792 - 332800 - 332798 - 332803 - 332859 - 332891 - 332894 - 332891 - 332895 + 165840 + 331669 + 331668 + 331663 + 331668 + 331679 + 331671 + 331668 + 331727 + 331729 + 331725 + 331729 - 152246 - 304490 - 304458 - 304451 - 304447 - 304441 - 304461 - 304495 - 304510 - 304510 - 304503 - 304511 - 304524 + 151201 + 302394 + 302396 + 302398 + 302407 + 302409 + 302395 + 302390 + 302431 + 302430 + 302432 + 302427 + 302442 - 142958 - 285923 - 285904 - 285898 - 285901 - 285894 - 285898 - 285920 - 285936 - 285932 - 285928 - 285929 - 285931 - 285934 + 141850 + 283694 + 283703 + 283698 + 283697 + 283704 + 283696 + 283691 + 283723 + 283724 + 283722 + 283723 + 283722 + 283721 - 131739 - 263482 - 263469 - 263468 - 263465 - 263466 - 263467 - 263479 - 263490 - 263487 - 263478 - 263484 - 263483 - 263485 - 263507 + 130255 + 260504 + 260504 + 260509 + 260508 + 260511 + 260503 + 260505 + 260523 + 260520 + 260521 + 260521 + 260521 + 260520 + 260536 - 123039 - 246069 - 246058 - 246058 - 246064 - 246065 - 246064 - 246075 - 246068 - 246068 - 246066 - 246075 - 246060 - 246064 - 246066 - 246071 + 119400 + 238798 + 238801 + 238800 + 238798 + 238807 + 238800 + 238797 + 238806 + 238804 + 238800 + 238804 + 238801 + 238803 + 238802 + 238804 - 115112 - 230220 - 230212 - 230212 - 230212 - 230217 - 230214 - 230219 - 230217 - 230216 - 230213 - 230217 - 230216 - 230218 - 230220 - 230213 - 230251 + 112096 + 224192 + 224192 + 224192 + 224196 + 224199 + 224193 + 224191 + 224199 + 224197 + 224191 + 224193 + 224194 + 224192 + 224193 + 224191 + 224210 - 106334 - 212672 - 212667 - 212665 - 212662 - 212669 - 212666 - 212670 - 212671 - 212669 - 212662 - 212670 - 212663 - 212667 - 212672 - 212668 - 212679 - 212676 + 104212 + 208426 + 208425 + 208429 + 208429 + 208430 + 208427 + 208425 + 208432 + 208427 + 208426 + 208430 + 208429 + 208427 + 208425 + 208430 + 208435 + 208435 - 99246 - 198499 - 198492 - 198489 - 198490 - 198491 - 198489 - 198494 - 198495 - 198494 - 198492 - 198495 - 198491 - 198495 - 198496 - 198496 - 198499 - 198497 - 198504 + 97263 + 194530 + 194530 + 194532 + 194530 + 194532 + 194533 + 194529 + 194532 + 194534 + 194532 + 194530 + 194530 + 194532 + 194533 + 194529 + 194532 + 194532 + 194535 - 95591 - 191183 - 191183 - 191183 - 191181 - 191184 - 191183 - 191188 - 191185 - 191183 - 191182 - 191183 - 191182 - 191184 - 191189 - 191184 - 191187 - 191188 - 191186 - 191189 + 93992 + 187991 + 187989 + 187990 + 187990 + 187991 + 187991 + 187990 + 187994 + 187991 + 187991 + 187991 + 187991 + 187991 + 187989 + 187988 + 187994 + 187994 + 187990 + 187995 - 90273 - 180554 - 180552 - 180549 - 180548 - 180551 - 180547 - 180552 - 180552 - 180550 - 180549 - 180553 - 180551 - 180550 - 180552 - 180548 - 180555 - 180553 - 180555 - 180556 - 180558 + 88603 + 177210 + 177209 + 177206 + 177211 + 177211 + 177208 + 177209 + 177212 + 177209 + 177212 + 177208 + 177207 + 177209 + 177211 + 177211 + 177216 + 177213 + 177212 + 177214 + 177215 - 85959 - 171925 - 171921 - 171925 - 171922 - 171924 - 171920 - 171926 - 171925 - 171924 - 171921 - 171921 - 171922 - 171925 - 171924 - 171923 - 171927 - 171928 - 171929 - 171927 - 171927 - 171928 + 84192 + 168389 + 168391 + 168387 + 168390 + 168389 + 168389 + 168387 + 168388 + 168389 + 168388 + 168387 + 168387 + 168390 + 168388 + 168387 + 168393 + 168392 + 168392 + 168392 + 168392 + 168392 - 81405 - 162813 - 162808 - 162810 - 162811 - 162810 - 162811 - 162810 - 162814 - 162810 - 162811 - 162812 - 162810 - 162812 - 162811 - 162812 - 162815 - 162813 - 162813 - 162816 - 162815 - 162814 - 162818 + 80033 + 160071 + 160070 + 160070 + 160072 + 160072 + 160071 + 160069 + 160073 + 160070 + 160072 + 160072 + 160070 + 160070 + 160072 + 160071 + 160073 + 160073 + 160074 + 160073 + 160073 + 160072 + 160076 - 77018 - 154038 - 154034 - 154036 - 154039 - 154036 - 154037 - 154040 - 154039 - 154035 - 154035 - 154036 - 154035 - 154037 - 154040 - 154039 - 154039 - 154036 - 154039 - 154038 - 154037 - 154037 - 154036 - 154037 + 75309 + 150623 + 150622 + 150622 + 150624 + 150622 + 150622 + 150620 + 150627 + 150623 + 150623 + 150622 + 150623 + 150620 + 150623 + 150622 + 150622 + 150622 + 150624 + 150622 + 150622 + 150623 + 150623 + 150622 - 6544850 + 7915401 - 6404528 - 6404962 + 7793081 + 7793584 - 6253804 - 6254208 - 6254210 + 7639446 + 7639876 + 7639924 - 6237574 - 6237972 - 6238028 - 6238067 + 7430713 + 7431129 + 7440519 + 7440466 - 6172957 - 6173380 - 6173416 - 6173411 - 6173407 + 7413334 + 7413794 + 7413847 + 7413837 + 7413915 - 6101209 - 6101631 - 6101689 - 6101666 - 6101671 - 6101640 + 7038066 + 7038505 + 7038598 + 7038533 + 7038712 + 7038586 - 6085889 - 6086299 - 6086351 - 6086351 - 6086299 - 6086327 - 6086324 + 7117558 + 7118042 + 7110441 + 7110361 + 7118397 + 7118136 + 7178293 - 5999738 - 6000162 - 6000174 - 6000173 - 6000174 - 6000193 - 6000144 - 6000143 + 6529982 + 6530422 + 6510469 + 6510426 + 6526435 + 6526181 + 6516803 + 6517016 - 5985991 - 5986407 - 5986440 - 5986430 - 5986448 - 5986411 - 5986424 - 5986382 - 6499531 + 6561932 + 6562344 + 6545380 + 6545383 + 6559372 + 6559028 + 6551482 + 6551682 + 7896276 - 6018607 - 6019037 - 6019086 - 6019042 - 6019084 - 6019069 - 6019063 - 6019045 - 6464385 - 6464403 + 6538230 + 6538644 + 6524443 + 6524426 + 6533122 + 6532893 + 6527743 + 6527897 + 7724837 + 7724861 - 5995853 - 5996250 - 5996312 - 5996281 - 5996360 - 5996310 - 5996327 - 5996277 - 6278520 - 6278498 - 6278548 + 6538531 + 6538981 + 6517145 + 6517124 + 6536583 + 6536270 + 6529903 + 6530122 + 7528695 + 7528729 + 7528748 - 6012699 - 6013114 - 6013112 - 6013136 - 6013157 - 6013103 - 6013112 - 6013123 - 6239538 - 6239551 - 6239500 - 6239531 + 6545609 + 6546058 + 6527967 + 6527962 + 6541530 + 6541163 + 6537307 + 6537421 + 7354771 + 7354740 + 7354772 + 7354738 - 5985970 - 5986379 - 5986354 - 5986383 - 5986359 - 5986403 - 5986396 - 5986340 - 6178253 - 6178257 - 6178289 - 6178275 - 6178262 + 6551636 + 6552047 + 6536770 + 6536731 + 6548252 + 6548018 + 6543786 + 6543961 + 7329089 + 7328951 + 7330622 + 7330561 + 7336877 - 5994664 - 5995085 - 5995108 - 5995152 - 5995120 - 5995124 - 5995118 - 5995147 - 6108887 - 6108882 - 6108915 - 6108879 - 6108901 - 6108881 + 6558866 + 6559329 + 6534980 + 6534965 + 6551358 + 6551072 + 6541428 + 6541618 + 7127197 + 7127111 + 7127150 + 7127116 + 7127238 + 7127112 - 6007304 - 6007700 - 6007762 - 6007725 - 6007738 - 6007737 - 6007730 - 6007748 - 6081276 - 6081265 - 6081317 - 6081298 - 6081339 - 6081315 - 6081251 + 6538036 + 6538486 + 6513876 + 6513852 + 6535304 + 6535020 + 6527523 + 6527740 + 6945561 + 6939971 + 6903323 + 6903262 + 6927105 + 6921414 + 7331678 - 5991343 - 5991720 - 5991784 - 5991768 - 5991809 - 5991791 - 5991771 - 5991767 - 5996184 - 5996184 - 5996097 - 5996147 - 5996175 - 5996111 - 5996194 - 5996145 + 6521388 + 6521802 + 6507501 + 6507449 + 6518873 + 6518551 + 6518128 + 6518315 + 6562469 + 6562121 + 6563661 + 6563624 + 6561941 + 6561285 + 6540899 + 6540896 - 6028561 - 6028969 - 6028986 - 6028989 - 6029028 - 6029007 - 6029005 - 6028959 - 6025768 - 6025770 - 6025738 - 6025765 - 6025782 - 6025727 - 6025743 - 6025754 - 6554861 + 6580014 + 6580466 + 6567045 + 6567065 + 6575701 + 6575399 + 6573507 + 6573636 + 6622966 + 6622517 + 6631712 + 6631721 + 6623970 + 6623196 + 6594773 + 6594821 + 7910210 - 6019347 - 6019768 - 6019786 - 6019795 - 6019760 - 6019796 - 6019782 - 6019781 - 6022479 - 6022414 - 6021994 - 6022049 - 6022024 - 6022026 - 6022030 - 6022024 - 6375087 - 6375096 + 6550937 + 6551384 + 6538051 + 6538070 + 6547689 + 6547438 + 6543266 + 6543430 + 6626505 + 6626126 + 6637187 + 6637191 + 6626931 + 6626066 + 6593178 + 6593194 + 7771493 + 7771522 - 6027530 - 6027935 - 6027952 - 6027956 - 6027919 - 6027966 - 6027919 - 6027936 - 6026796 - 6026787 - 6026695 - 6026772 - 6026767 - 6026741 - 6026778 - 6026719 - 6314188 - 6314205 - 6314204 + 6574389 + 6574781 + 6561325 + 6561267 + 6571249 + 6571047 + 6565136 + 6565305 + 6640063 + 6639570 + 6646828 + 6646863 + 6639469 + 6638455 + 6606610 + 6606612 + 7578058 + 7578094 + 7578042 - 6037319 - 6037740 - 6037746 - 6037760 - 6037744 - 6037779 - 6037777 - 6037753 - 6041876 - 6041836 - 6041770 - 6041807 - 6041828 - 6041792 - 6041830 - 6041765 - 6235508 - 6235485 - 6235477 - 6235469 + 6566011 + 6566477 + 6540465 + 6540412 + 6558205 + 6557972 + 6553623 + 6553859 + 6624990 + 6624648 + 6630228 + 6630269 + 6623008 + 6622197 + 6595299 + 6595343 + 7386200 + 7386214 + 7386170 + 7386206 - 5994735 - 5995162 - 5995172 - 5995151 - 5995163 - 5995123 - 5995183 - 5995114 - 6009133 - 6009110 - 6008359 - 6008388 - 6008386 - 6008426 - 6008373 - 6008433 - 6150899 - 6150853 - 6150887 - 6150855 - 6150841 + 6526411 + 6526833 + 6510122 + 6510068 + 6523865 + 6523606 + 6521683 + 6521858 + 6598452 + 6597910 + 6605472 + 6605426 + 6599735 + 6598634 + 6564502 + 6564501 + 7319395 + 7319414 + 7319350 + 7319403 + 7321964 - 5984507 - 5984907 - 5984950 - 5984932 - 5984942 - 5984964 - 5984941 - 5984924 - 5987388 - 5987362 - 5987307 - 5987361 - 5987365 - 5987326 - 5987359 - 5987358 - 6077667 - 6077725 - 6077716 - 6077705 - 6077710 - 6077719 + 6513487 + 6513936 + 6501054 + 6501018 + 6510744 + 6510470 + 6506051 + 6506252 + 6590599 + 6590224 + 6593496 + 6593523 + 6590682 + 6589647 + 6559639 + 6559697 + 7129802 + 7129799 + 7129846 + 7129906 + 7127851 + 7127829 - 6018195 - 6018593 - 6018640 - 6018598 - 6018662 - 6018650 - 6018648 - 6018590 - 6022065 - 6022063 - 6021967 - 6022075 - 6022040 - 6022058 - 6022028 - 6022022 - 6076645 - 6076679 - 6076677 - 6076625 - 6076660 - 6076672 - 6076613 + 6571383 + 6571837 + 6562142 + 6562074 + 6573341 + 6573067 + 6571063 + 6571217 + 6631418 + 6631047 + 6635181 + 6635186 + 6631570 + 6630960 + 6605995 + 6606022 + 7096293 + 7096178 + 7101855 + 7101991 + 7105093 + 7105165 + 7194758 - 5986085 - 5986463 - 5986518 - 5986498 - 5986531 - 5986490 - 5986506 - 5986533 - 5990417 - 5990399 - 5990328 - 5990358 - 5990379 - 5990344 - 5990365 - 5990402 - 5926274 - 5926255 - 5925497 - 5925430 - 5925538 - 5925470 - 5925462 - 5925449 + 6521709 + 6522162 + 6507327 + 6507286 + 6518474 + 6518274 + 6513722 + 6513895 + 6576729 + 6576397 + 6582401 + 6582409 + 6576652 + 6576029 + 6553062 + 6553056 + 6536410 + 6536343 + 6538093 + 6538070 + 6532407 + 6532444 + 6532588 + 6532529 *** END OF TEST TMFINE 1 ***