crystcat/0000755001325400021140000000000014270745041012062 5ustar gaehlerusercrystcat/doc/0000755001325400021140000000000014270745041012627 5ustar gaehlerusercrystcat/doc/crystcat.tex0000644001325400021140000012025214241202247015201 0ustar gaehleruser\hyphenation{Cryst-Cat-Record} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Chapter{The Crystallographic Groups Catalog} \index{crystallographic groups} \index{crystcat} The package {\CrystCat} provides a catalog of crystallographic groups of dimensions 2, 3, and 4 which covers most of the data contained in the book ``Crystallographic groups of four-dimensional space'' \cite{BBNWZ78}. It has been brought into {\GAP} format by Volkmar Felsch. The {\GAP} 4 version of the catalog requires the package {\Cryst}, which is loaded automatically. The benefit of this is that space groups extracted from the catalog now have the rich set of methods provided by {\Cryst} at their disposal, and are no longer dumb lists of generators. Moreover, space groups are now fully supported in both the representation acting from the left and the representation acting from the right. In 2001, Bernd Souvignier has discovered an error in the above mentioned book: On page 118, in the tabulation of enantiomorphic space-group types, it is wrongly claimed that the (affine) four-dimensional space-group type 08/01/01/002 splits into an enantiomorphic pair of (proper) space-group types. This is indicated by an asterisk preceding the space-group number. This asterisk has to be removed. As a consequence, the number of four-dimensional space-group types splitting into enantiomorphic pairs (given on page 11 and page 52 of the book) reduces from 112 to 111. An erratum has been submitted to {\it Acta Cryst.}. The only implication of this correction for the package {\CrystCat} is that the output of the function \begintt DisplaySpaceGroupType( 4, 8, 1, 1, 2 ); \endtt had to be changed from \begintt #I *Space-group type (4,8,1,1,2); orbit size 2; fp-free \endtt to \begintt #I Space-group type (4,8,1,1,2); orbit size 2; fp-free \endtt This has been done in the release {\GAP} 4.3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{How to access the data of the book} Among others, the catalog offers functions which provide access to the data listed in the Tables 1, 5, and 6 of \cite{BBNWZ78}: \beginlist%unordered \item{$\bullet$} The information on the crystal families listed in Table 1 can be reproduced using the `DisplayCrystalFamily' function. \item{$\bullet$} Similarly, the `DisplayCrystalSystem' function can be used to reproduce the information on the crystal systems provided in Table 1. \item{$\bullet$} The information given in the $\Q$-class headlines of Table 1 can be displayed by the `DisplayQClass' function, whereas the `FpGroupQClass' function can be used to reproduce the presentations that are listed in Table 1 for the $\Q$-class representatives. \item{$\bullet$} The information given in the $\Z$-class headlines of Table 1 will be covered by the results of the `DisplayZClass' function, and the matrix generators of the $\Z$-class representatives can be constructed by calling the `MatGroupZClass' function. \item{$\bullet$} The `DisplaySpaceGroupType' and the `DisplaySpaceGroupGenerators' functions can be used to reproduce all of the information on the space-group types that is provided in Table 1. \item{$\bullet$} The normalizers listed in Table 5 can be reproduced by calling the `NormalizerZClass' function. \item{$\bullet$} Finally, the `CharTableQClass' function will compute the character tables listed in Table 6, whereas the isomorphism types given in Table 6 may be obtained by calling the `DisplayQClass' function. \endlist The display functions mentioned in the above list print their output with different indentation. So, calling them in a suitably nested loop, you may produce a listing in which the information about the objects of different type will be properly indented as has been done in Table 1 of \cite{BBNWZ78}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Representation of space groups} Probably the most important function in the catalog is the `SpaceGroupBBNWZ' function which provides representatives of the affine classes of space groups. A space group of dimension $n$ is represented by an $(n+1)$-dimensional rational matrix group as follows. If $S$ is an $n$-dimensional space group, then each element $s$ in $S$ is an affine mapping $s: V \to V$ of an $n$-dimensional $\R$-vector space $V$ onto itself. Hence $s$ can be written as the product of an appropriate invertible linear mapping $g: V \to V$ and a translation by some translation vector $t \in V$ such that, if we write mappings from the left, we have $s(v) = g(v) + t$ for all $v \in V$. If we fix a basis of $V$ and then replace each $v \in V$ by the column vector of its coefficients with respect to that basis (and hence $V$ by the isomorphic column vector space $\R^{n \times 1}$), we can describe the linear mapping $g$ involved in $s$ by an $n \times n$ matrix $M_g \in GL_n(\R)$ which acts by multiplication from the left on the column vectors in $\R^{n \times 1}$. Hence, if we identify $V$ with $\R^{n \times 1}$, we have $s(v) = M_g v + t$ for all $v \in \R^{n \times 1}$. Moreover, if we extend each column vector $v \in \R^{n \times 1}$ to a column $[ [ v ], [ 1 ] ]$ of length $n+1$ by adding an entry 1 in the last position and if we define an $(n+1) \times (n+1)$ matrix $M_s = [ [ M_g, t ], [ 0, 1 ] ]$, we have $[ [ s(v) ], [ 1 ] ] = M_s [ [ v ], [ 1 ] ]$ for all $v \in \R^{n \times 1}$. This means that we can represent the space group $S$ by the isomorphic group $M(S) = \{ M_s | s \in S \}$. The submatrices $M_g$ occurring in the elements of $M(S)$ form an $n \times n$ matrix group $P(S)$, the ``point group'' of $M(S)$. In fact, we can choose the basis of $\R^{n \times 1}$ such that $M_g \in GL_n(\Z)$ and $t \in \Q^{n \times 1}$ for all $M_s \in M(S)$. In particular, the space group representatives that are normally used by the crystallographers are of this form, and the book \cite{BBNWZ78} uses the same convention. The representation described above is the one usually used by crystallographers. There is, however, an alternative to the representation of the space group elements by matrices of the form $[ [ M_g, t ], [ 0, 1 ] ]$ as described above. Instead of considering the coefficient vectors as columns we may consider them as rows. Then we can associate to each affine mapping $s \in S$ an $(n+1) \times (n+1)$ matrix $M'_s = [ [ M'_{g'}, 0 ], [ t', 1 ] ]$ with $M'_{g'} \in GL_n(\R)$ and $t' \in \R^{1 \times n}$ such that $[s(v'),1] = [v',1] M'_s$ for all $v' \in \R^{1 \times n}$, and we may represent $S$ by the matrix group $M'(S) = \{ M'_s | s \in S \}$. Again, we can choose the basis of $\R^{1 \times n}$ such that $M'_{g'} \in GL_n(\Z)$ and $t' \in \Q^{1 \times n}$ for all $M'_s \in M'(S)$. From the mathematical point of view, both approaches are equivalent. In particular, $M(S)$ and $M'(S)$ are isomorphic, for instance via the isomorphism $\tau$ mapping $M_s \in M(S)$ to $(M_s^{tr})^{-1}$. Unfortunately, however, neither of the two is a good choice for our {\GAP} catalog. The first convention, using matrices which act on column vectors from the left, is not consistent with the fact that actions in {\GAP} are usually from the right. On the other hand, if we choose the second convention, we run into a problem with the names of the space groups as introduced in \cite{BBNWZ78}. Any such name does not just describe the abstract isomorphism type of the respective space group $S$, but reflects properties of the matrix group $M(S)$. In particular, it contains as a leading part the name of the $\Z$-class of the associated point group $P(S)$. Since the classification of space groups by affine equivalence is tantamount to their classification by abstract isomorphism, $M'(S)$ lies in the same affine class as $M(S)$ and hence should get the same name as $M(S)$. But the point group $P(S)$ that occurs in that name is not always $\Z$-equivalent to the point group $P'(S)$ of $M'(S)$. For example, the isomorphism $\tau: M(S) \to M'(S)$ defined above maps the $\Z$-class representative with the parameters $[3,7,3,2]$ (in the notation described below) to the $\Z$-class representative with the parameters $[3,7,3,3]$. In other words:\ The space group names introduced for the groups $M(S)$ in \cite{BBNWZ78} lead to confusing inconsistencies if assigned to the groups $M'(S)$. In order to avoid this confusion we decided that the first convention is the lesser evil, and so the {\GAP} catalog follows the book. In particular, all functions listed in section "How to access the data of the book" use the convention of the book. The space groups, however, can be constructed in both representations, so that the user can choose the one that seems more appropriate in the particular situation. The function `SpaceGroupOnLeftBBNWZ' constructs a space group in the ``crystallographic'' representation acting on the left, whereas `SpaceGroupOnRightBBNWZ' constructs a space group in the representation acting on the right, as preferred by GAP. In order to avoid long function names (and in order to avoid mixing groups in different representations), one can set one{\pif}s own default with the function `SetCrystGroupDefaultAction' (see "ref:SetCrystGroupDefaultAction"), which takes as argument either `LeftAction' of `RightAction'. `SpaceGroupBBNWZ' then constructs a space group in this default representation. Initially, the default is `RightAction'. The space groups constructed from the catalog are matrix groups, which in addition have the property `IsAffineCrystGroupOnLeft' (or `IsAffineCrystGroupOnRight', respectively). The package {\Cryst} provides methods to compute with such groups. {\Cryst} is necessary for any serious computation with space groups, because the support of plain {\GAP} for infinite matrix groups (such as space groups) is very limited. Before we describe all available catalog functions in detail, we have to add two remarks. *Remark 1:* The concepts used in this section are defined in chapter 1 (Basic definitions) of \cite{BBNWZ78}. However, note that the definition of the concept of a crystal system given on page 16 of that book relies on the following statement about $\Q$-classes: \beginitems & For a $\Q$-class there is a unique holohedry such that each f.u. group in is a subgroup of some f.u. group in , but is not a subgroup of any f.u. group belonging to a holohedry of smaller order. \enditems This statement is correct for dimensions 1, 2, 3, and 4, and hence the definition of ``crystal system'' given on page 16 of \cite{BBNWZ78} is known to be unambiguous for these dimensions. However, there is a counterexample to this statement in seven-dimensional space so that the definition breaks down for some higher dimensions. Therefore, the authors of the book have since proposed to replace this definition of ``crystal system'' by the following much simpler one, which has been discussed in more detail in \cite{NPW81}. To formulate it, we use the intersections of $\Q$-classes and Bravais flocks as introduced on page 17 of \cite{BBNWZ78}, and we define the classification of the set of all $\Z$-classes into crystal systems as follows: \beginitems & *Definition*:\ A crystal system (introduced as an equivalence class of $\Z$-classes) consists of full geometric crystal classes. The $\Z$-classes of two (geometric) crystal classes belong to the same crystal system if and only if these geometric crystal classes intersect the same set of Bravais flocks of $\Z$-classes. \enditems From this definition of a crystal system of $\Z$-classes one then obtains crystal systems of f.u. groups, of space-group types, and of space groups in the same manner as with the preceding definitions in the book. The new definition is unambiguous for all dimensions. Moreover, it can be checked from the tables in the book that it defines the same classification as the old one for dimensions 1, 2, 3, and 4. It should be noted that the concept of crystal family is well-defined independently of the dimension if one uses the ``more natural'' second definition of it at the end of page 17. Moreover, the first definition of crystal family on page 17 defines the same concept as the second one if the now proposed definition of crystal system is used. *Remark 2:* The second remark just concerns a different terminology in the tables of \cite{BBNWZ78} and in the current catalog. In group theory, the number of elements of a finite group usually is called the ``order'' of the group. This notation has been used throughout in the book. Here, however, we will follow the {\GAP} conventions and use the term ``size'' instead. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Crystal Families} \>NrCrystalFamilies( ) returns the number of crystal families in case of dimension . It can be used to formulate loops over the crystal families. There are 4, 6, and 23 crystal families of dimension 2, 3, and 4, respectively. \beginexample gap> n := NrCrystalFamilies( 4 ); 23 \endexample \>DisplayCrystalFamily( , ) displays for the specified crystal family essentially the same information as is provided for that family in Table 1 of \cite{BBNWZ78}, namely \beginlist%unordered \item{$\bullet$} the family name, \item{$\bullet$} the number of parameters, \item{$\bullet$} the common rational decomposition pattern, \item{$\bullet$} the common real decomposition pattern, \item{$\bullet$} the number of crystal systems in the family, and \item{$\bullet$} the number of Bravais flocks in the family. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplayCrystalFamily( 4, 17 ); #I Family XVII: cubic orthogonal; 2 free parameters; #I Q-decomposition pattern 1+3; R-decomposition pattern 1+3; #I 2 crystal systems; 6 Bravais flocks gap> DisplayCrystalFamily( 4, 18 ); #I Family XVIII: octagonal; 2 free parameters; #I Q-irreducible; R-decomposition pattern 2+2; #I 1 crystal system; 1 Bravais flock gap> DisplayCrystalFamily( 4, 21 ); #I Family XXI: di-isohexagonal orthogonal; 1 free parameter; #I R-irreducible; 2 crystal systems; 2 Bravais flocks \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Crystal Systems} \>NrCrystalSystems( ) returns the number of crystal systems in case of dimension . It can be used to formulate loops over the crystal systems. There are 4, 7, and 33 crystal systems of dimension 2, 3, and 4, respectively. \beginexample gap> n := NrCrystalSystems( 2 ); 4 \endexample The following two functions are functions of crystal systems. Each crystal system is characterized by a pair (, ) where is the associated dimension, and is the number of the crystal system. \>DisplayCrystalSystem( , ) displays for the specified crystal system essentially the same information as is provided for that system in Table 1 of \cite{BBNWZ78}, namely \beginlist%unordered \item{$\bullet$} the number of $\Q$-classes in the crystal system and \item{$\bullet$} the identification number, i.~e., the triple (, , ) described below, of the $\Q$-class that is the holohedry of the crystal system. \endlist For details see \cite{BBNWZ78}. \beginexample gap> for sys in [ 1 .. 4 ] do DisplayCrystalSystem( 2, sys ); od; #I Crystal system 1: 2 Q-classes; holohedry (2,1,2) #I Crystal system 2: 2 Q-classes; holohedry (2,2,2) #I Crystal system 3: 2 Q-classes; holohedry (2,3,2) #I Crystal system 4: 4 Q-classes; holohedry (2,4,4) \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Q-Classes} \>NrQClassesCrystalSystem( , ) returns the number of $\Q$-classes within the given crystal system. It can be used to formulate loops over the $\Q$-classes. The following five functions are functions of $\Q$-classes. In general, the parameters characterizing a $\Q$-class will form a triple (, , ) where is the associated dimension, is the number of the associated crystal system, and is the number of the $\Q$-class within the crystal system. However, in case of dimensions 2 or 3, a $\Q$-class may also be characterized by a pair (, ) where is the number in the International Tables for Crystallography \cite{Hah95} of any space-group type lying in (a $\Z$-class of) that $\Q$-class, or just by the Hermann-Mauguin symbol of any space-group type lying in (a $\Z$-class of) that $\Q$-class. The Hermann-Mauguin symbols \index{Hermann-Mauguin symbol} which we use in {\GAP} are the short Hermann-Mauguin symbols defined in the 1983 edition of the International Tables \cite{Hah95}, but any occurring indices are expressed by ordinary integers, and bars are replaced by minus signs. For example, the Hermann-Mauguin symbol

$\overline{4}2_1m$ will be represented by the string `\"P-421m\"'. \>DisplayQClass( , , ) \>DisplayQClass( , ) \>DisplayQClass( ) displays for the specified $\Q$-class essentially the same information as is provided for that $\Q$-class in Table 1 of \cite{BBNWZ78} (except for the defining relations given there), namely \beginlist%unordered \item{$\bullet$} the size of the groups in the $\Q$-class, \item{$\bullet$} the isomorphism type of the groups in the $\Q$-class, \item{$\bullet$} the Hurley pattern, \item{$\bullet$} the rational constituents, \item{$\bullet$} the number of $\Z$-classes in the $\Q$-class, and \item{$\bullet$} the number of space-group types in the $\Q$-class. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplayQClass( "p2" ); #I Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2; #I Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group gap> DisplayQClass( "R-3" ); #I Q-class (3,5,2): size 6; isomorphism type 6.1 = C6; #I Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps gap> DisplayQClass( 3, 195 ); #I Q-class (3,7,1): size 12; isomorphism type 12.5 = A4; #I C-irreducible; 3 Z-classes; 5 space grps gap> DisplayQClass( 4, 27, 4 ); #I Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2; #I Q-irreducible; 1 Z-class; 1 space group gap> DisplayQClass( 4, 29, 1 ); #I *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3; #I R-irreducible; 3 Z-classes; 5 space grps \endexample Note in the preceding examples that, as pointed out above, the term ``size'' denotes the order of a representative group of the specified $\Q$-class and, of course, not the (infinite) class length. \>FpGroupQClass( , , ) \>FpGroupQClass( , ) \>FpGroupQClass( ) returns a finitely presented group , say, which is isomorphic to the groups in the specified $\Q$-class. The presentation of that group is the same as the corresponding presentation given in Table 1 of \cite{BBNWZ78} except for the fact that its generators are listed in reverse order. The reason for this change is that, whenever the group in question is solvable, the resulting generators form a pcgs (as defined in section "ref:Polycyclic Groups" in the reference manual of {\GAP}) if they are numbered ``from the top to the bottom'', and the presentation is a power-commutator presentation. The `PcGroupQClass' function described next will make use of this fact in order to construct a pc group isomorphic to . Note that, for any $\Z$-class in the specified $\Q$-class, the matrix group returned by the `MatGroupZClass' function (see below) not only is isomorphic to , but also its generators satisfy the defining relators of . Besides of the usual components, will have an attribute `CrystCatRecord', which is a record with component `parameters', which keeps a list of the parameters that specify the given $\Q$-class. \beginexample gap> F := FpGroupQClass( 4, 20, 3 ); FpGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( F ); [ f1, f2 ] gap> RelatorsOfFpGroup( F ); [ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ] gap> Size( F ); 12 gap> CrystCatRecord( F ).parameters; [ 4, 20, 3 ] \endexample \>PcGroupQClass( , , ) \>PcGroupQClass( , ) \>PcGroupQClass( ) returns a pc group $P$, say, isomorphic to the groups in the specified $\Q$-class, if these groups are solvable, or the value `fail' (together with an appropriate warning), otherwise. $P$ is constructed by first establishing a finitely presented group (as it would be returned by the `FpGroupQClass' function described above) and then constructing from it an isomorphic pc group. If the underlying pcgs is not a prime orders pcgs (see section "ref:Polycyclic Groups"), then it will be refined appropriately (and a warning will be displayed). Besides of the usual components,

will have an attribute `CrystCatRecord', which is a record with component `parameters', which saves a list of the parameters that specify the given $\Q$-class. \beginexample gap> P := PcGroupQClass( 4, 31, 3 ); #I Warning: a non-solvable group can't be represented as a pc group fail gap> P := PcGroupQClass( 4, 20, 3 ); #I Warning: the presentation has been extended to get a prime order pcgs PcGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( P ); [ f1, f2, f3 ] gap> Size( P ); 12 gap> CrystCatRecord( P ).parameters; [ 4, 20, 3 ] \endexample \>CharTableQClass( , , ) \>CharTableQClass( , ) \>CharTableQClass( ) returns the character table $T$, say, of a representative group of (a $\Z$-class of) the specified $\Q$-class. Although the set of characters can be considered as an invariant of the specified $\Q$-class, the resulting table will depend on the order in which {\GAP} sorts the conjugacy classes of elements and the irreducible characters and hence, in general, will not coincide with the corresponding table presented in \cite{BBNWZ78}. `CharTableQClass' proceeds as follows. If the groups in the given $\Q$-class are solvable, then it first calls the `PcGroupQClass' and `RefinedPcGroup' functions to get a suitable isomorphic pc group, and then it calls the `CharacterTable' function to compute the character table of that pc group. In the case of the five $\Q$-classes of dimension 4 whose groups are not solvable, it first calls the `FpGroupQClass' function to get an isomorphic finitely presented group, then it constructs a specially chosen faithful permutation representation of low degree for that group, and finally it determines the character table of the resulting permutation group again by calling the `CharacterTable' function. In general, the above strategy will be much more efficient than the alternative possibilities of calling the `CharacterTable' function for a finitely presented group provided by the `FpGroupQClass' function or for a matrix group provided by the `MatGroupZClass' function. \beginexample gap> T := CharTableQClass( 4, 20, 3 );; gap> Display( T ); CharTableQClass( 4, 20, 3 ) 2 2 2 1 1 2 2 3 1 . 1 1 . 1 1a 4a 6a 3a 4b 2a 2P 1a 2a 3a 3a 2a 1a 3P 1a 4b 2a 1a 4a 2a 5P 1a 4a 6a 3a 4b 2a X.1 1 1 1 1 1 1 X.2 1 -1 1 1 -1 1 X.3 1 A -1 1 -A -1 X.4 1 -A -1 1 A -1 X.5 2 . 1 -1 . -2 X.6 2 . -1 -1 . 2 A = -E(4) = -Sqrt(-1) = -i \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Z-Classes} \>NrZClassesQClass( , , ) \>NrZClassesQClass( , ) \>NrZClassesQClass( ) returns the number of $\Z$-classes within the given $\Q$-class. It can be used to formulate loops over the $\Z$-classes. The following functions are functions of $\Z$-classes. In general, the parameters characterizing a $\Z$-class will form a quadruple (, , , ) where is the associated dimension, is the number of the associated crystal system, is the number of the associated $\Q$-class within the crystal system, and is the number of the $\Z$-class within the $\Q$-class. However, in case of dimensions 2 or 3, a $\Z$-class may also be characterized by a pair (, ) where is the number in the International Tables \cite{Hah95} of any space-group type lying in that $\Z$-class, or just by the Hermann-Mauguin symbol of any space-group type lying in that $\Z$-class. \>DisplayZClass( , , , ) \>DisplayZClass( , ) \>DisplayZClass( ) displays for the specified $\Z$-class essentially the same information as is provided for that $\Z$-class in Table 1 of \cite{BBNWZ78} (except for the generating matrices of a class representative group given there), namely \beginlist%unordered \item{$\bullet$} for dimensions 2 and 3, the Hermann-Mauguin symbol of a representative space-group type which belongs to that $\Z$-class, \item{$\bullet$} the Bravais type, \item{$\bullet$} some decomposability information, \item{$\bullet$} the number of space-group types belonging to the $\Z$-class, \item{$\bullet$} the size of the associated cohomology group. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplayZClass( 2, 3 ); #I Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( "F-43m" ); #I Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( 4, 2, 3, 2 ); #I Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable; #I 2 space groups; cohomology group size 4 gap> DisplayZClass( 4, 21, 3, 1 ); #I *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible; #I 1 space group; cohomology group size 1 \endexample \>MatGroupZClass( , , , ) \>MatGroupZClass( , ) \>MatGroupZClass( ) returns a $dim \times dim$ matrix group , say, which is a representative of the specified $\Z$-class. Its generators satisfy the defining relators of the finitely presented group which may be computed by calling the `FpGroupQClass' function (see above) for the $\Q$-class which contains the given $\Z$-class. The generators of are the same matrices as those given in Table 1 of \cite{BBNWZ78}. Note, however, that they will be listed in reverse order to keep them in parallel to the abstract generators provided by the `FpGroupQClass' function (see above). Besides of the usual components, will have an attribute `CrystCatRecord', which is a record with two components. The first component is `parameters', which saves a list of the parameters that specify the given $\Z$-class. The second component is `conjugator', whose value is the identity element of . Its purpose is to make the resulting record consistent with those returned by the `NormalizerZClass' or `ZClassRepsDadeGroup' functions described below. \beginexample gap> M := MatGroupZClass( 4, 20, 3, 1 ); MatGroupZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( M ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] gap> Size( M ); 12 gap> CrystCatRecord( M ).parameters; [ 4, 20, 3, 1 ] \endexample \>NormalizerZClass( , , , ) \>NormalizerZClass( , ) \>NormalizerZClass( ) returns the normalizer , say, in $GL(dim,\Z)$ of the representative $dim \times dim$ matrix group which is constructed by the `MatGroupZClass' function (see above). If the size of is finite, then again lies in some $\Z$-class. In this case, will have an attribute `CrystCatRecord', which is a record with two components, `parameters' and `conjugator'. These contain, respectively, the list of parameters of that $\Z$-class, and a matrix $g \in GL(dim,\Z)$, such that $N = g^{-1} R g$, where $R$ is the representative group of that $\Z$-class. \beginexample gap> N := NormalizerZClass( 4, 20, 3, 1 ); NormalizerZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( N ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, -1, -1 ] ] [ [ 1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 0, 0, -1 ] ] gap> Size( N ); 96 gap> CrystCatRecord( N ).parameters; [ 4, 20, 22, 1 ] gap> CrystCatRecord( N ).conjugator = One( N ); true gap> L := NormalizerZClass( 3, 42 ); NormalizerZClass( 3, 3, 2, 4 ) gap> Size( L ); 16 gap> CrystCatRecord( L ).parameters; [ 3, 4, 7, 2 ] gap> CrystCatRecord( L ).conjugator; [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ] gap> M := NormalizerZClass( "C2/m" ); gap> Size( M ); infinity gap> HasCrystCatRecord( M ); false \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Dade groups} Some of the $\Z$-classes of dimension , say, are ``maximal'' in the sense that the groups in these classes are maximal finite subgroups of $GL(d,\Z)$. Generalizing a term which is being used for dimension 4, we call the representatives of these maximal $\Z$-classes the *Dade groups* of dimension $d$. \>NrDadeGroups( ) returns the number of Dade groups of dimension . It can be used to formulate loops over the Dade groups. There are 2, 4, and 9 Dade groups of dimension 2, 3, and 4, respectively. \beginexample gap> NrDadeGroups( 4 ); 9 \endexample \>DadeGroup( , ) returns the th Dade group of dimension . \beginexample gap> D := DadeGroup( 4, 7 ); MatGroupZClass( 4, 31, 7, 2 ) \endexample \>DadeGroupNumbersZClass( , , , ) \>DadeGroupNumbersZClass( , ) \>DadeGroupNumbersZClass( ) returns the set of all those integers $n_i$ for which the $n_i$th Dade group of dimension contains a subgroup which, in $GL(dim,\Z)$, is conjugate to the representative group of the given $\Z$-class. \beginexample gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 ); [ 1, 5, 8 ] gap> for d in dadeNums do > D := DadeGroup( 4, d ); > Print( D, " of size ", Size( D ), "\n" ); > od; MatGroupZClass( 4, 20, 22, 1 ) of size 96 MatGroupZClass( 4, 30, 13, 1 ) of size 288 MatGroupZClass( 4, 32, 21, 1 ) of size 384 \endexample \>ZClassRepsDadeGroup( , , , , ) \>ZClassRepsDadeGroup( , , ) \>ZClassRepsDadeGroup( , ) determines in the th Dade group of dimension all those conjugacy classes whose groups are, in $GL(dim,\Z)$, conjugate to the $\Z$-class representative group , say, of the given $\Z$-class. It returns a list of representative groups of these conjugacy classes. Let be any group in the resulting list. then has an attribute `CrystCatRecord', which is a record with two components. The component `parameters' is the list of parameters of the $\Z$-class of , and `conjugator' is a suitable matrix from $GL(dim,\Z)$, respectively, such that equals $g^{-1} R g$. \beginexample gap> DadeGroupNumbersZClass( 2, 2, 1, 2 ); [ 1, 2 ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ] gap> R := last[2];; gap> CrystCatRecord( R ).parameters; [ 2, 2, 1, 2 ] gap> CrystCatRecord( R ).conjugator; [ [ 1, 0 ], [ -1, 1 ] ] \endexample %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \Section{Space groups and space group types} \>NrSpaceGroupTypesZClass( , , , ) \>NrSpaceGroupTypesZClass( , ) \>NrSpaceGroupTypesZClass( ) returns the number of space-group types within the given $\Z$-class. It can be used to formulate loops over the space-group types. \beginexample gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 ); 13 \endexample The following functions are functions of space-group types. In general, the parameters characterizing a space-group type will form a quintuple (, , , , ) where is the associated dimension, is the number of the associated crystal system, is the number of the associated $\Q$-class within the crystal system, is the number of the $\Z$-class within the $\Q$-class, and is the space-group type within the $\Z$-class. However, in case of dimensions 2 or 3, you may instead specify a $\Z$-class by a pair (, ) or by its Hermann-Mauguin symbol (as described above). Then the function will handle the first space-group type within that $\Z$-class, i.e., = 1, that is, the corresponding symmorphic space group (split extension). \>DisplaySpaceGroupType( , , , , ) \>DisplaySpaceGroupType( , ) \>DisplaySpaceGroupType( ) displays for the specified space-group type some of the information which is provided for that space-group type in Table 1 of \cite{BBNWZ78}, namely \beginlist%unordered \item{$\bullet$} the orbit size associated with that space-group type and, \item{$\bullet$} for dimensions 2 and 3, the and the Hermann-Mauguin symbol. \endlist For details see \cite{BBNWZ78}. \beginexample gap> DisplaySpaceGroupType( 2, 17 ); #I Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1 gap> DisplaySpaceGroupType( "Pm-3" ); #I Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1 gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 ); #I *Space-group type (4,32,10,2,4); orbit size 18 gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 ); #I *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65; #I orbit size 2; fp-free \endexample \>DisplaySpaceGroupGenerators( , , , , ) \>DisplaySpaceGroupGenerators( , ) \>DisplaySpaceGroupGenerators( ) displays the non-translation generators of a representative space group of the specified space-group type without actually constructing that matrix group. The generators are given in the representation acting from the left on column vectors. In more details: Let = be the given dimension, and let $M_1, \ldots, M_r$ be the generators of the representative $n \times n$ matrix group of the given $\Z$-class (this is the group which you will get if you call the `MatGroupZClass' function (see above) for that $\Z$-class). Then, for the given space-group type, the `SpaceGroupOnLeftBBNWZ' function described below will construct as representative of that space-group type an $(n+1) \times (n+1)$ matrix group which is generated by the translations which are induced by the (standard) basis vectors of the -dimensional Euclidian space, and additional matrices $S_1, \ldots, S_r$ of the form $S_i = \left[\matrix{ M_i & t_i \cr 0 & 1 } \right]$, where the $n \times n$ submatrices $M_i$ are as defined above, and the $t_i$ are -columns with rational entries. The `DisplaySpaceGroupGenerators' function saves time by not constructing the group, but just displaying the $r$ matrices $S_1,\ldots, S_r$. \beginexample gap> DisplaySpaceGroupGenerators( "P61" ); #I Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] \endexample \>SpaceGroupOnLeftBBNWZ( , , , , ) \>SpaceGroupOnLeftBBNWZ( , ) \>SpaceGroupOnLeftBBNWZ( ) returns a representative, , of the space group type specified by the arguments. is returned in the form of an `AffineCrystGroupOnLeft', which acts from the left on column vectors (see also the description of the `DisplaySpaceGroupGenerators' function above). The package {\Cryst} provides methods for the computation with space groups. \beginexample gap> S := SpaceGroupOnLeftBBNWZ( "P61" ); SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for s in GeneratorsOfGroup( S ) do > Print( "\n" ); PrintArray( s ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 1 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 1 ], [ 0, 0, 0, 1 ] ] gap> CrystCatRecord( S ).parameters; [ 3, 6, 1, 1, 4 ] \endexample The resulting group has an attribute `CrystCatRecord', whose component `parameters' specifies the given space-group type. \>SpaceGroupOnRightBBNWZ( , , , , ) \>SpaceGroupOnRightBBNWZ( , ) \>SpaceGroupOnRightBBNWZ( ) \>SpaceGroupOnRightBBNWZ( ) returns a representative, , of the space group type specified by the arguments. is returned in the form of an `AffineCrystGroupOnRight', which acts from the right on row vectors. The generators of are the transposed generators (in the same order) of the corresponding `SpaceGroupOnLeftBBNWZ', , specified by the same arguments. The space group is also accepted as argument. The package {\Cryst} provides methods for the computation with space groups. \beginexample gap> T := SpaceGroupOnRightBBNWZ( S ); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> for m in GeneratorsOfGroup( T ) do > Print( "\n" ); PrintArray( m ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/2, 1 ] ] [ [ 0, 1, 0, 0 ], [ -1, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/3, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1, 1 ] ] \endexample \>SpaceGroupBBNWZ( , , , , ) \>SpaceGroupBBNWZ( , ) \>SpaceGroupBBNWZ( ) calls either `SpaceGroupOnLeftBBNWZ' or `SpaceGroupOnRightBBNWZ' with the same arguments, depending on the value of the variable `CrystGroupDefaultAction'. \>FpGroupSpaceGroupBBNWZ( ) returns a finitely presented group , say, which is isomorphic to , where is expected to be a space group from the BBNWZ catalog (acting from the left or from the right). It is chosen such that there is an isomorphism from to which maps each generator of onto the corresponding generator of . This means, in particular, that the matrix generators of satisfy the relators of . If the factor group of by its translation normal subgroup is solvable, then the presentation returned is a polycyclic power commutator presentation. \beginexample gap> G := FpGroupSpaceGroupBBNWZ( S ); FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od; g1^2*g5^-1 g2^3*g5^-1 g2^-1*g1^-1*g2*g1 g3^-1*g1^-1*g3*g1*g3^2 g3^-1*g2^-1*g3*g2*g4*g3^2 g4^-1*g1^-1*g4*g1*g4^2 g4^-1*g2^-1*g4*g2*g4*g3^-1 g4^-1*g3^-1*g4*g3 g5^-1*g1^-1*g5*g1 g5^-1*g2^-1*g5*g2 g5^-1*g3^-1*g5*g3 g5^-1*g4^-1*g5*g4 gap> # Verify that the matrix generators of S satisfy the relators of G. gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) = > MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) ); true \endexample crystcat/doc/manual.lab0000644001325400021140000000625414270745040014572 0ustar gaehleruser\makelabel{crystcat:The Crystallographic Groups Catalog}{1} \makelabel{crystcat:How to access the data of the book}{1.1} \makelabel{crystcat:Representation of space groups}{1.2} \makelabel{crystcat:Crystal Families}{1.3} \makelabel{crystcat:NrCrystalFamilies}{1.3.1} \makelabel{crystcat:DisplayCrystalFamily}{1.3.2} \makelabel{crystcat:Crystal Systems}{1.4} \makelabel{crystcat:NrCrystalSystems}{1.4.1} \makelabel{crystcat:DisplayCrystalSystem}{1.4.2} \makelabel{crystcat:Q-Classes}{1.5} \makelabel{crystcat:NrQClassesCrystalSystem}{1.5.1} \makelabel{crystcat:DisplayQClass}{1.5.2} \makelabel{crystcat:DisplayQClass}{1.5.2} \makelabel{crystcat:DisplayQClass}{1.5.2} \makelabel{crystcat:FpGroupQClass}{1.5.3} \makelabel{crystcat:FpGroupQClass}{1.5.3} \makelabel{crystcat:FpGroupQClass}{1.5.3} \makelabel{crystcat:PcGroupQClass}{1.5.4} \makelabel{crystcat:PcGroupQClass}{1.5.4} \makelabel{crystcat:PcGroupQClass}{1.5.4} \makelabel{crystcat:CharTableQClass}{1.5.5} \makelabel{crystcat:CharTableQClass}{1.5.5} \makelabel{crystcat:CharTableQClass}{1.5.5} \makelabel{crystcat:Z-Classes}{1.6} \makelabel{crystcat:NrZClassesQClass}{1.6.1} \makelabel{crystcat:NrZClassesQClass}{1.6.1} \makelabel{crystcat:NrZClassesQClass}{1.6.1} \makelabel{crystcat:DisplayZClass}{1.6.2} \makelabel{crystcat:DisplayZClass}{1.6.2} \makelabel{crystcat:DisplayZClass}{1.6.2} \makelabel{crystcat:MatGroupZClass}{1.6.3} \makelabel{crystcat:MatGroupZClass}{1.6.3} \makelabel{crystcat:MatGroupZClass}{1.6.3} \makelabel{crystcat:NormalizerZClass}{1.6.4} \makelabel{crystcat:NormalizerZClass}{1.6.4} \makelabel{crystcat:NormalizerZClass}{1.6.4} \makelabel{crystcat:Dade groups}{1.7} \makelabel{crystcat:NrDadeGroups}{1.7.1} \makelabel{crystcat:DadeGroup}{1.7.2} \makelabel{crystcat:DadeGroupNumbersZClass}{1.7.3} \makelabel{crystcat:DadeGroupNumbersZClass}{1.7.3} \makelabel{crystcat:DadeGroupNumbersZClass}{1.7.3} \makelabel{crystcat:ZClassRepsDadeGroup}{1.7.4} \makelabel{crystcat:ZClassRepsDadeGroup}{1.7.4} \makelabel{crystcat:ZClassRepsDadeGroup}{1.7.4} \makelabel{crystcat:Space groups and space group types}{1.8} \makelabel{crystcat:NrSpaceGroupTypesZClass}{1.8.1} \makelabel{crystcat:NrSpaceGroupTypesZClass}{1.8.1} \makelabel{crystcat:NrSpaceGroupTypesZClass}{1.8.1} \makelabel{crystcat:DisplaySpaceGroupType}{1.8.2} \makelabel{crystcat:DisplaySpaceGroupType}{1.8.2} \makelabel{crystcat:DisplaySpaceGroupType}{1.8.2} \makelabel{crystcat:DisplaySpaceGroupGenerators}{1.8.3} \makelabel{crystcat:DisplaySpaceGroupGenerators}{1.8.3} \makelabel{crystcat:DisplaySpaceGroupGenerators}{1.8.3} \makelabel{crystcat:SpaceGroupOnLeftBBNWZ}{1.8.4} \makelabel{crystcat:SpaceGroupOnLeftBBNWZ}{1.8.4} \makelabel{crystcat:SpaceGroupOnLeftBBNWZ}{1.8.4} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupOnRightBBNWZ}{1.8.5} \makelabel{crystcat:SpaceGroupBBNWZ}{1.8.6} \makelabel{crystcat:SpaceGroupBBNWZ}{1.8.6} \makelabel{crystcat:SpaceGroupBBNWZ}{1.8.6} \makelabel{crystcat:FpGroupSpaceGroupBBNWZ}{1.8.7} \makelabel{crystcat:Bibliography}{} \setcitlab {BBNWZ78}{BBNWZ78} \setcitlab {Hah95}{Hah95} \setcitlab {NPW81}{NPW81} \makelabel{crystcat:Index}{} crystcat/doc/manual.toc0000644001325400021140000000074214270745040014615 0ustar gaehleruser\chapcontents {1}{The Crystallographic Groups Catalog}{3} \seccontents {1.1}{How to access the data of the book} {3} \seccontents {1.2}{Representation of space groups} {4} \seccontents {1.3}{Crystal Families} {6} \seccontents {1.4}{Crystal Systems} {6} \seccontents {1.5}{Q-Classes} {7} \seccontents {1.6}{Z-Classes} {10} \seccontents {1.7}{Dade groups} {12} \seccontents {1.8}{Space groups and space group types} {14} \chapcontents {}{Bibliography}{18} \chapcontents {}{Index}{19} crystcat/doc/make_doc0000755001325400021140000000056114241202247014313 0ustar gaehleruser#!/bin/sh set -e echo "TeXing documentation" rm -f manual.aux manual.dvi manual.idx manual.ilg manual.ind manual.lab manual.log manual.six manual.toc tex manual ../../../doc/manualindex manual tex manual echo "Creating PDF version" pdftex manual; pdftex manual echo "Creating HTML documentation" mkdir -p ../htm ../../../etc/convert.pl -c -i -u -n crystcat . ../htm crystcat/doc/manual.tex0000644001325400021140000000301214270732362014624 0ustar gaehleruser\input ../../../doc/gapmacro.tex \Package{Cryst} \Package{CrystCat} \BeginningOfBook{crystcat} \UseReferences{../../../doc/ref} \UseReferences{../../cryst/doc} \TitlePage{ \centerline{\titlefont CrystCat} \medskip \centerline{\titlefont ---} \medskip \centerline{\subtitlefont The Crystallographic Groups Catalog} \medskip \centerline{\titlefont ---} \medskip \centerline{\subtitlefont A GAP4 Package} \bigskip\bigskip \centerline{\secfont Version 1.1.10} \bigskip\bigskip \vfill \centerline{\secfont Volkmar Felsch} \medskip \centerline{Lehrstuhl D f\accent127ur Mathematik} \medskip \centerline{RWTH-Aachen, Templergraben 55, D-52056 Aachen} \medskip \centerline{\tt volkmar.felsch@math.rwth-aachen.de} \vfill \centerline{\secfont Franz G\accent127ahler} \medskip \centerline{Fakult\accent127at f\accent127ur Mathematik, Universit\accent127at Bielefeld} \medskip \centerline{Postfach 10 01 31, D-33501 Bielefeld} \medskip \centerline{\tt gaehler@math.uni-bielefeld.de} \vfill \centerline{\secfont{\Month} \Year} \vfill \centerline{Copyright {\copyright} 1999 by Lehrstuhl D f{\accent127 u}r Mathematik, RWTH Aachen} \bigskip \centerline{This software is released under the GPL version 2 or later (at your preference).} \centerline{For the text of the GPL, please see https://www.gnu.org/licenses/.} } \OneColumnTableOfContents \FrontMatter \Chapters \Input{crystcat} \Appendices \Bibliography \Index \EndOfBook crystcat/doc/manual.mst0000644001325400021140000000046413232361444014633 0ustar gaehleruserpreamble "" postamble "\n" group_skip "\n" headings_flag 1 heading_prefix "\\letter " numhead_positive "{}" symhead_positive "{}" item_0 "\n " item_1 "\n \\sub " item_01 "\n \\sub " item_x1 ", " item_2 "\n \\subsub " item_12 "\n \\subsub " item_x2 ", " page_compositor "--" line_max 1000 crystcat/doc/manual.six0000644001325400021140000000343314270745040014633 0ustar gaehleruserC crystcat.tex 1. The Crystallographic Groups Catalog I 1.0. crystallographic groups I 1.0. crystcat S 1.1. How to access the data of the book S 1.2. Representation of space groups S 1.3. Crystal Families F 1.3. NrCrystalFamilies F 1.3. DisplayCrystalFamily S 1.4. Crystal Systems F 1.4. NrCrystalSystems F 1.4. DisplayCrystalSystem S 1.5. Q-Classes F 1.5. NrQClassesCrystalSystem I 1.5. Hermann-Mauguin symbol F 1.5. DisplayQClass F 1.5. DisplayQClass F 1.5. DisplayQClass F 1.5. FpGroupQClass F 1.5. FpGroupQClass F 1.5. FpGroupQClass F 1.5. PcGroupQClass F 1.5. PcGroupQClass F 1.5. PcGroupQClass F 1.5. CharTableQClass F 1.5. CharTableQClass F 1.5. CharTableQClass S 1.6. Z-Classes F 1.6. NrZClassesQClass F 1.6. NrZClassesQClass F 1.6. NrZClassesQClass F 1.6. DisplayZClass F 1.6. DisplayZClass F 1.6. DisplayZClass F 1.6. MatGroupZClass F 1.6. MatGroupZClass F 1.6. MatGroupZClass F 1.6. NormalizerZClass F 1.6. NormalizerZClass F 1.6. NormalizerZClass S 1.7. Dade groups F 1.7. NrDadeGroups F 1.7. DadeGroup F 1.7. DadeGroupNumbersZClass F 1.7. DadeGroupNumbersZClass F 1.7. DadeGroupNumbersZClass F 1.7. ZClassRepsDadeGroup F 1.7. ZClassRepsDadeGroup F 1.7. ZClassRepsDadeGroup S 1.8. Space groups and space group types F 1.8. NrSpaceGroupTypesZClass F 1.8. NrSpaceGroupTypesZClass F 1.8. NrSpaceGroupTypesZClass F 1.8. DisplaySpaceGroupType F 1.8. DisplaySpaceGroupType F 1.8. DisplaySpaceGroupType F 1.8. DisplaySpaceGroupGenerators F 1.8. DisplaySpaceGroupGenerators F 1.8. DisplaySpaceGroupGenerators F 1.8. SpaceGroupOnLeftBBNWZ F 1.8. SpaceGroupOnLeftBBNWZ F 1.8. SpaceGroupOnLeftBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupOnRightBBNWZ F 1.8. SpaceGroupBBNWZ F 1.8. SpaceGroupBBNWZ F 1.8. SpaceGroupBBNWZ F 1.8. FpGroupSpaceGroupBBNWZ crystcat/doc/manual.pdf0000644001325400021140000055110514270745040014605 0ustar gaehleruser%PDF-1.5 % 3 0 obj << /Length 816 /Filter /FlateDecode >> stream xڝTMo@WhKxrB6V];Ck{f޼yo<"V*.".(EHb[|&)l|EJ(蜣7Õ)S9QZ7#{Z$YnYvU34ݶ q^uՂO%; R0Ҍ*;$tr^K|OSx P\DoDNb# dMENtfKMxT (i&(cٶn\uD`1B W].*x,pj(QBP Ѵn1 l !_D}zig_a4ɠUc꣫ѤTNJFcbFȕ1yX v,|s7@ /R;IC C?܇5)f _߉0 S6GoӺ^i(4`LKC?eUI+@\ɳ)VoKW9< *aM/aB[0)NB4 r\Z燂Xe8Sd4;ŝu[EupA+e0YJm,Rd~ >8` U^iPtblϿ9l:i΋gUϸ .8=\Ć/;tEt:3ZZ܅}> stream xݗ0{?J(8%KL fLl2>2΄١~!-ū;kP`R$~$rCHH!_U~CU_7F ' 0~&YyM-S:A8yFGqG,40TVno޷El?J&Zqxe,E3U`2̬ i5Mf. ~4Wy&uZb6UƧռCy-`wXÅQ>tpe)k 3CA8)=iwRew1Y#mѬ3ns9ƼGjW#r9j@97dBdKm[ (ΰi P! {/!wQvIY s#0a3 ~65hF> 7{|kì7Q:n3?,0#&h5A^'ˣU8cuRӇ0JE6uz >Xy7on>5AmQsKVTC_fk9D"9h o~)5_EuT`n4np endstream endobj 50 0 obj << /Length 2475 /Filter /FlateDecode >> stream x]۸=@_f%J>%iF rLBdɥm}g8,%) XCp8}ym,-b_R,L1ns$l URH(D̲V,U6G\ˌGor-xvyU5RDnHuXWsKɣrnk%M+"cEfHbm8F9Yt΋OhaLPy -=5KG;4*i,nL+On˦nF˜;v;&$.,?5m70@M32eqPuU%u *6 X,;;(k5ۦDG)8),9,L}sF^+QQ FF_eBB,4badM]^if0Э{5Ԧ7yu!Ic'̀Mτq 㛭,rtvdo0lwlvAQ C%8:cfk$+=7m^BeiPrU2&7Q5:wӖfZBq-#gljy9 e}vjKF髽ύCJm#a(=8 ߜ@Lm@e! g4w9Qv90S9cD'<C*Ss<%Z|rD:G%(--5aM8"v"³?gVt`.b\jG sxj]NAleƖ?*tVl@%#yG$&43?fH<}ɅC5UٵC40q,B^dHgHXw$"+hd\JwX+OAgs+ۄ'M:gjࣱ it^ [KW7 6[vu#R#}Zqָ3g'Ijem!s"tkFġ:ߡDD=%BB3XҔ?Onr0>- R7sCJ$Ua3R *j/̸0Cyu/!YjXj*)$H9M>6uJ)Fy^}|&o>l"F;ʟЋߡo}OhL(nFIӟfߙj_ xI1a7O1P҆xKۋ*] $7nm@,;kdW?X$6,f"b*l[M)6F vXh^|HsS&,tQdWKRr%Yp^Z /)Ҟ$"^3`ú?hlT{_,쩣}LϾਨ' >teh'{dJYXU6A8tW`h!9ƏޚJ& qǠ'\(uxkC_ewMPi2M#{n\#Wi0(ΰed7HfC[Ӎ5oYScn@؇ B>KSYނ7 -Fy` x|n4xÇ嗖>[) vxCErKX5zgsJ%MMnS dןyX<;DчG.V T ])_PQ HG׆"yѩKw+C>#294G@uBd?SV]-yBW>|ZT wYIuvi endstream endobj 66 0 obj << /Length 5630 /Filter /FlateDecode >> stream xxؙT=ڤy)N7K-+_8 HyRS5  .~6O/$T^](z2dL]ܬ.>.姛>CepN.RCtAy(Mz\tq^([k/X4mg{ĄyCYeP`INp_R"[^.$KH>Zuua[,ZXӶ LM^]9IrEg˶蛶aPe_5u-ZĊ]Wo-m-.Y*/ I!ovSmzң۸-u*z;Ze,\f颸] E'oFf]Ϻ#+­j?}r몾TuX߬.LRSI"@۪?]Js6xR gמ&Y6]:NX|l6]_b- ^,z=O[eCٖEvllk$ BUg4 `RfK H1"ğM"OsU$QrKf҄g"8*Z)M2gPہMYl{mqdn }a㶭~jXXX47Ur05+=޸/0Nv+'K.X (4+~jvXgR8jj [4?V躀޻n(ȯw:UK(ʐ-Jm-X GEW-jAx_WZ+H/9F\HFr4$Мȋ~w:^{=%̦>{Ye3&ϟu:IáRmsKcP4ܠTmM|9n'-uo[5Š(l923@@$ 袧"t@,p#J%Ynʕc@r~ISZۚf(PR%Uӻ)41n*= :AiPXb-=Tb/d$XErڐ%"Hd ܊ݵ!  7϶ Qtc E@')0 G$<LӠhgX[dti]jY6'2bs svTh"<\/!D"@QD"/M0!ڟyWpk<鰷A򁶭bˁlb!]ѩy,&A  : V}W::"pqk@6.>UߗP>ZYFt/TVڪmo@}@MKW@=hea44\ 7 O@%yۢNGI@ `3X3tzy8YȆDg>Zq\N;baEUwX4]m6vw]޹aV֬A tPd\>bF"DBFqJa|P&&(| PkQ;bV"&dI-$M՞qM ͔cU5EgfY#j&DDReNWȌFu002vf)9?ᴍ*9,s٬w+ mcws9h  B=0z+Sjh*tajGXr3"bGL ̝feP5@x Հ,!Nu X+PV݀%Pg^'3 R:lh#e>%ڛJ+UQCy˶-'.?$w P\>e~k6[{Q͗(ϊO6 ^l|qQ*Шm<:X[)j8t>5`ڛ Ed̀^ElFtuLbH(,ݟb-2Q"ghءf[v]-mVȝ Uk*G·8 vL(7#{}{1=xOA!{]SLK=oNT2?lW<'{P tǦ)q (t Y,e GVy*qQrt\J9ю%Rq*Tk$ Ç7mtZ-C4ϐyn:薺`:ejc5?Wy\Q}f(nu!;QD9*! }=&~ H~! ە|\Ϗy?>5f@OzRcV =w$^( N[(V+ - }Uwe[l\NW$Ǝׅ H6]euɬyՆvIj0Γ~:"V Bڌ|@:eavt<3c3S"iIOզF7EGuY@ 7>+.Alx _:Mg7"%~埣qTUr|fU?_x:Gb%}|~qc|-Jٶv3PI&D/K$ʼ 39b4DAu(F -vfEe$YAE[~&G7ˌ~qEL&~H@cCNWϔi]H:_"amr./,p a"0A (IQԚFBhK,h {FԺΨ |tbWm|P&-lz 7Ns.M9*O,w' %~rĂ$ &u.4fyUllixkxcW;TKCwQv*sZʝ Tag1j 1"}1Ǎ}}0g1rseSJ/:@\&v旈C效3 a\ x|(`;27:z{3N}sWOhƫG_;UE@}?H}ey/oLN@]*!EGMy/ ')e됑4&3ӊ l¯!-T`0Jk6CV| VۘvGn0~V$ Dq0ٌ90g*$իH׳)C@1ᔌG)*e/|Ls:OJ(Z#0naש'_UԬcl`:_p).c+S',+cOG64Ie gCOcQF|^>330 IO\t1~#dw'Wg'"Ge~̏ZxӘurPHC G qZ3Waax$j/XV~xy~4/&{9wfD<|&:9ٜ:QZ5ӫ[J|W"og!ITNO#]I7Tۧ\bU.8D"G6/*^HP.LbP @dԤϝ$Τ B!Q|M*=;ٱJ$;,EY|r)r?{\kkv\u*A܃G5ZA.I4Tؘ=Rɔ:MI< A~b lFc_Nx?˟j~Ghrfrg7f];T6IC6:]_K[bL\" 4&&v Mdx ._ݥx蹤ta N9meFϡ8&\OO f-xj@z/2O^?RAh.r|ln☇G8d _&r4AY{Pfn-u+5!bOmY@pʏ2ƌou~ v>?bl{M 3WW`clAIWV]j+zqq~ms+QgmA|yn<5 ! ƈ>YAV=mOn{kFD@]|sE}G>^ >Jv7B3W]*Z@Bݟ.6[80䭋Y@:{m PǷO%'IyI1H34\k~t$'Iʳ ē\]k}LOkJK5*د;<{ ],ۮo qz4k97.,t ؞xg0:x 0%`3} ":9( [dڛEq#{iZ`*ϿZ.}EȠ+@˙M2+k?ϼ6GfH 6XDg$_JrP-9ؤ@e3{,-[PiPn3C4//.fg+%Lz,SSu))1r'R-[%Vً{PX)sjr4^pߛݧ9[$(ґ=F8C[0m $r Jq(,Q~PR^tc:q2^y؊}6md/{C*u\ٴm⩋>Qi0Q4n_G#,@% x PG <=H3FI}3|T}&.'$~iA'߲?*P=eqz&Lz Ӣ"2H@2Y- ZpiEe683N$~<*y1CWgA endstream endobj 80 0 obj << /Length 4012 /Filter /FlateDecode >> stream xڭ[Yܶ~ׯطV0$SyV*vlk\;a!<pGR&G_7EAp,AOf7TmsUIQ~oݭ67PNs3\|ndӎcQY%HqƭAqϹʓL'D1Pk;O+\T%%L#El֦Į?[> #֛v8n#8n߿{P|(#鹵jݏ;C+CG;+/쾾\^$\6M-1 L#ohe *U R+,n$ , t7ݣZ­GlvXz߾%$, gl3N(HkSZB]ȋ$a]ƾjYLHQl@cC5.$!{-B'AL^ bzDWD'Eg&~oRy NE6a'" *j/]Ǫl|+?ݛ]7lIC6FQtN 7Nzr2ñSED t~1El5&!ƝX g`+238tcv3W)5=iX|KԂ ތ-)`fW2^vWe.fe[S|^ KqjF`Ys*k~%Ç[F⟹VW'`ֈ43Fó3P?9AjQALUO$T7{3zl6WmΎY3*Nۡ,*KM(&z˃?*$yH-,H 5[7벾W*MΔl>%P-* UK߬X,4BIސ>Rri?M_56Qon3&E6#`,aUfXG}M38C6Fc3ƘU{^K:\wk`p JE[rjd1+7Gj(H || >a9 ^ @rD6[7Et `,K,ټLzA$u#RZgbKq˥Lt0b-֣\w$ T//^>x1*C鸕 * Y"p| A3CKT'_x"ިxAF!yZ}\sୄ*kI"o'm.}~JFu(%hR@44)ɛɡ8+.xO|06^cC1uoo9cl94EuiGn≯?&ۋh(ɬ dZI LF,Գ]%a \NJ9ɤUPd$)i12D?^ [ĞR.n@;]M;fƪoxh6Źn2+!\egn[/42vx>+ tt!i,6Q$ߙ 4g)x3 ~1N7 'hvm  `/(= -0{<8}T y;_kR p/~e^|1 &2@ucr, ?z$BW/(^ 5Mn̰L! bQ$G%P!sRB/"O?SO^B9 ܎8%'O{|r.H(MScWh|sksy!ZNKʓT[K)JQp%Ǚ]do55SjyU@ݖ29 gZPm gڍI1Iz$&@Vr=hRQ7,%7._`eSմu46'k"O(*@n=ʕpI!Tт^D>8ُ͂n!c"o爓d3xzHP+kEBISSh0K&61#=Š Y_ 5Y6'ZJ1 Ps ̲J ID۽Dž-'xqm5SǖXHIgkO'/9m_*/ʚ_yҠg˗ў9WӒG9Mq^\I*6`[J6%(R endstream endobj 90 0 obj << /Length 1475 /Filter /FlateDecode >> stream xXo6_!`/2sD5CP`kJL̖ IN;HY%;)Rlxݗf_(D,fwA‚Dqx0|4qŚAI.M)QH e宪ժ(/'Tfis92,Q@(X%eDK*=eh)ᓩN6] tmV&E !:hÎDFXܱCBL$ (\" (%,RlOt׿vJ|d4`Q OboЅYg47M)DJ0_m9Kھ}6;/pzξ*>a&wiςY^"`~tÞT-!['v[e T.p(UZ;UQlܝ _1!kF{Ď*E rpҡ=qc4_q[K]bjǽQczyeVmym&_x2$C(G} N8a(7[ 7}:+J5fΕ Oڬ]W݈Q*I'!6q882O:r8}G^,FxIfth|"f]Q:YUeym 8 Ln*:BMe^fGlr<<(X]9a>3 J1`5;$d 4Pj1?]]D}9F H$uy2Y94=@(ᄑ`'4I3X}ۉ1} C!k *H"zaGE{2u/7i ^x襖 e4 $NRRLm`Ujx1i:cFlB\(ԩY9U9=#e &J3pڡpvg"P_aqDgrqjE.?>1_?cd \hdyֶvZw%> stream xZm6_a_l`8^ @Jr^M6V9gΐ~sok1H "fw_f̤HQ9[>?eEBx:??$oM|0H Y?DZR$L*D%"=!Re 9R0b{[OD0K,3wEvx[&+>%iE(|fI̻#-h#K$ bnJ5_/e zg/iJʏ,èWȵa6&ϊz6-daa(@aW +'rUL;n}Db?Z~xW֌ ;O$ Ig+C0ĬzHIDo;wΎ޼񧟥< CH$ ŵDO˜ ^"g et u,#.Z{S&|sIg 18:q:C;ۮbz@k'Vi/;Y,l,FI57(tt *} 9B}p_"`l~`JUW^VN=7E | @XepJZVBeQ&,p'XUuV'ENNK (#80aw=DNO(?gXCގȰ:|Z^Mm:C@i]Z0{߭' "SroH'wť3gH!D n d7Os$b)q4E RHRHtBVW[~8F5@;5(s`7k8 %>v c=3a{mEH}66˸O EY>Qu^RJs (ùk/e|l*ӛ" TV+UZٚ*+lڀYXJe䳍j\C?,8i*4hʯO+@c^]pߗG` </O,qa& T& B%I`ڰfu].sUpJ.Ic'S:6FC5x4L-]ĄSD [b#dji9f<[C/H:7]\9-rd*_Zcnim~UvhlǢZ۬:GuAnS07vUu(7$.vev{n]uq!}fn`3/R#9܉)E߷`'b\F1#0ks:[4T٣#@{1Ct&`P FGc ɀ(ߤ0/hȳ``4dY#M" k߼ěob F? Ac"z|\yTq O\sv|h4qf]+uMGD3}yO0(DE2g00W{mq8'R/bt[!>PS֣N&okrղLWb8hE \>Ke/-nKslOd&c䟲ko-1Qpظ$:qUɆ`OKԺ`wץ5f5 \wY"\NO}@(ɱUwu9q ew$>0]\E&d(QϽ妬v*z쵩87EubX`UaBwYc6;a_%;]3m7{8fj\Ǝ3j?a<{/bX^]p$kk{ӿ&h.5X_<-xªOЭP endstream endobj 115 0 obj << /Length 2231 /Filter /FlateDecode >> stream xYێ6}0{b3E ٞL$3 ,07-ӶRz:_"%Yv_0hU"aU~Ub,]of!'gٻyp =D:Pr'ZU9%).;],+ԛoܥ ŸM]TEüoeb3SL޽̤=JJF7+JI8/+*1QnǖtM)Lu/*XcC}W*|\N0yƉ"uZ7*/ g4I Ed[S͊D18/ :Ē;,K4O/'tRJRF?^ҪR&Io2@(bē(b s=`+{pz7l]L~j0|kZ|lA >]|#q[QL%|l]$}y baEƀ6:$ZLfb(6r֑'}in\Za93oIz~("T.+ m;ܭPQIF3JrĘGO|a0mb)t?5 rbtJMMyZ?ܧ9sps~ڊF>#4`.0t/f[x>ٽ+[7 |lM&qzQW1aܹUv{w]v.{p2ƛC;&|`=b̑wonᄰC1%wtQB]c9)4 L矀0>.dC(!V X Z$]I)RErԄ5^D!+܃e=373ᇄQ>%ėd :t`Vm;Ui^1Y]\aalbF8 J P8ƬƯ)grS@aϙoU&u,Qت\U.*R(d{(/aڠH *_T-uF::KN[V*v9kstFiǰGSٟf^è%6!UAZ6Y4>8VGIL+tjkec@ưs@=6Ry^!62C)l4DqN_j"*0`& "H1CR\K!1D0ǜdͦT0lu]Mtat0-0t @ A+6x8&L4˫B+dK&o?'I޴I'4P }հaþ{P5ˉeO~qRდ"ii!FN,aН?@q2_P:Nr!'Ag`Ge;ia ׌p>F18{d2]Le]PnCWX:@aDAPD%*k÷'yCL00rNFe{ՠ.cqt_ɔ__"xRڣ3jV񢰟a5 8x+ޝQ*FeliA[i]١$nB֨PcuL2lK'W[v8W ܳ,RY*S?&9nSH{{7rmE endstream endobj 121 0 obj << /Length 2400 /Filter /FlateDecode >> stream xi PI] Z ;m[ lb i[,:q}u شh1zwUƲǫqU d;~Z󮨫͖G:b/Uvi@L8d޴ShEuBOUE~}mt+BOM_(PDM뾤{Fw}S9{Bݝ5 %B &ΐ`Vd)(+ :WǾr"AyS }.ZM64H)U>EZ2{Ǧ?Ý/us=9¯9­ 諃n7Z!Ut).VmuZ4?B+sINMUFF;|!aeł,qmmj^B[qPfPM"zZ> [̸$궀KX@DX^_uy*E2tKű;gY R2nvTׁiݾs407W:O|;d R੢;/g+„<U5;c@y88dyf5QN;|0dNDGh{yq-Ο w>[!0ED2nY"3w`|) JX&?6XxW| XSnc_77>_Wj5B(evn'qigLpx9xځR dkM K!]MnJOS;c,h>wҍѢ>p݂zſ멅ܧ<&wJަ_ғC`>zYDzpS?U-@Lr/3 dPl^~Sv? ,ZX&[$zMnKPX ӭ@>+o\QmLZQ Pw *C@#ekfnTPy8諶]Fm7O<LkAX"̙`v_C-x ´uӵ  (57|#(kԥߔb@U4py}^XMX,;7O_*)㢠/;"[^V*q2@T ah0H`?{?p%"B.V2 礫6lx՜s[wp;9N_fko$$.MԂ;)awyKT}B /R=gfYZXBqWem3c n 61 -TI&3|e <6De 2 qc'EQt0eَz^3Q!ߢ((8`c7䡖0RL nd<6 l Ph¹Q͇Giã}h}?ܰ&a vtjVuC0}عDB2X$KZt'fZm/ʢ+T@p58}t#HU™.>iGDv`cwPm' {WǙRpgLKd>Z_TL9C!dǒw|}cٱײ`aFd3T)Ov/~F|%i.㾇#8̞@2 !7NH_IϘ$,ip+˄f-DeZO# endstream endobj 131 0 obj << /Length 2157 /Filter /FlateDecode >> stream xYY6~_a$/bxS g3;@i$A'ymly$;_C7ݶ{f1hJTNWo4h%335yXM~<@$;DTj9`Gzi9SITam| hldFx6ԓ3Ac6!;6l:5/w iN0֤?+:"&sv pg(Ia۲مxΓJ+oxVؕD"KP |T,6)O 6C1kKюf_.k[ew45<Ń)*4ĈJ$E>5hia q(Tb@1@#"5)>;z3ŧ]@ 1F/maMnǘ۴&]}r\]T" dHa6ހ`P5({v·C=Rx`8F& R/}vdu6I2. `mc@B}>ܸL؅zҕWpSQnyryQ 09VZ F L#7f&'?&ROwCVԇip>xD2$ fPWo0p.-|AK2'eM܇&}p[$[Uugy:=7>O$%}[X6b)bzO(^)‹ui-gT7d7~Ī_K8t  |sށs)A֗цPDGdm(IpDZBKW1NbP5| CgTس})b\ Y<SХaMg 5l%٭B@~x E0r[$̤AH\19v迅I&Qi"ԜJ)[ү 2/ KLҷNf1E:W=2AB-& r > \7tQMu(FCvV&-pLv ]5b) kCl=p'4Zqa;=nVf49jtiXOPK~Zbs__ۯV~mQ{jǶלs o&BD_~CDr}hU"5+ceZj8.!DS@3r{Rw,P$~n*ۙ^&+7ř븳-aqghEhE_rhIܬ9LΌBjggMu(ylΥϻ.n G+u t% 'ך(Prq2a5Qm85e?4&<]f˴$,-t_x`m[ {m.բxaY wfWD>xP^+W^ǶDZ﮾R.uKUgpC, _cMܸEP~8` '3ˡkpnLf$2&(]]#*^*]}Q%,@jԧz|V7`- )Iͯ+|N+l>QL@(6Ŷȋ#pC*=$YѪtA&F@C u_08{ `UCy^'ƥs727u(|yHӜ9wGq5w3Z6/.vOG[JQ Ry:{fTy]k>%R- f/bś/F՜i92x?x5zQV~6ĕxע HΙC󲽵`?`?32\JL62>^2^:^I`݂ endstream endobj 138 0 obj << /Length 2338 /Filter /FlateDecode >> stream xY[۸~ϯ0,.6;i73f(0I4ƣ֖\ItKdw ?ϝϮ^}cg I4׳ۙ3  3ZVM^+:6^| 0RidF{:CC5 CJ4*bL[VlGUc"Y'u@RM,%dEVMYy9k}%HHJ)H| \gV"/6@-m *j Hd| 5RO}㹬?Uvn^J=ER.ܻM_F3h(˦ZyH&)[ѷ.yܙv[V8Sń[?"F&cw"`0][yQ;fmE(T>LlL,Iږ3¥7•:IYg$9걬kE{ZyMMe*ۥuKX@ mǫEL[ϊ E~WtfBC{!L0 g+xA5ѳjE-a4Ґm}97uSF*m<(zJD+"r]"R VGE,AzXaDar:ID"O T9;wcyzcBA3VD 7i.[A)%d{BC|*otcjA* ]@SIS1TXƥ]8sw?L;'uO"!ЦOHygSN >0P*lZW꘶FOu]d:6t^V*}ޥX'2Bu6CUCp4sWep NwQ8m&e mKV]&t2tÂcꉌe:{;ǟ0k3-Y:imԳ=  (ʚMk&a)5.8r' [_w}aKU;`S;ǿݺM/l] |3{M7)*즎쇪JzU?Ջ0! 00eMr~td {Ջcǟ,qrc=Wi^)4m؆M%8mi u,䏧޸ %)C`Б$ܫ* j:'`D&o 7}&l*"l*Le__851 ziSCbNYBxaʺF2^"\ E;{WҎ0#bS!+½_Cd+$K;u8aoNv!xM@eƲ'kMO`t< ]kJ+ uuSV. Z)63n.CQG@wNghsDJ)Iy4my/D%ۅ2@ň{YEDnD ]]C$\~¥XjBE@x8N8I' aZ y]zIvձKxkcqzQ/!~(<k?~ua܅8N )^~tғ ßM}/N]n)/k endstream endobj 8 0 obj << /Type /ObjStm /N 100 /First 819 /Length 2177 /Filter /FlateDecode >> stream xZo7_G3@P\]K.YMOrpIͮdoaKZWjw \UGXKt..F':J.%R59ʮ0T#g[2( 8$jN_K(lPrqRE#:l)ߕ1P̡ae?I*ipL+rHΎo+f+֢g@98!0 ,$r9Ԃ}`!s ~W*eP@rUua 5@.EF+ >+XIೀUSTTbdWKAsVMi ZQd ѩ@Yu4_2=<4vð 1 4jƃB ?CR`*pdfH`Q r5*v6BFf(B&,&xbv0.a3tA\ 4@cHeb8!2dgۯ77|58 _̮o'׷ ׃by>,X͋L./}T0"K9Cs9tϞ9'| th"muj>ܺ |un Kw6^R;[nb^g/x}=i-ԲD-;ԲhffvҞr\Kzd0|mdR.1$͛1)GO?u~vtu58|Gx;H9!hq`E\i_w;s1pF%pߚIE< 'U[On=ήh۸֕GWc|D7֯mw-c|S6mxn iu7k[]zF|v{m%mnȭ+䖵~o{-I@SF4)T&s=DX#GqMYL 0Τb yBgnj  d٘ jc4:z1)XKUAGW> :W%EeˮTAIQG:-I'oN& MzxDNDN-:[[!lknĿ+Vv`iM׮JzVeEɍn\,g_L]U375 4V9h®0Ҧk_:Dve-X9&ys h=J˛5P{RGwt&]/޻5eY{#rD3(2,FZPD(Qۀ9&K+mәb^ endstream endobj 147 0 obj << /Length 1150 /Filter /FlateDecode >> stream xWKs6 Wh$\`in'Ig>eVbu,Cͦ@Z-GfڞG@? y{Q,H,"o>O~cCEdE˥^WLy@}FPΖ *楬jUL̄^/9^ b.[4ŃE;0 cPQ << gV Z~9=F 7e b:VN8SMC̿L[9[=}CU%fBG5Vfl'zh);|`=, *Ek.HHY ⒵6:K-/Ys:[u{'"sPÈ=2uOQ|go n.W,ۣ P,C88-z$xp}r9l2ra2+J';}׌Adnw}n$g2Wz20͠Z<,4Lz_iD-{<15SJfĿbC9iG*cVl6& ܣql;DG^Cbs!8ٝ0 *z \ ZtCpHBɝt^g>)_Yi"N`X XI/kcc\dk uďiji0/}Uoc~9lAerO)jfzaМ &k("bcF 12-MS$ v(vvE I}zn$\ HUӨpcrq gx,q--Cb͹).>?ozr>7=V7@fJWq0)u%O';܅@|K'#&LlP!r΄-uf IXg9uQeW%@|\%i(rq sZTkvk6:P[4@.X9RS-wژF7ك{;yj$Ȁ TI0Puʃuu\6+]YUQl]Ĺn)!L-cS9JiέW4z`b̡CyWͿHϳy7/ endstream endobj 154 0 obj << /Length 1761 /Filter /FlateDecode >> stream xYKoFW9I得5C6MS%Zf!QIu~}g|IKvhOK-ޙoV?.|s$&DT)*'],]6 EJ:1>oWx1.Q$04M0Fb"l)ͳY ͵1ev |ycqnje$d FH'XBN&҄I&1긽 HYCV+j =%UX[["V=\p2L* "Od3/4O}6uRຮnQjqʮ$+tyu䲨eȗbXޜCenc/g'6vy&.͗o8⊑[Iplғ)ƥ,;Hٷe-= qO4uwE}>KBCϽ(AՉD@dps VAƄCFWd 3=DAb>~ImexާYPm/w\dH$`% Ğ:-b!`Cu~O5r`'7yR$2AS'u[3e%Wl| -iǵƫwq/,%nUv}Ҩj.V;g:pVTˡ5p?^s^8wV1)˞i!j-ՃP Rz ă_% RUYCxYT}YpCS,+$c9}F& xVpʼn`:q< ~Pb :4Mie]6H]6efjf레ԅOoF IB4kk ~Zjsg 6vɭ}sG'sK$UI ^\n;RX@*e7݄ 2 f, Q+/T AT`[*j! GʆlYi#X6iQv5wW? "  !U$Eu<̮==>~ j]4ΪSd]!`"XM;z)lmgwh6wܽN%Nu\XQۈ2O/g$Sz>3s@1> stream x˒_r.DB&.簎ޔw*Uk83H4+;ҁ _ݾ)]$\/n1_ĉ ŏ7? Ha~m^߬#}quԴv[0=7LEXF:,"$^0NRŤW\9IrRF?쳵'/gM_ۧ}8i"&iL4I OD@*ɂ)A 1T0c`jX5Lz5OTр$VW؅HJa!4Hma{qM/a=(!_ǣ'B& QE$hJlH͆e*;8Ys|2&BJ1_ .+p(U󴻫A8 2J+.Ί3X.OuZƑSiƳnY(GHtPpjU^:ʡ5 |Ğ5Ѳ 7-R^g읣zhcBYUwV7dF؎yְdGI8NT#7^o"H`Y,s4/r'lfۿ 1L9[o+k釢|pSrUbLVyk-[HI?MY*](˼ζKI]gu!6(FGX{3i:.CȘ_i :#SMXf*y(yC)#*b4<0Y#xQLK.$q<6H+8&yhG$Q>! S@ Fk["Z6Hk88(zj&Y,vhi." c"4aA0 7KB>+nKP\(PK!sΨ W? $ؿ#> u0'bB7jSJ 1 ˑsI_‚ΑCzi.(?&h NS|䔂ұ}Ct0Du`"#a"-/Ox5|-K|>U\eO8S`_}.P,1{&j-gF$ѝaB6 $GG—VD(KOQ6CY`EHu2M^tY-sYŝM5$s@Jg,`5Ht:޴G8,&1!46(gGoV͒7xsֆ,>b◈ 9 Z E_!RtbLM9U];*76jx{[>k u4 2C~[-3;ya?' =ScuˉU-^?s3r熓> ] Hق\P(]Rm}hK5peCBmH l3)ӦX3#3x`$I_‚6K.9j3ݣ)JSf p]nS Ҋ=;{rT;w{@|u3f} sN肁%x~a]z :[ _Zd_zq󌲎 |vL~# *wJ%'4 &@1)q'ّ7/·&Օy7&nm[eY;r^)yGb̃E)Z\A͜vNq(Şs$N&]o9۬:i<;Re;2`btglj5&>mt%jR'+}Gܷc}>gux*Ј_Јݟ)_J%CLvͭYa1ffu%zs0P!*l>:?v+3%3/L])ъnrψ-@ö˔|P± I,Ǒ@Bu:IVmqÒ`};}:S|"&ek$o%2M"ZKq|^^ $W٫*K8T%"`PV媭J&:Q:o򲅿J+,WQ td5P2-B,:!Cݚ6b2ж>[wǺEP(o8T]%*J 5Rl}]F6w?aW|<_?* eQ/.}iT}0a-2ؙW<lp\)ƐowM;ǟӄ+XdYve:`_W8鏹bSR5'plq1i?Te(Nؔ }PH!wN_Nqzbrk#5$3ՈP H`-'w9` ;CYdfTŮ2n6[E> ݳ{,0)/-`⠸3X-A3If $EX,;R}^ Ac5unUNcAorp?6Wm on2H :cҳRGI{𷶤9( MLhMc+Rgc}M/2j Ij~y,5{0aRUkh==T) b96OUFnE[a23dIr4 it.݀=lsfX8SpN3/骚^s(رS7b쳽zFSz\Qnk쐾XoBHŀeMP2DSS2iյ%z[l\-qqU\6ۿ(P endstream endobj 169 0 obj << /Length 1528 /Filter /FlateDecode >> stream xXY6~ϯ0X1gXUcAǧ~rܔ9ap䨸z\0l#$v7uf?4(4.EC#?4F)E2 ،B(r`S\INk_fp\lǫ~M,w8oh>1&]MáFwz|ioПń|*4$ЌG)h($ 䛻"~NZT|i}=2:=dL3`:;ze&ۭvEuލ=o%ڍϼI&,u͉ }-^3" ̆{A=pזS& r A$OYǛSċ1 ׈蔰pPzrO}܃p>!5geQ/jhCbVf *RxQ$yZ֕1HRg#lPKaVDHcĔSZW{ĵv!#><^D>CK36~DAгo :~V-VX./)4R䱁+u}i[bad77Bj'̫vd]^ &sr'{_4J<~r<?bYng yf/-|::D.foI۞WpU!I"uGw> stream xXo6_aI">6@SlYmi[X,i wQ,v 6'xwٳet,d$|"go)08#Q&y^TfrIFp4SwwՔ`L T*r\j M:nȊ:`)d K30j p=$=aD1Lʭ-zf yx?)a ed}߀&UaU\h`ȳB9^"$n\O~.++"J\S]SNM=N$%E[;ǰD=g@eը/uUJ9IxaQҤgmk7rN׭e1?8%u7-bNhߎPPkU, I0œO"XLDj$INƇ1#BخWƐwb./WlqIy)HEA1>A<&2>+g=T)O0Xheh#HD3PPH$(hh`Y-J|RNjQz0bHjD$I$ūŢ(-Cgƍm8f cTyg XFESqKjɪtS{ λ謐YuK(/}(#ege;lUG&v*jܕ׌Qyqtj.V!Z(HA qB~=;@Sm"z1=jfyUB6]ڽpƀ01pBՔ|g@l# "8$;e68Ə <@l%忩PB堹7,ȟiwT̵ZU5w@N';ߊ:Cs̔'!iȿM|+~> stream xWێ6}W\XKHڮEYtMt+%5qC uCѾC 9sH^?:  IB.ֻEQỊzݻU6ʥd:(4z)Wuuܢ808mj̵!aq3FLD(㋈Ʌ8I("CJc$%K =RJX/Om!ׯ~ۇ@6*18HY"$b\9Xh@HVxXHd$ d6Be/4+qSf.@O1ju #B!z30MPw 4/0cMfx$[hk͓Ef'lm1󡩓6Kzqz6mc xSVpn̦T9p^ Uڍ?f]2HJxl(o(Yx7F QinZ,zJ#nd{Sܧ7K_ _xt`E~pZ}?M, Ў(&/'Nwf劆i93vgCf콵pEge;|>Ͻ7 g|}w;zvϾ`~Vyg 3wIH6 Q<3ZӊH6 GrB4 3/&>ιH//pUHQRhXT;QuO&՝"烻< ڿz9e{[*=)7i]Jo]sZ+qj2fZNiu}~a4 endstream endobj 186 0 obj << /Length 639 /Filter /FlateDecode >> stream xڕKo0m)8~Wo&iYu<Ȁf==㿇̰X])0MWpЍOCTsyLޚ6o=[^#ry'$T&D;K_|EBn5_ tɻTf#>(eT"w 5} :-)+|psJf*R^ޮ(dXGA 3ߣ5PSnW[0mNa1MB?x|k\.˺/F[7g[Gi[/a_2B|w[=>m)s\:=H(G ͬ')wL\NmP endstream endobj 237 0 obj << /Length 1138 /Filter /FlateDecode >> stream xڕWK6ϯWH@lNT9A :ίa.V_ݧiD<Fb>at4[p~ʖjL_?M;Dpƍ z$1['x $zf <<>^!jV[~Eٺ֓Hfd#w]ӨH4Po&WL ;b$('01駰;9> stream xڍuT-UtA){BP;4E:(һқ UA Ϲɷלk +# !y|%s@@@O@@t'd5 pb(! $: B:p@E%bAp$@ u407!3uvA%$x~< (耐.`;B*!DzJ<gYN0xCG ȟY.P#w(F!zw6@p@>?d*NpO, s8A!=Um>?9"ܽ|/r@~*@ F@=|P_3*>fCzOr`p?k GO~' AD$DE/kOo+! 8ǀC B7@"| {E`$ :: qk`% ϓ Zap{迯BMnjpWP+(!* .i%kE=p]K.[ _oNW#Uw8_y@0AmGT3_Ձ8B}<@vP9sPoU?Q&A_o/P@0n77Z!?R;2(@׌^P@#! z`AN ~ :!οa>ڊUnoC 0 ,qVpߏw}LY'/j/igĩBpª ljG+Nk^l#KsԃKw x7Lݰ[15Y |I)^7T|z3nQ+ub7$:kC4 -$/=>o5r& ,SΧ{hZc`C)nfiޝE-L18yިY#|PFj3wLjR% vT)8jaǰY[X|=TDB>qGY E?Kȣd-Q\#Є. %AǏfɩ-Q`c.2s_'ǜ9$V\Sr+W) ,jdأ_*aAɗ.cݤe,8;Gf}yɜR7}o՗k*` "Ms{n8)["@*%AfpOU[)Ii+=Rrj0'[fWa_kPMe&/x^?dQB9 e;e^pjRǽrxnKc 3.jJa4Z'AlT/t.yblR#J@7Lǎ y9pk}UAZ[/d?@5ݟw%;"({o݉,s^(sѷkhx})?+އ$3mKrlGfa\˦RGORl_ YeYW1zsd,A<(1Q뾜Ө g4@fqG:BaLG̸A1oc)^;2dyy/?j4lB4.xq牢ak_qN5};6zrGGtY4k1%/k=S_owBwq8b:MRyh%0|&8;'^ gmB՝πW;NV];.n n#Hfk-(  T1Tc;_=} 6w6Vtujң,5M%s9"{\5:m6rۙb7+?۴ͯ_V8L[x!ifbqU$ic}G!J?\\VjI*V5uݞFWv{hT+B(CŴ0 jEnl̑QrEZiz-AӬ5 1*4ƤRo6wsaev{ H6*D䰌~ eO,YiWڲ.9M5),m/)!R2Ė`?kE h NxT Fp~#Q$ksO%8ҫ}Qn a{hw;.-/:ZL"u4N#*~K;M_*62&J0Kߖd*mTHNnJxV5Y I21f^܆za|$טpI'N(dlvLK'J 6E2Zq* 2cou@ܦVx=@\ 4飢ٖ u6#qA #(G~scAqzx5Ul=z^6ى71CbPLoK-1N)|H!E{-!#}uUqADP-.]ÐzJ$|Bn >0  nwKo0j=FQw ^I]7ʩ'}Zv_0m: h|tw t67j /{OyK@1+2IDh|ZYu[izyUS/Kq VR7 ݧҽyx/V2Sb*Z#fF<h,UOIWLVٽڑZ_mh3h1oz-_BD6S66૤WL6|3w`mafl*MSIi) <f DNy#⴦IrT:R&v١]můOruw>odQ6bm7;Ç+GfHo:1ЏE?y{Zڈ/n۩۝y5r|vC}o_ v 1r)3Hk‡(Iũ3沣C=v@S] BQ[m8w D@C=Wܳhjs9`?@<W)Y-&LLJϭw*tw6מQUi8a'$xϩv`h6 =Ji, :a;tk=㶆-9ܦg3gy [c7C6q}F7-# 3v{Wf' Z ny/+hWH\VZ4o Om-Ιb-j|:}<Ψ: ȧg6$AJ:fҤ'mz'~o#1qmC ײ528"hMdAv.bsIs5m0軤՝R ?@XP874}O$!%<3A+|Ppgo'0f!x˒4Bt"?"Sֳ>WDލ v+X),JϲDRozJ$%"yZP*RA<8ߎ8wy\Df8R=v*Cb[XFֳl>[8^cҒ͵d+|BG7Qk\֏6R85սvZr b ?Y~Nwuj~ $%azˏ4Iz5l_sEeQ֍IEKoP>BNU x%=[QNB!@Xb 'owp<e54%d6fȧ*NVwZuYUSZl]X1^)YJ ʹFGUtJ#M)˚ 2"xL}7K\n9Qm}ZנTŬc\Y!pB;2P j1^b0w$k,#4?7lġJ7^P4Et:9!\9r)Gw!i-T$_W) 5EHׁJ9ob3G _WߛRclƯ3pYQ|gQ08|S8Ś38X~܉Y1}G>dO{"①$j-MgVԠx3D޻l^pSW\+F-< ;eL W?)QgƲMr(hZzdkO߾L`t]{Ƙ; $xD"SEvv` ۫Hn[yػ&h8.a׆c}hipG% r/v-(73wJ%E;eg{eoXqpW\ ]XҌG6WmNDvuίK`{"wi]Q*;,!dp -j,}rwDZMqH17r`Z7r}7!o^ύ 0R`odԩH;lkN6ANLڸ[_ђ%TLNFFι%1keZ ,WZH:$۠4~oβޮI^NfW 4>$K|GYq"#o ޵*Bw\s}3lEN1/D77QX_ת|/o޸~(m}_ɠo q(G =޸oYRhcWy{GH}?Atz뙂eO`L=۝@Qj b2[S㥝Y- (K}#SϥRZVd2#iBycz k柫/zFsMqɐaʎ'VPÄeY]BΗ2޲\G@̄[PgmDw3gϡ=^Q n}dwrBCۦV'77#xOܵ |Y %׭{ #ߟ aF>y8Niw+Z\1%RD_J{]0i&3U(rzdQjPaޛ.j12qb#Unr "JI4iYv f3k3HY+P6> stream xڍwT6Ҥ8$4W R $$ޔ*;R*)RTzZ߷V3g<ϻp޾g(`UQHX$ P $Di9Sp1X )% ۔!8t`1I]I I Da$7-@GB±J('aß %$ (1 Ё.ag! <[CK c/pGp,\ Ѕ&H 0r@`; Qv8w08yc=4s9 _D_$B C`0 D vg8@OU[@@3A(t@UAw?, @㰂XE4kVA*\\H>e߻'p(w;; ۇh17QfDAwEpW8 _=zQh /B!?Q[ HgǛvc ~`%a(F 43Q1򿜊(@@HDw A?b5v(EzwnHG!<&E p@  /LT:;s?~ O݇8 tPx1 j ]-{5pxJ EA"*n{9oH=qG@ë ``?PAP@0'~(-@A$ {ء0v\[@4~^(_{E|) (>`RAUA K$)fByVdNa8̌ b`U+V]E׃ދl5"{l+lИK,T LoIb: FRwrRU)ޝHfpnK[EQ6=ɷ/Fhђ__\.D=OMcגn9s/홢`}xi#G"â,rdB4ZouuΗg.ysw𨩐xClDPU7DJ5`{^"gϷ[Z&\#ѴQ^sS>iyώ6w5(%/w=ryKnToW4OPkA M쥓 aJcl ts^пB5SD{t)5^$nH ڋu?$S)Y_SEj \7KiVf>piP'aQOW${WF5+4fGT2~\$@&(k=3v56ks9Ʀ"IQu[l 2AVQUz^@ǭ):ELVWspj^B/DS`D?ϓt'XOrqi^}dʾ`kE҅$S]G KTLkzѨ ㌗D-vի,,T8D)i)^fSq誝L&SulES}_8rz;5.5xYT9U'Xc=md^"V:qE޴{5ߠP&[9#6qbCDϛ!D=&jζ+O3eG9%/\PKgɛ_Ed#h#.[+lwluACVsrd+a)FV+DCZek ٓw'F!<^ sPZbO"~*HF=09xAR Uцq o+m/]yc$b&U M&DQUAIo=;}K hB U&hzjxo/$oL.9*ڮȔy}h3k^j=9u9C#1WtLL^7VV ye '6Ák;m^AӖ#4Xy2nZéUDW|V~ߪQS@;{]Dz2w~dNx$b*xpEj/G [*/JN^[ , zSFB67̑XLM*٠H Ɯ5<~(P$5sWҋdrn*V 85jJrʟ9~u%rZ~:OmFh9 .DmhͲpJRxSqϻ_3m[tSHZг{7 ~Ȯx1#кCMavfQHIx~S3N#1'b{זEqKۺVq|DYfhV(q~g&vż)19Ń8uRKWx•Tg-k>oa'a܅R~gi`| I )P)SUv!9'LR5XB;s8=n*JK~x=${۫}j2V/>87"š#Xj炱!dT z!i#8/M5d28%}zs*/QY nD+ns]_MM!Ƽ~0Y/p[|&ZhYyݘ ㍦${m'= 9lܟ-u?PSMX%V:O~a)U `8{>s2@?}IPR!|د0ʵ"w#0{}&1sA^"v ꁼv<(Gʫ/&7R!*CLKWF/ӭ'Zd_~pnϟ{g+d-M_3d3 /+_ޔ !d5ΗfU-L럮*YiƪZy/  Ogm&g-Qũ}#rၚ x^Z=Vr״ݍm%n g4r)GS} #ˢEXnf)uUrέ5U0:3{;dk8O@&`w,T:$1~=K:Jȹ}·|q5Np@z#Gӷ0CufqYMĈ/GK]yl|K̚mV!c<&`Zpeehkfz|y8wBپ"⮚Ɣw̒T2v3p֋8`voKVv TR fub+ /J_t/{ZΎ?Ș 8Uw'彻k(:-Bs-Nsso4Td -,16߫M?4Of,s5?8lӂ"b,Գ i(FR}@kHOٽםܫ^3Ck.nx S+(pN3k"u$EWW1]"R. :F(O q#(6*¡ ;·el&$q+KKU;Vt~X:ұ>=VQk=i ^;JI1g>rNf3dEZ-d9ݚ gZIU~+FRZEl]AcsMFk\NpY9=o;<Ccc-BYk I-/Mb_4XË^a9TGmKF!…<C>zI(KqDd{of 2>]Fcw5Pf]Lj QC&euƵϠBXߛFz+ ! ]=Z5gRO}^ϒ\1bZO 7:kݹ5Nj%^;4k=%]u[r*w~ LghR? f&Ov3SKڰK?j3̪ڇn7$iF+:{i"@V;26bL]$$ĝzo!JC3/Q,d3ݒN6著8]C +#iwYmAJ$D?mM;Uph[WpڡC0[<UqIzل2UM$W?X/wʜS%I,(3<{@9iE/a1ɫmB'傾.)&ex㩜i8h$<ǝFf@53= \˞y $% &lKB↘(=(wymZK0ݰzF'DmͰGIO*mLw\= o{Pd V7 rh%-GtVRrU|U,6 ?-4di5WK .4D+ʥ `) U[du6ńJZ3YVz,I8!+o> 65qN1M/Œsf#j|*g#Zdx{s'ex98ۍ: orXs;FCxe|pQxm'ȹ~=Vڤɝ<*cV@Qd!#/h`Oj"jGǽ\t?v|c/w1u'EE g̖XDxm]k?_xn%DvlKckuZhSx6(q+zt}b HF]Fϡ?/'&0,KggӒoV9DV,"!!LaXH?fN>cykK{$:IMYvOEM5 }Rm=^^.(0*yrXHE߹zk vTr~},ٙgZ -We]$fw+ EWA'Wh艫`YdkЛ &»FW8^LPCid̘k_M=AJLtڏUnu9',RiQ,EJpO\7.et!!r:*Vv(C87x,zwAcx#/r-jT?{RJCv畬i:{|ty02xriHLû1Kx -+z\-q6LAo-pƐk nT"Pw.C<+С\v7BMW̑/¾Mh(Ϊ]$}KHݭ sd> stream xڍtT>H( R3tww30 /!ҭ04ҡtҠt|ck}ߚ~sγgVc~E'D GRe]# B&P &0 =8(#!`S0~8@  @bR q)  J@JTP'@ xs(#PW昿nGHRRW8@ :]09 #?Rp˸PR>>>`7OEE 7 0@L` #Q>`$`PGw ƚ:}wo>@J'g"(W0A.g( W@`OG0{0W`!!#~Rs˪p'e$Y  q\>#|6PON^pDS "7AD@0: Loe1 g H#{C($(? @'# q‰C1GB}V@@߿V6y9!0ꯠ!o))!|"@()2q"i ?eG&]- B5PRS, 5/엙1ݠ0?z0]!Vro& E _TB (Gj21@xB>+~Lkˆ-LJ#_&fry*sĄD`$Gi2f' af KA8 `H`LJi bQ#e c? uyy F_/ q$G8J? o WnW)Iv! 4 l?"͸5#cm]SocXˬ`֯E:jҢq8DN։吴Y+ySŪiƊ.VO]&a +c^z<9KBlu<YKlhoDkbϳ}s %wbWϲX'uh+n_. asxLq;kYf2!e߈@X55_6ūAśZxSZXZ(4g{8S ⻡f-ccwc?TpaS}oX~0XxAB2dL&3XHz-mt2cuo>'|kau۷)4$v}9xVϛ%| dD@cL'XdbuAHm/W4Se, }Z֦%W4SJ0Wb Z7y;k3 kDASKSԠߍn2h =}Egg5`a}aN9ﰜSbG$i0dkYm8{^X1x30Ƃ{ȟ޴mv?U=Jwx=+J_I'[*+i^qw_z %ub9Qղٍdj lٺ/{_CIa5C; Y /C/ޝ)C9=`ު!bDCB/N= 5;/.Wnվf~?oeD⵻A+Y&SdbdgRI/vjxr2vR{\$5P/j4V-vΈt~˷dX7>da+l/NWoηJo],kz|2JRZ=LY>kbSoaZ! civX0;iېp㱁xO(l.Rf-޳­ϑjXH3l"8D|(a$kB滔>s][l)?S|e3 }fm=,Ԅf?~VpdkViaN^[<(u| Y~crX1HZ{SĄ'jD ~6#oJ_$dzO7jbԞ=&[8)V][E?v>1 шȡF`~Q%=T4U&ܘa}RL4~T`ǘȯ09v.A>Ae{@ o2z.MXebjE[U_7lIB']7g/JxͲ#R{;9z=bqf:ATf4>|Dz\4(.UpuTQkJR꫐󇒚ߓ3p?_RNPzrG֖v{Z37[- 7v̐1qO)nhEk .]i`by3te:/E^˧c}::n? Vu2S]~~Uh+X[QՎ{I>pb1"-={CwRAncD^/m3AC1=]&==$t7^'=3Ƌai>;hSsSzv4D:%@ź1רصaKLCi߻OXYnopԢ >_d0!C}m7,fVۄ2OqDͷsդoqqQBc+ [54FțHm+LҮ][+d4.68שԸ&L3ck7 #WJ=Ē$R6z'8lM~}ueE>V]ok|iV`,ERuwT-1Mk# ^3rc$ihF& wM{V2q "~,}Q}-A´0̇lυ2ǨԢӃuѮ$2:$bmue@kUA:cUƔ1R!1m» {$BVj&/2g028nMӅ\B5? u+#bZʮY">?74Eax켌i#yG# mY%cQȓw,w.&_Vl; g+|ߜlP%/GR"K- e #9i/4 F?`[]dh0槟3/4^5/SDsut̞ѾS0o-g޶\1T+mRjYt;&Ui9]W '+wb;#{|UqPv_h6.~/V IRwu:4P4lתjs^&\?u?F,RnѕPKJ Hħ>ÑGj؀ϣ}_O*F!|=]/b:t9M9hN64c'˅i^qKGcJnhT [Q5fB<b]iIM3A9]쁱Â5c{,m_^s[D.7[*\xcܒPrDC3_U/q_j;v4?Ī7|<l佷X=p7m0e_}2)wb\;ǦZ+-iChg@fi/snNN0cl'2*_ wtGrc M.FRF83T7.Ney,Ay RpJR9l0Grԥ +Vv4I@opw:-e.ҝgρʥX{օX6&ǝCZUFe> stream xڍT64E){U B!PwwE@7 H. EtϽ_VJ3<V&c^E'#H C Hu-|B&$7NjaR`({hL&a-/(@P (&%(.% 8xC|-8 I G< .H>?8AIIqEw: ]@P1!Q !D"}||=r<`yxR9G 0qxe0> B ' wk _dvs +, G{}j;:xB@'O?h]z? 4BA_?:ꯙ!0/ݽHߘA<<~]׿/$$X]_w\)~Y]IE=wQzЩz$`"rr6嘯͛ $joз7 '8xfa!=CklkTtynYILt']{qL,kaKr,/Mq xo yEڽb54~ZL#)4TyZ͞lJI4%l+XWO ' {5:)ɫ.:+߳r|~3?uKJ O]&kpa0.kFw^V~a8L'9ɂBPϕ L:@Kuk~Hc*tmpO =THEg^nr{23.U1d۞31?q:Ȩ ۠K]JAr~9LЄlDg #KR*B1xKjwdC[d%/MR1O$߸c]vA2=v-Hi/z[r*H|v@i=Ec g[ VИ ;gdOh:>pVd/V5%)/PŘZ8ty7~# Am7"W>RRGH oIcFI9L4 0\MPyŻE{,q-d WꈣmX%j߽ ?|{RwyekN%T'Rd$2q] {;5pt{S4C^4p+s=Fzմ҃iliYPF6A:dF./֌rGA/m%K=x30n8ucCT>k%K]QgJMpJ&;/_~ߢ>3"i6~5kKA%]gyggŸʡX]'tS suEDmÔaf%4F鴼zّr<eU]6UߚsM6RN/3Tq!!V;GF~#yi`YِCQ9;og+jSW)F~)NN;Qvd*.Ne6וGvg^,{ ٕOP+u/_($Rah>ҎqӗwJaRʳlW[ }68#,E&ix{K3[c[2 hzfg+[xu;&O}D'k_&t3J'n_{a(g)ɒ-yÖM6j;#&/*(lqFy' 3@o:!`CK?WUbz~9`έ Tm96Pc{-?Cyp,f%G{ؗkL2a0".$]z]t.igt#D%mHA!iU64yRGF˹~̬Q'#%F,[n:su&>.qbMDV5!0j.~=BZkھ"bק O#'p\mNO9ps--Q%(uxȫЀ+@n4o~i\>TL$\oAMfwgh@m^f[)!cǭawcqfNhTSǾ{x;F4= >vBSUMx!)E@j7#!4F` X){s5wXW;z_ K6 *KzUDZj6u5V* 3[(?^)2i (M<д7kra@ۚ)Dqp-/|fZN$~LG5In}A ׫g PEb) m1RCS<d0E~gȫ^3yH79yɖ@@wӍ+$IHo5GeiO_ܒ$Zy%-?+v S2~c|F3Zkz}NZƇσ3z(X7+af.TE K8ɀ?8d\ _s>tZ OUc4ކ1}5=ђDbDq(llӱzBǧoo/݉(cD|̥+_6Cn"^'0 z`,O~IF鹓vA[UջX堪"<:߽Jkb* wX§^[#5Q}][>(Sy>4U*?_>ПvMa%øj-κ;rFWtOz%SR\9'S{봹vC,{0̚N)/rþi1H#NZ[%;<ޱS.=yE+iU@.Fof{IG!S793=8۞9_7?rs;#yxV )f6f' W+j(@孵b1t?mκ#hE_)կg*N Rt+1>f9T-j*Kg+~s֞DTDtwS}*G/ǏFHW_L42D'M||a~_}3k_ vq327?v4r;B妀.dw/uλ{ƻFӀu9ɡ5oLn1rtVoIq(,,[:z43Y0uO}V%6a2Sؾ|*LmeCnIyg?_!&RUI_4T%im=K&7 F'88ى3l\v @ ukձ̋.Iڃ:݅J4 qMpLcLN$ɾ ̰clT/W,9b׮a'rZ~ *z:aDOsc^ڎu+G _c/1>Ob46zU|[/m ;钨P ,ЬePm"XXlEj«Zvel 㑓O3Pgcʩ'O7I}ԥ6)msF,Ga];OZf;'x"n_ٹxdlr vw;Ǔr]pl>d]#-c0d`\m=o)UqWxZ#'?1|rRc\0V6xw +n^읒|iekY<4u? hIuue6'v 9<{"֫ܒ;m Dٚj/W? a4Xy6x'h4ȏ}ZSQhYvfziܮ=]1eH?ǃ8輒vvÕ|Caɛ}ϊxR^<[ԠwLm\oo 4̡!!xƢV>CCe،Vql4XaUmP9_8/Tמ7pixʺ[s~7:X _f:#-:C{ǏeF8$A6dzBn" WkݧAKy+sO*tmIHSy3&EfݶXĘSfAg)-_dR ywvEXE;?RD_ Eʡdk#6Bu"= M'lN/ `#$^~"'O8w>gxw])?n kOQc3R]MV\]^<34ljp_*IA赺)N;ĨxXꕛD8ޟV9\!6VD_Nj`_rml 1ߙSG'F?O977דq}'{V_` 叢34}.ĉ֛&32'Aq͔gT\MN=j@"~\Ü9U)iXSi%;DTo\Jw¼`X,ͫĻ780f^}+IeWI/?fphw&mlQ7*]!ьnl}:hŸ Ŭɚ+;DyoV~Ǎc]35aћ1n7OBrfe_ө02ꦭе27/ICT:. T pQq7՟Xp5Rl0x}N=k=}J4eԴ66oipYt15"O$Ӣfo-iR*R_t`3ܧ~"FU I{E8fb7G?%fٟ`_^F,{ɇ)Y-b3(c=uĭ0lwIeӢ䖻Y>J#ZVro=fTM h~MOq8c{ ŒeV4u}Z=BzHy9&BS4qbN|ȽF?vZ]xC2i6>.͛(p.-,{z7^ڷ;Eaju\MB >\,,S:>8ϽeOa V/͈f:)?PO2>ޔJB)|i5]B ?H(^ebMl;P0ש{ksg3sVח*&%xn7"s&׿Y?NJԨ=ۭbV;y_릱 I6/6J_1>(a7tWpܟU$XOtz =ĩ_yFM܁o #vE)ZK:[y3nZ>ˆg1l.§x58[ywko%zBM{,fY0y";$c!&E E~:av.Evzvֆ^t0K6Xb+MYe qT!p1b!Gn}4TeSq=3fR6ܜ瘨*7/(8ܧDwruB%?bOj+N #@M4U/UO <厱 7$իt| Mz;`תOdӑuߍo-KƠ%>z vMM~6g6&&.Y fJh* esSD)34~= yH\Zȱ:}:5#uK>z¸⿐h\P5mMe\iUzbu7|^j3-ۜ, WUxНH I5CY[s8U^9Vi  yD2>ك713~9S߾!B g|/CX5k\ou\Ͼ& rzpLK˺ք2LDu<$TqGZX?|@񂀛q =e_=Wuo8em;=utm?y v~(%S印X{o]G}# \LpiPc'M ؟s jNh'PmN;̋c)ar[My+e>8P&he47:2nPR 7aEiw_ddv),DuijSeO ظI]3kwE[q"O"XS xZg~jXr1\/* /&O`/b^Fdv+`&ѤO~F|%OJd9ln2c,o_GsZ)Þ* #e&DqsUG~d ae-\&vsa)$ X/>r*܃saC닉zG[Okg)!ٱ!q$&({@KЬ]=S[ ([Pq[*6a,~8vS[ lG"S9JvI0SUTRĮ{M`vK!pWo}k!jOy}oԝGj[7=Nj̀Q.u/%ޔ*D* MnJM[1#q21DfrQ/kՖ=^עb&0y[ ,k\na{$NJwSңkb r7+)>έ ? endstream endobj 262 0 obj << /Length1 2648 /Length2 18915 /Length3 0 /Length 20443 /Filter /FlateDecode >> stream xڌP cݝ݃[pw n܂Cww}s=9*ն{w=RkJXA`'wVN6!6' V_92.$/ )W"C UNE'7O_!_C@ik Pa(@nȴR`gW[kw?,,$A@' a: w b,ttcZ1lm 7'd*wilȴm[(V^@W"p9A\<,A;@KA r X7Ouhavt::Yl@5Ye6wow! zmRd%4@HfjfFa mq;:ݐ'm ݇õw{9Y:YZ.Ù] DGf rrppps@. omg_JbH ~`g P z_ pmDAVwr@ƏOƐ ;91$4T0]?JII7  7:,d'YHz07*2 ß17尀<Q_f$??zp  NTUYz8_; N4MdnnalG{l@`77 ea= # ٝeq[^2.^>$.^^'d-A 1 q@ X])/]?.إ $`se N` OA>?§A>?§A a z?HgA,$&9o9dl_0Zػ9lH!ՙB e/_YVYx!`|o~ 'MawlHV\ Yz+o5_?!z/'&D26>6 Y@dL!d/ğ %;ެ?zH' eC j'GwR\?ICb ) ydy8@sI@" H]$ 頋dirnbsB rQmבBA^2癓RZțn ׬@$ǿ =!y\oAHxAH}$ r\A⿾Ȁ@ ` PЯ_$HX&DghY{ܣ#|`Yu0܃!pz!5Y4Qsz yq `@ Un=l t"mzέWw]ُ-j>%Dzo:1FųYO1fgs'_(c?qThsu^aMI*,Ŭ.p0ASvR *+`p8~ hc~ӋeT|@l%+W\g=tl;ܕQ::rSK <@]V)M_V@̱:2B LF~ī#j6s($nFa%Yl.g)E MvGx0Q,eJ5BԯXVn=Wع6-Ģf?m;5 lnJ#Rg_1(-̏O'l8:Aó;ws AhlojXM/8 WwONkJ4 pmLD2GTp(GrRN>di.c;AV~g*jQlq+ 1#̶ojrjnsp\,xS|;#ARkѯ(-ciF{,|ϩ!~{ojfGS߆GR>g\fD5gzfNCl9,^(*$ﬔ1_gd ƊGs28O"+wk 3Ic74u!,F"Qmv)Hb)ٽwɐoM+Ѧ 8z?ʚh~?$!f+(/u~@iN=Mlk2!Ce7Nv\s ^cA Q>͵BqchV[gE%Vև"gj ~s^ZZ,z闳i:ɉ ɹLlk ܻc\x/*ѡee ?N d;J1.|Jʲ 46FGUD#e{"FS3LI5 /fAAIB z,PϒreDIcm0B%Y?–aNPey}_/5;Ú61#gP9CqOD>F/-"-ǥ(wMtM,}Џݫ@Y|6W7$!U:f*5𛦸̽(PǾhK5s4jK6{-,C1[1A֎W(wrl,jO:3^N^XЗ;G3•sl_霮(a?TLkFwH@/&uh;$X-ϊ.8mK1*2r݁||Ņ%U eWӍA+qyn뇽YKvX6[T_# \d0F!Cꉟ8 5a4< R1gg E J]wtY߽.G J?{JUG|7dj~ɾ[WDP*$(I"݌9m}?-/6s`%jrG%]%q968&Zl'ToP{b(~/HPͽѐ?וy`aQa^:r8#Z!KP49_]yߡ2U& b  0" EWb2`ڵY~z .|r k2xqJЭc"(S;?+W#GpIl L1RzjV Bxכ36!Io+9sG6/=ᇰ 0KgIe{{?A+DkGh=r$AULfiߓuzR/7Z6"C7F85bLeLpd(F(Z,Ï#0󼺊VEU;V1M0x&,~ Hbn5;u\Q)WJ Ҧ"ݤ=)K<@1.RC=acbZNM$hl8ulR鏆}ιJG'ieϷDSR_)Ub5ԏ0lhs%wVqdD|~G}1?.nL>pւ qC,K Րx sɉr9?WN[Q~[pEV{SZՒNM޻/N2}:4Jd蛙  0Kڱއ!y^z&6ݏd]o1bεk ]p;(~T 1Sk_%>qcaOtЫ(X(S UާYv9ɖl B'٤l1S0i.ebb&{,K~&IƮY|દRO jS.w4>M`eW ?Q zm;;ht{wK,)hU_ƶ^か=9 >W4٬e9)6tԆ/}$PO,C cUT\2Y>ZDWS3Ԥc k0{oꏇ)}xŊuf4Ib#01Xy1ċ$h(k 1su WUhk3juLn>RmD/78TVYEI@,3N/LƉ ' vHKf*'̃N IrKyyS'LU2ޤCd"W %$i0A!0ELcv(צ#b骫 : >u'7ݪ5{w[飁.skc\r\jg}%ÐHM1 u{[=mH $Lkm?&#mqr!ɥ<)2evObG[-=ٰx%/WIc4MkAs˒bA`1n8ƫôcic(,jez*\Aۺ0]Y#HAL-sNc4ٔkz[)T༣+^~Z ;ZsEF r&=}uoMtI&S6[5-e`$Fp?fӯ3kz v$Ï$>z n @! c% yZlo*y![7v㾢2&ZCFuP1 L/+KZaQT~$]Wq\bsN,5޳~a\MՖAJOT9z[AsU |DZ0)o`,v.b4$ެr{hbshg&=Oz'2 fVoLbr>L:FJ˘O~Q68E/P($GٖQaW sJMZ"ed_ULr20ORDDZAJh&oך(;DZnz_Xhʷ1 -TTt{f%;fk6ų.g{8l瓃$L}*7';Y)E*JDi@?sR¶ӴN(kΚ;{.?QÅL봜cZ~0kԇv^z(:tՠ.s oau J$-g rU(lLIid`7>jY#M(䤔mEi${'45z`P Jsy\q:v]Q®(Ċ Y5A[J*AX sēJ$NB\Ps64C8{2xM(3Ϗ\]ñ5f0}ƀnjr,ÛU1{qԡO+Pc? C3Fi|uz=f>lp`]RJ&51H dEk!p ZC&ZᷴBkx'>ܰAڝDЬ U9.j_PE䪖 B씎ͷA5@vwKIK z֎gʄgVK)\)a$íuX($MůWP& wfL`zEr]dINwR@f[IUio"#So}_zFֱ,vjoVDA}._7h⨟Ŋ+ 㲴y;G^^m[p!KEӱ;l' /N7Zwajo)vjd<,| Ӝ~?/WZ3f[&=]h;jĩ)k.Uu[BWq!upўq:ݥ H xo?\?j=5>IZ5>_Ç^{{>"1knSppɈRy ߓiKC8.4g%ZrQ GE ȁVPJ dqKfD_`#cEoGfO.u9@Byoڒc߻( .k%`"uGtW {m_.t.Φ.^Fcx^r:]` ~Y7hehZe @ VKEh} 7ײ26SןG8j$  ?ěeVVLB2bHpxNW1S顀vt&y_N]? ` "7?R'U oG-а[f<]jq,9pgֽ*S$F.ox<վP(MaQǯw}X 6gўh!4F,^`3ѡ%N_Ө|;kGgn%IT@lKZ8YB灠HxYGRenX3 )G7hPE ^9['W^5fXK|,?g jF0 RUӂZxI0 ]?\{VFȝLH.aoΏ}@ceb<3AS3K}!b h٬#azwaA920HP]!YV/ /@4@iڮ. b[68r~2>۱[fG8"sdzAAWI83Uh,R P$^3;*ϝs,mh[<8uCcJu)D}O{.ӟmvS˥8~Ob UUp@}"(Iγ =Ԝ8|}܆z =XBWnvqf8P-ts9⯁d,uh6:cȾgMziw3`.]<졯Rgy}XOJR|&f(6[\[Oc4)ccהe#ټϮ _<L)1N6q|!CQȣx|v7G') AQ?_b"l783)fՐ5y}hbysª]C1#^  G >=~/'mna¿Jj7,NZzzXtCbljaBn;(/=;xA_EM wAvKSLyHKxbT_DQ~] ;c'2-o$E@o9dl"ٻ"wE/Nud͍D* U&D +3YWW]65a#y"kȬ?t.SD[p&T.S&ͭ&.b V6b#ޱ%}1qGu JF8$l3W5kVXU0FؘMR#̳d'Z-VVO(5`P')@|Zy-rp[cH$D טUB3$p}gS{]_;㧒ݯZQrZ d."tx]zH cQc( c$ݲ Mq5esQ0ae鼑ː4tV4Y/ÌEr.xdH>y*قiQiBjtS%g2`So_sT) won9mb?]9@Rrldډa]e%[<@BU쭘kV!hxf;K|y v":| F=HwyjۂoTϖ;+O_\8C+{^5qM sa@6%722_ V[j:1SժK/nP[r|C"&ݑdR's2$Y9ӧ B\.iTHe9 $A5𤘜F2wR]֮z[ `{ ?vt!UhW6ppzR>eyUO&Rn1 vm7Or($K%>#ɛqsnO|_HګA:~K#8Y=T l:# ̷vޏK;_#<+;dm#q>PhVy}m 4AB%3#ǘvӅc=8D,O8҂T[5~uʷҴ ܿ%̝7yy7V(z>˘''EX喌|zDWF]kMUmQrh)/mFB-1Աtyobץ 2ȓzd9\Ėg*"^w8y֋FVJ5*a(㐞8i;XNj9}7(a8b"1^x߿vpTZf|ERف9 VAaf m tw>jo(5:I!o&'J gqucKJ8M~s KJ͓ s똛ڨjy,Vq&̡]YCcpY+|TSac9HNà(KL4n0:4CΙUWZRjR5p. &Jd@!KxFlaf7CO-%s x%AX{^yfvef#;BJF/ljhyF&[c<R#inZlɂ/5y(%&S_]c0V3Tk'8ш! XD 41aXPkq|^C8mr;7T Ks^2L3 Uh%Eh@N<B,MNVU7uhw wD'U'/:0DI)8@MK=U防o;c;zW-:P͙LuRHK&ᚡ #5AP\y 䠟秩Yq8ؒe,~.Q:LQ(O = qi `F{bwF)<ߖv7@~ZJB ~bl0JuyxaHKy>B1C_[jfxˋ-*uw*RW`(u,-at}&w' GJ i'y0g\UGs;YhM͍euEr`6nwx\CeJckim Ԫ3m'-}L8崖WCuLi&|pSΜ9tb_ܣ\C,b!y?@3xL )b3YI_a zBDwMw-ǔt2:oI<qgOMhNpDmX&F0Ij՝ u5xD?M*DUٻBɞ2++K+_Yb[-EB_EG8VG3:kޤc6/ˋ}0ON k_&Ng TN!0tUeE,khV/ɫBFlf87i+U&Ӱwۍ&`W4xk4Ta:/Ъn7gAȄoEj̺vj|V&MR]&ĔuF/j8=q͕x2"4cо7/M:]P/hEi>?Aʟ\}<`U (tCiŰs[^S\4*umS0ƌD lY y;`=p^p ӛY93@{5n( N-ėGceB1w@8q:bW sR .@C|\|6c)I[cdMO 7j^'R`n>C2Es yoyCmCs2dWe~WSCíiIiNʝFy$]]n]/hv̚&wTF%A<*oQǾM7/C]n-rnBh1֧]2yOkvP+9Dk0GO@@;dDA.jSyـgGEs&a`dQϑc/d֢Ljc `\lcmtNQ6o|*,vi 7W('cU0[r*%X-7zE ?mǖt3P,[;` cDwr{,p~7[k/=DGRO\u [Mnc5ythyX^ .l~Z4оWoL)iR0Ⱦ*VFu {U,Qp\I^gog mXZMEQ?U6i ^#+O |Yd]`-TƫiK5ᚭEN+MUS^Oً=L =BHUA}14(+ϏՈ0ת|UFг#jra>c|G&.FT˒Zx5k ttJ|z0W[rP>z1uE6=?4e]9? ɦbV6=߆3qT=Фg  ioH玸Q.ߥ|w3м4/@;~R60,FP&Gq&K!/-H48,L'^]=SsdTu䭼;Z)=2 ؓS& JPquwseXSJ%#?TQfqi~h1"xRgHL^6m>p=q"yzۤ R[q/ `7X_,gMu»F<K `#e1z[_[V?o8I}ʖDs[ >x(1wށ)m0þ㶬}8[}U苟zp@7=2zb3_ 1xiTltn ~Wa'-=Z73'sHE^?ņo;*5jVPV&D`r,ʬD2.r`JjYrac\`L3 k79jX(qЯTZt_x5^bfڃBޖ&ٌrdDBv0BZG)(^,ʻûɵpp"Gk^9'NA8@ljTPwA@ EM Y i,FN 7ۑ (UD K`` ` gFpfNa>S9@Knk  Zφbf,J\;rB0vy=}Q ~߼OԥZb]J2 :a+W ǟ\q{ñ)ͳ6ߋG^݁@q9SD*:"\'q)$AriRljG<.9VEJ5tuJ OfLQE \px {ZWk%Wj /+cfCו?/yiQ/kNi z_j(8O^̸P=v2)ڊ'C%DOD>b=␯ if?fQ[ 1}:o?.Gqw)H=Ԉfq)l?Iv4Y ֋$jIcߙq㗲NPJ/Eg|'`0~ ܉57׊Ϋdq #wY9WvhQ(ǩtYL'Ew*8yLʔ1e.[z}ߒ6_܆rKhR\bLS@H@J28^?sVe0 Qh8,i +";x*v7\W8l,=S¶Ohn~;Mb0aZ4ZxmuN@0 Smsəck'QT8؂tSLzINA4~kXOs|\; .dWⱳ " aؤY|ڠ UQpTs}{ Mɱ$,+vEu 8 O8-WFDW&JQ"WBt=zJf'4|9~ #iMD)E44lȤ;yk.Α_覞IޤL~ 1a7Wm}͌Yh9Zl}߰ }wSx~2Uũe`fn1䳓~t%L&%!ԣR@D2"\͗v GW7hW3+C5Rj o f3w|~}2eY7>d6v+^(Ysm*71݅ԞSۊTJC >4[׮mug{ JHNMT8Ký>Sܙ !݂ǧq]`3If4 +G˒ ʜ©ZΞBf׺.&U7 a1ת:K1kENW{wX+HHLmq.sң,c?RS~n^c@O3BVE͒l6tr6>6C4+.$q2 _ ]?^lO1Eݒ)Xc 7Y ]ϥi|(SwcMYȏ1&AWdepa튜j]aQrѳ#;/{냗u[t62^ ?k{PnTvgM+dm$5qiݍu;PBx p '+Լ l踜%c]E6RZjC謲Y;;4>AsKILtjx5==_1Sm{lzKJ}Un.һ."Ia"rdtn&..4旌gbJJKyԒRkWdN({ q[n89ߖIu!@a2y|fKvMzf&y {ܟuZ:{;B⁨lxpSJp#8嘛rAԃ8i`ȼ-0c1(+%^Ppa<=`R?0g2xgrN߷qx-?(D9쎲[ Y~I˰&i9@ގ~*UOҶq֌4rJ ~bCjn_PoX zeI!-c3Q[ߺ|D BP~.98Oڄ&XRێv9Ck~5S ԭ찒ؿhB0WVR'}9;V\_ٽ'8:Ti&sRmAo 5:I9m2t߷|*$(V9 ϼ]/RZFNrٓjlNa kW0MAn3uYm"mхD>_d6p,Vla?&.c5͜JvȆX~cJ-.j jeD{`9<Fam9tt墲_:61jKߢiMϗBkq n8qιRf6Pk[ }l1T<%]2[ϋ2eŏօXeV"PYv`J2z&JogSLɁ18tVG^l2{ |> MۻʯէM:d(${%թIx(7 6͢7Y Z4/p&JXk&P9F2ѷƣ чh)S6 tXF̆:_„蟷aĕ tZ>g@+~8B% e:U؀A9>FAj^DfH7OƋx(w>DFvSGB) 4߇~V xuyع+7U+Z$*k[$5V5rr3=6E5% YIWZ TU|o02t:IguH;#`Tv*1#̓;pRcdtYo,:؇#UiE zBppk2+B=v8 wZwg;)~<#y1BߢdpJVS{Om근{*~z+WOF{ +v" x.j"QjU}qnPa&y`A@ܲ46,^+dlr VQjvS[1Fkα9sȧ.MA?3S=_{ys ݞ24;2/e+FϠJjg;KŲ.pەfwnݍPT{['y(ޯH5m+t"Z_ntIf(Ӗ$زa͇S97~ok\#|qQw`esk*bއMZ_˗}[xr8x˘+”$X`m4Nfa(<0f0|5^h]c=oЍ(?ZveY]lJ:5p9f]lV=F&D뻳 wa١$:"g|Y6yd>9f[K",PBׁV? wLht4L˸%Tib"?-H(&\SN L XߦO-emrݙdmhrЛag?ֹCTڪpanBj8em^/.JצvΓ1;xi?L;ğ_$-1кL EfDQVs<'DKO]<7r\vP/vpJo\x8GP02m|ݧїPKXqx߆J>zig):WDӷ >gٻ̠FDp!Mi2;l`|M)٪ }V$J(v%Jqm0U7XD#;MjfS9R1 mPt#+'mA#sLp i_lk/2H|ěHV韶 dSC@l67T;}TVZpr8x;/o"Ku>` I+)vԔ%2'RNͣ|sjϗl5$QTW n.wf2rxӳVe%2);?dt=-S$0DlYj~ځ̧y-i' j=R;:Ax$+p̤0Hu8Wur˗Y}t8(S)@>BHzflV]s=kAftPiǼ,z!@ p/S>3wT6Ƽ4I|[[tt!>>3ׅuJ ]'+P%Ƚ" k_UNh #rrp 23ey7Oq endstream endobj 264 0 obj << /Length1 1313 /Length2 6528 /Length3 0 /Length 7434 /Filter /FlateDecode >> stream xڍwTT{6%- 000t7"ҡ t7 *H#Hw}k}:ks޿>k]y!yx%ZZb~~!^~~A\C Kb FA0PD; 4ܡ!$??@_?@8BZ 8 ˢwF@_ 1yg0b H݉@(n #]t:2Ov#< @gxqY?zP-v0XWoW 3yC`; QEz!@u=(;s @E^+lD_a )0 ]۽L %A` _E]`Ww_;?:{0 /$/ ^|z~*uCw\_7D}El?`?/9,àϗOQW^WŐO^_A @@X /w] 4Ubk2-߱w!M]o ENH mfm?@g@ F7gU [Ց;7t!H[?߾0[8׆n>wWn@`;;`G)_g Sl==ƻ#^J0 l;5 sk:/Y~e$w ~y+UT>eik߭*ȆDƟ~WV/Vq'GɻGr+hqhx V]Q[5X޸}Kz٩UU831Z*3 ,96)1<؜$^_ONdk~!`Ÿ\[3%- z7߂ݓ^unMSwSCR=lGbb֪GCQ dCnE;, Ws͋c]R-NA gľ 6fx=5߶ׅGnp^ 57qR^>b_dY<2)U 8yk콺'|>oy@SĠ=LB* @dz; uyo2$(r]II_\yg'[9 KQqf% cߣ5izkrQeaam:Z|k=JޙLUԬ!DfhPjFS2ag0yQ^G>4-H}ښֱ# |9"#7^펳O+ F =ꁨoV":.^dd;|s;*Cr|Y Ϋj`ޤw O.ԪJZOxu0|ﻗd1-U4&1txG \=[G_uxi ߳WETs>x/K;7p8 P_%aY_oj| H%{"~%]t.V*Lecw22f '{Jcsk !E3 ߇YTf*M>ɉQcoZ5}hզNCΫ|Ŝ roƽV[bOifӽ:hauݻ\\imy[C' &rpwk0~eAon*OfK}2+0LxI#8+rPڟ mc`^F޻9j8>y-Z3aDa(:C)Sb34=h c߂pFg^%홨e,$ ̙qL1 ~Srw?&e< aJ$멏L܄;DاG+[ҾIǘͽ79syS!9BVV}HE.r_EE|7F|! })1<&(nA0](2MMj:Ll#ij.IO?V,H5n3lg<{y!om. aa +CFi~&t8pQ)h۵|,1M]]PíI޿IjVq?Fxǖ',ɔt^ݢU,|ʼvt攍yICբe+^;K(۩KΦDNדSnh-Nj: hd["fkFϾ涱jC~I8l }y9\f7?q37W?zVim{d!flPZkL/ͷPes_,Əy,*(oozKL^nd?ph!B84WMsqd#Y*'A?i|?AͲ ڨQ|Ka%{Jã}<-gMzK2m?iqQĿ}rN/LjQķXSGj/]j^x%}AGJfE%a*#.1GLhd7k!&_y~uk9)ZۙWװԇKx؇γyB]=f+3 5q#Ih_nt ^Lpw̾:hW\0%N1 2Qf0,v\ O'8'/FZ6+Uŕ3 :$̮ra1Ir EEuȚrR'qg5z9.JeC^O?5V!ÖS+灷PGͧ9urdsb}]4wZ0o{INlՉ.]VcO^"|#Y 6^|Ѐ39݀:O8(k(}LJGlµFH5:hen~m lD]ucjP ;Ȃ]=X Ba刨U# XY9a?O:lq1+lʪF~O|i@]eq+N;݇xc"Eb DrfT1qr)wDClAHĭz9ƙ77quAcgV_~!ikyܡ|BS\?vO^ ~$ӹi  ^ΕMuWH%΃ CeG|[zBODd6߬WpaIG:gхE+(S5&kf$ Ikbyn-(.LD79IM-i/ 9;  )E(imMcXеøTꒉ&w9zC} ub/n2_>+Z©Ȟ֫T"U=AM ZKla!TSO&!C.e/qi1]]e^PgdjF~16v 8]&ڥv;1SeU+򀫝X\_9L VFayصx,֦W-ͻ0'5d!/FTȭp2d+\o0h`%db>RW<%~Fg)h:Ì>)z{(86^JsLQq,%Svz[}~=\Ū"Z|9uگbPkϗ X11NcjRD\⓺uFS +-ݬ8޳E/WI>Qʈ0T<xr;O,'zFfwQ|Dv-'qvUp.QU(9]e LUDAfElνeS/%wIyvɈԄbʽAw {tG.^'9<ɩ/V&URRk)lRh>./b8B۲ {y!Oao~Zmn\bR`.l\⦆n'r+zGB H/4Æ v>wёs.x|=3Ytuf0i/[-4ģL Au/<Ԟa0Q@gfAua|]3ζN8SΫ Aåay(D$ |&T"ʤ;y1+{)gǨ2rdWU pF޸+{k;@,M2NЊR'kyBʄnK4 *yn-SqSx=z{e7ȣ54 SR;<w$kx]4s=N}oqVʛ^LHF>_`fxI\A~"s=fez2\ ӛKP,,V9;_(-mg1z< pvQ~hk[;hu؂aĸdW,N#+n򄾤.E*; 57ӏ_!u>fZYd#ؚl{q;#m$T]3`&SbGiʔȕMLm34iٞaAfit3B2*[@7|NQIdž5lc CcQwOh4iUkO0qSM0g[MoVi,D*3_BbKa?gj_ZXnbՎaM$$={4iQ{H9Lk<B@/eJUozE PůVF-㗋FPlj?XG}F-e{ -@m7`E!{%Vq-_ +圗SRm[M-jk JBWG80ccUK Cmn GkDXdmQd==)7ȁ᳠@כEDIRS3Dtg V*b))ags`Fm7nLCo!=qYSAX Pr2AN`| S+t5vnD-8Mٿ]F|q,1s4U!q]wdO"Z :ܦ:*8Uȶd d>` QQƃ85RdH֧2?"16ךD19P;^ʣr&2Y Xt@B\aM b _>Uf@h ~UThѳK2"OX_RUs:ӡ3e۷\{Q)KlVPYc:,?>~BADOS\3-[蛮/#sھ!~;e%dg$" B?2H=殙0)@yrJFG{| YKTT8@AsBSf8 7VGNƍK{mo\!ǭI3n o/9*ۻoGUj-c yԫi U! M'¿9,^~1ieMF8cvSkbK[.ɩl'| ,n*D1A x=uF:ڷ5 TGyEؓҙo/+QH~.T3wƖ'qMo-vԲUr&tJ߬(e3'st.|H,=iJ`ywA dwmc`bd3KxDLR:8-W+/ )˲PĆ5=e٭;qG`ȂW͠W3c?OC}2u˨I!QdqJ}-' OmXKQ endstream endobj 266 0 obj << /Length1 1334 /Length2 2781 /Length3 0 /Length 3660 /Filter /FlateDecode >> stream xڍV 4ɒBY,:v3vً$c0 X%oDd+BRDJd)"Kޔ䵓!Kows{HUS@ LWA @ 璖#ЉO=H(d b@ 0ehT5PR!֏, ) Ҹ (>T']udpL]]Ua#TK,tOļ%BIh()C$BЖU tOT? XbIVi.iΓ@4RX*0D$Ә. 2[sHo0W-@3|@p'A(B+X2~%(L@ĺ1c5eVU G%i^zfdDtz~*c=Pikd?9N 3|_hbayt E 8O } #l]ͬ!$ȇ3C DCi]<G@L5)3O%'Lt0%RD"Ee8e< K&dw .O?SւDz0 2/L Q+A$ne6ǎ%4R 8n.'0Hб#{@@ܤɆdw_4G `Tl 8s`A0> J2t|BZ9uզl~IP@iCJJenT7@?)8Hzbcpe1 F& P+}zu+홆>. v N~]^mD!si9>nV[ =?=i_ݫ;72kuAmOGb툏QSCb˪)/}l"E1,ZIol#)l# c^dk'#=ڀY P&Fk2{vk˯=a#nsDMyn[JXj k#|{(q?\[YyW[#TW g (WJLς{;V9!HNRnElYvO>xKs\ eS!2/8mly`t|MPճO[%J`Zs#Ǐr̕NW\p{ffo3,zߏpMꭁlifќsPQc7mȝ@T׀׼l]zKO܉_+aDR˖r% |=)yԵeW*ᲈVYl_Z>d詗kkL׀+Og9Lk;]JQ,|l=Guy8j'E5OrT(qxr#zZ~/doV_ 4HgYtP!wsxúocE/1烏._|.,KM_aڟ??5xpLcgg?vUqeB max/d,(F\U8,g7 ky_ c}٦>ehu4nSږ{]J,9i#>a;75C䑢BO*LT>_+&?`3ÂL!xJ6ZL6՝=9_!!|JlxLJ6ZXg`gu8C(^+>QX۱תmæy/@e_qg.iў/o:(\R>g6f|O0zF;7Bb.N@*D`:"rvnδEKQJHksBԲ֓to]+d9rPuΗ;$xlXT Bh+vp@Jh!3эUĴ:v̞i|װ6 NRGjoP3-FWd7>6BC1%b{oͬ$Y*#V&l^h ]9JRW 8铨Ȟ`1YEAnv Lg U>efxYdFվL3U*|LO q8(,[7Q{QZ&1UFDB -.$ު^P_hﺮ$3:5F6P$MԼ/eirߋ9` Tse=pszX+2o6"q ]ʑ W4@'ؐBBXxyJ; XkWeYo $QHg},RyS%n?ޭVa!yS>B{RN?tQza{(֫%E@̡e~ޭ~yM~.;xQ (qc&VEI=$>K=<;Mu}xg;Ei24ֱ[&RoR#Rm^Cv}ΒǏ"M^<hLqdX.G? <ÌSm7GFlxսܥEͦװOq:{9hY|țaMa`MNx,W_*6 |ר姕WdfSXJ% EK}R=qS\;ך;3жnWoQ`wAףçJeT5.񻿞WhȿD#mT/BS&vs3С2Gɘ1[ ~70[4Ȱj }Jun)fJx)5X^+-v!۩O(de|q^8` n;*V9.uOh/WlptZTW8~ܼzJ/D[jQ*]mZ_ϾɮTȵ0qYe9o;aR{=wYc~V;4E[Ig~\\: iQ+V mWC|G@?'|#'!mmժw!UL7쭲(o-{ro42Fw0V2JӽĚ-5~Dx`1aY%]C\ZrM!㏜3{ endstream endobj 268 0 obj << /Length1 1608 /Length2 10284 /Length3 0 /Length 11111 /Filter /FlateDecode >> stream xڭweTݒ5  @cݸ- >̝u5sZϩkW:VSS3MR`{g&6fV~I^I lkx3r!SS;MA`{ g ?@hl|||q0di MO_!StYh>\` }Q8[ [ @\YEWVIQZI :T\LmAf H;lqA%08Afk@w3 /#t99}@NKG{8 {3[-8"|o`*`'g'3GUEBW н01ź,J`緔;}"$o&j=+c6@׎bM@Cju6yk̬0@@sG5́ {/> +_M7Wo͛EF]OF^_Q*o;kx@ވG`:!&vx1p8Xy+7?ϊ&Ύ w[Ѭl F lל;؛r8:)k+?94C6NLwa 4hW·*jB_y,CGzliS$>Tt4< ,F%'^ zܬZjFOStT8 hfqPX_OhhFzr␨L}S$;{;6=1Ug'LR3v_X0Mc3ҬywA'ёiKvsp(c(`נM]bԔ#">Y. ^z@0^,zc;(u:'z= RSZ E1 l=#„.mmZgnOUZױc>1BsB:Y?QJ-> O6/R[[G\su#̛ۖ|]<>c)1-잍32|D4v~ ~㇔Kw%al% Q02!5;;z2K_v8w-?.|or1fZUdX}?ReE Psg|!4nWw1+(R}Z .73(H-#Q7 Cd{e)̳;nS^AiÔA""E$3%2 m#Or~ r*ݮkA01q!@i٫vұvrM/#|0Vn7F @\4Qc"RB{\8hopn>B߭$]ps{;duia㾱[]+3bbS'wJgca9q3Jv"9{iց^9F1b'^($:|䃉c>SC9Kt%,%Exʉ7LarךV{DQ=&xbvt_;UF@VP^_ڂXXڕ~}d{,~}gAU,mipXjOy=NpސP*KWAWvNM#&V#Ty(qGgXd̈K&@Rr9&~<|qGjp9nt_<3=~I_60'> `Pt#glmoήEdRшpA{I| 9#;#OoΝĖez&yO pBUm1Pr>:.\X,uZh-NJ ÐG ԕj2O3Ei4¦tVڵt+q)me&K5={ *q-z!]}f&4ɸzȺs#Ч,Տazi r[ W7K- >!66鳉 %t۔U?nɊѢK-("ܚ5|qyYrF- 8Z($Ł{< T:ZwNdx_tmQ!<+~%IZ*Ui%S~ }!坷BdѼf FB6Y <|I{FN@IlQRWJ~أ‘XȭJ3:Ψ1gP܁ oߎt'3ʓZ/ wlD z%XJp|OTjP{Uh>6=wy60-%襒\ZēWo Bv760b'k*A|NwB<} 4(BKk2?mN}DJ܊X5bK,QU?@+o![r㲺kL7!):IݨL;O y }!y$,}lt$).1voċYtQh>wWb!&^?;ڂV Qk&'OP)9OP-Sequd@V$rmhcNj휔F0e5T+ C!Gc{ݗs?d7|94PFN*jyboQ~Z .5Gy wva'^}pgGP)97&yXEy On۩Ím[08&+!)Q@5NU<Y˂u'5tv{!k f͝uH2f, 8\K/٥-<2X8lVhvȔgPT2S+M ;IOz1kW m]'ݗWh/ ,kPOA[䇴eJEes^nά˯T}7x*y)~ B0!dg:9b+:w(l4dvPa+p.?!-u1E`1q>eh@OBUZn1ϓt t^tef+jA tRg+P~]0 C A8gabw#i{t9۝W5P?=DpT䵕p'VjV&8jY+6hVw |_7]+;?ﳾ/T:ZvNgdΔ8O= 4*ɨ%(âe>Ʌ4@bAr)o48N’ 3ٽR_IBGBU6d+ӘIЌ.07? 2*Ԓux;JBdp,e #h$Ot= D1%Gߍbz2ݣv`lǩ78Nv,kc,,@<ů`F3×{p7!k9b<4[Ģk&?Ft9LJ36Ab+j&0n?CW1l0g0#Sqࢲe ._u %4 iݜ;X+ge9E<%z :`5vKǤ| 'pG)~a '#s-?A՟$V,%/S2 ӮWSu\\!MBvss!`;KSԐլxSo\i_2}OO_@Fh[LW-ۼl6VډifQك }tRKsreϽ)'\Ņ53rY41t}z[uq H =z"pj#{Rv`^3}c. fIYZ>`5; j`~5~zDmy}ɩWa'uE!`uƭB|cB3 Lnlc'-1mRe9XWbR9_=P )4UTسVrt 4R75,G(:5r0ݓƒ)!? D>LRgG&+w6kBIS/{i(m*^Ar ]J(Fy5sA0حYX닉J)=iH 僨}&'WJPDEkr$׮QMsqh+Lt:Wh`FT"ʴ-_kq Inal*(uM>"4l/.._f I!F5mUb Fl |J9$FsAy ׵czg쮑R0Vp7r1hO,~﫹?uf{CT&/ҐYQꚇKSJ nV)~>kdI~ȸ^1$w$ƿ$1][K&Яb:Ǿbe])$(gM14vs=7rɜd9@x +}cAR[v賄Tɰ >,=>qu'ޝg[lkDCF7hw%fFDO3K)Z{i8l )L@™/G_p+ J@mZ)9?t&aawLtuc-{܋)@!@Y޼ܨ#۱u h/>mxg.!^3a丶ɨ7'd\bPܞwfPUx!IB:]y7Nfs+XyY5|ϔPu󨰹YLM؃Jڣ=idȃ,SY*Mݚ?&&vT A|_СR(hj|7|YwX]F&ϲgq 0%}VL%xzc?η]w#UWYQQvmI$jF +*CߔmLr箅PWvՔq%[41|%CQH"тKNUIo&3U˕`%DC VAيFP'ԙHƊG4vEfT6p7 u"e#xԛLl+DT`l-IwԑuOx ׂg4iV)VGC=otx&xkUIhqv#qŝKۀ`Q()Th,mzYl l^]Rk(93:AC,Vi Wcܫ;ESU?C8i!GH6KyhRN_ۗE*)_͝s] p7Gf)r>=+a*lNI۪]15z-q kN&}7 o'.Mj֜_䵥h ܦ c~C jjA'ї66)wՂQYۗyn r3B%4]"'ܢE٠+/jgcxzobّgl/]UHT䢫<a$8:/*.ˑ eRAKJILk #es2%2N>Ayy1J{.ī>DfҲT<;=mV(Ҙq@ԾY-*sȂN=겖 8Gt;{WM9eee-I<DaQ,7ӌ@KRԈ1&T|Geb(azP@(}0*U&턲='򜖒 {%ĪĪ(Tߕ:&:h#i>k)Up>u{!^Hnx{No ۥ9D66X2e2{!)%1R2*?yHf֮/46poSz7??݄V#udpk||b3 :GͶJGa]Hsqwd|F3ȉhOŀ%:U陥l0p"(hJ9;JÁGȦ{S_a^-?f`?'1=0Qj3I9J;gW0x 8QEVB٩V9^ZlÜK.A=zoTosyCWdr/ROBٗjZ%͙P[ G[yp{,bWAc22(μ>].>x<\lO0[j[ch՟2|&HsCcH%2ę4Buh1~Qwtܭ?1#^ѧ8-32Zlܓs^AWMm7u sl|0oCuݗL1pNFUx8.?#TvbҊ.`2Ŝ쯊ͫ@ҘطgxرWVث@wՆxPUih" by'cHJz[gGqxOV ;A*[g)Wnt$]Y緳]gd_e*i~J# $:p"RqHW1H ]Xc2ƀ֌ŒV`N6]iDy7ztÖ"XBG/㽭0wg7Va>8LCP'8݌!U˴(e{<25܉OQrOMjX ovHʱr,.Qru<&J6Q~FB~| \'e$"["NS`1΁ABs'A[ m>GPfT^0yMg⤔c[,>΅;\<#lLvS@؜ <ύ|NHH(pS>P#1dC$yњcwb,0Fmnkń'&hӇa1;`R8?1H+A@Z'GUnUSe7qONq+JOI! '40)~p܋?G /+,o盯drU(ZzNn4RzםWfE}$ ,絻 HwKaAIB4,VQ3pzʩy|%;unJ)=hsBcDn?SK..!g%jK*ꂁw} iQ!OQd v86 "ֲB=~{eO;HvO ;-vW- ?%ZY %Y˴J_; Z+ghו5=*{X3?'銩d戶~ue,3) he!t0Jiұ-?9;bd'A!NyTKhڡکNȦRϟaI5f%]鷆jᜱ~ߑ3Hgވ 'gC;F  L& ڊYxف˳vnHSfdOa3yAb٪"[r6:u@y2mB KAJm2صSjr uӆ̍ߊ8Yt\G>Q3Pϙzi0bUT1ֿyy$ܒxt?YU5N+܃ʥ&Hߎy\~op ЊgMAVG!V5F=ji~TEr᪅ 1M(iȖaY9kXUY?[ߟLn}4dj,C 1A{{mi"K/2\Y>JQF@2,]P'cJbȳ\_ssgu\sam\Wi1c6"ٵHE/Gʧ,EdH>qJNmrɹyRZD:]Ց=v5kE-`}ifSs)_tZA؜e$J͝,NZ}Iz|CcE}PDjiITIz=) GC Es/}8TR"=߫+ĘȊZ" [)k7WA:ʟ" H H28bv-DQc}"\]1TbآU*(Z >bp#TWf觺,\8OޡENb9 ?/K@}п*F%~iRmU+FlC endstream endobj 270 0 obj << /Length1 1144 /Length2 3114 /Length3 0 /Length 3861 /Filter /FlateDecode >> stream xuSy<['Yb$ȄYgƾ%513c3̂Y%RK"dP]K%YMR+zG}?9|C6 hL"Rp- Eأ v 0@U4JA3DS$|h% RE0p?Id-'6 $DeDD=- 1v D#{-˨Y)N| ;#rr?&E@ G @ Đ0 Q4f'>Swd|-%,d`"*azAw(;33“AoFSt_G$O≘-ahJ'@hf`ÁT@k‘!>J;)w&Pp<d8OSA @%K}lj@7qk΀A쏽%JƇnpE8wV Őp+?(7rr I I Pe8 ߊ?$@GጉY|H0\|7JV$*d~$\WW ØF |_Gs `N@r@'M{qƄC@ ?Dڐ(7 ( Tp>xo?"H0_R#z0x"2&cvho bs3 Лsx[ӸqG#khb*ӊZ TW5.t蕻X0ǥŽ]P4lRd2MWc!H8P9tP隋>$!:6К &ZZXM gl6}㳸{)}ܕ:s`͐[5?΄Z R݂d*[bRS~41^!gQ+mMeB4^*={UN-YLNlu!;^8168 w B=l6=TyR`bt.޻03{j&) *7t=Ԝtw"N}:%*oSvzHxk&FL7S!+`m |«VC1$Qz=+\jҐZ}I\s;(A{tSjq$M1R9 uE5cxD0 n䙚 L%m|I?WP<0"ΟcH[1ݨ(2]0BP!rl$LwA6!+A|w=ke(]5L ?i"8R#Zc{͟V/ݛ8R޽tSQ* }onށp1r$L%" h.Z8A;|ٝuG5 Bp,Pt_%B}lbn|Mlm;Q/|MZ3_=K/,o"i}嵛3Gn˖K,=KiurJЖh} 6hu+nv9Ru_#3ge~/}-I?{~BI[/ٝMY"gK(nM򉞜_vѺfA%|be)4a5ewL9O4[[}]Q2ʍwh ?*ӣ^Q.{U\#~4_{Է{,g!u 14Sv3xj.JtG)]`X'[n;#T$&f/gG"~ wK0:e*\ : +""|h^NJy2&R cq]B?U$%INjT˗YN$7&!ŹoccIgڞL_-a3;3x`؏QpM2GtLʽzop dduL=32q+ׇE[Co ;c5// #͘S_PM,:.*|RMXl.z`#̈́hc$majTŷu]Kl0SIBj89xx 䃬.]]MTo4M dV"^15IrUEKyׄtTjy*m‚NI ^hn?Rjel~Гy:T&v!(anVF{_F LΠ:+l䁊ffTߜW{!;]4ZtvYZAw"R#;2W@\鹩 v)T EWVR 3[4%>ŭY.}b#A.O%Gj7x ?$YXX3AY_IAbC[|ىsS+M2֯Vlsks{SCN37ޯG\ʭUq#<͚߂:i.x1TW8T@>rFSZ׶ym+yleTlMT+88 dQCʖތ=Yh/{\h^1T| qqqwj:\}Khʲ+l\] ^7ыo?;Ywƅa0]5lU2ctZrY\ Xnf#0boX`sJUQNFۚ~АS]C.& >Eж[o6b{? Ntz<ʾհwyú'AkjZ= f7!GAMrxOa<jE.Mϲ~3rTio;ܮ}qd|2zܬX66'lJw6k _yfX<07KzꀕV䅨XA O3 J> 58P4Mzx:Go{"YBZTn~xB~ *䉓QǙSP%/Ohoj̽@Q;za)> stream xڭTiXSWE Z#%BBb"K4QtP%.{{sfl.Em #>*jdZEYDX`E[;'.|woyΖ+84 BQ Ppc,0hHly(&1 &<Qbѐ1/54㏁<0HKs(*xUoOԷ [9\W6s8TGI]aHI-_LC7C-:cQjQoH2Z)T)@9R ,IPhHaBFg b[!Ƅ=_ RYTU˃*,փt8@E%(ĵ0_c0% AvNX_9KX5f!qbN@M9MIB .oәcVX e@]{q,z]oUASw.MW{!"LxdLqrQ*kg-Iώ~(|wÕ.flNg]^>rz tVWtf?ѲΟ/,^3Oem{]eOzwuޟNNr8UWVs8_[S;i{Ƹa3u }ߏS5@6boR-}mKYO ESLuV yTc .LhP4Xdl8Hy{;Obj[1))L??K;moŦ{wQo\mv>36ޛt;BδC3䤜jR|gjZeuV9N} nYɂQM|Aw%lB!\7Ÿ9M;{L*7k5QmG+tS~O ,O_tdjW:)Yv}-|5pU.Oa65e۪.;zg{ܻANmXgiKfnwܲ,0w#߂goYWJdeJY~ؗwI|*ޫ|Ǥt> Ԭrʷ#\zpP}R7#$SZbgXj zb'fgjdz꜓S=6Yd ž?~~DUC`A(л֫:Ex"_?*KBٰ-q AgWw(KyuS T׍C6?*.ͪ[t~zkI$pQz]Sh) N;ۯFvxn*MƉ7+6cX]E̖zqz &66z ,,?#5SM.j]5:glV#7^zxߞzm; /=_cܴ*1DpCE<͕^ XkS3Weƙ/.vh]uu^s(> stream xZYoH~ׯcA 82&`!K,it桦$ƒ0H*WpDDzDrg(0"nThx7a\b:+޳$SxZqkELR@UIy:DB% j%fEZ=֌ITDHRFYzHHA3{ F+I#!SՐ9xZAh"$Ahx xAȀ=; å@k&xGK2M] YAmIT H9&`) Y "0\@KrmyR 9S)I)KPHofT&fH% (<>Ta8AC[-0TH@HKD{A]Yb ]r%;Z\' @8V%Pw$@hI1TN97ȓd9y.y{yOƋ|#.d9󐋡, {G5GL*hE/HADB>#_ $הhIاW yr4gOA@^j)M^H)5ŠS  tN] Sш+I_ɠTe|"٤5\vr")JX7a&fmdjxOY(dRq>~ GSs#ԩr7ftGb)n̊ ۯTl]~\3LMQ)w7c\] [g'&p0.OU/i*>K4W}W4=͂^7t/iJ'Aҹ6$3"]txS#=Y<*]}_轒Q T!{b_"O]$/8ppOY!(F[ieƖҕ/['>C e==.K S C 1ֆ a.x!gY\֙L%+Bn ]:=ɉxk\ Wf]KTV!jg V3d-+q~JRѱa\W+鬜j4ZSnV<iΊ&JIc*/mhI4Uƪt^ǣGUU-UU91P})B'xj8n`Eux0F6Se\-4Ƌ&b-[>zLIq^یۨs:vꂾ.ڀ:(}+Jg(݇ud(q)5k3VaJhlX,h:ebuK$%t)pDw[ȱ@Ǧ-sbd0،a ԃKKPSrhm\{2([¸Z`y?raX+ÖԷk? UUUE U$.H'mxhO?ĉ(G܅ ǰޒ>cy"\φdV󫳏Ϗ^~<Qr ur 37mc;>}irܛ·w/4 uX7h?ߎr.qOft~nf|1ʿ.nxB!'wv;?}~aٛ6;0Qletl*TPglЕNڟ4 ']vu//>64ϘUf<ؔυ@]rt/>=| t?8K~~3+O ,lWaMoܐˎh/X8d0F=erp:z`>o}ë3e+B%gB4CwpW5{ޱ3v>OXoG{ n=8m>G&2,gyįϜ},gij;v0l;sx8xy1 -I`,'|p3*cl s> lq7sk–O|6i"Ag3'H78JzZb(kWPh-8@z15 ݫ{yz mLr_iEˮUlԷ*6 |մeb{??Yλ񻃣h(@?rN;,j+*ok1Lh(-q}6NZJd݀ ,竔9e%YTEIRF3)Sbǫo/eéNU]"EDcx>%/,CH }{zv|٠p;VOT rqj ]Yem6Q z˦quQ1& endstream endobj 274 0 obj << /Length1 1626 /Length2 10996 /Length3 0 /Length 11834 /Filter /FlateDecode >> stream xڭxeT.5@h]kqwנ`wܝgΜY3w~Z[T=Vݔ*ꌢ 3K)#t0ssU9(x--w9'"%)r0[--66+///"%@h4մi%`Oͻ+@nirrt;[Z6+%@\YEWVI@# tt1 @sKGWKZ`h4WXS9/ ]L=@Gs{7˭@rr[8ރ\.@'0=?pmLv wK _%{]`KO_,@W'{S\ps:Z ={쿺:zS''{A[' ފ =9=5YuXY!ps53 L-@^ K+Df%=%2 BCK+:?v }ɘ: @עqs\L^/ֶZ1ſd-u~BB6Xڿo=׿[ `dea7 /8twT YJB]^MYX_a@FV.#;{ߤ;Ί`'@nֿϿNFdبM-'?\\ W3oiii2KvB 94hV2"7y+Lk˜'^x9wSwY`Qq3dю9S؀bWU3*~%hcw? $w/ĦuB7OOiGov-u@L!}N%)i ѝ BsIOnY){E5,>*+T`X1b U:igyb/e0wq#{S,̵0r앵-4QXQ$Х#ނlAufJBf_vc,;{?@~^:F3US.A'ض: "#O!7PT&5R2N|զp-ٷ\>ꩃ_^x_ ؙi:֕koo!Lc抦OH^-+؂oX$A(Nct+}xFͰS{ps>l g䝤g~c?)r(0SW4:%S3.{vL"-\"׍6nXA]Q'LD:I"3j">@v iCD[) qLZ&3Κ7=!+L<pįGmV]BsOzI}k66+% /blŒ_+G_7ܨ~X;ecTx7Jz0% %ekրA׋7ꉖfHkBvRlK((LWr#HK/CNq^/c[uM ǵ`]0}z/o۽]F~I&WZ,Po6`]RP7R'Lg!MD2NO |M8 =6 ?!a9zNǘϣ0\uw0^ȢQc,ZbkGT?`}k's>[P6k!s m#v0Dbx^7KRūvN* 3Bը4 N"ƅ*2 p*ХEqPUmxҲF7--%% X6Xb@Ovqk --ϗ9 W@+/]AnG.n$Go\ѲW˱5LP쌛6as# V_)_4(nz@U8xjA/Cԍ{,FCUbwxw7s~˰6oe7*xpq@0CԆtހcb zN1VþE-_C 䮻-Ui6v-q m79Mӽj]$I#D#>?;PhZ]La/wZ̻kf/啺۶3lzM;7}Tґ#"D ђIu,8+^,cȶg=?䳘˻iU ~h5-)d25w'a6'66q³VxxC:'Hi"ɥHmLd%R&qi_1զ0l6'2$!QA9TyiÂ{\qg:,$?y|wS0 #4` q J߮Fڻ :`/_ P ՇZ+/6!eVFRnS1/C~2N_6s Y) #v.-jYǜ 08DOٚ*xDQ0[I1]fȁ #o?uUbrRzC=٬-`hUu_D U\?$BTNZr7)nӬȾBpV/ qSa䝘x_>ltd4?@4!ŽCIiM8y/097cJMOpjJF M''bnegdudEP]/nG.&llvmE:]&e@ 뺊FܥK(E;V=։UȓFG \`;9/LXC5 `͚ ,{K3K6wñs$o?]C{2æ k\a^'ɗ9Qb9hxN7"gϟVݺݺQO^n?=Lӆvqiǻ~L>6 tZ"9Ψ +hU,U*(FJUMӯtʑ\2nm;qn&WgghiwOHe^nf>Λ0v*Hþu 6`"ۺ 5#\Ø- / ~/Fj"!3H!Nz 1ug!GY_oR)OEQb?m8f8@|c=q{ *vl.q s[?>Cɋh\ :U5XKb9ބQ%>/v@k;oVw 9x\OTװU‹N z䉻 @MhTG +K@.l `ĔQ*aȾkoq(|O>-TIG]p"D~\'ĺ/%SB2gI2I/oLl)OS 254na.*zμI Ws7ʨ)vt.̀}WyұN/ ڃf&cZp@VMb?!A5@%C*je{Øuꎠ;Aj8oNb[+"qn T BTtPF(Q9뱡% m^ɪ_14x}o](†"tLYht.ʲ?SꪭJoQOmG'(2u"Xj6pqkP_a̧`.B9ntfIh{FK\Hfۑ9D u26$dCfKf/%ÅPẃW!Ә݇MrvCoj\TTZvgCXAԛ2g @/Dt42ifηN۵iK 酓wK{9tmoY Jha߯K>r_VσPC8Z^>杆fp&"W/PfUl"˜<"ad$hH*> [OBBLWg -Q^4//'}uu:sR]½!s޷ɑb;qLʆ5.N^SctacVYHyBamB딇xvel ߺuJ>$ jGٯqٽRiuh׌ _IᾟK4R\;Q;3;W3>g 7c {1W &AHb,٫~S0^wbƢȋ}+W^4@SCT\twIq. t \ݴ]*?`9Hb2f}Y6Ӥ""}*XdʔDYҹl%CVd4}bD8]s)ΖC ʣۺLKMwK]U0kHDGum;$lk˶Y$yt!wWt&RΓLz+,9Ka/M/bq#+-&ߌH +UTf$h=E<ȶ/u$%x. 5 ITzL?h?bLsg؄ :32 dsEC4M?*̽?,.uWEl*xJ]l>Va٧ dmLVF?B,ջj q59>F# ~F]SLc%:aXys3ZJ"aXv2vͳ5sF.5*ډzz ¦eUŸaNwl4nx2+r[7|ˍ6ۈSmɑ|2S)_9.YA4(} ``h":2e_bh7YBQ)u"PhsDFㅄnEP흡~)"fqo0f2Qk5Zq6uqBK Pv>͜F 2IS kj֜3CyXbFJxN!5N#2 AU@ QG'6-ߠR#K"@dCGZ }4ߣ~|tZ}聲cE$ s2`V$iBSy0mRN͑ݻQ_>VPQ9}s-4<,NhTj ?vv4"`V!K[3Fhk$S,'(q/! +㪶 zї!M<-N&M!3,U 7(AOCNY|T: ˨t'\/ŔպfdTw8z}ߜ\r#v=d__ (&pGNC1RxA琅~?[ fU8=J~$bHE~h&I- ٨g#W !'=td,U|4x|fF8A>*v>8Π[[D(Tknd31/"t 7,?8S2 %Px.u&I O F#$`>&{-zTyTu{A2Iy|Wm%5;w.q[_??w!~d>lW{TJkڿTLT eBѵJ7Fm&Фn'[ v`( D[>EP)WIEn'sR) 1SC%H%1'^oR.1WMZ1(yU~ȏrx}^U󮌪A{ÿep55;Rn5$U_b(L8JߣI Z=l>Ķ$tT_/IO0߭(^9hcw;g(}aW胝B|zV'S[9F>h 5gWϔC0%)4QG>fc~%"Iukn\LeF?Nj5} SG8D3tˠ5 3e'i!|}+ԾP3Isu** Kbru`ȤmU`Rer1?`q7iHyVÉf&tL;TZkʯMS|RL ts t9pdpiJyגI%>@_VL_|vhB%'n̅u5$ި/T1cUoWqHw?Hy>M+!v'Zeٹ__c};fnY,LCH^NO"* ! B.~?6R2 Ym8Yj{rnumj ԌSImD + $ܲHy-iȓR GGܿZ2 _2гfnbv-z.4!p?Ӳ[3cG ' quH5ty6:t5U=ddG mF䈲;乇YVZVٞ!12 21;Yt_:s̟'ntsgVk0IV`^/ |bLdoǟh,0ԂpʚU+(fVv:ʼnI,u섭F^9*˓K9N{{og%|QQYXkrk /1k he9;ɜQW{vt\(5 KlI *u*m$5mھj$(]22-ְlgÁmq)ד{GMG"E4ͼ42NיAoЯ$ ;~ dun'tFfs/yh扺C8!2~Saa!^vKe [:B'z^d.@qNp.cj+XoZlBWɯG?誴/KL;ۀN|Rb"a)2mT5&} .hп&E 29:O-"ɈhQ =^Gs}DJEѕS؊ihӊ/h 5,(b!RjKbrkgfakFYG*] ߻]rY&^ۦ3I- n$hGu:Xwwʼn>DdoAn(fEI=%^E3U@( V{zkdʿ} Q@Ebくm&>Ax@B8jͤs -ט{Elb|+V͟l3;7K(*J~u0ζKnXuȇ ?.7E"6Z_;5:JjHQ\:H"U+** s~XyH4I67>jh+Fj䋞LAmԣ?d8ְԴ,'!eݙbXSN4Ay` b;&%ss_$1tC6ltH|WjZ=PEdwU*mo^Tm!ԝjP6vjͪCABQ´IDAs{[Ao-(XO'LTONGi& j5J6m^EtJ SPyjSYh""h2*D:BDɞys֢͉eX|%]uh @^Ze9A-«4Ln'ELؿ}ޞ?Lfq`tK"T~"erѰ%(S/30C*U@BӴ9TQkdb0#?EV\'{I<#]Qlxzˡ1N '\ 樆W> stream xڬctem&VT1+qR͊m;mUXm۶m۶z޷Ow~1=qM\k16)"# -='@he`c%c!E`l+g%%eow4 XR/[7{#BYA?% Chj llickelQhf 0Z~ʩˈ(De9'K!@ hhl`L 0X06S_,>5 t[;큣 hmhdO&6J毅__09GC{#oT9!hOl_5䯥?%KQhp4vu'1`k7_0[{prZg{cS}{#Kc0 _׷tͿg@GcKZXƿ1 6Z3+&6ˍlCllQ337t8 c[oZRF{.}k=h,7}+Z; ߶XBHhh0ѷ۳ɕ-W[4 Ed4kWt"bJT/Cf7Q<#(h a`e03`d?큮Ϳu3ϓ61gtN6tKߪ76v56]Y1 4ONKqf -SI({ lq[8ؗy0܍aIޕh|ELٓAFuOSrq5/Jr3.S oҗ906:,鑼dhpg*3K;}'3CBzj%r;ۢC6*C=AeH0\c~/5)% EeZ^de( a}Ģh2q>' X|Fp =;RJs 60/BH:m^< J}5gr4<@p .v?"^Jv71K'gW :\$/H^ mXpFgy%4uivt& MK@ u^KFd{3'h} T SkFkmᤷ &uK<^1c9)$[ E TH>ҙ[HT4"4Mjs… w|'֡~)sYn #݃tvN[Ϊ@'_tnHT)вK]rco`1lX4! Sd(.?fc,E%IU!jD\6#V[ !Tbd\Z㠂`+$"hWCBW} B g)`f3ʖYhxɮxڿdfrеvb0D FS#[V@‎hgHi4d-k˴PBKN֑b(91b YWل[6= `?;{P0B) %,ǒSM׊$/vx`UU^$PHMXPnT}|+?ˆe,Q+z5E,oہ amԫV*l$zrt5 e|>`jh0?7 *Ǥf;@iok ]ZkOw9G i2G=EPyG= ǖZ\rƛAp؎Yp$M1@sƓʙX\oGfIu@e]|(CK?s6ޜAƟi*F:(7q"?di .Dy|v~/<_IWi5F7Oe%yѰ)4*I*  d f`]cieNg]`}\X$j~z0*cP)5VUo HPϜQd1}[wKDG E_A^o//oSQ̲BeѢ2 6/O={6[ S~5x9h R߉{-`.ì#'$`e hTր'6]< *m~X-o*by eW{.t'; JG#+nv\Z܆TW,fCg]U(Ni#h`:BΞT!S7 7!nĮ njx-%]Dre`7V6Zk]&$_b ?=$GD54w B:4ռAysp{w_58<h~-SǛI{uď6Yx  !0Kh2be zKIp3Q,osGj􀭻C"0li|С]8댰K#FytiҾ\Vp(Pv kQ9>VM:C 5BN;4Hqk|#M0=UԐܹ֕=SrX9qp7{uAnGov-lt@CdSm!(kݝg>_XLyalB؀+v_‰s躨TU ON17$#}{R(ݞ76NO2~kyƎF`@w!H|tU;8ڛ%]fSĦKaI)o:Dl{Sѥ߬7 :y8<'}cPױKx<߅ry6Sfi|{6Q*#o]flW( =PNG PsTXy4 6Slf8K9Eޏo~;UOE~k%ןЦP} (8%ZTB4rɆ {? QR 5ՒDpFD +̑*w^~9pSyAmރT]3A0b*:m*ĘJ4b! [+N=L!/d'o[@mVoR'\CgU`pnǼ RJ9Q~j-/΀wLƕ~Z&B> vUEƍ3$v;jϝ9ʙ_Gm2&ɔӶ=aa&1gd`يM`TXЗFܞ!0)1$yk0ӷWö'#p24(RJfȾb[pZ}WQjb g d%^lUqX@$j)"ldv㩞= BV"kPA\[`r -{ߨ-/Q/ӘC\(PT?U D-*;keȹTW{- H6׵3[<3B5==G0ܧ#+UQ:R7(>$tM1u݆1t J]VZd*v3~vuXB.D0"ie8".L|xh*'@̥g"NO8*aEYcy#UdGj|ܯ2H{Pۢo3ONC 'yq7,1cW;" 8~9kS0 UCL1q7ܫFCj*xmF"'$E7j^WOAu }6#{+b0ϜǸmemK$ѥ9к cr6NrJ KNnG kB1Uk"L7R!I^٤nB/}MG<*h\Թ) Zs%o!>mًZ5C%YϚnLHb1Q#EU*r:PS0Cknm~dӌe*L<׶ snQ&P쐒Ms<ꃙ*}u~RxTi4𘷝Q5, F3ߵP!*vWe*8_yt+`'bwWIR!l/@"t6 Ԯh~vO ;bjM4峪1o";}yףuUtdolQ[i0A\^/F٢Z$v:V>B~) "(4Cb5a-Xu(Fg.^FD>IЋǹOLZ:Ag=RBI*I#D.š=ܾW)l짔T-fʸ09ѣ͠,xjVxY.v-]-:rȘ b- P2#"#+nOuS$r[͊9A+F-qϰ1@4vj!5舗nXx6nd~];nfM+ƍ^_)יt )1$Bz{qmh/G-QeO}[E SPB(|YO⹆FSc8r<"ɧ5Ic/̄QE3=^P!\{?R_ZocK|>һ!D/ \M,uʡ%Y X#"á=NiJ!?6OF(DV4U;)6#j},v~ P_ Fj4^_r 4-b~[_P ˗-WL!}:';"1;|BeiAuL1>:CV]Ι^8ymvc,]U!g[9 ZVѴ(8U AC+`>TӪKUXHW$gTf ͊ eWwc6]2Q҈±X|U2P*#Ó7()!2u3zCRȣ`)h  W#yHq|!ЖSeDBXuwc%^HM@8(#P-gnXwq6=6׎e9R.s%AJ#O6~1##)5q : +CԆ]t7CҀNd[kH|o"/,PjRFCI505hLqcaӁDu8*KXjLY倥H|d|mXEWO<PIDlT蛾ІdX%/ 72.akȋC %JSf(Z2[nC*iّ!?̢5/ )$I0öL+~صRcw$eԥٝd4!Jj_/ ^!tfqoM.Ss ]ƘG蒞,U![33 WԱd4xw\S+“k^m3NzfSt7'a AFSZSulZW@.}a3ƶ/y25ϻHr1`5YC,,?53Y]iOq.inXDY| mDE-&LuI+Έ!֩\p RC *䗞D Fwwn>/Hc'xK#ґ>YtQsX-kh:GЋ~jZ k~b GJ#=77'uE4|;לJ%!B匟E6ޛ?LخIt6V(+;)9b?g J_*~S+Wd><;ĉ`e]WuTJ=s/ʨ+%海4#nc&̿ $\V6ml .g{Hמ=cH.Vl4e&_fdBbaukAo\iCCFnYRht2-m"9LXE)zn36jd-g#mY}~[὜T~5sp#^lկ&<]blwZ cFE^\CM*v:I !٪\J]FR>vm ad,% "(Ʀ׮ZDW;maœ`krLγ\5dr]P۩*مu} ^{,Z=~hK]j>.=NA1YZ'\̕+ I[5{<~)]y j^?tf5;Q1[d~n h~z <dzUq(uǁWiN.,O\BGR/;}d#%I5z^1ܻNKmԆ-yJPj^uF 7$l?i|'b~Q;\h hFH8u/[7<>Z:fߌ1>'o3 GHV(v,q^&*Uc׌nhmHIJ+\QOwvDKpsԎO#2˘Q5=,T9,&X:{0S []*) X>ݏZA [Ìڡl3Bx)G1u!FZGқg`cǼHr;-U :1;qДX|E##y0aΈrq # T=òó,Rlq,뙰fj _~#")+Ge\ThI{4rpZ#}%Yo6a德z0*g!5`^:^+F=Rp,j! aIPBs0zJpK54SJVQ,h!Q EfsbY'Ǜ.Y^2%w{9 (G7E5Ѕ Q&+C[ru4r19]IUqQB-u4r'q74Mi?c)4!6s p(j>&dhgr:Jkzo_zLrno} O"7_KxH.4ofS6PeL@Iu|_l܋W/z0+2˸WV0?FJ> Ż14gD-ۃ ~fItsTt#h/wNaW] ?BY(4zKenSnRU2;vѿ֑# 7K3kI@wpLe\Hx s;+Lg]N9[N%J7͉Os H ( /3W)Y,&xhqbW#(#"یĆ;4@< =4 Zmj@-1 39yTY\&eFv Nڔ US}רnwcu7D:sڪ_kn%\BW`U̱lr{^C1c?7 i}3oJo2VI8裂p@AՑ^_T/NKh1c/ T@%GHroŃ4> k|3xq.8s y}(hHߌ+cJp8Ӏ#-l1cӵЦoa`]O9^)U̔(;^(83("nqD渧,AD ցT"я\Hcda *O%CVg ~n)67:*%]?@˰__$BiPdyUC\\sꨖD>-{HcDj)t" q}ES̸ۙ[FLaxJA`Z;ַӔ:L!. Vk]bYxc>=~n(VON>bNݜ{MF 7tT08& V(" Ӹ<␙M׮#UN+Wv.4LSk{G Ż^:M@{;aXaCȣY<6i4uoI(AD@m|ךI*75U]oR"nƙFre̝ 3aHQ5K 6Kvwɦt>#=p$S%O|GDz7ՍhviYqmYP'`v77 ҴJh5T5i:$|4VbOݦF{ ;[MvH\Gl8Y|-y*(6cCZ^6LMQpHYdޕK*|HMQ닟iGGN!75MS`MO_}>{2`=tW^5)DGW:R whڸat"؆Sv:5Wa^fUJfQc-*[4llvQE%heܴJ*#H[-ud$ʧᚠ-lYNw:EcV/\`u >=X&]&+<im\fL=dZnhcH_i{Mr\K=+ NyKJ#v=,7h`rt _ܫrP1R@W)Ͷnwϋ] cj5m[?QS~{Vď?++rO ^4F{ Ш͋tb)=Çtjᅤ OЫ3qoyW# $GtCں}"Ƈs5Uqu},ƞ$]f#4,uG#?eƭX@7 )N_mu:wXɳ̼3:]Twja~E% +-jRk.A~73S-7&|P?dւj^^Uǧ'uWZ5qU'D5~t2;/DeMGbkGig ߤ>Nࣾqk7 Ȟ~R([ժM3-KYSm`(I}z+LF3WI]*m5Pvl%48fiv_UG#7 ΕBȎfROC0~Lia99.WLY|y^"b-ElTU8Խj|`z-:7RHQ8G <$fkbRODž9}ܼO0n^ɠK[N+3v) Z[҆\TCo7&NBҮrÌu\ to](`/H9o8 u}T:[؞H;[SEi [*]dzTwB4uaf~;ϗ5[!.}AoeKTi/ѥ3rswws"]̪ I^ |VR.u 5h g` "պKP%B:6 tȴOwWd[J%at0L~iNn|j2۟fnMjn;i7(߁;|-'oC:$+}8ÊRiu"Jj,] yCL+ ڡ뾌#$|%"~P;ߠwkwBW-tuD b)ēxl-M?VYGߓP8 4&)xCGcփP+8hCV{"[o7y :ZtUwȲU]~ 1UH"_펖#\W_3 sy/%Pf ${jZY=| %t񅓍,u!0^CaV6lH6E}\ڷ;km{wjLq]*kfDWH- r۩&zh]6ˆϣ( H8R^+e_)+ꤠcm]ZQ)K{>ߝ5 ptz6R9_0}"Rү.~x6Vxሉ@ifiYzt$D6"3_qD݄zjae/9(@AS :\?4 .l$bKH- ZSe'#ejkD?+b߄8!2 m]R&}hؓHٻz̙/pX:)܍!BTR̐қ|$^? #4mF™c"r9QҠވ!âɸadZ푱H[ kپlL`)UW+~OUO;ڐ伪NBBR6ͥH9Y'ٟ DW.a1 $ut%'('pN*@~s{FՐ^}qh|&cy9Hw ?>V$fn/ ,gA  R0TV2} Y{&oLH4?4T<3=TTmNؐ iodEmm3(X*a y6ݑ}kQ^lpşsR>Vߛy)UrGZ{/A$0#i2ɦwOjE}דy%v4':ʠ!^CѰNqS,Zy<ÐZ\6q2_7Kuy〫7$(#R8OG2k]`CL ΀j7SO&G*hNȸu0GVчcCޮ3GZJY EuUGֈNvm_,b~EW̏RuHWQgbuf=x.)ќ:w2íб 4A}L, 1Omt QApLQ\re!zoPAR$K(5"Q[t$rKwњ"4AHL_!lrGUľ2%:UYt)#]أ(w~. lK&4gDY_3Vgf[ę~7{PXBi`T Yc,Kpg+obW~3__KjIw B[a~-ӹU;p3m{L\9]Y`Kd}Yl} AzC BשFƒ[ !ͩjb@]6\}I{u$L#v{I^%h}*.)E 2wYΐ-'4 ^R%YB* F', ^^. [ _H4a I)ĄTؐɵ`cǘ#}[+3e $]YS\ldzm^,,aT21*HӠWlFx0O q{BVMzJk2A9]ʆu)*j-z .{}!][oa4-(ä=>K_%w",;%ЍB k.e=#Ll a{_~7$vIXOedA2Ձe4}%[@}LXW/)}Jo:Ɵʝ'm Y:oI,n#kP]iDG}ny柛ʽĆU]龊;w#l Ap~+zՠq^(9HȽip?6RF ޾OgQa!*pa5QχT,#6s򒶁X,)dxoZR|?>FR\)mQWcۢU`fKa&FW%T@U*6{ey[䱹mwuNm{FjStY+j, 'o.8؝:kQȰ s #ԅNOܓqb'd6X0(*oG|mǰϝ |"9GH=:3X.cAQf*p2lj+[/Q/;{Q+sn1&ƕksʷP ˂==}Y"}.Ț` -tg^1Ђ̡]-Uz 1Hv%YF8ݖ7֏JqekzаR>FfY}V<'+O(M]ԁݧ72%%$Z ))+xz"ʰ70P" <^~Խv{m|akF:I7>94APO"R=hTd:}QXFȭAD(ʏ+p+]-x%/tvE J^~9H;3̈ 7>)pդA%wi.%m%̟D" e 82Yc+FM%^ygP1k _JPt\׃bKxc%SycX# }yj928WObWu#S&]X,*B8-gpT#RդUGYW\>[Ό2R2 ދa%EA[:wyٕGSEm mDD+n~ 6_PDY&c h:0$Qɐ4c,-X[I6o')wSڣοkìwτ;y/zho1lXB_|(phʇJc6f^\wbu8p:hN_k %aAr_>K(%u/wkp/T~bpKz mR(bM7zA&ߍ\=u" f–ț#L]gNRK Cҷok͟?ig6 )̧KfýwcINjcHэ[4T },u}x(܂W8>{?^K.bOiݐPbZ|IasA$)DPhTH5h<58|<V*b!dP{j_.ZhMu@%ua<*: Zf) Xu_o f{ҐWQl,JD~Oi:$ٌl%Gl&A3TH./d%2m@d`Jbߟ)GBrQ%;D}qLVO :˭i*Ԛ;'sCSIxt[_k0(3LV$)TR{feC7Y E/E6 8lhJl]Կ(lQ1PA\ȘL_7[[u)VqVq6& S6tNRa3(e.O״4EŢ<@.rmb_~4m{^/K2vXf%^ G]ţ@o|p:)V8-\n1>bg%5=\=MwT8DX\܎ ἄFN$>z_o7 q0'ɓF7./G'ʦEjUȄ:դY۠{WfsuP!2 endstream endobj 279 0 obj << /Length1 1644 /Length2 11200 /Length3 0 /Length 12059 /Filter /FlateDecode >> stream xڭyeT\ݶ%N5] (NpnA \C&^߯sdF8 4إ,NP7vn.ahtRe۸^od\ 7T聭`K[HH ucfee/_h^=]!6P u{vn`5 QgTQP b PX`f _ 4WW,)W ,Ulg#qظn=ps@Vx[;ӫ읓 t yU_-,U@]n`/,+5+ 4]!Pʀ X9]]_a^v/Ճv?s9иy^cZƶ@8Ί /<.4ߙa~MduX8Nn!oX#[#9_.}whyw ucK*qo> G߭Jzmv!>A.) /;-ڷ:P+ ~عMm %T`տWJ?5piK]u̸u,ܴOO?vA!?@uV@F\\\ܯ\c`o0rPK'Z -]\^)gnD[^p Kp#5 s.m.*PC6iR{iWeoȁ'|OOW)iZqkNuKwok\CӴr :Xi _p` OoF{vY?ǣ2Riݼ]-=\[jpt<}ܩKe"%`yS(FM滶i%qt%8~SB:]ۍg\7sY៬uq24 tž ՓI0ȉcEK}Hޒ,5tB놩NZs}H ˽u^KR.$^/Nb[ .uHb®jfhY"9 Sl4WqݱZ8F)2ŴǨ;]m0欄&-!0e*qÓ'9&6CҩY=Q"Y_|Dی:0ýfGaqp9)6D: In-U'֐et+=ڝwP<<r vB{}S` 3׾{ e&Y؏XP"kOwi4+{zxio\fk9UbDTX{*Usd:8yջ\{x8p)x+"t#})Hﶚ1kIby[C *V:Q=NvjmHy_įڈٱjp^Ո䰣@GaƗm{KsvftSecA vW!#+n5 %_J!Ou*E?fozst ズ#iIeM>hA9k`d7KJX~0bW)qѮB3\eYv2G[_ZǓ}IV3,3y+/!ڱj&5`ky *pgIkɅ6mܼWsT-/FǶme&%ˈjo|0jW>Q|6R_cG5)Yw|yV;TS^rb~:G9-*c{v_b$WoUYPIٗ =tݿ]POmSq'qNqQ3ؔT{!rS}^ I. "kvqp6'rGfeU@2a{67ge7<["1*#MoG5A#bKF&Fԉ<^E1$ -cT5bEd YSeSh){ mȗ]KW)0kt:&3zC#cxx" 3gD nl-͍%l}!o;֔Q V0ad0h2_e(%qY}+ 똨jF.CbQ,E0Z<9x>`QaD^Cfh=V&^ ߮Yg1y;ZӔ{ū%x2V~RbԼ&AoB.uQLuPBC#сԴ:dg!$ = 6HiI.![(4} ?͟hl3Klt>ueg Be 7, >[eetg@@v0PyyÀc/IOR$r ֠ Ult yJO,7Gw c'MU9CDsF_L G`uNG߻.`f/ ԌZa/i߰~.k?l~Q(Ҥ3 LvJ9-!ڦxSð]#}oWMQ&BrꖹoeYʶa@MH℅!3V;dSk SXzlk4~"3O5\̇MTU>@̄t%tcZx?TPBʊL3;$?Yj#5E谍i>!' Xu(8 M\m 젊/>&jt79xӟrR_V)yM| ,1of%Þ⹅#"60`پgHl:4:!{9-3E@iƯVeσKC;?CfPxn?U)[}7THŋKzOAvKxؙ8>$88!Gm|#_;gqfċg>58Nh><r;m)6sVxzN &Y?.> *dCt#`U礁vҷ;J$ ya#ԠϽeƼۋ<7BԼ%k97̈́wQgzb rQ_8d%ۙx7!lj\ +=9rR*XSDBƪ&GȹjXuR:V!N־{3f/D6%_[? jkTM'R6R!{Q. _v)_O!U`ؽvK)hu`H|$Alab>N{,T(O: I0{=9>c5eL$L &E+xڛc_6u`2+WdWNQc,SסIPZIïًk=Pׄ3koV ;bȹ#z4 ,\#ay515D=JtWI $W;~Rc GvkW:.ǟvuhV7Fm6vJL.O(fpF_.9;$nV*%()HM\bxA/=i\ x̻g/".,@6E^8NaM #Cew-F/ (#YJKXyOWSpiIOUI׳ rZbQKuL(bJ sCPТ*EGWĝ$+ϐcg4p|O1."/|Yʄ|6$ ~Ǻ b]  VĚ"V Ӕ}IiS Hc0n>Aoת>7TsOOy sE(\"e+ 99F+Cl ¸aYxftK+ AqeIev C|y_ \U<.X.{z B6HR(O;J}َ!YIjա%1aы.1?*Q}jJMiz~Jؐ;U%:RO /Dc֑4³wEe5ʬTuvoe>nu.&zLFy%%Fbee.z{LmDf\*iogP7m=+}F|vBC ;N[ݹEnm?M1pY83F\k1QXГ?C㕡M Ϟɲ2V%`2& P aIgC+skp~cFm"5rU7#n#h`wA@s8.im!ZIwe[$E5ݟ\V n Y?Pm8!ue 3UMXM6lzF^ֵ\'IG#G4?앻(Wk*z6m&,`p*I 岡B/Sotu]j|H{SYq7N+OfdPv 8 DZiC1\/*5 xJ*G"ۖ5 u G+3'x?Y-DºdPU-m(aU |!qBEzӲΉ- 3NUϖv9$ɥu%BjH~BIglȫE!KP9\*A>nƱg?4jPʀ_΍i;u&'{h]TǮ1IEy5u*IO0sR r?rsq*^pv5l,o LD޴c)2$FyNAv0J[MgSL%i;%qL^߶*XkkbOIFC+7/'բ7!* WI{j/'U"s.W%?:ꂉ,i ǃX{snMxcn%N&zwśÖ01OXgjE5˶f,.k˕MׅԮeox7phymbh_]GTU{早RUk= +RK4Vh8&[\2rc^Xk)-gS*ų"(8 O14uXVvd@v=FVE' U{![x}NCگgU >oax'U6͊2.1_23+0v۬Gh <䐷zb$=%q? bBdd e)3ig**UAMuw.v`E|2rP`dE1BwI`r6~M<ܭ&:S''dY gǧ-TsWU :ypR;0I'>rDA+Y/e|&8h~KTIA05:K& ;h8>ŵȬ*XdAuhqz$(HRL{NH,9O̷fߜ*nϽwm{|_g֋{?}5KM&`/ê^.RL)e`.$N?eг" ^ha!0݀aaWY02dmD[ӽ7 cR?Oo|,PuKOփP&0$tj'=5%1WXJu- φKNx;Y?bLHK:(ȻLߘV6 b+Z̜ojnF-a6{8LTWiy3F~h.@{#S@4U+50cj8 9-_o'"j aNonv} 1bʄNnFq@zoh#r^.',#N2VZdRKzZߦ#Y7p↺KRҝeQiDqhuR89tcߪb(?< F]Z܆7J"s=n< a,Sk]cs]_h6Oe۾[(^8njra𴕺scO2_#jn~av[) ɽ+`TObyB2b}M0W;|oRja d3̒ohY,jP禖ʉPS]u #6៏V*~49yΪ*4Y~1.N <ū~宆kJxGI}DvLvх&]+'RxPAvb ϴҥۈ1<4Æ867$k%۟reL͕/:lQ_\s~y4?93ƦZ?w+sN]Z7D?Hc[O")PH5No."2%{Rr\="?}%,iZtG-prpR )ʕ@X](Ǭ~#A?#RY~<sҗeAH̳^ˈbmb!>/!DD>qk"Yѫ/C|[V:Ծx.g`^mzƝ"|=I!eu]5%i3LkҜn|P[J L- >$3̝x.e40lkJyNrA83xf=v"ORэ*vݟ +!u~#g`%Lfì&H<%"'j>7w||t%7ŰMh3,;a‰ڥdДj:C/$>WQ@JAd c}RjBC d0,RZjz'Ό2>AVDœ\-`=_p,q׮ˉж; w~n DFt~|FoE5Gvyw>^$A.zxgb-l4> #$EϚDZi66teCCTؼ10Lv<^Dq8%_G` }XE:OafCNG B Fo(yPN1$N$|?sE+ΒZPg}AN`?óq)&?((Ļؓ P%Ri.ypɭҎ_NFcd&cENwb*'[ukKN7笒,٠3=$%u) 6wDؙ,qJDk|pm[f7 |ICf9>f]a\kJ/r[V3KTP+mimF dCclTs}{Tj"ox/PlԈ)Z-W;#(yuD!fYF-Ќ{A?{؋1`r<ᱰCF-4hLuxy6iO1$6 h;)v^Խ_JD|o2JY+aϾLtY?N$_+ꌯ%cn\k)4 a޻P)EYߧ;qVLkNdց#gE3͇G2 cK4AxRmdURiq&F#GQK s;4iD9V]F m` ?d{4p ,"rt@V#!o Ƀ~-sIT Y28 ,XP*X*G}>6rwH.OEE0TBt ӡ/_ *Vk *wǹi8j^3R\:q RR8.m6)= cyA.-Ǹx3VՓ KX]k4:W-8H54o`dN)G!eȒ,Y|[WVzFb ؽr9(De+4EH.S[!$j#W5*g+_bd+W:Kok FN8C8P>J¼ .??*ܚ1i0A_ \.SWB΄J ȝ k_$M"5ōMk.(yB'2/$"f"' `R/]+lŃB5kth~8g ǝoz$H2FbU|.G mGvCx}3CzgwK*Ӭe9+! Rs ,ϏZ<82u2 H:*'bl3`(3S~0܏~؄i{ u$ W C{N5Ԩu-y{y{lӧ(ȳbhm& ' f"2GrO=Yv-*22F* ]P@:+̘Dh>ˡR#)Dʨp8̟%?cd&ů,e. 5/̍BAG/)7 @䜤7|^WMCIu:g *#vʲi3{trKC軻ձЧrcd$= ;vԒ`q?SmEk󦔝wl7f8w8$< u#X]zVlJ\^$ UԤ،a)'t{>,+yi  ~W '\rV%6T4U;VЇx)M7׬,CR&E'B^ endstream endobj 281 0 obj << /Length1 1647 /Length2 12794 /Length3 0 /Length 13653 /Filter /FlateDecode >> stream xڭweT]ݒ-?]Cprpw5Kpw۷o^?{\5jZu!L'hlch"frcg lldL̜$ #$bh P71L\\\pda[7{#RUI_ |x:@g+Qhn0Z4%rqG NV@# `B0Xc0*́K`p51~lM쭁q6 >6'dko Sqpt0:>*#OGsǿb;?`Nc#J@ _ M@[+dpr-WR6&VpL1?bAp $?1g򯞡Hd061cq L'+'k_.}wj1'++9ǜ| cd +{_hX;߭n}(DF3A jbt42X}vUd!o9lL@^ÇnW)BLۿ7+|t ?"/*!!W;2~\G.fVGؿ5p>Z(>Rv4?{|Tߗnyƈ'"%=ձ;{p\D b0ȶN ϷҦ'%tKU}$[p7EWy. UO:y͞?^b9MH-vFqE%/Pm,0|I|1Hmk1QЪOS t]}ţɊ%1N<3 z8F}ٗ&`RG(١nټb\'VMe|}s̈A#{W)@ɒv*zmnj#BJ|/x胋8>;ITU+SW=|r9);2ÂjHtD|j/Tlf5gkZs I%N\/~rpϡ+?MLy"7]_JVا*?gR <'*AGE^V܆EzVOʔ~B},Ͱnj1`F%FߘZ6'3l_ˌ%t:u;tސx\}(io?!>=QB0'j3:N-5H0%<&xH0YV!aT &B yrfkH@6NYՄN[;L.'0( :\0qPq7\, M]Fh9A7vmMb^@<蜢<3 Cuh)8-f6g_ !#q [;ki庵?yU"Eo !' z ZBւ8l`l\p Mmiyg* ݏ=pMgo"TVA{'(/2V?#= uv,=ٜjV|@V9Y.'ZvxsDO{]ZvD;%(ag-6Nu0^}t-E$&נ`=;r{ P?#Dס0AdS9sOVpEn=)m<) l#e`#3NH8i3Qf]yK90 hO2IC5d)+v]ވyfQVWRQƄ{9w g$g Xi@{>(V:m{}D4~"ۃgһW-[~v8CX0AZS [0}%[@2%&& ;vyVs$ C0*ۢԈvMN@S|tȾϰzÂ)XilY UoCCUeP9DA=…(kʂ;iYm6c{sg~Q%,hh_ f j9֞fX[)r"~b7z=#A,Aa-F`Z+2.ڈt? 1$!E֡vYy|ˉuhF\v+)5sN'ՠX79rӄ$VՊ՞ӯd :j9|֚TYǮA ]y!CʿUZ p$P-0*J8iZtXk҂g]aF/7#!%w@`I`ɋ ՜;aZAN,*r( 2.a@Sнw!29,'U"?JV߆B/!-NWĢCOXyȯ8ghcgg4>_`N)\#dr\S=I/ŨR%0箣X#Z4u{o"jxLܭN gq$9 &4&#ǁZۓo+h*71ܢȃ&#rsZcE%?kF!aV/2c^^ TQ+X JPP6'qw`b|%5*.j, q*R,ȶC]2Vjն͸4 }fq_5):aIߒ"ZIY 8 -Ƀ QG*- &$i$bB.mG8'hOm09G 8|/tr4Q|p}mgGE4TJ86khzUHsCܗ7W;YDL ~HC%`g/Xen#(z::txs0z{햲i5swwBqn%>[u֙ƹثR? lވOU*ܗ(ELk_Mԛu:Mtnygxr~.NKc3)FP2;{-⽶٬kRuJn:llV۩?po;6vOu^:؏8%gL?U\vM{h;;`ΘuXCF^ĕg8 ̔CwrݶX7ǗAFhikͻ`{x!6w(-O.xmDVSzT6n\"1s9ܻOS %NoD !0ȏRdR^6WF폓6Ow*D?k L˴& {((JTux>F<^p{kv oHz f +غ賂FnF5‘Qo3I] ,NՒZHY)׊UHA!!f˛܂')r8Y3Rz4DeS5JuBLx{!#,BQ#YNgWZ!f(FNe=]iVy?+ gHqE';eKI9&dl|ƔN9W.`v?D$w^ F]Ǎ \DjBo|>'=jF܊Y} |!t_3 ykǦ'xrV'r8 ֜gR>z!SrQ e\ߖvHKV"vKM*PqM[bYX%)E>/j'_.Z=OeҰݫޘ&+۽p G shPi@˰sKV=Exf vnY@UݔށGEOW҅ j7]PTCHޚ^QEj)ttFYU`R_Kp7iǻ/K,(ĔjyHjH{ 0:R +Iѝ&+{z^ J2~~ K;/  18|⢘bi$m*H2A(0FNb1 vllIJDz<'8^*$Iuo`e.H j-u4u`:Wj ϗzDxj7wi0*5Fq@}#~4uj^)C)8a9)I= xԋܛCٛrHu3GXNT@6'wB""mcexMӻhYS5g[ 1 y{yoO/\l#d7~?+Dzf"[a_>$vt9 2]_VŜۅr.,oQB[I'yw{Ϫ@Q<6=1JX0M6$Tί+cZJ<<\0 Gw \n4{6ʒ4WĽ.L_^Cm^< N#",@ƃۀ !&oG( ( O_4<լI{Q*s1WՃ#7w tj/?PO[}q,AJ)9VѵP x10Ԃ\4]8XFk8u%be)(E^B^9w2Ga([i[HF9uْ`lgh>!6 Er'Y ?Y{N.ѠFe#G &净螀\JCw[F5"msHMc%nlZXCCfL?urf)ْA-vb}Y5%eDz ܧ*™SRZ7lvpc%suNP7,V60UN.-"!ӛ@7>nK㾐P⡋cyk(c̖5P6Tl%%9StdfUtF2 hZ;3yZdjǴiZ2UJ?U<|\p+X5Jl7J6N03~w VtyL4R_F)vQtNدd| &59.5t'i VnPө|ϐIP?Hj7ΜC`:J pPD[ݢ$<q\Vnư"ά߃T`4mEMnsn G"z!'d1*yTsٷAl\DCm6x6E4YFLe=fjV\ kP0ͧ6:dkEip*.@2W0.S>iܝZ15-C,y'!* G G S Xٽ#~ &-lYvy#`HVo83aNtø k>%e]^x$̠+΄0٘`*+=W->.vrlM.C9LMRY>q1dL۰k`C5 wPr'Sv?c#$N̶@päNɈkRJ[\CJHcߌ۰~rRa{f&TxAj8z|3d4ttEƶᙑ΅.-ԛ% XTR9W )"TYI Ӫc4A16~H-. e&q2;0o4Rez)v; gQ aEz:i.x8A mr!:VSk$<6Q@I1s;\GOZ/ę5%0~@#"G蒢"Ț4x8)%DY NK5(GvϿ%̅#$&'i!D´c@ /ETBζVT/Uh]!LyYI #daށ:Ś*]:r1g݃]0n(Mf vyO̟ Dḟr)Gp0L5Ɯ D.0ވluL/׻ [ٲ{~vi9Au ( >b 1|$'}.4?`<c%@Anb37ӿ\рFʘfG@B 5ָ, ]Abjn/&-jTvuH @>(_3v#:3ʹ*|=.)L[LqZ{mlT,Vy䂰ܫ{`.I9;HcPWfNGeRLj'N}r9Fjt DL6eΣ/nZu*cԩv&Hʀ̀w6myd O1|p1X,utLT22}L{k"SRboEs5w_gB(+R6CBD(d3%Ta?wVX9f.!o Ҕ :ԚRv @P놕 tӭUxcz={szsO k7V^1؁n,E#Ar==DCYf R :'/qvs452хh17^jP9XN2PNc_ѵ41׾vyzt(~2m')uDb4}U7}t~X$<~T ^5{=,(|wo1VUQ b^n Lo/E&uwKV:i×c֨>u8_]/--< %!e{哳6]vpkjo (ڇNi 4uA'VZ%*>ܣ]-NyKNK`?皛,^k,\.s[i;SW uRM񙄥9 ]r9{*lg*I+*/=0pS.?Tc&bШIO0!;@Z:ZvҏAmHOof>DKSjacDzr<-%6UŰLV #,맊[CغYx 9(YeeᢿY a*WI(M$f+ח^2y9>Ck޿c>+8ml, dvST )0sWoό>oa9%Skҡ4}W;CX[t%>ur$>J%/c4{Jt2C}d#o&<騂Kwr(rj$x9(-a6ZJ!/Hl:!.i|./ЫWEڌɂg4H\_ lp9r.Mc fu7*|q6^к)S$4xa!{2#5Ɏyu3 PKrq'A!W,x醻h%Z,G5C?/e]7N]í6m;INO0 A {ad= tBy1r@ NaV``hEazFTS^z~pj]e|/sƷ 1iն6Qwd /`vJ ϻW; ӏJe̛\=n)f.66̽4,Sjž"}fpT+]A#N ]p c|n«u9WFAHS>:`] MJʡzLe{\G>}F`e׫Jo={dVGO~JR|nljxg|q~&kiK|w[Qkf$-;\A5#IdH:Չ֯ߝ-r}b M0Y-k_'c29P` &#&\Sʉ to1_\fBF \ 07Y#tBVzxx0<@NDpP> eegw4e)<{  $.%G#iI=%X/u eUl}+j~fl/tHE䔋/Z`u&㡮@`)M:@xnP cRB(Rfo'!4pF㕎 U&W9hjwX]bK0VvM\xCdŧTtz9 @\ c*TXrA-X}8NiCO0ڤf[sX4%\zP=7O%Յ &0mULG/"|l^93<;֣Cb#!M$kHͮ@9 gq xH7@e "Ot͛(HnYŧ͡%Ӽ2zk-c`j^ E2;i3t‚'Ҁ(zbP Ί6pT]h6nT2lb6 LhAI3ZJ\<Fgp(Ad/ 0j'^Ood~pm&:8K{UHRX)X# ԹHѕ_J*yʟ/*%SqNJoZ{|)GF$<윹;""K.AT$f fc-!\"J_W\cӯ=3a1O?OLX2\Li,Q=w/ G^=Ԗ.Mc`X,l6(of0i|VJ6L64e0~XkU(薊#a8qc} #1E{U[dҏDtee(|Ak祩p[4-^+Ŷ#)o2&sM3}ٓvzԗIduָK(BzG?gܸT'VnZyL@IS|BǶ6>\s-j0.g(yc7;LyMXlnk[BA?TC3O}BD}HRڟ:O'v}kx#x|kXѴbPs l-fQpg=Ʈ"EK T+7;ۮAj-u3DTNˡ8m?ң{]lq([4F$W)x \#a1DyCng\j3X#رg}o`cW 2u\ˤ=:o4]qyzL30tA3 mґ 3XмK,N+jMT0w2fxNB0{ȍ١0%FoTQʷvYTvJmJA{/oK-@ZCtd7%~>)%lIHg)H)Ps+Əʺ'#-_'! H!~R(baZ4 nrm[xK7,U2вž&ۙ^=[^/eEQ@ڷGQ<Aj5o'z^ysː g;Aġ7a̻֝k/%/3o=49.@xʨ3-hPYVT~Y2̇?S5{;_haiU+x`ث7 YB 3 ԓe7eߓh5ښ,~j HllW [%Bc0;Aj$v;,S8^B1Rm g3Y)}:u9H|R*;DS/48K4$`iro/h!؁VLo#PdD*b|$&_•2#Y_nhhDQUgqLo$oW~EIA$wvy+G-'YcP^q%a$ D}0;_c&Ă'~9! ʖ̜F9mmEv247ⲿWsl60;4lpxnpH9,|KOK(JUy,b CWm7:; _5|01htsiLL`]5+Yu`6BaO>EA@t  {4*93pf|ʙXT蘤Dv6њ=9PV{9α(.x*\3, HǸܤÄ.w( +tKHS{u-djDOd~JbKp9Ȋ >a }ݲeYQk n@iȚ<cwR-p/=Ka[KD4x )K/ѲrZ<[#eh,u[FnkCT7T>_ű@V= zfg"@,$&$;貲 f;S~Mhm,8B[3b.IX\;,C6> endobj 276 0 obj << /Type /ObjStm /N 62 /First 528 /Length 2540 /Filter /FlateDecode >> stream xڵYYs8~ׯc\)$'r8S-J-HLRq_xHS j"G0#=D(D#J<@iր "(aC40pQ)5pAP|n|Y&(!?" @ Ⴈ W 1@3> !E cpRXN7`$ C@f`lSf")Z)S<` |$Y8 N, ,CL 聀y"!%-@ ! IHh }>@BRA9UvDqp#9pA2Q '글@ s,-e1ɓe}/۳d1^,Nwry|_ fvg?߻Bf3!\<޷+&2-7D&3{t]p/y2K⨔k .C 8w=W8c躔-tQQEC H.8l֞g'!>ß9Gg|o-Y]Y]؊IX@4,f^ӸaN9..d\{e~,\Z22O)~\on}g. \˿Gve5_ÛmwG8-CBE~:}7XMEY8vDU]ʢMDE`iF mMQ$RL1eJ*D)2qˍ bIG$&=A"Yκ9qZjqT+B .nߺ aVMBDžT+^ݾ޼=}!ޠ $>NTQ ȺI@ͬmڿܞb>|߫CODvzO ~٫mʉCj7{^~[\:{Wo! :;ڹ<}1( :A\{OF_O>^G(NOwF7p\`UXjdo>l[B;65FoGe e/~ Du!k϶W6nU;߷FS-|nO 1;=n:0F{/ylGT_TN L S:rEQ÷_N<@EgFM 5nAQ; 3r;ϭLHS|$6Gdkb`ਯ<]V]}0j}g4hR7 ރK[L-z"l8w {ګOS=gRS#*zqQZ"6Y7d=X H5d+^"O֚{o+^{ǽʽޫ'6WDWV$kYVY ='em^pNl!wVII֗TCi![0 ( +Qj[aȖÔ8ZݿUe>juCT#zAc! 7nWrD5=rx `@8bDOWv{(0*vŰ(o>i4OZ5qM * xXGuZC ^}gSyU;V1mgL@ܙ5ܙC5")Z] 0C0.LH4`|8N$iU68A8s0EZVaqdnr̗g$E㫵pv~#>hY œ, T$e;}=β6t*,RK^c,_Y"ͪKLZ]AӼC NT }ծ`:~CVx2joVEe9iy }ص'ڎMގQ\沀BDc]-,ө i`/w6"ϾX:+N_j]ofiL*Tp*LBA|p3nuE6 hZ}57݌܎]ӴOnV[nF'q&ms( N3b~^FEϗћYY.a}5CZ0\ȳ,J>W endstream endobj 300 0 obj << /Type /XRef /Index [0 301] /Size 301 /W [1 3 1] /Root 298 0 R /Info 299 0 R /ID [<7E858A15D2979A6CB6A2E4531C0565A5> <7E858A15D2979A6CB6A2E4531C0565A5>] /Length 714 /Filter /FlateDecode >> stream x%IoQ~;VoNhkyA[ m)N;MDlj!H;"!/a%MWb%vr?<9:fffIsBKr!v:0.=IY 9\ȃ] 22hza/v!XA084%LpJ,mǩJA[>YZF%+sRwG"YcN:[ !Ab#q%kpA"m(ۣ: BhJ(w{zKS QͻT5ն&ՇF 9HI FNы!t]a ôid-Z,m܀ A&c6 74^Ҧ!1d2m= 1A6Y~/*Y 01 3@ kAbͬ~GU n_7T-Rc=Ϫ\U LoadPackage( "crystcat" ); The catalog was brought into GAP format, and ported later to GAP 4 by Volkmar Felsch, Lehrstuhl D für Mathematik, RWTH Aachen, volkmar.felsch@math.rwth-aachen.de The integration with Cryst is done by Franz Gähler, Fakultät für Mathematik, Universität Bielefeld, gaehler@math.uni-bielefeld.de For bug reports, suggestions and other comments please use the issue tracker on the GitHub page of the package: https://github.com/gap-packages/crystcat/issues crystcat/init.g0000644001325400021140000000056113232361444013175 0ustar gaehleruser############################################################################# ## #W init.gd GAP library Volkmar Felsch ## Franz Gaehler ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ReadPackage( "crystcat", "lib/crystcat.gd" ); crystcat/htm/0000755001325400021140000000000014270745041012652 5ustar gaehlerusercrystcat/htm/theindex.htm0000644001325400021140000000652014270745041015177 0ustar gaehlerusercrystcat : a GAP 4 package - Index

crystcat : a GAP 4 package - Index

C D F H M N P Q R S T Z

C

CharTableQClass 1.5.5
Crystal Families 1.3
Crystal Systems 1.4
crystallographic groups 1.0
crystcat 1.0

D

Dade groups 1.7
DadeGroup 1.7.2
DadeGroupNumbersZClass 1.7.3
DisplayCrystalFamily 1.3.2
DisplayCrystalSystem 1.4.2
DisplayQClass 1.5.2
DisplaySpaceGroupGenerators 1.8.3
DisplaySpaceGroupType 1.8.2
DisplayZClass 1.6.2

F

FpGroupQClass 1.5.3
FpGroupSpaceGroupBBNWZ 1.8.7

H

How to access the data of the book 1.1

M

MatGroupZClass 1.6.3

N

NormalizerZClass 1.6.4
NrCrystalFamilies 1.3.1
NrCrystalSystems 1.4.1
NrDadeGroups 1.7.1
NrQClassesCrystalSystem 1.5.1
NrSpaceGroupTypesZClass 1.8.1
NrZClassesQClass 1.6.1

P

PcGroupQClass 1.5.4

Q

Q-Classes 1.5

R

Representation of space groups 1.2

S

Space groups and space group types 1.8
SpaceGroupBBNWZ 1.8.6
SpaceGroupOnLeftBBNWZ 1.8.4
SpaceGroupOnRightBBNWZ 1.8.5

T

The Crystallographic Groups Catalog 1.0

Z

Z-Classes 1.6
ZClassRepsDadeGroup 1.7.4

[Up]

crystcat manual
Juli 2022
crystcat/htm/CHAP001.htm0000644001325400021140000014723314270745041014332 0ustar gaehleruser[crystcat] 1 The Crystallographic Groups Catalog [Up] [Index]

1 The Crystallographic Groups Catalog

Sections

  1. How to access the data of the book
  2. Representation of space groups
  3. Crystal Families
  4. Crystal Systems
  5. Q-Classes
  6. Z-Classes
  7. Dade groups
  8. Space groups and space group types

The package CrystCat provides a catalog of crystallographic groups of dimensions 2, 3, and 4 which covers most of the data contained in the book ``Crystallographic groups of four-dimensional space'' BBNWZ78. It has been brought into GAP format by Volkmar Felsch.

The GAP 4 version of the catalog requires the package Cryst, which is loaded automatically. The benefit of this is that space groups extracted from the catalog now have the rich set of methods provided by Cryst at their disposal, and are no longer dumb lists of generators. Moreover, space groups are now fully supported in both the representation acting from the left and the representation acting from the right.

In 2001, Bernd Souvignier has discovered an error in the above mentioned book: On page 118, in the tabulation of enantiomorphic space-group types, it is wrongly claimed that the (affine) four-dimensional space-group type 08/01/01/002 splits into an enantiomorphic pair of (proper) space-group types. This is indicated by an asterisk preceding the space-group number. This asterisk has to be removed. As a consequence, the number of four-dimensional space-group types splitting into enantiomorphic pairs (given on page 11 and page 52 of the book) reduces from 112 to 111. An erratum has been submitted to Acta Cryst..

The only implication of this correction for the package CrystCat is that the output of the function

DisplaySpaceGroupType( 4, 8, 1, 1, 2 );
had to be changed from
#I    *Space-group type (4,8,1,1,2); orbit size 2; fp-free
to
#I     Space-group type (4,8,1,1,2); orbit size 2; fp-free
This has been done in the release GAP 4.3.

1.1 How to access the data of the book

Among others, the catalog offers functions which provide access to the data listed in the Tables 1, 5, and 6 of BBNWZ78:

  • The information on the crystal families listed in Table 1 can be reproduced using the DisplayCrystalFamily function.
  • Similarly, the DisplayCrystalSystem function can be used to reproduce the information on the crystal systems provided in Table 1.
  • The information given in the Q-class headlines of Table 1 can be displayed by the DisplayQClass function, whereas the FpGroupQClass function can be used to reproduce the presentations that are listed in Table 1 for the Q-class representatives.
  • The information given in the Z-class headlines of Table 1 will be covered by the results of the DisplayZClass function, and the matrix generators of the Z-class representatives can be constructed by calling the MatGroupZClass function.
  • The DisplaySpaceGroupType and the DisplaySpaceGroupGenerators functions can be used to reproduce all of the information on the space-group types that is provided in Table 1.
  • The normalizers listed in Table 5 can be reproduced by calling the NormalizerZClass function.
  • Finally, the CharTableQClass function will compute the character tables listed in Table 6, whereas the isomorphism types given in Table 6 may be obtained by calling the DisplayQClass function.

The display functions mentioned in the above list print their output with different indentation. So, calling them in a suitably nested loop, you may produce a listing in which the information about the objects of different type will be properly indented as has been done in Table 1 of BBNWZ78.

1.2 Representation of space groups

Probably the most important function in the catalog is the SpaceGroupBBNWZ function which provides representatives of the affine classes of space groups. A space group of dimension n is represented by an (n+1)-dimensional rational matrix group as follows.

If S is an n-dimensional space group, then each element s in S is an affine mapping s: VV of an n-dimensional R-vector space V onto itself. Hence s can be written as the product of an appropriate invertible linear mapping g: VV and a translation by some translation vector tV such that, if we write mappings from the left, we have s(v) = g(v) + t for all vV.

If we fix a basis of V and then replace each vV by the column vector of its coefficients with respect to that basis (and hence V by the isomorphic column vector space Rn ×1), we can describe the linear mapping g involved in s by an n ×n matrix MgGLn(R) which acts by multiplication from the left on the column vectors in Rn ×1. Hence, if we identify V with Rn ×1, we have s(v) = Mg v + t for all vRn ×1.

Moreover, if we extend each column vector vRn ×1 to a column [ [ v ], [ 1 ] ] of length n+1 by adding an entry 1 in the last position and if we define an (n+1) ×(n+1) matrix Ms = [ [ Mg, t ], [ 0, 1 ] ], we have [ [ s(v) ], [ 1 ] ] = Ms [ [ v ], [ 1 ] ] for all vRn ×1. This means that we can represent the space group S by the isomorphic group M(S) = { Ms | sS }. The submatrices Mg occurring in the elements of M(S) form an n ×n matrix group P(S), the ``point group'' of M(S). In fact, we can choose the basis of Rn ×1 such that MgGLn(Z) and tQn ×1 for all MsM(S). In particular, the space group representatives that are normally used by the crystallographers are of this form, and the book BBNWZ78 uses the same convention.

The representation described above is the one usually used by crystallographers. There is, however, an alternative to the representation of the space group elements by matrices of the form [ [ Mg, t ], [ 0, 1 ] ] as described above. Instead of considering the coefficient vectors as columns we may consider them as rows. Then we can associate to each affine mapping sS an (n+1) ×(n+1) matrix Ms = [ [ Mg, 0 ], [ t′, 1 ] ] with MgGLn(R) and t′ ∈ R1 ×n such that [s(v′),1] = [v′,1] Ms for all v′ ∈ R1 ×n, and we may represent S by the matrix group M′(S) = { Ms | sS }. Again, we can choose the basis of R1 ×n such that MgGLn(Z) and t′ ∈ Q1 ×n for all MsM′(S).

From the mathematical point of view, both approaches are equivalent. In particular, M(S) and M′(S) are isomorphic, for instance via the isomorphism τ mapping MsM(S) to (Mstr)−1. Unfortunately, however, neither of the two is a good choice for our GAP catalog.

The first convention, using matrices which act on column vectors from the left, is not consistent with the fact that actions in GAP are usually from the right.

On the other hand, if we choose the second convention, we run into a problem with the names of the space groups as introduced in BBNWZ78. Any such name does not just describe the abstract isomorphism type of the respective space group S, but reflects properties of the matrix group M(S). In particular, it contains as a leading part the name of the Z-class of the associated point group P(S). Since the classification of space groups by affine equivalence is tantamount to their classification by abstract isomorphism, M′(S) lies in the same affine class as M(S) and hence should get the same name as M(S). But the point group P(S) that occurs in that name is not always Z-equivalent to the point group P′(S) of M′(S). For example, the isomorphism τ: M(S) → M′(S) defined above maps the Z-class representative with the parameters [3,7,3,2] (in the notation described below) to the Z-class representative with the parameters [3,7,3,3]. In other words: The space group names introduced for the groups M(S) in BBNWZ78 lead to confusing inconsistencies if assigned to the groups M′(S).

In order to avoid this confusion we decided that the first convention is the lesser evil, and so the GAP catalog follows the book. In particular, all functions listed in section How to access the data of the book use the convention of the book. The space groups, however, can be constructed in both representations, so that the user can choose the one that seems more appropriate in the particular situation. The function SpaceGroupOnLeftBBNWZ constructs a space group in the ``crystallographic'' representation acting on the left, whereas SpaceGroupOnRightBBNWZ constructs a space group in the representation acting on the right, as preferred by GAP. In order to avoid long function names (and in order to avoid mixing groups in different representations), one can set one's own default with the function SetCrystGroupDefaultAction (see SetCrystGroupDefaultAction), which takes as argument either LeftAction of RightAction. SpaceGroupBBNWZ then constructs a space group in this default representation. Initially, the default is RightAction.

The space groups constructed from the catalog are matrix groups, which in addition have the property IsAffineCrystGroupOnLeft (or IsAffineCrystGroupOnRight, respectively). The package Cryst provides methods to compute with such groups. Cryst is necessary for any serious computation with space groups, because the support of plain GAP for infinite matrix groups (such as space groups) is very limited.

Before we describe all available catalog functions in detail, we have to add two remarks.

Remark 1: The concepts used in this section are defined in chapter 1 (Basic definitions) of BBNWZ78. However, note that the definition of the concept of a crystal system given on page 16 of that book relies on the following statement about Q-classes:

For a Q-class C there is a unique holohedry H such that each f.u. group in C is a subgroup of some f.u. group in H, but is not a subgroup of any f.u. group belonging to a holohedry of smaller order.

This statement is correct for dimensions 1, 2, 3, and 4, and hence the definition of ``crystal system'' given on page 16 of BBNWZ78 is known to be unambiguous for these dimensions. However, there is a counterexample to this statement in seven-dimensional space so that the definition breaks down for some higher dimensions.

Therefore, the authors of the book have since proposed to replace this definition of ``crystal system'' by the following much simpler one, which has been discussed in more detail in NPW81. To formulate it, we use the intersections of Q-classes and Bravais flocks as introduced on page 17 of BBNWZ78, and we define the classification of the set of all Z-classes into crystal systems as follows:

Definition: A crystal system (introduced as an equivalence class of Z-classes) consists of full geometric crystal classes. The Z-classes of two (geometric) crystal classes belong to the same crystal system if and only if these geometric crystal classes intersect the same set of Bravais flocks of Z-classes.

From this definition of a crystal system of Z-classes one then obtains crystal systems of f.u. groups, of space-group types, and of space groups in the same manner as with the preceding definitions in the book.

The new definition is unambiguous for all dimensions. Moreover, it can be checked from the tables in the book that it defines the same classification as the old one for dimensions 1, 2, 3, and 4.

It should be noted that the concept of crystal family is well-defined independently of the dimension if one uses the ``more natural'' second definition of it at the end of page 17. Moreover, the first definition of crystal family on page 17 defines the same concept as the second one if the now proposed definition of crystal system is used.

Remark 2: The second remark just concerns a different terminology in the tables of BBNWZ78 and in the current catalog. In group theory, the number of elements of a finite group usually is called the ``order'' of the group. This notation has been used throughout in the book. Here, however, we will follow the GAP conventions and use the term ``size'' instead.

1.3 Crystal Families

  • NrCrystalFamilies( dim )

    returns the number of crystal families in case of dimension dim. It can be used to formulate loops over the crystal families.

    There are 4, 6, and 23 crystal families of dimension 2, 3, and 4, respectively.

    gap> n := NrCrystalFamilies( 4 );
    23
    

  • DisplayCrystalFamily( dim, family )

    displays for the specified crystal family essentially the same information as is provided for that family in Table 1 of BBNWZ78, namely

    • the family name,

    • the number of parameters,

    • the common rational decomposition pattern,

    • the common real decomposition pattern,

    • the number of crystal systems in the family, and

    • the number of Bravais flocks in the family.

    For details see BBNWZ78.

    gap> DisplayCrystalFamily( 4, 17 );
    #I Family XVII: cubic orthogonal; 2 free parameters;
    #I  Q-decomposition pattern 1+3; R-decomposition pattern 1+3;
    #I  2 crystal systems; 6 Bravais flocks
    gap> DisplayCrystalFamily( 4, 18 );
    #I Family XVIII: octagonal; 2 free parameters;
    #I  Q-irreducible; R-decomposition pattern 2+2;
    #I  1 crystal system; 1 Bravais flock
    gap> DisplayCrystalFamily( 4, 21 );
    #I Family XXI: di-isohexagonal orthogonal; 1 free parameter;
    #I  R-irreducible; 2 crystal systems; 2 Bravais flocks
    

    1.4 Crystal Systems

  • NrCrystalSystems( dim )

    returns the number of crystal systems in case of dimension dim. It can be used to formulate loops over the crystal systems.

    There are 4, 7, and 33 crystal systems of dimension 2, 3, and 4, respectively.

    gap> n := NrCrystalSystems( 2 );
    4
    

    The following two functions are functions of crystal systems.

    Each crystal system is characterized by a pair (dim, system) where dim is the associated dimension, and system is the number of the crystal system.

  • DisplayCrystalSystem( dim, system )

    displays for the specified crystal system essentially the same information as is provided for that system in Table 1 of BBNWZ78, namely

    • the number of Q-classes in the crystal system and
    • the identification number, i. e., the triple (dim, system, q-class) described below, of the Q-class that is the holohedry of the crystal system.

    For details see BBNWZ78.

    gap> for sys in [ 1 .. 4 ] do  DisplayCrystalSystem( 2, sys );  od;
    #I  Crystal system 1: 2 Q-classes; holohedry (2,1,2)
    #I  Crystal system 2: 2 Q-classes; holohedry (2,2,2)
    #I  Crystal system 3: 2 Q-classes; holohedry (2,3,2)
    #I  Crystal system 4: 4 Q-classes; holohedry (2,4,4)
    

    1.5 Q-Classes

  • NrQClassesCrystalSystem( dim, system )

    returns the number of Q-classes within the given crystal system. It can be used to formulate loops over the Q-classes.

    The following five functions are functions of Q-classes.

    In general, the parameters characterizing a Q-class will form a triple (dim, system, q-class) where dim is the associated dimension, system is the number of the associated crystal system, and q-class is the number of the Q-class within the crystal system. However, in case of dimensions 2 or 3, a Q-class may also be characterized by a pair (dim, IT-number) where IT-number is the number in the International Tables for Crystallography Hah95 of any space-group type lying in (a Z-class of) that Q-class, or just by the Hermann-Mauguin symbol of any space-group type lying in (a Z-class of) that Q-class.

    The Hermann-Mauguin symbols indexHermann-Mauguin symbol which we use in GAP are the short Hermann-Mauguin symbols defined in the 1983 edition of the International Tables Hah95, but any occurring indices are expressed by ordinary integers, and bars are replaced by minus signs. For example, the Hermann-Mauguin symbol P421m will be represented by the string "P-421m".

  • DisplayQClass( dim, system, q-class )
  • DisplayQClass( dim, IT-number )
  • DisplayQClass( Hermann-Mauguin-symbol )

    displays for the specified Q-class essentially the same information as is provided for that Q-class in Table 1 of BBNWZ78 (except for the defining relations given there), namely

    • the size of the groups in the Q-class,
    • the isomorphism type of the groups in the Q-class,
    • the Hurley pattern,
    • the rational constituents,
    • the number of Z-classes in the Q-class, and
    • the number of space-group types in the Q-class.
    For details see BBNWZ78.

    gap> DisplayQClass( "p2" );
    #I   Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2;
    #I    Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group
    gap> DisplayQClass( "R-3" );
    #I   Q-class (3,5,2): size 6; isomorphism type 6.1 = C6;
    #I    Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps
    gap> DisplayQClass( 3, 195 );
    #I   Q-class (3,7,1): size 12; isomorphism type 12.5 = A4;
    #I    C-irreducible; 3 Z-classes; 5 space grps
    gap> DisplayQClass( 4, 27, 4 );
    #I   Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2;
    #I    Q-irreducible; 1 Z-class; 1 space group
    gap> DisplayQClass( 4, 29, 1 );
    #I  *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3;
    #I    R-irreducible; 3 Z-classes; 5 space grps
    

    Note in the preceding examples that, as pointed out above, the term ``size'' denotes the order of a representative group of the specified Q-class and, of course, not the (infinite) class length.

  • FpGroupQClass( dim, system, q-class )
  • FpGroupQClass( dim, IT-number )
  • FpGroupQClass( Hermann-Mauguin-symbol )

    returns a finitely presented group F, say, which is isomorphic to the groups in the specified Q-class.

    The presentation of that group is the same as the corresponding presentation given in Table 1 of BBNWZ78 except for the fact that its generators are listed in reverse order. The reason for this change is that, whenever the group in question is solvable, the resulting generators form a pcgs (as defined in section Polycyclic Groups in the reference manual of GAP) if they are numbered ``from the top to the bottom'', and the presentation is a power-commutator presentation. The PcGroupQClass function described next will make use of this fact in order to construct a pc group isomorphic to F.

    Note that, for any Z-class in the specified Q-class, the matrix group returned by the MatGroupZClass function (see below) not only is isomorphic to F, but also its generators satisfy the defining relators of F.

    Besides of the usual components, F will have an attribute CrystCatRecord, which is a record with component parameters, which keeps a list of the parameters that specify the given Q-class.

    gap> F := FpGroupQClass( 4, 20, 3 );
    FpGroupQClass( 4, 20, 3 )
    gap> GeneratorsOfGroup( F );
    [ f1, f2 ]
    gap> RelatorsOfFpGroup( F );
    [ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ]
    gap> Size( F );
    12
    gap> CrystCatRecord( F ).parameters;
    [ 4, 20, 3 ]
    

  • PcGroupQClass( dim, system, q-class )
  • PcGroupQClass( dim, IT-number )
  • PcGroupQClass( Hermann-Mauguin-symbol )

    returns a pc group P, say, isomorphic to the groups in the specified Q-class, if these groups are solvable, or the value fail (together with an appropriate warning), otherwise.

    P is constructed by first establishing a finitely presented group (as it would be returned by the FpGroupQClass function described above) and then constructing from it an isomorphic pc group. If the underlying pcgs is not a prime orders pcgs (see section Polycyclic Groups), then it will be refined appropriately (and a warning will be displayed).

    Besides of the usual components, P will have an attribute CrystCatRecord, which is a record with component parameters, which saves a list of the parameters that specify the given Q-class.

    gap> P := PcGroupQClass( 4, 31, 3 );
    #I  Warning: a non-solvable group can't be represented as a pc group
    fail
    gap> P := PcGroupQClass( 4, 20, 3 );
    #I  Warning: the presentation has been extended to get a prime order pcgs
    PcGroupQClass( 4, 20, 3 )
    gap> GeneratorsOfGroup( P );
    [ f1, f2, f3 ]
    gap> Size( P );
    12
    gap> CrystCatRecord( P ).parameters;
    [ 4, 20, 3 ]
    

  • CharTableQClass( dim, system, q-class )
  • CharTableQClass( dim, IT-number )
  • CharTableQClass( Hermann-Mauguin-symbol )

    returns the character table T, say, of a representative group of (a Z-class of) the specified Q-class.

    Although the set of characters can be considered as an invariant of the specified Q-class, the resulting table will depend on the order in which GAP sorts the conjugacy classes of elements and the irreducible characters and hence, in general, will not coincide with the corresponding table presented in BBNWZ78.

    CharTableQClass proceeds as follows. If the groups in the given Q-class are solvable, then it first calls the PcGroupQClass and RefinedPcGroup functions to get a suitable isomorphic pc group, and then it calls the CharacterTable function to compute the character table of that pc group. In the case of the five Q-classes of dimension 4 whose groups are not solvable, it first calls the FpGroupQClass function to get an isomorphic finitely presented group, then it constructs a specially chosen faithful permutation representation of low degree for that group, and finally it determines the character table of the resulting permutation group again by calling the CharacterTable function.

    In general, the above strategy will be much more efficient than the alternative possibilities of calling the CharacterTable function for a finitely presented group provided by the FpGroupQClass function or for a matrix group provided by the MatGroupZClass function.

    gap> T := CharTableQClass( 4, 20, 3 );;
    gap> Display( T );
    CharTableQClass( 4, 20, 3 )
    
         2  2  2  1  1  2  2
         3  1  .  1  1  .  1
    
           1a 4a 6a 3a 4b 2a
        2P 1a 2a 3a 3a 2a 1a
        3P 1a 4b 2a 1a 4a 2a
        5P 1a 4a 6a 3a 4b 2a
    
    X.1     1  1  1  1  1  1
    X.2     1 -1  1  1 -1  1
    X.3     1  A -1  1 -A -1
    X.4     1 -A -1  1  A -1
    X.5     2  .  1 -1  . -2
    X.6     2  . -1 -1  .  2
    
    A = -E(4)
      = -Sqrt(-1) = -i
    

    1.6 Z-Classes

  • NrZClassesQClass( dim, system, q-class )
  • NrZClassesQClass( dim, IT-number )
  • NrZClassesQClass( Hermann-Mauguin-symbol )

    returns the number of Z-classes within the given Q-class. It can be used to formulate loops over the Z-classes.

    The following functions are functions of Z-classes.

    In general, the parameters characterizing a Z-class will form a quadruple (dim, system, q-class, z-class) where dim is the associated dimension, system is the number of the associated crystal system, q-class is the number of the associated Q-class within the crystal system, and z-class is the number of the Z-class within the Q-class. However, in case of dimensions 2 or 3, a Z-class may also be characterized by a pair (dim, IT-number) where IT-number is the number in the International Tables Hah95 of any space-group type lying in that Z-class, or just by the Hermann-Mauguin symbol of any space-group type lying in that Z-class.

  • DisplayZClass( dim, system, q-class, z-class )
  • DisplayZClass( dim, IT-number )
  • DisplayZClass( Hermann-Mauguin-symbol )

    displays for the specified Z-class essentially the same information as is provided for that Z-class in Table 1 of BBNWZ78 (except for the generating matrices of a class representative group given there), namely

    • for dimensions 2 and 3, the Hermann-Mauguin symbol of a representative space-group type which belongs to that Z-class,
    • the Bravais type,
    • some decomposability information,
    • the number of space-group types belonging to the Z-class,
    • the size of the associated cohomology group.
    For details see BBNWZ78.

    gap> DisplayZClass( 2, 3 );
    #I    Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible;
    #I     2 space groups; cohomology group size 2
    gap> DisplayZClass( "F-43m" );
    #I    Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible;
    #I     2 space groups; cohomology group size 2
    gap> DisplayZClass( 4, 2, 3, 2 );
    #I    Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable;
    #I     2 space groups; cohomology group size 4
    gap> DisplayZClass( 4, 21, 3, 1 );
    #I   *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible;
    #I     1 space group; cohomology group size 1
    

  • MatGroupZClass( dim, system, q-class, z-class )
  • MatGroupZClass( dim, IT-number )
  • MatGroupZClass( Hermann-Mauguin-symbol )

    returns a dim ×dim matrix group M, say, which is a representative of the specified Z-class. Its generators satisfy the defining relators of the finitely presented group which may be computed by calling the FpGroupQClass function (see above) for the Q-class which contains the given Z-class.

    The generators of M are the same matrices as those given in Table 1 of BBNWZ78. Note, however, that they will be listed in reverse order to keep them in parallel to the abstract generators provided by the FpGroupQClass function (see above).

    Besides of the usual components, M will have an attribute CrystCatRecord, which is a record with two components. The first component is parameters, which saves a list of the parameters that specify the given Z-class. The second component is conjugator, whose value is the identity element of M. Its purpose is to make the resulting record consistent with those returned by the NormalizerZClass or ZClassRepsDadeGroup functions described below.

    gap> M := MatGroupZClass( 4, 20, 3, 1 );
    MatGroupZClass( 4, 20, 3, 1 )
    gap> for g in GeneratorsOfGroup( M ) do
    >  Print( "\n" ); PrintArray( g ); od; Print( "\n" );
    
    [ [   0,   1,   0,   0 ],
      [  -1,   0,   0,   0 ],
      [   0,   0,  -1,  -1 ],
      [   0,   0,   0,   1 ] ]
    
    [ [  -1,   0,   0,   0 ],
      [   0,  -1,   0,   0 ],
      [   0,   0,  -1,  -1 ],
      [   0,   0,   1,   0 ] ]
    
    gap> Size( M );
    12
    gap> CrystCatRecord( M ).parameters;
    [ 4, 20, 3, 1 ]
    

  • NormalizerZClass( dim, system, q-class, z-class )
  • NormalizerZClass( dim, IT-number )
  • NormalizerZClass( Hermann-Mauguin-symbol )

    returns the normalizer N, say, in GL(dim,Z) of the representative dim ×dim matrix group which is constructed by the MatGroupZClass function (see above).

    If the size of N is finite, then N again lies in some Z-class. In this case, N will have an attribute CrystCatRecord, which is a record with two components, parameters and conjugator. These contain, respectively, the list of parameters of that Z-class, and a matrix gGL(dim,Z), such that N = g−1 R g, where R is the representative group of that Z-class.

    gap> N := NormalizerZClass( 4, 20, 3, 1 );
    NormalizerZClass( 4, 20, 3, 1 )
    gap> for g in GeneratorsOfGroup( N ) do
    >  Print( "\n" ); PrintArray( g ); od; Print( "\n" );
    
    [ [   1,   0,   0,   0 ],
      [   0,   1,   0,   0 ],
      [   0,   0,   1,   0 ],
      [   0,   0,  -1,  -1 ] ]
    
    [ [   1,   0,   0,   0 ],
      [   0,  -1,   0,   0 ],
      [   0,   0,  -1,  -1 ],
      [   0,   0,   1,   0 ] ]
    
    [ [   0,   1,   0,   0 ],
      [  -1,   0,   0,   0 ],
      [   0,   0,   1,   0 ],
      [   0,   0,   0,   1 ] ]
    
    [ [  -1,   0,   0,   0 ],
      [   0,  -1,   0,   0 ],
      [   0,   0,  -1,   0 ],
      [   0,   0,   0,  -1 ] ]
    
    gap> Size( N );
    96
    gap> CrystCatRecord( N ).parameters;
    [ 4, 20, 22, 1 ]
    gap> CrystCatRecord( N ).conjugator = One( N );
    true
    gap> L := NormalizerZClass( 3, 42 );
    NormalizerZClass( 3, 3, 2, 4 )
    gap> Size( L );
    16
    gap> CrystCatRecord( L ).parameters;
    [ 3, 4, 7, 2 ]
    gap> CrystCatRecord( L ).conjugator;
    [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ]
    gap> M := NormalizerZClass( "C2/m" );
    <matrix group of size infinity with 5 generators>
    gap> Size( M );
    infinity
    gap> HasCrystCatRecord( M );
    false
    

    1.7 Dade groups

    Some of the Z-classes of dimension d, say, are ``maximal'' in the sense that the groups in these classes are maximal finite subgroups of GL(d,Z). Generalizing a term which is being used for dimension 4, we call the representatives of these maximal Z-classes the Dade groups of dimension d.

  • NrDadeGroups( dim )

    returns the number of Dade groups of dimension dim. It can be used to formulate loops over the Dade groups.

    There are 2, 4, and 9 Dade groups of dimension 2, 3, and 4, respectively.

    gap> NrDadeGroups( 4 );
    9
    

  • DadeGroup( dim, n )

    returns the nth Dade group of dimension dim.

    gap> D := DadeGroup( 4, 7 );
    MatGroupZClass( 4, 31, 7, 2 )
    

  • DadeGroupNumbersZClass( dim, system, q-class, z-class )
  • DadeGroupNumbersZClass( dim, IT-number )
  • DadeGroupNumbersZClass( Hermann-Mauguin-symbol )

    returns the set of all those integers ni for which the nith Dade group of dimension dim contains a subgroup which, in GL(dim,Z), is conjugate to the representative group of the given Z-class.

    gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 );
    [ 1, 5, 8 ]
    gap> for d in dadeNums do
    >     D := DadeGroup( 4, d );
    >     Print( D, " of size ", Size( D ), "\n" );
    > od;
    MatGroupZClass( 4, 20, 22, 1 ) of size 96
    MatGroupZClass( 4, 30, 13, 1 ) of size 288
    MatGroupZClass( 4, 32, 21, 1 ) of size 384
    

  • ZClassRepsDadeGroup( dim, system, q-class, z-class, n )
  • ZClassRepsDadeGroup( dim, IT-number, n )
  • ZClassRepsDadeGroup( Hermann-Mauguin-symbol, n )

    determines in the nth Dade group of dimension dim all those conjugacy classes whose groups are, in GL(dim,Z), conjugate to the Z-class representative group R, say, of the given Z-class. It returns a list of representative groups of these conjugacy classes.

    Let M be any group in the resulting list. M then has an attribute CrystCatRecord, which is a record with two components. The component parameters is the list of parameters of the Z-class of R, and conjugator is a suitable matrix g from GL(dim,Z), respectively, such that M equals g−1 R g.

    gap> DadeGroupNumbersZClass( 2, 2, 1, 2 );
    [ 1, 2 ]
    gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 );
    [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ]
    gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 );
    [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], 
      MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ]
    gap> R := last[2];;
    gap> CrystCatRecord( R ).parameters;
    [ 2, 2, 1, 2 ]
    gap> CrystCatRecord( R ).conjugator;
    [ [ 1, 0 ], [ -1, 1 ] ]
    

    1.8 Space groups and space group types

  • NrSpaceGroupTypesZClass( dim, system, q-class, z-class )
  • NrSpaceGroupTypesZClass( dim, IT-number )
  • NrSpaceGroupTypesZClass( Hermann-Mauguin-symbol )

    returns the number of space-group types within the given Z-class. It can be used to formulate loops over the space-group types.

    gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 );
    13
    

    The following functions are functions of space-group types.

    In general, the parameters characterizing a space-group type will form a quintuple (dim, system, q-class, z-class, sg-type) where dim is the associated dimension, system is the number of the associated crystal system, q-class is the number of the associated Q-class within the crystal system, z-class is the number of the Z-class within the Q-class, and sg-type is the space-group type within the Z-class. However, in case of dimensions 2 or 3, you may instead specify a Z-class by a pair (dim, IT-number) or by its Hermann-Mauguin symbol (as described above). Then the function will handle the first space-group type within that Z-class, i.e., sg-type = 1, that is, the corresponding symmorphic space group (split extension).

  • DisplaySpaceGroupType( dim, system, q-class, z-class, sg-type )
  • DisplaySpaceGroupType( dim, IT-number )
  • DisplaySpaceGroupType( Hermann-Mauguin-symbol )

    displays for the specified space-group type some of the information which is provided for that space-group type in Table 1 of BBNWZ78, namely

    • the orbit size associated with that space-group type and,
    • for dimensions 2 and 3, the IT-number and the Hermann-Mauguin symbol.
    For details see BBNWZ78.

    gap> DisplaySpaceGroupType( 2, 17 );
    #I     Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1
    gap> DisplaySpaceGroupType( "Pm-3" );
    #I     Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1
    gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 );
    #I    *Space-group type (4,32,10,2,4); orbit size 18
    gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 );
    #I    *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65;
    #I      orbit size 2; fp-free
    

  • DisplaySpaceGroupGenerators( dim, system, q-class, z-class, sg-type)
  • DisplaySpaceGroupGenerators( dim, IT-number )
  • DisplaySpaceGroupGenerators( Hermann-Mauguin-symbol )

    displays the non-translation generators of a representative space group of the specified space-group type without actually constructing that matrix group. The generators are given in the representation acting from the left on column vectors.

    In more details: Let n = dim be the given dimension, and let M1, …, Mr be the generators of the representative n ×n matrix group of the given Z-class (this is the group which you will get if you call the MatGroupZClass function (see above) for that Z-class). Then, for the given space-group type, the SpaceGroupOnLeftBBNWZ function described below will construct as representative of that space-group type an (n+1) ×(n+1) matrix group which is generated by the n translations which are induced by the (standard) basis vectors of the n-dimensional Euclidian space, and r additional matrices S1, …, Sr of the form Si = [
    Mi
    ti
    0
    1
    ], where the n ×n submatrices Mi are as defined above, and the ti are n-columns with rational entries. The DisplaySpaceGroupGenerators function saves time by not constructing the group, but just displaying the r matrices S1,…, Sr.

    gap> DisplaySpaceGroupGenerators( "P61" );
    #I  Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
    
    [ [   -1,    0,    0,    0 ],
      [    0,   -1,    0,    0 ],
      [    0,    0,    1,  1/2 ],
      [    0,    0,    0,    1 ] ]
    
    [ [    0,   -1,    0,    0 ],
      [    1,   -1,    0,    0 ],
      [    0,    0,    1,  1/3 ],
      [    0,    0,    0,    1 ] ]
    
    

  • SpaceGroupOnLeftBBNWZ( dim, system, q-class, z-class, sg-type )
  • SpaceGroupOnLeftBBNWZ( dim, IT-number )
  • SpaceGroupOnLeftBBNWZ( Hermann-Mauguin-symbol )

    returns a representative, S, of the space group type specified by the arguments. S is returned in the form of an AffineCrystGroupOnLeft, which acts from the left on column vectors (see also the description of the DisplaySpaceGroupGenerators function above). The package Cryst provides methods for the computation with space groups.

    gap> S := SpaceGroupOnLeftBBNWZ( "P61" );
    SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
    gap> for s in GeneratorsOfGroup( S ) do
    >  Print( "\n" ); PrintArray( s ); od; Print( "\n" );
    
    [ [   -1,    0,    0,    0 ],
      [    0,   -1,    0,    0 ],
      [    0,    0,    1,  1/2 ],
      [    0,    0,    0,    1 ] ]
    
    [ [    0,   -1,    0,    0 ],
      [    1,   -1,    0,    0 ],
      [    0,    0,    1,  1/3 ],
      [    0,    0,    0,    1 ] ]
    
    [ [  1,  0,  0,  1 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  0,  0,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  1 ],
      [  0,  0,  1,  0 ],
      [  0,  0,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  1 ],
      [  0,  0,  0,  1 ] ]
    
    gap> CrystCatRecord( S ).parameters;
    [ 3, 6, 1, 1, 4 ]
    

    The resulting group has an attribute CrystCatRecord, whose component parameters specifies the given space-group type.

  • SpaceGroupOnRightBBNWZ( dim, system, q-class, z-class, sg-type )
  • SpaceGroupOnRightBBNWZ( dim, IT-number )
  • SpaceGroupOnRightBBNWZ( Hermann-Mauguin-symbol )
  • SpaceGroupOnRightBBNWZ( S )

    returns a representative, T, of the space group type specified by the arguments. T is returned in the form of an AffineCrystGroupOnRight, which acts from the right on row vectors. The generators of T are the transposed generators (in the same order) of the corresponding SpaceGroupOnLeftBBNWZ, S, specified by the same arguments. The space group S is also accepted as argument. The package Cryst provides methods for the computation with space groups.

    gap> T := SpaceGroupOnRightBBNWZ( S );
    SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )
    gap> for m in GeneratorsOfGroup( T ) do
    >  Print( "\n" ); PrintArray( m ); od; Print( "\n" );
    
    [ [   -1,    0,    0,    0 ],
      [    0,   -1,    0,    0 ],
      [    0,    0,    1,    0 ],
      [    0,    0,  1/2,    1 ] ]
    
    [ [    0,    1,    0,    0 ],
      [   -1,   -1,    0,    0 ],
      [    0,    0,    1,    0 ],
      [    0,    0,  1/3,    1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  1,  0,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  0,  1,  0,  1 ] ]
    
    [ [  1,  0,  0,  0 ],
      [  0,  1,  0,  0 ],
      [  0,  0,  1,  0 ],
      [  0,  0,  1,  1 ] ]
    
    

  • SpaceGroupBBNWZ( dim, system, q-class, z-class, sg-type )
  • SpaceGroupBBNWZ( dim, IT-number )
  • SpaceGroupBBNWZ( Hermann-Mauguin-symbol )

    calls either SpaceGroupOnLeftBBNWZ or SpaceGroupOnRightBBNWZ with the same arguments, depending on the value of the variable CrystGroupDefaultAction.

  • FpGroupSpaceGroupBBNWZ( S )

    returns a finitely presented group G, say, which is isomorphic to S, where S is expected to be a space group from the BBNWZ catalog (acting from the left or from the right). It is chosen such that there is an isomorphism from G to S which maps each generator of G onto the corresponding generator of S. This means, in particular, that the matrix generators of S satisfy the relators of G. If the factor group of S by its translation normal subgroup is solvable, then the presentation returned is a polycyclic power commutator presentation.

    gap> G := FpGroupSpaceGroupBBNWZ( S );    
    FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
    gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od;
    g1^2*g5^-1
    g2^3*g5^-1
    g2^-1*g1^-1*g2*g1
    g3^-1*g1^-1*g3*g1*g3^2
    g3^-1*g2^-1*g3*g2*g4*g3^2
    g4^-1*g1^-1*g4*g1*g4^2
    g4^-1*g2^-1*g4*g2*g4*g3^-1
    g4^-1*g3^-1*g4*g3
    g5^-1*g1^-1*g5*g1
    g5^-1*g2^-1*g5*g2
    g5^-1*g3^-1*g5*g3
    g5^-1*g4^-1*g5*g4
    gap> # Verify that the matrix generators of S satisfy the relators of G.
    gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) =
    >  MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) );
    true
    

    [Up] [Index]

    crystcat manual
    Juli 2022
    crystcat/htm/chapters.htm0000644001325400021140000000102514270745041015173 0ustar gaehlerusercrystcat : a GAP 4 package - Chapters

    crystcat : a GAP 4 package - Chapters

    1. The Crystallographic Groups Catalog

    crystcat manual
    Juli 2022
    crystcat/htm/biblio.htm0000644001325400021140000000176014270745041014630 0ustar gaehlerusercrystcat : a GAP 4 package - References

    crystcat : a GAP 4 package - References

    [BBNWZ78]
    H. Brown, R. Bülow, J. Neubüser, H. Wondratschek, and H. Zassenhaus.
    Crystallographic Groups of Four-Dimensional Space.
    John Wiley, New York, 1978.
    [Hah95]
    T. Hahn, editor.
    International Tables for Crystallography, Volume A, Space-group Symmetry, 4th Edition.
    Kluwer, Dordrecht, 1995.
    [NPW81]
    J. Neubüser, W. Plesken, and H. Wondratschek.
    An emendatory discursion on defining crystal systems.
    Match, 10:77--96, 1981.

    [Up]

    crystcat manual
    Juli 2022
    crystcat/lib/0000755001325400021140000000000014270745041012630 5ustar gaehlerusercrystcat/lib/normalizer.gi0000644001325400021140000000157013473201665015341 0ustar gaehleruser############################################################################# ## #W crystcat.grp GAP library Franz G"ahler ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## InstallMethod( NormalizerInGLnZ, "for PointGroups of space groups from the cryst. groups catalogue", true, [ IsPointGroup and IsCyclotomicMatrixGroup ], 0, function( P ) local S, p, N, s, gen; S := AffineCrystGroupOfPointGroup( P ); if not HasCrystCatRecord( S ) then TryNextMethod(); fi; p := CrystCatRecord( S ).parameters; N := NormalizerZClass( p[1], p[2], p[3], p[4] ); s := Size( N ); if IsAffineCrystGroupOnRight( S ) then gen := List( GeneratorsOfGroup( N ), TransposedMat ); N := GroupByGenerators( gen, One( N ) ); SetSize( N, s ); fi; return N; end ); crystcat/lib/crystcat.gd0000644001325400021140000005255013232361444015005 0ustar gaehleruser############################################################################# ## #W crystcat.gd GAP library Volkmar Felsch ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains the declarations for fthe crystallographic groups ## library. ## ############################################################################# ## ## Some global variables. ## ############################################################################# ## #A CrystCatRecord( ) ## DeclareAttribute( "CrystCatRecord", IsGroup, "mutable" ); ############################################################################# ## #F CR_CharTableQClass( ) ## ## 'CR_CharTableQClass' returns the character table of a representative ## group of the specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'CharTableQClass'. ## DeclareGlobalFunction("CR_CharTableQClass"); ############################################################################# ## #F CR_DisplayQClass( ) ## ## 'CR_DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayQClass'. ## DeclareGlobalFunction("CR_DisplayQClass"); ############################################################################# ## #F CR_DisplaySpaceGroupGenerators( ) ## ## 'CR_DisplaySpaceGroupGenerators' displays the non-translation generators ## of the space group specified by the given parameters. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupGenerators'. ## DeclareGlobalFunction("CR_DisplaySpaceGroupGenerators"); ############################################################################# ## #F CR_DisplaySpaceGroupType( ) ## ## 'CR_DisplaySpaceGroupType' displays for the specified space-group type ## the following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupType'. ## DeclareGlobalFunction("CR_DisplaySpaceGroupType"); ############################################################################# ## #F CR_DisplayZClass( ) ## ## 'CR_DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayZClass'. ## DeclareGlobalFunction("CR_DisplayZClass"); ############################################################################# ## #F CR_FpGroupQClass( ) ## ## 'CR_FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'FpGroupQClass'. ## DeclareGlobalFunction("CR_FpGroupQClass"); ############################################################################# ## #F CR_GeneratorsSpaceGroup( ) ## ## 'CR_GeneratorsSpaceGroup' returns the non-translation generators of the ## space group specified by the given parameters. ## DeclareGlobalFunction("CR_GeneratorsSpaceGroup"); ############################################################################# ## #F CR_GeneratorsZClass( , ) ## ## 'CR_GeneratorsZClass' returns a set of matrix generators for a ## representative of the specified Z-class. These generators are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## DeclareGlobalFunction("CR_GeneratorsZClass"); ############################################################################# ## #F CR_InitializeRelators( ) ## ## 'CR_InitializeRelators' initializes the relator words list of the ## crystallographic goups catalogue. ## DeclareGlobalFunction("CR_InitializeRelators"); ############################################################################# ## #F CR_MatGroupZClass( ) ## ## 'CR_MatGroupZClass' returns a representative group of the specified ## Z-class. The generators of the resulting matrix group are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'MatGroupZClass'. ## DeclareGlobalFunction("CR_MatGroupZClass"); ############################################################################# ## #F CR_Name( , , ) ## ## 'CR_Name' returns the "name" of the specified object which may be a ## Z-class representative, a Q-class representative or its character table, ## or a space group. The resulting name is a string which consists of the ## given string followed by the relevant parameters which are separated by ## commas and enclosed in parentheses. ## DeclareGlobalFunction("CR_Name"); ############################################################################# ## #F CR_NormalizerZClass( ) ## ## 'CR_NormalizerZClass' returns the normalizer in GL(dim,Z) of the ## specified Z-class representative matrix group. If the order of the ## normalizer is finite, then the group record components "crZClass" and ## "crConjugator" will be set properly. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'NormalizerZClass'. ## DeclareGlobalFunction("CR_NormalizerZClass"); ############################################################################# ## #F CR_Parameters( [ , , , , ], nparms) #F CR_Parameters( [ , , , ], nparms ) #F CR_Parameters( [ , , ], nparms ) #F CR_Parameters( [ , ], nparms ) #F CR_Parameters( [ ], nparms ) ## ## Valid argument lists are ## ## [ dim, sys, qcl, zcl, sgt ], 5 ## [ dim, sys, qcl, zcl ], 4 ## [ dim, sys, qcl ], 3 ## [ 3, it ], n ## [ 2, it ], n ## [ symbol ], n ## ## where ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## it = corresponding number in the International Tables (only for ## dimensions 2 and 3), ## n = 3 or 4 or 5, ## symbol = Hermann-Mauguin symbol (only for dimensions 2 or 3). ## ## 'CR_Parameters' checks the given arguments to be consistent and in range, ## and returns them in form of an "internal CR parameter list" ## ## [ dim, sys, qcl, zcl, sgt ] ## ## which contains the "local parameters" of the respective object. The ## following "global parameters" of the same object are used as local ## variables. ## ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## DeclareGlobalFunction("CR_Parameters"); ############################################################################# ## #F CR_PcGroupQClass(,) ## ## 'CR_PcGroupQClass' returns a pc group isomorphic to the groups in the ## specified Q-class. If = true, then a warning will be displayed ## in case that the given presentation is not a prime order pcgs. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'PcGroupQClass'. ## DeclareGlobalFunction("CR_PcGroupQClass"); ############################################################################# ## #F CR_SpaceGroup( ) ## ## 'CR_SpaceGroup' returns a representative matrix group (of dimension ## dim+1) of the specified space-group type. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'SpaceGroup'. ## ## In particular, the function expects that, whenever the order of the point ## group is not a multiple of 60, the given point group presentation is a ## polycyclic power commutator presentation containing a list of n power ## relators and n*(n-1)/2 commutator relators in some prescribed order, ## where n is the number of its generators. ## DeclareGlobalFunction("CR_SpaceGroup"); ############################################################################# ## #F CR_ZClassRepsDadeGroup( , ) ## ## 'CR_ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'ZClassRepsDadeGroup'. ## DeclareGlobalFunction("CR_ZClassRepsDadeGroup"); ############################################################################# ## #F CharTableQClass( , , ) #F CharTableQClass( , ) #F CharTableQClass( ) ## ## 'CharTableQClass' returns the character table of a representative group ## of the specified Q-class. ## DeclareGlobalFunction("CharTableQClass"); ############################################################################# ## #F DadeGroup( , ) ## ## 'DadeGroup' returns the n-th Dade group of dimension dim. ## DeclareGlobalFunction("DadeGroup"); ############################################################################# ## #F DadeGroupNumbersZClass( , , , ) #F DadeGroupNumbersZClass( , ) #F DadeGroupNumbersZClass( ) ## ## 'DadeGroupNumbersZClass' returns a list of the numbers of those Dade ## groups which contain groups from the given Z-class. ## DeclareGlobalFunction("DadeGroupNumbersZClass"); ############################################################################# ## #F DisplayCrystalFamily( , ) ## ## 'DisplayCrystalFamily' displays for the specified crystal family the ## following information: ## - the family name, ## - the number of parameters, ## - the common rational decomposition pattern, ## - the common real decomposition pattern, ## - the number of crystal systems in the family, and ## - the number of Bravais flocks in the family. ## DeclareGlobalFunction("DisplayCrystalFamily"); ############################################################################# ## #F DisplayCrystalSystem( , ) ## ## 'DisplayCrystalSystem' displays for the specified crystal system the ## following information: ## - the number of Q-classes in the crystal system, and ## - the triple (dim, sys, qcl) of parameters of the Q-class which is the ## holohedry of the crystal system. ## DeclareGlobalFunction("DisplayCrystalSystem"); ############################################################################# ## #F DisplayQClass( , , ) #F DisplayQClass( , ) #F DisplayQClass( ) ## ## 'DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## DeclareGlobalFunction("DisplayQClass"); ############################################################################# ## #F DisplaySpaceGroupGenerators( , ,,, ) #F DisplaySpaceGroupGenerators( , ) #F DisplaySpaceGroupGenerators( ) ## ## 'DisplaySpaceGroupGenerators' displays the non-translation generators of ## the space group specified by the given parameters. ## DeclareGlobalFunction("DisplaySpaceGroupGenerators"); ############################################################################# ## #F DisplaySpaceGroupType( , , , , ) #F DisplaySpaceGroupType( , ) #F DisplaySpaceGroupType( ) ## ## 'DisplaySpaceGroupType' displays for the specified space-group type the ## following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## DeclareGlobalFunction("DisplaySpaceGroupType"); ############################################################################# ## #F DisplayZClass( , , , ) #F DisplayZClass( , ) #F DisplayZClass( ) ## ## 'DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## DeclareGlobalFunction("DisplayZClass"); ############################################################################# ## #F FpGroupQClass( , , ) #F FpGroupQClass( , ) #F FpGroupQClass( ) ## ## 'FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## DeclareGlobalFunction("FpGroupQClass"); ############################################################################# ## #F MatGroupZClass( , , , ) #F MatGroupZClass( , ) #F MatGroupZClass( ) ## ## 'MatGroupZClass' returns a representative group of the specified Z-class. ## The generators of the resulting matrix group are chosen such that they ## satisfy the defining relators which are returned by the ## 'FpGroupQClass' function for the representative of the corresponding ## Q-class. ## DeclareGlobalFunction("MatGroupZClass"); ############################################################################# ## #F NormalizerZClass( , , , ) #F NormalizerZClass( , ) #F NormalizerZClass( ) ## ## 'NormalizerZClass' returns the normalizer in GL(dim,Z) of the specified ## Z-class representative matrix group. If the order of the normalizer is ## finite, then the group record components "crZClass" and "crConjugator" ## will be set properly. ## DeclareGlobalFunction("NormalizerZClass"); ############################################################################# ## #F NrCrystalFamilies( ) ## ## 'NrCrystalFamilies' returns the number of crystal families of the given ## dimension. ## DeclareGlobalFunction("NrCrystalFamilies"); ############################################################################# ## #F NrCrystalSystems( ) ## ## 'NrCrystalSystems' returns the number of crystal systems of the given ## dimension. ## DeclareGlobalFunction("NrCrystalSystems"); ############################################################################# ## #F NrDadeGroups( ) ## ## 'NrDadeGroups' returns the number of Dade groups of the given dimension. ## DeclareGlobalFunction("NrDadeGroups"); ############################################################################# ## #F NrQClassesCrystalSystem( , ) ## ## 'NrQClassesCrystalSystem' returns the number of Q-classes in the given ## crystal system. ## DeclareGlobalFunction("NrQClassesCrystalSystem"); ############################################################################# ## #F NrSpaceGroupTypesZClass( , , , ) #F NrSpaceGroupTypesZClass( , ) #F NrSpaceGroupTypesZClass( ) ## ## 'NrSpaceGroupTypesZClass' returns the number of space-group types in the ## given Z-class. ## DeclareGlobalFunction("NrSpaceGroupTypesZClass"); ############################################################################# ## #F NrZClassesQClass( , , ) #F NrZClassesQClass( , ) #F NrZClassesQClass( ) ## ## 'NrZClassesQClass' returns the number of Z-classes in the given Q-class. ## DeclareGlobalFunction("NrZClassesQClass"); ############################################################################# ## #F PcGroupQClass( , , ) #F PcGroupQClass( , ) #F PcGroupQClass( ) ## ## 'PcGroupQClass' returns an ag group isomorphic to the groups in the ## specified Q-class. ## DeclareGlobalFunction("PcGroupQClass"); ############################################################################# ## #F SpaceGroupOnLeftBBNWZ( , , , , ) #F SpaceGroupOnLeftBBNWZ( , ) #F SpaceGroupOnLeftBBNWZ( ) ## ## 'SpaceGroupOnLeftBBNWZ' returns a representative matrix group ## (of dimension dim+1) of the specified space-group type. ## DeclareGlobalFunction("SpaceGroupOnLeftBBNWZ"); ############################################################################# ## #F SpaceGroupOnRightBBNWZ( , , , , ) #F SpaceGroupOnRightBBNWZ( , ) #F SpaceGroupOnRightBBNWZ( ) #F SpaceGroupOnRightBBNWZ( S ) ## ## 'SpaceGroupOnRightBBNWZ' returns the transposed matrix group of ## the given or specified space group. ## ## The reason is the following. Each space group is presented in the form of ## a group of augmented matrices (of dimension dim+1) of the following form: ## ## [ M | t ] ## [-----+---] Here, M is the `linear part' and ## [ 0 | 1 ] t is the `translational part'. ## ## Therefore, the natural action of a space group in this form is from the ## left. This collides with the convention in GAP to have all actions from ## the right. This function does the necessary conversions. In fact, it does ## not only transpose the matrices, but it also adapts the relators given in ## CrystCatRecord(S).fpGroup to the new generators. ## DeclareGlobalFunction("SpaceGroupOnRightBBNWZ"); ############################################################################# ## #F SpaceGroupBBNWZ( , , , , ) . #F SpaceGroupBBNWZ( , ) . . . . . . . . . . . . . . #F SpaceGroupBBNWZ( ) . . . . . . . . . . . ## ## Calls either `SpaceGroupOnRightBBNWZ' or `SpaceGroupOnLeftBBNWZ' ## depending on the value of `CrystGroupDefaultAction' ## DeclareGlobalFunction( "SpaceGroupBBNWZ" ); ############################################################################# ## #F ZClassRepsDadeGroup( , , , , ) #F ZClassRepsDadeGroup( , , ) #F ZClassRepsDadeGroup( , ) ## ## 'ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## DeclareGlobalFunction("ZClassRepsDadeGroup"); ############################################################################# ## #F FpGroupSpaceGroupBBNWZ( ) . . FpGroup isomorphic to BBNWZ space group ## DeclareGlobalFunction( "FpGroupSpaceGroupBBNWZ" ); ############################################################################# ## #E cryst.gd . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here crystcat/lib/crystcat.gi0000644001325400021140000021127613236341124015011 0ustar gaehleruser############################################################################# ## #A crystcat.gi GAP group library Volkmar Felsch ## #Y Copyright (C) 1994, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains functions that allow to access most of the data which ## are listed in the tables of the book "Crystallographic groups of four- ## dimensional space" by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans ## Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978). ## ## ## For each of the dimensions 2, 3, and 4, the tables of the book are ## arranged in the following hierarchical format: ## dimension, ## crystal family, ## crystal system, ## Q-class (geometric crystal class), ## Z-class (arithmetic crystal class), ## space-group type. ## ## The following conventions for local variables are used throughout in all ## functions of this library. ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## ## For most of the functions in this library there are two versions given, ## a public version and an internal version which are distinguished by the ## prefix "CR_" in the name of the internal version and by different ## parameter lists. The reason for that distinction is that in the public ## functions the arguments are checked for being in range whereas no ## argument checking is done in the internal functions. ## ############################################################################# ## #M CR_CharTableQClass( ) . . . char table of Q-class rep ## ## 'CR_CharTableQClass' returns the character table of a representative ## group of the specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'CharTableQClass'. ## InstallGlobalFunction( CR_CharTableQClass, function ( param ) local CR, dim, F, fgens, G, name, param1, qcl, sub, sys, table; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; if dim = 4 and sys = 31 and 3 <= qcl and qcl <= 7 then # The given group is not solvable. Compute its table from a # permutation group isomorphic to the f.p. group. F := CR_FpGroupQClass( param ); fgens := GeneratorsOfGroup( F ); if qcl = 3 then # group 60.13 ($A_5$) sub := Subgroup( F, fgens{ [ 2 .. 4 ] } ); elif qcl = 4 or qcl = 5 then # group 120.1 ($S_5$) sub := Subgroup( F, fgens{ [ 2, 3 ] } ); elif qcl = 6 then # group 120.2 ($2 \times A_5$) sub := Subgroup( F, fgens{ [ 2 .. 4 ] } ); elif qcl = 7 then # group 240.1 ($2 \times S_5$) sub := Subgroup( F, [ fgens[3], fgens[2]^2 ] ); fi; param1 := [ dim, sys, qcl, 1 ]; G := CR_MatGroupZClass( param1 ); SetName( G, CR_Name( "MatGroupZClass", param1, 4 ) ); else # The given group is solvable. Construct an isomorphic ag group # with a prime order pcgs and compute the table of that group. G := CR_PcGroupQClass( param, false ); SetName( G, CR_Name( "FpGroupQClass", param, 3 ) ); fi; table := CharacterTable( G ); name := CR_Name( "CharTableQClass", param, 3 ); SetName( table, name ); SetIdentifier( table, name ); return table; end ); ############################################################################# ## #M CR_DisplayQClass( ) . . . display Q-class invariants ## ## 'CR_DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayQClass'. ## InstallGlobalFunction( CR_DisplayQClass, function ( param ) local CR, dim, isotext, ord, pt1, pt2, pt3, q, qcl, snum, sys, text, type, zfirst, zlast, znum; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; ord := CR.orderQClass[q]; type := QuoInt( CR.codedIsomorphismTypeQClass[q], 100 ); isotext := RemInt( CR.codedIsomorphismTypeQClass[q], 100 ); zfirst := CR.nullZClass[q] + 1; zlast := CR.nullZClass[q+1]; znum := zlast - zfirst + 1; snum := CR.nullSpaceGroup[zlast+1] - CR.nullSpaceGroup[zfirst]; pt1 := CR.codedDecompositionQClass[q]; if pt1 > 4 then pt2 := QuoInt( pt1, 10 ); pt3 := RemInt( pt1, 10 ); pt1 := 1; fi; text := CR_TextStrings.QClass; # Print the Q-class type. if IsBound( CR.splittingQClass ) and CR.splittingQClass[q] then Print( text[8] ); else Print( text[7] ); fi; # Print "H" if the Q-class is a holohedry. if CR.hQClass[q] then Print( text[18] ); fi; # Print the Q-class parameters. Print( text[16], dim, text[15] ); Print( sys, text[15], qcl, text[9] ); # Print the order of the Q-class representative. Print( ord ); # Print the isomorphism type of the Q-class representative. Print( text[10], ord, text[17], type ); if isotext <> 0 then Print( text[20], CR_TextStrings.isomorphismType[isotext] ); fi; # Print the Q-constituents. Print( text[21], text[pt1] ); if pt1 = 1 then Print( CR_TextStrings.QConstituents[pt2], text[pt3] ); fi; # Print the number of Z-classes in the given Q-class. pt1 := 11; if znum > 1 then pt1 := 12; fi; Print( znum, text[pt1] ); # Print the number of space groups in the given Q-class. pt1 := 13; if snum > 1 then pt1 := 14; fi; Print( text[19], snum, text[pt1] ); Print( "\n" ); end ); ############################################################################# ## #M CR_DisplaySpaceGroupGenerators( ) . . . display space #M . . . . . . . . . . . . . . . . . . . . . . . . . . . . group generators ## ## 'CR_DisplaySpaceGroupGenerators' displays the non-translation generators ## of the space group specified by the given parameters. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupGenerators'. ## InstallGlobalFunction( CR_DisplaySpaceGroupGenerators, function ( param ) local CR, dim, G, gen, gens, text; # Get some arguments. dim := param[1]; CR := CrystGroupsCatalogue[dim]; text := CR_TextStrings.spaceGroup; # Get the non-translation generators. gens := CR_GeneratorsSpaceGroup( param ); # Print a heading. Print( text[13], CR_Name( "SpaceGroupOnLeftBBNWZ", param, 5 ), text[14] ); # Print the non-translation generators. for gen in gens do PrintArray( gen ); Print( "\n" ); od; end ); ############################################################################# ## #M CR_DisplaySpaceGroupType( ) . . . . . . . . . display #M . . . . . . . . . . . . . . . . . . . . . . . . . space group invariants ## ## 'CR_DisplaySpaceGroupType' displays for the specified space-group type ## the following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplaySpaceGroupType'. ## InstallGlobalFunction( CR_DisplaySpaceGroupType, function ( param ) local CR, dim, it1, it2, obt, q, qcl, sgt, sys, t, text, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; sgt := param[5]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; t := CR.nullSpaceGroup[z] + sgt; text := CR_TextStrings.spaceGroup; # Print the space-group type. if dim > 2 and CR.splittingSpaceGroupType[t] then Print( text[2] ); else Print( text[1] ); fi; # Print the space group parameters. Print( text[6], dim, text[7] ); Print( sys, text[7], qcl, text[7], zcl, text[7], sgt, text [12] ); # Print the associated number in the International Tables. if dim <= 3 then it1 := t; it2 := 0; if dim = 3 then it1 := CR.internatTableSpaceGroupType[t]; if it1 > 230 then it2 := QuoInt( it1, 1000 ); it1 := RemInt( it1, 1000 ); fi; fi; Print( text[3], it1, text[8], CR.HermannMauguinSymbol[it1] ); if it2 = 0 then Print( text[10] ); else Print( text[9], it2, text[8], CR.HermannMauguinSymbol[it2] ); Print( text[11] ); fi; else Print( text[10] ); fi; # Print the orbit size. obt := 1; if sgt > 1 then obt := CR.orbitLengthSpaceGroup[t-z]; fi; Print( text[5], obt ); # Print a note, if the space group is fixed-point-free. if CR.fixedPointFreeSpaceGroup[t] then Print( text[4] ); fi; Print( "\n" ); end ); ############################################################################# ## #M CR_DisplayZClass( ) . . . display Z-class invariants ## ## 'CR_DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'DisplayZClass'. ## InstallGlobalFunction( CR_DisplayZClass, function ( param ) local code, cohom, CR, decomp, dim, fam, q, qcl, sgt, snum, sys, t, text, type, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; sgt := param[5]; fam := CR.familyCrystalSystem[sys]; code := CR.codedPropertiesZClass[z]; decomp := RemInt( code, 10 ); code := QuoInt( code, 10 ); type := RemInt( code, 10 ); cohom := QuoInt( code, 10 ); snum := CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z]; text := CR_TextStrings.ZClass; # Print the Z-class type. if IsBound( CR.splittingZClass ) and CR.splittingZClass[z] then Print( text[6] ); else Print( text[5] ); fi; # Print "B" if the Z-class is a Bravais Z-class. if CR.bZClass[z] then Print( text[15] ); fi; # Print the Z-class parameters. Print( text[14], dim, text[13] ); Print( sys, text[13], qcl, text[13], zcl, text[12] ); # Print the Hermann-Mauguin symbol. if dim <= 3 then if sgt = 0 then sgt := 1; fi; t := CR.nullSpaceGroup[z] + sgt; if dim = 3 then t := CR.internatTableSpaceGroupType[t]; fi; if t > 230 then t := QuoInt( t, 1000 ); fi; Print( text[11], CR.HermannMauguinSymbol[t], text[12] ); fi; # Print family number and Bravais type. Print( text[7], CR_TextStrings.roman[fam], text[16], CR_TextStrings.roman[type] ); Print( text[decomp] ); # Print the number of space groups in the given Z-class. if snum = 1 then Print( text[17], snum, text[8] ); else Print( text[17], snum, text[9] ); fi; # Print the order of the cohomology group. Print( text[10], cohom, "\n" ); end ); ############################################################################# ## #M CR_FpGroupQClass( ) . . . . Q-class rep as f.p. group ## ## 'CR_FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'FpGroupQClass'. ## InstallGlobalFunction( CR_FpGroupQClass, function ( param ) local CR, cr, crgens, crrels, dim, F, G, i, list, ngens, nrels, num, ord, q, qcl, rels, sys; dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; ord := CR.orderQClass[q]; if ord = 1 then F := FreeGroup( 0 ); rels := [ ]; else ngens := RemInt( CR.codedPresentationQClass[q], 10 ); crgens := CR.generatorsQClass{ [ 8 - ngens .. 7 ] }; num := QuoInt( CR.codedPresentationQClass[q], 10 ); crrels := CR.relatorWordsQClass{ CR.relatorNumbersQClass[num] }; nrels := Length( crrels ); F := FreeGroup( ngens ); if RemInt( ord, 60 ) = 0 then list := [ 1 .. nrels ]; else list := Reversed( Concatenation( [ ngens + 1 .. nrels ], [ 1 .. ngens ] ) ); fi; rels := List( list, i -> MappedWord( crrels[i], crgens, GeneratorsOfGroup( F ) ) ); fi; G := F / rels; # Save the Q-class parameters in the group record. SetName( G, CR_Name( "FpGroupQClass", param, 3 ) ); SetSize( G, ord ); cr := rec( ); cr.parameters := [ dim, sys, qcl ]; SetCrystCatRecord( G, cr ); return G; end ); ############################################################################# ## #M CR_GeneratorsSpaceGroup( ) . . space group generators ## ## 'CR_GeneratorsSpaceGroup' returns the non-translation generators of the ## space group specified by the given parameters. ## InstallGlobalFunction( CR_GeneratorsSpaceGroup, function ( param ) local code, column, columnGeneratorSpaceGroup, CR, dim, dim1, gens, i, j, mat, modul, ngens, num, q, qcl, quot, sgt, sys, t, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; sgt := param[5]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; t := CR.nullSpaceGroup[z] + sgt; dim1 := dim + 1; modul := CR.modulSp; columnGeneratorSpaceGroup := CR.columnGeneratorSpaceGroup; code := 0; if t > CR.nullSpaceGroup[z] + 1 then code := CR.codedGeneratorsSpaceGroup[t-z]; fi; gens := CR_GeneratorsZClass( dim, z ); ngens := Length( gens ); for i in [ 1 .. ngens ] do mat := gens[i]; num := RemInt( code, modul ) + 1; code := QuoInt( code, modul ); column := columnGeneratorSpaceGroup[num]; quot := column[dim1]; for j in [ 1 .. dim ] do mat[j][dim1] := column[j] / quot; od; mat[dim1] := ListWithIdenticalEntries( dim1, 0 ); mat[dim1][dim1] := 1; od; return gens; end ); ############################################################################# ## #M CR_GeneratorsZClass( , ) . . . . . . . . matrix generators ## ## 'CR_GeneratorsZClass' returns a set of matrix generators for a ## representative of the specified Z-class. These generators are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## InstallGlobalFunction( CR_GeneratorsZClass, function ( dim, z ) local anz, code, codedGeneratorZClass, CR, gens, i, j, k, mat, modul, n, rowGeneratorZClass; CR := CrystGroupsCatalogue[dim]; modul := CR.modulZ; rowGeneratorZClass := CR.rowGeneratorZClass; codedGeneratorZClass := CR.codedGeneratorZClass; n := CR.nullGeneratorsZClass[z]; anz := CR.nullGeneratorsZClass[z+1] - n; gens := ListWithIdenticalEntries( anz, 0 ); for i in [ 1 .. anz ] do mat := ListWithIdenticalEntries( dim, 0 ); n := n + 1; code := CR.codedGeneratorZClass[n]; for j in [ 1 .. dim ] do k := RemInt( code, modul ) + 1; code := QuoInt( code, modul ); mat[j] := StructuralCopy( rowGeneratorZClass[k] ); od; gens[i] := mat; od; return gens; end ); ############################################################################# ## #M CR_InitializeRelators( ) . . . . . initialize CR relators ## ## 'CR_InitializeRelators' initializes the relator words list of the ## crystallographic goups catalogue. ## InstallGlobalFunction( CR_InitializeRelators, function ( CR ) local a, b, c, d, e, F, f, g, gens, rels; # Define the abstract generators. F := FreeGroup( "g", "f", "e", "d", "c", "b", "a" ); g := F.1; f := F.2; e := F.3; d := F.4; c := F.5; b := F.6; a := F.7; gens := [ g, f, e, d, c, b, a ]; # Define the relator words. rels := [ a, a^2, a^3, a^4, a^5, a^6, a^8, a^10, a^12, b^2, b^2/a, b^2/a^2, b^2/a^3, b^2/a^6, b^2/a^9, b^3, b^4, b^5, b^6, b^10, b^12, c^2, c^2/a^6, c^3, c^4, c^6, c^6/a^2, d^2, d^4, d^5, d^6, d^6/b^2, d^10, e^2, e^3, e^6, f^2, f^6, g^2, Comm(a,b), Comm(a,b)/a, Comm(a,b)/a^2, Comm(a,b)/a^3, Comm(a,b)/a^4, Comm(a,b)/a^6, Comm(a,b)/a^8, Comm(a,b)/a^10, Comm(a,b)/b^4, Comm(a,b)/b^8, Comm(a,b^2)/b^3, Comm(a,b^2)/b^6, Comm(a,b^3)/b^2, Comm(a,b^3)/b^4, Comm(a,b^4)/b, Comm(a,b^4)/b^2, Comm(a,b^5), Comm(a,b^6)/b^8, Comm(a,b^7)/b^6, Comm(a,b^8)/b^4, Comm(a,b^9)/b^2, Comm(a,c), Comm(a,c)/(b*a), Comm(a,c)/(b*a^2), Comm(a,c)/(b*a^4), Comm(a,c)/(b*a^6), Comm(a,c)/(b^2*a), Comm(a,c)/(b^2*a^2), Comm(a,c)/(b^5*a^2), Comm(a,c)/(b^5*a^5), Comm(a,c)/(b^8*a^2), Comm(a,c)/(c^3*b^3*a), Comm(a,c)/(c^5*b*a), Comm(a,c)/a, Comm(a,c)/a^2, Comm(a,c)/a^4, Comm(a,c)/a^6, Comm(a,c)/a^10, Comm(a,c)/b, Comm(a,c)/b^2, Comm(a,c^2)/(b*a), Comm(a,c^2)/(b^2*a^2), Comm(a,c^2)/(c^3*b^2*a^3), Comm(a,c^2)/(c^5*b^2*a^3), Comm(a,c^3)/(c^5*a), Comm(a,c^3)/(c^5*b^4*a^3), Comm(a,c^4)/(c*b*a^3), Comm(a,c^4)/(c*b^2*a^3), Comm(a,c^4)/(c^3*b^2*a^3), Comm(a,c^5)/(b*a^2), Comm(a,c^5)/(c*b^3*a^3), Comm(a,c^5)/(c^4*b^6), Comm(a,d), Comm(a,d)/(b*a), Comm(a,d)/(b*a^4), Comm(a,d)/(c*a), Comm(a,d)/(c*b*a), Comm(a,d)/(c*b*a^2), Comm(a,d)/(c*b^2*a), Comm(a,d)/(c*b^3), Comm(a,d)/(d^2*c*b*a), Comm(a,d)/a, Comm(a,d)/a^2, Comm(a,d)/a^10, Comm(a,d)/b, Comm(a,d)/b^2, Comm(a,d^2)/(d^3*b*a), Comm(a,d^2)/(d^8*b*a), Comm(a,d^3)/(d^2*b*a), Comm(a,d^4)/(d^3*c), Comm(a,d^4)/(d^8*c), Comm(a,d^5), Comm(a,d^6)/(d^2*c*b*a), Comm(a,d^7)/(d^8*b*a), Comm(a,d^8)/(d^2*b*a), Comm(a,d^9)/(d^8*c), Comm(a,e), Comm(a,e)/(c*b*a), Comm(a,e)/(d*b*a), Comm(a,e)/(d*b*a^2), Comm(a,e)/(d*c*a), Comm(a,e)/(d^3*c*b^2*a), Comm(a,e)/d^3, Comm(a,f), Comm(a,f)/(c*a), Comm(a,f)/(d*c*a), Comm(a,f)/a^2, Comm(a,f)/b, Comm(a,g), Comm(b,c), Comm(b,c)/(b*a), Comm(b,c)/(b*a^2), Comm(b,c)/(b*a^3), Comm(b,c)/(b^2*a), Comm(b,c)/(b^2*a^2), Comm(b,c)/(b^2*a^4), Comm(b,c)/(b^4*a), Comm(b,c)/(b^4*a^2), Comm(b,c)/(b^5*a), Comm(b,c)/(c^3*b^2*a), Comm(b,c)/(c^4*b*a^2), Comm(b,c)/(c^4*b^4*a^2), Comm(b,c)/a, Comm(b,c)/a^2, Comm(b,c)/a^3, Comm(b,c)/a^4, Comm(b,c)/b, Comm(b,c)/b^2, Comm(b,c)/b^4, Comm(b,c)/b^10, Comm(b,c^2)/(c*a), Comm(b,c^2)/(c^3*b^2*a^3), Comm(b,c^2)/(c^3*b^8*a), Comm(b,c^2)/a, Comm(b,c^3)/(c^2*b^2*a^2), Comm(b,c^3)/(c^4*b^2*a^2), Comm(b,c^3)/(c^4*b^4*a^2), Comm(b,c^4)/(c^3*b^3*a^3), Comm(b,c^4)/(c^5*a^3), Comm(b,c^4)/(c^5*b^3*a), Comm(b,c^5)/(c^2*b^4*a^2), Comm(b,c^5)/(c^3*a), Comm(b,c^5)/(c^3*b^2*a^3), Comm(b,d), Comm(b,d)/(b*a), Comm(b,d)/(c*a), Comm(b,d)/(c*b*a), Comm(b,d)/(c*b^3*a), Comm(b,d)/a, Comm(b,d)/a^2, Comm(b,d)/a^3, Comm(b,d)/a^9, Comm(b,d)/b^2, Comm(b,d)/b^4, Comm(b,d)/c, Comm(b,d)/d^2, Comm(b,d^2)/d^4, Comm(b,d^3)/d, Comm(b,d^3)/d^6, Comm(b,d^4)/d^3, Comm(b,d^4)/d^8, Comm(b,d^5), Comm(b,d^6)/d^2, Comm(b,d^7)/d^4, Comm(b,d^8)/d^6, Comm(b,d^9)/d^8, Comm(b,e), Comm(b,e)/(c*b*a), Comm(b,e)/(c*b^2*a), Comm(b,e)/(d*b^2*a), Comm(b,e)/(d*c*b^2), Comm(b,e)/a, Comm(b,e)/b^2, Comm(b,f), Comm(b,f)/(d*c*b*a), Comm(b,f)/(d*c*b^2), Comm(b,f)/b^2, Comm(b,g)/a, Comm(c,d), Comm(c,d)/(b*a), Comm(c,d)/(b*a^2), Comm(c,d)/(c*b), Comm(c,d)/(c*b*a), Comm(c,d)/(c*b*a^2), Comm(c,d)/(c*b*a^3), Comm(c,d)/(c*b^2*a), Comm(c,d)/(c^2*b*a^3), Comm(c,d)/(c^2*b^3), Comm(c,d)/(c^4*b), Comm(c,d)/(c^4*b*a), Comm(c,d)/(d^3*a), Comm(c,d)/(d^8*a), Comm(c,d)/b, Comm(c,d)/b^2, Comm(c,d)/c, Comm(c,d)/c^2, Comm(c,d)/c^4, Comm(c,d^2)/(d*c*a), Comm(c,d^2)/(d^6*c*a), Comm(c,d^3)/(c*a), Comm(c,d^4)/(d^3*c^2*a), Comm(c,d^4)/(d^8*c^2*a), Comm(c,d^5), Comm(c,d^6)/(d^8*a), Comm(c,d^7)/(d^6*c*a), Comm(c,d^8)/(c*a), Comm(c,d^9)/(d^8*c^2*a), Comm(c,e), Comm(c,e)/(b*a), Comm(c,e)/(d*a^2), Comm(c,e)/(d*b^2), Comm(c,e)/(d*c*b^3), Comm(c,e)/(d^3*b), Comm(c,e)/b^3, Comm(c,e)/d^3, Comm(c,f), Comm(c,f)/(c*a), Comm(c,f)/(d*c*b^3), Comm(c,f)/b, Comm(c,f)/b^3, Comm(c,g)/(d^3*c*b^3), Comm(d,e)/(c*b^3*a), Comm(d,e)/(d*c*a^2), Comm(d,e)/(d*c*b*a), Comm(d,e)/(d*c*b^2), Comm(d,e)/(d^3*b^3*a), Comm(d,e)/(d^3*c*b), Comm(d,e)/(d^4*c), Comm(d,e)/(d^4*c*b*a), Comm(d,e), Comm(d,f)/(c*b*a), Comm(d,f)/(d*c*b*a), Comm(d,f)/(d^4*c*b), Comm(d,f)/a^3, Comm(d,f)/c, Comm(d,g)/(e*d^5*c*b^3*a), Comm(e,f)/(e*b), Comm(e,f)/(e*c*a^3), Comm(e,f)/(e*d*c*a^2), Comm(e,f)/(e^4*c*b^3*a), Comm(e,f)/e, Comm(e,g)/(e^2*d^4*c*b^2*a), Comm(f,g)]; CR[2].generatorsQClass := gens; CR[3].generatorsQClass := gens; CR[4].generatorsQClass := gens; CR[2].relatorWordsQClass := rels; CR[3].relatorWordsQClass := rels; CR[4].relatorWordsQClass := rels; end ); ############################################################################# ## #M CR_MatGroupZClass( ) . . Z-class rep as matrix group ## ## 'CR_MatGroupZClass' returns a representative group of the specified ## Z-class. The generators of the resulting matrix group are chosen such ## that they satisfy the defining relators which are returned by the ## 'CR_FpGroupQClass' function for the representative of the corresponding ## Q-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'MatGroupZClass'. ## InstallGlobalFunction( CR_MatGroupZClass, function ( param ) local CR, cr, dim, G, gens, q, qcl, sys, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; if param{[2..4]} = [1,1,1] then gens := []; else gens := CR_GeneratorsZClass( dim, z ); fi; G := Group( gens, Identity( CR.GLZ ) ); # Save the Z-class parameters in the group record. SetSize( G, CR.orderQClass[CR.QClassZClass[z]] ); SetName( G, CR_Name( "MatGroupZClass", param, 4 ) ); cr := rec( ); cr.parameters := [ dim, sys, qcl, zcl ]; cr.conjugator := Identity( G ); SetCrystCatRecord( G, cr ); return G; end ); ############################################################################# ## #M CR_PcGroupQClass(,) . Q-class rep as pc group ## ## 'CR_PcGroupQClass' returns a pc group isomorphic to the groups in the ## specified Q-class. If = true, then a warning will be displayed ## in case that the given presentation is not a prime order pcgs. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'PcGroupQClass'. ## InstallGlobalFunction( CR_PcGroupQClass, function ( param, warning ) local CR, cr, crgens, crrels, dim, F, G, i, ngens, nrels, num, ord, q, qcl, rels, sys, lev; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; ord := CR.orderQClass[q]; if RemInt( ord, 60 ) = 0 then Print( "#I Warning: a non-solvable group can't be represented", " as a pc group\n" ); return fail; fi; if ord = 1 then G := TrivialGroup( IsPcGroup ); else ngens := RemInt( CR.codedPresentationQClass[q], 10 ); crgens := CR.generatorsQClass{ [ 8 - ngens .. 7 ] }; num := QuoInt( CR.codedPresentationQClass[q], 10 ); crrels := CR.relatorWordsQClass{ CR.relatorNumbersQClass[num] }; nrels := Length( crrels ); F := FreeGroup( ngens ); rels := List( [ 1 .. nrels ], i -> MappedWord( crrels[i], crgens, GeneratorsOfGroup( F ) ) ); F := F / rels; # suppress premature warning about better using RefinedPcGroup lev := InfoLevel( InfoWarning ); SetInfoLevel( InfoWarning, 0 ); G := PcGroupFpGroup( F ); SetInfoLevel( InfoWarning, lev ); # Refine the pc series, if necessary. G := RefinedPcGroup( G ); if warning and Length( GeneratorsOfGroup( G ) ) <> Length( GeneratorsOfGroup( F ) ) then Print( "#I Warning: the presentation has been extended to get", " a prime order pcgs\n" ); fi; fi; # Save the Q-class parameters in the group record. SetName( G, CR_Name( "PcGroupQClass", param, 3 ) ); SetSize( G, ord ); cr := rec( ); cr.parameters := [ dim, sys, qcl ]; SetCrystCatRecord( G, cr ); return G; end ); ############################################################################# ## #M CR_Name( , , ) . . . name of crystal #M . . . . . . . . . . . . . . . . . . . . . . . . group or character table ## ## 'CR_Name' returns the "name" of the specified object which may be a ## Z-class representative, a Q-class representative or its character table, ## or a space group. The resulting name is a string which consists of the ## given string followed by the relevant parameters which are separated by ## commas and enclosed in parentheses. ## InstallGlobalFunction( CR_Name, function ( string, param, nparms ) local dim, name, qcl, sgt, sys, zcl; # Initialize the name by the given string and a left parenthesis. name := Concatenation( string, "( " ); # Add the dimension. dim := param[1]; name := Concatenation( name, String( dim ) ); # Add the crystal system parameter. sys := param[2]; name := Concatenation( name, ", " ); name := Concatenation( name, String( sys ) ); # Add the Q-class parameter. qcl := param[3]; name := Concatenation( name, ", " ); name := Concatenation( name, String( qcl ) ); if nparms > 3 then # Add the Z-class parameter. zcl := param[4]; name := Concatenation( name, ", " ); name := Concatenation( name, String( zcl ) ); if nparms > 4 then # Add the space-group type. sgt := param[5]; name := Concatenation( name, ", " ); name := Concatenation( name, String( sgt ) ); fi; fi; # Close the name by a right parenthesis and return it. return Concatenation( name, " )" ); end ); ############################################################################# ## #M CR_NormalizerZClass( ) . . normalizer of Z-class rep ## ## 'CR_NormalizerZClass' returns the normalizer in GL(dim,Z) of the ## specified Z-class representative matrix group. If the order of the ## normalizer is finite, then the group record components "crZClass" and ## "crConjugator" will be set properly. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'NormalizerZClass'. ## InstallGlobalFunction( CR_NormalizerZClass, function ( param ) local con, coninv, CR, cr, dim, gens, N, q1, qcl1, sys1, z, z1, z2, zcl1; # Get the arguments. dim := param[1]; CR := CrystGroupsCatalogue[dim]; z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4]; z1 := RemInt( CR.codedNormalizerZClass[z], 1000 ); z2 := QuoInt( CR.codedNormalizerZClass[z], 1000 ); if z1 = 0 then gens := Concatenation( CR_GeneratorsZClass( dim, z ), CR_GeneratorsZClass( dim, z2 ) ); N := Group( gens, Identity( CR.GLZ ) ); SetSize( N, infinity ); else gens := CR_GeneratorsZClass( dim, z1 ); if z2 <> 0 then coninv := CR_GeneratorsZClass( dim, z2 )[1]; con := coninv^-1; gens := coninv * gens * con; fi; q1 := CR.QClassZClass[z1]; sys1 := CR.crystalSystemQClass[q1]; qcl1 := q1 - CR.nullQClass[sys1]; zcl1 := z1 - CR.nullZClass[q1]; N := Group( gens, Identity( CR.GLZ ) ); SetSize( N, CR.orderQClass[q1] ); # Save the Z-class parameters in the normalizer group record. SetName( N, CR_Name( "NormalizerZClass", param, 4 ) ); cr := rec( ); # N.crZClass := [ dim, sys1, qcl1, zcl1 ]; cr.parameters := [ dim, sys1, qcl1, zcl1 ]; if z2 <> 0 then # N.crConjugator := con; cr.conjugator := con; else # N.crConjugator := Identity( N ); cr.conjugator := Identity( N ); fi; SetCrystCatRecord( N, cr ); fi; return N; end ); ############################################################################# ## #M CR_Parameters( [ , , , , ], nparms) #M CR_Parameters( [ , , , ], nparms ) . . . . #M CR_Parameters( [ , , ], nparms ) . . . . . internal #M CR_Parameters( [ , ], nparms ) . . . . . parameters for #M CR_Parameters( [ ], nparms ) . . crystal groups ## ## Valid argument lists are ## ## [ dim, sys, qcl, zcl, sgt ], 5 ## [ dim, sys, qcl, zcl ], 4 ## [ dim, sys, qcl ], 3 ## [ 3, it ], n ## [ 2, it ], n ## [ symbol ], n ## ## where ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## it = corresponding number in the International Tables (only for ## dimensions 2 and 3), ## n = 3 or 4 or 5, ## symbol = Hermann-Mauguin symbol (only for dimensions 2 or 3). ## ## 'CR_Parameters' checks the given arguments to be consistent and in range, ## and returns them in form of an "internal CR parameter list" ## ## [ dim, sys, qcl, zcl, sgt ] ## ## which contains the "local parameters" of the respective object. The ## following "global parameters" of the same object are used as local ## variables. ## ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## InstallGlobalFunction( CR_Parameters, function ( args, nparms ) local catlist, CR, dim, it, nargs, param, q, qcl, sgt, symbol, sys, t, z, zcl; # Check number of arguments. nargs := Length( args ); if nargs <> nparms and nargs <> 1 and nargs <> 2 then Error( "illegal number of arguments" ); fi; # Initialize the parameters list. param := ListWithIdenticalEntries( 5, 0 ); if nargs < 3 then if nargs = 1 then # The argument is a Hermann-Mauguin symbol. symbol := args[1]; it := Position( CR_2.HermannMauguinSymbol, symbol ); if it <> fail then dim := 2; else it := Position( CR_3.HermannMauguinSymbol, symbol ); if it = fail then Error( "don't know the given Hermann-Mauguin symbol" ); fi; dim := 3; fi; CR := CrystGroupsCatalogue[dim]; catlist := CR.spaceGroupTypeInternatTable; else # The second argument is an International Table number. # Check the dimension parameter. dim := args[1]; if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "inconsistent dimension parameter" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the IT number. it := args[2]; catlist := CR.spaceGroupTypeInternatTable; if not IsInt( it ) or it < 1 or Length( catlist ) < it then Error( "illegal IT number" ); fi; fi; # Reconstruct the space group parameters from the coded information # in the catalogue list and store them in the parameters list. param[1] := dim; z := RemInt( catlist[it], 100 ); q := CR.QClassZClass[z]; sys := CR.crystalSystemQClass[q]; param[2] := sys; param[3] := q - CR.nullQClass[sys]; if nparms > 3 then param[4] := z - CR.nullZClass[q]; t := QuoInt( catlist[it], 100 ); param[5] := t - CR.nullSpaceGroup[z]; fi; else # Check the dimension parameter. dim := args[1]; if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "illegal dimension parameter" ); fi; param[1] := dim; # Check the crystal system parameter. sys := args[2]; CR := CrystGroupsCatalogue[dim]; if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then Error( "crystal system parameter out of range" ); fi; param[2] := sys; # Check the Q-class parameter and get the Q-class number with respect # to all Q-classes for dimension dim. qcl := args[3]; if not IsInt( qcl ) or qcl < 1 or CR.nullQClass[sys+1] - CR.nullQClass[sys] < qcl then Error( "Q-class parameter out of range" ); fi; param[3] := qcl; if nargs > 3 then # Check the Z-class parameter and get the Z-class number with # respect to all Z-classes for dimension dim. zcl := args[4]; q := CR.nullQClass[sys] + qcl; if not IsInt( zcl ) or zcl < 1 or CR.nullZClass[q+1] - CR.nullZClass[q] < zcl then Error( "Z-class parameter out of range" ); fi; param[4] := zcl; if nargs > 4 then # Check the space-group type parameter. sgt := args[5]; z := CR.nullZClass[q] + zcl; if not IsInt( sgt ) or sgt < 1 or CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z] < sgt then Error( "space-group type parameter out of range" ); fi; param[5] := sgt; fi; fi; fi; return( param ); end ); ############################################################################# ## #M CR_SpaceGroup( ) . . . . . . . . . . . . space group ## ## 'CR_SpaceGroup' returns a representative matrix group (of dimension ## dim+1) of the specified space-group type. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'SpaceGroup'. ## ## In particular, the function expects that, whenever the order of the point ## group is not a multiple of 60, the given point group presentation is a ## polycyclic power commutator presentation containing a list of n power ## relators and n*(n-1)/2 commutator relators in some prescribed order, ## where n is the number of its generators. ## InstallGlobalFunction( CR_SpaceGroup, function ( param ) local CR, cr, crgens, crrels, dim, dim1, exp, G, g, g1, gen, gens, gens0, i, i1, i2, idword, inv, j, mat, leng, names, ngens, ngens0, ngens1, nrels, num, q, qcl, rel, rels, S, subword, sys, word; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; dim1 := dim + 1; # Get the non-translation generators. if param{[2..5]} = [1,1,1,1] then gens := []; else gens := CR_GeneratorsSpaceGroup( param ); fi; # Add the translation generators. for i in [ 1 .. dim ] do mat := StructuralCopy( CR.spaceGroupIdentity ); mat[i][dim1] := 1; Add( gens, mat ); od; # Construct the space group. S := Group( gens, CR.spaceGroupIdentity ); # Initialize a finitly presented group G isomorphic to S. ngens := Length( GeneratorsOfGroup( S ) ); ngens0 := ngens - dim; ngens1 := ngens0 + 1; names := List( [ 1 .. ngens ], i -> Concatenation( "g", String( i ) ) ); G := FreeGroup( names ); g := GeneratorsOfGroup( G ); idword := One( g[1] ); rels := [ ]; # Extended the point group relators. if ngens0 > 0 then g1 := g{ [ 1 .. ngens0 ] }; gens0 := gens{ [ 1 .. ngens0 ] }; crgens := CR.generatorsQClass{ [ 8 - ngens0 .. 7 ] }; num := QuoInt( CR.codedPresentationQClass[q], 10 ); crrels := CR.relatorWordsQClass{ CR.relatorNumbersQClass[num] }; nrels := Length( crrels ); if RemInt( CR.orderQClass[q], 60 ) = 0 then # The point group is non-solvable, so just extend its relators # appropriately. for i in [ 1 .. nrels ] do mat := MappedWord( crrels[i], crgens, gens0 ); word := idword; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, MappedWord( crrels[i], crgens, g1 ) * word^-1 ); od; else # The point group is solvable, so construct a polycyclic # power commutator presentation. if nrels <> ngens0 * ngens1 / 2 then Error( "This is a bug. You should never get here.\n" ); fi; # First handle the power relators. for i in [ 1 .. ngens0 ] do rel := crrels[ngens1-i]; leng := Length( rel ); gen := crgens[i]; if leng < 2 or Subword( rel, 1, 2 ) <> gen^2 then Error( "This is a bug. You should never get here.\n" ); fi; exp := 2; while exp < leng and Subword( rel, exp+1, exp+1 ) = gen do exp := exp + 1; od; word := idword; if exp = leng then mat := gens0[i]^exp; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, g[i]^exp * word^-1 ); else subword := Subword( rel, exp + 1, leng ); mat := MappedWord( subword, crgens, gens0 ) * gens0[i]^exp; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, g[i]^exp * word^-1 * MappedWord( subword, crgens, g1 ) ); fi; od; # Now handle the commutator relators. i := nrels + 1; for i2 in [ 2 .. ngens0 ] do for i1 in [ 1 .. i2 - 1 ] do i := i - 1; rel := crrels[i]; leng := Length( rel ); if leng < 4 or Subword( rel, 1, 4 ) <> Comm( crgens[i2], crgens[i1] ) then Error("This is a bug. You should never get here.\n"); fi; word := idword; if leng = 4 then mat := Comm( gens0[i2], gens0[i1] ); for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, Comm( g[i2], g[i1] ) * word^-1 ); else subword := Subword( rel, 5, leng ); mat := MappedWord( subword, crgens, gens0 ) * Comm( gens0[i2], gens0[i1] ); for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, Comm( g[i2], g[i1] ) * word^-1 * MappedWord( subword, crgens, g1 ) ); fi; od; od; fi; fi; # Add the remaining commutator relators. inv := List( gens, mat -> mat^-1 ); for i2 in [ ngens1 .. ngens ] do # Add the relators which describe the action of the non-translation # generators on the translation generators. for i1 in [ 1 .. ngens0 ] do mat := inv[i2] * inv[i1] * gens[i2] * gens[i1]; word := idword; for j in [ 1 .. dim ] do word := word * g[ngens0+j]^mat[j][dim1]; od; Add( rels, Comm( g[i2], g[i1] ) * word^-1 ); od; # Add the commutator relators for the translation generators. for i1 in [ ngens1 .. i2 - 1 ] do Add( rels, Comm( g[i2], g[i1] ) ); od; od; # Save the finitely presented group G in the group record of S. G := G / rels; # Save the space group type parameters in the group record. SetSize( S, infinity ); SetName( S, CR_Name( "SpaceGroupOnLeftBBNWZ", param, 5 ) ); cr := rec( ); cr.parameters := param; cr.fpGroup := G; SetCrystCatRecord( S, cr ); return S; end ); ############################################################################# ## #M CR_ZClassRepsDadeGroup( , ) . . . . Z-class reps #M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . in Dade group ## ## 'CR_ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## ## This is an internal function which does not check the arguments. The ## corresponding public function is 'ZClassRepsDadeGroup'. ## InstallGlobalFunction( CR_ZClassRepsDadeGroup, function ( param, d ) local code, con, CR, cr, dim, G, gens, i, j, k, mat, matinv, modul, n1, n2, name, q, qcl, reps, rowConjugatorDadeGroup, sys, z, zcl; # Get the arguments. dim := param[1]; sys := param[2]; qcl := param[3]; zcl := param[4]; CR := CrystGroupsCatalogue[dim]; q := CR.nullQClass[sys] + qcl; z := CR.nullZClass[q] + zcl; rowConjugatorDadeGroup := CR.rowConjugatorDadeGroup; n1 := CR.nullDadeGroupsZClass[z] + 1; n2 := CR.nullDadeGroupsZClass[z+1]; reps := [ ]; # Loop over all Dade groups containing groups from the given Z-class. for i in [ n1 .. n2 ] do # Check the Dade group for being the given one. code := CR.codedDadeGroupsZClass[i]; if RemInt( code, 10 ) = d then # Construct the representative matrix group of the given Z-class. gens := CR_GeneratorsZClass( dim, z ); name := CR_Name( "MatGroupZClass", param, 4 ); # Conjugate the group, if necessary. con := QuoInt( code, 10); if con = 0 then G := Group( gens, Identity( CR.GLZ ) ); SetName( G, name ); mat := Identity( G ); else modul := 140; matinv := ListWithIdenticalEntries( dim, 0 ); code := CR.codedConjugatorDadeGroup[con]; for j in [ 1 .. dim ] do k := RemInt( code, modul ); code := QuoInt( code, modul ); matinv[j] := StructuralCopy( rowConjugatorDadeGroup[k] ); od; mat := matinv^-1; gens := matinv * gens * mat; G := Group( gens, Identity( CR.GLZ ) ); SetName( G, Concatenation( Concatenation( name, "^" ), String( mat ) ) ); fi; # Save the Z-class parameters in the group record. SetSize( G, CR.orderQClass[CR.QClassZClass[z]] ); cr := rec( ); cr.parameters := [ dim, sys, qcl, zcl ]; cr.conjugator := mat; SetCrystCatRecord( G, cr ); # Save the group in the list. Add( reps, G ); fi; od; return reps; end ); ############################################################################# ## #M CharTableQClass( , , ) . . . . . . character table #M CharTableQClass( , ) . . . . . . . . . . . of a Q-class #M CharTableQClass( ) . . . . representative group ## ## 'CharTableQClass' returns the character table of a representative group ## of the specified Q-class. ## InstallGlobalFunction( CharTableQClass, function ( arg ) local T, param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Construct the character table of the class representative group. T := CR_CharTableQClass( param ); return T; end ); ############################################################################# ## #M DisplayCrystalFamily( , ) . . . . . . . . . . display some #M . . . . . . . . . . . . . . . . . . . . . . . . crystal family invariants ## ## 'DisplayCrystalFamily' displays for the specified crystal family the ## following information: ## - the family name, ## - the number of parameters, ## - the common rational decomposition pattern, ## - the common real decomposition pattern, ## - the number of crystal systems in the family, and ## - the number of Bravais flocks in the family. ## InstallGlobalFunction( DisplayCrystalFamily, function ( dim, fam ) local bnum, code, CR, pnum, pt, qdecomp, rdecomp, snum, text; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the family parameter. if not IsInt( fam ) or fam < 1 or Length( CR.nameCrystalFamily ) < fam then Error( "family parameter out of range" ); fi; code := CR.codedPropertiesFamily[fam]; rdecomp := RemInt( code, 10 ); code := QuoInt( code, 10 ); qdecomp := RemInt( code, 10 ); code := QuoInt( code, 10 ); bnum := RemInt( code, 10 ); pnum := QuoInt( code, 10 ); snum := Number( CR.familyCrystalSystem, x -> x = fam ); text := CR_TextStrings.family; # Print the family number. Print( text[12], CR_TextStrings.roman[fam] ); # Print the name of the family. Print( text[13], CR.nameCrystalFamily[fam] ); # Print the number of free parameters. Print( text[14], pnum, text[16] ); if pnum > 1 then Print( text[15] ); fi; Print( text[19] ); # Print the rational decomposition pattern. if qdecomp = 1 then Print( text[10], text[1], text[14] ); elif qdecomp > 1 then Print( text[10], text[2], text[qdecomp], text[14] ); fi; # Print the real decomposition pattern. if rdecomp = 1 then Print( text[11], text[1] ); elif rdecomp > 1 then Print( text[11], text[2], text[rdecomp] ); fi; # Print the number of crystal systems in the given family. pt := 19; if qdecomp = 0 then pt := 14; fi; Print( text[pt], snum, text[17] ); if snum > 1 then Print( text[15] ); fi; # Print the number of Bravais flocks. Print( text[14], bnum, text[18] ); if bnum > 1 then Print( text[15] ); fi; Print( "\n" ); end ); ############################################################################# ## #M DisplayCrystalSystem( , ) . . . . . . . . . . display some #M . . . . . . . . . . . . . . . . . . . . . . . . crystal system invariants ## ## 'DisplayCrystalSystem' displays for the specified crystal system the ## following information: ## - the number of Q-classes in the crystal system, and ## - the triple (dim, sys, qcl) of parameters of the Q-class which is the ## holohedry of the crystal system. ## InstallGlobalFunction( DisplayCrystalSystem, function ( dim, sys ) local CR, qnum, text; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the crystal system parameter. if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then Error( "system parameter out of range" ); fi; qnum := CR.nullQClass[sys+1] - CR.nullQClass[sys]; text := CR_TextStrings.crystalSystem; # Print the crystal system number. Print( text[1], sys ); # Print the number of Q-classes in the given crystal system. if qnum = 1 then Print( text[6], qnum, text[2] ); else Print( text[6], qnum, text[3] ); fi; # Print the holohedry. Print( text[4], dim, text[5], sys, text[5], qnum, text[7] ); Print( "\n" ); end ); ############################################################################# ## #M DadeGroup( , ) . . . . . . . . . . . . . . . . . . . Dade group ## ## 'DadeGroup' returns the n-th Dade group of dimension dim. ## InstallGlobalFunction( DadeGroup, function ( dim, n ) local CR, G, param; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the given Dade group number for being in range. if not IsInt( n ) or n < 1 or Length( CR.parametersDadeGroup ) < n then Error( "Dade group number out of range" ); fi; param := CR.parametersDadeGroup[n]; G := CR_MatGroupZClass( param ); return G; end ); ############################################################################# ## #M DadeGroupNumbersZClass( , , , ) . . . Dade #M DadeGroupNumbersZClass( , ) . . . . . . . . . . . group #M DadeGroupNumbersZClass( ) . . . . . . . numbers ## ## 'DadeGroupNumbersZClass' returns a list of the numbers of those Dade ## groups which contain groups from the given Z-class. ## InstallGlobalFunction( DadeGroupNumbersZClass, function ( arg ) local CR, dim, i, n1, n2, nums, param, z; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); dim := param[1]; CR := CrystGroupsCatalogue[dim]; z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4]; # Construct the list and return it. n1 := CR.nullDadeGroupsZClass[z] + 1; n2 := CR.nullDadeGroupsZClass[z+1]; nums := List( [ n1 .. n2 ], i -> RemInt( CR.codedDadeGroupsZClass[i], 10 ) ); return Set( nums ); end ); ############################################################################# ## #M DisplayQClass( , , ) . . . . . . . . . . . display #M DisplayQClass( , ) . . . . . . . . . . . . some Q-class #M DisplayQClass( ) . . . . . . . . . . invariants ## ## 'DisplayQClass' displays for the specified Q-class the following ## information: ## - the size of the groups in the Q-class, ## - the isomorphism type of the groups in the Q-class, ## - the Hurley pattern, ## - the rational constituents, ## - the number of Z-classes in the Q-class, and ## - the number of space-group types in the Q-class. ## InstallGlobalFunction( DisplayQClass, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Display some invariants of the given Q-class. CR_DisplayQClass( param ); end ); ############################################################################# ## #M DisplaySpaceGroupGenerators( , ,,, ) #M DisplaySpaceGroupGenerators( , ) . . display space group #M DisplaySpaceGroupGenerators( ) . . . generators ## ## 'DisplaySpaceGroupGenerators' displays the non-translation generators of ## the space group specified by the given parameters. ## InstallGlobalFunction( DisplaySpaceGroupGenerators, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 5 ); # Display the non-translation generators of the space group type # representative matrix group. CR_DisplaySpaceGroupGenerators( param ); end ); ############################################################################# ## #M DisplaySpaceGroupType( , , , , ) . #M DisplaySpaceGroupType( , ) . . . . . display some space #M DisplaySpaceGroupType( ) . . . group invariants ## ## 'DisplaySpaceGroupType' displays for the specified space-group type the ## following information: ## - the orbit size associated with the space-group type, ## - the IT number (only in case dim = 2 or dim = 3), and ## - the Hermann-Mauguin symbol (only in case dim = 2 or dim = 3). ## InstallGlobalFunction( DisplaySpaceGroupType, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 5 ); # Display some invariants of the given space-group type. CR_DisplaySpaceGroupType( param ); end ); ############################################################################# ## #M DisplayZClass( , , , ) . . . . . . display #M DisplayZClass( , ) . . . . . . . . . . . . some Z-class #M DisplayZClass( ) . . . . .. . . . . . invariants ## ## 'DisplayZClass' displays for the specified Z-class the following ## information: ## - the Hermann-Mauguin symbol of a representative space-group type which ## belongs to the Z-class (only in case dim = 2 or dim = 3), ## - the Bravais type, ## - some decomposability information, ## - the number of space-group types belonging to the Z-class, and ## - the size of the associated cohomology group. ## InstallGlobalFunction( DisplayZClass, function ( arg ) local param; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); # Display some invariants of the given Z-class. CR_DisplayZClass( param ); end ); ############################################################################# ## #M FpGroupQClass( , , ) . . . . . . . . . . . Q-class #M FpGroupQClass( , ) . . . . . . . . . . . representative #M FpGroupQClass( ) . . . . . . . . . as f.p. group ## ## 'FpGroupQClass' returns a f. p. group isomorphic to the groups in the ## specified Q-class. ## InstallGlobalFunction( FpGroupQClass, function ( arg ) local F, param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Construct the the corresponding f.p. group. F := CR_FpGroupQClass( param ); return F; end ); ############################################################################# ## #M MatGroupZClass( , , , ) . . . . . . Z-class #M MatGroupZClass( , ) . . . . . . . . . . representative #M MatGroupZClass( ) . . . . . . . as matrix group ## ## 'MatGroupZClass' returns a representative group of the specified Z-class. ## The generators of the resulting matrix group are chosen such that they ## satisfy the defining relators which are returned by the ## 'FpGroupQClass' function for the representative of the corresponding ## Q-class. ## InstallGlobalFunction( MatGroupZClass, function ( arg ) local G, param; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); # Construct the class representative matrix group. G := CR_MatGroupZClass( param ); return G; end ); ############################################################################# ## #M NormalizerZClass( , , , ) . . . normalizer #M NormalizerZClass( , ) . . . . . . . . . . . of a Z-class #M NormalizerZClass( ) . . . . representative group ## ## 'NormalizerZClass' returns the normalizer in GL(dim,Z) of the specified ## Z-class representative matrix group. If the order of the normalizer is ## finite, then the group record components "crZClass" and "crConjugator" ## will be set properly. ## InstallGlobalFunction( NormalizerZClass, function ( arg ) local N, param; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); # Construct the normalizer in GL(dim,Z) of the class representative # matrix group. N := CR_NormalizerZClass( param ); return N; end ); ############################################################################# ## #M NrCrystalFamilies( ) . . . . . . . . . . number of crystal families ## ## 'NrCrystalFamilies' returns the number of crystal families of the given ## dimension. ## InstallGlobalFunction( NrCrystalFamilies, function ( dim ) # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; return Length( CrystGroupsCatalogue[dim].nameCrystalFamily ); end ); ############################################################################# ## #M NrCrystalSystems( ) . . . . . . . . . . . number of crystal systems ## ## 'NrCrystalSystems' returns the number of crystal systems of the given ## dimension. ## InstallGlobalFunction( NrCrystalSystems, function ( dim ) # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; return Length( CrystGroupsCatalogue[dim].familyCrystalSystem ); end ); ############################################################################# ## #M NrDadeGroups( ) . . . . . . . . . . . . . . . number of Dade groups ## ## 'NrDadeGroups' returns the number of Dade groups of the given dimension. ## InstallGlobalFunction( NrDadeGroups, function ( dim ) # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; return Length( CrystGroupsCatalogue[dim].parametersDadeGroup ); end ); ############################################################################# ## #M NrQClassesCrystalSystem( , ) . . . . . number of Q-classes ## ## 'NrQClassesCrystalSystem' returns the number of Q-classes in the given ## crystal system. ## InstallGlobalFunction( NrQClassesCrystalSystem, function ( dim, sys ) local CR; # Check the dimension parameter. if not IsInt( dim ) or dim < 2 or 4 < dim then Error( "dimension out of range (must be 2, 3, or 4)" ); fi; CR := CrystGroupsCatalogue[dim]; # Check the crystal system parameter. if not IsInt( sys ) or sys < 1 or Length( CR.nullQClass ) <= sys then Error( "system parameter out of range" ); fi; return CR.nullQClass[sys+1] - CR.nullQClass[sys]; end ); ############################################################################# ## #M NrSpaceGroupTypesZClass( , , , ) . . number #M NrSpaceGroupTypesZClass( , ) . . . . . . of space-group #M NrSpaceGroupTypesZClass( ) . . types in Z-class ## ## 'NrSpaceGroupTypesZClass' returns the number of space-group types in the ## given Z-class. ## InstallGlobalFunction( NrSpaceGroupTypesZClass, function ( arg ) local CR, param, z; # Evaluate the given arguments. param := CR_Parameters( arg, 4 ); CR := CrystGroupsCatalogue[param[1]]; z := CR.nullZClass[ CR.nullQClass[param[2]] + param[3] ] + param[4]; return CR.nullSpaceGroup[z+1] - CR.nullSpaceGroup[z]; end ); ############################################################################# ## #M NrZClassesQClass( , , ) . . . . . . . . number of #M NrZClassesQClass( , ) . . . . . . . . . . . . Z-classes #M NrZClassesQClass( ) . . . . . . . . . in Q-class ## ## 'NrZClassesQClass' returns the number of Z-classes in the given Q-class. ## InstallGlobalFunction( NrZClassesQClass, function ( arg ) local CR, param, q; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); CR := CrystGroupsCatalogue[param[1]]; q := CR.nullQClass[param[2]] + param[3]; return CR.nullZClass[q+1] - CR.nullZClass[q]; end ); ############################################################################# ## #M PcGroupQClass( , , ) . . . . . . . . . . . Q-class #M PcGroupQClass( , ) . . . . . . . . . . . representative #M PcGroupQClass( ) . . . . . . . . . . as ag group ## ## 'PcGroupQClass' returns an ag group isomorphic to the groups in the ## specified Q-class. ## InstallGlobalFunction( PcGroupQClass, function ( arg ) local A, param; # Evaluate the given arguments. param := CR_Parameters( arg, 3 ); # Construct the corresponding ag group (if solvable). A := CR_PcGroupQClass( param, true ); return A; end ); ############################################################################# ## #M SpaceGroupOnLeftBBNWZ( , , , , ) #M SpaceGroupOnLeftBBNWZ( , ) . . . . . . . . . . . . . . . #M SpaceGroupOnLeftBBNWZ( ) . . . . . . space group ## ## 'SpaceGroupOnLeftBBNWZ' returns a representative matrix group ## (of dimension dim+1) of the specified space-group type. ## InstallGlobalFunction( SpaceGroupOnLeftBBNWZ, function ( arg ) local G, param; # Evaluate the given arguments. param := CR_Parameters( arg, 5 ); # Construct the space group. G := CR_SpaceGroup( param ); SetIsAffineCrystGroupOnLeft( G, true ); AddTranslationBasis( G, IdentityMat( param[1] ) ); SetIsSpaceGroup( G, true ); SetIsSymmorphicSpaceGroup( G, param[5]=1 ); return G; end ); ############################################################################# ## #M SpaceGroupOnRightBBNWZ( , , , , ) . #M SpaceGroupOnRightBBNWZ( , ) . . . . . . . . . . . . . . #M SpaceGroupOnRightBBNWZ( ) . . . . . . . . . . . #M SpaceGroupOnRightBBNWZ( S ) . . . . . . . . . . . .transposed space group ## ## 'SpaceGroupOnRightBBNWZ' returns the transposed matrix group of ## the given or specified space group. ## ## The reason is the following. Each space group is presented in the form of ## a group of augmented matrices (of dimension dim+1) of the following form: ## ## [ M | t ] ## [-----+---] Here, M is the `linear part' and ## [ 0 | 1 ] t is the `translational part'. ## ## Therefore, the natural action of a space group in this form is from the ## left. This collides with the convention in GAP to have all actions from ## the right. This function does the necessary conversions. In fact, it does ## not only transpose the matrices, but it also adapts the relators given in ## S.fpGroup to the new generators. ## InstallGlobalFunction( SpaceGroupOnRightBBNWZ, function( arg ) local cr, F, G, narg, param, rel, rels, S, T; # Evaluate the arguments. narg := Length( arg ); if narg = 1 and IsGroup( arg[1] ) and HasCrystCatRecord( arg[1] ) and Length( CrystCatRecord( arg[1] ).parameters ) = 5 then # The argument is the space group S to be transposed. # Get a copy G of the finitely presented group involved in S. S := arg[1]; cr := CrystCatRecord( S ); param := cr.parameters; else # Construct the space group S to be transposed from the arguments # and get the finitely presented group G involved in S. param := CR_Parameters( arg, 5 ); S := CR_SpaceGroup( param ); cr := CrystCatRecord( S ); fi; # Get the f.p. group G associated to S. G := cr.fpGroup; F := FreeGroupOfFpGroup( G ); # construct the group T generated by the transposed generators of S. T := Group( List( GeneratorsOfGroup( S ), TransposedMat ), One ( S ) ); cr := rec( ); cr.parameters := param; SetCrystCatRecord( T, cr ); SetName( T, CR_Name( "SpaceGroupOnRightBBNWZ", param, 5 ) ); SetSize( T, Size( S ) ); # Reverse each relator in the presentation of G and construct the f.p. # group defined by these reversed relators. rels := List( RelatorsOfFpGroup( G ), rel -> Reversed( rel ) ); cr.fpGroup := F / rels; # Return the transposed group. SetIsAffineCrystGroupOnRight( T, true ); AddTranslationBasis( T, IdentityMat( param[1] ) ); SetIsSpaceGroup( T, true ); SetIsSymmorphicSpaceGroup( T, param[5]=1 ); return T; end ); ############################################################################# ## #M SpaceGroupBBNWZ( , , , , ) . #M SpaceGroupBBNWZ( , ) . . . . . . . . . . . . . . #M SpaceGroupBBNWZ( ) . . . . . . . . . . . ## ## Calls either `SpaceGroupOnRightBBNWZ' or `SpaceGroupOnLeftBBNWZ' ## depending on the value of `CrystGroupDefaultAction' ## InstallGlobalFunction( SpaceGroupBBNWZ, function( arg ) local p; p := CR_Parameters( arg, 5 ); if CrystGroupDefaultAction = RightAction then return SpaceGroupOnRightBBNWZ( p[1], p[2], p[3], p[4], p[5] ); else return SpaceGroupOnLeftBBNWZ( p[1], p[2], p[3], p[4], p[5] ); fi; end ); ############################################################################# ## #M ZClassRepsDadeGroup( , , , , ) . . . . . #M ZClassRepsDadeGroup( , , ) . . . . . . . Z-class reps #M ZClassRepsDadeGroup( , ) . . . in Dade group ## ## 'ZClassRepsDadeGroup' returns a list of representatives of those ## conjugacy classes of subgroups of the given Dade group which consist of ## groups belonging to the given Z-class. ## InstallGlobalFunction( ZClassRepsDadeGroup, function ( arg ) local CR, d, dim, nargs, param, reps; # Check the number of arguments; nargs := Length( arg ); if nargs < 2 then Error( "illegal number of arguments" ); fi; # Evaluate the given Z-class arguments. param := CR_Parameters( arg{ [ 1 .. nargs - 1 ] }, 4 ); # Check the Dade group argument; d := arg[nargs]; dim := param[1]; CR := CrystGroupsCatalogue[dim]; if not IsInt( d ) or d < 1 or Length( CR.parametersDadeGroup ) < d then Error( "Dade group parameter out of range" ); fi; # Construct the list of representative Z-class groups. reps := CR_ZClassRepsDadeGroup( param, d ); return reps; end ); ############################################################################# ## #M FpGroupSpaceGroupBBNWZ( ) . . FpGroup isomorphic to BBNWZ space group ## InstallGlobalFunction( FpGroupSpaceGroupBBNWZ, function( S ) local F; F := CrystCatRecord(S).fpGroup; SetName( F, Concatenation( "FpGroup", Name(S) ) ); return F; end ); CR_InitializeRelators( CrystGroupsCatalogue ); crystcat/read.g0000644001325400021140000000060113232361444013140 0ustar gaehleruser############################################################################# ## #W read.gd GAP library Volkmar Felsch ## #Y Copyright (C) 1997, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ReadPackage( "crystcat", "grp/crystcat.grp" ); ReadPackage( "crystcat", "lib/crystcat.gi" ); ReadPackage( "crystcat", "lib/normalizer.gi" ); crystcat/grp/0000755001325400021140000000000014270745041012652 5ustar gaehlerusercrystcat/grp/crystcat.grp0000644001325400021140000041650713232361444015233 0ustar gaehleruser############################################################################# ## #A crystcat.grp GAP group library Volkmar Felsch ## #Y Copyright (C) 1994, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains functions that allow to access most of the data which ## are listed in the tables of the book "Crystallographic groups of four- ## dimensional space" by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans ## Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978). ## ## ## For each of the dimensions 2, 3, and 4, the tables of the book are ## arranged in the following hierarchical format: ## dimension, ## crystal family, ## crystal system, ## Q-class (geometric crystal class), ## Z-class (arithmetic crystal class), ## space-group type. ## ## The following conventions for local variables are used throughout in all ## functions of this library. ## ## dim = dimension, ## sys = crystal system number with respect to a given dimension, ## qcl = Q-class number with respect to given dimension and crystal system, ## zcl = Z-class number with respect to given dimension, crystal system, and ## Q-class, ## sgt = space-group type with respect to given dimension, crystal system, ## Q-class, and Z-class, ## q = Q-class number with respect to the list of all Q-classes of the ## current dimension, ## z = Z-class number with respect to the list of all Z-classes of the ## current dimension, ## t = space-group type with respect to the list of all space-group types ## of the current dimension, ## CR = catalogue record CrystGroupsCatalogue[dim] for the current ## dimension dim. ## ## For most of the functions in this library there are two versions given, ## a public version and an internal version which are distinguished by the ## prefix "CR_" in the name of the internal version and by different ## parameter lists. The reason for that distinction is that in the public ## functions the arguments are checked for being in range whereas no ## argument checking is done in the internal functions. ## ############################################################################# ## ## GLZ2 . . . . . . . . . . . . . . . . . . . general linear group GL(2,Z) ## GLZ2 := Group( [ [0,1], [1,0] ], [ [1,0], [1,1], ], [ [-1,0], [0,1], ] ); # GLZ2.operations := GLZOps; SetName( GLZ2, "GLZ2" ); SetSize( GLZ2, "infinity" ); ############################################################################# ## ## GLZ3 . . . . . . . . . . . . . . . . . . . general linear group GL(3,Z) ## GLZ3 := Group( [ [0,1,0], [0,0,1], [1,0,0] ], [ [1,0,0], [1,1,0], [0,0,1] ], [ [-1,0,0], [0,1,0], [0,0,1] ] ); # GLZ3.operations := GLZOps; SetName( GLZ3, "GLZ3" ); SetSize( GLZ3, "infinity" ); ############################################################################# ## ## GLZ4 . . . . . . . . . . . . . . . . . . . general linear group GL(4,Z) ## GLZ4 := Group( [ [0,1,0,0], [0,0,1,0], [0,0,0,1], [1,0,0,0] ], [ [1,0,0,0], [1,1,0,0], [0,0,1,0], [0,0,0,1] ], [ [-1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1] ] ); # GLZ4.operations := GLZOps; SetName( GLZ4, "GLZ4" ); SetSize( GLZ4, "infinity" ); ############################################################################# ## #F CrystalGroupsCatalogue . . . . . . . . . . . . . . . . . . . . . . . . . ## ## The data listed in this catalogue are essentially the same as those ## listed in the tables of the book "Crystallographic groups of four- ## dimensional space" by Harold Brown, Rolf Buelow, Joachim Neubueser, Hans ## Wondratschek, and Hans Zassenhaus (Wiley, New York, 1978). ## ## For each of the dimensions 2, 3, and 4 the catalogue contains a record ## 'CR', say, which consists of the folowing components. ## ## 'CR.bZClass' is a Boolean list containing the numbers of those Z-classes ## which are Bravais Z-classes. ## ## 'CR.codedConjugatorDadeGroup' is a list of matrices used to conjugate ## Z-class representative groups into subgroups of Dade groups. Each ## entry is of the form p1 + 140 * p2 + 140^2 * p3 + ... + 140^(dim-1) ## * p_dim, where dim is the given dimension, and the pi's are ## pointers to the list 'CR.rowConjugatorDadeGroup'. (It is addressed ## by pointers which are contained in entries of the list ## 'CR.codedDadeGroupsZClass'.) ## ## 'CR.codedDadeGroupsZClass' is a list which for each Z-class contains in ## form of a sublist of consecutive entries representatives of those ## conjugacy classes of subgroups of Dade groups which contain groups ## from that Z-class. Each entry is of the form d or p * 10 + d, where ## d is the number of a Dade group and p is a pointer to the list ## 'CR.codedConjugatorDadeGroup'. (See also list ## 'CR.nullDadeGroupsZClass'.) ## ## 'CR.codedDecompositionQClass' is a list which for each Q-class contains ## an entry of the form t1 or of the form 10 * t2 + t1, where t1 is a ## pointer to the text string list 'CR_TextStrings.QClass' and t2 is a ## pointer to the text string list 'CR_TextStrings.QConstituents'. ## ## 'CR.codedGeneratorsSpaceGroup' is a list which for each space-group type ## that is not the representative of its Z-Class contains an entry of ## the form p1 + m * p2 + m^2 * p3 + ... + m^(n-1) * pn, where m equals ## 'CR.modulSp', and n is the number of the given non-translation ## generators of the space group, and the pi's are pointers to the list ## 'CR.columnGeneratorSpaceGroup'. ## ## 'CR.codedGeneratorZClass' is a list which for each Z-class representative ## matrix group contains its generators in form of a sublist of ## consecutive entries. Each entry is of the form p1 + m * p2 + m^2 * p3 ## + ... + m^(dim-1) * p_dim, where m equals 'CR.modulZ', and dim is ## the given dimension, and the pi's are pointers to the list ## 'CR.rowGeneratorZClass'. (See also list 'CR.nullGeneratorsZClass'.) ## ## 'CR.codedIsomorphismTypeQClass' provides for each Q-class an entry of the ## form 100 * t + p, where t is the isomorphism type number of the ## respective representative group (with respect to all groups of the ## same order), and p is either zero or a pointer to the text string ## list 'CR_TextStrings.isomorphismType'. ## ## 'CR.codedNormalizerZClass' provides for each Z-class an entry of the form ## 1000 * n2 + n1, where each of n1 and n2 is either zero or a pointer ## to the list 'CR.GeneratorsZClass'. Let us abbreviate that list by ## "gens". Then the normalizer of the representative matrix group of the ## given Z-class can be computed from n1 and n2 as follows. If n1 = 0, ## then the normalizer is one of the Z-class represenative matrix ## groups, and n2 is a pointer to its generators. If n2 = 0, then the ## normalizer is infinite and will be generated by the given group ## together with the list of generators to which n1 points. If both, ## n1 and n2, are non-zero, then n1 point to the generators of some ## Z-class representative which has to be conjugated by the first ## matrix in the lisin pointed to by nin in order to get the normalizer. ## ## 'CR.codedPresentationQClass' provides for each Q-class an entry of the ## form 10 * p + n, where n is the number of generators of the ## representative group of the given Q-class, and p is a pointer to the ## corresponding list of relators in 'CR.relatorNumbersQClass'. ## ## 'CR.codedPropertiesFamily' provides for each crystal family an entry of ## the form 1000 * f + 100 * b + 10 * q + r, where f is the number of ## free parameters, b is the number of Bravais systems in the family, ## and q and r are pointers to appropriate text strings in the list ## 'CR_TextStrings.family' which describe the rational and the real ## decomposition pattern, respectively. ## ## 'CR.codedPropertiesZClass' provides for each Z-class an entry of the form ## 100 * c + 10 * b + d, where c is the order of the associated ## cohomology group, b is the Bravais type of the given Z-class, and ## d is a pointer to a text string in the list 'CR_TextStrings.ZClass' ## which describes the decomposition pattern. ## ## 'CR.columnGeneratorSpaceGroup' is a list of all different columns which ## occur as last column in at least one of the space group generators ## listed in the catalogue. Note that each column in the list has been ## multiplied by the common denominator of its entries. ## ## 'CR.crystalSystemQClass' provides for each Q-class the number of the ## crystal system to which it belongs. ## ## 'CR.dimension' is the given dimension, i.e. 2, 3, or 4. ## ## 'CR.familyCrystalSystem' provides for each crystal system the family to ## which it belongs. ## ## 'CR.fixedPointFreeSpaceGroup' is a Boolean list containing those ## space-group types for which the corresponding space groups are ## fixed-point-free. ## ## 'CR.GLZ is the group GL(dim,Z), where dim is the given dimension. ## ## 'CR.HermannMauguinSymbol' is a list of the Hermann-Mauguin associated to ## the given dimension in the order in which they are listed in the ## International Tables. (Only for dimensions 2 or 3.) ## ## 'CR.hQClass' is a Boolean list containing the numbers of those Q-classes ## which are holohedries. ## ## 'CR.internatTableSpaceGroupType' provides for each space-group type its ## number in the International Tables. If a space-group type splits into ## an enantiomorphic pair, then the corresponding entry of the list ## contains both numbers in the form 1000 * it1 + it2. (Only for ## dimension 3.) ## ## 'CR.modulSp' is an integer used to pack and unpack the entries of list ## CR.codedGeneratorsSpaceGroup. ## ## 'CR.modulZ is an integer used to pack and unpack the entries of list ## CR.codedGeneratorZClass. ## ## 'CR.nameCrystalFamily' provides for each crystal family its family name. ## ## 'CR.nullDadeGroupsZClass' contains for each Z-class a pointer p to the ## list 'CR.codedDadeGroupsZClass' such that, for some n, the entries ## p + 1 to p + n of that list provide representatives of those ## conjugacy classes of subgroups of Dade groups which contain groups ## from the respective Z-class. The last entry points just to the last ## generator in the list. ## ## 'CR.nullGeneratorsZClass' contains for each Z-class a pointer p to the ## list 'CR.codedGeneratorZClass' such that, for some n, the entries ## p + 1 to p + n of that list provide the generators of the ## representative matrix group of the respective Z-class. Additional ## entries point to sublists which represent generators of infinite ## normalizers or conjugating elements which are used to compute certain ## finite normalizers. The last entry points just to the last generator ## in the list. ## ## 'CR.nullQClass' provides for each crystal system the number of Q-classes ## in the preceding crystal systems. An additional entry gives the ## number of all Q-classes. ## ## 'CR.nullSpaceGroup' provides for each Z-class the number of space-group ## types in the preceding Z-classes. An additional entry gives the ## number of all space-group types. ## ## 'CR.nullZClass' provides for each Q-class the number of Z-classes in the ## preceding Q-classes. An additional entry gives the number of all ## Z-classes. ## ## 'CR.orbitLengthSpaceGroup' provides for each space-group type which is ## not the Z-class representative the orbit length associated with that ## space-group type. ## ## 'CR.orderQClass' provides for each Q-class the order of the groups in ## that Q-class. ## ## 'CR.parametersDadeGroup' is a list which for each Dade group of the given ## dimension contains its parameter list [ dim, sys, qcl, zcl ]. ## ## 'CR.QClassZClass' provides for each Z-class the number of the Q-class to ## which it belongs. ## ## 'CR.relatorNumbersQClass' is a list of lists of relators, where the ## relators in the lists are represented by pointers to the list ## 'CR.relatorWordsQClass'. ## ## 'CR.rowConjugatorDadeGroup' is a list of all different rows which occur ## in the matrices which are used to conjugate Z-class representative ## groups into subgroups of Dade groups. (It is addressed by pointers ## which are contained in entries of the list ## 'CR.codedConjugatorDadeGroup'.) ## ## 'CR.rowGeneratorZClass' is a list of all different rows which occur in ## the matrices which are used to generate the Z-class representative ## groups. (It is addressed by pointers which are contained in entries ## of the lists 'CR.nullGeneratorsZClass' and 'CR.codedGeneratorZClass'. ## ## 'CR.spaceGroupIdentity' is the identity matrix of the associated space ## groups. ## ## 'CR.spaceGroupTypeInternatTable' provides for each International Table ## number the corresponding "global parameters" z und t (cf. function ## 'CR_Parameters') in the form 100 * t + z. (Only for dimensions 2 and ## 3.) ## ## 'CR.splittingQClass' is a Boolean list containing the numbers of those ## Q-classes which split into enantiomorphic pairs. (Only for dimension ## 4.) ## ## 'CR.splittingSpaceGroupType' is a Boolean list containing those ## space-group types which split into enantiomorphic pairs. (Only for ## dimensions 3 and 4.) ## ## 'CR.splittingZClass' is a Boolean list containing the numbers of those ## Z-classes which split into enantiomorphic pairs. (Only for dimension ## 4.) ## ## 'CR_TextStrings.roman' is a list of the 23 smallest non-negative integers ## expressed by Roman numerals. ## CR_TextStrings := rec( ); CR_2 := rec( ); CR_3 := rec( ); CR_4 := rec( ); CrystGroupsCatalogue := [ CR_TextStrings, CR_2, CR_3, CR_4 ]; CR_TextStrings.crystalSystem := ["#I Crystal system "," Q-class"," Q-classes","; holohedry (",",",": ", ")"]; CR_TextStrings.family := ["irreducible","decomposition pattern ","1+1","1+1+1","1+1+1+1", "1+1+2","1+2","1+3","2+2","Q-","R-","#I Family ",": ","; ","s", " free parameter"," crystal system"," Bravais flock",";\n#I "]; CR_TextStrings.isomorphismType := ["C1","C2","C3","C2xC2","C4","C5","C6","D6","C2xC2xC2","C4xC2", "C8","D8","Q8","C3xC3","C10","D10","C6xC2","C12","D12","Q12", "A4","C2xC2xC2xC2","C4xC2xC2","C4xC4","D8xC2","<2,2,2>2","(4,4/2,2)", "<2,2/4;2>","<2,2/2>","D16","<-2,4/2>","C6xC3","D6xC3","D(C3xC3)", "D10xC2","C6xC2xC2","C12xC2","D8xC3","Q8xC3","D12xC2","D6xC4", "Q12xC2","<-2,2,3>","A4xC2","(4,6/2,2)","D24","<2,3,3>","S4", "D8xC2xC2","D8xC4","C4^S2","(C2xC2)^S2","D(C4xC4)","C6xC6","D6xC6", "Q12xC3","D(C3xC3)xC2","D6xD6","(3,4,4;3)","D8xC6","D12xC2xC2", "D12xC4","A4xC2xC2","(4,6/2,2)xC2","D24xC2","S4xC2","D8xD6","A5", "D8xD8","D12xC6","D(C6xC6)","(4,6/2,2)xC3","<2,3,3>xC3","D12xD6", "(3,4,4;3)xC2","D6^S2","S4xC2xC2","D12xD8","S5","A5xC2","(D6^S2)xC2", "D12xD12","S5xC2","D12^S2","C2^S4","[3,4,3]"]; CR_TextStrings.QClass := ["Q-constituents ","Q-irreducible; ","R-irreducible; ","C-irreducible; ", "; cc; ","; ncc; ","#I Q-class ","#I *Q-class ","): size ", "; isomorphism type "," Z-class"," Z-classes"," space group", " space grps",",","(",".","H ","; "," = ",";\n#I "]; CR_TextStrings.QConstituents := ["(2,1,1)+(2,1,2)","(4,1,1)+(4,1,2)+(4,3,1)","(4,1,1)+(4,1,2)+(4,3,2)", "(4,1,1)+(4,1,2)+(4,4,1)","(4,1,1)+(4,1,2)+(4,4,2)", "(4,1,1)+(4,1,2)+(4,4,3)","(4,1,1)+(4,1,2)+(4,4,4)","(3,1,1)+2*(3,1,2)", "(4,1,1)+3*(4,1,2)","(3,1,1)+(3,3,1)","(3,1,1)+(3,3,2)","(3,1,1)+(3,4,1)", "(3,1,1)+(3,4,2)","(3,1,1)+(3,4,3)","(3,1,1)+(3,4,4)","(4,1,1)+(4,7,1)", "(4,1,1)+(4,7,2)","(4,1,1)+(4,7,3)","(4,1,1)+(4,7,4)","(4,1,1)+(4,7,5)", "(3,1,2)+(3,3,1)","(3,1,2)+(3,3,2)","(3,1,2)+(3,4,1)","(3,1,2)+(3,4,2)", "(3,1,2)+(3,4,3)","(3,1,2)+(3,4,4)","(4,1,2)+(4,7,1)","(4,1,2)+(4,7,2)", "(4,1,2)+(4,7,3)","(4,1,2)+(4,7,4)","(4,1,2)+(4,7,5)","2*(2,1,1)", "2*(3,1,1)+(3,1,2)","2*(4,1,1)+2*(4,1,2)","2*(4,1,1)+(4,3,1)", "2*(4,1,1)+(4,3,2)","2*(4,1,1)+(4,4,1)","2*(4,1,1)+(4,4,2)", "2*(4,1,1)+(4,4,3)","2*(4,1,1)+(4,4,4)","2*(2,1,2)","2*(4,1,2)+(4,3,1)", "2*(4,1,2)+(4,3,2)","2*(4,1,2)+(4,4,1)","2*(4,1,2)+(4,4,2)", "2*(4,1,2)+(4,4,3)","2*(4,1,2)+(4,4,4)","2*(4,3,1)","2*(4,3,2)", "2*(4,4,1)","2*(4,4,2)","2*(4,4,3)","2*(4,4,4)","3*(3,1,1)", "3*(4,1,1)+(4,1,2)","3*(3,1,2)","(4,3,1)+(4,3,2)","(4,3,1)+(4,4,1)", "(4,3,1)+(4,4,2)","(4,3,1)+(4,4,3)","(4,3,1)+(4,4,4)","(4,3,2)+(4,4,1)", "(4,3,2)+(4,4,2)","(4,3,2)+(4,4,3)","(4,3,2)+(4,4,4)","4*(4,1,1)", "4*(4,1,2)","(4,4,1)+(4,4,2)","(4,4,1)+(4,4,3)","(4,4,1)+(4,4,4)", "(4,4,2)+(4,4,3)","(4,4,2)+(4,4,4)","(4,4,3)+(4,4,4)"]; CR_TextStrings.spaceGroup := ["#I Space-group type ","#I *Space-group type ","; IT(", "; fp-free","orbit size ","(",",",") = ",", IT(","; ",";\n#I ", ")","#I Non-translation generators of ","\n\n"]; CR_TextStrings.ZClass := ["; Z-irreducible","; Z-reducible","; Z-decomposable", "; fully Z-reducible","#I Z-class ","#I *Z-class ", ": Bravais type "," space group"," space groups", "; cohomology group size "," = Z(",")",",","(","B ","/",";\n#I "]; CR_TextStrings.roman := ["I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","XIII", "XIV","XV","XVI","XVII","XVIII","XIX","XX","XXI","XXII","XXIII"]; CR_2.bZClass := BlistList( [1..13], [2,5,6,8,13] ); CR_2.codedConjugatorDadeGroup := [142,421,563]; CR_2.codedDadeGroupsZClass := [2,1,2,1,21,12,32,21,1,12,1,1,1,2,2,2,2,2]; CR_2.codedDecompositionQClass := [325,415,16,416,3,4,3,4,3,4]; CR_2.codedGeneratorsSpaceGroup := [2,1,3,3]; CR_2.codedGeneratorZClass := [16,6,10,26,10,6,26,6,25,6,10,25,6,19,1,19,26,19,6,19,26,6,19,10,2,17]; CR_2.codedIsomorphismTypeQClass := [101,102,102,104,205,412,103,208,107,319]; CR_2.codedNormalizerZClass := [14000,14000,5,6,8,8,8,8,13,13,13,13,13]; CR_2.codedPresentationQClass := [11,21,21,202,212,243,401,462,452,433]; CR_2.codedPropertiesFamily := [3133,2233,1101,1101]; CR_2.codedPropertiesZClass := [114,114,214,122,414,122,111,211,111,111,111,111,111]; CR_2.columnGeneratorSpaceGroup := [[0,0,1],[0,1,2],[1,0,2],[1,1,2]]; CR_2.crystalSystemQClass := [1,1,2,2,3,3,4,4,4,4]; CR_2.dimension := 2; CR_2.familyCrystalSystem := [1..4]; CR_2.fixedPointFreeSpaceGroup := BlistList( [1..17], [1,4] ); CR_2.GLZ := GLZ2; CR_2.HermannMauguinSymbol := ["p1","p2","pm","pg","cm","p2mm","p2mg","p2gg","c2mm","p4","p4mm", "p4gm","p3","p3m1","p31m","p6","p6mm"]; CR_2.hQClass := BlistList( [1..10], [2,4,6,10] ); CR_2.modulSp := 4; CR_2.modulZ := 6; CR_2.nameCrystalFamily := ["oblique","rectangular","square","hexagonal"]; CR_2.nullDadeGroupsZClass := [0,2,4,5,8,9,11,12,13,14,15,16,17,18]; CR_2.nullGeneratorsZClass := [0,1,2,3,4,6,8,10,13,14,16,18,20,23,26]; CR_2.nullQClass := [0,2,4,6,10]; CR_2.nullSpaceGroup := [0,1,2,4,5,8,9,10,12,13,14,15,16,17]; CR_2.nullZClass := [0,1,2,4,6,7,8,9,11,12,13]; CR_2.orbitLengthSpaceGroup := [1,2,1,1]; CR_2.orderQClass := [1,2,2,4,4,8,3,6,6,12]; CR_2.parametersDadeGroup := [[2,3,2,1,0],[2,4,4,1,0]]; CR_2.QClassZClass := [1,2,3,3,4,4,5,6,7,8,8,9,10]; CR_2.relatorNumbersQClass := [[1], [2], [2,10,22,28,40,61,92,129,163,198], [2,10,22,31,34,40,61,92,116,129,166,186,199,228,247], [2,10,22,31,40,61,92,129,174,202], [2,10,22,40,61,129], [2,10,24,28,34,40,62,92,116,142,168,186,201,227,249], [2,10,24,28,40,62,92,142,163,198], [2,10,24,28,40,62,92,142,168,201], [2,10,24,28,40,62,92,142,168,214], [2,10,24,30,40,78,80,100,106,108,109,130,153,175,176,177,179,210,217,219, 220], [2,10,24,33,40,78,80,100,107,108,110,111,112,113,114,115,130,153,175,176, 178,180,181,182,183,184,185,211,218,219,221,222,223,224,225,226], [2,10,24,40,62,142], [2,10,26,28,40,62,104,142,163,209], [2,10,26,28,40,78,92,130,168,209], [2,10,26,28,40,78,92,130,168,216], [2,10,26,28,40,78,93,130,164,216], [2,10,26,40,62,142], [2,10,26,40,78,130], [2,10,40], [2,11,40], [2,11,22,28,40,61,92,142,163,198], [2,11,22,40,61,129], [2,11,22,40,61,142], [2,17,22,28,35,38,40,61,105,117,125,147,172,189,195,198,230,237,244,250, 256], [2,17,22,28,36,37,40,61,105,120,124,147,172,190,194,198,231,236,241,251, 259], [2,17,22,28,36,40,61,105,118,147,172,191,198,233,243], [2,17,22,32,34,40,79,99,116,129,172,192,205,228,248], [2,17,22,32,35,37,39,40,79,96,122,123,128,147,167,186,196,197,205,234,239, 240,245,252,255,260,261,262], [2,17,22,32,35,37,40,79,96,122,123,147,167,186,196,205,234,239,245,252, 260], [2,17,22,32,35,40,79,98,121,147,165,188,212,232,246], [2,17,22,32,40,79,95,129,172,199], [2,17,25,28,40,79,92,133,168,215], [2,17,25,40,79,133], [2,17,26,28,40,61,92,147,163,216], [2,19,26,28,40,61,92,136,173,216], [2,19,26,28,40,61,92,148,173,216], [2,19,26,40,61,136], [2,19,26,40,61,148], [3], [3,10,22,28,40,73,92,129,163,198], [3,10,22,40,61,129], [3,10,22,40,73,129], [3,10,22,41,61,129], [3,10,40], [3,10,41], [3,16,22,40,73,146], [3,16,25,28,40,66,101,143,169,215], [3,16,25,40,79,131], [3,16,40], [3,19,22,41,61,148], [3,19,22,41,73,137], [3,19,25,28,40,79,101,137,168,207], [3,19,25,28,40,79,105,137,173,215], [3,19,25,40,79,137], [3,19,41], [3,21,22,41,61,149], [3,21,22,41,73,136], [3,21,41], [4], [4,10,22,28,35,37,40,74,102,119,126,129,169,187,193,198,229,238,242,253, 257], [4,10,22,28,35,37,40,74,102,119,127,129,169,187,193,198,229,235,242,254, 258], [4,10,22,28,35,40,74,102,119,129,169,187,198,229,242], [4,10,22,28,40,63,102,129,163,200], [4,10,22,28,40,74,92,129,163,198], [4,10,22,28,40,74,102,129,169,198], [4,10,22,40,61,129], [4,10,22,40,63,129], [4,10,22,40,74,129], [4,10,22,40,74,143], [4,10,22,40,78,129], [4,10,22,42,61,129], [4,10,40], [4,10,42], [4,12,24,28,42,63,102,130,170,202], [4,12,24,28,42,78,102,132,168,214], [4,12,24,29,42,63,92,130,168,203], [4,12,24,42,63,130], [4,12,24,42,78,132], [4,12,27,28,42,62,102,144,170,208], [4,12,27,42,63,132], [4,12,42], [4,17,22,28,40,79,102,147,172,213], [4,17,22,40,67,129], [4,17,22,40,74,147], [4,17,22,42,74,147], [4,17,25,28,40,62,102,132,163,206], [4,17,25,40,67,144], [4,17,40], [4,17,42], [4,18,26,48,50,52,54,71,82,84,87,89,139,150,154,157,160], [4,18,26,48,50,52,54,72,81,85,86,90,140,151,156,159,161], [4,20,26,49,51,53,55,56,57,58,59,60,70,83,84,88,91,141,152,155,158,162], [5], [5,10,43], [5,17,42], [6], [6,10,22,28,44,61,92,129,163,198], [6,10,22,40,61,129], [6,10,22,40,62,132], [6,10,22,40,64,129], [6,10,22,40,75,129], [6,10,22,40,75,144], [6,10,22,44,61,129], [6,10,22,44,75,145], [6,10,40], [6,10,44], [6,13,44], [6,16,22,40,75,146], [6,16,40], [6,17,22,44,75,134], [6,17,44], [6,19,22,40,75,148], [6,19,22,44,61,148], [6,19,22,44,75,137], [6,19,22,44,75,148], [6,19,25,28,40,69,92,138,173,215], [6,19,25,40,68,135], [6,19,40], [6,19,44], [7], [7,10,22,28,44,64,97,129,163,212], [7,10,22,28,44,76,94,129,163,212], [7,10,22,44,64,129], [7,10,22,44,65,145], [7,10,22,44,76,129], [7,10,42], [7,10,44], [7,10,45], [8], [8,10,46], [8,17,42], [9], [9,10,22,40,76,129], [9,10,22,40,77,129], [9,10,22,44,61,129], [9,10,22,44,76,129], [9,10,22,44,77,145], [9,10,23,47,76,144], [9,10,40], [9,10,44], [9,10,45], [9,10,47], [9,14,24,28,45,65,103,132,171,204], [9,14,24,45,65,132], [9,14,45], [9,15,44]]; CR_2.rowConjugatorDadeGroup := [[0,-1],[1,-1],[1,0],[1,1]]; CR_2.rowGeneratorZClass := [[-1,0],[0,-1],[0,1],[1,-1],[1,0],[1,1]]; CR_2.spaceGroupIdentity := [[1,0,0],[0,1,0],[0,0,1]]; CR_2.spaceGroupTypeInternatTable := [101,202,303,403,504,605,705,805,906,1007,1108,1208,1309,1410, 1511,1612,1713]; CR_3.bZClass := BlistList( [1..73], [2,7,8,18,19,20,21,36,37,48,58,71,72,73] ); CR_3.codedConjugatorDadeGroup := [79395,118877,176683,176831,177111,177382,177535,178513,178786, 178792,196429,196575,217297,217709,256914,294149,296253,296396, 334898]; CR_3.codedDadeGroupsZClass := [1,2,3,4,1,2,3,4,141,142,191,51,142,123,23,144,134,141,42, 31,81,42,93,13,174,74,141,142,191,81,142,93,123,174,134,2, 61,2,3,184,13,4,2,61,2,51,61,142,143,184,104,113,13,144, 2,61,2,3,184,13,4,2,13,144,2,13,144,2,13,144,142,13,144, 2,13,144,142,2,13,144,13,144,142,13,144,42,163,154,1,42, 163,154,1,42,163,154,1,1,42,163,154,1,1,42,163,154,1,1,1, 1,1,1,1,1,1,1,2,3,4,2,3,4,2,3,4,2,3,4,2,3,4]; CR_3.codedDecompositionQClass := [545,565,85,335,565,566,86,566,106,216,216,226,116,226,226, 126,256,246,136,266,146,236,256,266,156,246,266,4,4,4,4,4]; CR_3.codedGeneratorsSpaceGroup := [4,1,1,14,56,70,14,84,88,102,14,112,56,1,57,62,63,14,70, 71,76,1,14,112,1,113,18,112,8,14,798,1666,1176,1190,1568, 1582,1232,1246,1624,1638,112,126,1428,1442,14,196,1568,1582, 1764,252,112,1568,1092,17,1,104,14,1624,1638,994,238,14,1656, 1922,1670,994,14,1,15,1658,1672,1659,1673,8,994,1002,14,1656, 1670,1,1658,1659,8,994,14,196,210,23212,23226,23408,23422, 23184,23198,23380,23394,112,126,308,322,112,20090,20062,2,28, 28,113,1,1,1582,14,14,28,1,29,14,392,14,406,1,14,15,1,14, 14,196,210,1092,1092,23324,15288,3528,15288,30156,23436,23436, 20194,23325,3536,20194,1582,326550,326648,126,49504,49406,282716]; CR_3.codedGeneratorZClass := [3092,2624,2719,2570,2997,3164,2624,2719,2624,2570,2719,2985, 2570,2985,5062,276,4433,2783,2997,2985,3164,2985,2931,2570, 1071,276,1643,2783,2624,2719,2985,2624,2570,2985,2624,5062,276, 2624,4433,2783,3159,2985,1625,2783,2575,2985,4451,2783,2624, 3159,2985,2624,1625,2783,2719,3159,2985,4433,1625,2783,2997, 3159,2985,1643,1625,2783,2719,2575,2985,2997,2575,2985,1643, 4451,2783,4433,4451,2783,2624,2719,3159,2985,2624,4433,1625, 2783,3884,3121,2624,3884,2624,3121,2570,3884,2570,3121,2803, 3121,3164,3884,2931,3121,3164,3121,2624,2570,3884,2624,2570, 3121,2624,2803,3121,2985,3121,2731,3121,2624,2985,3121,2803, 2985,3121,2931,2985,3121,2931,2731,3121,2803,2731,3121,2624, 2803,2985,3121,3884,2719,2985,3884,5062,276,3884,4433,2783, 2624,3884,2719,2985,2624,3884,5062,276,2624,3884,4433,2783, 2803,3884,2719,2985,6595,3884,5062,276,3005,3884,4433,2783, 2931,3884,2719,2985,204,3884,5062,276,2711,3884,4433,2783,2624, 2803,3884,2719,2985,2624,6595,3884,5062,276,2624,3005,3884, 4433,2783,979,3080,3884,3095,5252,3093,920,824,2636,3884,3095, 5980,3112,424,458,3093,824,2636,3093,5157,2985,2719,3112,458, 2783,3112,6052,3005,2570]; CR_3.codedIsomorphismTypeQClass := [101,102,102,102,104,104,104,109,205,205,210,412,412,412,625, 103,107,208,208,319,107,107,117,319,319,319,640,521,1044, 1548,1548,3666]; CR_3.codedNormalizerZClass := [75000,77000,76000,78000,80000,82000,79000,81000,71,36,72,73,36, 36,19,74037,37,71,36,72,73,36,37,36,37,36,37,36,37,36,37,36,36, 37,37,36,37,48,58,48,58,48,58,58,48,58,58,48,58,58,58,58,58,58, 58,58,58,58,71,72,73,71,72,73,71,72,73,71,72,73,71,72,73]; CR_3.codedPresentationQClass := [11,21,21,21,202,202,202,63,212,212,233,243,243,243,224,401, 452,462,462,443,452,452,423,433,433,433,414,133,84,94,94,75]; CR_3.codedPropertiesFamily := [6144,4244,3444,2277,2277,1301]; CR_3.codedPropertiesZClass := [114,114,214,123,414,223,814,223,814,223,132,242,1614,423,423, 232,442,6414,823,232,842,414,222,114,122,414,222,814,222,814, 422,414,414,222,222,1614,422,112,324,112,124,112,324,324,212, 224,224,212,224,224,624,124,224,624,424,224,224,424,211,121, 231,411,221,231,411,221,231,211,221,231,411,421,231]; CR_3.columnGeneratorSpaceGroup := [[0,0,0,1],[0,0,1,2],[0,0,1,3],[0,0,1,4],[0,1,0,2],[0,1,1,2], [1,0,0,2],[1,0,1,2],[1,1,0,2],[1,1,1,2],[1,1,2,4],[2,0,1,4], [3,1,0,4],[3,2,3,4]]; CR_3.crystalSystemQClass := [1,1,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7]; CR_3.dimension := 3; CR_3.familyCrystalSystem := [1,2,3,4,5,5,6]; CR_3.fixedPointFreeSpaceGroup := BlistList( [1..219], [1,4,7,9,19,33,34,76,142,165] ); CR_3.GLZ := GLZ3; CR_3.HermannMauguinSymbol := ["P1","P-1","P2","P21","C2","Pm","Pc","Cm","Cc","P2/m","P21/m", "C2/m","P2/c","P21/c","C2/c","P222","P2221","P21212","P212121", "C2221","C222","F222","I222","I212121","Pmm2","Pmc21","Pcc2", "Pma2","Pca21","Pnc2","Pmn21","Pba2","Pna21","Pnn2","Cmm2","Cmc21", "Ccc2","Amm2","Abm2","Ama2","Aba2","Fmm2","Fdd2","Imm2","Iba2", "Ima2","Pmmm","Pnnn","Pccm","Pban","Pmma","Pnna","Pmna","Pcca", "Pbam","Pccn","Pbcm","Pnnm","Pmmn","Pbcn","Pbca","Pnma","Cmcm", "Cmca","Cmmm","Cccm","Cmma","Ccca","Fmmm","Fddd","Immm","Ibam", "Ibca","Imma","P4","P41","P42","P43","I4","I41","P-4","I-4", "P4/m","P42/m","P4/n","P42/n","I4/m","I41/a","P422","P4212", "P4122","P41212","P4222","P42212","P4322","P43212","I422","I4122", "P4mm","P4bm","P42cm","P42nm","P4cc","P4nc","P42mc","P42bc","I4mm", "I4cm","I41md","I41cd","P-42m","P-42c","P-421m","P-421c","P-4m2", "P-4c2","P-4b2","P-4n2","I-4m2","I-4c2","I-42m","I-42d","P4/mmm", "P4/mcc","P4/nbm","P4/nnc","P4/mbm","P4/mnc","P4/nmm","P4/ncc", "P42/mmc","P42/mcm","P42/nbc","P42/nnm","P42/mbc","P42/mnm", "P42/nmc","P42/ncm","I4/mmm","I4/mcm","I41/amd","I41/acd","P3", "P31","P32","R3","P-3","R-3","P312","P321","P3112","P3121", "P3212","P3221","R32","P3m1","P31m","P3c1","P31c","R3m","R3c", "P-31m","P-31c","P-3m1","P-3c1","R-3m","R-3c","P6","P61","P65", "P62","P64","P63","P-6","P6/m","P63/m","P622","P6122","P6522", "P6222","P6422","P6322","P6mm","P6cc","P63cm","P63mc","P-6m2", "P-6c2","P-62m","P-62c","P6/mmm","P6/mcc","P63/mcm","P63/mmc","P23", "F23","I23","P213","I213","Pm-3","Pn-3","Fm-3","Fd-3","Im-3", "Pa-3","Ia-3","P432","P4232","F432","F4132","I432","P4332","P4132", "I4132","P-43m","F-43m","I-43m","P-43n","F-43c","I-43d","Pm-3m", "Pn-3n","Pm-3n","Pn-3m","Fm-3m","Fm-3c","Fd-3m","Fd-3c","Im-3m", "Ia-3d"]; CR_3.hQClass := BlistList( [1..32], [2,5,8,15,20,27,32] ); CR_3.internatTableSpaceGroupType := [1,2,3,4,5,6,7,8,9,10,13,11,14,12,15,16,17,18,19,21,20, 22,23,24,25,28,27,30,32,34,26,31,29,33,35,37,36,38,39,40, 41,42,43,44,46,45,47,49,50,48,51,54,53,52,57,60,59,56,55, 58,62,61,65,66,63,67,68,64,69,70,71,72,74,73,75,78076,77, 79,80,81,82,83,84,85,86,87,88,89,95091,93,90,96092,94,97, 98,99,105,103,101,100,106,104,102,107,108,109,110,111,112, 113,114,115,116,117,118,119,120,121,122,123,124,131,132,125, 126,133,134,129,130,137,138,127,128,135,136,139,140,141,142, 146,143,145144,148,147,155,149,153151,150,154152,160,161,156, 158,157,159,166,167,162,163,164,165,168,171172,173,170169,174, 175,176,177,180181,182,179178,183,184,186,185,187,188,189,190, 191,192,194,193,195,198,196,197,199,200,201,205,202,203,204, 206,207,213212,208,209,210,211,214,215,218,216,219,217,220, 221,223,222,224,225,226,228,227,229,230]; CR_3.modulSp := 14; CR_3.modulZ := 19; CR_3.nameCrystalFamily := ["triclinic","monoclinic","orthorhombic","tetragonal","hexagonal", "cubic"]; CR_3.nullDadeGroupsZClass := [0,4,8,10,17,19,26,28,35,36,38,40,42,43,45,48,51,54,55, 57,59,61,62,64,65,67,68,70,71,73,74,76,77,78,80,82,83,85, 88,89,92,93,96,97,98,101,102,103,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126, 127,128,129,130,131]; CR_3.nullGeneratorsZClass := [0,1,2,3,4,5,6,8,10,12,14,16,18,20,22,24,26,28,31,34,37, 40,42,44,46,48,51,54,57,60,63,66,69,72,75,78,82,86,87,88, 90,92,94,96,98,100,102,104,107,110,113,115,117,120,123,126, 129,132,136,139,142,145,149,153,157,161,165,169,173,177,181, 186,191,196,197,200,204,207,211,214,218,221,225]; CR_3.nullQClass := [0,2,5,8,15,20,27,32]; CR_3.nullSpaceGroup := [0,1,2,4,5,7,9,13,15,19,21,22,24,34,37,41,43,46,62,68, 70,74,77,79,80,81,85,87,93,95,103,107,111,115,117,119,135, 139,140,142,143,144,145,147,149,151,153,155,157,159,161,165, 166,168,172,176,178,180,184,186,187,189,192,194,196,199,201, 203,205,207,209,213,217,219]; CR_3.nullZClass := [0,1,2,4,6,8,12,17,21,23,25,27,29,31,35,37,39,41,44,47, 50,51,52,53,54,55,57,58,61,64,67,70,73]; CR_3.orbitLengthSpaceGroup := [1,3,1,3,1,3,1,3,3,1,1,1,2,1,2,1,1,2,2,2,2,1,2,1,1, 1,1,2,1,3,3,1,6,6,6,6,6,6,3,3,3,3,6,2,1,2,1,1,2,1, 3,3,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,2,2,1,1,1,1,1,1,2,1,2,1,2,1,2,1,1,1,1,1,1,1, 1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1]; CR_3.orderQClass := [1,2,2,2,4,4,4,8,4,4,8,8,8,8,16,3,6,6,6,12,6,6,12,12,12, 12,24,12,24,24,24,48]; CR_3.parametersDadeGroup := [[3,6,7,1,0],[3,7,5,1,0],[3,7,5,2,0],[3,7,5,3,0]]; CR_3.QClassZClass := [1,2,3,3,4,4,5,5,6,6,6,6,7,7,7,7,7,8,8,8,8,9,9,10, 10,11,11,12,12,13,13,14,14,14,14,15,15,16,16,17,17,18,18, 18,19,19,19,20,20,20,21,22,23,24,25,26,26,27,28,28,28,29, 29,29,30,30,30,31,31,31,32,32,32]; CR_3.relatorNumbersQClass := CR_2.relatorNumbersQClass; CR_3.rowConjugatorDadeGroup := [[-1,-1,-1],[-1,-1,0],[-1,0,0],[-1,0,1],[-1,1,0], [0,-1,-1],[0,-1,0],[0,-1,1],[0,0,1],[0,1,-1], [0,1,0],[0,1,1],[1,-1,0],[1,0,-1],[1,0,0], [1,0,1],[1,1,1],[1,1,2]]; CR_3.rowGeneratorZClass := [[-1,-1,-1],[-1,-1,1],[-1,0,0],[-1,0,1],[-1,1,0],[0,-1,0], [0,-1,1],[0,0,-1],[0,0,1],[0,1,-1],[0,1,0],[0,1,1],[1,-1,0], [1,0,-1],[1,0,0],[1,0,1],[1,1,-1],[1,1,0],[1,1,1]]; CR_3.spaceGroupIdentity := [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]; CR_3.spaceGroupTypeInternatTable := [101,202,303,403,504,605,705,806,906,1007,1207,1408,1107,1307, 1508,1609,1709,1809,1909,2110,2010,2211,2312,2412,2513,3113, 2713,2613,3313,2813,3213,2913,3413,3013,3514,3714,3614,3815, 3915,4015,4115,4216,4316,4417,4617,4517,4718,5018,4818,4918, 5118,5418,5318,5218,5918,5818,5518,6018,5718,5618,6218,6118, 6519,6819,6319,6419,6619,6719,6920,7020,7121,7221,7421,7321, 7522,7622,7722,7622,7823,7923,8024,8125,8226,8326,8426,8526, 8627,8727,8828,9128,8928,9228,9028,9328,8928,9228,9429,9529, 9630,10030,9930,10330,9830,10230,9730,10130,10431,10531,10631, 10731,10832,10932,11032,11132,11233,11333,11433,11533,11634, 11734,11835,11935,12036,12136,12436,12536,13236,13336,12836, 12936,12236,12336,12636,12736,13436,13536,13036,13136,13637, 13737,13837,13937,14139,14239,14239,14038,14441,14340,14643, 14844,14743,14944,14743,14944,14542,15246,15447,15346,15547, 15045,15145,15849,15949,16050,16150,15648,15748,16251,16551, 16551,16351,16351,16451,16652,16753,16853,16954,17254,17254, 17054,17054,17154,17355,17455,17655,17555,17756,17856,17957, 18057,18158,18258,18458,18358,18559,18760,18861,18659,18961, 19062,19162,19363,19463,19564,19262,19664,19765,19965,20066, 20166,20267,19865,19865,20367,20468,20669,20870,20568,20769, 20970,21071,21271,21171,21371,21472,21572,21772,21672,21873,21973]; CR_3.splittingSpaceGroupType := BlistList( [ 1 .. 219 ], [76,89,92,142,147,149,163,165,170,172,198] ); CR_4.bZClass := BlistList( [1..710], [2,7,8,12,13,14,34,35,36,37,38,39,53,86,87,88,89,90,91, 92,93,108,109,120,130,131,133,173,242,243,244,245,246,295, 296,329,330,331,332,333,337,338,359,378,379,419,428,464,482, 507,563,564,565,566,567,569,574,576,604,621,636,637,691,710] ); CR_4.codedConjugatorDadeGroup := [4273681,6400667,8480660,9279532,11195122,12279467,12298451,12357446, 15623922,16613802,19260299,19325973,19338622,21004202,22465651, 25279713,26836042,28656840,31486984,33244423,33246395,36157062, 36697684,38833653,41968382,44304724,44306282,44363772,45130978, 45337662,45343783,45784833,46572214,47083975,47317495,47397622, 48109758,48237718,49885273,50081235,51253736,52059902,52533832, 55437104,55553703,55555115,55574723,55789055,56101272,56102655, 56162732,57492995,57493012,57494114,58023035,58431983,60708505, 60747994,60822328,60823741,60825332,60933786,61155935,61158054, 61216434,61217245,61274523,61389605,61588992,63349460,63376504, 63493248,63508795,63508934,63546728,63548155,63549675,63604695, 63605108,63605942,63663387,63664324,63804066,63804487,63804624, 63804626,63807003,63811766,63862367,63921812,63980875,64018544, 64021624,64137261,64137683,64137684,64137687,64137703,64140233, 64235684,64236099,64354121,64371353,64373855,64470184,64470461, 64470884,64604452,64604453,65725012,66724894,69053908,69054764, 69056855,69066244,69163383,69508195,69527678,69565344,69626658, 69722984,69800681,69843532,71449321,72153765,74193323,77232724, 77585524,78052841,78052983,78052987,78053401,78053406,78053680, 78053683,78053684,78873935,80453739,82383716,83069624,85693922, 88404015,88424440,89811601,90220655,91360562,93731575,93749676, 93990720,93991022,94000098,94049515,94144560,94145297,94167383, 94318062,94402300,94435083,94525188,96497283,96594861,96595283, 96595284,96646684,96709223,96715422,96849822,96889263,96944864, 97003944,97009124,97084602,97087783,97123763,97123802,97124043, 97160044,97165504,97199664,97204424,97223164,97261260,97261266, 97261401,97261683,97261687,97261824,97261826,97264204,97277358, 97283267,97303124,97318514,97398601,97398883,97426038,98124517, 99809001,101220593,102435678,104963063,105118346,105177144,105179776, 105179923,105391650,105491164,105501275,105515550,105531615, 107883357,108140112,110197006,110610142,110668942,110785343, 110950612,112021303,112270943,112962124,112972335,113058164, 113061524,113137486,113193264,113196183,113196222,113369253, 113375115,113376112,113529243,113686904,113726523,113736472, 113884749,113956684,114747111,115518080,116058522,117390613, 118450126,118684357,118686726,118745508,118778275,118783303, 118798855,118823915,118898424,118898523,118900903,118901264, 118901615,118902315,118918123,119074923,119074962,119075763, 119117465,119117591,119195194,119214521,120488549,121194121, 121542872,121544700,121546903,121646337,121662343,121664503, 121664542,121671914,121758723,121761702,121780558,121781453, 121957692,121958521,122114674,124330002,124488183,126679743, 126681704,126682123,126682124,126916222,126918720,126975403, 127074103,127074142,127095115,127152503,127152542,127187664, 127249422,127251923,127251924,127427176,127444143,127446519, 127486992,127487272,127487552,128465703,129424592,129716346, 129719250,129815762,129818103,129835323,129835362,129837703, 129838442,129874523,129874562,129876942,129879322,129995649, 130346222,131229342,132461757,132579328,132902595,133805883, 133931728,134659472,134896493,135145544,135160113,135482363, 135579684,139346101,140793123,140793722,142416874,143007661, 143007801,143008083,143088733,143245818,143301783,143478468, 143478502,143497783,143534066,143536563,143536602,143556902, 143595783,143596242,143598324,143615702,143623386,143691569, 143694068,143729623,143735822,143804284,143811261,143811401, 143811683,143811684,143889365,143906045,143908987,143909266, 143909401,143909407,143909687,143909824,143912169,143951124, 143984729,144043244,144043526,144046460,144046883,144047024, 144047026,144058224,144063553,144871043,145634912,145990618, 146009419,146120862,146136109,146454023,146459944,146460222, 146469882,146548284,146674135,146695115,146799706,147614890, 149198344,149610766,151966145,154716260,155552903,156808724, 156865704,156905324,156921385,157157744,157355695,157371664, 157433401,157433683,157628564,157629260,157629266,157629401, 157629683,157629684,157631644,158747155,160011634,164016851, 165317789,165958163,166020021,167790612,168410783,170524795, 170682584,170682861,170682866,170683006,170683284,170816844, 170820061,170820066,170820206,170823013,170876764,170918475, 170918492,170935564,170937655,170938232,170977292,170995346, 170996875,171035252,171035655,171035795,171035812,171039457, 171055692,171151980,171152020,171152983,171152984,171153261, 171153401,171153406,171153407,171153543,171153683,171153684, 171153826,171154684,171165583,171251266,171251687,171251824, 171255463,171388052,171389733,171389855,171391552,171485003, 171508026,172169252,172341709,172739034,172742693,173328575, 173628193,174092146,174096229,174136122,174190160,174195053, 175429162,176069896,176075689,176289703,176405792,176425795, 176425812,176525064,176662103,176683562,176835995,176836134, 176837248,176838533,176838672,176839093,176854112,176859549, 176860522,176977282,176978682,177049063,179054884,179267833, 181427494,182286904,182286927,182288714,182326550,182484449, 184815843,184893683,185030926,185090286,187628482,189698662, 190557687,190600682,190811390,192160007,193127686,193323518, 193442795,196026785,198446904,200706302,201673422,203352398, 203411195,204027793,204106189,204359435,204437275,207260107, 209678062,209685034,209708584,210904042,212461485,212461611, 214156126,214894765,214907506,215828706,216925333,220802872, 223509220,227338635,229114262,229133722,233222658,234926586, 236132345,236891767,237759067,237812967,241385693,243228437,244256273]; CR_4.codedDadeGroupsZClass := [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1321,2032,233, 2978,1341,2181,3091,4702,4732,2173,4513,3524,3165,3205,1166, 3537,3058,3509,2219,1321,2032,233,1698,1011,3251,3221,4182, 1372,3233,4073,3184,3215,2115,2026,1977,2128,899,3249,1321, 2032,233,1698,1341,2181,3091,4702,4732,2173,4513,3524,3165, 2155,1166,3537,3058,3509,2219,1,1321,5,2208,771,1021,3752, 3022,4822,692,623,1233,603,4803,678,4469,4261,4721,2384,1424, 5424,4944,1565,495,1535,4525,1036,4196,1567,47,458,3649,1,5, 3488,1021,3022,692,1233,603,988,4469,4261,5434,2404,1735,1725, 4645,746,3907,4958,3649,4091,1678,1291,2181,4635,4388,521,4931, 3742,3802,443,3723,4328,3012,4243,4913,4429,541,481,164,5015, 5025,3925,3906,3897,4958,3719,3032,5522,513,919,1361,2418,3091, 2181,1291,2155,2145,2878,521,4921,3742,3802,1273,3723,4328,531, 4931,1772,1782,263,1923,478,2342,4763,4393,4913,889,5501,5491, 5611,21,5644,5515,5475,5625,5605,1386,5657,5598,4029,19,2602, 152,5462,4203,1269,4101,1678,1311,3041,3655,3438,1101,4491, 1792,1802,713,1893,878,2342,4763,4393,4429,5501,5481,174,5585, 105,145,136,127,118,1489,2592,5452,4053,669,1321,2418,1291, 2181,3165,4388,521,4921,3742,3802,1273,3723,4328,3012,4243, 4913,4429,1571,1551,5434,1655,1045,3915,5016,5007,3948,3719, 3032,5522,513,4659,5634,2764,2374,305,325,5326,706,277,5247, 288,1698,961,2438,1841,1601,908,4172,4043,4172,1283,4043,3999, 4331,4571,1,4345,4155,3488,4112,1193,5122,2322,1703,1179,4239, 4509,1404,315,5076,5337,288,8,951,4498,4172,1283,4539,1,5, 2998,4112,3283,1179,4509,1698,1951,3601,4438,3621,2788,4172, 3283,4172,1283,1213,3999,3591,3361,2551,4355,4165,3488,4112, 3283,5122,2322,1703,1179,4239,4509,1698,1951,3601,4438,4301, 2338,4172,4403,4043,4172,1713,789,1941,3601,2481,955,4145,3488, 4112,2322,1703,4112,3283,4759,3429,639,8,3611,2968,4172,3283, 4539,3601,5,2998,4112,3283,1179,4509,1351,4488,612,5033,99, 1301,4488,432,5033,4879,1351,4488,612,5033,99,1321,4488,1321, 4488,612,5033,99,612,723,99,1331,4488,4992,5033,4879,1351, 4488,4992,723,4879,1321,4488,612,723,99,2792,333,5254,2366, 417,5118,5299,5579,1,4595,2882,3823,5384,1516,3267,3878,5409, 1599,1,2715,3192,423,1964,2196,297,5228,5299,189,1,4595,1, 4635,3192,423,1964,2196,297,5228,5299,189,1,4615,1,4595,3072, 3963,5394,1526,3837,3298,5409,2089,1,2715,1,2905,1,3685,1, 2935,1,3695,1,3675,1,3675,1,2715,1,2905,1,3695,4475,2318, 3009,2664,3155,3359,2664,4345,2249,5564,3404,1505,1645,3576, 2356,4717,1087,468,3458,1071,4271,2628,1132,4083,3512,1003, 1549,4699,5444,3905,3585,1666,747,468,928,4311,2648,1132,1003, 5109,3989,5554,3854,1665,4785,5006,2636,3907,1097,468,3458, 3458,1061,4311,2628,1051,4291,2628,1132,4033,1132,4033,3512, 2943,3512,3313,1549,1549,4699,4699,5554,3854,4975,4785,5006, 2636,3907,1097,468,3458,3458,1061,4291,2628,1051,4291,2628, 1132,933,1132,4033,3512,3313,3512,3313,1549,1549,4699,4699, 5414,3575,4795,4986,737,468,928,928,4281,2648,1071,2648,1132, 3313,1132,3313,5109,5109,3989,3989,3458,1071,4271,2628,1132, 4083,3512,1003,1939,3939,3458,1611,3371,2828,1132,4083,3512, 1003,1419,3979,4458,4561,961,1688,2032,2223,2032,2073,1439, 3979,4458,941,4541,1688,4062,2233,4062,4373,1479,5099,928,3371, 2858,1132,1003,1419,3979,3458,1061,4311,2628,1132,4033,3512, 2943,4969,5099,3458,3458,1631,3361,2828,3371,1621,2858,1132, 4033,1132,4033,3512,2943,3512,3313,589,1419,3979,769,3458,1051, 4291,2628,1132,4033,3512,2943,1939,3939,3498,4551,1688,2032, 2073,1439,3979,928,3381,2858,1132,2833,1419,3979,2392,2583, 2658,4854,1126,5357,2759,5369,1,3081,1835,4665,3332,1753,3448, 5194,646,77,259,4819,2911,3081,835,3795,2052,3413,2678,2052, 3413,2678,5154,3066,5267,5169,59,574,3066,377,5169,59,2911, 2911,3081,4345,4135,3081,3705,3785,2392,2563,2678,5284,796,87, 1499,2069,2911,3081,2505,2545,3302,1743,2298,364,806,387,1499, 819,2911,3081,3125,3135,2392,2583,2658,4224,796,5347,2759,5379, 1,1,3081,1835,4685,3081,1865,4675,2392,2583,2658,3734,596, 5347,2759,5379,1,1,3081,1875,4685,3081,1865,4665,3332,1753, 3448,344,656,197,259,4219,2911,2911,3081,835,3795,3081,845, 3795,2012,2573,3448,5134,1186,197,259,4219,2911,2911,3081,845, 3765,3081,855,3775,2802,1763,2678,5174,756,67,1499,3849,2911, 2911,3081,2465,2535,3081,3145,3175,2911,1,1885,4665,1,1,3145, 1,1,2895,1,1,1825,4155,1,1,1,3115,1,3105,2911,1,1835,4125, 1,1,1,2515,1,2465,1,1,3665,2911,1,3695,5235,1,1,1,2705,1, 2925,1,1,865,1,1,975,3485,2868,568,2619,1115,4258,4779,2694, 2455,2284,2455,5544,2524,2305,1445,1459,2494,1855,4744,2725, 225,2169,3885,3398,2268,2049,4975,4785,3398,4448,2268,2009, 2049,3865,4368,2268,3478,2258,2009,2009,2049,3565,3398,2268, 2268,2049,1589,505,3398,2268,4448,2268,2009,2009,1589,2848, 2109,2268,3959,2268,3329,3478,3478,2109,559,2268,3959,2268, 2009,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,204,34,995,4625, 4014,4905,4585,214,4004,995,3884,4004,995,4625,4625,1394,5085, 4605,5154,1209,5,3814,5539,5,4864,3279,1209,4585,4585,2094, 5279,1209,4585,4585,5144,1209,684,1209,5,5,4585,354,2139,5539, 5,4585,394,5539,5,5,1904,1209,5,4585,5,1914,5209,1209,4585, 4585,5,5,5184,1209,5,5,5,404,5539,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5046,4837,4888,8,2,3559,3,1259,5046,4837, 4898,8,2,1159,3,1249,5066,4847,4888,8,2,3559,3,1259,5066, 4847,4888,8,2,3559,3,1259,5056,5067,4898,8,2,1159,3,1249,8, 2,3559,3,1259,8,2,3349,3,1259,8,2,3559,3,1259,8,2,3559,3, 1259,8,2,1159,3,1249,8,2,1159,3,1249,8,2,3559,3,1259,8,2, 3559,3,1259,8,2,3349,3,1259,8,2,3349,3,1259,8,2,1159,3, 1249,4348,2989,2478,2989,826,1227,3546,2447,826,3637,826,1987, 3546,1817,2735,5219,1145,5219,4,2424,4585,4,4585,4,4,4,2685, 5,4,4,2685,5,4,5,4,5,5,4,4,5,2685,4,4,5,2685,4,5,5, 4585,2685,2685,4605,4585,4585,2685,4585,4585,5,5,5,5,5,5, 2816,2816,2777,2777,2956,7,6,7,6,7,6,7,6,7,6,7,3468,9, 3478,2749,3478,2749,2278,9,4418,9,1469,3478,2749,3468,9,3478, 2749,3468,8,2278,5319,5319,8,9,4418,1999,249,3468,9,3468, 3468,9,9,2278,8,1999,9,2278,5319,8,9,9,3468,9,8,1999,9,8, 9,9,8,9,9,8,1999,9,2749,5309,9,5309,9,9,2749,2749,9,9, 2749,2749,9,9,9,9,9]; CR_4.codedDecompositionQClass := [665,675,555,95,675,345,675,345,95,675,675,96,676,96,676,676, 425,355,425,435,435,365,435,375,465,385,455,475,395,445,465, 405,475,455,475,485,505,525,26,426,36,436,436,26,426,436,36, 426,36,436,436,436,436,66,46,56,466,476,76,476,56,456,476, 66,446,466,76,456,76,456,466,476,476,476,476,495,515,535, 486,576,496,496,496,576,486,576,496,496,496,586,606,596,596, 606,646,636,626,616,646,656,636,656,616,616,656,636,646,656, 656,656,656,696,526,726,536,506,526,686,716,516,736,536,516, 726,536,536,696,526,736,706,726,716,736,536,536,726,536,166, 286,196,296,316,176,276,186,306,286,316,206,316,306,296,316, 2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,3,3,3,3,3,4,3,4, 4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,3,4,4,4,4,4, 4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4]; CR_4.codedGeneratorsSpaceGroup := [4,42,1,1,4,6,15,1,15,1,19,4,23,1,15,19,401,415,419,1515, 1519,1542,1546,2319,2346,1500,1515,1542,1500,1,1501,15,1515, 19,1519,4200,4201,4215,4219,1500,1515,42,1542,1554,442,1500, 1542,401,15,419,1515,4,1,6,100,104,101,106,1500,1504,1501, 1506,1900,1904,1901,1906,4,1500,1504,1500,1,1501,100,1900,101, 1901,100,1500,1900,4200,4600,4,1500,1504,4200,4204,1500,1500, 104,15,1,19,401,419,15,1500,100,1900,15,400,15,1,401,4,6, 404,406,15,19,415,419,23,27,423,427,104,106,606,115,119,615, 619,123,127,623,627,1515,1519,2319,1523,1527,2323,2327,1542, 1546,2346,1549,1550,2349,2350,1923,1927,2727,1949,1950,2750,4, 15,23,1515,1523,1542,1549,1,15,19,42,46,100,101,115,119,142, 146,1500,1501,1515,1519,1542,1546,1900,1901,1915,1919,1942, 1946,400,42,442,15,415,1542,2342,1515,2315,1554,2354,4242, 4942,1500,1542,15,104,123,1515,15,1,19,54,58,119,154,454, 458,4,1,6,101,106,5400,1,5401,401,6101,5400,1,5401,100,54, 154,4954,5054,400,4200,4942,5400,1,100,442,642,5400,400,49,1, 19,115,119,419,619,6,27,123,623,154,458,654,658,63,1923, 2346,2358,1,5400,58,101,158,6,63,106,104,163,5804,606,663,1, 4900,58,158,49,50,150,2349,2350,2342,2300,4215,2349,4923,5400, 6300,1,4204,1506,5400,400,2715,23,42,1,46,49,50,142,101,146, 104,149,106,150,1542,1546,1504,1549,1506,1550,1942,1946,1949, 1906,1950,4242,4246,4249,4250,4646,4649,4650,5449,5450,5850, 10100,10142,10146,10149,10150,11542,11546,11504,11549,11506, 11550,11942,11946,11904,11949,11950,14242,14246,14249,14250, 14642,14649,14650,15449,15450,15849,41500,41542,41501,41546, 41549,41550,41900,41942,41901,41946,41950,44242,44201,44246, 44642,44601,44646,44650,45400,45442,45401,45446,45450,45800, 45842,45801,45846,45850,61900,61942,61946,61949,64642,64646, 65400,65442,65446,65800,65842,65846,235442,235446,235846,275842, 40000,40001,540000,610000,540001,610001,400,40400,401,40401, 540400,610400,540401,610401,545400,615400,615401,6100,46100,6101, 46101,546100,616100,546101,616101,10400,60400,10401,580400,630400, 580401,630401,586100,636100,586101,40000,1,40001,40100,101,40101, 40400,40401,40601,540000,610000,540001,610001,610100,540101, 610101,610400,610401,610601,10000,60000,10001,60001,10100,60100, 60101,60400,60401,60600,580000,630000,580001,630001,580100,630100, 630101,630400,630401,630600,490000,1,490001,490100,101,490101, 494900,494901,495001,540100,540101,230101,544900,544901,545001, 10100,500100,505000,585000,540000,540049,100,540100,149,540149, 5400,545400,5449,545449,5800,545800,5849,545849,490100,230100, 490149,230149,495400,235400,495449,495800,235800,495849,235849, 10100,580100,580149,15800,585800,15849,585849,505800,275800, 505849,54,42,540000,540042,540015,540400,540454,540415,420000, 420054,420400,420454,420415,150442,424200,540000,54,600,540600, 654,10000,1,10100,150404,190404,150406,190604,540000,10000, 580000,10100,580100,44204,614204,64204,634204,64604,634604,54, 540000,400,454,540400,540000,40000,610000,40400,610400,190004, 194649,10404,42,100,142,146,49,149,50,1549,1949,40000,40042, 40100,40142,40001,40046,40146,40004,40049,40104,40149,40006, 40050,40150,41542,41942,41546,41549,41949,41550,230000,230042, 230100,230142,230001,230046,230101,230146,230004,230049,230104, 230149,230106,230150,231500,231542,231900,231942,231901,231946, 610000,610042,610100,610142,610001,610046,610004,610104,611542, 611942,100,540000,540100,104,540104,40000,40100,610000,610100, 40004,40104,610004,610104,60000,60100,630000,630100,60004,630004, 100,40000,40100,1,40001,540000,540100,610000,610100,540001, 610001,400,600,40400,40600,401,40401,540400,540600,610400,610600, 540401,610401,100,230000,230100,230049,230149,540000,540100, 490000,490100,540049,540149,10000,10100,270000,270100,270049, 270149,580000,580100,500000,500100,580049,580149,4900,100,5000, 230000,234900,230100,235000,230101,235001,400,150000,150042,40000, 40400,230000,230400,230042,230442,60000,54,60054,100,10000,10100, 490404,490604,500404,500604,100,540000,540100,400,40000,40400, 540000,40000,610000,464242,15,42,54,115,142,154,420015,420100, 420115,420154,46,58,158,420119,23,61,123,161,420123,420161,63, 442,454,642,654,420415,420600,420615,401,419,446,458,619,646, 658,420401,420419,420446,420458,420619,449,461,623,649,661, 420449,420461,420623,420661,406,427,450,463,650,663,420406, 420427,420450,420463,420650,420663,2342,2354,2742,2754,422700, 2346,2358,2746,422301,2349,2749,2306,2350,422306,424200,424215, 424615,424201,424219,424619,424223,424623,424227,424901,424919, 425019,425023,424906,424927,426106,10415,10442,10454,10600,10615, 10642,10654,460415,460454,460600,460615,460654,10446,10458,460401, 460419,460619,10449,10461,10604,10623,10649,10661,460461,460604, 460623,460649,460661,10406,10427,10450,10463,10663,460406,460427, 460450,460463,460663,12342,12700,12715,12742,12754,462300,462342, 462700,462715,462742,12304,12349,12704,12749,462304,462349,462704, 12706,12750,462706,14654,464600,464615,14223,14261,14623,464261, 464623,464661,464663,15042,15054,464915,465000,465015,14923,14961, 15004,15023,15049,15061,464923,464961,465004,465023,465061,14927, 14950,14963,15063,464906,464927,464963,465027,16100,16300,16315, 16342,466100,466300,466315,466354,16104,16149,16304,466104,466304, 466349,466306,62342,62700,62742,62754,502342,502700,502742,502754, 62346,62358,62349,505000,505015,65400,65800,505800,66300,506300, 636300,1,400,401,10400,10401,6,100,600,601,10100,10101,10600, 10601,104,10104,10106,5400,5401,6100,6101,15400,16100,16101, 5404,5406,15404,5800,6300,6301,15800,15801,16300,16301,5804, 15804,15806,40100,40101,40600,60101,60600,60601,60606,45400, 45401,46100,46101,65400,65401,66100,46104,46106,66104,45800, 45801,46300,65800,65801,66300,66301,46304,66304,66306,545400, 545401,546100,546101,586100,586101,545406,545800,546300,546301, 585800,585801,586300,586301,545804,585804,585806,615800,615801, 616300,635801,636300,636301,636306,1,544900,58,4900,4901,540000, 4958,27,540049,4927,100,545000,158,5000,5001,540100,149,150, 545049,540149,5027,5400,5401,545400,2358,542349,5427,2350,5800, 545800,542749,10100,585000,10158,15000,15001,580100,580149,15027, 15400,15401,585400,12358,582349,15427,12350,15800,585800,582749, 495400,232358,235401,492349,235427,495800,232749,492749,505800, 502749,15,42,54,6142,23,5442,454,442,5404,5423,5449,2354, 45400,45442,40454,40442,44254,41554,60000,545400,635400,65400, 636300,1,54,58,100,154,44204,41506,44261,41563,44604,44661, 10100,10154,64604,64661,40000,4,40004,540000,540004,400,40400, 540400,10042,10149,17,15,17,15,4,100,1500,1900,100,1500,15, 404,423,400,1500,2300,1500,1542,100,1500,4400,4200,404,5204, 4904,1700,1500,404,4200,404,4904,15,4215,1515,423,4923,2323, 4200,406,15,4215,427,54,4254,463,6,15,27,40000,40006,40015, 40027,150015,150027,150000,150006,150054,150063,230015,230027, 230000,230006,230054,230063,15,54,10004,610049,610004,150015, 150000,150042,43,16,15,15,15,4300,1600,1600,15,15,15,18,16, 15,15,1500,15,1515,4215,1800,1600,1500,15,15,15,1500,1515, 1542,17,15,42,3,1,42,4,42,100,1500,2300,5400,6100,100,4200, 4600,100,400,600,600,400,100,4200,54,1500,42,1542,404,2304, 449,2349,15,1515,54,1554,423,2323,461,2361,1500,100,1900,42, 1542,142,1942,15,1515,115,1915,54,1554,154,1954,5400,401,6101, 1500,2301,100,54,154,4200,4600,100,454,654,1,101,458,658,100, 5400,5800,1,101,5401,5801,100,2354,2754,400,600,1554,1954,100, 5400,5800,1515,1915,4215,4615,650,606,42,406,100,42,15,54, 4600,100,4200,5400,2304,1500,404,6104,1700,1500,404,2904,2304, 42,1742,1542,449,2949,2349,1700,1500,100,2200,1900,42,1742, 1542,142,2242,1942,100,4200,4600,401,1500,2301,300,100,1554, 3454,1954,300,100,1515,3415,1915,1,1515,1519,1,1500,1501,15, 100,115,800,600,100,2346,1500,446,54,15,40001,40019,150015, 150000,230019,230001,420015,490001,490019,540015,540000,610019, 610001,40023,6,27,230023,150027,150006,490023,420027,610023, 540027,540006,54,40058,150054,230058,490058,540054,610058,63, 150063,540063,6,15,27,40000,10000,40015,40027,150015,150027, 150000,150006,230015,230027,230000,190000,420015,420027,490015, 490027,540015,540027,540000,540006,610015,610027,610000,580000,54, 63,40054,40063,150054,150063,230054,230063,540054,540063,610054, 610063,60000,54,60054,10000,40000,10054,40054,420000,500000, 460000,490000,540000,40004,40061,6,63,150000,230004,150006,1, 10001,10000,49,50,10050,10049,40054,150001,190001,60054,40023, 150050,190050,60023,1,490000,50,10001,10000,10050,500000,40015, 150019,420015,150063,190019,60015,190063,460015,15,150000,630063, 54,630027,40006,610027,40050,15,54,630054,630042,630000,10000, 420000,540000,610061,610004,10046,50,150000,150050,150027,1700, 1500,42,1742,1542,6,1706,1506,50,1750,1550,15,1715,1515,54, 1754,1554,27,1727,1527,63,1763,1563,5600,5400,6,5606,5406,300, 100,1,301,101,1554,3454,1954,1558,3458,1958,100,49,149,400, 600,449,649,117,15,42,184,54,406,4900,4206,100,1500,1900,42, 142,1542,1942,100,100,2300,2700,1,400,401,600,100,400,1500, 2300,42,442,1542,2342,401,100,1515,1915,100,1554,1954,15,401, 4400,4200,1500,6700,5400,400,5200,4900,2300,7100,6100,15,4415, 4215,1515,6715,5415,415,5215,4915,2315,7115,6115,5600,5400,401, 6501,6101,100,1,101,400,600,401,601,300,100,49,349,149,400, 1200,600,449,1249,649,2200,1500,15,2215,1515,4250,4949,401,15, 40000,40015,150015,150000,230015,230000,420015,490000,490015, 540015,540000,610015,610000,6,27,40027,150027,150006,230027, 420027,490027,540027,540006,610027,54,40054,150054,230054,490054, 540054,610054,63,150063,540063,54,40000,40054,6,63,1,10001, 10000,150000,610001,630001,190000,49,50,10050,10049,150049, 610050,630050,190049,15,630000,150000,54,630042,490006,420006, 150000,42,150042,600,150600,642,150642,420000,540000,420042, 540042,420600,540600,420642,540642,6,150006,50,150050,606,150606, 650,150650,420006,540006,420050,540050,420606,540606,420650, 540650,15,150015,54,150054,615,150615,654,150654,420015,540015, 420054,540054,420615,540615,420654,540654,27,150027,63,150063, 627,150627,663,150663,420027,540027,420063,540063,420627,540627, 420663,540663,1500,151500,1542,151542,2700,152700,2742,152742, 421500,541500,421542,541542,422700,542700,422742,542742,1506, 151506,1550,151550,2706,152706,2750,152750,421506,541506,421550, 541550,422706,542706,422750,542750,1515,151515,1554,151554,2715, 152715,2754,152754,421515,541515,421554,541554,422715,542715, 422754,542754,1527,151527,1563,151563,2727,152727,2763,152763, 421527,541527,421563,541563,422727,542727,422763,542763,54,600, 654,540000,540054,540600,540654,6,63,606,663,540006,540063, 540606,540663,10000,490000,500000,1,10001,490001,500001,41554, 61554,421554,461554,41558,61558,421558,461558,100,10100,490100, 500100,101,10101,490101,500101,41954,61954,421954,461954,41958, 61958,421958,461958,10100,100,10000,49,10149,149,10049,152300, 192700,152700,192300,152349,192749,152749,192349,4900,15000,5000, 14900,4949,15049,5049,14949,155400,195800,155800,195400,155449, 195849,155849,195449,421500,1500,420000,42,421542,1542,420042, 4200,425400,5400,424200,4242,425442,5442,424242,540000,40106, 610106,494900,234900,425006,155006,40100,150000,230100,420000, 490100,540000,610100,42,40142,150042,230142,420042,490142,540042, 610142,40400,600,230400,150600,490400,420600,610400,540600,40442, 642,230442,150642,490442,420642,610442,540642,1500,41900,151500, 231900,421500,491900,541500,611900,1542,41942,151542,231942, 421542,491942,541542,611942,42300,2700,232300,152700,492300, 422700,612300,542700,42342,2742,232342,152742,492342,422742, 612342,542742,40000,150000,230000,600,40600,150600,230600,4200, 44200,154200,234200,5000,45000,155000,235000,42,40042,150042, 230042,642,40642,150642,230642,4242,44242,154242,234242,5042, 45042,155042,235042,1500,41500,151500,231500,2700,42700,152700, 232700,5400,45400,155400,235400,6300,46300,156300,236300,1542, 41542,151542,231542,2742,42742,152742,232742,5442,45442,155442, 235442,6342,46342,156342,236342,40400,5400,46100,40100,600,45800, 6300,40000,600,40600,5400,45400,6300,46300,10000,235400,275400, 45454,65454,150054,190054,100,10100,235800,275800,45854,65854, 150154,190154,10000,230000,270000,4900,14900,234900,274900,100, 10100,230100,270100,5000,15000,235000,275000,100,1,101,152300, 152700,152301,152701,4900,5000,4901,5001,155400,155800,155401, 155801,100,4900,5000,1,101,4901,5001,151500,151900,156100, 156300,151501,151901,156101,156301,15,420000,420015,4200,4215, 424200,424215,15,420000,420015,1500,1515,421500,421515,5400, 40400,46100,460006,10000,420006,170000,150000,420000,840000, 540000,600,170600,150600,420600,840600,540600,6,170006,150006, 420006,840006,540006,606,170606,150606,420606,840606,540606,15, 170015,150015,420015,840015,540015,615,170615,150615,420615, 840615,540615,27,170027,150027,420027,840027,540027,627,170627, 150627,420627,840627,540627,4200,174200,154200,424200,844200, 544200,5000,175000,155000,425000,845000,545000,4206,174206,154206, 424206,844206,544206,5006,175006,155006,425006,845006,545006,4215, 174215,154215,424215,844215,544215,5015,175015,155015,425015, 845015,545015,4227,174227,154227,424227,844227,544227,5027,175027, 155027,425027,845027,545027,560000,540000,6,560006,540006,40100, 650100,610100,40106,650106,610106,30000,10000,4900,34900,14900,1, 30001,10001,4901,34901,14901,41554,121554,61554,46154,126154, 66154,41558,121558,61558,46158,126158,66158,10000,49,10049,100, 10100,149,10149,45400,65400,45449,65449,45800,65800,45849,65849, 440000,420000,42,440042,420042,1500,441500,421500,1542,441542, 421542,10006,460000,420006,60000,42,60042,10000,10042,40042, 150000,150006,150042,150050,230006,230000,230050,230042,420042, 420050,490050,490042,540042,540050,540000,540006,610050,610042, 610006,54,60054,10054,150054,150063,230063,230054,540054,540063, 610063,40004,540000,610004,6,540006,540000,10000,10049,150015, 420015,630061,630015,1,540001,10001,10050,150019,420019,630063, 630019,42,150000,150042,54,150054,40001,150050,15,600,615,1500, 1515,2700,2715,1000000,1000015,4000000,4000015,1001500,1001515, 4001500,4001515,15000000,15000015,15000600,15000615,15001500, 15001515,15002700,15002715,19000000,19000015,23000000,23000015, 19001500,19001515,23001500,23001515,42000015,42000615,42001500, 42001515,42002700,42002715,46000000,46000015,49000000,49000015, 46001500,46001515,49001500,49001515,54000000,54000015,54000600, 54000615,54001500,54001515,54002700,54002715,58000000,58000015, 61000000,61000015,58001500,58001515,61001500,61001515,6,27,606, 627,1506,1527,2706,2727,1000027,4000027,1001506,1001527,4001506, 4001527,15000006,15000027,15000606,15000627,15001506,15001527, 15002706,15002727,19000027,23000027,19001506,19001527,23001506, 23001527,42000027,42000627,42001506,42001527,42002706,42002727, 46000027,49000027,46001506,46001527,49001506,49001527,54000006, 54000027,54000606,54000627,54001506,54001527,54002706,54002727, 58000027,61000027,58001506,58001527,61001506,61001527,54,654,1542, 1554,2742,2754,1000054,4000054,1001542,1001554,4001542,4001554, 15000054,15000654,15001542,15001554,15002742,15002754,19000054, 23000054,19001542,19001554,23001542,23001554,42001542,42001554, 42002742,42002754,46000054,49000054,46001542,46001554,49001542, 49001554,54000054,54000654,54001542,54001554,54002742,54002754, 58000054,61000054,58001542,58001554,61001542,61001554,63,663,1550, 1563,2750,2763,1001550,1001563,4001550,4001563,15000063,15000663, 15001550,15001563,15002750,15002763,19001550,19001563,23001550, 23001563,42001550,42001563,42002750,42002763,46001550,46001563, 49001550,49001563,54000063,54000663,54001550,54001563,54002750, 54002763,58001550,58001563,61001550,61001563,5400,5415,6300,6315, 1005400,1005415,4005400,4005415,15005400,15005415,15006300,15006315, 19005400,19005415,23005400,23005415,42005415,42006315,46005400, 46005415,49005400,49005415,54005400,54005415,54006300,54006315, 58005400,58005415,61005400,61005415,5406,5427,6306,6327,1005427, 4005427,15005406,15005427,15006306,15006327,19005427,23005427, 42005427,42006327,46005427,49005427,54005406,54005427,54006306, 54006327,58005427,61005427,5454,6354,1005454,4005454,15005454, 15006354,19005454,23005454,46005454,49005454,54005454,54006354, 58005454,61005454,5463,6363,15005463,15006363,54005463,54006363, 54005400,600,54006300,5400,54000000,6300,54000600,4000000,61005400, 4000600,61006300,4005400,61000000,4006300,61000600,6,54005406,606, 54006306,5406,54000006,6306,54000606,1,100,101,4900,4901,5000, 5001,1000000,1000001,1000100,1000101,1004900,1004901,1005000, 1005001,49,50,149,150,4949,4950,5049,5050,1000049,1000050, 1000149,1000150,1004949,1004950,1005049,1005050,42001500,61006101, 42001900,61006301,42006100,61001501,42006300,61001901,46001500, 63006101,46001900,63006301,46006100,63001501,46006300,63001901, 42001549,61006150,42001949,61006350,42006149,61001550,42006349, 61001950,46001549,63006150,46001949,63006350,46006149,63001550, 46006349,63001950,50005000,1500,50006300,42000000,6005000,42001500, 6006300,50005042,1542,50006342,6005042,42001542,6006342,6002700, 42005400,50002700,5400,6002742,50002742,5400,49000606,49006306, 42000006,42005406,45,43,42,43,18,16,15,43,15,18,16,15,43, 4300,2301,9201,42,2800,1600,42,1642,4300,15,4315,5500,8300,42, 27,63,42,15,54,400,42,442,42,15,54,4200,404,4904,42,4242, 449,4949,54,1500,15,1515,42,1542,54,1554,1500,15,1515,42, 1542,54,1554,54,54,4500,4300,4200,1500,7300,9000,5400,1643, 1800,1600,1500,42,1842,1642,1542,1800,1600,1500,42,1842,1642, 1542,1643,1643,2304,42,2349,404,1500,449,1542,54,1500,15,1515, 42,1542,54,1554,1500,15,1515,42,1542,54,1554,54,54,42,100, 142,1800,1600,1500,42,1842,1642,1542,1800,1600,1500,42,1842, 1642,1542,3243,3243,4200,10001,14201,42,4242,10046,14246,2700, 6300,12701,16301,2742,6342,12746,16346,54,4200,15,4215,42,4242, 54,4254,1500,5400,1515,5415,1542,5442,1554,5454,4200,15,4215, 42,4242,54,4254,1500,5400,1515,5415,1542,5442,1554,5454,54,54, 1800,1600,1500,15,1815,1615,1515,42,1842,1642,1542,54,1854, 1654,1554,4300,54,4354,1500,1542,1500,1542,1800,1600,1500,4200, 9400,9500,5400,42,1842,1642,1542,4242,9442,9542,5442,5700,5500, 5400,42,54,1500,1542,150000,15,150015,42,150042,54,150054,1500, 151500,1515,151515,1542,151542,1554,151554,4200,154200,4215, 154215,4242,154242,4254,154254,5400,155400,5415,155415,5442, 155442,5454,155454,54,5400,5454,150000,540000,1500,151500,421500, 541500,5400,155400,545400,420000,420015,1500,421500,1515,421515, 5400,425400,425415,5400,5400,150000,540000,15,150015,420015, 540015,54,150054,420054,54,180000,160000,150000,42,180042,160042, 150042,1500,181500,161500,151500,1542,181542,161542,151542,4200, 184200,164200,154200,4242,184242,164242,154242,5400,185400,165400, 155400,5442,185442,165442,155442,160043,5400,165443,150000,150042, 1500,151500,1542,151542,5400,155400,155442,420000,420015,1500, 421500,1515,421515,5400,425400,425415,5400,5400,42,54,1500,1542, 1515,1554,5400,5442,5415,5400,15000000,54000000,15,15000015, 42000015,54000015,54,15000054,42000054,150000,15150000,42150000, 54150000,150015,15150015,42150015,54150015,150042,15150042,42150042, 54150042,150054,15150054,42150054,54150054,540000,15540000,54540000, 540015,15540015,42540015,54540015,540054,15540054,42540054,540000, 54,540054,404,4200,4901,4200,4206,600,442,54,6,40004,540054, 540063,610061,6,10004,150015,150027,230023,420042,150050,460049, 54,63,40061,630006,610004,27,54,270000,60015,60063,54,54,60054, 540000,40000,610000,6,63,10000,190000,6,230006,150006,63,40000, 60050,60000,60000,54,270000,150027,64215,40600,490600,40000, 490000,45400,6300,540000,150000,580004,190004,150600,5400,490600, 500000,10600,60042,420042,14200,505000,425042,54000000,5454,600, 54000600,606,6,54006306,54005406,663,63,54005463,5400,6000000, 5406,1000400,1006100,5454,54,5463,6000054,1006154,1000454,1000100, 1005800,600,6300,6000600,6306,1005854,1000154,6354,654,6363, 6000654,6000000,54,6000054,6005400,5454,6005454,42001500,42001506, 42001554,42001563,1000454,1006154,46002300,46002306,46002354, 46002363,1000154,1005854,46001900,46001906,654,663,6363,46000400, 42000600,61000450,54,63000650,5400,6006300,6000600,42000600, 42001500,2700,5454,2727,2750,50,5427,6006350,6006327,6000627, 6004254,6004200,600,1500,2700,5000,600,2700,615,40400,150000, 230400,5400,46100,155400,236100,40100,600,230100,150600,45800, 6300,235800,156300,501506,420000,61506,60000,5400,65400,404, 60404,6104,66104,424215,504215,421515,501515,424923,504923,422323, 502323,541500,600,542700,1500,540000,2700,540600,40104,611904, 40404,612304,41904,610104,42304,610404,606,64200,65006,54,150650, 150627,40600,40000,600,45015,44215,5015,45042,5042,40654,150042, 61500,271542,54000000,6060000,63060000,54005400,6065400,63065400, 6000000,63000000,60000,54060000,6005400,63005400,65400,54065400, 15000000,27060000,15005400,27065400,50000000,27000000,42060000, 15060000,50005400,27005400,15065400,58040001,61010001,61015401, 61040001,58010001,61045401,58015401,23040001,19010001,23045401, 540000,50060600,50630600,42420015,6500615,54,54,4200,4215,4200, 54,4242,54,54,4215,4200,54,4200,425400,425400,54,5442,421500, 421500,5442,5415,42,420000,5400,425400,150015,5400,155415,150000, 5400,155400,5400,150042,155442,150000,5400,155400,420042,420015, 54,54,420054,420000,5400,150015,155415,54,5400,5454,5400,150015, 155415,420000,5400,425400,5400,4200,1500,1542,1515,54,5400, 421500,424200,54,5454,421554,424254,8000,8300,8700,1005,743, 6600,205,6805,6600,78316,110000,118300,8300,667655,1111,71616, 830000,870202,110202,900,900,90000,1005,90000,96216,43,62300, 62343,43,61900,61943,43,585000,585043,43,43,190600,62300,61923, 582300,40100,61900,42,1904,42,1949,23191901,42,23191946,42, 23500004,27001915,42,27001954,42,27,59853210,27232517,2315,4300, 27239717,9215,4300,23190015,23194315,69623300,23500004,88983304, 4300,15011500,15019000,42006115,4300,42009915,42,6190000,1501, 6191501,42,6190042,1546,6191546,19230004,42,19230049,58230054,42, 1150600,270404,1060104,42,1150642,270449,1060149,42420100,421515, 42001915,42,42420142,45,43,42,230600,230645,230643,230642,192300, 192345,192343,192342,45,43,42,62300,62345,62343,62342,45,43,42, 235800,235845,45,43,42,41500,41545,41543,41542,202416,196100, 419616,231900,15,231915,192300,585000,61915,39312100,19231900,42, 39312142,19231942,23190004,42,23190049,23500052,42,15011500,42, 15011542,6580006,4300,2301,9201,4300,23191901,23199101,133300, 4300,6230015,6234315,4300,42,192300,192342,15,63,192315,192363, 61900,61942,61915,61963,42,62300,62342,235000,505800,42,190600, 190642,191501,191546,2701,2746,196100,42,100,142,1504,1549,1904, 1949,4200,19061915,19065815,600,42,4151500,4151542,19152301, 19152346,27000401,27000446,19230000,4200,23060000,23064200,1501, 5401,23061501,23065401,42,4242,23060042,23064242,1546,5446, 23061546,23065446,4200,19230001,19234201,42,4242,19230046,19234246, 58500000,42,58500042,4200,23190000,23194200,1040423,1044923, 27270423,27274923,42,4242,23190042,23194242,1040461,1044961, 27270461,27274961,6610000,42,6610042,4500,4300,4200,19061500, 19067300,19069000,19065400,100,4800,7800,4600,19061900,19067400, 19069100,19065800,4500,4300,4200,19232315,19237515,19239215, 19236115,4500,4300,4200,4500,4300,4200,271500,277300,279000, 275400,1040400,1045300,1048200,1044900,1192300,1197500,1199200, 1196100,93263832,9240516,50232300,2301,42,2346,1501,400,1546,442, 19230615,42,19230654,42,23041900,1041523,27000123,42,23041942, 1041561,27000161,42,40302100,23191900,42,40302142,23191942,1500, 40303700,23190100,1542,40303742,23190142,42,19060015,19060054, 61231404,600,4200,19232300,19236100,19230100,19234600,2700,6300, 58061900,4200,400,4900,6190406,6194906,6190006,6194206,427,4927, 27,4227,6190015,6194215,6190415,6194915,42,4242,442,4942,6190450, 6194950,6190050,6194250,463,4963,63,4263,6190054,6194254,6190454, 6194954,4200,19230001,19234201,42,4242,19230046,19234246,600,42, 642,4200,2700,6300,1061900,1065800,1060400,1064900,23060001, 23064201,23062701,23066301,27001901,27005801,27000401,27004901,42, 4242,2742,6342,1061942,1065842,1060442,1064942,23060046,23064246, 23062746,23066346,27001946,27005846,27000446,27004946,6190600,42, 6190642,4200,900,8500,3300,97983,817000,96677,35095100,83720000, 47896043,86003600,201164,361143,6100,4254,1500,401,100,6300, 542300,42300,420015,492315,494215,6300,10642,10000,100,10100, 60000,425400,150100,161,150061,540000,40015,40149,161,544946, 192300,495400,635400,62342,6100,14200,12300,610042,616142,425000, 424900,100,235042,610142,6194600,54231900,54231500,100,54421500, 610100,23610115,49542315,15540419,19000600,1540119,42012300, 54000000,42002361,10061,54010061,15542306,15544600,6306,1060001, 6000006,42540042,46630046,50540050,15006300,1,15006301,16342, 15010042,1000000,16142,1016142,541900,544900,6300,6490404,63060049, 54460442,41900,1001515,1040115,1001915,425000,23151500,6300, 23540000,23155000,23495000,616300,23546100,610100,6300,231500, 235000,14642,142,14200,6163000000,27044200,15614206,6540006, 15611500,6545400,5406,27041506,100,42234200,42234600,1,101, 42234201,42234601,4954545401,6101630000,490049060019,163010142,1, 192346194604,163016100,230654544249,2300540400,231954004949, 42319614242,610163000042,610015,16300,636100,11501,1006300,10600, 11961,61001923]; CR_4.codedGeneratorZClass := [109593899,107544718,107687275,107702651,109451342,109420590, 107687275,107544718,107702651,107544718,109589726,107548892, 109589599,107548891,107544718,107548892,107544718,107549018, 107544718,109455515,107687275,109424763,107702651,109455518, 107687275,109424763,107702650,107687399,109455518,109455518, 107687276,109451342,109455515,109420590,109424763,109451342, 109455518,107683099,107687275,109420591,109424763,109451218, 109455518,109451341,109455518,109451342,107683102,109420590, 107698478,107683099,109451342,109420591,107698478,107683099, 109451218,109451341,107683099,107687275,109455515,107544718, 107702651,109424763,107544718,107687275,109455518,107544718, 107702650,109424763,107544718,107687399,109455518,107544718, 107687276,109455518,107544718,109424673,109589599,109451423, 109589726,109448144,109458221,109448144,107679904,109958779, 109457598,107133714,107680279,109420547,107549016,113369024, 107548891,109590101,109448144,107548514,107689981,107705482, 107549016,107705482,107695280,101960407,107549016,107549018, 107698569,107544718,107683183,107548891,107544718,107689981, 107679904,107544718,107680279,107133714,107544718,109589601, 107702694,107544718,113379101,109589726,107544718,107689981, 107548514,107544718,107705482,107549016,107544718,109589601, 120897342,107544718,109589726,109455515,109593818,109458221, 107687275,109455515,109458221,109586528,109455515,109457598, 109586903,109040338,107680279,109040338,109586903,107549016, 109589683,107702776,107548891,109586528,113376395,109448144, 109596605,109455138,107689981,109455138,109596605,107549016, 109596605,107702776,107695280,109596605,109586403,107549016, 109586403,120894882,109589726,107548810,107687275,107679904, 107551597,109596605,109458221,107683102,107687275,107680279, 107550974,109965031,109457598,108052155,107687275,107549016, 109420465,109589683,107548891,113372222,109596605,107689981, 107541520,109586903,109448144,107683477,107687275,109427469, 107541520,107702776,107695280,109420465,109596605,107549016, 120890586,109586403,109589726,107687275,109593818,107544718, 107689981,109455515,107687275,107544718,107680279,109040338, 109586903,107544718,109589601,107702776,109593817,107544718, 113379101,109586528,109596605,107544718,107689981,109455138, 109596605,107544718,107549016,109596605,107702776,107544718, 109589601,120894882,109596605,107544718,113356846,96212481,113361019, 113361144,107544718,113356846,107544718,96212481,107683102,96212606, 113372222,96212606,109451217,96212481,96197230,96212481,107683102, 96216779,109451217,113361144,107687275,96216779,113376395,113361144, 113372222,107544718,96212606,109451217,107544718,96212481,113237639, 113238011,96259106,96258734,96201403,113237639,109424763,92403531, 107702651,92403531,113372222,113237639,109420590,92403531,107698478, 92403531,96201403,96259106,109424763,115263470,96201403,115263470, 115267643,92399358,107548891,115263470,109424763,115267643,109420590, 115267643,109424763,92399358,96201403,92399358,107548891,109424763, 115263470,113363692,92395077,115271556,113353276,113360938,113363725, 108894963,108242907,96212566,96219860,107544718,96219857,107544718, 113356927,107544718,113353648,107544718,108242907,107544718,96212566, 107544718,113353273,113368651,96209407,107687194,96216698,96201322, 96216698,109458221,96219485,96204109,96219485,109457598,109765098, 108897842,109765098,108058407,107434279,108240775,107434279,96197315, 96212566,109451302,96212566,113379101,113363850,107690106,113363850, 96204482,96209407,107683183,96216698,96197311,96216698,96194032, 96219485,109448144,96219485,108058407,109765098,108240775,109765098, 108897842,107434279,109457598,107434279,113376310,96212566,107687315, 96212566,96194032,113363850,109448019,113363850,96204482,107544718, 113363726,107683183,107544718,96212687,96197311,107544718,96212687, 96204109,107544718,113363725,109448144,107544718,96209408,107680279, 107544718,107434279,108240775,107544718,107434279,96197315,107544718, 96212566,107687315,107544718,113361059,96194032,107544718,96209283, 109448019,107544718,96209283,109593818,113360938,109596605,113363725, 109040338,108894963,107687275,108242907,109589311,96212566,109586028, 96209283,107544799,113360938,107541520,113363725,108052155,108894963, 109451342,108242907,107549306,96212566,107541520,113363850,113372303, 96212606,109458221,96212606,108240775,107858474,108058407,107858474, 96201818,96212481,109458596,113356471,113376314,96216779,109448144, 96216779,109457598,110149531,107680279,110149531,96201818,113361144, 107679529,96217154,109589807,107544718,113356927,109596605,107544718, 113363725,107687275,107544718,108242907,109589311,107544718,96212566, 109596605,107544718,113363850,109593818,96201322,96216698,109596605, 96204109,96219485,109040338,108897842,109765098,107687275,108058407, 107434279,109589311,96197315,96212566,109586028,107679529,113353273, 107544799,107687194,96216698,107544799,96201322,96216698,107541520, 109458221,96219485,107551597,96194032,96209408,108052155,109457598, 109765098,108052155,108897842,109765098,109451342,108058407, 107434279,109451342,108240775,107434279,107549306,96197315,96212566, 107549306,109451302,96212566,107541520,107690106,96219860,107541520, 96204609,96219860,109593818,96197311,96216698,109596605,109448144, 96219485,109040338,108240775,109765098,107687275,109457598,107434279, 109589311,113376310,96212566,109586028,96204609,113353273,113376314, 107544718,96212606,109448144,107544718,96212606,108897842,107544718, 107858474,96201818,107544718,96212481,107679529,107544718,113356471, 109589807,96197311,107544718,96212687,109596605,96204109,107544718, 96219485,107687275,108240775,107544718,108242907,109589311,96197315, 107544718,96212566,109596605,96204609,107544718,96219860,77132311, 115260147,96262826,96255536,140067314,92406362,113237930,113240717, 109807346,140067395,107392279,140067395,96204109,92403656,113369024, 92403656,107698559,92403531,109424682,92403531,96194032,113238011, 113379101,113238011,109593818,95953198,109596605,115263345,109593818, 115263470,109596605,115263470,96197311,77132230,96204109,115263345, 113376314,115263470,109427469,96258734,140097899,95953279,96201403, 115260147,109424763,115267562,96201403,115267562,109424763,115260272, 107702651,115260272,77040718,95953279,113372222,115260147,109420590, 115267562,107698478,115267562,109420590,115260272,107698478, 115260272,140097899,113620346,96201403,92406362,109424763,92403450, 96201403,92403450,109424763,92406237,107702651,92406237,96197230, 113620346,113372222,92406362,109420590,92403450,107698478,92403450, 115171214,92406237,109420590,92406237,109807427,109593818,77132230, 96201403,109596605,115263345,109424763,109593818,115263470,107702651, 109593818,115263470,109424763,109596605,115263470,107702651, 109596605,115263470,107548891,92403450,107548891,113230640,109589726, 92403450,109589726,113230640,107544799,115267562,107551597,96255536, 113372303,115267643,96194032,96262907,96201322,92399358,113372303, 92399358,96194032,113233838,109417392,113233838,107548891,109424763, 92403450,107548891,107702651,92396160,109589726,109424763,92403450, 109589726,107702651,113233919,109589726,109424763,92396160,109589726, 115175387,92396160,107548891,107544718,92403450,107548891,107544718, 113230640,109420590,107548891,92403450,107698478,107548891,113230640, 107544799,109424763,115267562,107548810,96201403,115263551,107551597, 109424763,115260272,107551597,107702651,96255536,96201322,107548891, 115263470,96194032,107548891,96258734,107548891,107544718,109424763, 92403450,107548891,107544718,107702651,92396160,107683183,113363692, 109448144,113363692,96194153,113363692,109424673,92395077,115179274, 92395077,107702561,113240649,115179274,96255601,107702561,96255601, 109589599,96219823,109589726,96209441,107548645,113353310,107544802, 107544718,96209407,107541520,107544718,96216698,107544799,107544718, 113363725,107551597,107544718,113360567,113372222,107544718, 107690319,109451302,107544718,96204448,96194032,107544718,109458188, 107689981,107544718,96194065,107683183,107544718,113353648,109458098, 107544718,113360567,113368778,107544718,107690319,113372305, 107544718,113363602,109455434,109589599,113353310,96194032,107548891, 113363692,107679904,109589726,113363692,113379101,107548645, 113353310,96197559,107548645,113363571,96194032,109451218,107544718, 96204448,109451423,107541520,107544718,113356927,113376314,109451342, 107544718,113379068,113369024,109451342,107544718,113369057, 113376066,107551597,107544718,113360567,107687315,113372222, 107544718,107690319,107680027,113372222,107544718,107690319, 113363725,107551564,113360567,107541305,96212606,107551564,113356723, 107541305,107551597,96216779,96219452,107551597,113360650,113353310, 107687194,96216698,107541553,107689981,107689948,96212606,113376066, 113360567,107541305,107690350,107690319,96212975,96197311,107541553, 113356846,113372305,113356723,107541305,109448144,113372222,96212606, 113353681,113376066,107551597,107541305,113363571,113240684,96255569, 109417425,113233838,107695313,113233838,92434283,113240684,107702651, 113230673,107544718,113240684,107548810,113240684,107695280, 113240684,113379101,92406204,109589807,113240684,92434283,96255569, 107702651,96265580,107548810,96255569,107551597,115260305,107695280, 96255569,113379101,115260305,107695280,109589726,113233919,109427469, 109589726,92399439,115175306,109589726,113240717,92430191,109589726, 113240717,107695280,107548810,96258815,109427469,107548810,96258815, 96197311,107541520,96265613,113376314,107541520,96265613,109417425, 96258734,107544718,92434283,113240684,107548810,92434283,113240684, 107551597,107702651,113240684,109589807,92434283,113240684,109596605, 107702651,113240684,107548810,107544718,113240684,107695280, 107544718,113240684,107548810,92434283,96255569,107551597,92434283, 96255569,107548810,107702651,96255569,107551597,107702651,96255569, 107695280,115178060,96258734,92434202,109427436,115263470,92434283, 113233919,109586561,107544718,115258570,111448173,109589599, 115271556,109589726,113394487,92425851,115258570,92438787,115258570, 111503229,96127239,107671827,96127239,113368651,92425851,96255601, 96197299,109472131,98117181,113229430,109585693,96117135,109586511, 113229430,107552556,111447007,98119230,113240094,109585693,98008383, 111454395,96194015,111454395,96255911,109585693,111503239,111454395, 107674615,111454395,115166826,113229430,109585693,92438297,113240028, 113237634,109472131,111455580,109595084,113379101,111455580, 109595084,109466787,111455580,109595084,113240094,107552556, 107664511,113387598,111447024,107542669,115166826,113229430, 107552556,113372291,96125708,107542669,113369024,96125708,107542669, 115175010,92406362,109585693,107671899,96118242,109595084,107671899, 96124451,109595084,111500523,96124451,109595084,92430485,92406362, 109585693,107541520,113369007,111454395,107542610,113369007, 111454395,96197230,111447024,109595084,107544787,109463503,96124523, 92430485,115260147,109585693,107541520,109473607,111454395,107542610, 109473607,111454395,98011598,113387667,109595084,115175010,115263434, 107552556,98015771,113384400,107542669,109586528,107665677,98119230, 113376395,98126109,107551607,111454395,109596615,98119230,109596615, 98124643,109596615,111457101,109596615,109472131,111454395,109596615, 113376323,111454395,109596615,113379111,96120350,111494301,96120350, 98124643,109596615,107544718,109472131,98119230,109596615,109472131, 113385490,109596615,113372291,98123331,109587677,109472131,96117152, 109596615,113372291,111448114,109596615,109472131,96125763,109596615, 107544718,111454272,134238902,82620313,95953403,107683183,109451423, 140067395,107885303,134238899,78792039,134238885,107885303,140067395, 69768323,139744251,77133431,107683172,107548895,98119353,134238902, 82620313,113620222,107548891,107683183,77132230,107885303,134238899, 140268822,134238885,82620289,77132230,69768323,139744251,77148730, 107683172,107548895,78837817,78792061,107885304,82620313,140097899, 140067395,109451423,107683183,78837807,138175775,107885303,82620303, 78837795,76931296,134238885,82620289,113376395,113620427,69768323, 113371807,96201407,77133431,107683172,107548895,138362305,96124154, 107885304,82620313,96197230,140050903,107683183,107548891,111496722, 113620427,82620303,134238899,138362323,140067384,134238885,82620289, 96197230,140095295,69768323,113371807,96197230,77133431,107683172, 107548895,98015402,138408061,82620313,107885304,109807427,113112938, 107683183,107548891,140097899,78962842,82620303,107885303,98015394, 113387972,82620289,107885303,140097899,77043322,113371807,69768323, 113376395,95953206,109451414,107683172,113620303,107548891,109451423, 77132311,82620303,134238899,140268890,82620289,134238885,77132311, 113371807,139744251,113620291,109451414,107683172,113112814, 107548891,107683183,140067314,134238899,82620303,96124079,134238885, 107885303,140067314,139744251,113371807,95953331,107548895,107683172, 77040799,77147687,109451423,107683183,138362395,113620427,107885303, 82620303,138362391,140067384,134238885,82620289,96197311,140095295, 69768323,113371807,96197303,77133431,107683172,107548895,109807346, 140050903,107548891,109451423,78837726,113620427,107885303,82620303, 78837728,140067384,134238885,82620289,113376314,140095295,69768323, 113371807,113376319,77133431,107683172,107548895,113112814,109451423, 109455434,107544718,140067314,82620303,82899222,107544718,78791972, 82620289,109314322,107544718,109804494,113371807,77455870,107544718, 95953331,109451414,109455442,107544718,77179102,140051938,109451423, 107548891,98015318,111252690,107885303,82620303,107671705,140268822, 82620289,134238885,109807346,107395546,113371807,139744251,113376319, 95953206,109451414,107683172,109807427,113113019,107548891,109451423, 109807427,138408151,82620303,107885303,140097888,77132306,82620289, 134238885,69554795,96520207,139744251,69768323,96201407,77148806, 109451414,107548895,139959434,77148803,107548891,107683183,109466842, 138408151,82620303,107885303,111496725,77132306,82620289,134238885, 107392198,96520207,139744251,69768323,96197230,77148806,109451414, 107548895,109807427,113112814,107548891,109451423,107671775,78791970, 82620303,107885303,109807427,111454198,134238885,107885303,69554795, 109804494,139744251,69768323,96201407,113620343,107683172,107548895, 77040718,113112814,107683183,109451423,109466842,78791970,107885303, 82620303,77040726,96124079,134238885,107885303,147583822,109804494, 69768323,139744251,113372218,113620343,107548895,107683172,96201403, 140052019,107683183,109589726,107544718,109807427,140268895,82620303, 109314322,107544718,109807427,140268890,82620289,109314322,107544718, 109807427,147585887,113371807,147431302,107544718,96201407,140052011, 107683172,109589722,107544718,27576557,96204109,27576557,158869959, 182585867,108225274,158869959,108913343,111702976,182259101, 182585867,181755521,113369397,181755521,47934243,111455580,44981181, 138667762,158871959,96125708,155826758,98117181,159716768,98117181, 77548170,159720646,96117135,33044800,111448420,138667762,113369397, 47934243,111455580,109472131,27053511,96125708,98011667,140650523, 111447007,107884306,155073341,111455580,109315317,155073341, 111455580,159717639,111454395,96125708,140651645,111454395,96117135, 137670403,79424159,113394487,109472131,44074618,98117181,112759425, 98117181,32804382,182258855,98117181,111454395,140651523,113385549, 96124523,33322950,27464439,138667762,32804382,109807427,95553448, 111455580,44977972,113376395,182258855,96125708,111454395,109470891, 27315024,96125708,111454395,107392198,77127802,138667762,32804382, 27466552,26959129,138667762,155073341,111496350,159717506,96125708, 111454395,113372222,77548542,96125708,111454395,107667795,107393259, 113394487,155073341,159717763,159716893,98117181,111454395,76487218, 76487226,98126119,111454395,44074867,98117181,96202643,159717885, 139544319,159717885,109466787,140651399,98117181,159717763,107548891, 98117181,44073872,96117135,140651399,96202643,159717885,140651520, 98116015,107544718,159717763,44982048,111447007,109472131,77547424, 96117135,109472131,139544451,113384383,107544718,182258855,98119230, 109596615,113376395,44073997,98117181,111454395,109470891,27053757, 113385549,96124523,113376395,182258855,98123403,109596615,182585006, 180336730,26926245,180336730,1129611,113625044,106992518,113625044, 140071823,182585867,108684957,27560102,180336730,140067395,140651399, 182259101,112502653,110145677,110138347,108689421,138729274, 158885580,140651645,181136653,113951609,181138391,182416742,76905711, 182524859,210345466,181136407,107399674,29236895,140067395,140651399, 182259101,95553518,109811855,113379101,140651399,159706391,113154150, 76486480,210345466,27560102,27314770,27315149,139405819,73912854, 12062103,107548891,76486481,73225567,3861162,109448144,181751447, 179843991,3861162,182259101,109589726,96209441,106999650,73225567, 12062103,108899105,139405819,96209441,114137949,73912854,12062103, 108731107,143225515,12062103,113372303,107548891,181751447,205138627, 73225567,3861162,113379101,107548891,27822178,185854767,73225567, 3861162,76487218,107548891,27822178,106999650,73225567,3861162, 109448177,27315149,96194032,113117692,139405819,107683183,77732807, 96209441,107548891,199402399,72509660,109807335,24008150,143225515, 109807335,27314032,107687194,109455434,140651266,106999650,185854767, 73225567,12062103,113376314,140067395,27315149,96209441,179843991, 114137949,73912854,12062103,180004943,108731107,22927425,143225515, 109455434,109458221,109589726,76487596,185854767,205138627,73225567, 3861162,109596605,109451423,109589726,27822178,109589807,113379101, 109589726,140650529,109807427,185854767,73225567,3861162,79083823, 107392292,73225567,3861162,107551597,107689948,181751692,113369024, 107544799,139405943,96219452,109589726,109466843,185839514,199417652, 108433328,144126578,23095197,185564992,73225567,181751438,109596572, 113363692,199402399,110324711,144659217,182043605,27314032,113379101, 107548891,96209441,114137949,106999650,185854767,73225567,12062103, 144666519,11487648,144126672,73225567,12062103,109586528,139405943, 96212606,109586561,109807427,3861152,179996524,78794035,109811846, 109589726,113379101,181751692,76487218,109463711,110138719,23657354, 72509660,199066843,140830695,143913050,199066843,143225515,199961357, 108901934,27606937,96194032,76487218,109455434,139405819,79083823, 114137949,106999650,185854767,73225567,12062103,109596605,24003722, 143913050,12351902,108735549,199763058,27604936,27607028,77732683, 27822556,109451423,27821441,205138627,114137949,106999650,185854767, 73225567,12062103,205138627,199424831,11487648,144126672,143913050, 199417652,77179183,140050822,109589726,96204109,76487351,27822556, 109807427,107663072,106999650,185854767,72509660,199066843,109314415, 111454554,143913050,23657354,72509660,23095174,73912854,139420588, 138939322,139420588,180826528,73912854,12062103,73912854,179843991, 139420588,110685804,73912854,12062103,205138627,180826528,73912854, 12062103,182786209,73912854,139420588,96782940,23095174,12062103, 73225567,205138627,113123150,73912854,12062103,29515599,180826528, 73912854,12062103,179843991,182786209,73912854,139420588,205138627, 3912460,23095174,12062103,73225567,114137949,138139576,106999650, 12062103,73225567,199740636,114137949,106999650,185854767,12062103, 73225567,180826569,22934718,12351902,143913050,199763058,73072955, 205138627,207368000,5756963,106999650,12062103,73225567,109807427, 205138627,207368000,5756963,106999650,12062103,73225567,109593804, 76856198,28365006,140097940,219263013,160405546,179629517,132440821, 82765556,138362323,153690461,181703188,181873564,200523788,50162752, 174171184,44448336,107689948,143613617,41658462,79670051,39631319, 210471581,70783101,182259101,182045573,26743634,182258731,140651399, 181797699,153692231,31588701,115178093,87498568,86161352,51024595, 110148670,234995099,73225567,113356927,110944135,109807427,98015771, 107671899,96202643,83119279,111362264,58517558,109593818,109597867, 109593918,109417392,109416331,109420671,113369024,113372303, 113367963,107679904,107678843,107683183,96212606,107679904,107683183, 107678843,107695280,107694219,107698559,107695280,107694219, 107698559,120860334,88208556,109594026,107549262,209084286,113625101, 109593909,109593818,76487351,78440103,82191847,113361019,113379101, 76487351,78440103,84098471,115267643,107698569,140651399,142601998, 109589726,109586065,109593917,109455805,109586065,109593917,96201818, 109586065,109593917,113371807,110145677,109597867,107687194, 110145677,109597867,109451423,109427469,109428650,109424682, 109427469,109428650,109424682,101982779,109458221,109459402, 109455434,109458221,109459402,109455434,113361019,96204109,96205290, 96201322,107689981,107687194,107691162,107689981,107691162,107687194, 96216779,109596605,109586593,109596572,113379101,115178093,107689981, 109596605,109586593,109596572,113379101,115178093,107689981, 140651399,182259101,109596605,109586593,109586561,107705357, 107706538,107702570,107705357,107706538,107702570,120864507,17686571, 174188104,109594513,53210107,107548891,109589726,109594513,53210107, 107548891,140651399,138145270,174785400,32821756,138145270,174785400, 82620291,32821756,109589311,109593917,109586065,109589683,115179274, 107683183,109593915,113379101,109624650,107544718,115168734, 113368651,109589683,115179274,107683183,109593915,113379101,90066506, 115168734,113368651,139959515,35516804,47444107,109594397,107548891, 140650529,109599231,109593909,107702570,120858726,109599231, 109593909,107698558,120869842,109599231,109593909,109420671, 109589116,109430715,109599975,109599231,109593909,109420671, 101988104,109599479,109593909,109455434,109599479,109593909, 107683183,109599479,109593909,109451426,109599603,109593909, 107687191,96212605,109599603,109593909,107683184,96216782,109599603, 109593909,109451426,109599603,109593909,109451426,113361020, 107687276,109609275,121033638,109599355,109593909,107683184, 230601192,55191886,107687276,109609275,121033638,109599355,109593909, 107683184,107687194,109589725,128752393,103766397,105888288, 119117005,130397624,122786500,101988148,109593905,110193563, 109594519,109855291,109417392,109416331,109420671,109589726, 109593905,110193563,109594519,109855291,107705357,107706538, 107702570,107548891,109593915,109599479,109455434,113379101, 109593915,109599479,109451302,109455434,109593915,109599479, 109451302,113379101,109593918,109597867,96201322,109593918,109597867, 113372303]; CR_4.codedIsomorphismTypeQClass := [101,102,102,102,104,102,104,104,104,104,109,104,109,109,109, 122,205,205,210,412,412,412,625,103,107,208,208,319,107,107, 117,319,319,319,640,205,103,107,205,210,412,412,625,210,210, 412,412,223,625,625,625,625,849,107,107,208,117,319,319,319, 319,319,640,117,117,117,319,319,640,640,136,640,640,640,1561, 412,208,319,210,927,927,625,3352,1028,324,1450,3600,3453, 15469,218,218,420,741,237,438,1246,438,741,438,1246,1145,1145, 842,1662,3867,3867,660,2565,3867,2464,678,107,117,319,640,114, 132,333,333,434,555,957,1358,1358,1358,3174,132,154,555,555, 957,555,1170,1771,3174,3174,682,521,1044,1548,1548,3666,1044, 1044,1548,1548,2263,3666,3666,3666,3666,3666,577,311,1230,106, 115,216,335,218,1246,333,555,1358,1459,3174,3475,4776,4776, 481,420,741,438,1145,656,3867,2572,4300,3300,200,300,500,284, 500,1000,1368,179,179,280,183,513,1129,1331,826,1447,4400, 4700,3151,4600,4200,4900,26100,25000,25900,25200,100,100,100, 200,300,185,539,943,1447,4700,3500,4900,2873,200,300,400,100, 400,100,100,200,186]; CR_4.codedNormalizerZClass := [767000,767000,774000,812000,775000,811000,774000,812000,783000, 810000,794000,784000,809000,795000,782000,787000,803000,799000, 815000,806000,778000,776000,804000,803000,800000,814000,807000, 762000,765000,802000,798000,813000,805000,779000,777000,804000, 801000,815000,808000,748507,738563,739242,243,740564,747244, 718565,243,722566,752244,757246,745245,719567,733685,691,378, 740564,734693,680,723566,758379,727692,738563,243,735242,740564, 747244,718565,243,723566,752244,757246,744245,719567,738563,243, 739242,747244,740564,729565,243,752244,723566,715245,743246, 756567,691,378,740564,734693,680,723566,758379,727692,785000, 793000,785000,793000,785000,793000,763000,761000,771000,772000, 763000,771000,781000,773000,761000,771000,759000,785000,759000, 785000,816000,776000,786000,817000,760000,764000,816000,776000, 780000,785000,785000,785000,776000,760000,776000,780000,776000, 768000,769000,769000,173,242,243,244,244,245,246,359,378,378, 244,728379,750379,173,242,242,243,243,244,244,244,244,245,245, 246,246,173,242,242,243,243,244,244,244,244,245,245,246,246, 359,378,378,378,378,244,244,728379,728379,750379,750379,242, 243,244,244,245,246,242,243,244,244,245,246,242,243,244,244, 245,246,242,243,244,244,245,246,378,378,244,728379,724379,242, 243,244,244,245,246,242,242,243,243,244,244,244,244,245,245, 246,246,242,243,244,244,245,246,378,378,244,730379,724379,378, 378,244,728379,724379,295,296,329,330,295,296,329,330,295,295, 296,296,329,329,330,330,295,296,329,330,295,296,329,330,295, 296,329,329,330,330,295,296,329,329,330,330,295,296,329,329, 330,330,295,296,329,329,330,330,295,296,329,329,330,330,329, 330,419,419,419,419,329,330,419,419,419,419,329,330,419,419, 419,419,419,419,329,330,419,419,419,419,419,419,419,419, 770000,797000,766000,770000,770000,789000,770000,790000,751671, 680,714681,359,378,378,379,379,751671,680,378,680,713681,379, 714681,751671,680,680,714681,713681,751671,680,378,680,713681, 379,713681,378,379,680,737681,378,379,378,378,379,379,680, 737681,680,713681,419,419,419,419,419,419,419,419,419,419,419, 419,419,419,419,419,419,419,419,419,419,419,419,419,419,419, 419,419,419,419,419,419,419,419,419,419,419,419,419,419,428, 477,731613,617,428,428,429,755429,732613,753613,741604,621, 717604,621,464,482,482,464,482,482,742604,721604,621,621,482, 464,482,482,726604,621,621,746604,621,482,621,464,482,482,482, 482,716604,621,482,621,725604,621,621,482,482,621,482,482,482, 482,482,482,482,621,482,482,482,482,621,507,563,564,565,566, 567,507,563,564,565,566,567,507,563,564,565,566,567,507,563, 564,565,566,567,507,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,563,564,565,566,567,563,564,565,566,567, 563,564,565,566,567,796000,796000,792000,792000,791000,792000, 791000,788000,788000,591,591,592,591,617,604,604,591,606,605, 604,604,606,605,604,621,604,621,621,604,604,605,606,604,604, 605,606,604,621,621,617,613,613,754613,617,617,613,617,617, 621,621,621,621,621,621,720626,720626,711627,711627,626,627, 636,637,636,637,636,637,636,637,636,637,688,709,665,666,649, 650,665,752705,662,749704,749704,665,666,680,681,665,666,671, 736680,680,712681,712681,691,710,662,663,664,680,681,680,680, 681,681,680,691,692,693,680,712681,691,710,710,680,681,691,692, 693,691,710,710,691,693,712692,691,692,693,704,697,709,697, 752705,702,704,709,752705,752705,704,705,710,710,710,710,710]; CR_4.codedPresentationQClass := [11,21,21,21,202,21,202,202,202,202,63,202,63,63,63,34,601, 601,732,742,742,742,693,401,971,462,462,1072,971,971,1062, 1072,1072,1072,1043,601,401,971,601,732,742,742,693,732,732, 742,742,673,723,723,723,693,654,971,971,462,1062,1072,1072, 1072,1072,1072,1023,1062,1062,1062,1072,1072,1043,1043,993, 1023,1043,1023,984,742,462,1072,732,683,713,693,644,902,892, 843,863,853,834,1331,1331,1082,1412,1402,1422,1432,1422,1412, 1422,1432,1013,1003,1122,1363,1373,1373,1343,1353,1373,1113, 354,971,1062,1072,1053,502,1102,562,562,473,1202,1093,513,513, 513,1143,1102,1192,1202,1202,1093,1202,393,1133,1163,1153,374, 133,183,104,94,174,193,183,94,94,54,174,164,154,154,144,45, 1211,1292,941,1301,952,1312,1331,1432,562,1202,523,493,1163, 553,484,484,544,1082,1412,1422,1033,592,1383,383,573,583,364, 1183,534,1174,962,1322,114,923,913,124,933,822,1282,1272,703, 793,1263,1243,1253,343,664,764,1234,1224,334,883,635,874,275, 626,616,266,1462,1472,783,1393,813,754,1453,324,804,774,1444, 285,315,256,306,297]; CR_4.codedPropertiesFamily := [10155,7255,6355,5655,4955,4266,4266,4199,4199,3666,3466,3399, 3299,2399,2199,2399,2688,2119,2119,2119,1201,1201,1201]; CR_4.codedPropertiesZClass := [114,114,814,423,214,123,1614,423,414,223,132,1614,423,132, 6414,1623,1633,1643,452,863,3214,823,833,833,843,252,463,1614, 423,433,443,152,263,25614,3223,3233,3243,452,863,112,3224,833, 833,843,843,852,263,473,473,282,282,492,112,25624,3233,3243, 3252,463,873,482,892,51224,6433,6433,6443,6443,6452,863,1673, 1673,882,882,892,25624,3233,3233,3243,3243,3252,463,873,873, 482,482,492,409624,25633,25643,25652,1663,3273,1682,892,114, 122,1614,822,814,422,814,814,422,422,3214,822,3214,1622,6414, 1622,313,924,113,124,413,424,424,313,924,924,413,424,424, 3624,124,424,1624,3624,424,424,1624,114,114,114,112,424,233, 443,243,252,262,112,824,433,443,452,462,212,1624,1624,833, 833,843,843,843,843,852,452,462,862,112,1624,1624,433,433, 843,843,443,443,452,452,262,462,212,6424,6424,1633,1633,1643, 1643,1652,852,462,1662,3224,833,1643,843,852,462,824,233,443, 443,252,262,824,233,443,443,252,262,3224,833,843,1643,852, 462,6424,833,1643,852,462,12824,1633,3243,3243,1652,862,6424, 6424,833,833,1643,1643,1643,1643,852,852,462,462,12824,1633, 3243,1643,1652,462,6424,833,1643,852,462,51224,3233,6443,3252, 862,613,322,634,343,213,122,634,343,613,213,322,122,634,634, 343,343,413,122,434,143,413,122,434,143,813,222,834,834,243, 243,1213,322,1234,1234,343,343,813,222,834,834,243,243,413, 122,1234,1234,343,343,1613,222,1634,1634,243,243,2434,643,434, 143,434,143,2434,643,434,434,143,143,3234,443,1634,1634,243, 243,1634,243,4834,643,1634,1634,243,243,1634,243,6434,443,414, 424,132,114,114,124,114,124,112,424,432,212,824,1624,432,832, 212,424,824,1624,432,232,832,212,1624,1624,232,1632,412,1624, 3224,6424,832,432,3232,424,232,424,232,1624,432,1624,1624,432, 432,1624,432,6424,832,114,114,114,114,214,214,214,214,214, 214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, 214,214,414,414,414,414,414,414,414,414,414,414,414,414,414, 814,112,134,112,134,112,112,134,134,112,134,322,934,122,134, 122,134,334,322,934,334,322,122,134,934,334,122,134,134,122, 134,134,122,134,134,134,122,134,134,334,334,322,934,334,134, 122,134,134,134,334,134,334,134,134,334,134,334,134,134,134, 334,134,134,134,312,624,634,642,354,362,112,424,234,242,254, 262,212,424,434,442,454,462,312,1224,634,642,654,662,212,824, 434,442,854,862,2424,1234,1242,1254,662,424,234,242,254,162, 824,434,442,454,262,624,634,342,654,362,1624,434,442,854,262, 824,434,242,854,262,1624,834,442,1654,462,2424,1234,642,2454, 662,824,434,242,854,262,1624,434,442,854,262,3224,834,442, 3254,462,111,211,111,111,111,111,111,111,111,111,311,321,111, 121,111,311,111,121,321,311,111,121,321,111,121,111,121,121, 111,111,121,121,111,311,321,121,111,121,121,121,121,121,121, 121,121,121,121,121,121,121,121,121,121,121,111,111,121,121, 111,121,311,321,111,121,311,321,111,121,111,121,111,421,211, 221,211,221,211,1621,111,121,121,411,421,411,421,211,421,211, 411,411,821,821,411,6421,211,121,121,411,821,411,811,821,421, 411,811,1621,3221,411,421,111,421,121,811,821,211,121,221, 211,421,421,211,221,121,411,221,221,121,121,421,121,421,221, 121,421,221,221,121,221,121,121,121,121,121]; CR_4.columnGeneratorSpaceGroup := [[0,0,0,0,1],[0,0,0,1,2],[0,0,0,1,3],[0,0,0,1,4],[0,0,1,0,2], [0,0,1,0,3],[0,0,1,1,2],[0,0,1,1,3],[0,0,1,1,4],[0,0,1,2,3], [0,0,2,0,3],[0,0,2,1,3],[0,0,2,1,4],[0,0,2,2,3],[0,0,3,1,4], [0,1,0,0,2],[0,1,0,0,3],[0,1,0,0,4],[0,1,0,0,6],[0,1,0,1,2], [0,1,0,1,3],[0,1,0,1,4],[0,1,0,2,4],[0,1,1,0,2],[0,1,1,0,3], [0,1,1,0,4],[0,1,1,0,6],[0,1,1,1,2],[0,1,1,1,3],[0,1,2,0,4], [0,1,2,3,4],[0,1,3,2,4],[0,2,0,0,3],[0,2,0,1,3],[0,2,0,1,4], [0,2,1,0,3],[0,2,1,2,3],[0,3,0,1,4],[0,3,1,0,6],[0,3,2,1,4], [0,3,3,2,4],[0,5,0,5,6],[1,0,0,0,2],[1,0,0,0,3],[1,0,0,0,4], [1,0,0,0,6],[1,0,0,1,2],[1,0,0,2,3],[1,0,0,3,6],[1,0,1,0,2], [1,0,1,1,2],[1,0,2,0,3],[1,0,2,0,4],[1,0,3,0,6],[1,1,0,0,2], [1,1,0,0,3],[1,1,0,0,4],[1,1,0,0,6],[1,1,0,1,2],[1,1,0,1,3], [1,1,0,2,3],[1,1,1,0,2],[1,1,1,0,3],[1,1,1,1,2],[1,1,2,0,3], [1,1,2,0,4],[1,2,0,0,3],[1,2,0,0,4],[1,2,0,1,3],[1,2,1,1,3], [1,2,1,2,3],[1,2,2,0,4],[1,2,2,1,3],[1,3,0,0,6],[1,3,0,3,6], [1,3,3,0,6],[2,0,0,0,3],[2,0,0,1,3],[2,0,0,3,6],[2,0,1,0,3], [2,0,1,1,3],[2,0,2,2,3],[2,0,3,0,6],[2,1,0,0,3],[2,1,0,0,4], [2,1,1,2,3],[2,1,2,0,3],[2,1,2,1,3],[2,1,5,2,6],[2,2,1,1,3], [2,3,0,0,6],[2,3,0,3,6],[2,3,3,0,6],[3,0,1,5,6],[3,1,0,0,6], [3,2,0,0,6],[3,5,5,0,6],[4,3,3,0,12],[5,2,5,3,6],[5,3,3,0,6]]; CR_4.crystalSystemQClass := [1,1,2,2,2,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,7,7,7,8,8, 8,8,8,9,9,9,9,9,9,9,10,11,11,12,12,12,12,12,13,13,13, 13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,15,15, 15,15,15,15,15,15,15,15,15,15,16,17,17,18,18,18,18,18,19, 19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20, 20,20,20,20,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22, 22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24, 24,25,25,25,25,25,25,25,25,25,25,25,26,26,27,27,27,27,28, 28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30, 30,30,30,30,31,31,31,31,31,31,31,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,33,33,33,33,33,33, 33,33,33,33,33,33,33,33,33,33]; CR_4.dimension := 4; CR_4.familyCrystalSystem := [1,2,3,4,5,5,6,7,7,8,9,10,10,11,11,12,13,14,14,15,16, 16,16,17,17,18,19,20,21,21,22,23,23]; CR_4.fixedPointFreeSpaceGroup := BlistList( [ 1 .. 4783 ], [1,4,6,8,17,19,33,34,37,38,40,44,48,55,56,61,70,79,82,83, 87,95,122,242,243,244,245,251,257,267,271,279,389,393,397, 411,412,414,429,430,431,440,669,692,1239,1242,1325,1327,1349, 1378,1381,1383,1388,1451,1494,1533,1741,1744,1771,1851,1857, 1860,1886,3047,3053,3062,3070,3079,3083,3286,3314,4030,4038,4139] ); CR_4.GLZ := GLZ4; CR_4.hQClass := BlistList( [1..227], [2,5,7,11,13,16,23,28,35,36,38,43,53,63,75,76,78,83,89, 111,115,126,137,142,153,155,159,161,170,183,190,211,227] ); CR_4.modulSp := 100; CR_4.modulZ := 124; CR_4.nameCrystalFamily := ["hexaclinic","triclinic","diclinic","monoclinic","orthogonal", "tetragonal monoclinic","hexagonal monoclinic","ditetragonal diclinic", "dihexagonal diclinic","tetragonal orthogonal","hexagonal orthogonal", "ditetragonal monoclinic","dihexagonal monoclinic", "ditetragonal orthogonal","hexagonal tetragonal","dihexagonal orthogonal", "cubic orthogonal","octagonal","decagonal","dodecagonal", "di-isohexagonal orthogonal","icosahedral","hypercubic"]; CR_4.nullDadeGroupsZClass := [0,9,18,22,37,41,56,60,75,79,91,107,110,117,127,129,133, 140,144,154,158,160,166,173,180,185,199,204,206,210,217,221, 231,235,237,241,248,252,262,266,276,277,279,282,284,287,288, 294,296,299,300,301,302,307,308,310,312,313,316,318,319,320, 321,324,326,328,331,332,338,340,343,344,345,346,347,350,352, 355,357,358,364,367,369,370,371,372,373,375,377,378,381,383, 384,385,387,390,392,395,397,400,402,404,407,410,412,415,417, 420,422,425,433,435,443,445,453,455,457,465,467,469,477,479, 481,483,485,487,489,491,493,495,497,500,503,506,515,516,519, 521,523,524,525,531,532,534,536,537,538,547,548,549,552,555, 557,559,561,563,564,565,566,567,576,577,578,581,584,586,588, 590,592,593,594,595,596,602,603,604,606,608,610,612,613,614, 615,616,617,620,622,624,625,626,627,630,632,634,635,636,637, 640,642,644,645,646,647,650,652,654,655,656,657,659,661,662, 663,664,667,669,671,672,673,674,675,678,681,683,685,687,689, 690,691,692,693,694,697,699,701,702,703,704,706,708,709,710, 711,713,715,716,717,720,725,726,729,732,737,738,741,744,747, 752,757,758,759,762,765,768,773,774,777,780,785,786,789,792, 797,798,799,802,805,808,813,814,815,818,821,824,829,830,831, 834,837,840,845,846,847,850,853,856,861,862,863,866,869,870, 873,874,876,877,879,880,883,884,885,887,889,890,893,894,895, 897,899,900,902,903,906,907,908,910,912,913,915,916,918,920, 922,925,927,929,934,936,940,942,943,944,947,948,949,950,951, 953,954,955,956,957,958,959,961,962,963,964,965,967,968,969, 970,971,972,973,974,975,976,977,978,979,980,981,982,983,984, 985,986,987,988,989,990,991,992,993,994,995,996,997,998,999, 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011, 1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023, 1024,1025,1026,1027,1030,1031,1033,1034,1037,1040,1041,1042, 1044,1045,1047,1048,1050,1051,1054,1055,1056,1059,1060,1061, 1063,1065,1066,1067,1068,1071,1072,1073,1075,1076,1077,1079, 1080,1081,1082,1085,1086,1087,1088,1089,1091,1092,1093,1094, 1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107, 1108,1109,1110,1111,1112,1113,1114,1117,1118,1119,1120,1121, 1122,1125,1126,1127,1128,1129,1130,1133,1134,1135,1136,1137, 1138,1141,1142,1143,1144,1145,1146,1149,1150,1151,1152,1153, 1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165, 1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177, 1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189, 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201, 1202,1203,1204,1205,1206,1207,1208,1209,1211,1213,1215,1217, 1219,1221,1223,1225,1227,1228,1229,1230,1231,1232,1233,1234, 1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246, 1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258, 1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270, 1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282, 1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294, 1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306, 1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318, 1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330, 1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342, 1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354, 1355,1356,1357,1358,1359,1360,1361]; CR_4.nullGeneratorsZClass := [0,1,2,3,4,5,6,8,10,11,12,13,15,17,19,21,23,25,27,29,31, 33,35,37,39,41,43,45,47,49,51,53,55,57,60,63,66,69,72,75, 77,79,81,83,85,87,89,91,93,95,97,99,101,104,107,110,113, 116,119,122,125,128,131,134,137,140,143,146,149,152,155,158, 161,164,167,170,173,176,179,182,185,188,191,194,197,200,204, 208,212,216,220,224,228,232,233,234,235,236,238,240,242,244, 246,248,250,252,254,256,259,262,263,264,265,266,268,270,272, 274,276,278,280,282,284,285,286,288,290,292,294,296,299,300, 301,302,303,304,305,306,307,308,309,311,313,315,317,319,321, 323,325,327,329,331,333,335,337,339,341,343,345,347,349,351, 353,355,357,359,361,363,365,367,369,371,373,376,379,382,385, 388,391,394,397,400,403,406,408,410,412,414,416,418,420,422, 424,426,428,430,432,434,436,438,440,442,444,446,448,450,452, 454,457,460,463,466,469,472,475,478,481,484,487,490,493,496, 499,502,505,508,511,514,517,520,523,526,529,532,535,538,541, 544,547,550,553,556,560,564,568,572,576,577,578,579,580,581, 582,583,584,586,588,590,592,594,596,598,600,602,604,606,608, 610,612,614,616,618,620,622,624,626,628,630,632,634,636,638, 640,642,644,646,648,650,652,654,656,658,660,662,664,667,670, 673,676,679,682,684,686,688,690,692,694,696,698,700,702,704, 706,709,712,715,718,721,724,727,730,733,736,739,742,745,748, 751,754,758,762,764,766,768,770,772,774,776,778,780,782,784, 787,790,793,796,799,802,805,808,811,814,817,820,823,826,829, 832,835,839,843,847,851,855,859,863,865,867,869,871,874,877, 880,883,886,889,892,895,899,903,904,905,907,909,911,913,915, 917,919,921,923,925,927,929,931,933,935,938,941,944,947,950, 953,956,959,961,964,967,970,973,976,979,982,985,988,991,994, 997,1000,1004,1005,1006,1008,1010,1012,1014,1016,1018,1021, 1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1047, 1050,1053,1056,1059,1061,1063,1065,1068,1071,1074,1077,1080, 1083,1086,1089,1092,1095,1098,1101,1104,1107,1110,1113,1116, 1119,1122,1125,1127,1129,1131,1133,1136,1139,1141,1143,1146, 1149,1152,1155,1158,1161,1165,1168,1171,1174,1177,1180,1183, 1186,1189,1192,1195,1198,1201,1205,1209,1213,1217,1221,1225, 1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273, 1276,1279,1282,1285,1288,1291,1294,1297,1300,1303,1307,1311, 1315,1319,1323,1327,1331,1335,1339,1343,1347,1351,1355,1359, 1363,1367,1371,1375,1379,1383,1387,1391,1395,1399,1403,1407, 1411,1415,1419,1423,1427,1431,1435,1439,1443,1447,1451,1455, 1459,1463,1468,1473,1478,1483,1488,1489,1491,1492,1493,1495, 1497,1499,1500,1502,1504,1506,1508,1510,1512,1515,1518,1521, 1524,1527,1530,1533,1536,1539,1542,1545,1548,1551,1554,1558, 1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1600,1602, 1604,1607,1610,1612,1615,1618,1621,1624,1628,1631,1635,1639, 1643,1645,1647,1649,1651,1653,1655,1659,1663,1666,1669,1672, 1675,1679,1683,1686,1689,1691,1693,1695,1697,1699,1701,1704, 1707,1710,1713,1716,1719,1722,1725,1728,1731,1734,1737,1740, 1743,1746,1749,1753,1757,1761,1765,1769,1773,1777,1781,1785, 1789,1793,1797,1801,1805,1809,1812,1815,1820,1825,1830,1834, 1838,1843,1848,1853,1859,1865,1871,1877,1883,1889,1895,1901, 1907,1909,1911,1914,1917,1920,1924,1927,1931,1935,1939,1943, 1948,1953,1959,1965,1971,1978,1979,1980,1981,1982,1983,1984, 1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996, 1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008, 2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020, 2021,2022,2023,2024,2025,2026,2029,2032,2035,2039,2042,2045, 2049,2053,2056,2061,2066,2069,2072,2075,2078,2081,2084,2087, 2091,2094,2098,2101,2104,2108,2114,2122,2125,2128,2132,2134, 2138,2142,2145,2149,2152,2161,2169,2171,2175,2179,2183,2189, 2193,2196,2199,2202,2206,2210,2213,2217,2225,2240,2248,2256, 2260,2264,2268,2271,2274]; CR_4.nullQClass := [0,2,5,7,11,13,16,23,28,35,36,38,43,53,63,75,76,78,83,89, 111,115,126,137,142,153,155,159,161,170,183,190,211,227]; CR_4.nullSpaceGroup := [0,1,2,4,6,8,9,13,15,17,19,20,23,26,27,40,44,56,63,66, 71,87,91,99,105,111,113,116,122,124,128,131,132,134,180,188, 212,226,229,234,235,245,251,257,261,267,271,273,275,279,281, 283,285,286,305,319,329,335,338,342,345,348,452,488,528,548, 584,600,606,614,626,632,638,642,702,722,746,770,780,790,794, 802,806,810,814,816,1034,1122,1182,1201,1207,1223,1232,1235, 1236,1237,1240,1244,1248,1251,1255,1259,1262,1265,1271,1275, 1285,1294,1314,1323,1325,1327,1328,1329,1331,1333,1335,1337, 1339,1341,1343,1345,1347,1351,1352,1354,1359,1363,1365,1367, 1372,1373,1374,1375,1376,1379,1381,1384,1386,1388,1390,1391, 1397,1401,1405,1408,1411,1413,1429,1445,1451,1457,1465,1473, 1481,1489,1495,1499,1503,1509,1510,1522,1534,1538,1542,1548, 1554,1558,1562,1566,1569,1571,1575,1577,1613,1653,1665,1674, 1690,1706,1715,1721,1724,1733,1757,1763,1775,1783,1789,1793, 1801,1803,1807,1811,1813,1815,1823,1825,1829,1833,1835,1837, 1861,1867,1875,1887,1893,1897,1933,1939,1955,1961,1964,2092, 2108,2140,2172,2188,2196,2260,2324,2332,2340,2356,2372,2388, 2404,2412,2420,2424,2428,2524,2536,2560,2576,2588,2592,2628, 2634,2650,2656,2659,2931,2955,3019,3039,3045,3049,3051,3055, 3057,3059,3060,3064,3066,3070,3072,3074,3075,3079,3083,3085, 3087,3091,3092,3096,3097,3101,3102,3106,3107,3115,3117,3125, 3133,3135,3137,3145,3147,3155,3163,3165,3167,3175,3177,3185, 3193,3195,3197,3201,3202,3210,3218,3220,3222,3238,3240,3256, 3272,3274,3276,3292,3296,3299,3300,3303,3304,3320,3324,3327, 3330,3331,3332,3364,3368,3378,3388,3390,3392,3402,3404,3436, 3440,3450,3460,3462,3464,3474,3476,3512,3516,3518,3521,3522, 3523,3524,3525,3526,3527,3528,3531,3534,3536,3542,3554,3557, 3563,3565,3568,3574,3581,3584,3586,3591,3593,3600,3606,3608, 3617,3620,3630,3654,3678,3684,3688,3702,3706,3708,3711,3713, 3729,3733,3749,3765,3769,3773,3783,3787,3823,3829,3830,3831, 3832,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853, 3855,3857,3859,3861,3863,3865,3867,3869,3871,3873,3875,3877, 3881,3885,3889,3893,3897,3901,3905,3909,3913,3917,3921,3925, 3929,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947, 3949,3952,3953,3954,3955,3956,3958,3960,3964,3966,3968,3969, 3970,3973,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984, 3985,3986,3987,3988,3990,3992,3994,3997,3999,4000,4001,4002, 4003,4004,4006,4007,4009,4010,4011,4013,4014,4016,4017,4018, 4019,4021,4022,4023,4024,4026,4030,4034,4038,4040,4042,4043, 4046,4048,4050,4052,4054,4056,4060,4064,4067,4071,4074,4076, 4082,4086,4090,4094,4098,4100,4108,4112,4115,4123,4129,4141, 4149,4155,4163,4167,4171,4173,4175,4177,4178,4184,4188,4191, 4195,4197,4201,4205,4207,4211,4213,4225,4229,4232,4240,4242, 4250,4254,4256,4264,4266,4282,4290,4294,4310,4314,4330,4338, 4342,4358,4362,4370,4374,4376,4384,4386,4398,4402,4405,4413, 4415,4447,4455,4459,4491,4495,4496,4498,4499,4500,4501,4502, 4503,4504,4505,4506,4508,4510,4511,4512,4513,4515,4516,4517, 4519,4521,4522,4523,4525,4526,4527,4528,4529,4530,4531,4532, 4533,4534,4535,4537,4539,4540,4541,4542,4543,4544,4545,4546, 4547,4548,4549,4550,4551,4552,4553,4554,4555,4556,4557,4558, 4559,4560,4561,4562,4563,4564,4566,4568,4569,4570,4572,4574, 4575,4576,4577,4578,4579,4581,4583,4585,4587,4589,4591,4597, 4598,4599,4600,4603,4607,4610,4614,4616,4620,4622,4625,4628, 4634,4640,4642,4649,4651,4652,4653,4657,4663,4667,4673,4679, 4683,4687,4691,4696,4706,4710,4714,4715,4717,4718,4726,4734, 4736,4737,4739,4741,4743,4745,4747,4749,4750,4754,4756,4758, 4759,4760,4762,4763,4766,4768,4769,4771,4773,4775,4776,4778, 4779,4780,4781,4782,4783]; CR_4.nullZClass := [0,1,2,4,6,8,11,14,20,27,33,39,52,61,73,85,93,95,97,99, 103,105,107,109,111,113,116,119,122,123,124,125,126,127,129, 130,131,132,133,140,146,159,172,183,189,195,201,207,212,218, 230,236,241,246,250,254,262,266,270,276,282,288,294,300,302, 304,306,308,312,314,318,320,322,326,328,330,333,336,338,341, 346,353,358,365,367,369,371,375,377,379,380,381,383,385,386, 387,389,390,392,394,396,400,404,405,406,408,410,411,412,416, 418,419,421,423,427,429,431,433,436,439,444,447,450,454,459, 463,467,468,469,470,471,473,475,476,477,479,481,482,488,494, 500,506,512,517,522,527,532,537,542,547,552,557,562,567,568, 569,570,571,573,574,575,576,579,581,586,590,592,595,599,603, 606,607,608,609,611,612,613,614,615,616,617,618,620,621,625, 627,629,631,633,635,637,639,641,643,645,648,650,652,654,659, 661,664,666,670,674,676,679,681,684,687,690,693,694,695,696, 697,698,699,700,701,702,703,704,705,706,708,709,710]; CR_4.orbitLengthSpaceGroup := [7,3,1,1,7,7,3,3,1,6,9,2,1,2,6,6,1,6,6,3,6,6,12,3,6, 6,3,6,2,1,2,1,2,1,2,1,1,1,1,4,2,2,4,2,1,2,1,2,2,2, 1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,1,3,3,1,1,1,1,1,1, 1,1,2,2,1,1,1,2,2,1,1,1,1,2,3,2,6,1,3,3,1,1,1,2,1, 1,2,1,2,2,2,2,6,6,6,6,6,6,6,6,1,2,1,6,6,6,6,6,6,6, 6,3,6,3,6,6,6,6,6,12,6,12,12,12,12,3,6,3,6,12,6,1,6, 6,3,3,6,6,1,2,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,1,2, 2,1,1,1,2,2,4,4,4,4,2,2,2,2,1,1,2,1,2,2,2,1,3,3,6, 3,3,3,6,1,3,1,2,2,1,1,1,2,2,1,1,1,3,3,1,2,2,1,1,3, 3,1,1,3,1,1,1,1,1,3,12,12,24,12,24,4,6,12,24,12,24,24, 12,12,3,8,6,24,4,1,4,2,2,2,2,4,2,4,2,1,1,3,3,6,3,3, 3,6,1,3,12,3,12,3,1,2,1,3,1,3,1,2,4,3,6,3,6,3,3,6, 3,6,6,6,6,6,6,6,3,6,6,6,6,6,6,3,6,3,6,6,6,3,6,6,3, 6,3,1,6,6,3,3,6,6,6,6,3,6,6,6,3,6,6,6,3,6,6,3,6,6, 6,3,3,6,6,6,6,2,6,6,6,6,6,6,3,6,3,6,6,6,6,3,6,6,6, 6,3,6,6,6,6,6,6,6,2,3,3,3,6,6,3,6,6,1,3,3,1,2,1,2, 2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,1,1, 2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,1,1,2,2,2,2,1,2,1,2, 1,2,2,1,2,1,2,2,2,1,1,2,2,1,2,1,2,2,2,1,1,3,3,3,6, 3,6,3,6,3,3,6,3,1,3,3,1,3,3,1,2,1,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,2,2,2,2,1,1, 6,3,3,6,6,6,3,3,3,6,6,3,6,2,1,1,2,1,1,2,3,3,1,1,3, 3,1,1,2,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,2,2,1,1,3,3, 1,3,3,6,3,3,6,3,1,3,3,6,3,6,6,6,6,3,6,3,6,6,6,6,3, 3,6,3,3,6,6,6,6,6,6,6,6,6,3,3,6,6,3,3,3,3,6,6,3,3, 3,3,3,6,6,3,1,3,1,3,2,1,2,1,1,2,2,2,2,2,2,2,2,2,1, 2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2,1,1,1,2,1,2, 1,1,1,2,2,1,1,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,1,1,1, 1,3,3,3,3,6,6,3,3,3,3,1,3,3,6,6,3,3,1,1,1,1,1,1,1, 1,1,1,3,1,3,1,1,1,1,1,1,3,12,12,24,12,24,24,24,12,24, 4,6,12,24,12,6,12,24,24,12,12,6,24,24,24,24,24,12,24,24, 24,24,24,8,24,24,24,24,24,24,24,24,24,12,24,24,12,24,24, 12,12,24,24,24,24,24,12,24,24,24,24,24,24,12,24,24,12,24, 12,24,24,12,24,4,12,12,4,24,12,12,24,24,12,24,12,24,24, 8,12,12,24,4,24,24,24,12,24,24,24,24,12,24,24,12,24,24, 24,24,6,8,24,24,24,24,24,24,24,24,24,24,12,24,24,24,24, 24,24,24,24,24,24,24,12,24,12,12,24,24,24,24,24,24,12,12, 24,24,24,12,12,24,24,6,12,12,12,24,24,6,12,3,24,24,24, 24,24,24,24,24,24,12,24,24,24,24,24,24,24,12,24,12,24,24, 12,24,12,12,24,24,24,24,12,4,24,12,24,24,12,12,12,24,12, 24,24,24,12,24,12,8,24,6,4,12,3,12,12,6,12,1,2,4,4,2, 2,1,4,4,4,2,2,4,4,4,2,2,2,2,4,4,4,4,4,2,2,4,4,4,4, 2,2,4,4,4,2,2,2,2,4,4,1,2,1,4,4,2,2,4,4,4,2,2,4,4, 4,4,4,4,2,2,4,2,2,1,2,4,4,2,2,1,4,4,4,2,2,4,4,4,2, 2,2,2,4,4,1,2,1,3,6,6,3,3,3,6,3,3,3,3,6,6,6,6,3,6, 6,6,6,6,3,6,3,6,6,6,6,3,3,6,1,6,6,3,3,3,3,3,3,6,3, 6,6,6,6,3,3,6,3,6,3,1,3,6,3,3,3,1,12,12,12,24,6,24, 12,24,24,12,8,4,12,24,12,24,6,3,4,2,4,4,1,3,1,3,3,3, 1,3,1,3,3,3,1,1,1,1,2,2,4,1,2,1,2,1,4,3,12,3,4,1,2, 1,3,3,2,1,3,1,3,1,3,3,2,1,2,1,12,3,1,12,3,4,1,2,3, 1,3,3,6,3,3,6,3,1,2,2,2,4,1,1,2,1,3,3,1,1,3,3,3,3, 3,3,6,6,3,3,3,3,6,6,2,1,2,4,2,1,2,1,2,8,3,3,3,2,8, 8,3,3,3,24,8,3,3,3,3,3,6,24,8,3,3,3,3,3,3,6,2,1,1, 2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1, 1,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1, 2,1,1,1,1,1,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1, 1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1, 2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,2,1,1,2,2,1,1,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,2, 4,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,1,2,1,1,4,2,2,2,1,1,2,1,2,1,1,2,2, 4,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1, 1,2,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,1,1,1, 1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1, 2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1, 1,2,1,1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,1,1,2,2,2,2,2, 2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2, 1,2,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2, 1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1, 1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1, 2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,2,1, 1,2,1,1,2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,1,2,1,1,2, 1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1, 2,1,1,2,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,1,1,2,2,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,1,2,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2, 2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1, 2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2, 2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,2,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2, 2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,1, 1,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1, 1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,1,2,2,2,1,2,1,1,1,1, 2,2,1,1,2,2,1,2,2,2,1,2,1,2,2,1,2,2,1,2,1,2,2,1,2, 2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2, 2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2, 2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,1,2,2, 1,2,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,2,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,2,1,2,1,2,2,2,2,1, 2,1,1,1,2,1,2,2,2,2,2,1,1,1,2,2,1,1,2,2,1,1,2,2,1, 1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,2,1,2,2,1, 2,2,2,2,1,2,1,2,1,2,2,2,2,1,2,1,1,1,2,1,2,2,2,2,2, 1,1,1,2,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,1,2,1,2,2,2,2,2,1,1,1,1,1,3,2,1,2,1,1,2,1,1, 2,1,1,2,1,2,1,1,2,1,1,2,1,1,2,1,2,2,1,1,2,1,1,2,1, 1,2,2,1,1,4,2,2,2,4,1,2,1,1,4,1,1,1,1,2,1,4,4,2,2, 2,4,1,4,4,1,2,1,2,1,1,4,2,2,2,1,2,1,2,2,2,2,1,2,1, 1,1,1,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,1,1,1,1,2,2, 2,1,2,2,4,4,4,4,4,4,4,4,2,2,4,4,2,2,1,2,1,2,1,2,1, 1,1,1,1,2,4,4,1,2,2,4,4,1,2,1,2,2,1,1,1,1,2,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,2,1,2,2,2,2,2,1,1, 1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,4, 4,2,2,2,2,4,2,2,4,4,2,2,2,2,4,4,2,2,2,2,2,2,2,2,1, 2,2,1,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1, 1,1,1,2,2,2,1,2,4,2,2,1,2,2,1,2,2,1,2,1,2,2,1,1,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1, 1,2,2,1,2,4,4,2,2,2,1,1,2,2,1,2,2,1,2,4,2,2,1,1,2, 2,1,2,1,2,1,1,1,1,1,1,2,1,1,2,1,1,1,1,2,1,1,1,1,1, 2,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1, 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1, 1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,2,2,1,2,2,1,2,2,1, 1,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,1,1,1, 1,1,6,1,3,3,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2, 1,1,2,2,1,1,2,1,2,1,1,3,9,9,18,3,18,6,1,1,1,1,2,1, 2,1,1,1,1,1,2,1,1,2,1,1,1,1,2,2,1,1,1,1,1,1,3,3,1, 3,3,6,3,3,6,3,3,6,3,3,3,1,1,1,1,1,1,1,3,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,1,1,3,1,2,1, 3,1,1,1]; CR_4.orderQClass := [1,2,2,2,4,2,4,4,4,4,8,4,8,8,8,16,4,4,8,8,8,8,16,3, 6,6,6,12,6,6,12,12,12,12,24,4,3,6,4,8,8,8,16,8,8, 8,8,16,16,16,16,16,32,6,6,6,12,12,12,12,12,12,24,12, 12,12,12,12,24,24,24,24,24,24,48,8,6,12,8,16,16,16, 32,16,16,32,32,32,64,12,12,12,24,24,24,24,24,24,24,24, 24,24,24,48,48,48,48,48,48,48,96,6,12,12,24,9,18,18, 18,18,36,36,36,36,36,72,18,36,36,36,36,36,72,72,72,72, 144,12,24,24,24,48,24,24,24,24,48,48,48,48,48,48,96,8, 16,5,10,10,20,12,24,18,36,36,36,72,72,72,72,144,12,24, 24,24,36,48,72,72,72,144,144,144,288,20,40,60,120,120, 120,240,8,16,16,16,24,32,32,32,32,32,48,64,64,64,64, 96,128,192,192,192,384,24,24,24,48,48,48,72,96,96,96, 144,192,288,576,576,1152]; CR_4.parametersDadeGroup := [[4,20,22,1,0],[4,25,11,2,0],[4,25,11,4,0],[4,29,9,1,0],[4,30,13,1,0], [4,31,7,1,0],[4,31,7,2,0],[4,32,21,1,0],[4,33,16,1,0]]; CR_4.QClassZClass := [1,2,3,3,4,4,5,5,6,6,6,7,7,7,8,8,8,8,8,8,9,9,9,9,9, 9,9,10,10,10,10,10,10,11,11,11,11,11,11,12,12,12,12,12, 12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,14,14, 14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15, 15,15,15,16,16,16,16,16,16,16,16,17,17,18,18,19,19,20,20, 20,20,21,21,22,22,23,23,24,24,25,25,26,26,26,27,27,27,28, 28,28,29,30,31,32,33,34,34,35,36,37,38,39,39,39,39,39,39, 39,40,40,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41, 41,42,42,42,42,42,42,42,42,42,42,42,42,42,43,43,43,43,43, 43,43,43,43,43,43,44,44,44,44,44,44,45,45,45,45,45,45,46, 46,46,46,46,46,47,47,47,47,47,47,48,48,48,48,48,49,49,49, 49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51, 51,51,52,52,52,52,52,53,53,53,53,53,54,54,54,54,55,55,55, 55,56,56,56,56,56,56,56,56,57,57,57,57,58,58,58,58,59,59, 59,59,59,59,60,60,60,60,60,60,61,61,61,61,61,61,62,62,62, 62,62,62,63,63,63,63,63,63,64,64,65,65,66,66,67,67,68,68, 68,68,69,69,70,70,70,70,71,71,72,72,73,73,73,73,74,74,75, 75,76,76,76,77,77,77,78,78,79,79,79,80,80,80,80,80,81,81, 81,81,81,81,81,82,82,82,82,82,83,83,83,83,83,83,83,84,84, 85,85,86,86,87,87,87,87,88,88,89,89,90,91,92,92,93,93,94, 95,96,96,97,98,98,99,99,100,100,101,101,101,101,102,102, 102,102,103,104,105,105,106,106,107,108,109,109,109,109,110, 110,111,112,112,113,113,114,114,114,114,115,115,116,116,117, 117,118,118,118,119,119,119,120,120,120,120,120,121,121,121, 122,122,122,123,123,123,123,124,124,124,124,124,125,125,125, 125,126,126,126,126,127,128,129,130,131,131,132,132,133,134, 135,135,136,136,137,138,138,138,138,138,138,139,139,139,139, 139,139,140,140,140,140,140,140,141,141,141,141,141,141,142, 142,142,142,142,142,143,143,143,143,143,144,144,144,144,144, 145,145,145,145,145,146,146,146,146,146,147,147,147,147,147, 148,148,148,148,148,149,149,149,149,149,150,150,150,150,150, 151,151,151,151,151,152,152,152,152,152,153,153,153,153,153, 154,155,156,157,158,158,159,160,161,162,162,162,163,163,164, 164,164,164,164,165,165,165,165,166,166,167,167,167,168,168, 168,168,169,169,169,169,170,170,170,171,172,173,174,174,175, 176,177,178,179,180,181,182,182,183,184,184,184,184,185,185, 186,186,187,187,188,188,189,189,190,190,191,191,192,192,193, 193,194,194,195,195,195,196,196,197,197,198,198,199,199,199, 199,199,200,200,201,201,201,202,202,203,203,203,203,204,204, 204,204,205,205,206,206,206,207,207,208,208,208,209,209,209, 210,210,210,211,211,211,212,213,214,215,216,217,218,219,220, 221,222,223,224,225,225,226,227]; CR_4.relatorNumbersQClass := CR_2.relatorNumbersQClass; CR_4.rowConjugatorDadeGroup := [[-5,3,-3,1],[-3,2,-2,1],[-2,-2,-1,-1],[-2,-1,1,-1], [-2,1,-1,-1],[-2,1,-1,0],[-2,1,-1,1],[-2,2,-1,-1], [-2,2,-1,1],[-1,-3,1,-1],[-1,-2,1,-1],[-1,-1,-1,-1], [-1,-1,-1,0],[-1,-1,-1,1],[-1,-1,0,-1],[-1,-1,0,0], [-1,-1,1,-1],[-1,-1,1,0],[-1,0,-1,-1],[-1,0,-1,0], [-1,0,-1,1],[-1,0,0,-1],[-1,0,0,0],[-1,0,0,1], [-1,0,1,0],[-1,1,-1,0],[-1,1,0,-1],[-1,1,0,0], [-1,1,0,1],[0,-2,0,-1],[0,-1,-1,-1],[0,-1,-1,0], [0,-1,-1,1],[0,-1,0,-1],[0,-1,0,0],[0,-1,0,1], [0,-1,1,-1],[0,-1,1,0],[0,-1,1,1],[0,0,-1,-1], [0,0,-1,0],[0,0,-1,1],[0,0,0,-1],[0,0,0,1], [0,0,1,-1],[0,0,1,0],[0,0,1,1],[0,1,-1,-1], [0,1,-1,0],[0,1,-1,1],[0,1,0,-1],[0,1,0,0], [0,1,0,1],[0,1,1,0],[0,1,1,1],[0,2,0,1], [1,-1,0,0],[1,-1,1,-1],[1,-1,1,0],[1,0,-1,0], [1,0,0,-1],[1,0,0,0],[1,0,0,1],[1,0,1,0], [1,0,1,1],[1,1,-1,0],[1,1,-1,1],[1,1,0,-1], [1,1,0,0],[1,1,0,1],[1,1,1,-2],[1,1,1,-1], [1,1,1,1],[1,2,-1,1],[1,2,0,1],[2,-2,1,-1], [2,-2,1,1],[2,-1,1,-1],[2,-1,1,0],[2,0,1,1], [2,1,-1,1],[2,2,1,-1],[2,2,1,1],[2,3,-1,1], [3,-2,1,-1],[3,-2,2,-1],[4,2,2,1],[5,-3,2,-2], [10,-6,5,-3],[-6,4,-3,2],[-4,2,-2,1],[-3,1,-1,-1], [-3,2,-1,1],[-2,-3,1,-1],[-2,-1,-1,0],[-2,0,-1,0], [-2,1,0,-1],[-2,1,0,1],[-1,-2,0,-1],[-1,-2,1,0], [-1,-1,-2,-1],[-1,-1,0,1],[-1,-1,1,1],[-1,0,1,1], [-1,0,1,2],[-1,0,2,1],[-1,1,-2,-1],[-1,1,-1,-1], [-1,1,-1,1],[-1,1,1,-1],[0,-3,1,-1],[0,-2,-1,0], [0,-2,2,1],[0,0,-2,-1],[0,0,2,1],[0,1,-2,-1], [0,1,1,-1],[0,2,2,1],[1,-2,1,0],[1,-1,0,-1], [1,-1,0,1],[1,-1,1,1],[1,0,-1,-1],[1,0,1,-1], [1,1,-2,-1],[1,1,-1,-1],[1,1,1,0],[1,2,-1,0], [1,3,-1,1],[2,-1,0,1],[2,-1,1,1],[2,0,0,-1], [2,0,1,0],[2,1,1,1],[2,1,2,1],[3,3,-1,1], [5,-3,2,-1],[5,6,-2,2],[7,9,-3,3]]; CR_4.rowGeneratorZClass := [[-1,-1,-1,-1],[-1,-1,-1,0],[-1,-1,-1,1],[-1,-1,-1,2],[-1,-1,0,-1], [-1,-1,0,0],[-1,-1,0,1],[-1,-1,1,-1],[-1,-1,1,0],[-1,-2,2,0], [-1,0,-1,-1],[-1,0,-1,0],[-1,0,-1,1],[-1,0,0,-1],[-1,0,0,0], [-1,0,0,1],[-1,0,1,-1],[-1,0,1,0],[-1,0,1,1],[-1,1,-1,-1], [-1,1,-1,0],[-1,1,-1,1],[-1,1,0,-1],[-1,1,0,0],[-1,1,0,1], [-1,1,1,-1],[-1,1,1,0],[-2,-1,0,1],[-2,-2,0,-1],[-2,0,-1,0], [-2,0,-1,1],[-2,0,0,-1],[-2,0,0,1],[-2,0,1,-2],[-2,1,0,-2], [-4,3,0,2],[0,-1,-1,-1],[0,-1,-1,0],[0,-1,-1,1],[0,-1,0,-1], [0,-1,0,0],[0,-1,0,1],[0,-1,1,-1],[0,-1,1,0],[0,-1,1,1], [0,-2,-1,-1],[0,-2,-1,0],[0,-2,0,-1],[0,0,-1,-1],[0,0,-1,-2], [0,0,-1,0],[0,0,-1,1],[0,0,-1,2],[0,0,-2,-1],[0,0,-2,3], [0,0,-4,3],[0,0,0,-1],[0,0,0,1],[0,0,1,-1],[0,0,1,0], [0,0,1,1],[0,0,1,2],[0,0,2,-1],[0,0,2,1],[0,0,2,3], [0,0,3,-1],[0,0,3,-2],[0,0,4,-1],[0,0,4,3],[0,1,-1,-1], [0,1,-1,0],[0,1,-1,1],[0,1,0,-1],[0,1,0,0],[0,1,0,1], [0,1,1,-1],[0,1,1,0],[0,1,1,1],[0,1,2,1],[0,2,-2,-1], [1,-1,-1,0],[1,-1,-1,1],[1,-1,0,-1],[1,-1,0,0],[1,-1,0,1], [1,-1,1,-1],[1,-1,1,0],[1,-1,1,1],[1,0,-1,-1],[1,0,-1,-2], [1,0,-1,0],[1,0,-1,1],[1,0,-2,-1],[1,0,-2,1],[1,0,0,-1], [1,0,0,0],[1,0,0,1],[1,0,1,-1],[1,0,1,0],[1,0,1,1], [1,0,2,-1],[1,0,2,1],[1,1,-1,0],[1,1,-1,1],[1,1,0,-1], [1,1,0,0],[1,1,0,1],[1,1,1,-1],[1,1,1,-2],[1,1,1,0], [1,1,1,1],[1,2,0,1],[1,2,1,0],[1,2,1,1],[1,3,-1,1], [2,0,1,1],[2,1,0,-1],[2,1,0,1],[2,1,1,0],[2,1,1,1], [2,2,0,1],[4,-1,0,-2],[4,1,0,-2],[4,1,1,1]]; CR_4.spaceGroupIdentity := [[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]]; CR_4.splittingQClass := BlistList( [1..227], [36,37,38,76,77,78,112,113,114,115,154,155,160,161,162,163, 171,172,173,174,175,176,177,178,191,192,193,194,195,196,198, 201,212,213,214,215,216,217,218,219,220,221,222,223] ); CR_4.splittingSpaceGroupType := BlistList( [ 1 .. 4783 ], [1373,1374,1375,3517,3518,3519,3520,3521,3522,3523,3524, 3525,3526,3527,3606,3615,3938,3939,3940,3941,3942,3943,3944, 3945,3946,3947,4496,4497,4498,4504,4505,4506,4507,4508,4509, 4510,4511,4512,4516,4544,4545,4546,4547,4548,4549,4550,4551, 4552,4579,4580,4581,4582,4583,4584,4585,4586,4587,4588,4589, 4590,4591,4592,4593,4594,4595,4596,4597,4598,4599,4600,4601, 4602,4603,4604,4605,4606,4607,4615,4616,4617,4618,4619,4620, 4646,4649,4650,4651,4652,4653,4659,4661,4759,4760,4761,4762, 4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774, 4775,4776,4777,4778] ); CR_4.splittingZClass := BlistList( [1..710], [131,132,133,331,332,333,334,335,336,337,338,420,421,422,423, 424,425,426,427,428,429,568,569,575,576,577,578,579,580,581, 584,607,608,609,610,611,612,613,614,615,638,639,640,641,642, 643,644,645,646,647,648,649,650,653,654,662,663,664,694,695, 696,697,698,699,700,701,702,703,704,705] ); crystcat/tst/0000755001325400021140000000000014270745041012674 5ustar gaehlerusercrystcat/tst/manual.tst0000644001325400021140000002065713236342476014725 0ustar gaehlerusergap> START_TEST( "Crystcat: manual.tst" ); gap> SetAssertionLevel(1); gap> n := NrCrystalFamilies( 4 ); 23 gap> DisplayCrystalFamily( 4, 17 ); #I Family XVII: cubic orthogonal; 2 free parameters; #I Q-decomposition pattern 1+3; R-decomposition pattern 1+3; #I 2 crystal systems; 6 Bravais flocks gap> DisplayCrystalFamily( 4, 18 ); #I Family XVIII: octagonal; 2 free parameters; #I Q-irreducible; R-decomposition pattern 2+2; #I 1 crystal system; 1 Bravais flock gap> DisplayCrystalFamily( 4, 21 ); #I Family XXI: di-isohexagonal orthogonal; 1 free parameter; #I R-irreducible; 2 crystal systems; 2 Bravais flocks gap> n := NrCrystalSystems( 2 ); 4 gap> for sys in [ 1 .. 4 ] do DisplayCrystalSystem( 2, sys ); od; #I Crystal system 1: 2 Q-classes; holohedry (2,1,2) #I Crystal system 2: 2 Q-classes; holohedry (2,2,2) #I Crystal system 3: 2 Q-classes; holohedry (2,3,2) #I Crystal system 4: 4 Q-classes; holohedry (2,4,4) gap> DisplayQClass( "p2" ); #I Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2; #I Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group gap> DisplayQClass( "R-3" ); #I Q-class (3,5,2): size 6; isomorphism type 6.1 = C6; #I Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps gap> DisplayQClass( 3, 195 ); #I Q-class (3,7,1): size 12; isomorphism type 12.5 = A4; #I C-irreducible; 3 Z-classes; 5 space grps gap> DisplayQClass( 4, 27, 4 ); #I Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2; #I Q-irreducible; 1 Z-class; 1 space group gap> DisplayQClass( 4, 29, 1 ); #I *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3; #I R-irreducible; 3 Z-classes; 5 space grps gap> F := FpGroupQClass( 4, 20, 3 ); FpGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( F ); [ f1, f2 ] gap> RelatorsOfFpGroup( F ); [ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ] gap> Size( F ); 12 gap> CrystCatRecord( F ).parameters; [ 4, 20, 3 ] gap> P := PcGroupQClass( 4, 31, 3 ); #I Warning: a non-solvable group can't be represented as a pc group fail gap> P := PcGroupQClass( 4, 20, 3 ); #I Warning: the presentation has been extended to get a prime order pcgs PcGroupQClass( 4, 20, 3 ) gap> GeneratorsOfGroup( P ); [ f1, f2, f3 ] gap> Size( P ); 12 gap> CrystCatRecord( P ).parameters; [ 4, 20, 3 ] gap> T := CharTableQClass( 4, 20, 3 );; gap> Display( T ); CharTableQClass( 4, 20, 3 ) 2 2 2 1 1 2 2 3 1 . 1 1 . 1 1a 4a 6a 3a 4b 2a 2P 1a 2a 3a 3a 2a 1a 3P 1a 4b 2a 1a 4a 2a 5P 1a 4a 6a 3a 4b 2a X.1 1 1 1 1 1 1 X.2 1 -1 1 1 -1 1 X.3 1 A -1 1 -A -1 X.4 1 -A -1 1 A -1 X.5 2 . 1 -1 . -2 X.6 2 . -1 -1 . 2 A = -E(4) = -Sqrt(-1) = -i gap> DisplayZClass( 2, 3 ); #I Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( "F-43m" ); #I Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible; #I 2 space groups; cohomology group size 2 gap> DisplayZClass( 4, 2, 3, 2 ); #I Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable; #I 2 space groups; cohomology group size 4 gap> DisplayZClass( 4, 21, 3, 1 ); #I *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible; #I 1 space group; cohomology group size 1 gap> M := MatGroupZClass( 4, 20, 3, 1 ); MatGroupZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( M ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] gap> Size( M ); 12 gap> CrystCatRecord( M ).parameters; [ 4, 20, 3, 1 ] gap> N := NormalizerZClass( 4, 20, 3, 1 ); NormalizerZClass( 4, 20, 3, 1 ) gap> for g in GeneratorsOfGroup( N ) do > Print( "\n" ); PrintArray( g ); od; Print( "\n" ); [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, -1, -1 ] ] [ [ 1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, -1 ], [ 0, 0, 1, 0 ] ] [ [ 0, 1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 0, 0, -1 ] ] gap> Size( N ); 96 gap> CrystCatRecord( N ).parameters; [ 4, 20, 22, 1 ] gap> CrystCatRecord( N ).conjugator = One( N ); true gap> L := NormalizerZClass( 3, 42 ); NormalizerZClass( 3, 3, 2, 4 ) gap> Size( L ); 16 gap> CrystCatRecord( L ).parameters; [ 3, 4, 7, 2 ] gap> CrystCatRecord( L ).conjugator; [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ] gap> M := NormalizerZClass( "C2/m" ); gap> Size( M ); infinity gap> HasCrystCatRecord( M ); false gap> NrDadeGroups( 4 ); 9 gap> D := DadeGroup( 4, 7 ); MatGroupZClass( 4, 31, 7, 2 ) gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 ); [ 1, 5, 8 ] gap> for d in dadeNums do > D := DadeGroup( 4, d ); > Print( D, " of size ", Size( D ), "\n" ); > od; MatGroupZClass( 4, 20, 22, 1 ) of size 96 MatGroupZClass( 4, 30, 13, 1 ) of size 288 MatGroupZClass( 4, 32, 21, 1 ) of size 384 gap> DadeGroupNumbersZClass( 2, 2, 1, 2 ); [ 1, 2 ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ] gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 ); [ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ], MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ] gap> R := last[2];; gap> CrystCatRecord( R ).parameters; [ 2, 2, 1, 2 ] gap> CrystCatRecord( R ).conjugator; [ [ 1, 0 ], [ -1, 1 ] ] gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 ); 13 gap> DisplaySpaceGroupType( 2, 17 ); #I Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1 gap> DisplaySpaceGroupType( "Pm-3" ); #I Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1 gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 ); #I *Space-group type (4,32,10,2,4); orbit size 18 gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 ); #I *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65; #I orbit size 2; fp-free gap> DisplaySpaceGroupGenerators( "P61" ); #I Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] gap> S := SpaceGroupOnLeftBBNWZ( "P61" ); SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for s in GeneratorsOfGroup( S ) do > Print( "\n" ); PrintArray( s ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 1/2 ], [ 0, 0, 0, 1 ] ] [ [ 0, -1, 0, 0 ], [ 1, -1, 0, 0 ], [ 0, 0, 1, 1/3 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 1 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 1 ], [ 0, 0, 0, 1 ] ] gap> CrystCatRecord( S ).parameters; [ 3, 6, 1, 1, 4 ] gap> T := SpaceGroupOnRightBBNWZ( S ); SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) gap> for m in GeneratorsOfGroup( T ) do > Print( "\n" ); PrintArray( m ); od; Print( "\n" ); [ [ -1, 0, 0, 0 ], [ 0, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/2, 1 ] ] [ [ 0, 1, 0, 0 ], [ -1, -1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1/3, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 1 ] ] [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 1, 1 ] ] gap> G := FpGroupSpaceGroupBBNWZ( S ); FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 ) gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od; g1^2*g5^-1 g2^3*g5^-1 g2^-1*g1^-1*g2*g1 g3^-1*g1^-1*g3*g1*g3^2 g3^-1*g2^-1*g3*g2*g4*g3^2 g4^-1*g1^-1*g4*g1*g4^2 g4^-1*g2^-1*g4*g2*g4*g3^-1 g4^-1*g3^-1*g4*g3 g5^-1*g1^-1*g5*g1 g5^-1*g2^-1*g5*g2 g5^-1*g3^-1*g5*g3 g5^-1*g4^-1*g5*g4 gap> # Verify that the matrix generators of S satisfy the relators of G. gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) = > MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) ); true gap> STOP_TEST( "manual.tst", 10000 ); crystcat/tst/testall.g0000644001325400021140000000037213236036170014513 0ustar gaehleruserLoadPackage( "crystcat" ); TestDirectory( DirectoriesPackageLibrary( "crystcat", "tst" ), rec( exitGAP := true, testOptions := rec( compareFunction := "uptowhitespace") ) ); FORCE_QUIT_GAP(1); # if we ever get here, there was an error crystcat/GPL0000644001325400021140000004311013232361444012424 0ustar gaehleruser GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. crystcat/Changelog0000644001325400021140000000135414270732133013675 0ustar gaehleruserVersion 1.1.10 - Improved documentation conversion and formatting Version 1.1.9: - Compatibility fixes for GAP 4.11. Version 1.1.8: - PackageInfo record corrected. Version 1.1.7: - Testfile with manual examples added. - Corrected premature warning about RefinedPcGroup. Version 1.1.6: - Fixed file permissions. Version 1.1.5: - Minor update. Version 1.1.4: - Adapted to GAP 4.5. Version 1.1.3: - Address change. Version 1.1.2: - File manual.toc added. Version 1.1.1: - Several manual examples fixed. - Support for new package loading mechanism in GAP 4.4 Version 1.1: - Fixes for several problems with trivial groups. - Corrected the list of enantiomorphic pairs of space groups of dimension 4. crystcat/PackageInfo.g0000644001325400021140000000551214270731721014404 0ustar gaehleruser############################################################################# ## ## PackageInfo.g for CrystCat ## SetPackageInfo( rec( PackageName := "CrystCat", Subtitle := "The crystallographic groups catalog", Version := "1.1.10", Date := "29/07/2022", # dd/mm/yyyy format License := "GPL-2.0-or-later", ArchiveURL := Concatenation( "https://www.math.uni-bielefeld.de/~gaehler/gap/CrystCat/crystcat-", ~.Version ), ArchiveFormats := ".tar.gz", BinaryFiles := [ "doc/manual.pdf", "doc/manual.dvi" ], Persons := [ rec( LastName := "Felsch", FirstNames := "Volkmar", IsAuthor := true, IsMaintainer := true, Email := "Volkmar.Felsch@math.rwth-aachen.de", WWWHome := "http://www.math.rwth-aachen.de/~Volkmar.Felsch/", #PostalAddress := "", Place := "Aachen", Institution := "Lehrstuhl D für Mathematik, RWTH Aachen" ), rec( LastName := "Gähler", FirstNames := "Franz", IsAuthor := true, IsMaintainer := true, Email := "gaehler@math.uni-bielefeld.de", WWWHome := "https://www.math.uni-bielefeld.de/~gaehler/", #PostalAddress := "", Place := "Bielefeld", Institution := "Mathematik, Universität Bielefeld" ) ], Status := "accepted", CommunicatedBy := "Herbert Pahlings (Aachen)", AcceptDate := "02/2000", README_URL := "https://www.math.uni-bielefeld.de/~gaehler/gap/CrystCat/README.crystcat", PackageInfoURL := "https://www.math.uni-bielefeld.de/~gaehler/gap/CrystCat/PackageInfo.g", AbstractHTML := "This package provides a catalog of crystallographic groups of \ dimensions 2, 3, and 4 which covers most of the data contained in \ the book Crystallographic groups of four-dimensional space \ by H. Brown, R. Bülow, J. Neubüser, H. Wondratschek, and \ H. Zassenhaus (John Wiley, New York, 1978). Methods for the \ computation with these groups are provided by the package \ Cryst, which must be installed as well.", PackageWWWHome := "https://www.math.uni-bielefeld.de/~gaehler/gap/packages.php", SourceRepository := rec( Type := "git", URL := Concatenation( "https://github.com/gap-packages/", LowercaseString( ~.PackageName ) ) ), IssueTrackerURL := Concatenation( ~.SourceRepository.URL, "/issues" ), SupportEmail := "gaehler@math.uni-bielefeld.de", PackageDoc := rec( BookName := "CrystCat", ArchiveURLSubset := ["doc", "htm"], HTMLStart := "htm/chapters.htm", PDFFile := "doc/manual.pdf", SixFile := "doc/manual.six", LongTitle := "The crystallographic groups catalog", ), Dependencies := rec( GAP := ">=4.11", NeededOtherPackages := [ [ "Cryst", ">=4.1.24" ] ], SuggestedOtherPackages := [], ExternalConditions := [] ), AvailabilityTest := ReturnTrue, TestFile := "tst/testall.g", Keywords := [ "crystallographic groups", "space groups" ] ));