int diff_add_epoche  = 0; int diff_add_admin_epoche = 0;
int diff_add_epoch  = 0; int diff_add_admin_epoch = 0;
te_update_diff(const char *event, HA_Message *msg){	int rc = -1;	const char *op = NULL;	crm_data_t *diff = NULL;	crm_data_t *aborted = NULL;	const char *set_name = NULL;	int diff_add_updates = 0;	int diff_add_epoche  = 0;	int diff_add_admin_epoche = 0;	int diff_del_updates = 0;	int diff_del_epoche  = 0;	int diff_del_admin_epoche = 0;		if(msg == NULL) {		crm_err("NULL update");		return;	}			ha_msg_value_int(msg, F_CIB_RC, &rc);		op = cl_get_string(msg, F_CIB_OPERATION);	if(rc < cib_ok) {		crm_debug_2("Ignoring failed %s operation: %s",			    op, cib_error2string(rc));		return;	} 		diff = get_message_xml(msg, F_CIB_UPDATE_RESULT);	cib_diff_version_details(		diff,		&diff_add_admin_epoche, &diff_add_epoche, &diff_add_updates, 		&diff_del_admin_epoche, &diff_del_epoche, &diff_del_updates);		crm_debug("Processing diff (%s): %d.%d.%d -> %d.%d.%d", op,		  diff_del_admin_epoche,diff_del_epoche,diff_del_updates,		  diff_add_admin_epoche,diff_add_epoche,diff_add_updates);	log_cib_diff(LOG_DEBUG_2, diff, op);	set_name = "diff-added";	if(diff != NULL && aborted == NULL) {		crm_data_t *section = NULL;		crm_data_t *change_set = find_xml_node(diff, set_name, FALSE);		change_set = find_xml_node(change_set, XML_TAG_CIB, FALSE);		if(change_set != NULL) {			crm_debug_2("Checking status changes");			section=get_object_root(XML_CIB_TAG_STATUS,change_set);		}		if(section != NULL && extract_event(section) == FALSE) {			send_complete("Unexpected status update",				      section, te_update, i_cancel);			free_xml(diff);			return;		}		crm_debug_2("Checking change set: %s", set_name);		aborted = need_abort(change_set);	}		set_name = "diff-removed";	if(diff != NULL && aborted == NULL) {		crm_data_t *change_set = find_xml_node(diff, set_name, FALSE);		change_set = find_xml_node(change_set, XML_TAG_CIB, FALSE);		crm_debug_2("Checking change set: %s", set_name);		aborted = need_abort(change_set);	}	if(aborted != NULL) {		send_complete("Non-status change", diff, te_update, i_cancel);		free_xml(diff);		return;	}		free_xml(diff);	return;}