Use -fvisibility=hidden in src/ta/ and src/taalgos/.
* src/ta/Makefile.am, src/taalgos/Makefile.am: Use $(VISIBILITY_CXXFLAGS). * src/ta/ta.hh, src/ta/taexplicit.hh, src/ta/taproduct.hh, src/ta/tgta.hh, src/ta/tgtaexplicit.hh, src/ta/tgtaproduct.hh, src/taalgos/dotty.hh, src/taalgos/emptinessta.hh, src/taalgos/minimize.hh, src/taalgos/reachiter.hh, src/taalgos/statessetbuilder.hh, src/taalgos/stats.hh, src/taalgos/tgba2ta.hh: Add SPOT_API in front of all public symbols.
This commit is contained in:
parent
f53328a8c7
commit
cfbd31384f
15 changed files with 57 additions and 59 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
## -*- coding: utf-8 -*-
|
## -*- coding: utf-8 -*-
|
||||||
## Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement
|
## Copyright (C) 2010, 2012, 2013 Laboratoire de Recherche et
|
||||||
## de l'Epita (LRDE).
|
## Développement de l'Epita (LRDE).
|
||||||
##
|
##
|
||||||
## This file is part of Spot, a model checking library.
|
## This file is part of Spot, a model checking library.
|
||||||
##
|
##
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(srcdir)/.. -I.. $(BUDDY_CPPFLAGS)
|
AM_CPPFLAGS = -I$(srcdir)/.. -I.. $(BUDDY_CPPFLAGS)
|
||||||
AM_CXXFLAGS = $(WARNING_CXXFLAGS)
|
AM_CXXFLAGS = $(WARNING_CXXFLAGS) $(VISIBILITY_CXXFLAGS)
|
||||||
|
|
||||||
tadir = $(pkgincludedir)/ta
|
tadir = $(pkgincludedir)/ta
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright (C) 2010, 2012 Laboratoire de Recherche et Developpement
|
// -*- coding: utf-8 -*-
|
||||||
// de l Epita (LRDE).
|
// Copyright (C) 2010, 2012, 2013 Laboratoire de Recherche et
|
||||||
|
// Developpement de l Epita (LRDE).
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -50,7 +51,7 @@ namespace spot
|
||||||
/// The Testing Automata (TA) were introduced by
|
/// The Testing Automata (TA) were introduced by
|
||||||
/// Henri Hansen, Wojciech Penczek and Antti Valmari
|
/// Henri Hansen, Wojciech Penczek and Antti Valmari
|
||||||
/// in "Stuttering-insensitive automata for on-the-fly detection of livelock
|
/// in "Stuttering-insensitive automata for on-the-fly detection of livelock
|
||||||
/// properties" In Proc. of FMICSÕ02, vol. 66(2) of Electronic Notes in
|
/// properties" In Proc. of FMICSÕ02, vol. 66(2) of Electronic Notes in
|
||||||
/// Theoretical Computer Science.Elsevier.
|
/// Theoretical Computer Science.Elsevier.
|
||||||
///
|
///
|
||||||
/// While a TGBA automaton observes the value of the atomic propositions, the
|
/// While a TGBA automaton observes the value of the atomic propositions, the
|
||||||
|
|
@ -74,7 +75,7 @@ namespace spot
|
||||||
/// obtained by querying the iterator over the successors of
|
/// obtained by querying the iterator over the successors of
|
||||||
/// a state.
|
/// a state.
|
||||||
|
|
||||||
class ta
|
class SPOT_API ta
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ namespace spot
|
||||||
|
|
||||||
/// Explicit representation of a spot::ta.
|
/// Explicit representation of a spot::ta.
|
||||||
/// \ingroup ta_representation
|
/// \ingroup ta_representation
|
||||||
class ta_explicit : public ta
|
class SPOT_API ta_explicit : public ta
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_explicit(const tgba* tgba, bdd all_acceptance_conditions,
|
ta_explicit(const tgba* tgba, bdd all_acceptance_conditions,
|
||||||
|
|
@ -146,7 +146,7 @@ namespace spot
|
||||||
|
|
||||||
/// states used by spot::ta_explicit.
|
/// states used by spot::ta_explicit.
|
||||||
/// \ingroup ta_representation
|
/// \ingroup ta_representation
|
||||||
class state_ta_explicit : public spot::state
|
class SPOT_API state_ta_explicit : public spot::state
|
||||||
{
|
{
|
||||||
#ifndef SWIG
|
#ifndef SWIG
|
||||||
public:
|
public:
|
||||||
|
|
@ -241,7 +241,7 @@ namespace spot
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Successor iterators used by spot::ta_explicit.
|
/// Successor iterators used by spot::ta_explicit.
|
||||||
class ta_explicit_succ_iterator : public ta_succ_iterator
|
class SPOT_API ta_explicit_succ_iterator : public ta_succ_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_explicit_succ_iterator(const state_ta_explicit* s);
|
ta_explicit_succ_iterator(const state_ta_explicit* s);
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ namespace spot
|
||||||
///
|
///
|
||||||
/// This state is in fact a pair of state: the state from the TA
|
/// This state is in fact a pair of state: the state from the TA
|
||||||
/// automaton and that of Kripke structure.
|
/// automaton and that of Kripke structure.
|
||||||
class state_ta_product : public state
|
class SPOT_API state_ta_product : public state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// \brief Constructor
|
/// \brief Constructor
|
||||||
|
|
@ -73,7 +73,7 @@ namespace spot
|
||||||
};
|
};
|
||||||
|
|
||||||
/// \brief Iterate over the successors of a product computed on the fly.
|
/// \brief Iterate over the successors of a product computed on the fly.
|
||||||
class ta_succ_iterator_product : public ta_succ_iterator
|
class SPOT_API ta_succ_iterator_product : public ta_succ_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_succ_iterator_product(const state_ta_product* s, const ta* t,
|
ta_succ_iterator_product(const state_ta_product* s, const ta* t,
|
||||||
|
|
@ -135,7 +135,7 @@ namespace spot
|
||||||
/// \ingroup ta_emptiness_check
|
/// \ingroup ta_emptiness_check
|
||||||
/// \brief A lazy product between a Testing automaton and a Kripke structure.
|
/// \brief A lazy product between a Testing automaton and a Kripke structure.
|
||||||
/// (States are computed on the fly.)
|
/// (States are computed on the fly.)
|
||||||
class ta_product : public ta
|
class SPOT_API ta_product: public ta
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// \brief Constructor.
|
/// \brief Constructor.
|
||||||
|
|
@ -208,22 +208,18 @@ namespace spot
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ta_succ_iterator_product_by_changeset : public ta_succ_iterator_product
|
class SPOT_API ta_succ_iterator_product_by_changeset :
|
||||||
|
public ta_succ_iterator_product
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_succ_iterator_product_by_changeset(const state_ta_product* s,
|
ta_succ_iterator_product_by_changeset(const state_ta_product* s,
|
||||||
const ta* t, const kripke* k, bdd changeset);
|
const ta* t, const kripke* k,
|
||||||
|
bdd changeset);
|
||||||
|
|
||||||
|
|
||||||
/// \brief Move to the next successor in the kripke structure
|
|
||||||
void
|
|
||||||
next_kripke_dest();
|
|
||||||
|
|
||||||
|
|
||||||
|
/// \brief Move to the next successor in the Kripke structure
|
||||||
|
void next_kripke_dest();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // SPOT_TA_TAPRODUCT_HH
|
#endif // SPOT_TA_TAPRODUCT_HH
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
// -*- coding: utf-8 -*-
|
||||||
// Copyright (C) 2010, 2011, 2012, 2013 Laboratoire de Recherche et
|
// Copyright (C) 2010, 2011, 2012, 2013 Laboratoire de Recherche et
|
||||||
// Développement de l'Epita (LRDE).
|
// Développement de l'Epita (LRDE).
|
||||||
//
|
//
|
||||||
|
|
@ -57,7 +58,7 @@ namespace spot
|
||||||
/// a state.
|
/// a state.
|
||||||
|
|
||||||
|
|
||||||
class tgta : public tgba
|
class SPOT_API tgta : public tgba
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
|
// -*- coding: utf-8 -*-
|
||||||
|
// Copyright (C) 2010, 2011, 2012, 2013 Laboratoire de Recherche et
|
||||||
// Développement de l'Epita (LRDE).
|
// Développement de l'Epita (LRDE).
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
|
|
@ -34,7 +35,7 @@ namespace spot
|
||||||
|
|
||||||
/// Explicit representation of a spot::tgta.
|
/// Explicit representation of a spot::tgta.
|
||||||
/// \ingroup ta_representation
|
/// \ingroup ta_representation
|
||||||
class tgta_explicit : public tgta
|
class SPOT_API tgta_explicit : public tgta
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tgta_explicit(const tgba* tgba, bdd all_acceptance_conditions,
|
tgta_explicit(const tgba* tgba, bdd all_acceptance_conditions,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
// -*- coding: utf-8 -*-
|
// -*- coding: utf-8 -*-
|
||||||
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement
|
// Copyright (C) 2011, 2012, 2013 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de Paris
|
|
||||||
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
|
||||||
// Université Pierre et Marie Curie.
|
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -33,7 +30,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
|
|
||||||
/// \brief A lazy product. (States are computed on the fly.)
|
/// \brief A lazy product. (States are computed on the fly.)
|
||||||
class tgta_product : public tgba_product
|
class SPOT_API tgta_product : public tgba_product
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tgta_product(const kripke* left, const tgta* right);
|
tgta_product(const kripke* left, const tgta* right);
|
||||||
|
|
@ -47,7 +44,7 @@ namespace spot
|
||||||
};
|
};
|
||||||
|
|
||||||
/// \brief Iterate over the successors of a product computed on the fly.
|
/// \brief Iterate over the successors of a product computed on the fly.
|
||||||
class tgta_succ_iterator_product : public tgba_succ_iterator
|
class SPOT_API tgta_succ_iterator_product : public tgba_succ_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
tgta_succ_iterator_product(const state_product* s, const kripke* k,
|
tgta_succ_iterator_product(const state_product* s, const kripke* k,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
## -*- coding: utf-8 -*-
|
## -*- coding: utf-8 -*-
|
||||||
## Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement
|
## Copyright (C) 2010, 2012, 2013 Laboratoire de Recherche et
|
||||||
## de l'Epita (LRDE).
|
## Développement de l'Epita (LRDE).
|
||||||
##
|
##
|
||||||
## This file is part of Spot, a model checking library.et Marie Curie.
|
## This file is part of Spot, a model checking library.et Marie Curie.
|
||||||
##
|
##
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(srcdir)/.. -I.. $(BUDDY_CPPFLAGS)
|
AM_CPPFLAGS = -I$(srcdir)/.. -I.. $(BUDDY_CPPFLAGS)
|
||||||
AM_CXXFLAGS = $(WARNING_CXXFLAGS)
|
AM_CXXFLAGS = $(WARNING_CXXFLAGS) $(VISIBILITY_CXXFLAGS)
|
||||||
|
|
||||||
taalgosdir = $(pkgincludedir)/taalgos
|
taalgosdir = $(pkgincludedir)/taalgos
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
// Copyright (C) 2010 Laboratoire de Recherche et Developpement
|
// -*- coding: utf-8 -*-
|
||||||
// de l Epita (LRDE).
|
// Copyright (C) 2010, 2013 Laboratoire de Recherche et Développement
|
||||||
|
// de l'Epita (LRDE).
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -26,7 +27,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
class ta;
|
class ta;
|
||||||
|
|
||||||
std::ostream&
|
SPOT_API std::ostream&
|
||||||
dotty_reachable(std::ostream& os, const ta* a);
|
dotty_reachable(std::ostream& os, const ta* a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ namespace spot
|
||||||
/// between a TA and a Kripke structure
|
/// between a TA and a Kripke structure
|
||||||
///
|
///
|
||||||
/// See the paper cited above.
|
/// See the paper cited above.
|
||||||
class ta_check : public ec_statistics
|
class SPOT_API ta_check : public ec_statistics
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_check(const ta_product* a, option_map o = option_map());
|
ta_check(const ta_product* a, option_map o = option_map());
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// -*- coding: utf-8 -*-
|
// -*- coding: utf-8 -*-
|
||||||
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
|
// Copyright (C) 2009, 2010, 2011, 2012, 2013 Laboratoire de Recherche
|
||||||
// Développement de l'Epita (LRDE).
|
// et Développement de l'Epita (LRDE).
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -56,7 +56,7 @@ namespace spot
|
||||||
\endverbatim */
|
\endverbatim */
|
||||||
///
|
///
|
||||||
/// \param ta_ the TA automaton to convert into a simplified TA
|
/// \param ta_ the TA automaton to convert into a simplified TA
|
||||||
ta*
|
SPOT_API ta*
|
||||||
minimize_ta(const ta* ta_);
|
minimize_ta(const ta* ta_);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -70,7 +70,7 @@ namespace spot
|
||||||
/// the acceptance conditions of the outgoing transitions.
|
/// the acceptance conditions of the outgoing transitions.
|
||||||
///
|
///
|
||||||
/// \param tgta_ the TGTA automaton to convert into a simplified TGTA
|
/// \param tgta_ the TGTA automaton to convert into a simplified TGTA
|
||||||
tgta_explicit*
|
SPOT_API tgta_explicit*
|
||||||
minimize_tgta(const tgta_explicit* tgta_);
|
minimize_tgta(const tgta_explicit* tgta_);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
/// \ingroup ta_generic
|
/// \ingroup ta_generic
|
||||||
/// \brief Iterate over all reachable states of a spot::ta.
|
/// \brief Iterate over all reachable states of a spot::ta.
|
||||||
class ta_reachable_iterator
|
class SPOT_API ta_reachable_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_reachable_iterator(const ta* a);
|
ta_reachable_iterator(const ta* a);
|
||||||
|
|
@ -97,7 +97,8 @@ namespace spot
|
||||||
/// \ingroup ta_generic
|
/// \ingroup ta_generic
|
||||||
/// \brief An implementation of spot::ta_reachable_iterator that browses
|
/// \brief An implementation of spot::ta_reachable_iterator that browses
|
||||||
/// states depth first.
|
/// states depth first.
|
||||||
class ta_reachable_iterator_depth_first : public ta_reachable_iterator
|
class SPOT_API ta_reachable_iterator_depth_first
|
||||||
|
: public ta_reachable_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_reachable_iterator_depth_first(const ta* a);
|
ta_reachable_iterator_depth_first(const ta* a);
|
||||||
|
|
@ -114,7 +115,8 @@ namespace spot
|
||||||
/// \ingroup ta_generic
|
/// \ingroup ta_generic
|
||||||
/// \brief An implementation of spot::ta_reachable_iterator that browses
|
/// \brief An implementation of spot::ta_reachable_iterator that browses
|
||||||
/// states breadth first.
|
/// states breadth first.
|
||||||
class ta_reachable_iterator_breadth_first : public ta_reachable_iterator
|
class SPOT_API ta_reachable_iterator_breadth_first
|
||||||
|
: public ta_reachable_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ta_reachable_iterator_breadth_first(const ta* a);
|
ta_reachable_iterator_breadth_first(const ta* a);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
// Copyright (C) 2010 Laboratoire de Recherche et Développement
|
// -*- coding: utf-8 -*-
|
||||||
|
// Copyright (C) 2010, 2013 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
|
|
@ -25,7 +26,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
|
|
||||||
/// \brief Compute states set for an automaton.
|
/// \brief Compute states set for an automaton.
|
||||||
std::set<const state*> get_states_set(const ta* t);
|
SPOT_API std::set<const state*> get_states_set(const ta* t);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
// Copyright (C) 2008 Laboratoire de Recherche et Développement
|
// -*- coding: utf-8 -*-
|
||||||
|
// Copyright (C) 2011, 2013 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita (LRDE).
|
// de l'Epita (LRDE).
|
||||||
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
|
||||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
|
||||||
// et Marie Curie.
|
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -31,7 +29,7 @@ namespace spot
|
||||||
/// \addtogroup ta_misc
|
/// \addtogroup ta_misc
|
||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
struct ta_statistics
|
struct SPOT_API ta_statistics
|
||||||
{
|
{
|
||||||
unsigned transitions;
|
unsigned transitions;
|
||||||
unsigned states;
|
unsigned states;
|
||||||
|
|
@ -41,7 +39,7 @@ namespace spot
|
||||||
};
|
};
|
||||||
|
|
||||||
/// \brief Compute statistics for an automaton.
|
/// \brief Compute statistics for an automaton.
|
||||||
ta_statistics stats_reachable(const ta* t);
|
SPOT_API ta_statistics stats_reachable(const ta* t);
|
||||||
|
|
||||||
/// @}
|
/// @}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// -*- coding: utf-8 -*-
|
// -*- coding: utf-8 -*-
|
||||||
// Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement
|
// Copyright (C) 2010, 2012, 2013 Laboratoire de Recherche et
|
||||||
// de l'Epita (LRDE).
|
// Développement de l'Epita (LRDE).
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -79,7 +79,7 @@ namespace spot
|
||||||
///
|
///
|
||||||
/// \return A spot::ta_explicit that recognizes the same language as the
|
/// \return A spot::ta_explicit that recognizes the same language as the
|
||||||
/// TGBA \a tgba_to_convert.
|
/// TGBA \a tgba_to_convert.
|
||||||
ta_explicit*
|
SPOT_API ta_explicit*
|
||||||
tgba_to_ta(const tgba* tgba_to_convert, bdd atomic_propositions_set,
|
tgba_to_ta(const tgba* tgba_to_convert, bdd atomic_propositions_set,
|
||||||
bool degeneralized = true, bool artificial_initial_state_mode = true,
|
bool degeneralized = true, bool artificial_initial_state_mode = true,
|
||||||
bool single_pass_emptiness_check = false,
|
bool single_pass_emptiness_check = false,
|
||||||
|
|
@ -94,7 +94,7 @@ namespace spot
|
||||||
///
|
///
|
||||||
/// \return A spot::tgta_explicit (spot::tgta) that recognizes the same
|
/// \return A spot::tgta_explicit (spot::tgta) that recognizes the same
|
||||||
/// language as the TGBA \a tgba_to_convert.
|
/// language as the TGBA \a tgba_to_convert.
|
||||||
tgta_explicit*
|
SPOT_API tgta_explicit*
|
||||||
tgba_to_tgta(const tgba* tgba_to_convert, bdd atomic_propositions_set);
|
tgba_to_tgta(const tgba* tgba_to_convert, bdd atomic_propositions_set);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue