<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/62813>62813</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang produces individual memclr calls when setting large data structures
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          PiJoules
      </td>
    </tr>
</table>

<pre>
    When compiling the following

```
#include <stdint.h>
#include <string.h>

/* Enum definitions */
typedef enum __global_state_SessionType {
 _global_state_SessionType_SESSION_TYPE_IDLE = 0,
 _global_state_SessionType_SESSION_TYPE_CALL = 1,
 _global_state_SessionType_SESSION_TYPE_MEDIA = 2
} _global_state_SessionType;

typedef enum __global_state_DisconnectType {
    _global_state_DisconnectType_DISCONNECT_TYPE_UNKNOWN = 0,
 _global_state_DisconnectType_DISCONNECT_TYPE_INTENTIONAL_BY_BUD = 1,
 _global_state_DisconnectType_DISCONNECT_TYPE_UNINTENTIONAL = 2,
 _global_state_DisconnectType_DISCONNECT_TYPE_INTENTIONAL_BY_USER = 3,
 _global_state_DisconnectType_DISCONNECT_TYPE_INTENTIONAL_CONNECTION_SWITCHING = 4
} _global_state_DisconnectType;

typedef enum __global_state_ActionTarget_RegularActionTarget {
 _global_state_ActionTarget_RegularActionTarget_REGULAR_ACTION_TARGET_UNKNOWN = 0,
 _global_state_ActionTarget_RegularActionTarget_CHECK_NOTIFICATIONS = 1,
 _global_state_ActionTarget_RegularActionTarget_PREVIOUS_TRACK_REPEAT = 2,
    _global_state_ActionTarget_RegularActionTarget_NEXT_TRACK = 3,
 _global_state_ActionTarget_RegularActionTarget_PLAY_PAUSE_TRACK = 4,
 _global_state_ActionTarget_RegularActionTarget_ANC_CONTROL = 5,
 _global_state_ActionTarget_RegularActionTarget_ASSISTANT_QUERY = 6
} _global_state_ActionTarget_RegularActionTarget;

/* Struct definitions */
typedef struct __global_state_ActionTarget {
 _global_state_ActionTarget_RegularActionTarget regular;
} _global_state_ActionTarget;

typedef struct __global_state_AudioSession {
    uint32_t id;
    uint8_t host_id;
 _global_state_SessionType type;
    uint32_t imprecise_duration_ms;
} _global_state_AudioSession;

typedef struct __global_state_BackstageConfig {
    bool has_headtracking_3dof_mode;
 bool headtracking_3dof_mode;
} _global_state_BackstageConfig;

typedef struct __global_state_ConversationModeState {
    uint32_t version;
    bool conversation_active;
} _global_state_ConversationModeState;

typedef struct __global_state_DeviceInformation {
    uint8_t host_id;
 uint8_t bt_address[6];
    bool is_sass_enabled;
    uint8_t order;
 _global_state_DisconnectType disconnect_type;
    bool is_bt_device_id_received;
    bool is_bt_device_vendor_id_sig;
 uint16_t bt_device_vendor_id;
    uint16_t bt_device_product_id;
 uint8_t fast_pair_platform;
    uint8_t fast_pair_firmware_version;
} _global_state_DeviceInformation;

typedef struct __global_state_DynamicBufferConfig {
    uint32_t version;
    uint32_t current_buffer_level_ms;
    uint32_t target_buffer_level_ms;
 uint32_t active_codec_id;
    bool low_latency_mode;
    bool low_latency_mode_preferred;
} _global_state_DynamicBufferConfig;

typedef struct __global_state_HostSession {
    uint32_t id;
    uint8_t host_id;
 uint32_t imprecise_duration_ms;
    uint32_t overall_session_id;
} _global_state_HostSession;

typedef struct __global_state_MediaManagerSettings {
    uint32_t version;
    bool ohd_music_paused_by_doff;
    bool media_paused_by_conversation;
} _global_state_MediaManagerSettings;

typedef struct __global_state_OutOfRangeEarconState {
    bool skip_connection_disconnection_earcon;
    uint8_t disconnected_host_id;
} _global_state_OutOfRangeEarconState;

typedef struct __global_state_OverallSession {
    uint32_t id;
    uint32_t imprecise_duration_ms;
} _global_state_OverallSession;

typedef struct __global_state_RandomDeviceId {
    uint32_t version;
 uint64_t random_device_id;
} _global_state_RandomDeviceId;

typedef struct __global_state_SpatialAudioState {
    uint32_t version;
 bool role_switch_lock;
    uint32_t connection_handle;
    uint32_t feature1;
    bool head_tracking_active;
    bool interrupt_channel_is_open;
} _global_state_SpatialAudioState;

typedef struct __global_state_SpotState {
    uint32_t version;
    bool is_ringing_event_spot;
    uint32_t ringing_state;
    uint32_t ringing_volume;
    uint32_t ringing_timeout;
    uint32_t left_spot_clock;
    uint32_t right_spot_clock;
} _global_state_SpotState;

typedef struct __global_state_ConnectivityStates {
    uint32_t version;
    bool _connected;
    bool debug_app_connected;
    uint32_t disconnect_reason;
    bool has_audio_session;
 _global_state_AudioSession audio_session;
    uint32_t role_swith_type;
    uint8_t active_host_id;
    bool has_host_session_0;
    _global_state_HostSession host_session_0;
 bool has_host_session_1;
    _global_state_HostSession host_session_1;
 bool has_overall_session;
    _global_state_OverallSession overall_session;
    uint32_t force_singlepoint_ux;
    bool has_out_of_range_earcon_state;
    _global_state_OutOfRangeEarconState out_of_range_earcon_state;
} _global_state_ConnectivityStates;

typedef struct __global_state_GestureMapping {
    bool has_hold;
 _global_state_ActionTarget hold;
} _global_state_GestureMapping;

typedef struct __global_state_PairedDeviceList {
    uint32_t version;
    size_t device_info_count;
    _global_state_DeviceInformation device_info[8];
} _global_state_PairedDeviceList;

typedef struct __global_state_GsmTouchControl {
    bool has_left;
 _global_state_GestureMapping left;
    bool has_right;
 _global_state_GestureMapping right;
} _global_state_GsmTouchControl;

typedef struct __AncToggleSetting {
 bool has_anc;
    bool anc;
    bool has_off;
    bool off;
 bool has_transparency;
    bool transparency;
} _AncToggleSetting;

typedef struct __UserEq {
    bool has_low_bass;
    float low_bass;
    bool has_bass;
    float bass;
    bool has_mid;
    float mid;
    bool has_treble;
 float treble;
    bool has_upper_treble;
    float upper_treble;
} _UserEq;

typedef struct __global_state_Settings {
    uint32_t version;
    bool auto_ota_enable;
    bool ohd_enable;
    bool oobe_is_finished;
    bool gesture_enable;
    uint32_t color_sku;
 bool diagnostics_enable;
    uint32_t version_counter;
    bool oobe_mode;
    uint8_t fmd_state;
    uint32_t fmd_host;
    bool volume_eq_enable;
    bool multipoint_enable;
    bool has_gesture_control;
    _global_state_GsmTouchControl gesture_control;
    int8_t ancr_state_one_bud;
    int8_t ancr_state_two_buds;
    bool otts_mode;
    bool has_ancr_gesture_loop;
    _AncToggleSetting ancr_gesture_loop;
 bool has_current_user_eq;
    _UserEq current_user_eq;
    int32_t volume_asymmetry;
    bool sum_to_mono_enable;
    bool has_last_saved_user_eq;
    _UserEq last_saved_user_eq;
    bool dosimeter_notifications_enable;
    bool has_backstage_config;
 _global_state_BackstageConfig backstage_config;
    bool conversation_mode_enable;
    int32_t dynamic_low_latency_state;
} _global_state_Settings;

typedef struct __global_state_State {
 bool has__settings;
    _global_state_Settings _settings;
    bool has_connectivity_states;
    _global_state_ConnectivityStates connectivity_states;
    bool has_media_manager_settings;
 _global_state_MediaManagerSettings media_manager_settings;
    bool has_random_device_id;
    _global_state_RandomDeviceId random_device_id;
    bool has_paired_device_list;
 _global_state_PairedDeviceList paired_device_list;
    bool has_dynamic_buffer_config;
    _global_state_DynamicBufferConfig dynamic_buffer_config;
    bool has_spatial_audio_state;
 _global_state_SpatialAudioState spatial_audio_state;
    bool has_conversation_mode_state;
    _global_state_ConversationModeState conversation_mode_state;
    bool has_spot_state;
 _global_state_SpotState spot_state;
} _global_state_State;


/* Initializer values for message structs */
#define _global_state_ActionTarget_init_default {_global_state_ActionTarget_RegularActionTarget_REGULAR_ACTION_TARGET_UNKNOWN}
#define _global_state_GestureMapping_init_default {false, _global_state_ActionTarget_init_default}
#define _global_state_GsmTouchControl_init_default {false, _global_state_GestureMapping_init_default, false, _global_state_GestureMapping_init_default}
#define _global_state_Settings_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, _global_state_GsmTouchControl_init_default, 0, 0, 0, false, {false, true, false, false, false, true}, false, {false, 0, false, 0, false, 0, false, 0, false, 0}, 0, 0, false, {false, 0, false, 0, false, 0, false, 0, false, 0}, 0, false, _global_state_BackstageConfig_init_default, 0, 0}
#define _global_state_BackstageConfig_init_default {false, 0}
#define _global_state_MediaManagerSettings_init_default {0, 0, 0}
#define _global_state_AudioSession_init_default {0, 0, _global_state_SessionType_SESSION_TYPE_IDLE, 0}
#define _global_state_HostSession_init_default {0, 0, 0, 0}
#define _global_state_OverallSession_init_default {0, 0}
#define _global_state_OutOfRangeEarconState_init_default {0, 0}
#define _global_state_ConnectivityStates_init_default {0, 0, 0, 0, false, _global_state_AudioSession_init_default, 0, 0, false, _global_state_HostSession_init_default, false, _global_state_HostSession_init_default, false, _global_state_OverallSession_init_default, 0, false, _global_state_OutOfRangeEarconState_init_default}
#define _global_state_RandomDeviceId_init_default {0, 0}
#define _global_state_DeviceInformation_init_default {0, {0}, 0, 0, _global_state_DisconnectType_DISCONNECT_TYPE_UNKNOWN, 0, 0, 0, 0, 0, 0}
#define _global_state_PairedDeviceList_init_default {0, 0, {_global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default, _global_state_DeviceInformation_init_default}}
#define _global_state_DynamicBufferConfig_init_default {0, 0, 0, 0, 0, 0}
#define _global_state_SpatialAudioState_init_default {0, 0, 0, 0, 0, 0}
#define _global_state_ConversationModeState_init_default {0, 0}
#define _global_state_SpotState_init_default {0, 0, 0, 0, 0, 0, 0}
#define _global_state_State_init_default   {false, _global_state_Settings_init_default, false, _global_state_ConnectivityStates_init_default, false, _global_state_MediaManagerSettings_init_default, false, _global_state_RandomDeviceId_init_default, false, _global_state_PairedDeviceList_init_default, false, _global_state_DynamicBufferConfig_init_default, false, _global_state_SpatialAudioState_init_default, false, _global_state_ConversationModeState_init_default, false, _global_state_SpotState_init_default}

class GlobalStateManager {
 public:
  void ResetChangedState();
  _global_state_State changed_state_old_value_;
  _global_state_State changed_state_new_value_;
};

void GlobalStateManager::ResetChangedState() {
  changed_state_old_value_ = _global_state_State_init_default;
  changed_state_new_value_ = _global_state_State_init_default;
}
```

with

```
clang++ -mcpu=cortex-m4 -mabi=aapcs -mthumb -mfloat-abi=soft -Qunused-arguments -nodefaultlibs --target=arm-none-eabi --sysroot=../.environment/cipd/packages/arm/arm-none-eabi -stdlib++-isystem../.environment/cipd/packages/arm/arm-none-eabi/include/c++/10.3.1 -Oz -ffreestanding -fno-pic -fomit-frame-pointer -fshort-enums -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections ../bud/bt_core/global_state_manager/global_state_manager.cc -S -o -
```

clang produces a `GlobalStateManager::ResetChangedState` that's over 800 bytes in size. The function is composed of inidividual calls to `__aeabi_memclr` in the form:

```
        .loc    0 2090 28 is_stmt 1
        addw    r0, r4, #1185
        .loc    0 2090 30 is_stmt 0
        movs    r1, #36
        .loc    0 2089 28 is_stmt 1
        strb.w  r7, [r4, #1152]
        strb.w  r7, [r4, #1140]
 strb.w  r7, [r4, #1116]
        strb.w  r7, [r4, #1092]
 strh.w  r7, [r4, #1090]
        .loc    0 2090 30
        bl __aeabi_memclr
```

for every member in the structs that are zero. GCC however produces something significantly smaller:

```
 push    {r4, r5, r6, lr}
        mov     r4, r0
        mov     r6, #528
        movs    r5, #1
        mov     r2, r6
        movs r1, #0
        add     r0, r0, #656
.LVL218:
        bl memset
.LVL219:
        strb    r5, [r4, #695]
        strb    r5, [r4, #699]
        mov     r2, r6
        movs    r1, #0
        add r0, r4, #1184
        bl      memset
.LVL220:
        movs r3, #0
        strb    r5, [r4, #1223]
        strb    r5, [r4, #1227]
        strb    r3, [r4, #652]
        pop     {r4, r5, r6, pc}
```

Since very few members get initialized to non-zero values, gcc instead memsets both members then sets individual members to non-zero values. At -Oz, it would be nice if clang was able to produce something like this since just replacing the clang definition with the gcc one saves ~750 bytes of text just for this one function.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW0934riy_zTORsccMIGERRYESE_epJO-gb7zZqUjy2XQbVnySDKZ9OJ99ndkG_B_x5le3j59TLCqfqoqVZVKZUO0ZnsBcOfM7p3Z-ook5iDV3Tf2PzLhoK98Gbzf_XEAgaiMYsaZ2CNzABRKzuUbE3tnvHbGy_w6H-f_s6_elAnKkwCQM11pEzBhRgdnumkeVkzsi8M50YPjLdFGJBEKIGSCGSaFRo6XDqU05j2GAEIElgjjPZc-4VgbYgBvQWsmxe49BuTc3GcMqJUGbzfb7ePLM979-W2DH9dPG-RM12jseKthrKvl01PKOhnM-nWzflymvF5ug5t1O68zvS_aq8sWa6apFAKoqZgDIdRFideP29XL8_Nmtcsk_P78-_PLH8_dpunBeHzebZ53jy_Pyyd8_ye-_77uNlevSAXA3Hi_RLDv281rijf9BXj5gF3q7R-Pu9Vvj89fUvDrtpUugw9Y7CW1gbIjag8Gv8I-4UQV77VGQx8jft18-f60fMXLTJHd8vXLZvcxn-jFXv22Wf2On192jw-Pq6XF33a7RS_it9fNvx9fvm_x7nW5-h2_br5tlruqg9QCoBf2efO_uwyy2zn65Xta_om_Lb9vNwW460_DLZ9X1st2ry9ZFMw-j7TdPm53y-cd_tf3zeufKdq8zU370CqOm2f1rVEJNb15XWdkHQ7-aWdGKrt3ka9TtZb4axEwCZjMM3U52SZMmKmHDWLBGfF0_xYbdJDa4OJY-55milmhjB3FCijTgINEEasDjnSXngVxB-l5T-gPbcgeVlKEbF9W1ZeSowPR-AAkMIrQH0zs8TSQIY5kUBA9I-wmqgtdmXuQ3CspjqB0apqvMoCtvduyUJawaJezarQAggk17NglbuOUg4Rew5FReBShVFEKUxe40YNOA77BJAgUaO3M7ufObF1XiWmsidYYBPE5NHuoVAGoNv-s1BnB-SuueetpQt_gINUMswAroMCOlZnrlEcQgVSWQRdWPhVxMs9UrVLWdKkQxkoGCW22XEi0wTFhCsecGGv_RstcyEKmojei7PRl52nY5aurOswn3gWJGL1PwhBUUxB2uvF5kCZKgTDYT3EwhyPwYsooEZsspbbSngmzmMBUBkCrK5CuKZdvmBMDgr5XUkIbBY4VhKBUwUMaTFo3yiCj_ia1-TXJ-4MZuYQtj6AI51hnEhTx6qoWRB2k4lcIGPlKBNmD2oIxTOz10PwnDwGOEs0ojkmiIcD-Ow5kGNYpIztbgaqYOTuUaxJykJYviXkJX4nYw4YoKkVDmk_l0z9YjPNEZU1-SVv2G6S8jQt-IYQAV1e_rlCjPMM0ypxjsHd-qiwoTzZIzlciAhnluS34qGfZkfk1Nkil7Jd9oUPI8kyDhNzGxDDCs-pnSAWQOo2SHLB-Y4YeMJf0R0tmvfjRgYiAt1RsIRCTKJjUY8fWRfhcGFXKjMvuKAwolcQG0wMRAjhmGssYusKrpv5A40nzqbKJaayY2Ftt4Gg3HR1L02yVE50uSddIcpQ8iXpoDItAJi1zcQgzUTBtX03F9odGqibr5vYZWpim7nJk5j3lHpyV8Tkh1ccC8JM9JnHcQnRGL9RtCohumscW9sS6zmmjaisJS2ehFo6SjU9xdajXjKe8m1cWtf22dOqwg6dNdFyiad_u25iaUSefQZ00oFb2_A7YygbQxXhJLlJRwJqJPYdYMmFw8nezzWRisAyxsltUvu81BN9HNtl-pMYjUsX5B8XOF9A2h34lccxE61lU8tbDdak7UCKsy1qebJCc3whTEGQ71hPTZkCEa_YTbHjm-6IIJaYyEaZjeeqnxgK3M7u_LR4E63pWhR22IjrayYQeVlIYJXnLktjM27YklTUtkxZB0sz8QZQybcPalsXuU3kp6E7u9xzyGrWg5iVTClqXu_FmGoZNRXTp5pnUKCJ0TJQ9IdV5GkdThatC9yn5XYPa_NW2gvIN-0SXDzQhl8SgxqEzYwtTO0NUyfYZffVuwTrgF0uujLx6t8iRxDGoGt95psbh1KCZgYaVUJ88eJHESCwNyds0zSez1jHpgy0OQyaYPjRVCfssWpoQCmUtlwrrH0nFJQNG9kJqw6ju5M91y7JXsZ1UErPWEzh3WqKgqyi0w3bPrcNmZSKGv1rtEyXcsGyXbCOxfnIyEq3kiHoCribBLs5TeSOoyrmlAOwnQQ-VeZOWqiFopDG6pbeS5yV11oVLGZcVqaW2Dvoz5qmZlGhQGP4qI-Z5pIvm7CPZWhH9HkVgVEN600mEjcSRFLJzsTix9Rc5QtApVA9Z5uBSswgMKCykYSGj6Z7a6OyFLJd3qu2aF5tR3R1t1M7X2IJO-2MNcpyL-qwthos9tb6S7FNtl-qx8GwIrKtw9XA5J8Vm4ouXFYrFjLULteFc1Qdw2XPS7lWU9aEapPpAZ60PolTJtPU-6lpVuiydnGf8OK3oTlS8WNP11H6oi7U4xcnT8hZxg_f2d7H7Mc7T6ayRcTqOlveFvpZPJ3PF4Sqx1ncyan7K9BGcgmrS9Gl06sM00DYEdENLIr9mD2YfBbP2YD9BoSPhCWh7fkQRaE32kEd8-WGt403T57jQ9QSWCWZwACFJeHri-ZVvHjg3625JygeAmiwh4Rocb_VR-fvnK-_5H52wQ0xL_AmuPkFPGaom4djO808ubcJ2WKYLpWg0oxIoDdb_SElu1q0QZfAh3zLQHgl_CXyLBStVQpsF-1a-C6aiSx9U05bX6VB9gMWWYQfQgFf5PjZvoWfXHxB9YOVOXRteL0pTd-2zYPUq6ENx35Ye21bpQ9xttv61LB2L0Cdgv-V77V2uzz67arUOXjNQ-lnNTp95t7Mnt_eJW60aO1ysVgZ0q9qg0H_p_wn9zbrf-eql-ZBaobf-qNbjvxK8sf7-bBSe6-zBpVIvch0VdRSJjTtsRx7rSfodnL37egdvR-rr4OrMHR18fV7awdrtgd127fGuzlmbvOniKumVcqI1-pLypcT5WhRaK3Hic0ad6fJ0djxKFqBX0GBWB7t3BdmBz7t1vEXhiNnUsKEZw6nxyAOcnv_wIDYBb1U2q1X5wJkKWdfLqjFdtghfbJK3SZq-qNwXXAV12kQfhnNZtcpvYNLrGzOH0jG7TEQ5EXvHu3e8e-RGNE6c6ZpKZeBvN7pGbkR85kzXhMRUIzcyhyTykRulDyPcbEzL0CD3X4lINAQuUfskAmE0coXMJeXM18h1Tf4e85qoyBVSgAvEZ8h19btWUtqR0cjxHkYgjkxJYWEc74GyOHC8h5jQH2QP2vEeiIqyaxFFm4AzP9PEZfpdG4g-Ded4D_nvgyxHBup4D5PxaDqaIPflJ3LDUAFoQ0TAxB65oZBuzChyQxkx44aKROCmbXxQyA31QSrjgkgijdycnMookiL7G_6mEGevobthmIj05O_q7M0dey8ghly-p4r5iVXEN5hKZeUs-Uve62u5PaIUuVvkSuR2uE7qGyh7MRU0IsiZjz8eNfMxMgdiHO9Gp68JoNvxGPnvBjRiIn2SPEK7A6CTtojp9IdeUkOAZIiYYAE7siAhHFHCuUZGWgkwJnaJcAQR5cpOw0T-uzAVnTNRo1oo_zfiktrPMfLGizHybtMXj01k0KRMSILgzX6qdCtV12nR6E0nk9tZJ-J0fEasTB3Jo04RJznWdN6OdLvokE0b5Y_eEFI3KdLsviDezHNm64-TX48v5F10k_kQ2PHCK8EeWunGNdiaPcvDPkcVN2j34lAqBEdQ7yiCyAd1cpdTJ9E6KSIK0E9QcoS-rFboIN8sx8X1tYzAHGyga7YX6WMXYfg70hHhPAuBDq-LE31AWU2Vaa1m6XVur1yd83fBR9LPnLjuQdnoPDfgzLtt8bHZycQtCF4uRp377J7jWkCgQkCMc6r5LAcZPf37yZvcFgqC84JFEGkwRbJFjcx6U0HygpfMF7NG32ujXtSoP6B1MS4bFK9ngeualhlYVVVvXFM1M_O0ebZ2zSaeNx1giInn3bSTT2t2a0gcsYxRq_fGtLv62DJBAaXRF8JbHoEa7cEgdm70BzazCylcG4F509-C7ylFTGgDJMhNqpEvzeEMYw4gUHqbifNecR6sYY7Q0tjN22Izg95kwgPkAxKMAmIhyva7N6IR8TlYgDwBFOKfsx-AzIFppFPV_pNogxTEnNDT75MzmMsvy5AtwdIRq5AUgDQ5gkb_dzM7bYgyRAb-NhmaTVjpDJb0tDuOroK7abCYLsgV3E3mt9czmznnV4e7xU0IY7qYL8Z-SK_HkxsyCXx_Rheht1iM4fqK3XljbzqeTRaTxXg2no_mE4CbyeT69taH62BBnesxRITxEefHaCTV_oppncDd3LudTK848YHr9EfanifgDaWDjmc95UrdWR7XT_bauR5zpo2-oBhmONytylVEeaUoV_nm_pavZfqYn9tSEdmaJ0_TiQJ9lSh-dzAm1jaYvAdb2zBzSPwRlbaCs_PmH26s5H-A2novldaWeak2_x8AAP__Xmhemw">