crystcat/README0000664000371700037170000000271013503171610015001 0ustar gap-jenkinsgap-jenkinsThe GAP 4 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" by H. Brown, R. Bülow, J. Neubüser, H. Wondratschek, and H. Zassenhaus (John Wiley, New York, 1978). This catalog was previously available in the library of GAP 3. The present version for GAP 4 has been moved into a separate package, because it 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. CrystCat is distributed together with GAP, and does not require any installation. It is loaded with the GAP command gap> 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.g0000644000371700037170000000056113503171610015234 0ustar gap-jenkinsgap-jenkins############################################################################# ## #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/read.g0000644000371700037170000000060113503171610015177 0ustar gap-jenkinsgap-jenkins############################################################################# ## #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/GPL0000644000371700037170000004311013503171610014463 0ustar gap-jenkinsgap-jenkins 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/PackageInfo.g0000664000371700037170000000554313503171610016447 0ustar gap-jenkinsgap-jenkins############################################################################# ## ## PackageInfo.g for CrystCat ## SetPackageInfo( rec( PackageName := "CrystCat", Subtitle := "The crystallographic groups catalog", Version := "1.1.9", Date := "28/05/2019", # dd/mm/yyyy format License := "GPL-2.0-or-later", ArchiveURL := Concatenation( "https://www.math.uni-bielefeld.de/~gaehler/gap45/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/gap45/CrystCat/README.crystcat", PackageInfoURL := "https://www.math.uni-bielefeld.de/~gaehler/gap45/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/gap45/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", Autoload := true ), Dependencies := rec( GAP := ">=4.5", NeededOtherPackages := [ [ "Cryst", ">=4.1.8" ] ], SuggestedOtherPackages := [], ExternalConditions := [] ), AvailabilityTest := ReturnTrue, TestFile := "tst/testall.g", Keywords := [ "crystallographic groups", "space groups" ] )); crystcat/doc/crystcat.tex0000644000371700037170000012025513503171610017247 0ustar gap-jenkinsgap-jenkins\def\x{\times} \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 \x 1}$), we can describe the linear mapping $g$ involved in $s$ by an $n \x n$ matrix $M_g \in GL_n(\R)$ which acts by multiplication from the left on the column vectors in $\R^{n \x 1}$. Hence, if we identify $V$ with $\R^{n \x 1}$, we have $s(v) = M_g v + t$ for all $v \in \R^{n \x 1}$. Moreover, if we extend each column vector $v \in \R^{n \x 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) \x (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 \x 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 \x n$ matrix group $P(S)$, the ``point group'' of $M(S)$. In fact, we can choose the basis of $\R^{n \x 1}$ such that $M_g \in GL_n(\Z)$ and $t \in \Q^{n \x 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) \x (n+1)$ matrix $M\pif_s = [ [ M\pif_{g\pif}, 0 ], [ t\pif, 1 ] ]$ with $M\pif_{g\pif} \in GL_n(\R)$ and $t\pif \in \R^{1 \x n}$ such that $[s(v\pif),1] = [v\pif,1] M\pif_s$ for all $v\pif \in \R^{1 \x n}$, and we may represent $S$ by the matrix group $M\pif(S) = \{ M\pif_s | s \in S \}$. Again, we can choose the basis of $\R^{1 \x n}$ such that $M\pif_{g\pif} \in GL_n(\Z)$ and $t\pif \in \Q^{1 \x n}$ for all $M\pif_s \in M\pif(S)$. From the mathematical point of view, both approaches are equivalent. In particular, $M(S)$ and $M\pif(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\pif(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\pif(S)$ of $M\pif(S)$. For example, the isomorphism $\tau: M(S) \to M\pif(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\pif(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 \x 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 \x 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 \x 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) \x (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 \x 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.tex0000664000371700037170000000301013503171610016657 0ustar gap-jenkinsgap-jenkins\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.9} \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 http://www.gnu.org/licenses/.} } \OneColumnTableOfContents \FrontMatter \Chapters \Input{crystcat} \Appendices \Bibliography \Index \EndOfBook crystcat/htm/theindex.htm0000664000371700037170000000651713503171610017244 0ustar gap-jenkinsgap-jenkinscrystcat : 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
Mai 2019
crystcat/htm/CHAP001.htm0000664000371700037170000014700113503171610016362 0ustar gap-jenkinsgap-jenkins[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 \x 1), we can describe the linear mapping g involved in s by an n \x n matrix MgGLn(R) which acts by multiplication from the left on the column vectors in Rn \x 1. Hence, if we identify V with Rn \x 1, we have s(v) = Mg v + t for all vRn \x 1.

Moreover, if we extend each column vector vRn \x 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) \x (n+1) matrix Ms = [ [ Mg, t ], [ 0, 1 ] ], we have [ [ s(v) ], [ 1 ] ] = Ms [ [ v ], [ 1 ] ] for all vRn \x 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 \x n matrix group P(S), the ``point group'' of M(S). In fact, we can choose the basis of Rn \x 1 such that MgGLn(Z) and tQn \x 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) \x (n+1) matrix M\pifs = [ [ M\pifg\pif, 0 ], [ t\pif, 1 ] ] with M\pifg\pifGLn(R) and t\pif ∈ R1 \x n such that [s(v\pif),1] = [v\pif,1] M\pifs for all v\pif ∈ R1 \x n, and we may represent S by the matrix group M\pif(S) = { M\pifs | sS }. Again, we can choose the basis of R1 \x n such that M\pifg\pifGLn(Z) and t\pif ∈ Q1 \x n for all M\pifsM\pif(S).

From the mathematical point of view, both approaches are equivalent. In particular, M(S) and M\pif(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\pif(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\pif(S) of M\pif(S). For example, the isomorphism τ: M(S) → M\pif(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\pif(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 \x 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 \x 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 \x 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) \x (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 \x 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
    Mai 2019
    crystcat/htm/chapters.htm0000664000371700037170000000102413503171610017231 0ustar gap-jenkinsgap-jenkinscrystcat : a GAP 4 package - Chapters

    crystcat : a GAP 4 package - Chapters

    1. The Crystallographic Groups Catalog

    crystcat manual
    Mai 2019
    crystcat/htm/biblio.htm0000664000371700037170000000175713503171610016675 0ustar gap-jenkinsgap-jenkinscrystcat : 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
    Mai 2019
    crystcat/lib/normalizer.gi0000664000371700037170000000157013503171610017375 0ustar gap-jenkinsgap-jenkins############################################################################# ## #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.gd0000644000371700037170000005255013503171610017044 0ustar gap-jenkinsgap-jenkins############################################################################# ## #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.gi0000644000371700037170000021127613503171610017053 0ustar gap-jenkinsgap-jenkins############################################################################# ## #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/grp/crystcat.grp0000644000371700037170000041650713503171610017272 0ustar gap-jenkinsgap-jenkins############################################################################# ## #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/manual.tst0000644000371700037170000002065713503171610016754 0ustar gap-jenkinsgap-jenkinsgap> 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.g0000644000371700037170000000037213503171610016553 0ustar gap-jenkinsgap-jenkinsLoadPackage( "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/Changelog0000664000371700037170000000124613503171610015736 0ustar gap-jenkinsgap-jenkinsVersion 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/doc/manual.lab0000644000371700037170000000625413503171610016630 0ustar gap-jenkinsgap-jenkins\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.toc0000644000371700037170000000074213503171610016653 0ustar gap-jenkinsgap-jenkins\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_doc0000755000371700037170000000044513503171610016357 0ustar gap-jenkinsgap-jenkins#!/bin/sh 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 mkdir -p ../htm ../../../etc/convert.pl -c -i -u -n crystcat . ../htm dvips -o manual.ps manual ps2pdf manual.ps manual.pdf crystcat/doc/manual.mst0000644000371700037170000000046413503171610016672 0ustar gap-jenkinsgap-jenkinspreamble "" 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.six0000644000371700037170000000343313503171610016671 0ustar gap-jenkinsgap-jenkinsC 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.pdf0000664000371700037170000041060213503171610016641 0ustar gap-jenkinsgap-jenkins%PDF-1.4 %쏢 5 0 obj <> stream xXn7WHܗ$N؀cLC  Kly'Y{qN1$gsNadغ{F=Z^YA[Z,꽦 -hΞ҆ry7y3j yEv Uho1͒A:r QKT (UwHUh\tʷ imNeZR1TdHb|\nilϏqV>QqhoIWIG b sP_2"9%t| s~8&|T[I8Qq,=fԷxIP=;J\:]ͳd0ݟqõXjGTݛXfΚiE>-ƮS@eTi9`nJa~Jw1S.ޡoFn29=Twkx$X{tf:̘Оʋ̓Bc<."BҌ+%[{g^P/ T=X~V f)e&zqaC;sԁ*Fi3GjasWЋ3/HͣNSC'7q]H]- Ɣ׾i zx%ɝt= _^mN$|3A1n*١".YAeBNv1 SlcQA^fEZmy)7#mw߇mi"Cp_63\pW>Hlhb Z܁"WvueCNOeCݶ2?ot,+ێDndЂ{Bgwg܋ |01\pgXqO& ܿMi"}1&j`˥yno &[Q7chˇ/v?kƠZ7xzN0OFP R=Gf%h*]n wC 6Ys^Mendstream endobj 6 0 obj 1755 endobj 19 0 obj <> stream xMO9+ؽR.?IvE{ ;D9Z`&hſrO]@ E@v>.RJ޾:^|Y`YϫK*bk B<_|_6TA(_ӧ D^5 lZ5\4VΤZZQdGc^66' B$Tcaё/O,iy!xN`m4&d@;E7F8ͮ Ӌ 69iCƻuui*Tlo\ŔWlMt$8ܳQ&$ !qg!&@M}FJdL9:i8Q /_+p51:7LxaЁ̉a`Ӥ6tAl?&UAp#. cf9;]dkG 49;TbdȈmDѨ%iC & m h/3h.2e S>j zdy9NGQGrfK'KqÀ 7b"ם?n<s.,0 >Y9g~EwZf gٞI,f{olW}ߴ:nQ{])f/I]"qAtQ/㾨Jlf[v.6L=-md!ggz~6v(Rsv=yo𡢧bOQxWJ<\QoIOZ>|R!mhɊm'~;|R+8>_#e΋kɭܰH0ZΟ; endstream endobj 20 0 obj 953 endobj 26 0 obj <> stream x\Ks$\/0b/MTxIWZmZMFHց3| CX ;@U&PYli1)Qxf~e"Q?:_w8{1]?^=%TG *sEyQy;#`˷/ߨch5/3es-冤J)xCR7xvA9x;a3w6m3isG*GRY67= 1j=ڀzs"gsImU"Nm㨎POleYc7{8ҴmouIl55ďyڿ>Fрq,)uOp$G! +sU]\IkjM}Yi]ꟳg:\7r]zdp@ 7'2*6u=ʴBz=7|-%^,V3uns,a`?bU),~8֓m/JcUc5v4Ne4`ϫvIJw*oフ]K_ ~!2rXU}|O7UZ0[ZϦIPqN%baE`4gqxK]ܽQΊn$H,k(Ҍ V.@кhdxIlkE@)TE*`Z xUiL11755~UyZD^Ad9la % +v۝@~vdݓC!~UC+Tb~avzi :G~j(;q$?0!NxH[2RRMcA|E7W|; K 3;#c(F+'\`0)D>\\5+-iScqC#D+rh;HWhr8jTrBDE )4:'z ̹OƗnh 6"R*#Eiw:/pk!T4 pAg%~=Q顀i- ZVk}R249<^0ƴOghv $5{B|k (86$hTu% et VXA>`V1J4{JN0Ț'-Sc?mh|caa$'t+;N`deq-}z@'ʮ)<8G6pO>iAծw~yᏤ3R23+c F3򣞎e{-\ӡa7tTKhl򴔝'βȗzt@Aqm)dVS,qZ7|܍7#/l譍̲W~ie2keJ8S*KGo$d_猈ⴥ *}G7TJoΪZhwJ>Quq.1 zEU/'\jKY<~Cr/ہ¹8#=@Evq8LWUIŠJ_Υ[*؏aJ9K4 w|=131,sQ7x y`d#9ݩʺl-0`?\1̫a/xNMrʕu:B m$^C><:z``(oAr^a{eT+X V$_G*c:3(1Aݴ&?+CUIN 9M 7O7ynr+Y>[o胂w_/^9(mYèui FV[Hj2tH~$ =]|,պ9KJ]dÊG^ zPv~i_9y҅/ű3Jvc;wɫ;MZϑ"K|dգu`c3B\fċn ``2X~^4n1=Mn=|7!@G86̋f,!|s+M9(08/RX1Wd"zʵ-4i NW#^jb-[e5ΌǨA5VjWUj*UMxQ`fO=&8V0Gjz3D,*7=_zR5h|=}3{ag m0X0k#u!NzCņһ~w>󤴪UVUeӪ6jGV9?&tցq?+$8}G7_h20wuƳEQkv> stream x][qN)oz_X&ZsIrbǩر-Ʈ7!4E:F3=KwO{R)= 3_{x1b=_<٧T?^=zqpC2,ŃOY_ ^_|U.f哫k5LYkmR[pцLF絳4z30d|?\t^h4itsrN˗WӠ~=/}}š~SGo S?y`N \xWm3. ]^!>MM7ʿfu_nx[Ú}uaF0R?G5ebxpum8Sa {۩) A!9,#gaWza^^}%^}R^}]95F yiׁ*B*ExXc {?k*UFRB9αYyvf:{{u?:{+<,zI\r]K%_|Ӽi}}\* Lb^c*!6f=,oL ask 46@]Aŕ:f}!$k\b8}&*x+ 冗@O^1:)d)Oa\5s ,e7dغQ_/"txZ[zý쪱ü5YgzJ5N3^mbJ {T4@qp*PWidAho:fNo&5Xe ^ʄSW@.ὙKS{&zXW^ 2 O1L=AR$p,= 3er|-|]V/&ڿ|Fc>i7r<~Uk1Q`;’̜valw;\u 4 Af|$H 1Pf1N]^3kwx GSTgu-n祰/:b`G޿`i,՟?^)k{zwm죞pݥsft`6OыՓ绫 M 6gj}yPj?Z7|@ԶWs WՐ! d1̾ΆZ$_/CYн0 C]Ѩΐ:XMv]Ϻzp@p'k-g]&3h*L9w{V#Cҥdf#*.^$^l_4G>_ +Ī]˒EsYRKA\ɬ4 BL*CUH_*7D⿫Ojo) c>Rn'7yG`=aʞD,3eF.Ah()+2&G6D.#AXaRt1A[Z7-y< z 1z {Ȯ֧Qn`y"j M3fS7QD]Ybs0JJ,D^ٱ&2?K :پ( "+l !"K6s4Rbe,ѮvFbF ĝU-DIEG?+'7Xg@Ͱ;޷2qeqg?*B04ў-M?L3޴q ьĨT`/7>sx06@[q뽟׫(w:pV'C$>׋{級?cwKC{R D!#Y&p65KO!&=B|V#1]E5]0rZGOZa ԇ^50|I!gQ#jy?%o9*&_bH?LbV8:h=?,κ ŵZ)0(]EE_A:qS»GmkCa<ιAiB/(-yl"ӤȐ.wpsR;QH2yuޗE笶\ %=faU u !OTNuI1vT_3jAܡ*@'DNJL{^/Ac[LK``3D)UuYJ~\IDI\FՌү"rv|ln8̛@r.8ݢFZ 8M8;Kk+^9PEz6O1 Y. JJ_^EƂ7%&j0Q [5P[>w3@׶K>F@Y+KՌoA9edJLZ`CcUBxh;|Q鋈 E(ծ^E(a|'T4,˩H5A4cg/ kd@sH,*ɳQ_㵇?~VDFnw:=hVxU45˛p+Z|"3pw13Fq,)glũEI5Kd69dŸVKV& Q/[ ls "OSc,Be^X=:B 7R DٵuPH"YЈM-оWQ9R9ȁd}z*Eɠ@{vy 3)I^ϐ Xk\PQo HD@ߔV-d5P~uvWƨ`%MtEix4i#ӴO9.y 7/#]ȍxc",-a\dF#鿠BUX$_֟ȖZOTy̭Yhоn{~0$4k+op?xQC'd@rx@jiBS+he퉮=E]`EO XOm=N?^dw9*:w@ Lަ[lB0++sj^!HPXj?Xɗ!Іzj,ڂcS2ͶdL86$uj>ý%B"e۫1yf7PXͮ6mb>cFPFqF^{KG)T 4ptLs%/>SUo|raW6ޭ@lRVc|4:\Lai2/LrBڛM,33d3\Uq2#V}ãL qظdﭗeM4ÎnѰVdԓ&1?% `WP^$[Xk:-JN.GZd0#ۈP/ƹ(d/WMӃ'LV%}S*R]Bsu"%Tj:NA:C8v!Xkt*#"k imtmeu#2;`S5HVB ́OHIJ+]ܥeuNa~U$8&p̯Os vujXDm*UXN9SY>s6|LP~ȞL}Ze{He̍J=F/~fn gEح-a2ڒ'0m1UPZQU;%o5)gJ^J E~9+{ [:$A)F+%OiЪ!jm."|X(G}Ag_~y{Y 'H˯"xЗ^1Jl$jwWxx d|z;taeWls}pΧL@xfz¤Sv&])> tuj][1~2f/{:1[n'sRQ*4N(g*'}')#̟\gk[9¦If\,4 )l*A8ab 0x8'& weZPivdIFiD<YN Soy}YlCV N w'T 1 ЯmnnmJ7rS)#FkR?rt~$7Kk5%(X _lU6{:_i"o;Xx=TVu é7N]QtG$̓^2dKANM/Z<ѫ62o1垫"VT.'4t36 HXSɥv8!UPGYoP>2{הdZsDaBtK˃4 j=yA ͎(;㇆e3̱U"# RXև{J*>Es7T-͎o% S[9cKOٓ$}{d_dl^:X1xBj>a#Ѻ )1ҐPC,-} %pk 8UkP?IǏU^oU,ՙaluxy\sJ\2Θ]CV On;[r[P'O&X;4&IJ{zz;wUƥSU&za36֑&=wެ*]e?lVV91=ԶidcZv"?$|H=Dz7V7ɚ)?wuy N؄?U3@)( *B N@Gm.Ϯ̏bIfĺ\h5NM֕'4a^cKQe7WZ!u4wu&nI+TTQMܑB ^SexP_2y"~/ pO9X9=2 6LmaCgd!%|vmVWq8C5*e+toVky{.KVMؒ鞧# oR xu} [998H-a*BlH2R* NCK\^XvCi} t Ic9 aVgOJݪFh/6' ~Y8+4]*eo`vۖ [$!R[oԔ$h9~0&̂5Gd69zM-ʘ@޷uGPAy5AW8Ώm,X%U\ ?sQuʊ $q ?vPE88?\x}$nFAH!&1}pxMv NUY}X0 SLҟadWKFPܴ7 ʢxǻ =9̝#ٷS"/G<: וR@NdN;y$R9 >PumɋWIz{GҚJ'4O+|(!`,2\%+mJU-A+1>=;[H;&Z"{%NY+‡}h t>JTN1VFCz]؁W 2i1'ehee:t$ $l7R)eT1hy8a%vvx#yч7QㆾK ْiI: 9gBJxbu{sAJD, ֎ ;ClArmҔvʱ גWѬ UQi)4Ӛ^zPxH:F!hCv=va A"QvnF+irn٭dT@4~SPNPKdguIwoʾKwB#Bƈ-\]E0M=3dyXN2"ŸAyWڃ:QcM 6y(:-՟W:hGvZ;-I Wk94s!A*DŽYȳ6y— \~X=6X:_~U͉ >%6n Cq,b~T-Z" .gKMo[QYk8YGvAz3᛼˭$Lrxϔ%^ h{Eװ^6?!"ĶcWt8~͠\9anjo&`_D4m,RbWt0tN-sY&MaK5n1o _q&D'dH@Cmg]f}GŽ)QOݞJX2Al`ԛ*iU$WCʈU8[ٗYϽ3 GSKj-Ko)%҅L%fC.6ً '>pڷ5 ?n}s C=*AsQqx?X/$~|(2::6lm3kX/fX{Õ2x䤙շ ѣ>#-VaʄWt=Ƚ2B2:ksM&BȻ@4lCc%{ m@8j{9#!i5UP Lg6qq8QEj:c.#üof !~݆rd)Xp45EpZyfȑ[]E8x|9y@*mnwhpέ;{h8]NoXxGm!,گǹ }6WOjm& R{+$)R)fؕ˲Sq˹-sR 2Q7u:΍aJ':kXQfҨWwVWm[:T' SM=mtM> MFFǶ37j2y3~ ?/ÆO~8Rr!d;#Z(NJP4& ʟmb5~Dzg5&p]§L2坱m~4،SPj/9k!,_dw4~0K-q,?Ɇ(C9-ͅ-9'_> stream x][^d+mgLyg{l'kqlG8~4ɱQ߈x"}Ι,h}&Յ?8[_}Ξ}=<xpZ϶eGҝ3٣|{NjKm5ťXi:4ž^!Hq};iJ/NsmSK8kjv]BmB-lK+_аg `^0WJ7xW&ƪ8Xb>^saT8ޥ”g=^wX+AJ[HUX"Sk/aIH׼n-㛋KH٭nҬ/9: vUmbҀF08o/e&8 [>JM_lUm^'#/bvQn0u}" ,XV'v!Ģ3~3 ԫ~?wp6ʘH(j]wպB6]ϹKu U~ܞY(ߒ 7qkhm' CH@xU7QPW] >U/eRM P[pRP"˟NWp\{K~|~Qɍ{lX?6 dvHWA,BRN/..ŭpV-PğI6~,\r`,7T] )cɊĿnb]i2:0 Uc zg_N e|>EzSEZ0 +&cMۂ܄W&(14f|osv $e(c R&ggvقa2U3t YX+Xl<7d]>o϶b`3.6&>9P.r2xU"Vq`\g0Khi_/_U(rKd &3M\We~;6ߐCyKop<' ~[ɥhT T)j4˓CaPZIEgjx!Fo-jhuoz~'|T3: dZgH]&aQѷ zG-Z~Vbk`@E9]3>rı|Z*?e$ٗ:,5k"o;G؅Dz5U }feyE ޱ MIwSX3H r,%ޯXmąqUNJm*}ZՐF=3Qw0Š΂/g}-4im;a:D?*W27( 9x6.YVb]`D'U7!x?܋DN|HP w~U,aw8A ĄT^$+%ep\Q=M*Icy/Ip'vBF3r  11A2qmO$*2xSA0=f󿳪ºXlK0ǘ@>P4$#4QJ*7BԢÒB*=k MfыcɿBNiEYpvwـpgoXև8XVf@M kܪB鶝[Λѫ.~#LUSrui@xY0x 4DǬИ(Hmn20Rd#͍ja6'X4vp5q:tkdrY;];|Ӯig߱CU;?+۵A矶S=ls!tu> u  qe8JɈD'TEi ;fi/٩Qhk&]T8HBu!QhdLF աF&;3:n>;I^W0.%Z$ !(&p+@%au;>o׾hgr[`p"ILm@oCb5ꗐZIhGUoՉ^K ۓVF:~.-ψ7s3yLÊJ7G9l%jlz(ey9Bpybq!b IUs ؼOBE``}Ub-zGʋe0 :G~󫞳4GE.4DVXoj;N88W`;@ o-o%P#goC_w$#zWshՙY /&m8Z5XKk/襇{@ H* h4ׄWuXu=G\;8|Cu U"7p%ʗ$'wכШ^՛Xe*vЧ$i&Iݸ)GfQB>+mK *)0h2r z ~&-3gBcnh#7Ƀn/|f}WtTܘf~HJ4%QOtΒ;퉾uEZ)x|%\MLhO d ot ~H y'bBⴴ0j\vj L#فaCO kb2/zxћ@;`- t`z?S7rbrpr1!welǎm.Ƌ|lo|l +F&82/#QZ? aWK ĉUYP9%.N0@M?YHF톴->TQ!!r4$^L.GzYAt,܂xf̂ =}Gvݳ}s&|9闟?so~iX7CX,,䲥Zd,Q:iva n0Y4,.ʮs:qSeKQ4tTvpG]#ف =Ok3;}g%љG!d*G+#:}$>Fd_v|}Wу.gϫ!$SQ͔hq!Y(_ f{ Ak[Lh82%R-jw4!e= 6MAigz1qS383ځLQR嶅^@֡XĊs^x]zG<`Ap4Ld~b7:(ȞN QwvX!*8>ӊ7%E ~gxmD;(͘GK_Kq3!a`: %4XJ.OXq`hqO-3SҊ]|H5+y|Kי xp Ӽ[/ k%E U~,Gl5fblZ5 :x=6sWGUEYn:*<"֩6eꮁ?gBE}M6-1-@.^"zO+ kn1 zVP$m:~eixz?71@|@=֗#~B"~X ڍﰀZ Zɔ)?+<%ʅ|(nK lB J5/p"?,H2MF&(bK-/\삇}xh|DXWݼi^u|׍t䈢w1 0,ޮ*@TX<% vrKkÃ)ϲˠmǂrȹLσrvh+F!_JBNHC\}8hW%QΊZEj>pS?=&IQ֒0Y]TexD͊棢|I¥qX,g'q .|'ߺ lK]2@I:ݫFkGDa|kl2UA*H G~Evcrv:?3dq-[%rD37Hf1eb O.GjRA^x;BQ.HhP/>zD.#{P]BPyMl&lҰ"5$5+/AN[j`ys{ H2I/`naNh>3Hs&Eǎ(  6pZn!UִF:q+wXYq"e@y@s[2Ỉ}@l,jM)1XGPbGSAN =i\q.(oe<[XfUc0L<"Xyy|l"z,K ZNաT #De,@'YZH@$'xl@U'H4fIC<73(1'D0zaXl9(R yL )RA!ߤt+6(sJKܢބv#coTܐ.!cwy_D 7WO_Hϗb *"FsNt.9wʁ*Ɔ+wP.U5Ļ0$ר׌,9oU29UD#rRqkC|,DH?Y ybKMN~C;ͻj [1k/4SpP}uVk +Œ9(E-eb o*%vc">)0g1aςP!_M*̢4JQ/YԌ8Pַ-uZ–0%0IQw>ٶ|AP:).kbQ%U6n~p.%,@RJHCq]3==V>#ڂCR>@ Qힴ*4۴F0EOb MJ\h}P::!Dt2'5fk8>* 3Jtz+6wͿhc;N~ Ҍu]?p`V}4?f}vwC/+tWyǿh$wzd~hauV͌\`Dl#6!tQP$9a0(zfE>?I+so;; qaGRp_n\zRALU#=MM$+1sA2IQyK}SSst-VF.MKC| ZlcʡIMtM_^$9e/h3ɋ,c|7xfPъS_NYiS2y$u= AX&薦YgЃNia/OS )c| {i?лPAU2u&$? G :43#)5V'87eJ7|DXxQ ]r6)M75X׵۩JYG6C=]T;P4(PuhɍcT9\ʳfOogցA}YO  |Oi&1K }d.(k%f {Bjږ}TK-ꀮ +l 60ILYsNK o zSP2|v7\R;1MlFAB)ĶX D~?}V 6tz@`}^;ԩERe\lGkjCgsVpiVSScLxk%MtxuPx4WY>8%IQC5Wx]ɶ/{=:X s/`8zv;󩲀m{Z߃M0^)ԼZ Q،91n'6KoΕ,$mBP= E.ߛ#D$iǔ- 8W;NϏqlkxt= rAcu]3y#ҫcɆ԰78 ,*g/m51šOsrAj//6ԡEꡮ[l|HZ~5csp,47}IBZeM'!s9xʶ͌:7ce).a6/.y1$$T-mB妛(E`;!Ru`|ך([W{ ,l(}[!%-:{c>VG'8ACHcuEobKʿҜc5 uxSݩ&Mwj s鸱ns9%!B{ 4(l*$XWD|8⣡B6p>d,`\t !?6E{@ѳ-u\]a9I}/'|mrV`@az>;[u^hV޳N᷸ġ4YܙCo&!G3e(jOpRlVSwEegt ad[w{*dqdyG@;5lEbU8ɚY26K9\^/thrElq%F\}}<σ_UÎ^Q"MM'X 6qنp!A}&i(AsPaӱp;(>I)?4/ /"%/Nc¹M+y Χ0T=liim9D};_]QhQުsV؋,ʦR-r]sv|cX]6hق̙*\UoGlӐ; YJ+w 858 #c". qP#BXco.]4¼v1oUKi.yߓ>pؘ`FdlWkbe¤VMu-V a^>=2@2[g:lSRmn茶H)$u l sDiGqb$ְl,_ɖuꜥuk:q叫;GC;/^ C#GR1ga+/ib;<lG+e\_endstream endobj 49 0 obj 8130 endobj 53 0 obj <> stream x\[o7//{Z!n($ڠNdIIvΐ˕%YC9 8KgbG[έη`-~\܆ V_n-ɕy>z>0?mihU53Ҋ0Jw\3N‹5.wb_oV57R9TPlׂ%ݧN4Y.iI1cؽU~8Bw\C1Or341R 'k˄P:A0://_aݸ>S gsotfskͬyѐ$%SyiWB`V݌f\ wf*PVx=q$I\ Nۨ v`2',:K'(?e:ZxƅUP;%2CRƕ.pDB U,x\YbBk6Ƭ,Q>Ċ6R-"s܇<6v0 mzY'⓮QI+C>EJP]4y$q`"r3P;y4zLQeI6(\c1ZdۼЎ=F)Y`.dވ,I`qԵzxQ*9#!Uxu, s\Ew(UYn jp̪d\^9;Tg$>" Ђ6;:vNiQsöeӺud\ ?.ntӚixl=7<ͭY\oh3aTܭ.('jOT+Ml*Hp#Z˭-284hM7^T^8_uz8ͼL$PJ8ִG|ZVeaDp] F>BCGt_tcbђAD}F8q[zdh F|jh(P7Oג}=**e8I]ۋci`*.K*a+1+-kڀ{Þ+@ w#eCT.R'"~V0n./@@Nvjc\/ƃ> -:@S, ,8jtE # 5˸HϐBR/*X!QSj*v/D2ȴa)yڇ;z3^׋]R{&t2`ưEc"C9L-Ќ`b@NH5ÚV2D;0PHhC.pGbU7̨*t$vFU"؛82G6 DZ-(K}K_"] s;"{)r92\H˓c$V>e#24l,}Nj?ϭ3k>XiڧUwO ˭2:*iE.lB$ck8- O[ΣCّHrjf,:`)$<,7MG]2q\ѹd:wiYLt-]W)NB<9*71]"',1p;ZBR%tIJ>Ni7A񣒣Le D_9پ?BN}=yWJ qw >C3>8`݁wrMdH5%I_=Ic֨m5*g1)S/Sاy_O#aݙig։uoQcqNPJFn \th +̔9>AƢB B;0NkݮaݙvZˑ,L;mI;f.]C;kWLOe5!lrDnqRoz*~pH@нңnZyU*mMJ>T"sY:98k8ѓHcnJ@& Fbi$! $XC؟Pv& >%JȊ mx$4h~0SrBW<̓X"|{~72*AW]toe q{/G; ;w]z`\fBU2E3&z p9b͎ S@<ژxThpLesq_ʎ(]0=J+ \\y/EH0,Hq86"(m4oHMWEe'/)П``ga*L I `=WcD_W`#*#kg ]-vI30ͼD#]nɰC67bL5]=6ҟ p6D>%>τnx+@Y0J~TP7#TGQDioJ}Ty69?aYv&7j&0Ci!z.}b}$RoxJ!UmGێY׋F׾u?2 [J>0D,L?m41*I/|܅&Q/.?;poKendstream endobj 54 0 obj 3330 endobj 60 0 obj <> stream x\YǑ^q^ޗnC] d{I6Dk0%~#98R@SȮ#/7bgG7#~ܔ?6 Zlrfs\Sn6ώ~)Da|sOnf'k~G/^i3yc6vRqǻ\N~7rBoؙ*)zB_dm4&?9| j?Pe3T FsW~^HV|Y\GArk7` 棋9#5x'E+|9I'+MlD_Kz|J'GR=L\J/5*}J_$`JWZm/dQI tF$pFmO82 Ӂfa*lzN4]כV2ҫ$m2N>$6%d.+}_N{A`('%5Osl|^'Avr*_=^n׳0 Zz3к]ɲzyA%֠x< M-"o~=BE[x27zHi|W+0e/=IMROK;?ҒvG*5P>M_:y-,z2Oہ; ??gl%P GE|i<3*zF e[,edAY#uRx<2 hFqm~5n4 OjxpNgA7N\UY]z9on[4CGָ-n^&`YHM]ݤew*J@=ҳ")^?j)}r=RkFbwnƅ,X:E fW I54)0oC\X]E5thiv-8C8t]a20cW{|'6Kabnpwl{4Raqh`P:Ny:Qp55֯u;j7gES~r ޫR-vB/ՒlgM|\ޠNR☾o<鶎A&S#p>YP >jԞ*aKi-NJ(0yfh]96>X!3\>Y|V7^z֗qJP0^&\`d_pk{oW|/Mji72 [aRlث¤a[G~BRҥ2k)Ϭu+8 b.`YR}䁥,ki Ի,rT}dp.s̉zݽjR}q:YQʃ:?BYp9lG5^㈍9q8إ2-v)9=weev W/=vK*#{s'F{[=sZM3 V0 KLu@m$+ Hl6J=:'j`8HS;`uvM`!U#xEvhlĐiIP-x2 T!T[; &-)Yئ4dExn0Y֊Ί_Bv0Fٚla`ؤ"|8@GTZglzث'7ȟuI`kd.:gc3wL+ѩly)u0`5,e>c|_rwmG45;o&20?޷=j}UrxL ѧ 3*ܽci- UPbH>U4"W؁3j8 C?96]2LBZ|ysc^zu#5,j OS-Z=eAz<Ù 6{ڳTt2`=3 ó0}*g̀"umV11 1TZфoU4Ʊ0ٰ>!Z Bc9-. Cp%]56`qu|kMX2Vn~NfZ q@ps5 A}mkAT`LGNV]ft|?LMA T}o]/Ԉ!Hrsa#{[ x~o,o؎B1$8;;5*BkzW708AV[Μigh_֧7U̍IW!=IMGސQHK"$C!:vw%IY+.2PFbK*eT7Pu2)@\K)oE@CkQs|XyUw|::J[:Cd $Kr*ˡd*13Mj@唏V"II5RoV8¨ƫbEv*73Cx;1Z*9;LO >nP7w`Y C,:͑}`bSUb՚}8 ڗ 'b4id︷k_9GUlbKZ K<}oRT 8z'F3Ut1Bzs!PO@Ze༐ز g}^KSbMy$q s' ,- :C7pr1/36)?=>~cE"Mb r*=x͛WoϏ}#<> 8ãk:v uRY*3sH Z`9tOǣ1 p]4Ur7K S8=(i^ie$/J 1"7D'9m'0ڕ0A %anP8Y0;0&tσU_L-e]& 2ԓ[1Q/,W啥@ i=Ÿ򍊶|W6|\uϗV̦@c)'Ear ՘V*KCI(;><ұOMqcJ!Vy;.ͨʹTD$TdmF$"ߕ܃CP2Fv̒G/c]}DɻDsMmmV>72Y{n0rU43LDdInĒԳ- +F[;)n-b=ʌlMGћSkendstream endobj 61 0 obj 4894 endobj 65 0 obj <> stream x][\_1t;곇w2F$N$w|F3Iعyq<"yH˳-AbǺ軃qc>>_}H_80+>8<}4N8/}|IU n'"^N޻]+_GBN7bV^or2v%TjXUõçA4z+a$5\N[WbRNӻQC1/ώfuhbuPJq0K8K8o%Փf8z+`0#'nq` $,Yk\7mwc#q7ӱ Ihj`:8QL }iߥxbv\ ]0:n^aa-~ca+vWPr!>`!n5V4#ɀ`{tW@8j,x?xWI9i)Ycl-iEog ?CBY%l9%p5 v9d8Ӄ\L;"7pvi?>j-s|4@@xVb)YPe׬4}l8eWp i1Y!XS۴m&2[&Y(S_ l ~EI :i{ T#a]7ܸ5f T˨@xJa,y,Mjƻ [)ѮZ)"FȚY#׬T˹-5X~6B=JA#$zfXhavjpk㈛iM쟑櫰qJc X4(\; 5Q371`[m j,߄7RuKTK@EjTROYV#^xʨ>Ń2~"gf0u EH5|qMy8 [%U4%t"b='k, X#2(H8@ #7u}޷4OEvxE;(/]r &F Cajw]yU7{tB"؁꾊g>IqzSrF̚60[ ݲ (n&0a_R!aڗr0:L)pu#_ rH+M˖vT%h-!GR{yK-PCF} )@#k_9y$ G!=MGz莂6iI b6j å'yc!uC{]Slbx>EU"2d}HOr*]C, t%KJw V}2P#kOr j4ɨ),FPeX-4N!#`d+vgM<ϧJ'_`#Ej_aI\I+3rNNH&chpOrr(a~d6EUݪA 'id4̰ErQ}J~' 8'U(H@2iw(;UFZю$~e'5vT]UOX# xΒz6 2 $ EϣFUl0; \ևc)QnL^ -EZp[1rf۠,wnJ;[H %38^ok,ߝ9ѿ½/eq_xmBd%Te-̠g;9J@ d(f3!6i!]ElILA.\$T:XH ??l4 $Xa2hz E o6)VX,N_*BmeC+Cm1_ҚPɘ2,AM,ל؇Vj.(_%DEY# :2*Gr_2A͎F :,DE^azA$X2M+0Rpj淘ƥ)[˷%UI?uGl,+7N^dH_Y=|OpϊgBOZ`IJKIBƦ`;\ew`W?eŃ 0뿰tn'q) $)R~5o9UZht(%"Ka'%o|jdZ[^Vn#UU\  E7i mg-SHt گ?9B`RaOBj 2iJ>H{~}xCF2Ug#%v:Z ]Xr1E "*!X]XIORvX71`dP>1;\+9bUd$YK0"?D ڊòzPϪSvuz̡:I,Z0qy 7J@vcn _KxC"dzNRG>8Tuv_[bJ E0G;|>= x\2wD^]Rq6 t/" Qt;7NV9e^W dFXSAtNJ=xrngŇtN]A ϢfO :GFU-g8DqYrrFf%=iDA?_j _VI;po TkyHJdIɪzao8ΛPf(3>QX:X*(IDNX4Q+эWk$tiK#zDU:>[q\sQ-q$4Y)&M۝Lc[].F[F1(=tDSC"04%=V^mjKAud%DQ3ckJO, ּhGpC0 Ө~*@;6ZSμF>٣ >tTF$6gl9>l#ݶ+d@E0`gFN\T [nriuS#I;koF):{xBgb{zac)H=]a!٦ITxn:+ NO7ԫe\^~ғ_Wӟ`-1`mg]Kߔ6o^@? ϼ.ϼ7wL~=r `> |& wwKӽ pqP4>ad?)ҤY 'I\0Xh,`YǓސxo|WƀlVݦfkɼhy#|ZK!w4:}n݇)Zޏ|U=ph[$p~9ԊJnL$LgE"S|?K=vdj9rƶjf%^#k*1LrңäS;HգTH>oW-~ EO"=`/Rߖ%'.獽tfDP?\1VҐW: D3|315GtBrZ3ּ!WD}kx^QN?ّФGj:傟wIʳ iPoHpekD/ʛlГ u"{ 5w&u.߭CW@̶X' rJl<(ȮTf -1wKj\D+vr[endstream endobj 66 0 obj 4852 endobj 70 0 obj <> stream x]o$qdg^oWū^IsShƓ0+>9}jR8y<9;30y݉Z ųhmG)6x]mwRi1և6jn`;=H;[=\b{V +?`ZbV{z+ T0Sۚ,#bv \8 [ d 5-( qYW ogcK~75aX7ot֦7؊!(1ҿ0Zz=AH:e#ZK05.F' )"zǩAE&}5 vguA f|5KI+qP3E\A62u{\M\7՞ !bnei+`}ʪb02ٖ O=ϐ*O7t;5atgg0FR~?p=dnгP[CpM*z b5޳}_c3~k9%adHs~fCfVr%*Q$Rz]j[MGEB-4kIKV?n1 ߓ՞sC@'E1^U0}U^F[/iD . |mkV*`vp!@ۤ-/ |J\'OrޅeKA$QRQnI1?3a+}\&ħQxe*N m_bs~ k& "PasD3Hg ˠ\u&m,$q%~ɞJpaz޻& u H&%DٹF\!J#+ci  NZUq~SF:NPYqpBu̍ϴN/ "-in8cE{V-$%n Va_f6@I*Qfmj mf$Q = /lNAQM{l{ EcӬS8>+7XkbYx,&odť5(P<_Od4q[;_RSU/X$y33]e49?v0aԂZRhߴA'vșj0d*M4Y!c2Us, ~ \ipAf:Fm WWTS8-Ov83T.B<8jdLz @9i V3 S/<6OntR{ z#vnT{٪Fi1!B`!z~]&l7 kE .إ&4JaDu|~uwmI%1%#[{^ON%W39Hs 5m/Tŷmt~F<$ƦN%Wg[7lZAUmW36f>;k7ӭ0熂6JE;T]%;=wDe}lϪ@b3U|eyJN ZcCw8VfA&HL&v L$ Α4 8g5t=!pQU7To;>zm$I[T\Tε(R;9K,~1M(!Km~jFb-'~AjUxDwulb[tbҞ/}t#ȽihX^x(-6-OΔ)ş$ ~}ʞ$/D*Lrb4Hm{MlЉǗsF>@ئsv. ky;ɔEDl,C+ypN3?zUؖPޡ?5XWXsb20 }CT![Y[%l̉`O^>66f,(qeX#Ӷ%3ijܚ }.#:T*,u qT;8\D*(\#\Pɮ,"`jڛ0;cwQyܼtDyk94yBt<;Iz6W媧^hr"9X<\)q$̆Y]Ud6|n9YhϖbREh74x<”5rgEZP +#sj+l*j#a8w/ÞkUMcJnP4︺ 6XͅkiKb79Cz ?V']a+pl(]a3M ?^y E4q,LBԒ`I2$wbaq b1慮3!9F ]كR]l nMmNwHW$̻GsԮڣŝkinjə\ƈoQX8⠓)(Emt\ٻ"}ߏ[zZ~r9?b͂[c>cx .Yc)ٍ)Vkר|+r$O$0Ç`勬Ua<l$E5}_bw!E~FZUKe 3Cĉ-] НLo0]hU6_8!UۮpB k|.'ަ5K.Q,⺉*}gc[q2Zyh(58oq|H_%&l P^w72NczKU" c{lOv^qҧ?6DxAJ4_jl<j=t֎`8:Rz=zA[BJz"%,폑ɧ ֮;U_>=WCri`kO:M|~W jP}jY;L׊r%2E޳xWv*WO* F &6c0c*5Wz>ƐH,r @R %"=W-ǗN5C9NC/ S_AebuZ̔v.VP޺*&)醀9Ŵ+hce]t ިMLM ra>P+9kPsZet/6诜)[@+~EG_[~$iK2I Rbãŵ-NO(5'ekl/xM70Ev#6Iqq%N ~=`z os2|BDŽKL8Iߚc9&.u +2>oR '/<' ç -1JO?*=ǀ :l:. ռ6GK qRW®DWË=NS0N1\v9-I9HKϯ[(#UZm3_" : ?zGKm(֊d8P]jڥB ں6*?ۖxHBpK vV;KmX154S=fg k6/z[?xpendstream endobj 71 0 obj 5148 endobj 75 0 obj <> stream x\[o!}9 |A 4nRh$mdI]Ȗ-_Rweёm9N ?C7q{#K=u{wָwz-~K=~VZwӭsrMj[Z&?Cq^xWx^K =Sw`~(>4aIz6W 5::_Zb-i|l:@Z+1}Fvix4cؽUVI85xv43 Ek};etJ^ 3Xvzz}LFQ7ЙXs~y$,%jX\wMV!šA=aq_ß%a`ϧ~cQЙF, n|4,3R~N?;Gj~ˮbwPiiDѥZc5ћפbJU3,!1$8Pش CgllMհKb6$kׅr̋ _djͪ0qO{kv7*k6V.OHD0ICܮcpsSQg$ܔY\J ' (+ \ij#RO(}w(0 &m3>im!&FW c Xюm@nO()Qrf^{|ROŸ6LoiONfXD$]KHnAA`T:@:nta-$| M)բ#=#ZJ%(S0@k!-MhS> 'LSAp0̣Ԏ Vm" ڍT .?(W?M~L:Y4Z+yur03H>އ|I0b"lVMEz:[5RjiŢ]h! k.0F};.t,s}83Ef%BdwPgҀZHRO]uq֢9oaa5d^ QL=jMvbGbON2tII$Ipo ^TK`@]AgH !0SfPb3ϒajT4@gj~nKH't-1϶uE 1]݄."a뛀"Fy@} [Fj}QU Y+T8%mg[< ~4nBaQd 0mm8sFSxyhlCckq4?o4*|ܘ8\|cMGعQh>`1KXIQG_)NWϥ XcdQ  %&o/5*~Ą-|iquZ?nu{]9<0 G]y[^60‰JJZnf#1a|۹\# O~-mԮpk[RUfΒ>Gmr.-.#}Г{J>W }$v\V,9L}(Xޏ&*"Zhy%-=ߡfv[\pZ[FN )H K-%.m pvtvYKڳy*%xVH肟Gv,8]V{IK^)Q'4}$c,E!amKf\nI`Osz++|^NbNKEOI*yq>\fM_p'&FGշ\.Q,|$orfbE8Y\e4ֶ@#kwž`* ? gv_xe$f`_{N(қY3nK&946l K .1Vc`G.ءhRS@0p%y.Хk#4E.9{OYn>6?lqg{֭\؁D[HF@ DžjN7DpoPU(%ˋT6.t5jyX1K6n-<~) xRbƮP>7PLO 1y)򊉞:aDOzϔ/l[r%%1=ڻT{Fݔ)2{&$_\.Gl7~2T^=oPJ`tNl$R$~Hxy1MԘO^4+&Q7z">XR+c7N7S :'F*o!lǶW'_+U4K+|+˖< :4 +&U*Q [4-n>b;\7g5ara|5!\ 5 6YN Is=3~Mn,3c=npE QI ~9LK%KtCM)['<=FDS, GqC%|'W_J.z+\H2` .ߘJNp,z茙'IhYF>\|\&WLvʣ]j|ͼW_qVd܇;g] %K>صlQ]'k VNyr`,|W/S"]hZtY^?ݮ*Qz˙2D5=Pho[C'Xoj<؉ZZp%us&F ߹tÑUll6Fpъmh %/ܰ=%b!f4XPqEUJ9⃾!3=}}ZqP^x|`'[A/u?ff᭖@bUlwCN˂yY;'Lڿhd+w5E / | S嵽|w٤/ΧrRU͏Ƥeh% ^^F~/LuB%XJkVv7~"Hm佂|z`t#xIa'&UWk=̠GÎ}/6~Zbs^!O2J|Rڑfǡeҷ,rB vr!u:TiT[8uq?~7isH?W}b!)T/`Xի/ux;=v]i(%ZjN2 Ζ*}:U{(zblx/;S"}!@wjjHA'}U2> stream x\[o._!g RI4E&vH%.$ʯK ٣s;Ѓ<]r8~{0`ٽ?=tO_H?gB5!Xi{ӝٽǫ/30:]o`z!Hzxz#6+Z}j5@գ^m=H+Z}փ˰zevV/j0&hMNqLю}u/&4P! osCpvj&ct7 n1-ʛx <Ġ(t0чY(/5Q^~Wxy.]Eέέ.~/[_bKlr57Oө ɪOp7`Cʰ"1[%Awb0AՖ(NGo7i#B02wvV^y)Ȥjts/e,?.%y}nFU )..xZQNk[q$xGX}y*sM']'uubt⟨faS )[5.9{)_SV:_]D/ϱuz 'qzA5kN|>X~iV~#BT47(9f;zh 1H[Hsl}iK0?[<wOj(3މhqλpl^H5,IXdf%"Dd*&*Ua^I]|&P(B!vL* OVZDfV-}69AbwFMQI,8ˤw@4+/7F"M*\~' r4*XӨr0:ŀ'=p0z; gd%L❙'y  Sy_+U[Cd$-T(!UtM<5+|i( 1xNX>Gdu g7JX *'(aZ]Ffc 3 he'@_v.8XbUW5DSNZ+` (Tn .e M@җﴭ'Ep(L,ek0 cbWtFj3vg^6e'y_PP/QO썖pe@71F[#mckO4chj ^  <8miLf&D" E]@u-&d Moq 5 eZ7kr|ք~E(ܸa#jV"8G2J"W 0(kRa~5L#'. 1 `A)mL7jКk mm9a>i~H4ԛʣSGmr[LkLU#@o h1x+6қdܫ%q9Xu!\e.Z҃"FH U#F!AJcs`?ШAT eD}VB#Hg%{dz t).|qX ?HK9]=Z'B0iU>{ojVtD9X&1BA7yeM/Ý qd_W(pIcaj$8rRFEru"a-qe0-jN4ȕ_EBHRkU|8I(pÒyrˬG9{i) wďb4:i*b ؈A/).es(NHfwBvAa"47S {%AN-gZnC3DS;RfkOL)*;lt8"2C>|t_?b3X_{"D&h6jP#rBep,+.}a<{=K;fyDD4j=sp:J D%f v˛%;b7%)^c 'AU+ 4Q5SE YK'#UO;/dqč꽗D~PRvLogr](VYc #S#-V.z#W f=0pHv߈ lJ %{fyŶaiiV%y(٢'=,ZQ?0K 0ei/pF-2=)S?kMQ#bzہN\! 790<{=0512Z2.Ą fNH^'5}S+ǤFnh#: )9xbt! $!XslMxJl^"G QS"}f10{RDb0AkMe|$7Ya=W Piw[=m{ǨP6HpP?DqQ2"GQ~݉QKL5y%86hZ*y[5Jq es.jd_b\d^/X>ŧ<͋oOt|bކ=UrL[qp~SmeJmR#C?fKj_|D/<4nh Ui?hҫgu F)s#v!/픖Wh+1іHLli/b_2K瞰hPw'$}tAo(*4 %{̲sDfDE#&`hܲV'g`=G'ixJ'ocJ 69c|2F+beXil_nW[ǺC;boӥ2N+WU 1gS%DPqWWbBtr%biSOp$} +Z>K6Cx{^:̹˵}ζ!0o'.oYPBMȶhINAb?>Fj̤84wI8ŵZC]'O KvӨXTe=;dl]Iu܉0=!5*eN6\0Mpw޼ew SWjw }G\_U{Z>YcԸ >UTO/k`$v94(eĩk:^P }j@D%_USUU-9tn]4-BjN9ܪ9z9GFtLij1d`Q_*z퇬Ie`|h!;_>HI->Uvaa6"9Ek#ϰowN6 uZH߉cf^*-u ÚRd%J윕w,DNQ= 8 $UsgxIԲ DwVC   ZtIw*MfµoKdT&6cRoV)*aUJQDrFLeNMe:S8"k6 O'j!"ͯ0# 6ď,U"f^Tْnb2>"I7:5up`ȨqTio7]քdOGN&@YQ19y2j ]WU]5)V^SyFa|_[?n-ߩLkOb^[Wre-Ӧ9{5NlRw 5]s4&e])ywIYSHtWsMjXey͚VZQLr-G THI*7\* 6$GMo2AHhRj+fKOW2صJZ-1y,cRc{)[J2Dctޓ!M WSf ٝM`LW\kK糓;!mCS~zք6ʮ岐|$/2lhr橖ފpT*ܡr!a+A"bBִ uyyWn:z{Bۡ]H[BEUmu$WRj׳cyT]}ZM*OngSjUrvMob}.NrDb&iGO#Sjt.sG?V1 XT>nl]aFzG=fZF(󡼅ǰJMa͂Uo 46Uǩ:P  4@"_&IVUt@I7s@7g{-4| .Ip;`o~Uw/CKogĈi;ziJ"`kR)`< Ga?D3 6ܒ]u#97[`+vH7ptH,3aC9x9;)$~֘f)N^[3l6;t?X67>5endstream endobj 81 0 obj 4728 endobj 85 0 obj <> stream xr*<ͦ0#*%;(y,ry$~#tc,X8A/ R?^\Ok@&v>wEЋz>yݩʉ˘noFOv-pګԝb{JJr,%02pR{Lw\iqGT@ yӭJ$-3Qد^ p(ݽ{ku>H "{Kмi],Pꘘ^-3W//O)Q=@$h˕AsJ("j!͔e"ܐ :ƣIޭJsMv R} {  , ?HQ"4H]''P,}B(š+R%hS%P";=[u?߲[Ta- ˘" Z >Ƚ&aK'هGO'JVH@}4%僔 !*&l]czs\<%-Z+5&f{ۮs{Y%alja9vc#^W$;^{' A_5= A:)`ζ)TQ-{B(31p2K2ޑ,KaI[9JHA!K"({Zq3Bbz-|4T;vHۆ$k}\yWS఼hˤ>&^h=ys חy o zJSMfm:隧f9hItf^feꪦV/~M<)2tfsSbJ3K4j@m3pk>E|qbE=/U8keЄ__SOv1~: ä&S->Kf'daEѧ;E۶=&l-2b}6+Xm)탺ɪgM4z؏V 69m1k0Gd6.E}'$fpxU-\~1>`2$ރSN#ZΜ45w[1IS^.U4Sj(ꈻWQJoiyݒԊ nw;-eK/VW2 %dXK88)v{u>='TnR8W:D૥$M4@o!ו~M˅U!n{P.x7[*vRD`G06kB(7Nr;tWL ^jУ%42<'h?W^dw '6=%.+9[)]J_ ?{)U]7cܱMQXqwQn-L}~t2yT/whWZ:I_fdcQ[B7pѮsd9Χ&̟(x1_8ݦĻpBi=&AF9xE{0Q, *y  >ρ~ƎPMjCx ItI@Be%jn:X -PΧih٫؀cwK 9&PGXM,VZʹ[y [c)|)Qޜ}ixFW)iTǫcgvR,g5Vm 7 vKA 2ݑ.!1eVHyOS{O6NJXP5>!а8mNZ.SS6 7/8ҊFU3Uz]SU& Um]NÄΟ˦F&CXrġ^5 kG޵2VUmQ mpӬ zf0 Ϥ&57j h|~PE864 1&۴{[ݻiR0}0GBgMDc{ղގ8[oh[.džͱcVUtTR:J)&!>f0Œ/ TwpR5*kM8DӇ|iJ;B.!ȘZ*vnt5Zog)9f s2H@y7ɄUCԬƮ[ɧ7&DUˣO9UՃb 7s~mHKyrAp8w x2sÀCsfVddz?Ƹendstream endobj 86 0 obj 2509 endobj 90 0 obj <> stream xr1-?bW"ɒRE\DQqO3n`z$Eˎ8}_÷NE=φRkj vy a^e6,O땕{^߭4lƼ;<[V6 eGZك-]q8lStD]XN<#"o~I^K8Tv-f8{G8{.q=^;}S}4R"._pƵ ob'82#GKkCDov`6mDB c0.DR t %q / qҊ$~H9<6[?NJo//ƻC;ɰuZ3 U%HYRG'k/pN)+H$"kL/hs nOyfœ^:(t~rDY7A TGYa|Ѳ֋2bD!UÒ:)s$OȤE4zV-Jv׈O#J۟?j̲L҇eIe C|F'Vx%ξ+g37敾ג}OJWȌ:`Ӽ` Ϝ4SzW{@|˒g_,{MEg|Ԇ߽j|CHVIPǶ íjT6k;ADP6vԉ^KxtA)+}W~Qpi Ddk \+%#~n>'${_#'`#eѕ N $8%D8oc5wc. 9C`7jR`bRt=] Þ;iVg>`t%p632c ) 1PJV `NGCp`l B8uHHbަ̽04062$KY+\ qY5`o\hY)႕qJ#t_R/"|E˜Lㄏz3 "8 XWyy A5dPU@9'kDِGunjm'>yN-JDwF^|d)timF+RQԾ]8K$@PDG[=MFJ́$$[v. =B߉>`Ys,▄^ΟHf?W "!TQ"Ndt vJnghxUy;,Fe唞D$4i#Ip\\`:|ClBxV ?exImLz qW &! ӐIBv$$kې > LK!*׹&wkr-ɡW^D4elz5\מvaBw^ <ˁhk/ʂ T< L_Adz坣mHJ 4)7 H  < doQ `] .s|Z_pEN&| <]P0OA˜ !FYy\P8Mq WᬪdꐒNbq_3&;a2bOf1ѯY ۴Gi)Xx˞6ȹ/^/!SOV~ [>!ͤ%|&'M4I -ˉ׾a$6Vxjg ] u*$ '鲐ͩNi a59w뚜*n_k4]K&jrƚG$T1FlY.ry|].mr!tKkIN+9`K{27ՙ:M_KO(,t,?7W~=nN"&B8mQ!E&A-nZ1B0*?HJ3~"Z(en(U J@i\Rz@ g< bਔ wU/ WVkQWMNG[p3T/bzsuTZU'd Noz=`uz&vɔ%L)uO:"=#7z4(͍Ofe@GU3v%^v$ Z^M1S#fHw9 ~1mdHDWˊl6AiDR 'm,xC8ĵXh*YN0pa淞lAl(1.Ah,++޴R0F!^ܟV2JX$yJB{w7^%jk(g4>pc1S%.>g($v2=gY*1'eǣa▌jv m\%7]qʉp+| x[1 .6&`bcj5aA0n˰ 7jvbF-Òv‡CCn~Y>m /iqo ۚ?/_Rp *>~$mDHTL(ΰd+b V8%1Cc/):sbGnNRpUF}T1wM#{0Oc Q5n&g=E`J[Ikr"g²_ôOek9Й_]dv?+ HſlL琨y )]mL[_;Tޑ&@M.}h+>7u#/Vck e ٯ/5.ڈNW憔ꮚX*VYE񊽙H fUӧR31@!u\#HB.ydsDVfAghK]Wx$QݲaI}YV'@W7KDkPr>qیd{$}8+5W7dVV9&i9?IZ7gŞ95)5q9I'/FPendstream endobj 91 0 obj 3562 endobj 95 0 obj <> stream x][sʣ^//dlx&kVN(T%2%y#ҍ9&im ǣqG#={]}4]>Fot|!҆A'z0Ҋy>tIySmGBNl.bVKelШ06'[1%F"M`ra*yK9MF <;1Rlvez+``yQ_QF QoGo f50Wl\m^!I>MZۯkmGBzdzEju ^֫'Cm}S[/Bw'Jz)61w涿mJcȵ0x^EŹWU⻋mۏ ݉Arivnt;HxNL:X>_]`}e%t\(٧N˒>]JV mCB@ E?ߧ'~_Uf::=ԇ^Rޗ'B)cmm #nwn"nb\^7O &ocL%WZCW$azci`Y`k&BD yԔ}_umcD#.G>Tqy[d@Z&vxêA鼲AO"ձȰ *,o]ƫMv%STOO$Vȫ&9[GM}Ngk|IXUb)z~?J$f\+XY K z|eskdéF=`O`K1[~p^̧5wn`ywuR+`ӳ*D4kkbap{)$da&l6ha~b<ʃ,KSy"%GknN&vJ&&VB.x$+v@ђGBj73p(\eCtU7h^q/IA{p$A 0l>J6Zށ3m Gi0KJ-jf)$}miJqZ95.X 3[O l__?:iU(,s$qQ-#uH#H] Vc.eX+Lq9oduEP܎3#l h)ZigL? Xm}>y@ XLu)ţJ)y-lg:@&Y)*t+~S  QlREM% 8ˏ}row"^vB.`E.Ǔa>.a86WdY'_}*{שׂE-/)(f50v:LR" Hy?Û/ 5(oyLx_+|~  h{u5Muk P4%GpЂQ^+v/MQwxQ@^rL{]G$&DZal{Q@)={[MH_G"$r^Wp ' 5P@B:sقy`pB a{G v= z7I%'މ }Y|nsšڿ)'=Lő/VJX!#;[@|.h&q}_8Sn1ø1 wih:ld]'Z TmEP} p~0d>dZtTbΧ mPsBTj֢k; (.ua7GsgS|ha$0'"9$ݏ^H:Sѳk̯nM:骕* R4EMYb)t0LAZLhqޠ3-hȱF⫁E\X%D͵h"\V1ov .h x5A |ۛ:k߫%+t$]xSi!Al ُYb Lf)l²Sۍ&?;ʯ%|]<ۃGSh^}^a '`%B6oJܙ:߻G}&`B>Ql#E Kky26m: /}_ɽj]cb#)xC8K1$G`3}YW0;ź-_3m^;w=E;xIiF= h`8W7b%$.oΕ$b0UmR*Mq"*S "|'i<$NzH`-"*\ɸ܂rV-#3Ofxh3gIbxqu,y7;\r' J[;9[v }Bܐtp!^׺[16k` H6%Kʦ'; eO=k SIN_KZ:b'b9i&5xpyZIVWuWl3Ru%ewiX驴ke=|Fw*ґtAFeß[IEV? 2f˲~gKq`ODYLgLIE9#(OیԪ3Ŀ_UF},eq>x3@e: 3w~^<8.W7^\Fhh#׶4P. %W$Y(-oUW $Q;tG~M jΈǁץb,$ed'rݴҞ^)!nsJhyDfbCA,OabX-d[j=k5HBvYlY=dJtq k:A:6L q#эiA qO-ϊ)YQ~yVd4xg\u&ڡӒb.c·ez ƻLR6 `L$syTU4[r&XKo>kSEO/LuOyQԼJjXXPml -*g@:,}ͨBMeѡŔ%]/v3\Yz%jTAF+L3ä,@*97X3u 6W뽼ܐqDq)c):ezi\ƶW`Fw y+ ZuO"rrM@)𬪘5jY\=]?/j\/$)HwR+*adԼd!5k! XrV +.Mיy ;B=! +T0J15fYc2s!5ɦyFФ>~;RB'nMf&LQuMk,@JߖML&цgo/$"a'O>Ŗjj()u.VYJ/ʔ~5);l@ś/}dhZ>Bh߽yYϛUp,KevM2}XG0gJwۛ- lkqN"ՃY Q|6 p r#cWu2?->dol;W-Z=* jj֍]~NJ앧3= VR(gx&6*!FOwj[T =-w,zf?Y$b5Tv_$K ]:po> Y-ΥBD b#G C,.W!r}w9i)C'tm}PRz ozR :@v |~QW1$ܯ;yR T|);@)wELd)B; +(8? _{`ލ=8-zY]u)<R~F {W %0X\bW[wsfKV~A%> stream xn]ȣ —H$-n 񃢭neɑw.J"Qs gLx_}7:}W{?q\}_z7+'W+j޳0V0k5 v}ᰉ1R_oRiY!5cl>!_`zG:[qf_ˍ̩ x [S8qp3Bd>ǡx+[yhadbТ͒q#k|ɷŷ8MMVi _1ـx*3  Hv{΀$hg@5  ʢրEh@?al@~'8hBd2-6~T7Ƞ@A~b{1[z!JCX9 J,E,xZ1c#' ^ F|]LI:lg}Kp߿\r#NpUo;~_GJ(3|*0 F[C3DbeJo`w!'Mq E3E}3rP ox0y}L9QgyWͮ¸2}Y'O{Fx*sX|KsEE6In {sE%1kQ$OBhz&v:H)0$E 4X[pM?T:1;CkvޏZ$`ghФ3< 8NhsRC/1;$?l8eU4X![PvʛC?Po~DDg K x*][HrL10%Pﬨ!9A3'oi5Vqktg[|@xc{D#͗TjKFI/.돤@rcwQ7V딂o^Ȝ6b>wvSԦ7CSD${ԅZ Q$_[V:9H$ PS&YcpD&=%iv J4 V䬺{KNi3XĒޒ%h]7*(!vi\o/3Įk]㍫$UҶoܨTLiӘ 4} OGF~Q2oWrÄ}l!I&r L>'2!;_ >cܑU/QO´GOʒe? yȍ3C= 1>ܥcRN}3ȇTh\1|1u;#oE"3mA=ǝ~ԢX~뺲>$+Ud{dwendstream endobj 101 0 obj 3240 endobj 107 0 obj <> stream x[Yo_1ا}dF 0BcקfwٜF> DW(V:y7Lx|\>%tz<>G3rp;>fWxi0r 53ҊНVLBr$9L|!*j1el^?ve@Ur.XP<}K"/3V [H4^~y543{-RS#Ew1L( \j. 3 Rg=Y8gsoLfsXkv2oz$%, ߄ZFnz I 25L,jo0FJbCp#a|Ԕfs'9[SǾotȝLg `r`d5Wﹾ`7[8Xwߖu oѸpA\v1JI$x _[Gr^#ϐB RARz+ 0{ v؅aߝs8G< Z{&0@6cq:]D 67Xr8Ab*i")DX]Q`RÜ6K)MCD DtKX*e}wM3"&79P@y}'*5ׅ "w073ҿHxd[7Z!R ]&ۓblmHai̖=D.G)T20u bzВ)xe?0s=9&bCcuDC5Q2 0>}+Ȭ|ڜዌ'w1c Q LN~J,=,k0{pb0'D.m~ lVh|?Ƙ1ʛH0ɵ~q0 2c^5}/ȇw# (pEVcWLFΛ|y׿G| UE` *6T>Hxr0\p{AMcB Čj1ЎhkM4>/Q6vL5 j{UUJo!f"4ʬrVePwM' P#ĖZbn%J^x vOfAj>  S!TbRi2+ ӛߋ$à>h}F3Ihe>`Xn 2yXdGfz^\WiИC}~ p[qz|&Seȴ`$Eӂ^:+0% @IJ ZAU t*HGHDqM4=lb0᜝mO RZZ(:q6x{Hhj7;#L+nd5 z5:|/@J" yU14$~iācr}Vlbi<^ME6$'fVŤ}8,1`?"*qZת-ez_=eu IזDӤ^UW$H%~c+?b_^48ƾ7 )222nw!8TUts ߼ 41+gm QwWz楢U|܎p?C@2)1.{vEic͛&AsM'mK׫|ɍ4bhx~4-8lt4\o4vRiJ^ifn$AvH@:DCkE1)>NȡW4Ebdlf~pW z>+^'-bpC2eda;`E -h_74}!聯H,؞BV_eXuG"&4c=̻PH}rJɑq 9x[؁:Y^WAտm&Sa^!u$$xDajN)ut ^"JP2 $x4}~''f)?UM%5 55MO /㦐rBY! 9I(iRFɛm, Zɾwֱy}:4X3Kd;y=-+'?FN|+B~Wl lw^."y-00쐌fkM5$BEؓ'"LsLE5e|N g̻(B!ګ-D8 M1Ɠ4ޫyٛ}/\r_ZԺgsq% 3WSw}M ^dqXN(Y?M҄?/' [%ld/'>{'3 ?W?7Z-ey3Hendstream endobj 108 0 obj 2813 endobj 112 0 obj <> stream x[[o[_!l_ by6mMڍ6bny9sx$9>,fDrs83<4Lx}|ylVDqu|9{vzvxvЭ3'g+7a>p秋`jwC#fac K4s}ԜUsHď8C3B[? ;Y7޳ Bz?Ag!pXrf4coLdt;#42%Qފ(2Ct|*>ˤF@>}~Db2K9Z.G1rV&pBm!zn?/AQ=c/;j~p mX^]SKI4߷4{bW">9w#ސ5hDAh`];iVbAt5)c7%sI\mVVI/1YLIާ$;<CxiTLx"(7M:B1ROkS!iD/;,-\6ߡO7m<0V^掔75% 8\EgetLQ+aIǿI^;,$:@| Q߁4Jh(4p gpsO q-&DNNtʤPdۧ-WT6qnQ`В!p1o-LE%V0=P0rbA5T#NIeV %0>2"/}y 0GEQs{CL;/h0~_$Xi3.eTbVMlGqYJ/cy ɝoyk7S8Gؘ,3BD%68F>sb/-GuM=0C/>U-! )! >_f 7CզG!dfge&2]ƔBvTFiYqbdk S'-brtB #dzE|$l;)K=4 o{@F P?1wcuC<* ްE+< QAv07}m{}tҶE%{nZR[b*/D0bŠeoD9ƦOC -U;AA/8k LFf*cnHw9K^0?J-XNjюiWé)GUvmJ$ MNZzYjhLg(b( 1UcXFH?(g2(c(֘\qJHR\"31s?d u׾sIbC@btwأf9]4U9gLM 0Hy!T2YҡVj䳆uJ ]0h^y3@~ns]nBX| n8Ṭޚ4)Sf9vmJ_#_>''ɍb.(($y M]0ܯ6p8$V)awȊ'N= ZX|1װ)a@D}7&ھ`qCbz}GtooQlg$P> 9}hBZ o_Ml>ޣӴJdh#Ψ7u^%%$]zh4rɇs؈\u7kԺ't3UNҠ'R7dmaHT ϛ3úFܕyK\߷} '{+쌓 HC;!WĀwo/mO4뇎ZސO#> ;+$-o)l gR7|>]Y/ᓝ/k/GbގQF kkjrJܙVLjr|vOp>\6ʄu^ֿ7V5~3%BGMbVcg8d"T<>v˖K9[N|z'FZK[nn.Ywmg_˧?>Sk;L"׹! ,)!w~0b|KվAX\wwLljz~Y|U훇$sH(3,,HyzqU3K5^fJ"-sִ+XYW S꣤3+R1Q/Z*5MQ}Q6H%"I>B;\Vu_;Dȧ/CB 7QMM!D%mV9,ƨL}"]Dܳ%ϩ&skr8lEԼ/Z‡> stream xXn%5x_яn)mlW ydWIEؽvHvS(˷9{بlqb3|[l 9st M$mכwE)EI^kmW\I41$-b$8%]wX"[ x*Ƙ0'6[ >!f{ Cߵ%`c6'gQ6mĔH2LYRSZy*K)yrB 0)FX8,4QrOkuIU'^Q" j떤s F*M^ R{Ik SC€C[Xֱw\A(QMUPg2Y”YDOVLԩ"yM;D8g#nr7b] dqpVLpW7뺨ŽJ {y&cؽ^ HH|iR-IZMB{DݷMZsq!ǶAq-vu> 9"i"b7em= TjTVwa5j .>ԅHq !+ ɔtQ3 钐EOܡ)c578dHorBAN!zT9LNÔ7QfQu^ b^Cj]qu6`l[GU&ug)wͱc>r _Vv߂ M[rM7:87eMđ0{yN-ҥ\\au`u3_iҜ?W zBGl|Z16$-'WGӜK:LZ͕/ j[ өOv:2402՝,CG셰b U<#32dk jd-@\,i̇%%+fȚUE8RHUxkXv &3Ͼ컂h-oXP9gϞj>>=K沸2#3euKʎgoF&c&M,*Tv!ҹ%#WFC@p/N).8h{ ,Ҽݶh.Xk ^Q$u_M0-ԣ3ecx>Il=2>el-[`zo[Mf6  pc=78ǑV;j*ܮrS$ML3,>c9>'Jwig 'ެ=l (lb[>0rb@>AAhe\u .9[߳6Q,l3QuUUW{W/W9:8mev ~endstream endobj 118 0 obj 1482 endobj 122 0 obj <> stream x[[Sd~WԎ1p,0U•0 $ l79Q2SiI}[GiB P/]^L|=8 דs JMl""Nz/SJSf:c504u)-r '8͵Ḡ~҄ g'3}> pt YDw 98,iUs'-5p9"Sktw;ՄistBk*##V1X3n~W nef7"Yws\i- A*Te԰s5tZ)UZ|i5Q/PՏxQ<+FMegejȬ]z͍!u- Hvxx 4զc dJ`>7g7eѠ= " tF⠯ۦ0^bK `%q1oZa{k }+E[ڂIUqU%AIJz5^44|LEEixIEY'XL `=z, [h y2+ D|>P81'6"++\—_RaP)BPycIھO_f2_ mY E^8@x;'Qy|xzoPe~;|NpAsV&"lY E~AdZ\Z^fk_od J5ʻt_gX H{heu] nQ6wiv]To.A 65ӊp9΂mnV-^I%~m_zO_\•%#.mśPWolsk&hj 3\5$ݯ.}FQ+ֹMgp-:jq^gLoj3޶_^&5Y>h ThV\/3:] 2nW}Z8Y-2^~wu!jGu_-uf꬜?Zwæ뜒!y4 KOƧI#'%>$`O!&X@Y6pɅ$F:O/R~_柡Uay/Qt\Futx/5%{ ).%^#}q]>^]DjF1}^:+$c@7c#Lkendstream endobj 123 0 obj 2609 endobj 4 0 obj <> /Contents 5 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 25 0 obj <> /Contents 26 0 R >> endobj 36 0 obj <> /Contents 37 0 R >> endobj 47 0 obj <> /Contents 48 0 R >> endobj 52 0 obj <> /Contents 53 0 R >> endobj 59 0 obj <> /Contents 60 0 R >> endobj 64 0 obj <> /Contents 65 0 R >> endobj 69 0 obj <> /Contents 70 0 R >> endobj 74 0 obj <> /Contents 75 0 R >> endobj 79 0 obj <> /Contents 80 0 R >> endobj 84 0 obj <> /Contents 85 0 R >> endobj 89 0 obj <> /Contents 90 0 R >> endobj 94 0 obj <> /Contents 95 0 R >> endobj 99 0 obj <> /Contents 100 0 R >> endobj 106 0 obj <> /Contents 107 0 R >> endobj 111 0 obj <> /Contents 112 0 R >> endobj 116 0 obj <> /Contents 117 0 R >> endobj 121 0 obj <> /Contents 122 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R 18 0 R 25 0 R 36 0 R 47 0 R 52 0 R 59 0 R 64 0 R 69 0 R 74 0 R 79 0 R 84 0 R 89 0 R 94 0 R 99 0 R 106 0 R 111 0 R 116 0 R 121 0 R ] /Count 19 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 16 0 obj <> endobj 17 0 obj <> endobj 23 0 obj <> endobj 24 0 obj <> endobj 34 0 obj <> endobj 35 0 obj <> endobj 45 0 obj <> endobj 46 0 obj <> endobj 50 0 obj <> endobj 51 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 62 0 obj <> endobj 63 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 72 0 obj <> endobj 73 0 obj <> endobj 77 0 obj <> endobj 78 0 obj <> endobj 82 0 obj <> endobj 83 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 92 0 obj <> endobj 93 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 104 0 obj <> endobj 105 0 obj <> endobj 109 0 obj <> endobj 110 0 obj <> endobj 114 0 obj <> endobj 115 0 obj <> endobj 119 0 obj <> endobj 120 0 obj <> endobj 124 0 obj <> endobj 125 0 obj <> endobj 43 0 obj <> endobj 139 0 obj <> endobj 8 0 obj <> endobj 39 0 obj <> endobj 32 0 obj <> endobj 30 0 obj <> endobj 28 0 obj <> endobj 21 0 obj <> endobj 140 0 obj <> endobj 102 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <>stream x]! <o0P7Κ^܋( Kn6{H>?i;_=OrtՓ蒲CWW԰v([?J~/C~t+SuBjk ncDE9+mz`: cQ\/6cD[0Mk'ա˜xd^Z)/r!/2̅SJ_m endstream endobj 14 0 obj <> endobj 143 0 obj <> endobj 144 0 obj <>stream x]O10 P Ѕj8((/ СODzGpȍ%5(%VV\[gKxAϲCi,^*IXSmcL@O:9ͨ.@JM@17MRK=O)}PS endstream endobj 55 0 obj <> endobj 145 0 obj <> endobj 12 0 obj <> endobj 146 0 obj <> endobj 10 0 obj <> endobj 147 0 obj <> endobj 41 0 obj <> endobj 148 0 obj <> endobj 44 0 obj <> endobj 126 0 obj <>stream xkAwxѪX!{ס+}k'qbx͆kO=Y{͖;ӷ,o/?o;O/,:ΪکgC֚Uy>,/g endstream endobj 9 0 obj <> endobj 127 0 obj <>stream xWiXS>rrdb׶y9{]z23D"QPUJlf~LjXour0L7c}żܒBG2ـl>KkN&;E:_F/e,uZv*1Iˍb+RJL`2YLպrJNTJn֜hЅ2U̅e&`U2Ut\NWiUT+7Sp4e̊S c4ezJ!cNcRxNTqd>Ad=&.]ȉa>~FڤpFE9uy2^!DaMJpZeV8'Vū4i1\UZ!CJM1\21&=>Y1+W|ߢIKK66<|VLNp5f#ip_(23[=+-'O ̌Ɋ͎ ɉU&%M`E&N+ARS~?5 &PDj65LS!J S2j R j056QRʚ܈<)3jE3Lߙ؛hLM10lYk'h:nxH%3Ɵi7_9W,\-X4Y[:X|dihB)}nzY% u0F'(+' HX,5`y Ky@:,Ruځ(ɚjV_M~Hd=M]N.'dO Xvawxڜ8kp<9{.x̀ `~C[x@?F_GW-|:{:zI4ip6,թ %)mS<$T[i[ bĢ*j/p7/{)^LOSa1sobӗ=뾂~/ 5i߿Uuu"*ģp.^2<0Vaj;]G0&3_hN:(ܗ8U~~+j5?vU9-.Ā )QDjj3~N~~]^tR^6"^_ o6|?ZOQ 1A'{Hr.0{lSt+]"#0KunwU2lFB"W,ymėd_]Ƞϸ)MH#FLb@{襞T9a4Y90F_-{ o@o#6$X 90̔?|M? :@Lf\Žqz(KGv,;1{5Y˝a0xrFʲgZ5ty޵p5ch< RXϸHORjKuW -{?YoAb XbEOnM>p)F&S]}_W /Ԣ3B/dMHh <PDj!0}|>}i,VO a-abJCxdd2>~@W2[N/?YD5fj9PҀ)^T(i:g굙[cpb9SM.c/Ō hHR# M,\ӘXybI,G<//j2˪V!9kz;x)JrUI^C.'FC.y7sȳ XPRxk=H y\XQ 4^ ?@0DDcVx /І"ᶰKhz]hғ8l*ǖ _el, op!ngQYw2-fB&*yxij @,p?JlBͺcM7|=<_8NNZ`+ɫU1*Ua>D0`D)gg؃/9Tw%x90,!.K8 6JxwmRVoMb@,i@W K&G- UU\&N 1Nlaox'IcG`ߓǴ'P%!Y|yO MD}brf~z^]d?W9΍ωR캇g' ;jk.&t4x7L $(׍m7.K!2!&ёS0 Ow.BX;D^żǻ<42H+M ?e{`cP3. <PeQnvخ`t3{jh~v^oP.XŶvw;>v7DZtvcs_C J`j݅E?M)zkoWE@ޜ+ZB\fO/*U?RpձmlW"iQ?xX{Ẃ܏}">,6R0 !cCEp^ 2gC0HZU?0B%a !< aC>_XЭ|zP{E6O#]bL_;Klv<}HimJ@꒜kOnG?Qph-nZtGh07`oi [ZQUWT endstream endobj 40 0 obj <> endobj 128 0 obj <>stream xM]HSqgg;sn~p m&6&a0C+b͓[M3eƔhMl]vn&B袲n3"-E}xy0 o~Ƞ;YJA,L`cf|oW ur2Lt0 !IkƖfpE8` *t HEq[â4,xZC4p^e_ 2kBB8(}Bg,* Qعͷ3$ƅXB6O͵#H Vb#\|I'T3}LJ`>yWc ~/@Uto ,_ uF[?]'٣2?N[xv+/(ٌo> endobj 129 0 obj <>stream x%Q_Lk:3[]o1`H8g`N)*RM.=y{ן2yac`n)ݜ֗.U#]Qw A|2yAvnudƆb80=|[g.c<v@v( @d`f붏c݁eO}O{9I#ak )]<qca!5>3u=C]M|NRyjzPQ1AzpnC`#tuTESǧ[?$H0ʏC=]">.$EU?e`VVΐ'0S<~̚G܊7+ߏc6ļS?$%P<6,Ų$9#L6*R ATt/Krj)QVbNTWk[}iI\>#(\E.9X0biׯ$VO"ohI5N=uLXcn8yctYƿR e,_};g}m> endobj 130 0 obj <>stream xxiXiڂDM[[cAEqPgDCHHȜdd *GP뀢~e/sΊ>׹ΟsOzߵ$?h"GpK1X b)AX8N㿃14!I1ANߙI_Pc ♌in /5CɅRVM(26R ]i*g>۩h}̈́G^2G+h b T`*3+obb>}/N2 ?Sr6eqܒc7.t %F"̘GdGiB~!W||cf4> }z=MCSl4g_m@]%KoPqz2훲g E( ȝsONޢiٚNuR԰reњly nw4~@"JB ̈́"g_T~Ŝy E9PtN%"\R?) 1C驜:nPTTkP0gW:E>*1pYR*;KUCT=8 .]cWs1c 9]h 8Κ\VK]C9y:Aƅ|3ɠ gBʪjxϔgje_m ~}df: "qQ;ܥ>PD|#a5\u]˨Eѓ&N>+Jj.XyT\A.֡Gv_u @E'iZ;#{0ioġ\ H7xF]NW7cP< 1'U'oj>-{UխpBR)iڴLp/ӛ |AY[nOEdײl@*_uՖhi J_PrֺjwVZzܖZ&sAƻ{Å8ya/T; xpI~ ]ze.! !MQQ wNܛS y +yKP]1bkm#8ᥳ@ l;Nd|\b AYX j/~3 ӹػjxoOu$* HlY@tÇ(kqt|S.o bpfh'5AJ#} 5C'Fn|Z1D5ZvY A-GTa1Ja7ވlNcO˜}_4^9iˮ`_SƓm xv.~~b#pgd-GMN0ٖ,`!am\iZ3eE8<=!+l!xV  2  lZEYgS 5yAԠe?Fɋ'ntF?h:0k 2jXq;4k}J|JnՅo9ݝIcB=Cb[ M=KYhUks|'̥/;QiM ؇Ub9f]feXhjuǭ3gad%J"c5-}u_nq d%>|wYIKoV_Gnyck5+cxMWOE)E#4bv24$9n/÷oȶlN Z~k&k5]*ϵ·lyn37Y<#DEW=w&(Ng[-b HOg.zqKfhéWoןPy;@#)34u8ȏ)Gm!gd?mC\*%R48{YTnѯdGQpE0ؔN;\戓YV e"ιՊhT,4L7ڽmL* Q۸odAz*CW[;Pw嗞AßJ_qDpޠe?QL`\/kt%/+?! ?ރ*R-9;)`@U9^@k4Լ\A4Xc@WfWjW1-L!A݀cnd>[)ucHϯ1͠e|z+\ݓMp,+ӶńQ`ISaFt; >9>][:~8jn>ȺJ)ifR^Yp1j8c#J`*wyI닖^,p_^ak //2B*;}~!} uv *UT1i6ڴ2Cgπ<_P[ksz\(1\KM(Nz9&KɁ68 } 0b̴a>; ]=W-=`:#vvX1٩ 2\Z9}i~L2ZorZjIfG殚&gĕB$HmvhYr)p;:ӅL4_+ ѫ#B4bx.>S E/>f5 NATDoQY/K<[ QMpZ{{^Ov64A ѴEg7ݿ5tˋ|$9~:pV!Vg,fJ6e)_q_EuΟYF(6/y<^WT |dXSRi5 Q7;ʿ 0!kc" t:r:Tى ^[[WS]ەѴ}{rg&?;=oWtr6t jaЮgQ=lIfCߍ^ ו=(svIz[(|Y|\$&`l.7aI8l 4hd`bמ\q~e=K8B(> -G*j=?i1>gnOZT5瓙[kr4M}PS0u \y}0WvQs 7*ʺr\z@rYS8n6>X]^Щ;ݔ^K*zk&'ux 3ډMm^>} 'S翹|NDF^L x~-$)`l-)) ^:M5\35ѻ5zݛOnt ll° ǜ^=rؔhH qCݗO?Eq BPKmFiV10r:cB~bdE_ rxԧgA'wq/KOoZV*>*}!X {CS^q p,b©,TFZowGKMFohEr*\hN&'FAdq1?_uXRO "x~OHwy ,,-oZ& 浜jy8Wџsy5憺fE42i:H1 |tSU2ەGQȘ~x;KWT)*1T:o{y.K~)aقu~<1u,l0oba?~ GH\uJϑ]zy_+ ܫ[scxtdjfYՅg Vg:yhHv\:2-E:,EiC =e% E۹Xd.3r2#1嘍c؟i2o*yp:}kxCVes)o#̪&4*V؈lв۫M@ Q*./t*JinGh[â_QUc8̀9?z57`19 s2UXRoqwΫ:tKah:"]Aԭ7@hw*3 ˮ6k<#*9a[]UZ[R\/j.|WKW8%9'8N=+4<9Mv  i5B-}}=R6> y7~p&m6?9G*,[]z/٭+TMOɓv[e 7Bv?FD_Kq|WW9':=<ә#R${usu$EPj01.7/2-rEڮ4 Eiv$- n RN??ےZI2;.^>m䰜ν Ag 㘩#V1a%k;Z|:cOYkÛŀϾfE0UwJX SEn蔴冷-$b,zJK#Mgu+Åy_(=Jetd"6ov2ZQt2[% ;$w{ Ϣo& _JTƹyl'q%[)L!_6N%D?4XyvD̼<̻b~ʑ mNSW4])kO$1 4= 9pbi&rQBK6]n͡~j?y; y ?fj[dMR̀ pacB)k `b)'[+˚6dGX4nb=D/`C8qz:88sƷpζZ&Rթ݀Lp韨ΫGZdbսrպ^# endstream endobj 29 0 obj <> endobj 131 0 obj <>stream xURPu{Hz"!?.-lS̳ ',w b#+nvr!&^*dM&RǑgV=]u]=yA0DQTnڲSʫ`|?Nj0B!KEX*88| F!EkVepYYY2ۿe΢/kFg0Uu!R(JB-*k5E h/ڇmC%h=p 5]`DJ. s`bI'MCF1~(K$,A A,tsKP2Y6o6h v䖯$7a6=?T-cx4L Rܤ[0CӁ|( xfb0|adp ZWkլѳ|}io%xy &(v4=q$N*[eoT5 ">PMHVY5z TbKJvPgw;Zt'񘁘+]ӯvz87ƞ;;2s4C. 9h`[P1ϲbߡɓ)i$67o3!Oi.26$ ƙ8ZxZ"d5CO2 rOxR'P"y6<%]tx89$^rxfʛ>*3|oγp+f:ǀ.IT_eu xl?3Ow}Ű3sbEWh!fbRuu39-?U4`Ľ1Őb]Uo(+LndwhѮ'CvFHpBb!$q%<ŧ3iؾxǾ:lVIosonwπ,aG~Y;"PelEUqk o9o\p"6;HY=| v|R* vK#VN endstream endobj 22 0 obj <> endobj 132 0 obj <>stream xWyTS?9 8VKmZkqN !I 1$PANjzۻjuzoOvo)@ udn.ܰ.RͿ~+M{$4: zyiE~awe˗1MD uy: 5j F1{X$Je2{PVϚdZ&"YU+0՛e`b_AT[9yU4kV0F֤SQLoa m߫ z c4`WŬ0GdDkVcƠ–J"?,2X4 G2J٨ؕѤH!٬'}cbd&5OhԦO0ajժ&e02=edݿ@ h}!ĸd$ %[սƪޞB;bXL!"@b/E!AbxBl%Vۈ5D' 1 :,#t-sSzzyyiS0Sd5*6sZ´Ae>>|. _%~Eo%?4@zh&r21cUFI ˵)3w2k=襠U聫]`C`cTԂ3,%F]ZSjPI_SS&Sn%z1XTo"oi< SH?K4&x=8u8tb;xJ]i!5xw$P^42hȻ_"~BXHqYv.å^Ӊ(p!^qŏ0˟"1]_mDo}"R/%pӉ߸*N9k|1\!ؑd>j `+֏/f?QPqNdPto<0(JҀd&WGk2.EKεKtGss)>\&jk5XfIRw(vtk+@Insr * poM]SMmnc8L"*S.E yeyfs90})_Ѿ+b6j.u37;P7_8W,b(,W1-=%?<"9|GO2(y1Ve(UnAP۷mdWNxq1׏3M(rvܑzPVyEݨL %`xY ӣ2J{neU(.*ʊ@)uTXJڦ&I9\-p ND-.^J(dZ5sǍ1G}.\dEOXzu}Uhh9xpӫu_ƕÈad#u+1c%uxzpwQUPm'Gt)u ZL:Ѽ\t~(9TK wkC(kW;q^Dpu[_+jOtwvM2a2G4Rg$@-r8s>Q= .'΁6xR[Vl(Oe![\/S6gQbldhWI]CM5m.ZG٠G?4Ϸ' *y>G|rY4.iH(ɮ痁e JkdbpO(#d;0K`<#N9uH f_kԵyN:0hM3A,99 ~!WԀ;JBP&{"%Վ2_=SBPm8U}b܃_sT͇+0w|rJmZn2zaM( uu mg)M/1M ޳L=r[5OqnxdLڀ|£P:a!N=)l>c#pF)58|Q4ac%܅5y sm64͜ͅfx`' Sfk '((.hN r5+p [dI((ע(4_ZNܨ O 9Ofaw#&2Rտnx}|3ɥɹp*/(5M<6<uՔ GSCEz Nm٪LK1&xl zsĄfeyS;EmEw$0Fv'.p!N[ V8 􂟌o2$z*,))nTSC?`]jF .&WgԃwP(ĚrA8(Q*SՆTzo`t5'ԦTĥE&ܿ>Quh%eVAs{P8KU)}k P7a[W K}gFnןJwj:4eΡk4>{)!\29S諛'y~aq"91>|Mb(}>| ޝf>d2YG-*/s,י%?<8}sη.#4 7D%B}CvPz \F{zF/wĮɵh^(1{|oxo/մ\%%X pX*c{TgzGFlѾ>/W?cN=% }g8ֈ [*s Uk+Z v׷5jrmluKur2'vNOg/d\/2B endstream endobj 103 0 obj <> endobj 133 0 obj <>stream xcd`ab`dddwu041UH3a!-䏩YyyX}"I{-JVFҖɋ *23J45 --u ,sS2|K2RsKԒJ +}rbt;M̒ ԢT s~nAiIjo~JjQ^RQbrvjINjZIRfz: v$"Ȣbp|<> WCSbS͆H;e8W>Mw|]\X*y87Ob^ڗ endstream endobj 15 0 obj <> endobj 134 0 obj <>stream xU_LSWb{mI^|da121#Ȃ?[w-zm"z[JU,#z碁B-e?ك[ˮtYsr i}{ױ{ϯP*7A 57*/aExӴ̥+=#~f.nok9t ^o溬]p[Eyx 8ƞ=>>N 1a;n+6v{(x.Ϡ^%ADm.- #^[(jЩ ѢyF>jNeZ+UIGAoVic|tڇĥ+RZVC7E2V2E"$G.Fy׻H:% b'v(AzDtQS:MEuh^uht}ʵ%d!Fɟ 3ѩh8 a" -{2.Al,9+8;`)fHia!=9NJOǫK ojHk4j}C>ƿZ~ 5"^W՗[Sˣjh|?y:e?l~Гe~VB+nj݁EOnWbe H.I+2w{og%6`*p<,AO/:c 7B|vizMQao CP71&HV2az/ILI`&%˹{^N%.JgeHLϘ2ه{O> endobj 135 0 obj <>stream xcd`ab`ddd v5T~H3a!msɏ+<<,/(={ #c^qEs~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWvt-I-*)LK2@V0000z20v1012%`S;O =ߋEgM2{V5|]nRK7GQwI%K&M(WҩgNξk|εxxm endstream endobj 13 0 obj <> endobj 136 0 obj <>stream xY @֞qPuRP .uAQ}  knؑ6Qĺ+ĥ5VXI❹s\EM7J$IM`HaHMxC.Nl ˰>a_J,%- V|Nw4qƌw9M0aO@'Wg +F˃gB:>H5qN jPOYN%ArNӍ7Z&9R o\X$t0pG;Wx~k*>k|8iޝ>tưf7j4v-ogE >fPèpj5AFRkQ5ZKEP Cj!6ZD6Qw%j)5zD9S)j J-\wtʞR)@ (GJL l S=7lʎzE͡zSs>T_ČLWRD/ۭF0vHoyC%n)=?F88e:pzPp_GA&TiQ B WA(9=.990{NW Wf a^ PtY-j(J'ghBo`-vMU L?ۈJvp (YխLɺ{e( i_>=x\qV씘1{z^4lٜODc[PEw1Ym%]bL2_ExiB{dW!U-*haنQd72H?u?u򰿾2 @ ڰ8A)I_Wnsam{Yts8VPJ=*Z"Ejl3l1wƅ,B8p 7\9''3j b Ɏ6fhKݠ?==Tv'ݸqu ]7.CyE,DRTLOJSQz̷nv ;K]2 a0ߴ?(0OzkfvL;~–|fdFTbNk nv%x>̄2s>`.G8Ј=gOonrWҧŞWG. $W pxip]rnfC71ї_ @aA?PGdS*8xAoK*P7 Wp qk(7vP]#No ”0;XqT?JW>XlOM"vXƑ\p$"6#a)vDs~%&WD,(~#]qƌ.m{|3gn1pܰ䏧z6rr7n1} J%QT~TY=|a+iI"fݠ]|'l^SpOƥ ~$ K5ͅ\׹:8m+QCu:=vh"Xp;&;rh ')-IlUyi&g6w$ L@id5wvYFݫDF(CNS._/: y!ٕLwT) PzXa(~ґfݼңHe,8RG/ iw Nغ@Hc"6G̴mߝ }xw1պ;Ð;2}?SY'LA/jkV1lX@''CazN| l5*_x1^B4-ױ[VL3;)'0⼼̜!_aQ׉5B. ఩ԼduZM&*]O̺kEwB- u4.]dR*moz@8z!!Κf$ZR﻽t`,kQNpڊ쩫gfd9>cۍ-k,8} 竅l`,*,5ݪ6AwykcCaA^ȩtxӺ;Đ+_/`jٰUfcGH`#iI|؆ Ahw:Fs-sB",8ӥ[ X8^]kx0>W#ގH={=DUtD彅]ԔPVEqkքOB]~$>CJ'{.5g,5kΖ)ܺQ _iU-5kd[4T:᎙n케ɓr+١ҶZ G[mX #(+"Kn3T]qcΞ?y[Vgirv#*bڸj-|Twļh޴me%SqQ aw,?v;Z☩/V@p1ND1(1ب(eegf'ƎwXy~c)GwhyF ^Ok <[R*r*"cMsΣO )jD.'ܨԼTJ_X.|tGݧ.TjvTYaO*,zCF8ZD)̔N3Ȥ\87xMR[mʋ;{"" -(@jm񱕛6/͏B3}{pxO?m@A( y PWP1ת?>H:kk|b t5Puܺ=x \hU⫸OY?>m*‚**+W`a\u_*f6fyI=.W:`C*sCan~HlPp{rB&tL˩[Уm.3 Yp0B)XyP eʋӘ:Oq\Br$F`@4D!D، R2P.S'/ E :'}"Zk@ Jr;gz.}5fI([Q$MVB}4<^7tFŪGxSBLaYޟ~⓿ҔZH#ZX :*I'92GCM|9f]ܤmFՔZ=fg?1~(@Ƙ|^jDQJζb z+&qEzuqHͰQP%G QxlƛS\Cꊤ'k:۬P>owhIOnmfy:Dz,XIϕբ\e7uvIWBb~0"966>."=JYyJIᜃǸ$˲dB'HI>{ O. )H:9xl쵝." 3?=zZ FŽq3+U%r%'Nmx*g7&d\1^k ;<m=Pwg>] `ś֨Ŋwer{2k7O{D{~!tթ2_Ý>kO1dK)Sâ&=]Et׏pҧ Bw d⃐&ĐA' SV}\ggxLPQ0xV _@M'47ښ=ՐdQMJqDYٻ=/Y>x7hYޅ bj^.1^^sWĜDJWaIAվtc|Ҹ򕌔LhF[u~ D?觯'֣p‡YEOQ0#tn:7+q:^h:Nh֋.Ћ`1*TVVPeC3 1z_ɥJc_"xN,-k7լz)@xS߻ij׭ /oA3WNe+ d2>ryέk=|5ӍpR/* Ã'}bP Z:h3P .ה?03*4ַC=c Z6}oX;^ҬҴU+!2Ed_"DF:Hb8,9Ēv==Ζ?Yu|VurE)_[htu:JA)YQ(q[z`hlZQQ,twЅMt9=eyI$9tw4rGhakΡcw*?xF˃("5,ͬ/Jy`jZa6C?1lZ?Oƃ5{rߞ70镗7ů]Ade 3":19MȲσ^!A>Ae-e[uVU V QlAnQ`"  *?;cQ#ɋ۝`OL5!Ҋª 4LJֈmD7 wLv#x[L?X_Htpu{!lWv_eHhVސA\JHH[8{ BLT74?h*J,߀*?MXyy!O\VyEli~&ظ PRײ$)KY~ؠ_+-B%L^6$o8<1C܂kS- U\f;ZC#KV$F$e0JTG<1E39zF*|StF /ѱZaqX.(ٴ 2m3?m̿ /Cp_<BoNX_#P|<C35( o={kU2|qW'.9~l̙y 'נϵ[ZV|FDE ST( 9*bE$ZZ(}oQcݷ˯W^ktaDH>xًT6gses?'~?Vta|` H[faQPF&oB JXat,n" MнkEqb6ewbYbёĬdsiv|^d%rԖNá ~Ɣhd]7GŦƧ)SF0wM;~}9\+.|S;[qfeL6s [eaC2IӵH df"!:11E2Ir4W_Qrcܲ\LH/_asK51edR\F(QY-)LE jaQ^n` ؽq a0w£h=w\0X+0z( v(RD endstream endobj 11 0 obj <> endobj 137 0 obj <>stream xxiXS!ٻҖ4J&ֱ:TQT@$@ 328C:ktM{==wazY,i bxb“]^ |7h7=k "{31ɡS 0 :zeϏ/{'ZX#{|>oM2yZRlt͕+W)VFK_?R=I)+&eu\.IV6ֿϏU*ĒO3&uurg+ KA vmnny&nNڢتܖ=԰p]Q>1~q{${doXj휲NYPpbxMBxلx%^#9?1CN% b#1$6 “XHEb1xF,!Kweb9EE$V…/|b:J \ 1p#EOOk,"FH gBFϦ"dWj›t:\#N뗴&4˫ީ>ihxCi \>F5s`OJd2>-GCBk|E/t2Ћs`Ȩd:KׅL l ^}N"{2& (!;#S^A)h.LWj@Z; A,SE˳jD/m$2aqy;P[Pp/ ”5՟(fbg$ z/?pRT 4EҠ`%߼S)`aJŏ < 9JM_çND ;m2;JQצC|h/~_^`:l6MĐ`^mxa6;PK/Uw)&h|+_m Ф=pOJ_-o緝5Q~~63 A/I/=j?CJj")T (T=824qG5u GWi܉q4Ezr&'JyLs!kMuo*CB y= lXE|b7KE7gb8$;e.3 W X (Z5"? z-?9< Y=7//Ә&`(ԗPD5:"Rk@"J,*aʡ9*-pŅ8:o]ʴYp/2~֨bS)AIyu??88ކsckO܏fлڌl Fbn4&w{j /#Q__o3Q?,#E;YɩXGC/ԝ(YԦ w%S$;3%Ce*FvxHTlNh=foWWbЖWRA2?mF]a{*0ﲓkwɦ^'PVkg=`昝WX="W ^.Z"#&`A/`tbJ@jd\?SmZ!*L@ 22$٦4]*L; ,j1Eh6Pk 트heB+Wm,RjY/{Lf̉c%3ﲮ=0'FN7bRO6F]iN u~ z6G^ɟ[EwFF#".SnV3sMFdͱLIy(\K6Ԑ]l -@#:A,4b5lj"#icg"o騬h,0XAsZYb~hYw|ɟ\ۢ&jꀠpvAPVB/#F@(kł-D ]&7'{b`4D(. lK$o`Vae0Y~9$,8ʱrƢ߂nbC)]hձs ~cC?iN-vkE!'^Zq$-G0~o9'9dZ~Ttfy=,?1jA:YVP SnŤC^#"zp{rqho'`4fiI) ΂0C "k+P;A zx붤LR')11p6}HOx[w[t{Lų`9U^!/vMWD4);NKŝ!*c s<DQ{~{^Iao{Mn(BR׽I8:Eg/=bAkvBƉN㇦Q@}٩Y8K}Z̖5|KH{:ZXS")?iL1uP2h_ZkFo]rrJ Al ' }m¾늣WiR`Ó)K1QuINwJ_ ߧ &c| |uczrvu܅&?8V㇢7P t>'({*Le_NSsdvQlFR_@4",=x< 2}SjOޤ?3zHc狋R+Q8,u}VdG'U<;"ogUl소Lݷ/O1B.rr./`"~o,Ϗ\$Ƙ1=v-,r[E &BKA94Npl20bK* ɣ` _TdʖֆeOħ :\?ڟ 퇩!xuZPu4F~d!q$(m!x΁B% pKuITA`0馩w"O.(XUdA3q?KzKJXka~irA}ZB5rMmE i6BV:_cFF&&jA o$mBLE&XF88rbJ4+W +ɬ/d֙46TfP+2\ꎺlz6gRj>Q_S'mi= LҫᲉ!V@VvGw5@=8bmKDh d3] q_|c\? y|j;(aBhr6%f(4zUU=vP8(0T-Lkwr\n|PzEkD 2Vdp{Z 0ZM~ W?m ;flՠkYbNQs &yܲ~n@ɨS;\jޮkSa|RmF'Fԝw Hatڛ N{;\1}bzUOTh.N)+^'JMی-װ 6; jc"F\feK{CO+.ayܣo#D^f8:ADpt|)6/ \taUwMqyE%4z95YCWk-g&pQל\3d[Ɲ[\| ʮ*$S]* skնإ.>Gd֙o 9p+?ߍEӾ wxg]ا/g#^ +;+f˘ CS +d>t_En\>%!7|c$ V'R<ԜL}LԺsD5CrF9ZٰYpOHJH%7jmOlJ!_Ϝp8 n' \4,'q߀A_EO› | \ f[܁]`7%>pCi6MBcاLe-ݧ{DPa_`kPN2])0+_a2ٙ 4%oLZpBȄȜ'~3yRw|*K^+IdvKfuI>ӚϣGdg:FeDpﻬ>|/.`( 9ѹ$>qkBT k *ᱦq&Vwh= L'F$Y詣~='c; )Q0l1| &A$FPC #a~$rNu{m{3meS>: // endstream endobj 42 0 obj <> endobj 138 0 obj <>stream xcd`ab`dddw441U~H3a!;{Wnn }O=\19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMUMB9)槤1000Y[102ߡ ;|e{|٢M)YE L?e\_oOOO7GOOWcV|CCwgwG˄ n)4+ïC(^W\xŊŋW.璉<< `j endstream endobj 149 0 obj <>stream 2019-05-28T12:10:11+02:00 2019-05-28T12:10:11+02:00 dvips(k) 5.997 Copyright 2017 Radical Eye Software manual.dvi endstream endobj 2 0 obj <>endobj xref 0 150 0000000000 65535 f 0000083895 00000 n 0000132192 00000 n 0000083705 00000 n 0000080594 00000 n 0000000015 00000 n 0000001840 00000 n 0000083961 00000 n 0000086567 00000 n 0000092804 00000 n 0000090992 00000 n 0000121671 00000 n 0000090419 00000 n 0000114268 00000 n 0000089337 00000 n 0000112174 00000 n 0000084002 00000 n 0000084032 00000 n 0000080754 00000 n 0000001860 00000 n 0000002885 00000 n 0000088247 00000 n 0000107456 00000 n 0000084095 00000 n 0000084125 00000 n 0000080916 00000 n 0000002905 00000 n 0000008338 00000 n 0000087954 00000 n 0000106112 00000 n 0000087530 00000 n 0000099588 00000 n 0000087353 00000 n 0000098391 00000 n 0000084177 00000 n 0000084207 00000 n 0000081078 00000 n 0000008359 00000 n 0000018397 00000 n 0000087083 00000 n 0000097422 00000 n 0000091738 00000 n 0000130077 00000 n 0000086325 00000 n 0000091984 00000 n 0000084303 00000 n 0000084333 00000 n 0000081240 00000 n 0000018418 00000 n 0000026620 00000 n 0000084462 00000 n 0000084492 00000 n 0000081410 00000 n 0000026641 00000 n 0000030043 00000 n 0000090156 00000 n 0000113651 00000 n 0000084612 00000 n 0000084642 00000 n 0000081572 00000 n 0000030064 00000 n 0000035030 00000 n 0000084727 00000 n 0000084757 00000 n 0000081742 00000 n 0000035051 00000 n 0000039975 00000 n 0000084864 00000 n 0000084894 00000 n 0000081904 00000 n 0000039996 00000 n 0000045216 00000 n 0000084981 00000 n 0000085011 00000 n 0000082066 00000 n 0000045237 00000 n 0000049779 00000 n 0000085098 00000 n 0000085128 00000 n 0000082228 00000 n 0000049800 00000 n 0000054600 00000 n 0000085224 00000 n 0000085254 00000 n 0000082390 00000 n 0000054621 00000 n 0000057202 00000 n 0000085363 00000 n 0000085393 00000 n 0000082552 00000 n 0000057223 00000 n 0000060857 00000 n 0000085511 00000 n 0000085541 00000 n 0000082714 00000 n 0000060878 00000 n 0000066724 00000 n 0000085650 00000 n 0000085680 00000 n 0000082876 00000 n 0000066745 00000 n 0000070059 00000 n 0000088788 00000 n 0000111522 00000 n 0000085798 00000 n 0000085829 00000 n 0000083041 00000 n 0000070081 00000 n 0000072968 00000 n 0000085952 00000 n 0000085983 00000 n 0000083207 00000 n 0000072990 00000 n 0000076289 00000 n 0000086060 00000 n 0000086091 00000 n 0000083373 00000 n 0000076311 00000 n 0000077867 00000 n 0000086157 00000 n 0000086188 00000 n 0000083539 00000 n 0000077889 00000 n 0000080572 00000 n 0000086230 00000 n 0000086261 00000 n 0000092202 00000 n 0000093199 00000 n 0000097693 00000 n 0000098612 00000 n 0000099969 00000 n 0000106364 00000 n 0000107771 00000 n 0000111765 00000 n 0000112470 00000 n 0000113876 00000 n 0000114844 00000 n 0000122205 00000 n 0000130304 00000 n 0000086480 00000 n 0000088704 00000 n 0000088941 00000 n 0000089056 00000 n 0000089734 00000 n 0000089925 00000 n 0000090320 00000 n 0000090899 00000 n 0000091637 00000 n 0000091889 00000 n 0000130736 00000 n trailer << /Size 150 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 132397 %%EOF crystcat/doc/manual.bbl0000644000371700037170000000127013503171610016622 0ustar gap-jenkinsgap-jenkins\begin{thebibliography}{BBNWZ78} \bibitem[BBNWZ78]{BBNWZ78} H. Brown, R. B{\accent127 u}low, J. Neub{\accent127 u}ser, H. Wondratschek, and H. Zassenhaus. \newblock {\em Crystallographic Groups of Four-Dimensional Space}. \newblock John Wiley, New York, 1978. \bibitem[Hah95]{Hah95} T. Hahn, editor. \newblock {\em International Tables for Crystallography, Volume A, Space-group Symmetry, 4th Edition}. \newblock Kluwer, Dordrecht, 1995. \bibitem[NPW81]{NPW81} J. Neub{\accent127 u}ser, W. Plesken, and H. Wondratschek. \newblock An emendatory discursion on defining crystal systems. \newblock {\em Match}, 10:77--96, 1981. \end{thebibliography}