From: Marc Alff Date: June 9 2011 8:37am Subject: bzr commit into mysql-trunk-pfs-tuning branch (marc.alff:3382) List-Archive: http://lists.mysql.com/commits/138912 Message-Id: <20110609083716.752A72FEE4A@linux-8edv.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0316684550668013575==" --===============0316684550668013575== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/malff/BZR_TREE/mysql-trunk-pfs-tuning/ based on revid:marc.alff@stripped 3382 Marc Alff 2011-06-09 code optimization pass using pahole: - packed structures better - reordered critical attributes - removed unused attributes modified: include/mysql/psi/psi.h include/mysql/psi/psi_abi_v1.h.pp storage/perfschema/pfs.cc storage/perfschema/pfs_instr.h storage/perfschema/pfs_instr_class.cc storage/perfschema/pfs_instr_class.h === modified file 'include/mysql/psi/psi.h' --- a/include/mysql/psi/psi.h 2011-05-04 21:19:21 +0000 +++ b/include/mysql/psi/psi.h 2011-06-09 08:37:11 +0000 @@ -606,6 +606,8 @@ struct PSI_mutex_locker_state_v1 { /** Internal state. */ uint m_flags; + /** Current operation. */ + enum PSI_mutex_operation m_operation; /** Current mutex. */ struct PSI_mutex *m_mutex; /** Current thread. */ @@ -614,12 +616,6 @@ struct PSI_mutex_locker_state_v1 ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_mutex_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; /** Internal data. */ void *m_wait; }; @@ -637,6 +633,8 @@ struct PSI_rwlock_locker_state_v1 { /** Internal state. */ uint m_flags; + /** Current operation. */ + enum PSI_rwlock_operation m_operation; /** Current rwlock. */ struct PSI_rwlock *m_rwlock; /** Current thread. */ @@ -645,12 +643,6 @@ struct PSI_rwlock_locker_state_v1 ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_rwlock_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; /** Internal data. */ void *m_wait; }; @@ -668,6 +660,8 @@ struct PSI_cond_locker_state_v1 { /** Internal state. */ uint m_flags; + /** Current operation. */ + enum PSI_cond_operation m_operation; /** Current condition. */ struct PSI_cond *m_cond; /** Current mutex. */ @@ -678,12 +672,6 @@ struct PSI_cond_locker_state_v1 ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_cond_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; /** Internal data. */ void *m_wait; }; @@ -703,6 +691,8 @@ struct PSI_file_locker_state_v1 { /** Internal state. */ uint m_flags; + /** Current operation. */ + enum PSI_file_operation m_operation; /** Current file. */ struct PSI_file *m_file; /** Current thread. */ @@ -713,12 +703,6 @@ struct PSI_file_locker_state_v1 ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); - /** Current operation. */ - enum PSI_file_operation m_operation; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; /** Internal data. */ void *m_wait; }; @@ -738,6 +722,8 @@ struct PSI_table_locker_state_v1 { /** Internal state. */ uint m_flags; + /** Current io operation. */ + enum PSI_table_io_operation m_io_operation; /** Current table handle. */ struct PSI_table *m_table; /** Current table share. */ @@ -748,20 +734,14 @@ struct PSI_table_locker_state_v1 ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); - /** Current io operation. */ - enum PSI_table_io_operation m_io_operation; + /** Internal data. */ + void *m_wait; /** Implementation specific. For table io, the table io index. For table lock, the lock type. */ uint m_index; - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; - /** Internal data. */ - void *m_wait; }; /** @@ -776,6 +756,12 @@ struct PSI_table_locker_state_v1 */ struct PSI_statement_locker_state_v1 { + /** Discarded flag. */ + my_bool m_discarded; + /** Metric, no index used flag. */ + uchar m_no_index_used; + /** Metric, no good index used flag. */ + uchar m_no_good_index_used; /** Internal state. */ uint m_flags; /** Instrumentation class. */ @@ -786,14 +772,8 @@ struct PSI_statement_locker_state_v1 ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); - /** Source file. */ - const char* m_src_file; - /** Source line number. */ - int m_src_line; /** Internal data. */ void *m_statement; - /** Discarded flag. */ - my_bool m_discarded; /** Locked time. */ ulonglong m_lock_time; /** Rows sent. */ @@ -801,31 +781,27 @@ struct PSI_statement_locker_state_v1 /** Rows examined. */ ulonglong m_rows_examined; /** Metric, temporary tables created on disk. */ - ulonglong m_created_tmp_disk_tables; + ulong m_created_tmp_disk_tables; /** Metric, temporary tables created. */ - ulonglong m_created_tmp_tables; + ulong m_created_tmp_tables; /** Metric, number of select full join. */ - ulonglong m_select_full_join; + ulong m_select_full_join; /** Metric, number of select full range join. */ - ulonglong m_select_full_range_join; + ulong m_select_full_range_join; /** Metric, number of select range. */ - ulonglong m_select_range; + ulong m_select_range; /** Metric, number of select range check. */ - ulonglong m_select_range_check; + ulong m_select_range_check; /** Metric, number of select scan. */ - ulonglong m_select_scan; + ulong m_select_scan; /** Metric, number of sort merge passes. */ - ulonglong m_sort_merge_passes; + ulong m_sort_merge_passes; /** Metric, number of sort merge. */ - ulonglong m_sort_range; + ulong m_sort_range; /** Metric, number of sort rows. */ - ulonglong m_sort_rows; + ulong m_sort_rows; /** Metric, number of sort scans. */ - ulonglong m_sort_scan; - /** Metric, number of no index used. */ - ulonglong m_no_index_used; - /** Metric, number of no good index used. */ - ulonglong m_no_good_index_used; + ulong m_sort_scan; }; /* Using typedef to make reuse between PSI_v1 and PSI_v2 easier later. */ === modified file 'include/mysql/psi/psi_abi_v1.h.pp' --- a/include/mysql/psi/psi_abi_v1.h.pp 2011-05-04 21:19:21 +0000 +++ b/include/mysql/psi/psi_abi_v1.h.pp 2011-06-09 08:37:11 +0000 @@ -119,94 +119,82 @@ struct PSI_statement_info_v1 struct PSI_mutex_locker_state_v1 { uint m_flags; + enum PSI_mutex_operation m_operation; struct PSI_mutex *m_mutex; struct PSI_thread *m_thread; ulonglong m_timer_start; ulonglong (*m_timer)(void); - enum PSI_mutex_operation m_operation; - const char* m_src_file; - int m_src_line; void *m_wait; }; struct PSI_rwlock_locker_state_v1 { uint m_flags; + enum PSI_rwlock_operation m_operation; struct PSI_rwlock *m_rwlock; struct PSI_thread *m_thread; ulonglong m_timer_start; ulonglong (*m_timer)(void); - enum PSI_rwlock_operation m_operation; - const char* m_src_file; - int m_src_line; void *m_wait; }; struct PSI_cond_locker_state_v1 { uint m_flags; + enum PSI_cond_operation m_operation; struct PSI_cond *m_cond; struct PSI_mutex *m_mutex; struct PSI_thread *m_thread; ulonglong m_timer_start; ulonglong (*m_timer)(void); - enum PSI_cond_operation m_operation; - const char* m_src_file; - int m_src_line; void *m_wait; }; struct PSI_file_locker_state_v1 { uint m_flags; + enum PSI_file_operation m_operation; struct PSI_file *m_file; struct PSI_thread *m_thread; size_t m_number_of_bytes; ulonglong m_timer_start; ulonglong (*m_timer)(void); - enum PSI_file_operation m_operation; - const char* m_src_file; - int m_src_line; void *m_wait; }; struct PSI_table_locker_state_v1 { uint m_flags; + enum PSI_table_io_operation m_io_operation; struct PSI_table *m_table; struct PSI_table_share *m_table_share; struct PSI_thread *m_thread; ulonglong m_timer_start; ulonglong (*m_timer)(void); - enum PSI_table_io_operation m_io_operation; - uint m_index; - const char* m_src_file; - int m_src_line; void *m_wait; + uint m_index; }; struct PSI_statement_locker_state_v1 { + my_bool m_discarded; + uchar m_no_index_used; + uchar m_no_good_index_used; uint m_flags; void *m_class; struct PSI_thread *m_thread; ulonglong m_timer_start; ulonglong (*m_timer)(void); - const char* m_src_file; - int m_src_line; void *m_statement; - my_bool m_discarded; ulonglong m_lock_time; ulonglong m_rows_sent; ulonglong m_rows_examined; - ulonglong m_created_tmp_disk_tables; - ulonglong m_created_tmp_tables; - ulonglong m_select_full_join; - ulonglong m_select_full_range_join; - ulonglong m_select_range; - ulonglong m_select_range_check; - ulonglong m_select_scan; - ulonglong m_sort_merge_passes; - ulonglong m_sort_range; - ulonglong m_sort_rows; - ulonglong m_sort_scan; - ulonglong m_no_index_used; - ulonglong m_no_good_index_used; + ulong m_created_tmp_disk_tables; + ulong m_created_tmp_tables; + ulong m_select_full_join; + ulong m_select_full_range_join; + ulong m_select_range; + ulong m_select_range_check; + ulong m_select_scan; + ulong m_sort_merge_passes; + ulong m_sort_range; + ulong m_sort_rows; + ulong m_sort_scan; }; typedef void (*register_mutex_v1_t) (const char *category, struct PSI_mutex_info_v1 *info, int count); === modified file 'storage/perfschema/pfs.cc' --- a/storage/perfschema/pfs.cc 2011-06-06 20:07:48 +0000 +++ b/storage/perfschema/pfs.cc 2011-06-09 08:37:11 +0000 @@ -2197,7 +2197,6 @@ pfs_get_thread_mutex_locker_v1(PSI_mutex /* Complete shortcut. */ - PFS_mutex *pfs_mutex= reinterpret_cast (mutex); /* Aggregate to EVENTS_WAITS_SUMMARY_BY_INSTANCE (counted) */ pfs_mutex->m_wait_stat.aggregate_counted(); return NULL; @@ -2291,7 +2290,6 @@ pfs_get_thread_rwlock_locker_v1(PSI_rwlo /* Complete shortcut. */ - PFS_rwlock *pfs_rwlock= reinterpret_cast (rwlock); /* Aggregate to EVENTS_WAITS_SUMMARY_BY_INSTANCE (counted) */ pfs_rwlock->m_wait_stat.aggregate_counted(); return NULL; @@ -2399,7 +2397,6 @@ pfs_get_thread_cond_locker_v1(PSI_cond_l /* Complete shortcut. */ - PFS_cond *pfs_cond= reinterpret_cast (cond); /* Aggregate to EVENTS_WAITS_SUMMARY_BY_INSTANCE (counted) */ pfs_cond->m_wait_stat.aggregate_counted(); return NULL; === modified file 'storage/perfschema/pfs_instr.h' --- a/storage/perfschema/pfs_instr.h 2011-06-06 20:07:48 +0000 +++ b/storage/perfschema/pfs_instr.h 2011-06-09 08:37:11 +0000 @@ -291,6 +291,12 @@ struct PFS_thread : PFS_connection_slice { static PFS_thread* get_current_thread(void); + /** Thread instrumentation flag. */ + bool m_enabled; + /** Size of @c m_events_waits_stack. */ + uint m_events_waits_count; + /** Event ID counter */ + ulonglong m_event_id; /** Internal lock. */ pfs_lock m_lock; /** Pins for filename_hash. */ @@ -301,10 +307,6 @@ struct PFS_thread : PFS_connection_slice LF_PINS *m_setup_actor_hash_pins; /** Pins for setup_object_hash. */ LF_PINS *m_setup_object_hash_pins; - /** Event ID counter */ - ulonglong m_event_id; - /** Thread instrumentation flag. */ - bool m_enabled; /** Internal thread identifier, unique. */ ulong m_thread_internal_id; /** Parent internal thread identifier. */ @@ -313,8 +315,6 @@ struct PFS_thread : PFS_connection_slice ulong m_thread_id; /** Thread class. */ PFS_thread_class *m_class; - /** Size of @c m_events_waits_stack. */ - uint m_events_waits_count; /** Stack of events waits. This member holds the data for the table PERFORMANCE_SCHEMA.EVENTS_WAITS_CURRENT. === modified file 'storage/perfschema/pfs_instr_class.cc' --- a/storage/perfschema/pfs_instr_class.cc 2011-05-17 13:51:11 +0000 +++ b/storage/perfschema/pfs_instr_class.cc 2011-06-09 08:37:11 +0000 @@ -640,7 +640,6 @@ PFS_sync_key register_mutex_class(const entry= &mutex_class_array[index]; init_instr_class(entry, name, name_length, flags); entry->m_lock_stat.reset(); - entry->m_index= index; entry->m_event_name_index= mutex_class_start + index; entry->m_singleton= NULL; /* @@ -702,7 +701,6 @@ PFS_sync_key register_rwlock_class(const init_instr_class(entry, name, name_length, flags); entry->m_read_lock_stat.reset(); entry->m_write_lock_stat.reset(); - entry->m_index= index; entry->m_event_name_index= rwlock_class_start + index; entry->m_singleton= NULL; PFS_atomic::add_u32(&rwlock_class_allocated_count, 1); @@ -736,7 +734,6 @@ PFS_sync_key register_cond_class(const c { entry= &cond_class_array[index]; init_instr_class(entry, name, name_length, flags); - entry->m_index= index; entry->m_event_name_index= cond_class_start + index; entry->m_singleton= NULL; PFS_atomic::add_u32(&cond_class_allocated_count, 1); @@ -878,7 +875,6 @@ PFS_file_key register_file_class(const c { entry= &file_class_array[index]; init_instr_class(entry, name, name_length, flags); - entry->m_index= index; entry->m_event_name_index= file_class_start + index; entry->m_singleton= NULL; PFS_atomic::add_u32(&file_class_allocated_count, 1); @@ -912,7 +908,6 @@ PFS_stage_key register_stage_class(const { entry= &stage_class_array[index]; init_instr_class(entry, name, name_length, flags); - entry->m_index= index; entry->m_event_name_index= index; PFS_atomic::add_u32(&stage_class_allocated_count, 1); @@ -946,7 +941,6 @@ PFS_statement_key register_statement_cla { entry= &statement_class_array[index]; init_instr_class(entry, name, name_length, flags); - entry->m_index= index; entry->m_event_name_index= index; PFS_atomic::add_u32(&statement_class_allocated_count, 1); === modified file 'storage/perfschema/pfs_instr_class.h' --- a/storage/perfschema/pfs_instr_class.h 2011-05-13 13:44:31 +0000 +++ b/storage/perfschema/pfs_instr_class.h 2011-06-09 08:37:11 +0000 @@ -76,16 +76,12 @@ extern uint wait_class_max; /** Information for all instrumentation. */ struct PFS_instr_class { - /** Instrument name. */ - char m_name[PFS_MAX_INFO_NAME_LENGTH]; - /** Length in bytes of @c m_name. */ - uint m_name_length; - /** Instrument flags. */ - int m_flags; /** True if this instrument is enabled. */ bool m_enabled; /** True if this instrument is timed. */ bool m_timed; + /** Instrument flags. */ + int m_flags; /** Instrument name index. Self index in: @@ -94,6 +90,10 @@ struct PFS_instr_class - EVENTS_STATEMENTS_SUMMARY_*_BY_EVENT_NAME for statements */ uint m_event_name_index; + /** Instrument name. */ + char m_name[PFS_MAX_INFO_NAME_LENGTH]; + /** Length in bytes of @c m_name. */ + uint m_name_length; bool is_singleton() const { @@ -114,8 +114,6 @@ struct PFS_mutex_class : public PFS_inst This statistic is not exposed in user visible tables yet. */ PFS_single_stat m_lock_stat; - /** Self index in @c mutex_class_array. */ - uint m_index; /** Singleton instance. */ PFS_mutex *m_singleton; }; @@ -135,8 +133,6 @@ struct PFS_rwlock_class : public PFS_ins This statistic is not exposed in user visible tables yet. */ PFS_single_stat m_write_lock_stat; - /** Self index in @c rwlock_class_array. */ - uint m_index; /** Singleton instance. */ PFS_rwlock *m_singleton; }; @@ -151,8 +147,6 @@ struct PFS_cond_class : public PFS_instr This statistic is not exposed in user visible tables yet. */ PFS_cond_stat m_cond_stat; - /** Self index in @c cond_class_array. */ - uint m_index; /** Singleton instance. */ PFS_cond *m_singleton; }; @@ -160,14 +154,14 @@ struct PFS_cond_class : public PFS_instr /** Instrumentation metadata of a thread. */ struct PFS_thread_class { - /** Thread instrument name. */ - char m_name[PFS_MAX_INFO_NAME_LENGTH]; - /** Length in bytes of @c m_name. */ - uint m_name_length; /** True if this thread instrument is enabled. */ bool m_enabled; /** Singleton instance. */ PFS_thread *m_singleton; + /** Thread instrument name. */ + char m_name[PFS_MAX_INFO_NAME_LENGTH]; + /** Length in bytes of @c m_name. */ + uint m_name_length; }; /** Key identifying a table share. */ @@ -248,6 +242,14 @@ public: uint m_setup_objects_version; /** Internal lock. */ pfs_lock m_lock; + /** True if table io instrumentation is enabled. */ + bool m_io_enabled; + /** True if table lock instrumentation is enabled. */ + bool m_lock_enabled; + /** True if table io instrumentation is timed. */ + bool m_io_timed; + /** True if table lock instrumentation is timed. */ + bool m_lock_timed; /** Search key. */ PFS_table_share_key m_key; /** Schema name. */ @@ -258,18 +260,10 @@ public: const char *m_table_name; /** Length in bytes of @c m_table_name. */ uint m_table_name_length; - /** True if table io instrumentation is enabled. */ - bool m_io_enabled; - /** True if table lock instrumentation is enabled. */ - bool m_lock_enabled; - /** True if table io instrumentation is timed. */ - bool m_io_timed; - /** True if table lock instrumentation is timed. */ - bool m_lock_timed; - /** Table statistics. */ - PFS_table_stat m_table_stat; /** Number of indexes. */ uint m_key_count; + /** Table statistics. */ + PFS_table_stat m_table_stat; /** Index names. */ PFS_table_key m_keys[MAX_KEY]; @@ -297,8 +291,6 @@ struct PFS_file_class : public PFS_instr { /** File usage statistics. */ PFS_file_stat m_file_stat; - /** Self index in @c file_class_array. */ - uint m_index; /** Singleton instance. */ PFS_file *m_singleton; }; @@ -308,15 +300,11 @@ struct PFS_stage_class : public PFS_inst { /** Stage usage statistics. */ PFS_stage_stat m_stage_stat; - /** Self index in @c stage_class_array. */ - uint m_index; }; /** Instrumentation metadata for a statement. */ struct PFS_statement_class : public PFS_instr_class { - /** Self index in @c statement_class_array. */ - uint m_index; }; void init_event_name_sizing(const PFS_global_param *param); --===============0316684550668013575== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-trunk-pfs-tuning/ # testament_sha1: 8424ba474a737a10db0a9d3131da1c5883eb6da3 # timestamp: 2011-06-09 10:37:16 +0200 # source_branch: file:///home/malff/BZR_TREE/mysql-trunk/ # base_revision_id: marc.alff@stripped\ # 5rpydtwl22it43nc # # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWcwsXAUAB2pfgCAQUHf//3/n zEq////wYAw8+97sO6egaCFAALvOu3sDQAAAAADJSeo0GgANBoaDTJoHqAAAAJQmjQTSGmkU8FB6 jEGgA9QaDQ9QDU8iaaSpmp5R6AJgRgAAExBgmgk1RKeKNRiH6p5NIG0ARpo0MQ09qmmCBzRkxMAE xGBGmBBiMEyYBGCRIRoTJkTIZJsQFMTSM1M0m0Q9Rp6nqYGGFMPQ55mCIhDTZZly/PM2FTIy+rS5 oC0rQsZlkuVVZe2tgihZKKqqqqosJxHb9PpO3EhX68Ndj3cNqB1gnrjjEXShUcRFK0kZCprhNQiI SqZUsPkWhUoIMQEKDFApIGECg1RqReirio7XWFlWeFs6ggh+JHeIhxU/w8gzwJtk6iZCILICkUBY oRZA7P0FA3zx48ju7u7vi9HWV84zaKlmvW9RYo5TJD1UsqpQXJuqO+cwc2KsntaHE3pRheKgMcIR IqyqZIwwuCmgzCJFUrWpEtDGEyL3uZDyKs1kTci5Jo5wdldwHhC5ktZBwnZy7p7iMIKW2QCdYL74 qOt8P9wy6AZMD6BAwZCD6b9vRDcU9bzmOB+wlJpX2/73+iAp7RZcWGhVvQtcIOQYpz0cqDhkjUSG ExUBErRnsF7S7MrRapy911RXyISneGWsJgr8CiQFOZKRw4HHtk7Liraq1RETyyC4+DJ8OowxlJCk JBml4KqikHSAYCCsQl8BmZ7Uw8D7jabTWEFBjPVAmKwyQ4H1CDeC5+zgK7zs9K98vHeHkYBSfSkF 07CzVp335iFaK0QuEblBBRZrggXYklq2XC1C59VwbhM3xcC+7w2SAmxTaRJhzaC1oJtFGKTKtAQ6 ykhMFBdCEFQU4BM24gFlbesYrC/+YsNR5szzLVlaGB5XSQiEeRGosQ8yhZsAG4Alp0cAgS5czAGE oev0rkyaYhTpLohNpKGXXwhSeN110p0o/UTLkBrPqrBXW5XgsMrA+N6BR4G3vlmAUuQLawWIqamZ l17Lc9d4K03tYWUb3Q6WCznaVwIyYXZpRvAZreIJzwjyz0kW0gkM7JdeExZDDXoQXW22/CgYvn9R QsHUZt0HsmMUH4nWegLaLadtS70EwC6WAHFvqbneHZuyONXW0RSQFrN0Q8BMKggUBOvuricyjXHC ZoPbDMI7gKemDuQoZEr2RcW4IpoKZzUd8KEMNK3TlE0VeyWwg8IHcMZL3HHQ9R4tgiLpIYa7Ft9X VXnVYNBFFWlmkqLGZJLg0dhmQE3elXMyAL7DF8i2tZ2XHjZ7BlCw8QDGEz29UGyG/ivZuGy6q2mm 3AreeHWjUV6Q0r3BHAqzl3QMyGXFhTYfSb+pC8uJ11Uq82BNLDJJC7SSZeVF6kSpYqSXoSIJEy5q gYu9OSwmGauYkXSvbPWKF6y7kC2CKMKLnkoc5OMxa51hIsMeKktoMikdEJSYvg5rrOWTZzDs8TZp 0tF3ab3GmhcdgDsJIyC3E3BNBcOVHrpoy2KaKQvMht4JcR3U1HZjYapQ3cDgcdjNuoE5ctOWrcR1 rNpGMO5WAckKALX3nKroKTGIdylUOsmO5el4mTtupJCmo2wqVFE5cgNyZzLnAWxkoXuaq66LG2vD LRxq92edKvo+EMFhULDxIpDI6kLoSuAUpKYulRxV0imSs5FjffEHJtuZqTyfDsbm9hOo2BOdzo0p vswxN2JS6K7ylXeYBIpEhFU5Ck0oszUepmsc4YbXJd6YFsYaaqpveWYNR7KOsihk5jDuXMKe5277 GlGCHWVZVzc7BGuSUUkA7XRKaCy1+/zXq+3bDhzYBm3gwxbaZijb8W9RNEQGIqIFpTMYrwUppZHg KCMuJbCqqrFX08pOK+bRCYmJW/yQVBRfxUmlriWlbjsE7SvgdwSkoImJu1KmDQl/B5jAmASQ38ig WOB/R5ljJ5n2J5EHkJwK+7OT6DoxpLR3QqOhDWBE0FhqwLbBnNRYaQywqQCsLq2RETU2nBYK0r6S LhhaIYIoD5HL6KrEyV2DAegOCSLFUBguwlCUANaAwjMJwhCwFiC8+Gc4kD8sPGeDYIQCgiVwRZoy Gs54cQ32oIJ/YPlh+ohcIEsZhVBLrF1/DiIViwSVU9QmTOOgRRGAG5gvU+X5bqnaSkvzMCRPsNDg Vny+RxLi4+Rs13lhgv2E0l3lEWAHTuJH5oSDd9VxKGQQDAmIWm2Rvg2HobS7wS6CodA3nkf4lMxI rsKBuLw34jsyJBKgmIW7IQnILmDuC0RfHzAKl5QV8iCQwjkTBOrPed5t4G5cbmXJD6eBM4gaALqO WKkMJtDhC1lhMPQ2Xm84HaaHeX8VoZRilYeCXaGmm8A96MPIXEGHjs6BIALf46uhqNZuJ5ux4m6C 0ZuOzVaGsWQvZwa82okULAGkQQQTOxL1YQbeGwoWiOdu+DP3/xZi31mstkytFKUsw1dNZvxey079 mPB9n8wZCNwbuhzXzNx177BjRDFCIRAFgD3k/BrTjORyBE2EGM5MtZ+GBRj8bT7zDWrkFxgNNDQu +3l4BeHs7WYHTgcztMTofh7fAy8DAgQvImXyS9TUdsMQtEvqL0FyFwGh+cGvkhdwUCU6Al2BxE9s gIQWkCdLSZzoHsPeg6moI5iTFqYpAvQVYPmNegLRCCqJHfC4rNE3j0D79BJ02BzS7gRIMhpTVob0 EFQeWOE0Exe5tf74b60VgsBK5obAaWYB9hUD66HuQM6I7D4gqwe0/TAXj2i9xmEwXJdbSgZLYJoN eR3CxOCXoL48g2o1IM5Aw5CyF6CwCBCgV7FIZYIhGQw/bFIXHkjiWZD/EmDYgY0ZeRAGKBd46iD+ RiAYMZkHNB9D4JMUePRXsA0EuoJAMWZZB0ePtNVe8LUqmtjI5Hjer0I3MLmEiBjhK9GVxeMTD08E W53ILhpNtITkA4RcHjQzLy8LUH6ttFqaGBYME5e0UlNiCcLnoQDBo6jiLFc9mwyDzDuCxLK1IV4I GaXgBuXRLVtA1AwIj5CFwQdW1eIHwms8l1XlFGthiktQ33MTAeRNLheCOQPjHJjY2N4feu7Caoxu 3JHfd2AEhbdyxE211JpiZVIDZoBIEUElPtS3BPqvFYko008pJWCxeIavUAwxUwCjpuZ+CNBYiyVQ KuqPgDQVJKatGM1cO6cpMY1C9ZworRAwpULVMLMEpiNlhvhKQtYFKoJC9QUF4HnMD9MtEsWTjdBq QeaCSGBFI3A0l2akcwXvibcyywJJSIbbGm3/YFO4LxdSLUUoGcm9hmNFQXloGILAmy7snlQoLQ3W iDNgYioGaCE0Gs2nUATmhb8cXMRZFxS+qN/qKNYXoGHYhpCwA+kwJ5RsVmuf2FWZoD6HoiSzu/fq qmkd9x+RUPcCxRrLzncj9ATBE1yAPXMn3IjYcADj3IMaHIrX1BT/+LuSKcKEhmFi4Cg= --===============0316684550668013575==--